mirror of
https://github.com/samba-team/samba.git
synced 2024-12-24 21:34:56 +03:00
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 d7970d7032
)
This commit is contained in:
parent
1ea5b06307
commit
c713b58a00
@ -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;
|
||||
|
@ -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,
|
||||
|
Loading…
Reference in New Issue
Block a user