diff options
-rw-r--r-- | source4/librpc/ndr/ndr_basic.c | 27 | ||||
-rw-r--r-- | source4/pidl/lib/Parse/Pidl/NDR.pm | 1 | ||||
-rw-r--r-- | source4/pidl/lib/Parse/Pidl/Typelist.pm | 5 |
3 files changed, 33 insertions, 0 deletions
diff --git a/source4/librpc/ndr/ndr_basic.c b/source4/librpc/ndr/ndr_basic.c index 615119fad3..8020c7da23 100644 --- a/source4/librpc/ndr/ndr_basic.c +++ b/source4/librpc/ndr/ndr_basic.c @@ -193,6 +193,19 @@ NTSTATUS ndr_pull_hyper(struct ndr_pull *ndr, int ndr_flags, uint64_t *v) } /* + parse a pointer +*/ +NTSTATUS ndr_pull_pointer(struct ndr_pull *ndr, int ndr_flags, void* *v) +{ + uint64_t h; + NTSTATUS status; + NDR_PULL_ALIGN(ndr, 8); + status = ndr_pull_udlong(ndr, ndr_flags, &h); + *v = (void *)((intptr_t)h); + return status; +} + +/* pull a NTSTATUS */ NTSTATUS ndr_pull_NTSTATUS(struct ndr_pull *ndr, int ndr_flags, NTSTATUS *status) @@ -375,6 +388,15 @@ NTSTATUS ndr_push_hyper(struct ndr_push *ndr, int ndr_flags, uint64_t v) return ndr_push_udlong(ndr, NDR_SCALARS, v); } +/* + push a pointer +*/ +NTSTATUS ndr_push_pointer(struct ndr_push *ndr, int ndr_flags, void* v) +{ + NDR_PUSH_ALIGN(ndr, 8); + return ndr_push_udlong(ndr, NDR_SCALARS, (intptr_t)v); +} + NTSTATUS ndr_push_align(struct ndr_push *ndr, size_t size) { NDR_PUSH_ALIGN(ndr, size); @@ -671,6 +693,11 @@ void ndr_print_hyper(struct ndr_print *ndr, const char *name, uint64_t v) ndr_print_dlong(ndr, name, v); } +void ndr_print_pointer(struct ndr_print *ndr, const char *name, void *v) +{ + ndr->print(ndr, "%-25s: %p", name, v); +} + void ndr_print_ptr(struct ndr_print *ndr, const char *name, const void *p) { if (p) { diff --git a/source4/pidl/lib/Parse/Pidl/NDR.pm b/source4/pidl/lib/Parse/Pidl/NDR.pm index 179d2ecb12..48d3ebf170 100644 --- a/source4/pidl/lib/Parse/Pidl/NDR.pm +++ b/source4/pidl/lib/Parse/Pidl/NDR.pm @@ -51,6 +51,7 @@ my $scalar_alignment = { 'int32' => 4, 'uint32' => 4, 'hyper' => 8, + 'pointer' => 8, 'dlong' => 4, 'udlong' => 4, 'udlongr' => 4, diff --git a/source4/pidl/lib/Parse/Pidl/Typelist.pm b/source4/pidl/lib/Parse/Pidl/Typelist.pm index 67e348c5fe..b54badaeb6 100644 --- a/source4/pidl/lib/Parse/Pidl/Typelist.pm +++ b/source4/pidl/lib/Parse/Pidl/Typelist.pm @@ -73,6 +73,11 @@ my $scalars = { C_TYPE => "uint64_t", IS_REFERENCE => 0, }, + # assume its a 8 byte type, but cope with either + "pointer" => { + C_TYPE => "void*", + IS_REFERENCE => 0, + }, # DATA_BLOB types "DATA_BLOB" => { |