X-Git-Url: http://drtracing.org/?a=blobdiff_plain;f=gdb%2Fcp-support.c;h=5662f86249763aff3bbae1b7ba1fe83acdddb5c0;hb=f166f943f30a91792e8754cbca9d7652fc400aae;hp=dc0a0578d92f5473ea32c1ccef1c5d0cec9c6c5c;hpb=22cee43f9af76fc4c10c3d4018a9ada6d7c5c1a5;p=deliverable%2Fbinutils-gdb.git diff --git a/gdb/cp-support.c b/gdb/cp-support.c index dc0a0578d9..5662f86249 100644 --- a/gdb/cp-support.c +++ b/gdb/cp-support.c @@ -1,5 +1,5 @@ /* Helper routines for C++ support in GDB. - Copyright (C) 2002-2015 Free Software Foundation, Inc. + Copyright (C) 2002-2016 Free Software Foundation, Inc. Contributed by MontaVista Software. @@ -34,7 +34,7 @@ #include "cp-abi.h" #include "namespace.h" #include - +#include "gdb_setjmp.h" #include "safe-ctype.h" #define d_left(dc) (dc)->u.s_binary.left @@ -92,7 +92,7 @@ copy_string_to_obstack (struct obstack *obstack, const char *string, long *len) { *len = strlen (string); - return obstack_copy (obstack, string, *len); + return (char *) obstack_copy (obstack, string, *len); } /* A cleanup wrapper for cp_demangled_name_parse_free. */ @@ -1037,8 +1037,13 @@ cp_find_first_component_aux (const char *name, int permissive) return strlen (name); } case '\0': - case ':': return index; + case ':': + /* ':' marks a component iff the next character is also a ':'. + Otherwise it is probably malformed input. */ + if (name[index + 1] == ':') + return index; + break; case 'o': /* Operator names can screw up the recursion. */ if (operator_possible @@ -1192,8 +1197,7 @@ make_symbol_overload_list (const char *func_name, sym_return_val_size = 100; sym_return_val_index = 0; - sym_return_val = xmalloc ((sym_return_val_size + 1) * - sizeof (struct symbol *)); + sym_return_val = XNEWVEC (struct symbol *, sym_return_val_size + 1); sym_return_val[0] = NULL; old_cleanups = make_cleanup (xfree, sym_return_val); @@ -1205,7 +1209,7 @@ make_symbol_overload_list (const char *func_name, else { char *concatenated_name - = alloca (strlen (the_namespace) + 2 + strlen (func_name) + 1); + = (char *) alloca (strlen (the_namespace) + 2 + strlen (func_name) + 1); strcpy (concatenated_name, the_namespace); strcat (concatenated_name, "::"); strcat (concatenated_name, func_name); @@ -1247,7 +1251,7 @@ make_symbol_overload_list_namespace (const char *func_name, else { char *concatenated_name - = alloca (strlen (the_namespace) + 2 + strlen (func_name) + 1); + = (char *) alloca (strlen (the_namespace) + 2 + strlen (func_name) + 1); strcpy (concatenated_name, the_namespace); strcat (concatenated_name, "::"); @@ -1298,7 +1302,7 @@ make_symbol_overload_list_adl_namespace (struct type *type, if (prefix_len != 0) { - the_namespace = alloca (prefix_len + 1); + the_namespace = (char *) alloca (prefix_len + 1); strncpy (the_namespace, type_name, prefix_len); the_namespace[prefix_len] = '\0'; @@ -1340,7 +1344,7 @@ make_symbol_overload_list_adl (struct type **arg_types, int nargs, static void reset_directive_searched (void *data) { - struct using_direct *direct = data; + struct using_direct *direct = (struct using_direct *) data; direct->searched = 0; } @@ -1536,7 +1540,7 @@ gdb_demangle (const char *name, int options) #if defined (HAVE_SIGACTION) && defined (SA_RESTART) struct sigaction sa, old_sa; #else - void (*ofunc) (); + sighandler_t ofunc; #endif static int core_dump_allowed = -1; @@ -1560,7 +1564,7 @@ gdb_demangle (const char *name, int options) #endif sigaction (SIGSEGV, &sa, &old_sa); #else - ofunc = (void (*)()) signal (SIGSEGV, gdb_demangle_signal_handler); + ofunc = signal (SIGSEGV, gdb_demangle_signal_handler); #endif crash_signal = SIGSETJMP (gdb_demangle_jmp_buf); @@ -1597,7 +1601,9 @@ gdb_demangle (const char *name, int options) "demangler-warning", short_msg); make_cleanup (xfree, long_msg); - target_terminal_ours (); + make_cleanup_restore_target_terminal (); + target_terminal_ours_for_output (); + begin_line (); if (core_dump_allowed) fprintf_unfiltered (gdb_stderr, @@ -1647,7 +1653,7 @@ first_component_command (char *arg, int from_tty) return; len = cp_find_first_component (arg); - prefix = alloca (len + 1); + prefix = (char *) alloca (len + 1); memcpy (prefix, arg, len); prefix[len] = '\0';