diff options
author | Fred Fish <fnf@specifix.com> | 1992-06-29 23:34:38 +0000 |
---|---|---|
committer | Fred Fish <fnf@specifix.com> | 1992-06-29 23:34:38 +0000 |
commit | 51b57ded888cbdacb5ad126363f8ae6adc9541b6 (patch) | |
tree | 2e4f19add96d95001bd828328f309ca1b4a6b0a7 /gdb/utils.c | |
parent | 22fd4704bccdd29ab742445e9a4017e457ef449f (diff) | |
download | gdb-51b57ded888cbdacb5ad126363f8ae6adc9541b6.zip gdb-51b57ded888cbdacb5ad126363f8ae6adc9541b6.tar.gz gdb-51b57ded888cbdacb5ad126363f8ae6adc9541b6.tar.bz2 |
* dbxread.c, i386-pinsn.c, i386-tdep.c, regex.c, solib.c, symmisc.c,
symtab.h, tm-i386v4.h, valprint.c, values.c: Lint.
* breakpoint.c, c-exp.y, coffread.c, command.c, environ.c, eval.c,
findvar.c, infcmd.c, infptrace.c, infrun.c, m2-exp.y, parse.c,
putenv.c, solib.c, sparc-xdep.c, symtab.c, tm-i386v.h, tm-sparc.h,
utils.c, valarith.c, valops.c, valprint.c, values.c:
Replace bcopy() use with memcpy(), which is more standard and can
take advantage of gcc's builtin functions for increased performance.
* breakpoint.c, buildsym.c, coffread.c, dbxread.c, i386-tdep.c,
ieee-float.c, infcmd.c, sparc-tdep.c, stack.c, symtab.c, symtab.h,
target.c, values.c:
Replace bzero() use with memset(), which is more standard and can
take advantage of gcc's builtin functions for increased performance.
* i386-tdep.c, main.c, valprint.c:
Replace bcmp() use with memcmp(), which is more standard and can
take advantage of gcc's builtin functions for increased performance.
Diffstat (limited to 'gdb/utils.c')
-rw-r--r-- | gdb/utils.c | 100 |
1 files changed, 96 insertions, 4 deletions
diff --git a/gdb/utils.c b/gdb/utils.c index bdadedb..15efc73 100644 --- a/gdb/utils.c +++ b/gdb/utils.c @@ -18,10 +18,11 @@ along with this program; if not, write to the Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ #include "defs.h" - +#if !defined(__GO32__) #include <sys/ioctl.h> #include <sys/param.h> #include <pwd.h> +#endif #include <varargs.h> #include <ctype.h> #include <string.h> @@ -402,6 +403,7 @@ quit () { target_terminal_ours (); wrap_here ((char *)0); /* Force out any pending output */ +#if !defined(__GO32__) #ifdef HAVE_TERMIO ioctl (fileno (stdout), TCFLSH, 1); #else /* not HAVE_TERMIO */ @@ -412,6 +414,7 @@ quit () #else error ("Quit (expect signal %d when inferior is resumed)", SIGINT); #endif /* TIOCGPGRP */ +#endif } /* Control C comes here */ @@ -631,7 +634,7 @@ savestring (ptr, size) int size; { register char *p = (char *) xmalloc (size + 1); - bcopy (ptr, p, size); + (void) memcpy (p, ptr, size); p[size] = 0; return p; } @@ -643,7 +646,7 @@ msavestring (md, ptr, size) int size; { register char *p = (char *) xmmalloc (md, size + 1); - bcopy (ptr, p, size); + (void) memcpy (p, ptr, size); p[size] = 0; return p; } @@ -1285,6 +1288,24 @@ print_spaces_filtered (n, stream) /* C++ demangler stuff. */ +/* Make a copy of a symbol, applying C++ demangling if demangling is enabled + and a demangled version exists. Note that the value returned from + cplus_demangle is already allocated in malloc'd memory. */ + +char * +strdup_demangled (name) + const char *name; +{ + char *demangled = NULL; + + if (demangle) + { + demangled = cplus_demangle (name, DMGL_PARAMS | DMGL_ANSI); + } + return ((demangled != NULL) ? demangled : strdup (name)); +} + + /* Print NAME on STREAM, demangling if necessary. */ void fprint_symbol (stream, name) @@ -1301,6 +1322,73 @@ fprint_symbol (stream, name) free (demangled); } } + +/* 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). */ + +int +strcmp_iw (string1, string2) + const char *string1; + const char *string2; +{ + while ((*string1 != '\0') && (*string2 != '\0')) + { + while (isspace (*string1)) + { + string1++; + } + while (isspace (*string2)) + { + string2++; + } + if (*string1 != *string2) + { + break; + } + if (*string1 != '\0') + { + string1++; + string2++; + } + } + return (!((*string1 == '\0') && (*string2 == '\0'))); +} + +/* Demangle NAME and compare the result with LOOKFOR, ignoring any differences + in whitespace. + + If a match is found, returns a pointer to the demangled version of NAME + in malloc'd memory, which needs to be freed by the caller after use. + If a match is not found, returns NULL. + + OPTIONS is a flags word that controls the demangling process and is just + passed on to the demangler. + + When the caller sees a non-NULL result, it knows that NAME is the mangled + equivalent of LOOKFOR, and it can use either NAME, the "official demangled" + version of NAME (the return value) or the "unofficial demangled" version + of NAME (LOOKFOR, which it already knows). */ + +char * +demangle_and_match (name, lookfor, options) + const char *name; + const char *lookfor; + int options; +{ + char *demangled; + + if ((demangled = cplus_demangle (name, options)) != NULL) + { + if (strcmp_iw (demangled, lookfor) != 0) + { + free (demangled); + demangled = NULL; + } + } + return (demangled); +} + void _initialize_utils () @@ -1322,6 +1410,10 @@ _initialize_utils () /* These defaults will be used if we are unable to get the correct values from termcap. */ +#if defined(__GO32__) + lines_per_page = ScreenRows(); + chars_per_line = ScreenCols(); +#else lines_per_page = 24; chars_per_line = 80; /* Initialize the screen height and width from termcap. */ @@ -1364,7 +1456,7 @@ _initialize_utils () /* If there is a better way to determine the window size, use it. */ SIGWINCH_HANDLER (); #endif - +#endif /* If the output is not a terminal, don't paginate it. */ if (!ISATTY (stdout)) lines_per_page = UINT_MAX; |