pidl:Samba3/ClientNDR: $size can be 'foo / 2' so we need to add '(' and ')'
authorStefan Metzmacher <metze@samba.org>
Wed, 25 Nov 2009 13:31:34 +0000 (14:31 +0100)
committerStefan Metzmacher <metze@samba.org>
Thu, 26 Nov 2009 10:47:42 +0000 (11:47 +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 3fc63a49991069c352d67a84023d5964c30c9930..b26a08e0292b12082f768645418d2f0cbda1fe4f 100644 (file)
@@ -105,9 +105,9 @@ sub ParseOutputArgument($$$;$$)
                } else {
                        my $size_is = ParseExpr($l->{SIZE_IS}, $env, $e->{ORIGINAL});
                        if (has_property($e, "charset")) {
-                               $self->pidl("memcpy(CONST_DISCARD(char *, $o$e->{NAME}), ${r}out.$e->{NAME}, $size_is * sizeof(*$o$e->{NAME}));");
+                               $self->pidl("memcpy(discard_const_p(uint8_t, $o$e->{NAME}), ${r}out.$e->{NAME}, ($size_is) * sizeof(*$o$e->{NAME}));");
                        } else {
-                               $self->pidl("memcpy($o$e->{NAME}, ${r}out.$e->{NAME}, $size_is * sizeof(*$o$e->{NAME}));");
+                               $self->pidl("memcpy($o$e->{NAME}, ${r}out.$e->{NAME}, ($size_is) * sizeof(*$o$e->{NAME}));");
                        }
                }
        } else {
index 1820a69bb3e1e0a63341cd963dd0e8671c1f19bc..fcf1fb171ba18ba0502b29684944bc3ec28a2085 100755 (executable)
@@ -301,4 +301,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");