pidl:Samba3/ClientNDR: $size can be 'foo / 2' so we need to add '(' and ')'
authorGünther Deschner <gd@samba.org>
Fri, 27 Nov 2009 10:37:01 +0000 (11:37 +0100)
committerKarolin Seeger <kseeger@samba.org>
Mon, 30 Nov 2009 13:44:54 +0000 (14:44 +0100)
foo / 5 * sizeof(bar)' isn't the same as
'(foo / 2) * sizeof(bar)'.

metze

pidl/lib/Parse/Pidl/Samba3/ClientNDR.pm
pidl/tests/samba3-cli.pl

index ed1b71a236f7767405900d99099af5ecf573ef13..9a29214697bf219c428a91d1f23a8d83eee3021c 100644 (file)
@@ -98,9 +98,9 @@ sub ParseOutputArgument($$$)
                my $env = GenerateFunctionInEnv($fn, "r.");
                my $size_is = ParseExpr($e->{LEVELS}[$level]->{SIZE_IS}, $env, $e->{ORIGINAL});
                if (has_property($e, "charset")) {
-                   $self->pidl("memcpy(CONST_DISCARD(char *, $e->{NAME}), r.out.$e->{NAME}, $size_is * sizeof(*$e->{NAME}));");
+                   $self->pidl("memcpy(discard_const_p(uint8_t, $e->{NAME}), r.out.$e->{NAME}, ($size_is) * sizeof(*$e->{NAME}));");
                } else {
-                   $self->pidl("memcpy($e->{NAME}, r.out.$e->{NAME}, $size_is * sizeof(*$e->{NAME}));");
+                   $self->pidl("memcpy($e->{NAME}, r.out.$e->{NAME}, ($size_is) * sizeof(*$e->{NAME}));");
                }
        } else {
                $self->pidl("*$e->{NAME} = *r.out.$e->{NAME};");
index 5a551630c905a74ab1818e752ed1f4c7c5431a03..27ab99dd347df795234824fd20e9a8f947d12757 100755 (executable)
@@ -123,4 +123,4 @@ my $e = { NAME => "foo", ORIGINAL => { FILE => "f", LINE => -1 },
           LEVELS => [ { TYPE => "ARRAY", SIZE_IS => "mysize" }, { TYPE => "DATA", DATA_TYPE => "int" } ]};
 
 $x->ParseOutputArgument($fn, $e);
-is($x->{res}, "memcpy(foo, r.out.foo, mysize * sizeof(*foo));\n");
+is($x->{res}, "memcpy(foo, r.out.foo, (mysize) * sizeof(*foo));\n");