Introduce gdb_argv, a class wrapper for buildargv
This introduces gdb_argv, a class wrapping an "argv" pointer; that is, a pointer to a NULL-terminated array of char*, where both the array and each non-NULL element in the array are xmalloc'd. This patch then changes most users of gdb_buildargv to use gdb_argv instead. ChangeLog 2017-08-03 Tom Tromey <tom@tromey.com> * utils.h (struct gdb_argv_deleter): New. (gdb_argv): New class. * utils.c (gdb_argv::reset): New method. * tracepoint.c (delete_trace_variable_command): Use gdb_argv. * tracefile.c (tsave_command): Use gdb_argv. * top.c (new_ui_command): Use gdb_argv. * symmisc.c (maintenance_print_symbols) (maintenance_print_msymbols, maintenance_expand_symtabs): Use gdb_argv. * symfile.c (symbol_file_command, generic_load) (remove_symbol_file_command): Use gdb_argv. * stack.c (backtrace_command): Use gdb_argv. * source.c (add_path, show_substitute_path_command) (unset_substitute_path_command, set_substitute_path_command): Use gdb_argv. * skip.c (skip_command): Use gdb_argv. Use gdb_buildargv. * ser-mingw.c (pipe_windows_open): Use gdb_argv. * remote.c (extended_remote_run, remote_put_command) (remote_get_command, remote_delete_command): Use gdb_argv. * remote-sim.c (gdbsim_load, gdbsim_create_inferior) (gdbsim_open): Use gdb_argv. * python/py-cmd.c (gdbpy_string_to_argv): Use gdb_argv. * psymtab.c (maintenance_print_psymbols): Use gdb_argv. * procfs.c (procfs_info_proc): Use gdb_argv. * interps.c (interpreter_exec_cmd): Use gdb_argv. * infrun.c (handle_command): Use gdb_argv. * inferior.c (add_inferior_command, clone_inferior_command): Use gdb_argv. * guile/scm-string.c (gdbscm_string_to_argv): Use gdb_argv. * exec.c (exec_file_command): Use gdb_argv. * cli/cli-cmds.c (alias_command): Use gdb_argv. * compile/compile.c (build_argc_argv): Use gdb_argv.
This commit is contained in:
parent
0d50bde32b
commit
773a1edcd1
24 changed files with 289 additions and 249 deletions
|
@ -1400,31 +1400,27 @@ alias_command (char *args, int from_tty)
|
|||
{
|
||||
int i, alias_argc, command_argc;
|
||||
int abbrev_flag = 0;
|
||||
char *args2, *equals;
|
||||
char *equals;
|
||||
const char *alias, *command;
|
||||
char **alias_argv, **command_argv;
|
||||
struct cleanup *cleanup;
|
||||
|
||||
if (args == NULL || strchr (args, '=') == NULL)
|
||||
alias_usage_error ();
|
||||
|
||||
args2 = xstrdup (args);
|
||||
cleanup = make_cleanup (xfree, args2);
|
||||
equals = strchr (args2, '=');
|
||||
*equals = '\0';
|
||||
alias_argv = gdb_buildargv (args2);
|
||||
make_cleanup_freeargv (alias_argv);
|
||||
command_argv = gdb_buildargv (equals + 1);
|
||||
make_cleanup_freeargv (command_argv);
|
||||
equals = strchr (args, '=');
|
||||
std::string args2 (args, equals - args);
|
||||
|
||||
for (i = 0; alias_argv[i] != NULL; )
|
||||
gdb_argv built_alias_argv (args2.c_str ());
|
||||
gdb_argv command_argv (equals + 1);
|
||||
|
||||
char **alias_argv = built_alias_argv.get ();
|
||||
while (alias_argv[0] != NULL)
|
||||
{
|
||||
if (strcmp (alias_argv[i], "-a") == 0)
|
||||
if (strcmp (alias_argv[0], "-a") == 0)
|
||||
{
|
||||
++alias_argv;
|
||||
abbrev_flag = 1;
|
||||
}
|
||||
else if (strcmp (alias_argv[i], "--") == 0)
|
||||
else if (strcmp (alias_argv[0], "--") == 0)
|
||||
{
|
||||
++alias_argv;
|
||||
break;
|
||||
|
@ -1449,12 +1445,13 @@ alias_command (char *args, int from_tty)
|
|||
}
|
||||
|
||||
alias_argc = countargv (alias_argv);
|
||||
command_argc = countargv (command_argv);
|
||||
command_argc = command_argv.count ();
|
||||
|
||||
/* COMMAND must exist.
|
||||
Reconstruct the command to remove any extraneous spaces,
|
||||
for better error messages. */
|
||||
std::string command_string (argv_to_string (command_argv, command_argc));
|
||||
std::string command_string (argv_to_string (command_argv.get (),
|
||||
command_argc));
|
||||
command = command_string.c_str ();
|
||||
if (! valid_command_p (command))
|
||||
error (_("Invalid command to alias to: %s"), command);
|
||||
|
@ -1511,8 +1508,6 @@ alias_command (char *args, int from_tty)
|
|||
command_argv[command_argc - 1],
|
||||
class_alias, abbrev_flag, c_command->prefixlist);
|
||||
}
|
||||
|
||||
do_cleanups (cleanup);
|
||||
}
|
||||
|
||||
/* Print a list of files and line numbers which a user may choose from
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue