svn commit: samba r6892 - in branches/tmp/pidl2/source/build/pidl: .

jelmer at samba.org jelmer at samba.org
Wed May 18 20:52:42 GMT 2005


Author: jelmer
Date: 2005-05-18 20:52:42 +0000 (Wed, 18 May 2005)
New Revision: 6892

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

Log:
More allocation fixes. smbd works now!

Modified:
   branches/tmp/pidl2/source/build/pidl/ndr_parser.pm


Changeset:
Modified: branches/tmp/pidl2/source/build/pidl/ndr_parser.pm
===================================================================
--- branches/tmp/pidl2/source/build/pidl/ndr_parser.pm	2005-05-18 19:44:00 UTC (rev 6891)
+++ branches/tmp/pidl2/source/build/pidl/ndr_parser.pm	2005-05-18 20:52:42 UTC (rev 6892)
@@ -1946,14 +1946,27 @@
 		next unless (grep(/out/, @{$e->{DIRECTION}}));
 		next unless ($e->{LEVELS}[0]->{TYPE} eq "POINTER" and 
 		             $e->{LEVELS}[0]->{POINTER_TYPE} eq "ref");
-		next unless ($e->{LEVELS}[1]->{TYPE} eq "DATA");
 
-		pidl "NDR_ALLOC(ndr, r->out.$e->{NAME});";
+
+		if ($e->{LEVELS}[1]->{TYPE} eq "ARRAY") {
+			my $size = ParseExpr($e->{LEVELS}[1]->{SIZE_IS}, $env);
+			check_null_pointer($size);
+			
+			pidl "NDR_ALLOC_N(ndr, r->out.$e->{NAME}, $size);";
+
+			if (grep(/in/, @{$e->{DIRECTION}})) {
+				pidl "memcpy(r->out.$e->{NAME}, r->in.$e->{NAME}, $size * sizeof(*r->in.$e->{NAME}));";
+			} else {
+				pidl "memset(r->out.$e->{NAME}, 0, $size * sizeof(*r->out.$e->{NAME}));";
+			}
+		} else {
+			pidl "NDR_ALLOC(ndr, r->out.$e->{NAME});";
 		
-		if (grep(/in/, @{$e->{DIRECTION}})) {
-			pidl "*r->out.$e->{NAME} = *r->in.$e->{NAME};";
-		} else {
-			pidl "ZERO_STRUCTP(r->out.$e->{NAME});";
+			if (grep(/in/, @{$e->{DIRECTION}})) {
+				pidl "*r->out.$e->{NAME} = *r->in.$e->{NAME};";
+			} else {
+				pidl "ZERO_STRUCTP(r->out.$e->{NAME});";
+			}
 		}
 	}
 



More information about the samba-cvs mailing list