(construct_command_argv_internal): Swallow backslash-newline combinations

inside '' strings too.
This commit is contained in:
Roland McGrath 1994-05-10 20:27:17 +00:00
parent 65d0cd98a9
commit e83c7d40cd

12
job.c
View file

@ -1241,9 +1241,12 @@ construct_command_argv_internal (line, restp, shell, ifs)
if (instring)
{
/* Inside a string, just copy any char except a closing quote. */
/* Inside a string, just copy any char except a closing quote
or a backslash-newline combination. */
if (*p == '\'')
instring = 0;
else if (*p == '\\' && p[1] == '\n')
goto swallow_escaped_newline;
else if (*p == '\n' && restp != NULL)
{
/* End of the command line. */
@ -1275,6 +1278,8 @@ construct_command_argv_internal (line, restp, shell, ifs)
/* Backslash-newline combinations are eaten. */
if (p[1] == '\n')
{
swallow_escaped_newline:
/* Eat the backslash, the newline, and following whitespace,
replacing it all with a single space. */
p += 2;
@ -1286,6 +1291,10 @@ construct_command_argv_internal (line, restp, shell, ifs)
if (*p == '\t')
strcpy (p, p + 1);
if (instring)
*ap++ = *p;
else
{
if (ap != new_argv[i])
/* Treat this as a space, ending the arg.
But if it's at the beginning of the arg, it should
@ -1294,6 +1303,7 @@ construct_command_argv_internal (line, restp, shell, ifs)
else
p = next_token (p) - 1;
}
}
else if (p[1] != '\0')
/* Copy and skip the following char. */
*ap++ = *++p;