summaryrefslogtreecommitdiff
path: root/source4/pidl
diff options
context:
space:
mode:
authorStefan Metzmacher <metze@samba.org>2008-02-01 23:09:37 +0100
committerStefan Metzmacher <metze@samba.org>2008-02-01 23:15:16 +0100
commit2670c954466683bc3769fae4505baa78ec43a253 (patch)
tree2e7d94035b1dc7cf6f5823f3ac0ff52ce7ed4d43 /source4/pidl
parent19898379bd23e4df1249aa78f50a2947ab63c7cf (diff)
downloadsamba-2670c954466683bc3769fae4505baa78ec43a253.tar.gz
samba-2670c954466683bc3769fae4505baa78ec43a253.tar.bz2
samba-2670c954466683bc3769fae4505baa78ec43a253.zip
WORKS!!!...pidl/NDR: fix handling of multilevel pointers in function elements
The 2nd or higher level of wire pointers needs to be marked as deferred. metze (This used to be commit 6fcf2456d0e81898b5779ef1650f38b4c5363a80)
Diffstat (limited to 'source4/pidl')
-rw-r--r--source4/pidl/lib/Parse/Pidl/NDR.pm8
-rwxr-xr-xsource4/pidl/tests/ndr.pl20
2 files changed, 14 insertions, 14 deletions
diff --git a/source4/pidl/lib/Parse/Pidl/NDR.pm b/source4/pidl/lib/Parse/Pidl/NDR.pm
index 7d8907c6b5..003eaf0ba7 100644
--- a/source4/pidl/lib/Parse/Pidl/NDR.pm
+++ b/source4/pidl/lib/Parse/Pidl/NDR.pm
@@ -173,9 +173,9 @@ sub GetElementLevelTable($$)
#
# --metze
#
- if ($i == 1) {
- $pt = pointer_type($e);
- } else {
+ $pt = pointer_type($e);
+ if ($i > 1) {
+ $is_deferred = 1 if ($pt ne "ref" and $e->{PARENT}->{TYPE} eq "FUNCTION");
$pt = $pointer_default;
}
@@ -195,7 +195,7 @@ sub GetElementLevelTable($$)
$pointer_idx++;
# everything that follows will be deferred
- $is_deferred = 1 if ($e->{PARENT}->{TYPE} ne "FUNCTION");
+ $is_deferred = 1 if ($level ne "TOP");
my $array_size = shift @size_is;
my $array_length;
diff --git a/source4/pidl/tests/ndr.pl b/source4/pidl/tests/ndr.pl
index 758c3dddb7..504b7ec8de 100755
--- a/source4/pidl/tests/ndr.pl
+++ b/source4/pidl/tests/ndr.pl
@@ -299,14 +299,14 @@ is_deeply(GetElementLevelTable($e, "unique"), [
},
{
LEVEL_INDEX => 2,
- IS_DEFERRED => 0,
+ IS_DEFERRED => 1,
TYPE => 'POINTER',
POINTER_TYPE => "unique",
POINTER_INDEX => 2,
LEVEL => 'EMBEDDED'
},
{
- 'IS_DEFERRED' => 0,
+ 'IS_DEFERRED' => 1,
'LEVEL_INDEX' => 3,
'DATA_TYPE' => 'uint8',
'CONTAINS_DEFERRED' => 0,
@@ -337,7 +337,7 @@ is_deeply(GetElementLevelTable($e, "unique"), [
},
{
LEVEL_INDEX => 1,
- IS_DEFERRED => 0,
+ IS_DEFERRED => 1,
TYPE => 'POINTER',
POINTER_TYPE => "unique",
POINTER_INDEX => 1,
@@ -345,14 +345,14 @@ is_deeply(GetElementLevelTable($e, "unique"), [
},
{
LEVEL_INDEX => 2,
- IS_DEFERRED => 0,
+ IS_DEFERRED => 1,
TYPE => 'POINTER',
POINTER_TYPE => "unique",
POINTER_INDEX => 2,
LEVEL => 'EMBEDDED'
},
{
- 'IS_DEFERRED' => 0,
+ 'IS_DEFERRED' => 1,
'LEVEL_INDEX' => 3,
'DATA_TYPE' => 'uint8',
'CONTAINS_DEFERRED' => 0,
@@ -383,7 +383,7 @@ is_deeply(GetElementLevelTable($e, "ref"), [
},
{
LEVEL_INDEX => 1,
- IS_DEFERRED => 0,
+ IS_DEFERRED => 1,
TYPE => 'POINTER',
POINTER_TYPE => "ref",
POINTER_INDEX => 1,
@@ -391,14 +391,14 @@ is_deeply(GetElementLevelTable($e, "ref"), [
},
{
LEVEL_INDEX => 2,
- IS_DEFERRED => 0,
+ IS_DEFERRED => 1,
TYPE => 'POINTER',
POINTER_TYPE => "ref",
POINTER_INDEX => 2,
LEVEL => 'EMBEDDED'
},
{
- 'IS_DEFERRED' => 0,
+ 'IS_DEFERRED' => 1,
'LEVEL_INDEX' => 3,
'DATA_TYPE' => 'uint8',
'CONTAINS_DEFERRED' => 0,
@@ -437,14 +437,14 @@ is_deeply(GetElementLevelTable($e, "ref"), [
},
{
LEVEL_INDEX => 2,
- IS_DEFERRED => 0,
+ IS_DEFERRED => 1,
TYPE => 'POINTER',
POINTER_TYPE => "ref",
POINTER_INDEX => 2,
LEVEL => 'EMBEDDED'
},
{
- 'IS_DEFERRED' => 0,
+ 'IS_DEFERRED' => 1,
'LEVEL_INDEX' => 3,
'DATA_TYPE' => 'uint8',
'CONTAINS_DEFERRED' => 0,