2008-09-12 Andreas Schwab * infcmd.c (construct_inferior_arguments): Handle newlines specially. testsuite/: * gdb.base/args.exp: Add tests for newlines. --- gdb/infcmd.c.~1.211.~ 2008-09-12 11:12:15.000000000 +0200 +++ gdb/infcmd.c 2008-09-12 16:25:48.000000000 +0200 @@ -271,7 +271,7 @@ construct_inferior_arguments (struct gdb /* We over-compute the size. It shouldn't matter. */ for (i = 0; i < argc; ++i) - length += 2 * strlen (argv[i]) + 1 + 2 * (argv[i][0] == '\0'); + length += 3 * strlen (argv[i]) + 1 + 2 * (argv[i][0] == '\0'); result = (char *) xmalloc (length); out = result; @@ -291,9 +291,21 @@ construct_inferior_arguments (struct gdb { for (cp = argv[i]; *cp; ++cp) { - if (strchr (special, *cp) != NULL) - *out++ = '\\'; - *out++ = *cp; + if (*cp == '\n') + { + /* A newline cannot be quoted with a backslash (it + just disappears), only by putting it inside + quotes. */ + *out++ = '\''; + *out++ = '\n'; + *out++ = '\''; + } + else + { + if (strchr (special, *cp) != NULL) + *out++ = '\\'; + *out++ = *cp; + } } } } --- gdb/testsuite/gdb.base/args.exp.~1.15.~ 2008-08-09 15:44:54.000000000 +0200 +++ gdb/testsuite/gdb.base/args.exp 2008-09-12 16:11:20.000000000 +0200 @@ -96,4 +96,12 @@ args_test "one empty (with single quotes set GDBFLAGS "-nx --args $binfile 1 '' '' 3" args_test "two empty (with single quotes)" {{1} {''} {''} {3}} +# try with arguments containing literal newlines. + +set GDBFLAGS "-nx --args $binfile 1 {\n} 3" +args_test "one newline" {{1} {\\n} {3}} + +set GDBFLAGS "-nx --args $binfile 1 {\n} {\n} 3" +args_test "two newlines" {{1} {\\n} {\\n} {3}} + set GDBFLAGS $old_gdbflags