Author: jelmer
Date: 2005-02-21 22:59:06 +0000 (Mon, 21 Feb 2005)
New Revision: 5493

WebSVN: http://websvn.samba.org/cgi-bin/viewcvs.cgi?view=rev&root=samba&rev=5493

Log:
Some code simplification

Modified:
   branches/SAMBA_4_0/source/build/pidl/ndr.pm


Changeset:
Modified: branches/SAMBA_4_0/source/build/pidl/ndr.pm
===================================================================
--- branches/SAMBA_4_0/source/build/pidl/ndr.pm 2005-02-21 20:51:26 UTC (rev 
5492)
+++ branches/SAMBA_4_0/source/build/pidl/ndr.pm 2005-02-21 22:59:06 UTC (rev 
5493)
@@ -619,7 +619,7 @@
        if (util::has_property($e, "relative")) {
                pidl "NDR_CHECK(ndr_push_relative_ptr1(ndr, 
$ptr_prefix$var_prefix$e->{NAME}));";
        } elsif (need_wire_pointer($e)) {
-               ParseElementPushPtr($e, $ptr_prefix.$var_prefix, "NDR_SCALARS");
+               ParseElementPushPtr($e, $ptr_prefix.$var_prefix);
        } elsif (is_inline_array($e)) {
                ParseArrayPush($e, "r->", "NDR_SCALARS");
        } elsif (need_alloc($e)) {
@@ -637,11 +637,10 @@
 
 #####################################################################
 # parse a pointer in a struct element or function
-sub ParseElementPushPtr($$$)
+sub ParseElementPushPtr($$)
 {
        my $e = shift;
        my $var_prefix = shift;
-       my $ndr_flags = shift;
 
        pidl "NDR_CHECK(ndr_push_unique_ptr(ndr, $var_prefix$e->{NAME}));";
 }
@@ -848,11 +847,10 @@
 
 #####################################################################
 # parse buffers in a structure element
-sub ParseElementPushBuffer($$$)
+sub ParseElementPushBuffer($$)
 {
        my($e) = shift;
        my($var_prefix) = shift;
-       my($ndr_flags) = shift;
        my $cprefix = c_push_prefix($e);
        my $sub_size = util::has_property($e, "subcontext");
 
@@ -863,33 +861,31 @@
        my $pointers = c_ptr_prefix($e);
        for my $i (1..need_wire_pointer($e)) {
                if ($i > 1) {
-                       
ParseElementPushPtr($e,$pointers.$var_prefix,$ndr_flags);
+                       ParseElementPushPtr($e,$pointers.$var_prefix);
                }
                pidl "if ($pointers$var_prefix$e->{NAME}) {";
                indent;
                $pointers.="*";
        }
-               
+       
        if (util::has_property($e, "relative")) {
                pidl "NDR_CHECK(ndr_push_relative_ptr2(ndr, 
$var_prefix$e->{NAME}));";
        }
+
+       my $ndr_flags = "NDR_BUFFERS";
+       if ($e->{POINTERS} || (util::array_size($e) && !is_inline_array($e)))
+       {
+               $ndr_flags="NDR_SCALARS|$ndr_flags" 
+       }
            
-       if (is_inline_array($e)) {
-               ParseArrayPush($e, "r->", "NDR_BUFFERS");
-       } elsif (util::array_size($e)) {
-               ParseArrayPush($e, "r->", "NDR_SCALARS|NDR_BUFFERS");
+       if (util::array_size($e)) {
+               ParseArrayPush($e, "r->", $ndr_flags);
        } elsif (my $switch = util::has_property($e, "switch_is")) {
-               if ($e->{POINTERS}) {
-                       ParseElementPushSwitch($e, $var_prefix, 
"NDR_BUFFERS|NDR_SCALARS", $switch);
-               } else {
-                       ParseElementPushSwitch($e, $var_prefix, "NDR_BUFFERS", 
$switch);
-               }
+               ParseElementPushSwitch($e, $var_prefix, $ndr_flags, $switch);
        } elsif (defined $sub_size) {
                if ($e->{POINTERS}) {
                        pidl "NDR_CHECK(ndr_push_subcontext_flags_fn(ndr, 
$sub_size, $cprefix$var_prefix$e->{NAME}, (ndr_push_flags_fn_t) 
ndr_push_$e->{TYPE}));";
                }
-       } elsif ($e->{POINTERS}) {
-               pidl "NDR_CHECK(ndr_push_$e->{TYPE}(ndr, 
NDR_SCALARS|NDR_BUFFERS, $cprefix$var_prefix$e->{NAME}));";
        } else {
                pidl "NDR_CHECK(ndr_push_$e->{TYPE}(ndr, $ndr_flags, 
$cprefix$var_prefix$e->{NAME}));";
        }
@@ -904,11 +900,10 @@
 
 #####################################################################
 # parse buffers in a structure element - pull side
-sub ParseElementPullBuffer($$$)
+sub ParseElementPullBuffer($$)
 {
        my($e) = shift;
        my($var_prefix) = shift;
-       my($ndr_flags) = shift;
        my $cprefix = c_pull_prefix($e);
        my $sub_size = util::has_property($e, "subcontext");
 
@@ -931,23 +926,21 @@
                pidl "ndr_pull_save(ndr, &_relative_save);";
                pidl "NDR_CHECK(ndr_pull_relative_ptr2(ndr, 
$var_prefix$e->{NAME}));";
        }
+
+       my $ndr_flags = "NDR_BUFFERS";
+       if ($e->{POINTERS} || (util::array_size($e) && !is_inline_array($e)))
+       {
+               $ndr_flags="NDR_SCALARS|$ndr_flags" 
+       }
            
-       if (is_inline_array($e)) {
-               ParseArrayPull($e, "r->", "NDR_BUFFERS");
-       } elsif (util::array_size($e)) {
-               ParseArrayPull($e, "r->", "NDR_SCALARS|NDR_BUFFERS");
+       if (util::array_size($e)) {
+               ParseArrayPull($e, "r->", $ndr_flags);
        } elsif (my $switch = util::has_property($e, "switch_is")) {
-               if ($e->{POINTERS}) {
-                       ParseElementPullSwitch($e, $var_prefix, 
"NDR_SCALARS|NDR_BUFFERS", $switch);
-               } else {
-                       ParseElementPullSwitch($e, $var_prefix, "NDR_BUFFERS", 
$switch);
-               }
+               ParseElementPullSwitch($e, $var_prefix, $ndr_flags, $switch);
        } elsif (defined $sub_size) {
                if ($e->{POINTERS}) {
                        pidl "NDR_CHECK(ndr_pull_subcontext_flags_fn(ndr, 
$sub_size, $cprefix$var_prefix$e->{NAME}, (ndr_pull_flags_fn_t) 
ndr_pull_$e->{TYPE}));";
                }
-       } elsif ($e->{POINTERS}) {
-               pidl "NDR_CHECK(ndr_pull_$e->{TYPE}(ndr, 
NDR_SCALARS|NDR_BUFFERS, $cprefix$var_prefix$e->{NAME}));";
        } else {
                pidl "NDR_CHECK(ndr_pull_$e->{TYPE}(ndr, $ndr_flags, 
$cprefix$var_prefix$e->{NAME}));";
        }
@@ -1002,7 +995,7 @@
        pidl "buffers:";
        pidl "if (!(ndr_flags & NDR_BUFFERS)) goto done;";
        foreach my $e (@{$struct->{ELEMENTS}}) {
-               ParseElementPushBuffer($e, "r->", "NDR_BUFFERS");
+               ParseElementPushBuffer($e, "r->");
        }
 
        pidl "ndr_push_struct_end(ndr);";
@@ -1276,7 +1269,7 @@
        pidl "buffers:\n";
        pidl "if (!(ndr_flags & NDR_BUFFERS)) goto done;";
        foreach my $e (@{$struct->{ELEMENTS}}) {
-               ParseElementPullBuffer($e, "r->", "NDR_BUFFERS");
+               ParseElementPullBuffer($e, "r->");
        }
 
        foreach my $e (@{$struct->{ELEMENTS}}) {
@@ -1406,7 +1399,7 @@
                }
                if ($el->{TYPE} ne "EMPTY") {
                        indent;
-                       ParseElementPushBuffer($el, "r->", "NDR_BUFFERS");
+                       ParseElementPushBuffer($el, "r->");
                        deindent;
                }
                pidl "break;";
@@ -1515,7 +1508,7 @@
                }
                if ($el->{TYPE} ne "EMPTY") {
                        indent;
-                       ParseElementPullBuffer($el, "r->", "NDR_BUFFERS");
+                       ParseElementPullBuffer($el, "r->");
                        deindent;
                }
                pidl "break;";
@@ -1726,9 +1719,8 @@
                }
        } else {
                ParseElementPushScalar($e, "r->$inout.", 
"NDR_SCALARS|NDR_BUFFERS");
-
                if (need_wire_pointer($e)) {
-                       ParseElementPushBuffer($e, "r->$inout.", 
"NDR_SCALARS|NDR_BUFFERS");
+                       ParseElementPushBuffer($e, "r->$inout.");
                }
        }
 }      
@@ -1810,7 +1802,7 @@
 
                ParseElementPullScalar($e, "r->$inout.", 
"NDR_SCALARS|NDR_BUFFERS");
                if (need_wire_pointer($e)) {
-                       ParseElementPullBuffer($e, "r->$inout.", 
"NDR_SCALARS|NDR_BUFFERS");
+                       ParseElementPullBuffer($e, "r->$inout.");
                }
        }
 }

Reply via email to