Replace asprintf() / vasprintf() with xasprintf() xvasprintf().

This commit is contained in:
Andrew Cagney
2000-11-20 02:06:19 +00:00
parent 896f186799
commit 76995688e8
8 changed files with 106 additions and 77 deletions

View File

@@ -1,3 +1,15 @@
Fri Nov 17 16:07:23 2000 Andrew Cagney <cagney@b1.cygnus.com>
* utils.c (xvasprintf, xasprintf): New functions.
* defs.h (xvasprintf, xasprintf): Add declarations.
* remote.c (add_packet_config_cmd): Use function xasprintf instead
of asprintf.
* utils.c (vfprintf_maybe_filtered, vfprintf_unfiltered): Use
function xvasprintf instead of vasprintf.
* TODO (xasprintf): Update.
Mon Nov 20 12:22:32 2000 Andrew Cagney <cagney@b1.cygnus.com>
* TODO: Mention ``extern'' and ``STREQ'' cleanups.

View File

@@ -366,13 +366,6 @@ needed.
--
Replace asprintf() calls with xasprintf() calls.
As with things like strdup() most calls to asprintf() don't check the
return value.
--
Replace strsave() + mstrsave() with libiberty:xstrdup().
--

View File

@@ -835,6 +835,11 @@ extern PTR xmmalloc (PTR, long);
extern PTR xmrealloc (PTR, PTR, long);
#endif
/* Like asprintf/vasprintf but get an internal_error if the call
fails. */
extern void xasprintf (char **ret, const char *format, ...) ATTR_FORMAT (printf, 2, 3);
extern void xvasprintf (char **ret, const char *format, va_list ap);
extern int parse_escape (char **);
/* Message to be printed before the error message, when an error occurs. */

View File

@@ -1,3 +1,8 @@
Fri Nov 17 16:07:23 2000 Andrew Cagney <cagney@b1.cygnus.com>
* mi-main.c: Replace asprintf with xasprintf.
* mi-cmd-var.c (mi_cmd_var_create): Ditto.
2000-10-16 Eli Zaretskii <eliz@is.elta.co.il>
* gdbmi.texinfo (GDB/MI Variable Objects): Dimensions of

View File

@@ -52,7 +52,7 @@ mi_cmd_var_create (char *command, char **argv, int argc)
if (argc != 3)
{
/* asprintf (&mi_error_message,
/* xasprintf (&mi_error_message,
"mi_cmd_var_create: Usage: .");
return MI_CMD_ERROR; */
error ("mi_cmd_var_create: Usage: NAME FRAME EXPRESSION.");

View File

@@ -196,7 +196,8 @@ mi_cmd_exec_interrupt (char *args, int from_tty)
#ifdef UI_OUT
if (!target_executing)
{
asprintf (&mi_error_message, "mi_cmd_exec_interrupt: Inferior not executing.");
xasprintf (&mi_error_message,
"mi_cmd_exec_interrupt: Inferior not executing.");
return MI_CMD_ERROR;
}
interrupt_target_command_wrapper (args, from_tty);
@@ -222,8 +223,8 @@ mi_cmd_thread_select (char *command, char **argv, int argc)
if (argc != 1)
{
asprintf (&mi_error_message,
"mi_cmd_thread_select: USAGE: threadnum.");
xasprintf (&mi_error_message,
"mi_cmd_thread_select: USAGE: threadnum.");
return MI_CMD_ERROR;
}
else
@@ -242,8 +243,8 @@ mi_cmd_thread_list_ids (char *command, char **argv, int argc)
if (argc != 0)
{
asprintf (&mi_error_message,
"mi_cmd_thread_list_ids: No arguments required.");
xasprintf (&mi_error_message,
"mi_cmd_thread_list_ids: No arguments required.");
return MI_CMD_ERROR;
}
else
@@ -299,7 +300,7 @@ mi_cmd_data_list_register_names (char *command, char **argv, int argc)
ui_out_field_string (uiout, NULL, REGISTER_NAME (regnum));
else
{
asprintf (&mi_error_message, "bad register number");
xasprintf (&mi_error_message, "bad register number");
return MI_CMD_ERROR;
}
}
@@ -335,8 +336,8 @@ mi_cmd_data_list_changed_registers (char *command, char **argv, int argc)
changed = register_changed_p (regnum);
if (changed < 0)
{
asprintf (&mi_error_message,
"mi_cmd_data_list_changed_registers: Unable to read register contents.");
xasprintf (&mi_error_message,
"mi_cmd_data_list_changed_registers: Unable to read register contents.");
return MI_CMD_ERROR;
}
else if (changed)
@@ -357,8 +358,8 @@ mi_cmd_data_list_changed_registers (char *command, char **argv, int argc)
changed = register_changed_p (regnum);
if (changed < 0)
{
asprintf (&mi_error_message,
"mi_cmd_data_list_register_change: Unable to read register contents.");
xasprintf (&mi_error_message,
"mi_cmd_data_list_register_change: Unable to read register contents.");
return MI_CMD_ERROR;
}
else if (changed)
@@ -366,7 +367,7 @@ mi_cmd_data_list_changed_registers (char *command, char **argv, int argc)
}
else
{
asprintf (&mi_error_message, "bad register number");
xasprintf (&mi_error_message, "bad register number");
return MI_CMD_ERROR;
}
}
@@ -417,8 +418,8 @@ mi_cmd_data_list_register_values (char *command, char **argv, int argc)
if (argc == 0)
{
asprintf (&mi_error_message,
"mi_cmd_data_list_register_values: Usage: -data-list-register-values <format> [<regnum1>...<regnumN>]");
xasprintf (&mi_error_message,
"mi_cmd_data_list_register_values: Usage: -data-list-register-values <format> [<regnum1>...<regnumN>]");
return MI_CMD_ERROR;
}
@@ -426,7 +427,8 @@ mi_cmd_data_list_register_values (char *command, char **argv, int argc)
if (!target_has_registers)
{
asprintf (&mi_error_message, "mi_cmd_data_list_register_values: No registers.");
xasprintf (&mi_error_message,
"mi_cmd_data_list_register_values: No registers.");
return MI_CMD_ERROR;
}
@@ -469,7 +471,7 @@ mi_cmd_data_list_register_values (char *command, char **argv, int argc)
}
else
{
asprintf (&mi_error_message, "bad register number");
xasprintf (&mi_error_message, "bad register number");
return MI_CMD_ERROR;
}
}
@@ -499,7 +501,7 @@ get_register (int regnum, int format)
regnum, (enum lval_type *) NULL);
if (optim)
{
asprintf (&mi_error_message, "Optimized out");
xasprintf (&mi_error_message, "Optimized out");
return -1;
}
@@ -563,8 +565,8 @@ mi_cmd_data_write_register_values (char *command, char **argv, int argc)
if (argc == 0)
{
asprintf (&mi_error_message,
"mi_cmd_data_write_register_values: Usage: -data-write-register-values <format> [<regnum1> <value1>...<regnumN> <valueN>]");
xasprintf (&mi_error_message,
"mi_cmd_data_write_register_values: Usage: -data-write-register-values <format> [<regnum1> <value1>...<regnumN> <valueN>]");
return MI_CMD_ERROR;
}
@@ -572,19 +574,22 @@ mi_cmd_data_write_register_values (char *command, char **argv, int argc)
if (!target_has_registers)
{
asprintf (&mi_error_message, "mi_cmd_data_write_register_values: No registers.");
xasprintf (&mi_error_message,
"mi_cmd_data_write_register_values: No registers.");
return MI_CMD_ERROR;
}
if (!(argc - 1))
{
asprintf (&mi_error_message, "mi_cmd_data_write_register_values: No regs and values specified.");
xasprintf (&mi_error_message,
"mi_cmd_data_write_register_values: No regs and values specified.");
return MI_CMD_ERROR;
}
if ((argc - 1) % 2)
{
asprintf (&mi_error_message, "mi_cmd_data_write_register_values: Regs and vals are not in pairs.");
xasprintf (&mi_error_message,
"mi_cmd_data_write_register_values: Regs and vals are not in pairs.");
return MI_CMD_ERROR;
}
@@ -608,7 +613,7 @@ mi_cmd_data_write_register_values (char *command, char **argv, int argc)
}
else
{
asprintf (&mi_error_message, "bad register number");
xasprintf (&mi_error_message, "bad register number");
return MI_CMD_ERROR;
}
}
@@ -630,8 +635,8 @@ mi_cmd_data_assign (char *command, char **argv, int argc)
if (argc != 1)
{
asprintf (&mi_error_message,
"mi_cmd_data_assign: Usage: -data-assign expression");
xasprintf (&mi_error_message,
"mi_cmd_data_assign: Usage: -data-assign expression");
return MI_CMD_ERROR;
}
@@ -661,8 +666,8 @@ mi_cmd_data_evaluate_expression (char *command, char **argv, int argc)
if (argc != 1)
{
asprintf (&mi_error_message,
"mi_cmd_data_evaluate_expression: Usage: -data-evaluate-expression expression");
xasprintf (&mi_error_message,
"mi_cmd_data_evaluate_expression: Usage: -data-evaluate-expression expression");
return MI_CMD_ERROR;
}
@@ -691,9 +696,7 @@ mi_cmd_target_download (char *args, int from_tty)
char *run;
struct cleanup *old_cleanups = NULL;
asprintf (&run, "load %s", args);
if (run == 0)
internal_error ("mi_cmd_target_download: no memory");
xasprintf (&run, "load %s", args);
old_cleanups = make_cleanup (free, run);
execute_command (run, from_tty);
@@ -708,9 +711,7 @@ mi_cmd_target_select (char *args, int from_tty)
char *run;
struct cleanup *old_cleanups = NULL;
asprintf (&run, "target %s", args);
if (run == 0)
internal_error ("mi_cmd_target_select: no memory");
xasprintf (&run, "target %s", args);
old_cleanups = make_cleanup (free, run);
/* target-select is always synchronous. once the call has returned
@@ -798,8 +799,8 @@ mi_cmd_data_read_memory (char *command, char **argv, int argc)
if (argc < 5 || argc > 6)
{
asprintf (&mi_error_message,
"mi_cmd_data_read_memory: Usage: ADDR WORD-FORMAT WORD-SIZE NR-ROWS NR-COLS [ASCHAR].");
xasprintf (&mi_error_message,
"mi_cmd_data_read_memory: Usage: ADDR WORD-FORMAT WORD-SIZE NR-ROWS NR-COLS [ASCHAR].");
return MI_CMD_ERROR;
}
@@ -838,16 +839,16 @@ mi_cmd_data_read_memory (char *command, char **argv, int argc)
nr_rows = atol (argv[3]);
if (nr_rows <= 0)
{
asprintf (&mi_error_message,
"mi_cmd_data_read_memory: invalid number of rows.");
xasprintf (&mi_error_message,
"mi_cmd_data_read_memory: invalid number of rows.");
return MI_CMD_ERROR;
}
/* number of bytes per row. */
nr_cols = atol (argv[4]);
if (nr_cols <= 0)
{
asprintf (&mi_error_message,
"mi_cmd_data_read_memory: invalid number of columns.");
xasprintf (&mi_error_message,
"mi_cmd_data_read_memory: invalid number of columns.");
}
/* The un-printable character when printing ascii. */
if (argc == 6)
@@ -861,8 +862,8 @@ mi_cmd_data_read_memory (char *command, char **argv, int argc)
make_cleanup (free, mbuf);
if (mbuf == NULL)
{
asprintf (&mi_error_message,
"mi_cmd_data_read_memory: out of memory.");
xasprintf (&mi_error_message,
"mi_cmd_data_read_memory: out of memory.");
return MI_CMD_ERROR;
}
nr_bytes = 0;
@@ -1004,8 +1005,8 @@ mi_cmd_data_write_memory (char *command, char **argv, int argc)
if (argc != 4)
{
asprintf (&mi_error_message,
"mi_cmd_data_write_memory: Usage: [-o COLUMN_OFFSET] ADDR FORMAT WORD-SIZE VALUE.");
xasprintf (&mi_error_message,
"mi_cmd_data_write_memory: Usage: [-o COLUMN_OFFSET] ADDR FORMAT WORD-SIZE VALUE.");
return MI_CMD_ERROR;
}
@@ -1242,13 +1243,11 @@ mi_execute_cli_command (const char *cli, char *args)
{
struct cleanup *old_cleanups;
char *run;
asprintf (&run, cli, args);
xasprintf (&run, cli, args);
if (mi_debug_p)
/* FIXME: gdb_???? */
fprintf_unfiltered (gdb_stdout, "cli=%s run=%s\n",
cli, run);
if (run == 0)
abort ();
old_cleanups = make_cleanup (free, run);
execute_command ( /*ui */ run, 0 /*from_tty */ );
do_cleanups (old_cleanups);
@@ -1269,17 +1268,13 @@ mi_execute_async_cli_command (char *mi, char *args, int from_tty)
make_exec_cleanup (free, async_args);
strcpy (async_args, args);
strcat (async_args, "&");
asprintf (&run, "%s %s", mi, async_args);
if (run == 0)
internal_error ("mi_execute_async_cli_command: no memory");
xasprintf (&run, "%s %s", mi, async_args);
make_exec_cleanup (free, run);
add_continuation (mi_exec_async_cli_cmd_continuation, NULL);
}
else
{
asprintf (&run, "%s %s", mi, args);
if (run == 0)
internal_error ("mi_execute_async_cli_command: no memory");
xasprintf (&run, "%s %s", mi, args);
old_cleanups = make_cleanup (free, run);
}

