aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRob Landley <rob@landley.net>2004-04-01 09:23:30 +0000
committerRob Landley <rob@landley.net>2004-04-01 09:23:30 +0000
commit25d82397f764f8e72a59ec37f5296f84c0f8916e (patch)
tree4560229c70edf36b6e98fb10d677c82f0a71e30d
parent0b5bf45d3252227dc44396efd196b6b97813cecf (diff)
downloadbusybox-w32-25d82397f764f8e72a59ec37f5296f84c0f8916e.tar.gz
busybox-w32-25d82397f764f8e72a59ec37f5296f84c0f8916e.tar.bz2
busybox-w32-25d82397f764f8e72a59ec37f5296f84c0f8916e.zip
The last patch broke:
sed -i "/^boo/a fred" ipsec.conf Which works in gnu sed. (And is _supposed_ to strip all the whitespace before "fred".) It also broke: sed -i -e "/^boo/a \\" -e " fred" ipsec.conf I.E. there can legally be spaces between the a and the backslash at the end of the line. And strangely enough, gnu sed accepts the following syntax as well: sed -i "/^boo/a \\ fred" ipsec.conf Which is a way of having the significant whitespace at the start of the line, all on one line. (But notice that the whitespace BEFORE the slash is still stripped, as is the slash itself. And notice that the naieve placement of "\n" there doesn't work, it puts an n at the start of the appended line. The double slashing is for shell escapes because you could escape the quote, you see. It's turned into a single backslash. But \n there is _not_ turned into a newline by the shell. So there.) This makes all three syntaxes work in my tests. I should probably start writing better documentation at some point. I posted my current sedtests.py file to the list, which needs a lot more tests added as well...
-rw-r--r--editors/sed.c11
1 files changed, 8 insertions, 3 deletions
diff --git a/editors/sed.c b/editors/sed.c
index ea99dd856..168a69c5b 100644
--- a/editors/sed.c
+++ b/editors/sed.c
@@ -6,6 +6,7 @@
6 * Copyright (C) 1999,2000,2001 by Mark Whitley <markw@codepoet.org> 6 * Copyright (C) 1999,2000,2001 by Mark Whitley <markw@codepoet.org>
7 * Copyright (C) 2002 Matt Kraai 7 * Copyright (C) 2002 Matt Kraai
8 * Copyright (C) 2003 by Glenn McGrath <bug1@optushome.com.au> 8 * Copyright (C) 2003 by Glenn McGrath <bug1@optushome.com.au>
9 * Copyright (C) 2003,2004 by Rob Landley <rob@landley.net>
9 * 10 *
10 * This program is free software; you can redistribute it and/or modify 11 * This program is free software; you can redistribute it and/or modify
11 * it under the terms of the GNU General Public License as published by 12 * it under the terms of the GNU General Public License as published by
@@ -410,9 +411,13 @@ static char *parse_cmd_args(sed_cmd_t *sed_cmd, char *cmdstr)
410 if ((sed_cmd->end_line || sed_cmd->end_match) && sed_cmd->cmd != 'c') 411 if ((sed_cmd->end_line || sed_cmd->end_match) && sed_cmd->cmd != 'c')
411 bb_error_msg_and_die 412 bb_error_msg_and_die
412 ("only a beginning address can be specified for edit commands"); 413 ("only a beginning address can be specified for edit commands");
413 if (*cmdstr != '\n') /* should not happen */ 414 for(;;) {
414 bb_error_msg_and_die("A/I/C backslash not followed by NL?"); 415 if(*cmdstr=='\n' || *cmdstr=='\\') {
415 cmdstr++; /* skip over the NL following the backslash */ 416 cmdstr++;
417 break;
418 } else if(isspace(*cmdstr)) cmdstr++;
419 else break;
420 }
416 sed_cmd->string = bb_xstrdup(cmdstr); 421 sed_cmd->string = bb_xstrdup(cmdstr);
417 parse_escapes(sed_cmd->string,sed_cmd->string,strlen(cmdstr),0,0); 422 parse_escapes(sed_cmd->string,sed_cmd->string,strlen(cmdstr),0,0);
418 cmdstr += strlen(cmdstr); 423 cmdstr += strlen(cmdstr);