summaryrefslogtreecommitdiff
path: root/findutils/xargs.c
diff options
context:
space:
mode:
authorRobert Griebl2002-08-03 14:49:03 +0000
committerRobert Griebl2002-08-03 14:49:03 +0000
commit0d833ca7fdf8500956191947dee4eb9bda49e86d (patch)
tree93dc58856cd7817b91bd0136867818219524d047 /findutils/xargs.c
parent49c024addd79be2b6024e33c69f5fafe9f5eff90 (diff)
downloadbusybox-0d833ca7fdf8500956191947dee4eb9bda49e86d.zip
busybox-0d833ca7fdf8500956191947dee4eb9bda49e86d.tar.gz
Fixed a bug in xarg: string data was strcat'ed to a malloc'ed buffer - and
malloc does not clear memory by default (somehow this worked on x86, but not on arm)
Diffstat (limited to 'findutils/xargs.c')
-rw-r--r--findutils/xargs.c14
1 files changed, 6 insertions, 8 deletions
diff --git a/findutils/xargs.c b/findutils/xargs.c
index c63518f..bb5987e 100644
--- a/findutils/xargs.c
+++ b/findutils/xargs.c
@@ -49,12 +49,11 @@ int xargs_main(int argc, char **argv)
} else {
/* concatenate all the arguments passed to xargs together */
int i;
- int len = 1; /* for the '\0' */
- cmd_to_be_executed = xmalloc(80);
+ int len = 0;
+ for (i = 1; i < argc; i++)
+ len += ( strlen(argv[i]) + 1 );
+ cmd_to_be_executed = xstrndup ( "", len );
for (i = 1; i < argc; i++) {
- len += strlen(argv[i]);
- len += 1; /* for the space between the args */
- cmd_to_be_executed = xrealloc(cmd_to_be_executed, len);
strcat(cmd_to_be_executed, argv[i]);
strcat(cmd_to_be_executed, " ");
}
@@ -76,10 +75,9 @@ int xargs_main(int argc, char **argv)
continue;
/* assemble the command and execute it */
- execstr = xcalloc(strlen(cmd_to_be_executed) +
- strlen(file_to_act_on) + 1, sizeof(char));
- strcat(execstr, cmd_to_be_executed);
+ execstr = xstrndup ( cmd_to_be_executed, xstrlen(cmd_to_be_executed) + xstrlen(file_to_act_on));
strcat(execstr, file_to_act_on);
+
cmd_output = popen(execstr, "r");
if (cmd_output == NULL)
perror_msg_and_die("popen");