diff options
author | Eric Andersen <andersen@codepoet.org> | 2001-03-09 04:24:02 +0300 |
---|---|---|
committer | Eric Andersen <andersen@codepoet.org> | 2001-03-09 04:24:02 +0300 |
commit | 01658a3eec87ffd81c47d908ca1a785e29a45993 (patch) | |
tree | 7942258ffc2e1861a1ef6a2c8ecb91867840c824 | |
parent | 3dbf1e877af409c17092ce5d6cdcb686dad50b65 (diff) |
Fix sh.c for the glab case. I was messing things up for
single argument commands. It should now work as expected...
-Erik
-rw-r--r-- | lash.c | 11 | ||||
-rw-r--r-- | sh.c | 11 | ||||
-rw-r--r-- | shell/lash.c | 11 |
3 files changed, 18 insertions, 15 deletions
@@ -994,8 +994,8 @@ static int expand_arguments(char *command) /* Convert from char** (one word per string) to a simple char*, * but don't overflow command which is BUFSIZ in length */ - *command = '\0'; if ( expand_result.gl_pathc > 1) { + *command = '\0'; while (i < expand_result.gl_pathc && total_length < BUFSIZ) { length=strlen(expand_result.gl_pathv[i])+1; if (BUFSIZ-total_length-length <= 0) { @@ -1078,11 +1078,12 @@ static int expand_arguments(char *command) } else { /* Seems we got an un-expandable variable. So delete it. */ char *next_dst; - if ((next_dst=strpbrk(dst+1, " \t~`!$^&*()=|\\{}[];\"'<>?.")) != NULL) { - /* Move stuff to the end of the string to accommodate filling - * the created gap with the new stuff */ - memmove(dst, next_dst, next_dst-dst); + if ((next_dst=strpbrk(dst+1, " \t~`!$^&*()=|\\{}[];\"'<>?.")) == NULL) { + next_dst=dst+1+strlen(dst); } + /* Move stuff to the end of the string to accommodate filling + * the created gap with the new stuff */ + memmove(dst, next_dst, next_dst-dst); } } @@ -994,8 +994,8 @@ static int expand_arguments(char *command) /* Convert from char** (one word per string) to a simple char*, * but don't overflow command which is BUFSIZ in length */ - *command = '\0'; if ( expand_result.gl_pathc > 1) { + *command = '\0'; while (i < expand_result.gl_pathc && total_length < BUFSIZ) { length=strlen(expand_result.gl_pathv[i])+1; if (BUFSIZ-total_length-length <= 0) { @@ -1078,11 +1078,12 @@ static int expand_arguments(char *command) } else { /* Seems we got an un-expandable variable. So delete it. */ char *next_dst; - if ((next_dst=strpbrk(dst+1, " \t~`!$^&*()=|\\{}[];\"'<>?.")) != NULL) { - /* Move stuff to the end of the string to accommodate filling - * the created gap with the new stuff */ - memmove(dst, next_dst, next_dst-dst); + if ((next_dst=strpbrk(dst+1, " \t~`!$^&*()=|\\{}[];\"'<>?.")) == NULL) { + next_dst=dst+1+strlen(dst); } + /* Move stuff to the end of the string to accommodate filling + * the created gap with the new stuff */ + memmove(dst, next_dst, next_dst-dst); } } diff --git a/shell/lash.c b/shell/lash.c index ae5532e54..e1bdc875a 100644 --- a/shell/lash.c +++ b/shell/lash.c @@ -994,8 +994,8 @@ static int expand_arguments(char *command) /* Convert from char** (one word per string) to a simple char*, * but don't overflow command which is BUFSIZ in length */ - *command = '\0'; if ( expand_result.gl_pathc > 1) { + *command = '\0'; while (i < expand_result.gl_pathc && total_length < BUFSIZ) { length=strlen(expand_result.gl_pathv[i])+1; if (BUFSIZ-total_length-length <= 0) { @@ -1078,11 +1078,12 @@ static int expand_arguments(char *command) } else { /* Seems we got an un-expandable variable. So delete it. */ char *next_dst; - if ((next_dst=strpbrk(dst+1, " \t~`!$^&*()=|\\{}[];\"'<>?.")) != NULL) { - /* Move stuff to the end of the string to accommodate filling - * the created gap with the new stuff */ - memmove(dst, next_dst, next_dst-dst); + if ((next_dst=strpbrk(dst+1, " \t~`!$^&*()=|\\{}[];\"'<>?.")) == NULL) { + next_dst=dst+1+strlen(dst); } + /* Move stuff to the end of the string to accommodate filling + * the created gap with the new stuff */ + memmove(dst, next_dst, next_dst-dst); } } |