summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJelmer Vernooij <jelmer@samba.org>2006-11-23 13:48:01 +0000
committerGerald (Jerry) Carter <jerry@samba.org>2007-10-10 14:28:26 -0500
commit128fe5324b803e0989273c7033ec0b5c8bd3dbae (patch)
treeb7bde249d06cb815dd296e5710128b76d981e9c3
parent6166693a8c17639b60e046be3acdc38f4bea4aa6 (diff)
downloadsamba-128fe5324b803e0989273c7033ec0b5c8bd3dbae.tar.gz
samba-128fe5324b803e0989273c7033ec0b5c8bd3dbae.tar.bz2
samba-128fe5324b803e0989273c7033ec0b5c8bd3dbae.zip
r19856: Use sptr as basis for full ptr implementation. Will add checks for duplicates later.
(This used to be commit 006ab1d4a449c81680add57e0116a86b8317fbfb)
-rw-r--r--source4/librpc/idl/epmapper.idl12
-rw-r--r--source4/librpc/ndr/ndr_basic.c2
-rw-r--r--source4/pidl/lib/Parse/Pidl/NDR.pm15
-rw-r--r--source4/pidl/lib/Parse/Pidl/Samba4/NDR/Parser.pm6
4 files changed, 13 insertions, 22 deletions
diff --git a/source4/librpc/idl/epmapper.idl b/source4/librpc/idl/epmapper.idl
index 12b9e99c21..8920869c87 100644
--- a/source4/librpc/idl/epmapper.idl
+++ b/source4/librpc/idl/epmapper.idl
@@ -248,8 +248,8 @@ interface epmapper
/* Function 0x02 */
error_status_t epm_Lookup(
[in] uint32 inquiry_type,
- [in,sptr] GUID *object,
- [in,sptr] rpc_if_id_t *interface_id,
+ [in,ptr] GUID *object,
+ [in,ptr] rpc_if_id_t *interface_id,
[in] uint32 vers_option,
[in,out] policy_handle *entry_handle,
[in] uint32 max_ents,
@@ -266,8 +266,8 @@ interface epmapper
} epm_twr_p_t;
error_status_t epm_Map(
- [in,sptr] GUID *object,
- [in,sptr] epm_twr_t *map_tower,
+ [in,ptr] GUID *object,
+ [in,ptr] epm_twr_t *map_tower,
[in,out] policy_handle *entry_handle,
[in] uint32 max_towers,
[out] uint32 *num_towers,
@@ -292,8 +292,8 @@ interface epmapper
/* Function 0x06 */
error_status_t epm_MgmtDelete(
[in] uint32 object_speced,
- [in,sptr] GUID *object,
- [in,sptr] epm_twr_t *tower
+ [in,ptr] GUID *object,
+ [in,ptr] epm_twr_t *tower
);
/**********************/
diff --git a/source4/librpc/ndr/ndr_basic.c b/source4/librpc/ndr/ndr_basic.c
index ed79f354fa..b8f2a8115f 100644
--- a/source4/librpc/ndr/ndr_basic.c
+++ b/source4/librpc/ndr/ndr_basic.c
@@ -481,7 +481,7 @@ _PUBLIC_ NTSTATUS ndr_push_unique_ptr(struct ndr_push *ndr, const void *p)
/*
push a 'simple' full non-zero value if a pointer is non-NULL, otherwise 0
*/
-_PUBLIC_ NTSTATUS ndr_push_sptr_ptr(struct ndr_push *ndr, const void *p)
+_PUBLIC_ NTSTATUS ndr_push_full_ptr(struct ndr_push *ndr, const void *p)
{
uint32_t ptr = 0;
if (p) {
diff --git a/source4/pidl/lib/Parse/Pidl/NDR.pm b/source4/pidl/lib/Parse/Pidl/NDR.pm
index 9048a25684..9670e05744 100644
--- a/source4/pidl/lib/Parse/Pidl/NDR.pm
+++ b/source4/pidl/lib/Parse/Pidl/NDR.pm
@@ -309,7 +309,7 @@ sub pointer_type($)
return undef unless $e->{POINTERS};
return "ref" if (has_property($e, "ref"));
- return "ptr" if (has_property($e, "ptr"));
+ return "full" if (has_property($e, "ptr"));
return "sptr" if (has_property($e, "sptr"));
return "unique" if (has_property($e, "unique"));
return "relative" if (has_property($e, "relative"));
@@ -789,7 +789,6 @@ my %property_list = (
# pointer
"ref" => ["ELEMENT"],
"ptr" => ["ELEMENT"],
- "sptr" => ["ELEMENT"],
"unique" => ["ELEMENT"],
"ignore" => ["ELEMENT"],
"relative" => ["ELEMENT"],
@@ -885,10 +884,6 @@ sub ValidElement($)
ValidProperties($e,"ELEMENT");
- if (has_property($e, "ptr")) {
- fatal($e, el_name($e) . " : pidl does not support full NDR pointers yet\n");
- }
-
# Check whether switches are used correctly.
if (my $switch = has_property($e, "switch_is")) {
my $e2 = find_sibling($e, $switch);
@@ -946,7 +941,6 @@ sub ValidElement($)
if (!$e->{POINTERS} && (
has_property($e, "ptr") or
- has_property($e, "sptr") or
has_property($e, "unique") or
has_property($e, "relative") or
has_property($e, "ref"))) {
@@ -1055,11 +1049,8 @@ sub ValidInterface($)
ValidProperties($interface,"INTERFACE");
if (has_property($interface, "pointer_default")) {
- if ($interface->{PROPERTIES}->{pointer_default} eq "ptr") {
- nonfatal $interface, "Full pointers are not supported yet, falling back to sptr";
- $interface->{PROPERTIES}->{pointer_default} = "sptr";
- } elsif (not grep (/$interface->{PROPERTIES}->{pointer_default}/,
- ("ref", "unique", "ptr", "sptr"))) {
+ if (not grep (/$interface->{PROPERTIES}->{pointer_default}/,
+ ("ref", "unique", "ptr"))) {
fatal $interface, "Unknown default pointer type `$interface->{PROPERTIES}->{pointer_default}'";
}
}
diff --git a/source4/pidl/lib/Parse/Pidl/Samba4/NDR/Parser.pm b/source4/pidl/lib/Parse/Pidl/Samba4/NDR/Parser.pm
index d871ed38bb..f104ffbad8 100644
--- a/source4/pidl/lib/Parse/Pidl/Samba4/NDR/Parser.pm
+++ b/source4/pidl/lib/Parse/Pidl/Samba4/NDR/Parser.pm
@@ -669,8 +669,8 @@ sub ParsePtrPush($$$)
pidl "NDR_CHECK(ndr_push_relative_ptr1(ndr, $var_name));";
} elsif ($l->{POINTER_TYPE} eq "unique") {
pidl "NDR_CHECK(ndr_push_unique_ptr(ndr, $var_name));";
- } elsif ($l->{POINTER_TYPE} eq "sptr") {
- pidl "NDR_CHECK(ndr_push_sptr_ptr(ndr, $var_name));";
+ } elsif ($l->{POINTER_TYPE} eq "full") {
+ pidl "NDR_CHECK(ndr_push_full_ptr(ndr, $var_name));";
} else {
die("Unhandled pointer type $l->{POINTER_TYPE}");
}
@@ -1085,7 +1085,7 @@ sub ParsePtrPull($$$$)
return;
} elsif (($l->{POINTER_TYPE} eq "unique") or
($l->{POINTER_TYPE} eq "relative") or
- ($l->{POINTER_TYPE} eq "sptr")) {
+ ($l->{POINTER_TYPE} eq "full")) {
pidl "NDR_CHECK(ndr_pull_generic_ptr($ndr, &_ptr_$e->{NAME}));";
pidl "if (_ptr_$e->{NAME}) {";
indent;