|
|
|
@ -35,6 +35,13 @@ Boston, MA 02110-1301, USA. */ |
|
|
|
#include <string.h> |
|
|
|
#include <stdlib.h> |
|
|
|
#include <stdio.h> |
|
|
|
#include <sys/types.h> |
|
|
|
#ifdef HAVE_UNISTD_H |
|
|
|
#include <unistd.h> |
|
|
|
#endif |
|
|
|
#if HAVE_SYS_STAT_H |
|
|
|
#include <sys/stat.h> |
|
|
|
#endif |
|
|
|
|
|
|
|
#ifndef NULL |
|
|
|
#define NULL 0 |
|
|
|
@ -387,6 +394,9 @@ expandargv (int *argcp, char ***argvp) |
|
|
|
char **file_argv; |
|
|
|
/* The number of options read from the response file, if any. */ |
|
|
|
size_t file_argc; |
|
|
|
#ifdef S_ISDIR |
|
|
|
struct stat sb; |
|
|
|
#endif |
|
|
|
/* We are only interested in options of the form "@file". */ |
|
|
|
filename = (*argvp)[i]; |
|
|
|
if (filename[0] != '@') |
|
|
|
@ -397,6 +407,15 @@ expandargv (int *argcp, char ***argvp) |
|
|
|
fprintf (stderr, "%s: error: too many @-files encountered\n", (*argvp)[0]); |
|
|
|
xexit (1); |
|
|
|
} |
|
|
|
#ifdef S_ISDIR |
|
|
|
if (stat (filename+1, &sb) < 0) |
|
|
|
continue; |
|
|
|
if (S_ISDIR(sb.st_mode)) |
|
|
|
{ |
|
|
|
fprintf (stderr, "%s: error: @-file refers to a directory\n", (*argvp)[0]); |
|
|
|
xexit (1); |
|
|
|
} |
|
|
|
#endif |
|
|
|
/* Read the contents of the file. */ |
|
|
|
f = fopen (++filename, "r"); |
|
|
|
if (!f) |
|
|
|
|