diff options
author | Eric Andersen | 2001-04-23 15:28:28 +0000 |
---|---|---|
committer | Eric Andersen | 2001-04-23 15:28:28 +0000 |
commit | ed424dbf1d3d4f0448b9bfdc6b6128d4c90514ee (patch) | |
tree | 5b613c1439ae5bb391a398d5f5a0f011d4da9215 | |
parent | d8862928c25be9b00f6755cf445773cd1e4cc22a (diff) | |
download | busybox-ed424dbf1d3d4f0448b9bfdc6b6128d4c90514ee.zip busybox-ed424dbf1d3d4f0448b9bfdc6b6128d4c90514ee.tar.gz |
Some patches from Gennady Feldman. Fixed a glob problem such that
'ls *.h Config.h' works. Fixed a silly typo with fg/bg process control.
Made cmdedit exit sanely when it cannot read input.
-rw-r--r-- | cmdedit.c | 4 | ||||
-rw-r--r-- | lash.c | 10 | ||||
-rw-r--r-- | sh.c | 10 | ||||
-rw-r--r-- | shell/cmdedit.c | 4 | ||||
-rw-r--r-- | shell/lash.c | 10 |
5 files changed, 21 insertions, 17 deletions
@@ -1211,7 +1211,8 @@ extern void cmdedit_read_input(char *prompt, char command[BUFSIZ]) fflush(stdout); /* buffered out to fast */ if (read(inputFd, &c, 1) < 1) - return; + /* if we can't read input then exit */ + goto prepare_to_die; switch (c) { case '\n': @@ -1243,6 +1244,7 @@ extern void cmdedit_read_input(char *prompt, char command[BUFSIZ]) /* Control-d -- Delete one character, or exit * if the len=0 and no chars to delete */ if (len == 0) { +prepare_to_die: printf("exit"); clean_up_and_die(0); } else { @@ -1019,6 +1019,8 @@ static int expand_arguments(char *command) (tmpcmd = strsep_space(cmd, &ix)) != NULL; cmd += ix, ix=0) { if (*tmpcmd == '\0') break; + /* we need to trim() the result for glob! */ + trim(tmpcmd); retval = glob(tmpcmd, flags, NULL, &expand_result); free(tmpcmd); /* Free mem allocated by strsep_space */ if (retval == GLOB_NOSPACE) { @@ -1041,10 +1043,8 @@ static int expand_arguments(char *command) error_msg(out_of_space); return FALSE; } - if (i>0) { - strcat(command+total_length, " "); - total_length+=1; - } + strcat(command+total_length, " "); + total_length+=1; strcat(command+total_length, expand_result.gl_pathv[i]); total_length+=length; } @@ -1803,7 +1803,7 @@ static int busy_loop(FILE * input) if (!job_list.fg) { /* move the shell to the foreground */ /* suppress messages when run from /linuxrc mag@sysgo.de */ - if (tcsetpgrp(0, getpid()) && errno != ENOTTY) + if (tcsetpgrp(0, getpgrp()) && errno != ENOTTY) perror_msg("tcsetpgrp"); } } @@ -1019,6 +1019,8 @@ static int expand_arguments(char *command) (tmpcmd = strsep_space(cmd, &ix)) != NULL; cmd += ix, ix=0) { if (*tmpcmd == '\0') break; + /* we need to trim() the result for glob! */ + trim(tmpcmd); retval = glob(tmpcmd, flags, NULL, &expand_result); free(tmpcmd); /* Free mem allocated by strsep_space */ if (retval == GLOB_NOSPACE) { @@ -1041,10 +1043,8 @@ static int expand_arguments(char *command) error_msg(out_of_space); return FALSE; } - if (i>0) { - strcat(command+total_length, " "); - total_length+=1; - } + strcat(command+total_length, " "); + total_length+=1; strcat(command+total_length, expand_result.gl_pathv[i]); total_length+=length; } @@ -1803,7 +1803,7 @@ static int busy_loop(FILE * input) if (!job_list.fg) { /* move the shell to the foreground */ /* suppress messages when run from /linuxrc mag@sysgo.de */ - if (tcsetpgrp(0, getpid()) && errno != ENOTTY) + if (tcsetpgrp(0, getpgrp()) && errno != ENOTTY) perror_msg("tcsetpgrp"); } } diff --git a/shell/cmdedit.c b/shell/cmdedit.c index eef1a88..ce54500 100644 --- a/shell/cmdedit.c +++ b/shell/cmdedit.c @@ -1211,7 +1211,8 @@ extern void cmdedit_read_input(char *prompt, char command[BUFSIZ]) fflush(stdout); /* buffered out to fast */ if (read(inputFd, &c, 1) < 1) - return; + /* if we can't read input then exit */ + goto prepare_to_die; switch (c) { case '\n': @@ -1243,6 +1244,7 @@ extern void cmdedit_read_input(char *prompt, char command[BUFSIZ]) /* Control-d -- Delete one character, or exit * if the len=0 and no chars to delete */ if (len == 0) { +prepare_to_die: printf("exit"); clean_up_and_die(0); } else { diff --git a/shell/lash.c b/shell/lash.c index 243ba81..892237b 100644 --- a/shell/lash.c +++ b/shell/lash.c @@ -1019,6 +1019,8 @@ static int expand_arguments(char *command) (tmpcmd = strsep_space(cmd, &ix)) != NULL; cmd += ix, ix=0) { if (*tmpcmd == '\0') break; + /* we need to trim() the result for glob! */ + trim(tmpcmd); retval = glob(tmpcmd, flags, NULL, &expand_result); free(tmpcmd); /* Free mem allocated by strsep_space */ if (retval == GLOB_NOSPACE) { @@ -1041,10 +1043,8 @@ static int expand_arguments(char *command) error_msg(out_of_space); return FALSE; } - if (i>0) { - strcat(command+total_length, " "); - total_length+=1; - } + strcat(command+total_length, " "); + total_length+=1; strcat(command+total_length, expand_result.gl_pathv[i]); total_length+=length; } @@ -1803,7 +1803,7 @@ static int busy_loop(FILE * input) if (!job_list.fg) { /* move the shell to the foreground */ /* suppress messages when run from /linuxrc mag@sysgo.de */ - if (tcsetpgrp(0, getpid()) && errno != ENOTTY) + if (tcsetpgrp(0, getpgrp()) && errno != ENOTTY) perror_msg("tcsetpgrp"); } } |