diff options
author | Denis Vlasenko | 2007-05-02 15:34:47 +0000 |
---|---|---|
committer | Denis Vlasenko | 2007-05-02 15:34:47 +0000 |
commit | ef36ead37061690f9a20b5f03164e99ab1b9bdd4 (patch) | |
tree | 511312d277a0b7705d0e7f0b6e69c9fd80248d02 /shell/hush.c | |
parent | dcf4de20a1904bb31d498b6cc999a37f20b2783d (diff) | |
download | busybox-ef36ead37061690f9a20b5f03164e99ab1b9bdd4.zip busybox-ef36ead37061690f9a20b5f03164e99ab1b9bdd4.tar.gz |
hush: fix incorrect exitcodes without job control
Diffstat (limited to 'shell/hush.c')
-rw-r--r-- | shell/hush.c | 23 |
1 files changed, 9 insertions, 14 deletions
diff --git a/shell/hush.c b/shell/hush.c index 850b38f..8dfe2be 100644 --- a/shell/hush.c +++ b/shell/hush.c @@ -110,8 +110,8 @@ typedef enum { * output pretty */ static const struct { int mode; - int default_fd; - const char *descrip; + signed char default_fd; + char descrip[3]; } redir_table[] = { { 0, 0, "()" }, { O_RDONLY, 0, "<" }, @@ -255,7 +255,8 @@ static const char *PS1; static const char *PS2; #endif -static struct variables shell_ver = { NULL, "HUSH_VERSION", "0.01", 1, 1 }; +#define HUSH_VER_STR "0.02" +static struct variables shell_ver = { NULL, "HUSH_VERSION", HUSH_VER_STR, 1, 1 }; static struct variables *top_vars = &shell_ver; #define B_CHUNK 100 @@ -296,12 +297,6 @@ struct built_in_command { int (*function) (char **argv); /* function ptr */ }; -/* belongs in busybox.h */ -static int max(int a, int b) -{ - return (a > b) ? a : b; -} - #ifdef DEBUG_SHELL #define debug_printf(...) fprintf(stderr, __VA_ARGS__) /* broken, of course, but OK for testing */ @@ -590,14 +585,14 @@ static void hush_exit(int exitcode) sigexit(- (exitcode & 0xff)); } -#else /* !INTERACTIVE */ +#else /* !JOB */ #define set_fatal_sighandler(handler) ((void)0) #define set_jobctrl_sighandler(handler) ((void)0) #define set_misc_sighandler(handler) ((void)0) -#define hush_exit(e) exit(-(e)) +#define hush_exit(e) exit(e) -#endif /* INTERACTIVE */ +#endif /* JOB */ static const char *set_cwd(void) @@ -957,7 +952,7 @@ static int b_check_space(o_string *o, int len) if (o->length + len > o->maxlen) { char *old_data = o->data; /* assert(data == NULL || o->maxlen != 0); */ - o->maxlen += max(2*len, B_CHUNK); + o->maxlen += (2*len > B_CHUNK ? 2*len : B_CHUNK); o->data = realloc(o->data, 1 + o->maxlen); if (o->data == NULL) { free(old_data); @@ -3299,7 +3294,7 @@ int hush_main(int argc, char **argv) hush_exit(xfunc_error_retval); } #if !ENABLE_FEATURE_SH_EXTRA_QUIET - printf("\n\n%s hush - the humble shell v0.02\n", BB_BANNER); + printf("\n\n%s hush - the humble shell v"HUSH_VER_STR"\n", BB_BANNER); printf("Enter 'help' for a list of built-in commands.\n\n"); #endif } |