This is the mail archive of the
gdb-patches@sourceware.org
mailing list for the GDB project.
Re: [PATCH:gdb/mi] Update a specified list of variable objects
> I've tried to address this point below. It's even in unified diff format!
Actually it's probably better to use isdigit like below
--
Nick http://www.inet.net.nz/~nickrob
--- mi-cmd-var.c.~1.61~ 2009-09-16 18:30:24.000000000 +1200
+++ mi-cmd-var.c 2009-09-22 11:59:40.000000000 +1200
@@ -660,19 +660,57 @@ mi_cmd_var_update (char *command, char *
struct cleanup *cleanup;
char *name;
enum print_values print_values;
+ int optind = 0;
+ char *optarg;
+ struct varobj *var;
+
+ enum opt
+ {
+ NO_VALUES, SIMPLE_VALUES, ALL_VALUES
+ };
- if (argc != 1 && argc != 2)
- error (_("mi_cmd_var_update: Usage: [PRINT_VALUES] NAME."));
+ static struct mi_opt opts[] =
+ {
+ { "-no-values", NO_VALUES, 0 },
+ { "-simple-values", SIMPLE_VALUES, 0 },
+ { "-all-values", ALL_VALUES, 0 },
+ { 0, 0, 0 }
+ };
if (argc == 1)
- name = argv[0];
+ print_values = PRINT_NO_VALUES;
+ else if (argc == 2 && isdigit (*argv[0]))
+ {
+ optind = 1;
+ print_values = mi_parse_values_option (argv[0]);
+ }
else
- name = (argv[1]);
+ {
+ while (1)
+ {
+ int opt = mi_getopt ("mi_cmd_var_update",
+ argc, argv, opts, &optind, &optarg);
+ if (opt < 0)
+ break;
+ switch ((enum opt) opt)
+ {
+ case NO_VALUES:
+ print_values = PRINT_NO_VALUES;
+ break;
+ case SIMPLE_VALUES:
+ print_values = PRINT_SIMPLE_VALUES;
+ break;
+ case ALL_VALUES:
+ print_values = PRINT_ALL_VALUES;
+ break;
+ }
+ }
- if (argc == 2)
- print_values = mi_parse_values_option (argv[0]);
- else
- print_values = PRINT_NO_VALUES;
+ if (optind >= argc)
+ error (_("mi_cmd_var_update: Usage: [PRINT_VALUES] NAME1 NAME2 ..."));
+ }
+
+ name = argv[optind];
if (mi_version (uiout) <= 1)
cleanup = make_cleanup_ui_out_tuple_begin_end (uiout, "changelist");
@@ -697,10 +735,15 @@ mi_cmd_var_update (char *command, char *
}
else
{
- /* Get varobj handle, if a valid var obj name was specified */
- struct varobj *var = varobj_get_handle (name);
+ int index = optind;
+ while (argv[index])
+ {
+ /* Get varobj handle, if a valid var obj name was specified */
+ var = varobj_get_handle (argv[index]);
- varobj_update_one (var, print_values, 1 /* explicit */);
+ varobj_update_one (var, print_values, 1 /* explicit */);
+ index++;
+ }
}
do_cleanups (cleanup);