aboutsummaryrefslogtreecommitdiff
path: root/editors
diff options
context:
space:
mode:
authorGravatar Glenn L McGrath <bug1@ihug.co.nz>2003-10-04 05:27:56 +0000
committerGravatar Glenn L McGrath <bug1@ihug.co.nz>2003-10-04 05:27:56 +0000
commit42c25735e6be3b4af504ae098cf287d259f6b37c (patch)
treef889e877fb60482717178a0fe12b27b49cd829da /editors
parentfd7bc13557a9b672f7f5ba8ef5677c3317bd12ee (diff)
downloadbusybox-42c25735e6be3b4af504ae098cf287d259f6b37c.tar.gz
busybox-42c25735e6be3b4af504ae098cf287d259f6b37c.tar.bz2
Patch from Rob Landley;
Moving on to building diffutils, busybox sed needs this patch to get past the first problem. (Passing it a multi-line command line argument with -e works, but if you don't use -e it doesn't break up the multiple lines...)
Diffstat (limited to 'editors')
-rw-r--r--editors/sed.c47
1 files changed, 24 insertions, 23 deletions
diff --git a/editors/sed.c b/editors/sed.c
index da06bf485..adf79d4d6 100644
--- a/editors/sed.c
+++ b/editors/sed.c
@@ -344,6 +344,8 @@ static int parse_subst_cmd(sed_cmd_t * const sed_cmd, const char *substr)
sed_cmd->which_match=(unsigned short)strtol(substr+idx,&pos,10);
idx=pos-substr;
}
+ /* Skip spaces */
+ if(isspace(substr[idx])) continue;
continue;
}
switch (substr[idx]) {
@@ -366,10 +368,6 @@ static int parse_subst_cmd(sed_cmd_t * const sed_cmd, const char *substr)
case 'I':
cflags |= REG_ICASE;
break;
- /* Skip spaces */
- case ' ':
- case '\t':
- break;
case ';':
case '}':
goto out;
@@ -1043,6 +1041,24 @@ discard_line:
}
}
+/* It is possible to have a command line argument with embedded
+ newlines. This counts as multiple command lines. */
+
+static void add_cmd_block(char *cmdstr)
+{
+ int go=1;
+ char *temp=bb_xstrdup(cmdstr),*temp2=temp;
+
+ while(go) {
+ int len=strcspn(temp2,"\n");
+ if(!temp2[len]) go=0;
+ else temp2[len]=0;
+ add_cmd(temp2);
+ temp2+=len+1;
+ }
+ free(temp);
+}
+
extern int sed_main(int argc, char **argv)
{
int opt, status = EXIT_SUCCESS;
@@ -1060,23 +1076,8 @@ extern int sed_main(int argc, char **argv)
be_quiet++;
break;
case 'e':
- {
- int go=1;
- char *temp=bb_xstrdup(optarg),*temp2=temp;
-
- /* It is possible to have a command line argument with embedded
- newlines. This counts as a multi-line argument. */
-
- while(go) {
- int len=strcspn(temp2,"\n");
- if(!temp2[len]) go=0;
- else temp2[len]=0;
- add_cmd(temp2);
- temp2+=len+1;
- }
- free(temp);
+ add_cmd_block(optarg);
break;
- }
case 'f':
{
FILE *cmdfile;
@@ -1097,8 +1098,6 @@ extern int sed_main(int argc, char **argv)
bb_show_usage();
}
}
- /* Flush any unfinished commands. */
- add_cmd("");
/* if we didn't get a pattern from a -e and no command file was specified,
* argv[optind] should be the pattern. no pattern, no worky */
@@ -1106,8 +1105,10 @@ extern int sed_main(int argc, char **argv)
if (argv[optind] == NULL)
bb_show_usage();
else
- add_cmd(argv[optind++]);
+ add_cmd_block(argv[optind++]);
}
+ /* Flush any unfinished commands. */
+ add_cmd("");
/* argv[(optind)..(argc-1)] should be names of file to process. If no
* files were specified or '-' was specified, take input from stdin.