X-Git-Url: http://git.efficios.com/?a=blobdiff_plain;f=libiberty%2Fargv.c;h=6444896f995a8e4abfb6a1edc510f3a4bbe1a30b;hb=b0eb7e3ea662525545e60fcb092272afaa1cddb2;hp=c6a79d215e308a7e971ec3c073e2c8f74c8cfbbe;hpb=2a8ae7146cacb006105e2e9c6f4635aca543e7ec;p=deliverable%2Fbinutils-gdb.git diff --git a/libiberty/argv.c b/libiberty/argv.c index c6a79d215e..6444896f99 100644 --- a/libiberty/argv.c +++ b/libiberty/argv.c @@ -1,5 +1,5 @@ /* Create and destroy argument vectors (argv's) - Copyright (C) 1992-2018 Free Software Foundation, Inc. + Copyright (C) 1992-2019 Free Software Foundation, Inc. Written by Fred Fish @ Cygnus Support This file is part of the libiberty library. @@ -367,8 +367,8 @@ expandargv (int *argcp, char ***argvp) { /* The argument we are currently processing. */ int i = 0; - /* Non-zero if ***argvp has been dynamically allocated. */ - int argv_dynamic = 0; + /* To check if ***argvp has been dynamically allocated. */ + char ** const original_argv = *argvp; /* Limit the number of response files that we parse in order to prevent infinite recursion. */ unsigned int iteration_limit = 2000; @@ -449,12 +449,14 @@ expandargv (int *argcp, char ***argvp) /* Parse the string. */ file_argv = buildargv (buffer); /* If *ARGVP is not already dynamically allocated, copy it. */ - if (!argv_dynamic) + if (*argvp == original_argv) *argvp = dupargv (*argvp); /* Count the number of arguments. */ file_argc = 0; while (file_argv[file_argc]) ++file_argc; + /* Free the original option's memory. */ + free ((*argvp)[i]); /* Now, insert FILE_ARGV into ARGV. The "+1" below handles the NULL terminator at the end of ARGV. */ *argvp = ((char **)