summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--commands.c20
1 files changed, 16 insertions, 4 deletions
diff --git a/commands.c b/commands.c
index 7544e51..d575b0c 100644
--- a/commands.c
+++ b/commands.c
@@ -203,15 +203,27 @@ chop_commands (cmds)
nlines = 5;
lines = (char **) xmalloc (5 * sizeof (char *));
- idx = strlen (cmds->commands) + 1;
- p = (char *) alloca (idx);
- bcopy (cmds->commands, p, idx);
idx = 0;
+ p = cmds->commands;
while (*p != '\0')
{
- char *end = find_char_unquote (p, '\n', 0);
+ char *end = p;
+ find_end:;
+ end = index (end, '\n');
if (end == 0)
end = p + strlen (p);
+ else if (end > p && end[-1] == '\\')
+ {
+ int backslash = 1;
+ register char *b;
+ for (b = end - 2; b >= p && *b == '\\'; --b)
+ backslash = !backslash;
+ if (backslash)
+ {
+ ++end;
+ goto find_end;
+ }
+ }
if (idx == nlines)
{