2006-04-07 Andrew Stubbs gdb/ * cli/cli-script.c (struct user_args): Add command field. (arg_cleanup): Free command string. (setup_user_args): Copy the command line before relying on it. gdb/testsuite/ * gdb.base/commands.exp (recursive_source_test): New test. Index: src/gdb/cli/cli-script.c =================================================================== --- src.orig/gdb/cli/cli-script.c 2006-04-07 12:01:55.000000000 +0100 +++ src/gdb/cli/cli-script.c 2006-04-07 12:12:03.000000000 +0100 @@ -54,6 +54,7 @@ static int control_level; struct user_args { struct user_args *next; + char *command; struct { char *arg; @@ -483,6 +484,7 @@ arg_cleanup (void *ignore) _("arg_cleanup called with no user args.\n")); user_args = user_args->next; + xfree (oargs->command); xfree (oargs); } @@ -507,6 +509,8 @@ setup_user_args (char *p) if (p == NULL) return old_chain; + user_args->command = p = xstrdup (p); + while (*p) { char *start_arg; Index: src/gdb/testsuite/gdb.base/commands.exp =================================================================== --- src.orig/gdb/testsuite/gdb.base/commands.exp 2006-04-07 12:11:50.000000000 +0100 +++ src/gdb/testsuite/gdb.base/commands.exp 2006-04-07 12:10:02.000000000 +0100 @@ -583,7 +583,40 @@ proc stray_arg0_test { } { "\\\$\[0-9\]* = 1" \ "stray_arg0_test #4" } - + +# Test that GDB can handle arguments when sourcing files recursively. +# If the arguments are overwritten with ####### then the test has failed. +proc recursive_source_test {} { + set fd [open "file1" w] + puts $fd \ +{source file2 +abcdef qwerty} + close $fd + + set fd [open "file2" w] + puts $fd \ +{define abcdef + echo 1: <<<$arg0>>>\n + source file3 + echo 2: <<<$arg0>>>\n +end} + close $fd + + set fd [open "file3" w] + puts $fd \ +"echo in file3\\n +#################################################################" + close $fd + + gdb_test "source file1" \ + "1: <<>>\[\r\n]+in file3\[\r\n]+2: <<>>" \ + "recursive source test" + + file delete file1 + file delete file2 + file delete file3 +} + gdbvar_simple_if_test gdbvar_simple_while_test gdbvar_complex_if_while_test @@ -600,3 +633,4 @@ deprecated_command_test bp_deleted_in_command_test temporary_breakpoint_commands stray_arg0_test +recursive_source_test