diff options
-rw-r--r-- | gdb/ChangeLog | 6 | ||||
-rw-r--r-- | gdb/utils.c | 58 |
2 files changed, 61 insertions, 3 deletions
diff --git a/gdb/ChangeLog b/gdb/ChangeLog index 97f6729..8131229 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,9 @@ +Wed Sep 2 20:45:31 1992 Per Bothner (bothner@rtl.cygnus.com) + + * utils.c (strcmp_iw): Add a hack to allow "FOO(ARGS)" to + match "FOO". This allows 'break Foo' to work when Foo is + a mangled C++ function. (See comment before function.) + Wed Sep 2 13:45:27 1992 John Gilmore (gnu@cygnus.com) * config/rs6000.mh (MH_CFLAGS): Circumvent IBM <rpc/rpc.h> bug, diff --git a/gdb/utils.c b/gdb/utils.c index 2e0a1f8..b99e4f9 100644 --- a/gdb/utils.c +++ b/gdb/utils.c @@ -699,6 +699,8 @@ query (va_alist) while (1) { + wrap_here (""); /* Flush any buffered output */ + fflush (stdout); va_start (args); ctlstr = va_arg (args, char *); vfprintf_filtered (stdout, ctlstr, args); @@ -1215,13 +1217,38 @@ void fprintf_filtered (va_alist) va_dcl { + va_list args; FILE *stream; char *format; + + va_start (args); + stream = va_arg (args, FILE *); + format = va_arg (args, char *); + + /* This won't blow up if the restrictions described above are + followed. */ + vfprintf_filtered (stream, format, args); + va_end (args); +} + +/* Like fprintf_filtered, but prints it's result indent. + Called as fprintfi_filtered (spaces, format, arg1, arg2, ...); */ + +/* VARARGS */ +void +fprintfi_filtered (va_alist) + va_dcl +{ va_list args; + int spaces; + FILE *stream; + char *format; va_start (args); + spaces = va_arg (args, int); stream = va_arg (args, FILE *); format = va_arg (args, char *); + print_spaces_filtered (spaces, stream); /* This won't blow up if the restrictions described above are followed. */ @@ -1244,6 +1271,26 @@ printf_filtered (va_alist) va_end (args); } +/* Like printf_filtered, but prints it's result indented. + Called as printfi_filtered (spaces, format, arg1, arg2, ...); */ + +/* VARARGS */ +void +printfi_filtered (va_alist) + va_dcl +{ + va_list args; + int spaces; + char *format; + + va_start (args); + spaces = va_arg (args, int); + format = va_arg (args, char *); + print_spaces_filtered (spaces, stdout); + vfprintf_filtered (stdout, format, args); + va_end (args); +} + /* Easy */ void @@ -1325,9 +1372,14 @@ fprint_symbol (stream, name) /* Do a strcmp() type operation on STRING1 and STRING2, ignoring any differences in whitespace. Returns 0 if they match, non-zero if they - don't (slightly different than strcmp()'s range of return values). */ + don't (slightly different than strcmp()'s range of return values). + + As an extra hack, string1=="FOO(ARGS)" matches string2=="FOO". + This "feature" is useful for demangle_and_match(), which is used + when searching for matching C++ function names (such as if the + user types 'break FOO', where FOO is a mangled C++ function). */ -int +static int strcmp_iw (string1, string2) const char *string1; const char *string2; @@ -1352,7 +1404,7 @@ strcmp_iw (string1, string2) string2++; } } - return (!((*string1 == '\0') && (*string2 == '\0'))); + return (*string1 != '\0' && *string1 != '(') || (*string2 != '\0'); } /* Demangle NAME and compare the result with LOOKFOR, ignoring any differences |