diff options
-rw-r--r-- | libiberty/ChangeLog | 7 | ||||
-rw-r--r-- | libiberty/argv.c | 47 |
2 files changed, 16 insertions, 38 deletions
diff --git a/libiberty/ChangeLog b/libiberty/ChangeLog index f06dcb52a66..9afed435855 100644 --- a/libiberty/ChangeLog +++ b/libiberty/ChangeLog @@ -1,5 +1,12 @@ 2011-08-28 H.J. Lu <hongjiu.lu@intel.com> + * argv.c (dupargv): Replace malloc with xmalloc. Don't check + xmalloc return. + (buildargv): Likewise. Also replace strdup with xstrdup. + (expandargv): Don't check dupargv return. + +2011-08-28 H.J. Lu <hongjiu.lu@intel.com> + PR binutils/14526 * argv.c (buildargv): Replace alloca with xmalloc/free. diff --git a/libiberty/argv.c b/libiberty/argv.c index 4cef3bc5b5b..f2727e8de95 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. @@ -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,13 +268,7 @@ 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; @@ -457,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]) |