diff options
author | Jelmer Vernooij <jelmer@samba.org> | 2004-10-15 09:22:21 +0000 |
---|---|---|
committer | Gerald (Jerry) Carter <jerry@samba.org> | 2007-10-10 12:59:55 -0500 |
commit | fe15b46d61ee50f4225458faf963c818cde3e283 (patch) | |
tree | 379b76701f6b9b20341953eae9f344c397ee7008 /source4/librpc/ndr | |
parent | 42c810cea660f59cae8c30b12a5419450e923a2b (diff) | |
download | samba-fe15b46d61ee50f4225458faf963c818cde3e283.tar.gz samba-fe15b46d61ee50f4225458faf963c818cde3e283.tar.bz2 samba-fe15b46d61ee50f4225458faf963c818cde3e283.zip |
r2990: Add support to pidl for autogenerating ndr_size_*() functions. Adding
the [gensize] property to a struct or union will make pidl generate a
ndr_size_*() function.
(not all nasty bits of NDR are completely covered yet by the
ndr_size*() functions, support for those will be added when necessary)
I also have a local patch (not applied now) that simplifies the pidl output
and eliminates the number of functions required. It would, however, make
pidl more complex.
(This used to be commit 7c823f886afd0c4c6ee838f17882ca0658417011)
Diffstat (limited to 'source4/librpc/ndr')
-rw-r--r-- | source4/librpc/ndr/libndr.h | 5 | ||||
-rw-r--r-- | source4/librpc/ndr/ndr_basic.c | 12 |
2 files changed, 17 insertions, 0 deletions
diff --git a/source4/librpc/ndr/libndr.h b/source4/librpc/ndr/libndr.h index 59e8b744df..306e480c98 100644 --- a/source4/librpc/ndr/libndr.h +++ b/source4/librpc/ndr/libndr.h @@ -188,6 +188,11 @@ enum ndr_err_code { } \ } while(0) +#define NDR_SIZE_ALIGN(t, n, flags) ((flags & LIBNDR_FLAG_NOALIGN)?(t):(((t) + (n-1)) & ~(n-1))) +#define ndr_size_uint8(t, p, flags) (NDR_SIZE_ALIGN(t, 1, flags) + 1) +#define ndr_size_uint16(t, p, flags) (NDR_SIZE_ALIGN(t, 2, flags) + 2) +#define ndr_size_uint32(t, p, flags) (NDR_SIZE_ALIGN(t, 4, flags) + 4) +#define ndr_size_ptr(t, p, flags) (NDR_SIZE_ALIGN(t, 4, flags) + 4) /* these are used to make the error checking on each element in libndr less tedious, hopefully making the code more readable */ diff --git a/source4/librpc/ndr/ndr_basic.c b/source4/librpc/ndr/ndr_basic.c index edb1590489..5808ae7452 100644 --- a/source4/librpc/ndr/ndr_basic.c +++ b/source4/librpc/ndr/ndr_basic.c @@ -1130,3 +1130,15 @@ NTSTATUS ndr_pull_DATA_BLOB(struct ndr_pull *ndr, DATA_BLOB *blob) ndr->offset += length; return NT_STATUS_OK; } + +uint32 ndr_size_DATA_BLOB(int ret, const DATA_BLOB *data, int flags) +{ + return ret + data->length; +} + +uint32 ndr_size_string(int ret, const char **string, int flags) +{ + /* FIXME: Is this correct for all strings ? */ + if(!(*string)) return ret; + return ret+strlen(*string)+1; +} |