X-Git-Url: http://git.efficios.com/?a=blobdiff_plain;f=gdb%2Fmacroexp.c;h=e7a0dadaef7663aacc49f7c936cc18fc46817e35;hb=22827c51338ce25574ed7b204a2e5bd40f45bdad;hp=30db47a629be74e9cb537a1b534c01c1dd7b645d;hpb=ecd75fc8eed3bde86036141228074a20e55dcfc9;p=deliverable%2Fbinutils-gdb.git diff --git a/gdb/macroexp.c b/gdb/macroexp.c index 30db47a629..e7a0dadaef 100644 --- a/gdb/macroexp.c +++ b/gdb/macroexp.c @@ -1,5 +1,5 @@ /* C preprocessor macro expansion for GDB. - Copyright (C) 2002-2014 Free Software Foundation, Inc. + Copyright (C) 2002-2017 Free Software Foundation, Inc. Contributed by Red Hat, Inc. This file is part of GDB. @@ -22,7 +22,6 @@ #include "bcache.h" #include "macrotab.h" #include "macroexp.h" -#include "gdb_assert.h" #include "c-lang.h" @@ -54,8 +53,9 @@ struct macro_buffer /* Zero if TEXT can be safely realloc'ed (i.e., it's its own malloc block). Non-zero if TEXT is actually pointing into the middle of - some other block, and we shouldn't reallocate it. */ - int shared; + some other block, or to a string literal, and we shouldn't + reallocate it. */ + bool shared; /* For detecting token splicing. @@ -86,19 +86,22 @@ init_buffer (struct macro_buffer *b, int n) else b->text = NULL; b->len = 0; - b->shared = 0; + b->shared = false; b->last_token = -1; } /* Set the macro buffer *BUF to refer to the LEN bytes at ADDR, as a shared substring. */ + static void -init_shared_buffer (struct macro_buffer *buf, char *addr, int len) +init_shared_buffer (struct macro_buffer *buf, const char *addr, int len) { - buf->text = addr; + /* The function accept a "const char *" addr so that clients can + pass in string literals without casts. */ + buf->text = (char *) addr; buf->len = len; - buf->shared = 1; + buf->shared = true; buf->size = 0; buf->last_token = -1; } @@ -147,7 +150,7 @@ resize_buffer (struct macro_buffer *b, int n) while (b->size <= n) b->size *= 2; - b->text = xrealloc (b->text, b->size); + b->text = (char *) xrealloc (b->text, b->size); } @@ -167,7 +170,7 @@ appendc (struct macro_buffer *b, int c) /* Append the LEN bytes at ADDR to the buffer B. */ static void -appendmem (struct macro_buffer *b, char *addr, int len) +appendmem (struct macro_buffer *b, const char *addr, int len) { int new_len = b->len + len; @@ -815,7 +818,7 @@ gather_arguments (const char *name, struct macro_buffer *src, args_len = 0; args_size = 6; - args = (struct macro_buffer *) xmalloc (sizeof (*args) * args_size); + args = XNEWVEC (struct macro_buffer, args_size); for (;;) { @@ -826,7 +829,7 @@ gather_arguments (const char *name, struct macro_buffer *src, if (args_len >= args_size) { args_size *= 2; - args = xrealloc (args, sizeof (*args) * args_size); + args = XRESIZEVEC (struct macro_buffer, args, args_size); } /* Initialize the next argument. */ @@ -859,7 +862,8 @@ gather_arguments (const char *name, struct macro_buffer *src, if (args_len >= args_size) { args_size++; - args = xrealloc (args, sizeof (*args) * args_size); + args = XRESIZEVEC (struct macro_buffer, args, + args_size); } arg = &args[args_len++]; set_token (arg, src->text, src->text); @@ -980,7 +984,7 @@ substitute_args (struct macro_buffer *dest, lexed. */ char *lookahead_rl_start; - init_shared_buffer (&replacement_list, (char *) def->replacement, + init_shared_buffer (&replacement_list, def->replacement, strlen (def->replacement)); gdb_assert (dest->len == 0); @@ -1199,7 +1203,7 @@ expand (const char *id, { struct macro_buffer replacement_list; - init_shared_buffer (&replacement_list, (char *) def->replacement, + init_shared_buffer (&replacement_list, def->replacement, strlen (def->replacement)); scan (dest, &replacement_list, &new_no_loop, lookup_func, lookup_baton); @@ -1236,7 +1240,7 @@ expand (const char *id, substitution parameter is the name of the formal argument without the "...". */ init_shared_buffer (&va_arg_name, - (char *) def->argv[def->argc - 1], + def->argv[def->argc - 1], len - 3); is_varargs = 1; } @@ -1331,7 +1335,7 @@ maybe_expand (struct macro_buffer *dest, { /* Make a null-terminated copy of it, since that's what our lookup function expects. */ - char *id = xmalloc (src_first->len + 1); + char *id = (char *) xmalloc (src_first->len + 1); struct cleanup *back_to = make_cleanup (xfree, id); memcpy (id, src_first->text, src_first->len); @@ -1415,7 +1419,7 @@ macro_expand (const char *source, struct macro_buffer src, dest; struct cleanup *back_to; - init_shared_buffer (&src, (char *) source, strlen (source)); + init_shared_buffer (&src, source, strlen (source)); init_buffer (&dest, 0); dest.last_token = 0; @@ -1448,7 +1452,7 @@ macro_expand_next (const char **lexptr, struct cleanup *back_to; /* Set up SRC to refer to the input text, pointed to by *lexptr. */ - init_shared_buffer (&src, (char *) *lexptr, strlen (*lexptr)); + init_shared_buffer (&src, *lexptr, strlen (*lexptr)); /* Set up DEST to receive the expansion, if there is one. */ init_buffer (&dest, 0);