Remove gratuitous and unnecessary "BusyBox" refernece in login prompt
[oweals/busybox.git] / findutils / xargs.c
index c5f7b208c425cb2cebc7c168a5c7cca045779655..471bae45be75e15f388488294c4e290065b27c0c 100644 (file)
@@ -1,9 +1,9 @@
 /*
  * Mini xargs implementation for busybox
  *
- * Copyright (C) 2000 by Lineo, inc.
- * Written by Erik Andersen <andersen@lineo.com>, <andersee@debian.org>
- * Remixed by Mark Whitley <markw@lineo.com>, <markw@enol.com>
+ * Copyright (C) 1999,2000 by Lineo, inc. and Erik Andersen
+ * Copyright (C) 1999,2000,2001 by Erik Andersen <andersee@debian.org>
+ * Remixed by Mark Whitley <markw@codepoet.org>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
  *
  */
 
-#include "busybox.h"
 #include <stdio.h>
 #include <stdlib.h>
 #include <string.h>
+#include "busybox.h"
 
 int xargs_main(int argc, char **argv)
 {
-       char *cmd_to_be_executed = NULL;
-       char *file_to_act_on = NULL;
+       char *cmd_to_be_executed;
+       char *file_to_act_on;
+       int i;
+       int len;
 
        /*
         * No options are supported in this version of xargs; no getopt.
@@ -42,49 +44,45 @@ int xargs_main(int argc, char **argv)
         * once with no args and xargs will echo the filename. Simple.
         */
 
+       argv++;
+       len = argc;     /* arg = count for ' ' + trailing '\0' */
        /* Store the command to be executed (taken from the command line) */
        if (argc == 1) {
                /* default behavior is to echo all the filenames */
-               cmd_to_be_executed = strdup("/bin/echo ");
+               argv[0] = "/bin/echo";
+               len++;  /* space for trailing '\0' */
        } else {
-               /* concatenate all the arguments passed to xargs together */
-               int i;
-               int len = 1; /* for the '\0' */
-               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, " ");
+               argc--;
                }
+       /* concatenate all the arguments passed to xargs together */
+       for (i = 0; i < argc; i++)
+               len += strlen(argv[i]);
+       cmd_to_be_executed = xmalloc (len);
+       for (i = len = 0; i < argc; i++) {
+               len = sprintf(cmd_to_be_executed + len, "%s ", argv[i]);
        }
 
        /* Now, read in one line at a time from stdin, and store this 
         * line to be used later as an argument to the command */
        while ((file_to_act_on = get_line_from_file(stdin)) !=NULL) {
 
-               FILE *cmd_output = NULL;
-               char *output_line = NULL;
-               char *execstr = NULL;
+               FILE *cmd_output;
+               char *output_line;
+               char *execstr;
 
                /* eat the newline off the filename. */
-               if (file_to_act_on[strlen(file_to_act_on)-1] == '\n')
-                       file_to_act_on[strlen(file_to_act_on)-1] = '\0';
+               chomp(file_to_act_on);
 
                /* eat blank lines */
-               if (strlen(file_to_act_on) == 0)
+               if (file_to_act_on[0] == 0)
                        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);
-               strcat(execstr, file_to_act_on);
+               bb_asprintf(&execstr, "%s%s", cmd_to_be_executed, file_to_act_on);
+               
                cmd_output = popen(execstr, "r");
-               if (cmd_output == NULL) {
-                       perror("popen");
-                       exit(1);
-               }
+               if (cmd_output == NULL)
+                       perror_msg_and_die("popen");
 
                /* harvest the output */
                while ((output_line = get_line_from_file(cmd_output)) != NULL) {
@@ -98,7 +96,7 @@ int xargs_main(int argc, char **argv)
                free(file_to_act_on);
        }
 
-#ifdef BB_FEATURE_CLEAN_UP
+#ifdef CONFIG_FEATURE_CLEAN_UP
        free(cmd_to_be_executed);
 #endif