diff options
author | Tom Tromey <tom@tromey.com> | 2018-05-23 21:05:52 -0600 |
---|---|---|
committer | Tom Tromey <tom@tromey.com> | 2018-06-01 10:46:47 -0600 |
commit | 3513a6bb20ef286e303367d4ef4963b5dab877cb (patch) | |
tree | 7bcda23d6421fa378b8ff0fdd657467a06d649a0 /gdb/cp-name-parser.y | |
parent | e9cb46ab59ff2ea94a7fd9fa857a084d3a9b8b39 (diff) | |
download | binutils-3513a6bb20ef286e303367d4ef4963b5dab877cb.zip binutils-3513a6bb20ef286e303367d4ef4963b5dab877cb.tar.gz binutils-3513a6bb20ef286e303367d4ef4963b5dab877cb.tar.bz2 |
Remove a static buffer from cp-name-parser.y
This removes a static buffer from cp-name-parser.y by replacing the
fixed-sized buffer with a std::string out parameter.
gdb/ChangeLog
2018-06-01 Tom Tromey <tom@tromey.com>
* python/py-type.c (typy_legacy_template_argument): Update.
* cp-support.h (cp_demangled_name_to_comp): Update.
* cp-name-parser.y (cp_demangled_name_to_comp): Change errmsg
parameter to be a "std::string *".
(main): Update.
Diffstat (limited to 'gdb/cp-name-parser.y')
-rw-r--r-- | gdb/cp-name-parser.y | 22 |
1 files changed, 9 insertions, 13 deletions
diff --git a/gdb/cp-name-parser.y b/gdb/cp-name-parser.y index ebae562..3e1c9d9 100644 --- a/gdb/cp-name-parser.y +++ b/gdb/cp-name-parser.y @@ -2033,13 +2033,12 @@ cp_merge_demangle_parse_infos (struct demangle_parse_info *dest, /* Convert a demangled name to a demangle_component tree. On success, a structure containing the root of the new tree is returned. On error, NULL is returned, and an error message will be set in - *ERRMSG (which does not need to be freed). */ + *ERRMSG. */ struct std::unique_ptr<demangle_parse_info> -cp_demangled_name_to_comp (const char *demangled_name, const char **errmsg) +cp_demangled_name_to_comp (const char *demangled_name, + std::string *errmsg) { - static char errbuf[60]; - prev_lexptr = lexptr = demangled_name; error_lexptr = NULL; global_errmsg = NULL; @@ -2052,12 +2051,8 @@ cp_demangled_name_to_comp (const char *demangled_name, const char **errmsg) if (yyparse ()) { if (global_errmsg && errmsg) - { - snprintf (errbuf, sizeof (errbuf) - 2, "%s, near `%s", - global_errmsg, error_lexptr); - strcat (errbuf, "'"); - *errmsg = errbuf; - } + *errmsg = string_printf ("%s, near `%s'", global_errmsg, + error_lexptr); return NULL; } @@ -2133,7 +2128,6 @@ main (int argc, char **argv) char *str2, *extra_chars, c; char buf[65536]; int arg; - const char *errmsg; arg = 1; if (argv[arg] && strcmp (argv[arg], "--debug") == 0) @@ -2160,11 +2154,12 @@ main (int argc, char **argv) continue; } + std::string errmsg; std::unique_ptr<demangle_parse_info> result = cp_demangled_name_to_comp (str2, &errmsg); if (result == NULL) { - fputs (errmsg, stderr); + fputs (errmsg.c_str (), stderr); fputc ('\n', stderr); continue; } @@ -2181,11 +2176,12 @@ main (int argc, char **argv) } else { + std::string errmsg; std::unique_ptr<demangle_parse_info> result = cp_demangled_name_to_comp (argv[arg], &errmsg); if (result == NULL) { - fputs (errmsg, stderr); + fputs (errmsg.c_str (), stderr); fputc ('\n', stderr); return 0; } |