chiark
/
gitweb
/
~mdw
/
disorder
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
protogen: memory hygeine.
[disorder]
/
scripts
/
protocol
diff --git
a/scripts/protocol
b/scripts/protocol
index 39b7dd5c7e48430bd9cf940f01ab1739c09fb6fb..f2a0c80e3a49736671a75703496558e1e1e57149 100755
(executable)
--- a/
scripts/protocol
+++ b/
scripts/protocol
@@
-308,7
+308,8
@@
sub simple {
my $name = $return->[1];
if($type eq 'string') {
push(@c,
my $name = $return->[1];
if($type eq 'string') {
push(@c,
- " *${name}p = v[$n];\n");
+ " *${name}p = v[$n];\n",
+ " v[$n] = NULL;\n");
} elsif($type eq 'boolean') {
push(@c,
" if(boolean(\"$cmd\", v[$n], ${name}p))\n",
} elsif($type eq 'boolean') {
push(@c,
" if(boolean(\"$cmd\", v[$n], ${name}p))\n",
@@
-321,7
+322,8
@@
sub simple {
" *${name}p = atoll(v[$n]);\n");
} elsif($type eq 'user') {
push(@c,
" *${name}p = atoll(v[$n]);\n");
} elsif($type eq 'user') {
push(@c,
- " c->user = v[$n];\n");
+ " c->user = v[$n];\n",
+ " v[$n] = NULL;\n");
} elsif($type eq 'body') {
push(@c,
" if(readlist(c, ${name}p, n${name}p))\n",
} elsif($type eq 'body') {
push(@c,
" if(readlist(c, ${name}p, n${name}p))\n",
@@
-334,8
+336,11
@@
sub simple {
die "$0: C API: unknown return type '$type' for '$name'\n";
}
}
die "$0: C API: unknown return type '$type' for '$name'\n";
}
}
+ if($expected) {
+ push(@c,
+ " free_strings(nv, v);\n");
+ }
push(@c, " return 0;\n");
push(@c, " return 0;\n");
- # TODO xfree unconsumed split output
}
push(@c, "}\n\n");
}
push(@c, "}\n\n");