From e3e048630be2fbf20d580850e5673ad372bd34f0 Mon Sep 17 00:00:00 2001 From: Andrew Tridgell Date: Tue, 28 Feb 2006 03:42:19 +0000 Subject: r13738: added support for a "pointer" type in pidl. This will be used in the opendb work that will be committed shortly. The pointer type assumes that pointers fit in 64 bits, which is probably OK on all our supported architectures. (This used to be commit d2a2057ea5af140ca88a9c305a38fc5dca9eaafd) --- source4/librpc/ndr/ndr_basic.c | 27 +++++++++++++++++++++++++++ source4/pidl/lib/Parse/Pidl/NDR.pm | 1 + source4/pidl/lib/Parse/Pidl/Typelist.pm | 5 +++++ 3 files changed, 33 insertions(+) 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 @@ -192,6 +192,19 @@ NTSTATUS ndr_pull_hyper(struct ndr_pull *ndr, int ndr_flags, uint64_t *v) return ndr_pull_udlong(ndr, ndr_flags, 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 */ @@ -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" => { -- cgit