summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEric Andersen2001-03-09 01:24:02 +0000
committerEric Andersen2001-03-09 01:24:02 +0000
commit01658a3eec87ffd81c47d908ca1a785e29a45993 (patch)
tree7942258ffc2e1861a1ef6a2c8ecb91867840c824
parent3dbf1e877af409c17092ce5d6cdcb686dad50b65 (diff)
downloadbusybox-01658a3eec87ffd81c47d908ca1a785e29a45993.zip
busybox-01658a3eec87ffd81c47d908ca1a785e29a45993.tar.gz
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.c11
-rw-r--r--sh.c11
-rw-r--r--shell/lash.c11
3 files changed, 18 insertions, 15 deletions
diff --git a/lash.c b/lash.c
index ae5532e..e1bdc87 100644
--- a/lash.c
+++ b/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);
}
}
diff --git a/sh.c b/sh.c
index ae5532e..e1bdc87 100644
--- a/sh.c
+++ b/sh.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);
}
}
diff --git a/shell/lash.c b/shell/lash.c
index ae5532e..e1bdc87 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);
}
}