Index: libiberty/argv.c |
diff --git a/libiberty/argv.c b/libiberty/argv.c |
index ca53f91493dbfc82797c4f2411c27c5b9a7fead6..f2727e8de95db2d849f57e690e64a9dbc08853ff 100644 |
--- a/libiberty/argv.c |
+++ b/libiberty/argv.c |
@@ -1,5 +1,5 @@ |
/* Create and destroy argument vectors (argv's) |
- Copyright (C) 1992, 2001, 2010 Free Software Foundation, Inc. |
+ Copyright (C) 1992, 2001, 2010, 2012 Free Software Foundation, Inc. |
Written by Fred Fish @ Cygnus Support |
This file is part of the libiberty library. |
@@ -72,20 +72,13 @@ dupargv (char **argv) |
/* the vector */ |
for (argc = 0; argv[argc] != NULL; argc++); |
- copy = (char **) malloc ((argc + 1) * sizeof (char *)); |
- if (copy == NULL) |
- return NULL; |
- |
+ copy = (char **) xmalloc ((argc + 1) * sizeof (char *)); |
+ |
/* the strings */ |
for (argc = 0; argv[argc] != NULL; argc++) |
{ |
int len = strlen (argv[argc]); |
- copy[argc] = (char *) malloc (len + 1); |
- if (copy[argc] == NULL) |
- { |
- freeargv (copy); |
- return NULL; |
- } |
+ copy[argc] = (char *) xmalloc (len + 1); |
strcpy (copy[argc], argv[argc]); |
} |
copy[argc] = NULL; |
@@ -149,7 +142,7 @@ remains unchanged. The last element of the vector is followed by a |
@code{NULL} element. |
All of the memory for the pointer array and copies of the string |
-is obtained from @code{malloc}. All of the memory can be returned to the |
+is obtained from @code{xmalloc}. All of the memory can be returned to the |
system with the single function call @code{freeargv}, which takes the |
returned result of @code{buildargv}, as it's argument. |
@@ -191,7 +184,7 @@ char **buildargv (const char *input) |
if (input != NULL) |
{ |
- copybuf = (char *) alloca (strlen (input) + 1); |
+ copybuf = (char *) xmalloc (strlen (input) + 1); |
/* Is a do{}while to always execute the loop once. Always return an |
argv, even for null strings. See NOTES above, test case below. */ |
do |
@@ -205,21 +198,12 @@ char **buildargv (const char *input) |
if (argv == NULL) |
{ |
maxargc = INITIAL_MAXARGC; |
- nargv = (char **) malloc (maxargc * sizeof (char *)); |
+ nargv = (char **) xmalloc (maxargc * sizeof (char *)); |
} |
else |
{ |
maxargc *= 2; |
- nargv = (char **) realloc (argv, maxargc * sizeof (char *)); |
- } |
- if (nargv == NULL) |
- { |
- if (argv != NULL) |
- { |
- freeargv (argv); |
- argv = NULL; |
- } |
- break; |
+ nargv = (char **) xrealloc (argv, maxargc * sizeof (char *)); |
} |
argv = nargv; |
argv[argc] = NULL; |
@@ -284,19 +268,15 @@ char **buildargv (const char *input) |
} |
} |
*arg = EOS; |
- argv[argc] = strdup (copybuf); |
- if (argv[argc] == NULL) |
- { |
- freeargv (argv); |
- argv = NULL; |
- break; |
- } |
+ argv[argc] = xstrdup (copybuf); |
argc++; |
argv[argc] = NULL; |
consume_whitespace (&input); |
} |
while (*input != EOS); |
+ |
+ free (copybuf); |
} |
return (argv); |
} |
@@ -455,14 +435,7 @@ expandargv (int *argcp, char ***argvp) |
file_argv = buildargv (buffer); |
/* If *ARGVP is not already dynamically allocated, copy it. */ |
if (!argv_dynamic) |
- { |
- *argvp = dupargv (*argvp); |
- if (!*argvp) |
- { |
- fputs ("\nout of memory\n", stderr); |
- xexit (1); |
- } |
- } |
+ *argvp = dupargv (*argvp); |
/* Count the number of arguments. */ |
file_argc = 0; |
while (file_argv[file_argc]) |