Some patches from Gennady Feldman. Fixed a glob problem such that
authorEric Andersen <andersen@codepoet.org>
Mon, 23 Apr 2001 15:28:28 +0000 (15:28 -0000)
committerEric Andersen <andersen@codepoet.org>
Mon, 23 Apr 2001 15:28:28 +0000 (15:28 -0000)
'ls *.h Config.h' works.  Fixed a silly typo with fg/bg process control.
Made cmdedit exit sanely when it cannot read input.

cmdedit.c
lash.c
sh.c
shell/cmdedit.c
shell/lash.c

index eef1a88c81dd838592770274c5ee41fea850bb68..ce5450032eff30ccdf69d367134d65e013031fb0 100644 (file)
--- a/cmdedit.c
+++ b/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/lash.c b/lash.c
index 243ba8139d7fa03da14e998ca13aee166a58014a..892237b085d9de999e73e148bf9c39435b0b02f5 100644 (file)
--- a/lash.c
+++ b/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"); 
                        }
                }
diff --git a/sh.c b/sh.c
index 243ba8139d7fa03da14e998ca13aee166a58014a..892237b085d9de999e73e148bf9c39435b0b02f5 100644 (file)
--- a/sh.c
+++ b/sh.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"); 
                        }
                }
index eef1a88c81dd838592770274c5ee41fea850bb68..ce5450032eff30ccdf69d367134d65e013031fb0 100644 (file)
@@ -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 {
index 243ba8139d7fa03da14e998ca13aee166a58014a..892237b085d9de999e73e148bf9c39435b0b02f5 100644 (file)
@@ -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"); 
                        }
                }