From: Tom Tromey Date: Fri, 7 Apr 2017 05:26:14 +0000 (-0600) Subject: Remove some cleanups from location.c X-Git-Tag: gdb-8.0-release~120 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=4b217cc72b7ab04e2bea519f9fbd47d8952e08f5;p=external%2Fbinutils.git Remove some cleanups from location.c This removes some more cleanups from location.c by using unique_xmalloc_ptr. gdb/ChangeLog 2017-04-12 Tom Tromey * location.c (explicit_location_lex_one): Return a unique_xmalloc_ptr. (string_to_explicit_location): Update. Remove cleanups. --- diff --git a/gdb/ChangeLog b/gdb/ChangeLog index f6cad84..45c764e 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,5 +1,11 @@ 2017-04-12 Tom Tromey + * location.c (explicit_location_lex_one): Return a + unique_xmalloc_ptr. + (string_to_explicit_location): Update. Remove cleanups. + +2017-04-12 Tom Tromey + * gnu-v3-abi.c (value_and_voffset_p): Remove typedef. (compare_value_and_voffset): Change type. Update. (compute_vtable_size): Change type of "offset_vec". diff --git a/gdb/location.c b/gdb/location.c index 877c1ed..8aa8bd5 100644 --- a/gdb/location.c +++ b/gdb/location.c @@ -420,7 +420,7 @@ event_location_to_string (struct event_location *location) past any strings that it lexes. Returns a malloc'd copy of the lexed string or NULL if no lexing was done. */ -static char * +static gdb::unique_xmalloc_ptr explicit_location_lex_one (const char **inp, const struct language_defn *language) { @@ -444,7 +444,8 @@ explicit_location_lex_one (const char **inp, if (end == NULL) error (_("Unmatched quote, %s."), start); *inp = end + 1; - return savestring (start + 1, *inp - start - 2); + return gdb::unique_xmalloc_ptr (savestring (start + 1, + *inp - start - 2)); } } @@ -461,7 +462,8 @@ explicit_location_lex_one (const char **inp, while (isdigit (*inp[0])) ++(*inp); if (*inp[0] == '\0' || isspace (*inp[0]) || *inp[0] == ',') - return savestring (start, *inp - start); + return gdb::unique_xmalloc_ptr (savestring (start, + *inp - start)); /* Otherwise stop at the next occurrence of whitespace, '\0', keyword, or ','. */ @@ -480,7 +482,7 @@ explicit_location_lex_one (const char **inp, } if (*inp - start > 0) - return savestring (start, *inp - start); + return gdb::unique_xmalloc_ptr (savestring (start, *inp - start)); return NULL; } @@ -511,9 +513,7 @@ string_to_explicit_location (const char **argp, while ((*argp)[0] != '\0' && (*argp)[0] != ',') { int len; - char *opt, *oarg; const char *start; - struct cleanup *opt_cleanup, *oarg_cleanup; /* If *ARGP starts with a keyword, stop processing options. */ @@ -524,44 +524,40 @@ string_to_explicit_location (const char **argp, start = *argp; /* Get the option string. */ - opt = explicit_location_lex_one (argp, language); - opt_cleanup = make_cleanup (xfree, opt); + gdb::unique_xmalloc_ptr opt + = explicit_location_lex_one (argp, language); *argp = skip_spaces_const (*argp); /* Get the argument string. */ - oarg = explicit_location_lex_one (argp, language); - oarg_cleanup = make_cleanup (xfree, oarg); + gdb::unique_xmalloc_ptr oarg + = explicit_location_lex_one (argp, language); + bool have_oarg = oarg != NULL; *argp = skip_spaces_const (*argp); /* Use the length of the option to allow abbreviations. */ - len = strlen (opt); + len = strlen (opt.get ()); /* All options have a required argument. Checking for this required argument is deferred until later. */ - if (strncmp (opt, "-source", len) == 0) - EL_EXPLICIT (location)->source_filename = oarg; - else if (strncmp (opt, "-function", len) == 0) - EL_EXPLICIT (location)->function_name = oarg; - else if (strncmp (opt, "-line", len) == 0) + if (strncmp (opt.get (), "-source", len) == 0) + EL_EXPLICIT (location)->source_filename = oarg.release (); + else if (strncmp (opt.get (), "-function", len) == 0) + EL_EXPLICIT (location)->function_name = oarg.release (); + else if (strncmp (opt.get (), "-line", len) == 0) { - if (oarg != NULL) - { - EL_EXPLICIT (location)->line_offset - = linespec_parse_line_offset (oarg); - do_cleanups (oarg_cleanup); - do_cleanups (opt_cleanup); - continue; - } + if (have_oarg) + EL_EXPLICIT (location)->line_offset + = linespec_parse_line_offset (oarg.get ()); } - else if (strncmp (opt, "-label", len) == 0) - EL_EXPLICIT (location)->label_name = oarg; + else if (strncmp (opt.get (), "-label", len) == 0) + EL_EXPLICIT (location)->label_name = oarg.release (); /* Only emit an "invalid argument" error for options that look like option strings. */ - else if (opt[0] == '-' && !isdigit (opt[1])) + else if (opt.get ()[0] == '-' && !isdigit (opt.get ()[1])) { if (!dont_throw) - error (_("invalid explicit location argument, \"%s\""), opt); + error (_("invalid explicit location argument, \"%s\""), opt.get ()); } else { @@ -569,8 +565,6 @@ string_to_explicit_location (const char **argp, Stop parsing and return whatever explicit location was parsed. */ *argp = start; - discard_cleanups (oarg_cleanup); - do_cleanups (opt_cleanup); return location; } @@ -578,14 +572,8 @@ string_to_explicit_location (const char **argp, case, it provides a much better user experience to issue the "invalid argument" error before any missing argument error. */ - if (oarg == NULL && !dont_throw) - error (_("missing argument for \"%s\""), opt); - - /* The option/argument pair was successfully processed; - oarg belongs to the explicit location, and opt should - be freed. */ - discard_cleanups (oarg_cleanup); - do_cleanups (opt_cleanup); + if (!have_oarg && !dont_throw) + error (_("missing argument for \"%s\""), opt.get ()); } /* One special error check: If a source filename was given