View File

@@ -574,12 +574,12 @@ add_packet_config_cmd (struct packet_config *config,
config->title = title;
config->detect = CMD_AUTO_BOOLEAN_AUTO;
config->support = PACKET_SUPPORT_UNKNOWN;
asprintf (&set_doc, "Set use of remote protocol `%s' (%s) packet",
name, title);
asprintf (&show_doc, "Show current use of remote protocol `%s' (%s) packet",
name, title);
xasprintf (&set_doc, "Set use of remote protocol `%s' (%s) packet",
name, title);
xasprintf (&show_doc, "Show current use of remote protocol `%s' (%s) packet",
name, title);
/* set/show TITLE-packet {auto,on,off} */
asprintf (&cmd_name, "%s-packet", title);
xasprintf (&cmd_name, "%s-packet", title);
set_cmd = add_set_auto_boolean_cmd (cmd_name, class_obscure,
&config->detect, set_doc,
set_remote_list);
@@ -590,7 +590,7 @@ add_packet_config_cmd (struct packet_config *config,
if (legacy)
{
char *legacy_name;
asprintf (&legacy_name, "%s-packet", name);
xasprintf (&legacy_name, "%s-packet", name);
add_alias_cmd (legacy_name, cmd_name, class_obscure, 0,
set_remote_list);
add_alias_cmd (legacy_name, cmd_name, class_obscure, 0,

View File

@@ -1079,6 +1079,35 @@ xrealloc (PTR ptr, size_t size)
}
/* Like asprintf/vasprintf but get an internal_error if the call
fails. */
void
xasprintf (char **ret, const char *format, ...)
{
va_list args;
va_start (args, format);
xvasprintf (ret, format, args);
va_end (args);
}
void
xvasprintf (char **ret, const char *format, va_list ap)
{
int status = vasprintf (ret, format, ap);
/* NULL could be returned due to a memory allocation problem; a
badly format string; or something else. */
if ((*ret) == NULL)
internal_error ("%s:%d: vasprintf returned NULL buffer (errno %d)",
__FILE__, __LINE__, errno);
/* A negative status with a non-NULL buffer shouldn't never
happen. But to be sure. */
if (status < 0)
internal_error ("%s:%d: vasprintf call failed (errno %d)",
__FILE__, __LINE__, errno);
}
/* My replacement for the read system call.
Used like `read' but keeps going if `read' returns too soon. */
@@ -1952,12 +1981,7 @@ vfprintf_maybe_filtered (struct ui_file *stream, const char *format,
char *linebuffer;
struct cleanup *old_cleanups;
vasprintf (&linebuffer, format, args);
if (linebuffer == NULL)
{
fputs_unfiltered ("\ngdb: virtual memory exhausted.\n", gdb_stderr);
exit (1);
}
xvasprintf (&linebuffer, format, args);
old_cleanups = make_cleanup (free, linebuffer);
fputs_maybe_filtered (linebuffer, stream, filter);
do_cleanups (old_cleanups);
@@ -1976,12 +2000,7 @@ vfprintf_unfiltered (struct ui_file *stream, const char *format, va_list args)
char *linebuffer;
struct cleanup *old_cleanups;
vasprintf (&linebuffer, format, args);
if (linebuffer == NULL)
{
fputs_unfiltered ("\ngdb: virtual memory exhausted.\n", gdb_stderr);
exit (1);
}
xvasprintf (&linebuffer, format, args);
old_cleanups = make_cleanup (free, linebuffer);
fputs_unfiltered (linebuffer, stream);
do_cleanups (old_cleanups);