diff options
author | Nick Clifton <nickc@redhat.com> | 2003-12-18 18:03:08 +0000 |
---|---|---|
committer | Nick Clifton <nickc@redhat.com> | 2003-12-18 18:03:08 +0000 |
commit | 490f4c7c0a31ec76a46df0216d6b5e3d3efbd31c (patch) | |
tree | 7294e2d3f6559c54a477f4a4b26a22a1440ec293 | |
parent | 47596206fb9cc091d6b81eb01b7207763cfac128 (diff) | |
download | binutils-redhat-490f4c7c0a31ec76a46df0216d6b5e3d3efbd31c.tar.gz |
(input_file_open): Remove call to stat(). Add a check for getc() failing, and
catch the case where the failure is due to an attempt to read a directory.
-rw-r--r-- | gas/ChangeLog | 6 | ||||
-rw-r--r-- | gas/input-file.c | 41 |
2 files changed, 29 insertions, 18 deletions
diff --git a/gas/ChangeLog b/gas/ChangeLog index 95408f681a..c4cfa689c6 100644 --- a/gas/ChangeLog +++ b/gas/ChangeLog @@ -1,3 +1,9 @@ +2003-12-18 Nick Clifton <nickc@redhat.com> + + * input-file.c (input_file_open): Remove call to stat(). + Add a check for getc() failing, and catch the case where the + failure is due to an attempt to read a directory. + 2003-12-18 Richard Sandiford <rsandifo@redhat.com> * config/tc-mips.c (mips_need_elf_addend_fixup): Delete. diff --git a/gas/input-file.c b/gas/input-file.c index 5ada6304b1..bf36d5b167 100644 --- a/gas/input-file.c +++ b/gas/input-file.c @@ -26,7 +26,7 @@ #include <stdio.h> #include <string.h> -#include <sys/stat.h> +#include <errno.h> #include "as.h" #include "input-file.h" #include "safe-ctype.h" @@ -135,19 +135,6 @@ input_file_open (char *filename, /* "" means use stdin. Must not be 0. */ assert (filename != 0); /* Filename may not be NULL. */ if (filename[0]) { - struct stat statbuf; - - if (stat (filename, &statbuf) < 0) - { - as_bad (_("%s: No such file"), filename); - return; - } - else if (! S_ISREG (statbuf.st_mode)) - { - as_bad (_("'%s' is not an ordinary file"), filename); - return; - } - f_in = fopen (filename, FOPEN_RT); file_name = filename; } @@ -159,14 +146,32 @@ input_file_open (char *filename, /* "" means use stdin. Must not be 0. */ file_name = _("{standard input}"); } - if (f_in == (FILE *) 0) + if (f_in) + c = getc (f_in); + + if (f_in == NULL || ferror (f_in)) { - as_bad (_("can't open %s for reading"), file_name); - as_perror ("%s", file_name); + switch (errno) + { + case ENOENT: + as_bad (_("%s: no such file"), filename); + break; + case EISDIR: + as_bad (_("%s: is a directory"), filename); + break; + default: + as_bad (_("can't open %s for reading"), file_name); + as_perror ("%s", file_name); + } + + if (f_in) + { + fclose (f_in); + f_in = NULL; + } return; } - c = getc (f_in); if (c == '#') { /* Begins with comment, may not want to preprocess. */ |