aboutsummaryrefslogtreecommitdiff
path: root/shell
diff options
context:
space:
mode:
authorDenis Vlasenko <vda.linux@googlemail.com>2007-05-02 15:34:47 +0000
committerDenis Vlasenko <vda.linux@googlemail.com>2007-05-02 15:34:47 +0000
commitef36ead37061690f9a20b5f03164e99ab1b9bdd4 (patch)
tree511312d277a0b7705d0e7f0b6e69c9fd80248d02 /shell
parentdcf4de20a1904bb31d498b6cc999a37f20b2783d (diff)
downloadbusybox-ef36ead37061690f9a20b5f03164e99ab1b9bdd4.tar.gz
hush: fix incorrect exitcodes without job control
Diffstat (limited to 'shell')
-rw-r--r--shell/hush.c23
1 files changed, 9 insertions, 14 deletions
diff --git a/shell/hush.c b/shell/hush.c
index 850b38f37..8dfe2be93 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
}