]> git.kernelconcepts.de Git - karo-tx-uboot.git/blobdiff - common/hush.c
* Restrict baudrate settings on LWMON to higher speeds
[karo-tx-uboot.git] / common / hush.c
index 925474332be99bf901efbf8c148e69a3fa6fc2e3..fcc3559235c472876ffa267cea6c002a2e79708e 100644 (file)
 /* #include <dmalloc.h> */
 /* #define DEBUG_SHELL */
 
-#ifdef BB_VER
+#if 1
 #include "busybox.h"
 #include "cmdedit.h"
 #else
 #define applet_name "hush"
 #include "standalone.h"
 #define hush_main main
-#undef BB_FEATURE_SH_FANCY_PROMPT
+#undef CONFIG_FEATURE_SH_FANCY_PROMPT
+#define BB_BANNER
 #endif
 #endif
 #define SPECIAL_VAR_SYMBOL 03
@@ -430,7 +431,7 @@ static void setup_string_in_str(struct in_str *i, const char *s);
 /*  close_me manipulations: */
 static void mark_open(int fd);
 static void mark_closed(int fd);
-static void close_all();
+static void close_all(void);
 #endif
 /*  "run" the final data structures: */
 static char *indenter(int i);
@@ -902,7 +903,7 @@ static void b_reset(o_string *o)
 static void b_free(o_string *o)
 {
        b_reset(o);
-       if (o->data != NULL) free(o->data);
+       free(o->data);
        o->data = NULL;
        o->maxlen = 0;
 }
@@ -958,7 +959,7 @@ static int static_peek(struct in_str *i)
 #ifndef __U_BOOT__
 static inline void cmdedit_set_initial_prompt(void)
 {
-#ifndef BB_FEATURE_SH_FANCY_PROMPT
+#ifndef CONFIG_FEATURE_SH_FANCY_PROMPT
        PS1 = NULL;
 #else
        PS1 = getenv("PS1");
@@ -970,11 +971,10 @@ static inline void cmdedit_set_initial_prompt(void)
 static inline void setup_prompt_string(int promptmode, char **prompt_str)
 {
        debug_printf("setup_prompt_string %d ",promptmode);
-#ifndef BB_FEATURE_SH_FANCY_PROMPT
+#ifndef CONFIG_FEATURE_SH_FANCY_PROMPT
        /* Set up the prompt */
        if (promptmode == 1) {
-               if (PS1)
-                       free(PS1);
+               free(PS1);
                PS1=xmalloc(strlen(cwd)+4);
                sprintf(PS1, "%s %s", cwd, ( geteuid() != 0 ) ?  "$ ":"# ");
                *prompt_str = PS1;
@@ -995,7 +995,7 @@ static void get_user_input(struct in_str *i)
        static char the_command[BUFSIZ];
 
        setup_prompt_string(i->promptmode, &prompt_str);
-#ifdef BB_FEATURE_COMMAND_EDITING
+#ifdef CONFIG_FEATURE_COMMAND_EDITING
        /*
         ** enable command line editing only while a command line
         ** is actually being read; otherwise, we'll end up bequeathing
@@ -1176,7 +1176,7 @@ static void mark_closed(int fd)
        free(tmp);
 }
 
-static void close_all()
+static void close_all(void)
 {
        struct close_me *c;
        for (c=close_me_head; c; c=c->next) {
@@ -1290,18 +1290,18 @@ static void pseudo_exec(struct child_prog *child)
                 * really dislike relying on /proc for things.  We could exec ourself
                 * from global_argv[0], but if we are in a chroot, we may not be able
                 * to find ourself... */
-#ifdef BB_FEATURE_SH_STANDALONE_SHELL
+#ifdef CONFIG_FEATURE_SH_STANDALONE_SHELL
                {
                        int argc_l;
                        char** argv_l=child->argv;
                        char *name = child->argv[0];
 
-#ifdef BB_FEATURE_SH_APPLETS_ALWAYS_WIN
+#ifdef CONFIG_FEATURE_SH_APPLETS_ALWAYS_WIN
                        /* Following discussions from November 2000 on the busybox mailing
                         * list, the default configuration, (without
                         * get_last_path_component()) lets the user force use of an
                         * external command by specifying the full (with slashes) filename.
-                        * If you enable BB_FEATURE_SH_APPLETS_ALWAYS_WIN, then applets
+                        * If you enable CONFIG_FEATURE_SH_APPLETS_ALWAYS_WIN then applets
                         * _aways_ override external commands, so if you want to run
                         * /bin/cat, it will use BusyBox cat even if /bin/cat exists on the
                         * filesystem and is _not_ busybox.  Some systems may want this,
@@ -1524,13 +1524,26 @@ static int run_pipe_real(struct pipe *pi)
        struct child_prog *child;
        struct built_in_command *x;
        char *p;
+# if __GNUC__
+       /* Avoid longjmp clobbering */
+       (void) &i;
+       (void) &nextin;
+       (void) &nextout;
+       (void) &child;
+# endif
 #else
        int nextin;
        int flag = do_repeat ? CMD_FLAG_REPEAT : 0;
        struct child_prog *child;
        cmd_tbl_t *cmdtp;
        char *p;
-#endif
+# if __GNUC__
+       /* Avoid longjmp clobbering */
+       (void) &i;
+       (void) &nextin;
+       (void) &child;
+# endif
+#endif /* __U_BOOT__ */
 
        nextin = 0;
 #ifndef __U_BOOT__
@@ -3194,7 +3207,7 @@ static void *xrealloc(void *ptr, size_t size)
 /* Make sure we have a controlling tty.  If we get started under a job
  * aware app (like bash for example), make sure we are now in charge so
  * we don't fight over who gets the foreground */
-static void setup_job_control()
+static void setup_job_control(void)
 {
        static pid_t shell_pgrp;
        /* Loop until we are in the foreground.  */
@@ -3243,7 +3256,7 @@ int hush_main(int argc, char **argv)
 
        /* Initialize some more globals to non-zero values */
        set_cwd();
-#ifdef BB_FEATURE_COMMAND_EDITING
+#ifdef CONFIG_FEATURE_COMMAND_EDITING
        cmdedit_set_initial_prompt();
 #else
        PS1 = NULL;
@@ -3312,7 +3325,10 @@ int hush_main(int argc, char **argv)
        debug_printf("\ninteractive=%d\n", interactive);
        if (interactive) {
                /* Looks like they want an interactive shell */
-               fprintf(stdout, "\nhush -- the humble shell v0.01 (testing)\n\n");
+#ifndef CONFIG_FEATURE_SH_EXTRA_QUIET 
+               printf( "\n\n" BB_BANNER " hush - the humble shell v0.01 (testing)\n");
+               printf( "Enter 'help' for a list of built-in commands.\n\n");
+#endif
                setup_job_control();
        }
 
@@ -3327,7 +3343,7 @@ int hush_main(int argc, char **argv)
        input = xfopen(argv[optind], "r");
        opt = parse_file_outer(input);
 
-#ifdef BB_FEATURE_CLEAN_UP
+#ifdef CONFIG_FEATURE_CLEAN_UP
        fclose(input);
        if (cwd && cwd != unknown)
                free((char*)cwd);