Merge branch 'master' of git+ssh://vda@busybox.net/var/lib/git/busybox
[oweals/busybox.git] / shell / bbsh.c
index 6bef3685a78615b3f9489a2f3796df3603ad4eaa..83132f928f415ec844655b42798220d6c775f115 100644 (file)
@@ -36,7 +36,7 @@
   echo `echo hello#comment " woot` and more
 */
 
-#include "busybox.h"
+#include "libbb.h"
 
 // A single executable, its arguments, and other information we know about it.
 #define BBSH_FLAG_EXIT    1
@@ -54,7 +54,7 @@ struct command {
        int flags;              // exit, suspend, && ||
        int pid;                // pid (or exit code)
        int argc;
-       char *argv[0];
+       char *argv[];
 };
 
 // A collection of processes piped into/waiting on each other.
@@ -68,7 +68,7 @@ struct pipeline {
 
 static void free_list(void *list, void (*freeit)(void *data))
 {
-       while(list) {
+       while (list) {
                void **next = (void **)list;
                void *list_next = *next;
                freeit(list);
@@ -159,16 +159,16 @@ static int run_pipeline(struct pipeline *line)
        // Handle local commands.  This is totally fake and plastic.
        if (cmd->argc==2 && !strcmp(cmd->argv[0],"cd"))
                chdir(cmd->argv[1]);
-       else if(!strcmp(cmd->argv[0],"exit"))
+       else if (!strcmp(cmd->argv[0],"exit"))
                exit(cmd->argc>1 ? atoi(cmd->argv[1]) : 0);
        else {
                int status;
                pid_t pid=fork();
-               if(!pid) {
+               if (!pid) {
                        run_applet_and_exit(cmd->argv[0],cmd->argc,cmd->argv);
                        execvp(cmd->argv[0],cmd->argv);
-                       printf("No %s",cmd->argv[0]);
-                       exit(1);
+                       printf("No %s", cmd->argv[0]);
+                       exit(EXIT_FAILURE);
                } else waitpid(pid, &status, 0);
        }
 
@@ -179,7 +179,7 @@ static void free_cmd(void *data)
 {
        struct command *cmd=(struct command *)data;
 
-       while(cmd->argc) free(cmd->argv[--cmd->argc]);
+       while (cmd->argc) free(cmd->argv[--cmd->argc]);
 }
 
 
@@ -198,21 +198,21 @@ static void handle(char *command)
        }
 }
 
-int bbsh_main(int argc, char **argv);
-int bbsh_main(int argc, char **argv)
+int bbsh_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE;
+int bbsh_main(int argc UNUSED_PARAM, char **argv)
 {
        char *command=NULL;
        FILE *f;
 
-       getopt32(argc, argv, "c:", &command);
+       getopt32(argv, "c:", &command);
 
-       f = argv[optind] ? xfopen(argv[optind],"r") : NULL;
+       f = argv[optind] ? xfopen_for_read(argv[optind]) : NULL;
        if (command) handle(command);
        else {
                unsigned cmdlen=0;
                for (;;) {
-                       if(!f) putchar('$');
-                       if(1 > getline(&command, &cmdlen,f ? : stdin)) break;
+                       if (!f) putchar('$');
+                       if (1 > getline(&command, &cmdlen, f ? f : stdin)) break;
 
                        handle(command);
                }