pidl:NDR/Client: avoid useless memcpy()
authorStefan Metzmacher <metze@samba.org>
Thu, 26 Sep 2013 18:38:12 +0000 (20:38 +0200)
committerStefan Metzmacher <metze@samba.org>
Tue, 7 Jan 2014 07:37:38 +0000 (08:37 +0100)
If the src and dest pointer of memcpy would be the same
we should avoid it in order to avoid valgrind warnings.

Signed-off-by: Stefan Metzmacher <metze@samba.org>
Reviewed-by: Andreas Schneider <asn@samba.org>
pidl/lib/Parse/Pidl/Samba4/NDR/Client.pm

index f02b8b20251bf0bcf9e27c12d29c7f02286d940d..b4954ca62410438a04e8b5e7d8c6e958cedd7995 100644 (file)
@@ -400,11 +400,16 @@ sub ParseOutputArgument($$$$$$)
                        $self->pidl("$copy_len_var = $out_length_is;");
                }
 
+               my $dest_ptr = "$o$e->{NAME}";
+               my $elem_size = "sizeof(*$dest_ptr)";
+               $self->pidl("if ($dest_ptr != $out_var) {");
+               $self->indent;
                if (has_property($e, "charset")) {
-                       $self->pidl("memcpy(discard_const_p(uint8_t *, $o$e->{NAME}), $out_var, $copy_len_var * sizeof(*$o$e->{NAME}));");
-               } else {
-                       $self->pidl("memcpy($o$e->{NAME}, $out_var, $copy_len_var * sizeof(*$o$e->{NAME}));");
+                       $dest_ptr = "discard_const_p(uint8_t *, $dest_ptr)";
                }
+               $self->pidl("memcpy($dest_ptr, $out_var, $copy_len_var * $elem_size);");
+               $self->deindent;
+               $self->pidl("}");
 
                $self->deindent;
                $self->pidl("}");