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