diff options
author | Ben Elliston <bje@au.ibm.com> | 2008-01-23 05:12:47 +0000 |
---|---|---|
committer | Ben Elliston <bje@au.ibm.com> | 2008-01-23 05:12:47 +0000 |
commit | b4b41ceb4ac9df4cbfba1f788aef544db52dd483 (patch) | |
tree | e3e1b5c8afe0890b898b206d66c5de65c50c54ec /libiberty/cplus-dem.c | |
parent | 190905953594ebad22db944c9b1175cdf3301e4b (diff) | |
download | gdb-b4b41ceb4ac9df4cbfba1f788aef544db52dd483.zip gdb-b4b41ceb4ac9df4cbfba1f788aef544db52dd483.tar.gz gdb-b4b41ceb4ac9df4cbfba1f788aef544db52dd483.tar.bz2 |
2008-01-23 Thiago Jung Bauermann <bauerman@br.ibm.com>
* cplus-dem.c (demangle_function_name): Changed to return value
indicating if a name was correctly demangled.
(iterate_demangle_function): Use demangle_function_name return
value.
Diffstat (limited to 'libiberty/cplus-dem.c')
-rw-r--r-- | libiberty/cplus-dem.c | 32 |
1 files changed, 20 insertions, 12 deletions
diff --git a/libiberty/cplus-dem.c b/libiberty/cplus-dem.c index 1f8b1fc..da01a06 100644 --- a/libiberty/cplus-dem.c +++ b/libiberty/cplus-dem.c @@ -414,7 +414,7 @@ static int do_type (struct work_stuff *, const char **, string *); static int do_arg (struct work_stuff *, const char **, string *); -static void +static int demangle_function_name (struct work_stuff *, const char **, string *, const char *); @@ -2493,10 +2493,7 @@ iterate_demangle_function (struct work_stuff *work, const char **mangled, "__"-sequence. This is the normal case. */ if (ARM_DEMANGLING || LUCID_DEMANGLING || HP_DEMANGLING || EDG_DEMANGLING || strstr (scan + 2, "__") == NULL) - { - demangle_function_name (work, mangled, declp, scan); - return 1; - } + return demangle_function_name (work, mangled, declp, scan); /* Save state so we can restart if the guess at the correct "__" was wrong. */ @@ -2513,10 +2510,12 @@ iterate_demangle_function (struct work_stuff *work, const char **mangled, while (scan[2]) { - demangle_function_name (work, mangled, declp, scan); - success = demangle_signature (work, mangled, declp); - if (success) - break; + if (demangle_function_name (work, mangled, declp, scan)) + { + success = demangle_signature (work, mangled, declp); + if (success) + break; + } /* Reset demangle state for the next round. */ *mangled = mangle_init; @@ -4421,7 +4420,9 @@ demangle_nested_args (struct work_stuff *work, const char **mangled, return result; } -static void +/* Returns 1 if a valid function name was found or 0 otherwise. */ + +static int demangle_function_name (struct work_stuff *work, const char **mangled, string *declp, const char *scan) { @@ -4461,13 +4462,13 @@ demangle_function_name (struct work_stuff *work, const char **mangled, { work -> constructor += 1; string_clear (declp); - return; + return 1; } else if (strcmp (declp -> b, "__dt") == 0) { work -> destructor += 1; string_clear (declp); - return; + return 1; } } @@ -4575,6 +4576,13 @@ demangle_function_name (struct work_stuff *work, const char **mangled, } } } + + /* If a function name was obtained but it's not valid, we were not + successful. */ + if (LEN_STRING (declp) == 1 && declp->b[0] == '.') + return 0; + else + return 1; } /* a mini string-handling package */ |