From 490f4c7c0a31ec76a46df0216d6b5e3d3efbd31c Mon Sep 17 00:00:00 2001 From: Nick Clifton Date: Thu, 18 Dec 2003 18:03:08 +0000 Subject: [PATCH] (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. --- gas/ChangeLog | 6 ++++++ gas/input-file.c | 41 +++++++++++++++++++++++------------------ 2 files changed, 29 insertions(+), 18 deletions(-) diff --git a/gas/ChangeLog b/gas/ChangeLog index 95408f681..c4cfa689c 100644 --- a/gas/ChangeLog +++ b/gas/ChangeLog @@ -1,3 +1,9 @@ +2003-12-18 Nick Clifton + + * 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 * config/tc-mips.c (mips_need_elf_addend_fixup): Delete. diff --git a/gas/input-file.c b/gas/input-file.c index 5ada6304b..bf36d5b16 100644 --- a/gas/input-file.c +++ b/gas/input-file.c @@ -26,7 +26,7 @@ #include #include -#include +#include #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. */ -- 2.11.4.GIT