| Index: gcc/libiberty/argv.c
|
| diff --git a/gcc/libiberty/argv.c b/gcc/libiberty/argv.c
|
| index 38bd4497090b6cb5ad56004b87ba24cd6c866459..3084248b96cabd54c7606498cbaa5075873e6394 100644
|
| --- a/gcc/libiberty/argv.c
|
| +++ b/gcc/libiberty/argv.c
|
| @@ -119,6 +119,24 @@ void freeargv (char **vector)
|
| }
|
| }
|
|
|
| +static void
|
| +consume_whitespace (const char **input)
|
| +{
|
| + while (ISSPACE (**input))
|
| + {
|
| + (*input)++;
|
| + }
|
| +}
|
| +
|
| +static int
|
| +only_whitespace (const char* input)
|
| +{
|
| + while (*input != EOS && ISSPACE (*input))
|
| + input++;
|
| +
|
| + return (*input == EOS);
|
| +}
|
| +
|
| /*
|
|
|
| @deftypefn Extension char** buildargv (char *@var{sp})
|
| @@ -179,10 +197,8 @@ char **buildargv (const char *input)
|
| do
|
| {
|
| /* Pick off argv[argc] */
|
| - while (ISBLANK (*input))
|
| - {
|
| - input++;
|
| - }
|
| + consume_whitespace (&input);
|
| +
|
| if ((maxargc == 0) || (argc >= (maxargc - 1)))
|
| {
|
| /* argv needs initialization, or expansion */
|
| @@ -278,10 +294,7 @@ char **buildargv (const char *input)
|
| argc++;
|
| argv[argc] = NULL;
|
|
|
| - while (ISSPACE (*input))
|
| - {
|
| - input++;
|
| - }
|
| + consume_whitespace (&input);
|
| }
|
| while (*input != EOS);
|
| }
|
| @@ -420,8 +433,17 @@ expandargv (int *argcp, char ***argvp)
|
| goto error;
|
| /* Add a NUL terminator. */
|
| buffer[len] = '\0';
|
| - /* Parse the string. */
|
| - file_argv = buildargv (buffer);
|
| + /* If the file is empty or contains only whitespace, buildargv would
|
| + return a single empty argument. In this context we want no arguments,
|
| + instead. */
|
| + if (only_whitespace (buffer))
|
| + {
|
| + file_argv = (char **) xmalloc (sizeof (char *));
|
| + file_argv[0] = NULL;
|
| + }
|
| + else
|
| + /* Parse the string. */
|
| + file_argv = buildargv (buffer);
|
| /* If *ARGVP is not already dynamically allocated, copy it. */
|
| if (!argv_dynamic)
|
| {
|
| @@ -434,7 +456,7 @@ expandargv (int *argcp, char ***argvp)
|
| }
|
| /* Count the number of arguments. */
|
| file_argc = 0;
|
| - while (file_argv[file_argc] && *file_argv[file_argc])
|
| + while (file_argv[file_argc])
|
| ++file_argc;
|
| /* Now, insert FILE_ARGV into ARGV. The "+1" below handles the
|
| NULL terminator at the end of ARGV. */
|
|
|