summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNick Clifton <nickc@redhat.com>2003-12-18 18:03:08 +0000
committerNick Clifton <nickc@redhat.com>2003-12-18 18:03:08 +0000
commit490f4c7c0a31ec76a46df0216d6b5e3d3efbd31c (patch)
tree7294e2d3f6559c54a477f4a4b26a22a1440ec293
parent47596206fb9cc091d6b81eb01b7207763cfac128 (diff)
downloadbinutils-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/ChangeLog6
-rw-r--r--gas/input-file.c41
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. */