* infcmd.c (construct_inferior_arguments): Handle newlines
authorAndreas Schwab <schwab@linux-m68k.org>
Thu, 30 Oct 2008 10:07:16 +0000 (10:07 +0000)
committerAndreas Schwab <schwab@linux-m68k.org>
Thu, 30 Oct 2008 10:07:16 +0000 (10:07 +0000)
specially.

testsuite/:
* gdb.base/args.exp: Add tests for newlines.

gdb/ChangeLog
gdb/infcmd.c
gdb/testsuite/ChangeLog
gdb/testsuite/gdb.base/args.exp

index 389c5fa1c2456f4f5aed4a177857547fd0b05af6..0ee79047e246cdc8bc88dd78cd841ee8fdf8ead9 100644 (file)
@@ -1,3 +1,8 @@
+2008-10-30  Andreas Schwab  <schwab@suse.de>
+
+       * infcmd.c (construct_inferior_arguments): Handle newlines
+       specially.
+
 2008-10-30  Joel Brobecker  <brobecker@adacore.com>
 
        * breakpoint.h (enum bptype): Delete bp_catch_exec.
index 8060af5ed148a88d7eca179627538691f8ee28f8..607d2b3daafe8a2a26f9ff50fbd3d6ec11dbe09f 100644 (file)
@@ -270,7 +270,7 @@ construct_inferior_arguments (struct gdbarch *gdbarch, int argc, char **argv)
 
       /* 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;
@@ -290,9 +290,21 @@ construct_inferior_arguments (struct gdbarch *gdbarch, int argc, char **argv)
            {
              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;
+                   }
                }
            }
        }
index 5229ff2793b4325abc076ae3193648566efe7d37..9ad4f2d68db5935dfc944f54876a4f4cc7ecf2d2 100644 (file)
@@ -1,3 +1,7 @@
+2008-10-30  Andreas Schwab  <schwab@suse.de>
+
+       * gdb.base/args.exp: Add tests for newlines.
+
 2008-10-30  Joel Brobecker  <brobecker@adacore.com>
 
        gdb.base/foll-exec.exp: Update the expected output of a couple
index 544fca7c6e0b4ada8d3e172b98483459f0125c7a..372bfe15ba658d2555f7418cc25e0fd9e0af214d 100644 (file)
@@ -96,4 +96,12 @@ args_test "one empty (with single quotes)" {{1} {''} {3}}
 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