aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNick Clifton <nickc@redhat.com>2010-11-17 11:15:21 +0000
committerNick Clifton <nickc@redhat.com>2010-11-17 11:15:21 +0000
commit47e8018d71f9ebc3c2e40af48ace59ac23d7d6db (patch)
tree01d4f0ccef21cc47f26980bd55ba23a673b9ff0d
parent79520e0d2db9481b1f2d06645d291a7da92cab22 (diff)
downloadfsf-binutils-gdb-47e8018d71f9ebc3c2e40af48ace59ac23d7d6db.zip
fsf-binutils-gdb-47e8018d71f9ebc3c2e40af48ace59ac23d7d6db.tar.gz
fsf-binutils-gdb-47e8018d71f9ebc3c2e40af48ace59ac23d7d6db.tar.bz2
* input-file.c (input_file_open): Check for empty input files.
(input_file_get): Check for end of file before reading any more data. (input_file_give_next_buffer): Likewise.
-rw-r--r--gas/ChangeLog7
-rw-r--r--gas/input-file.c22
2 files changed, 27 insertions, 2 deletions
diff --git a/gas/ChangeLog b/gas/ChangeLog
index 550f38e..e3d35b6 100644
--- a/gas/ChangeLog
+++ b/gas/ChangeLog
@@ -1,3 +1,10 @@
+2010-11-17 Nick Clifton <nickc@redhat.com>
+
+ * input-file.c (input_file_open): Check for empty input files.
+ (input_file_get): Check for end of file before reading any more
+ data.
+ (input_file_give_next_buffer): Likewise.
+
2010-11-15 H.J. Lu <hongjiu.lu@intel.com>
* config/obj-elf.c (elf_process_stab): Mark parameters as
diff --git a/gas/input-file.c b/gas/input-file.c
index d3fa6ad..709c972 100644
--- a/gas/input-file.c
+++ b/gas/input-file.c
@@ -157,6 +157,15 @@ input_file_open (char *filename, /* "" means use stdin. Must not be 0. */
return;
}
+ /* Check for an empty input file. */
+ if (feof (f_in))
+ {
+ fclose (f_in);
+ f_in = NULL;
+ return;
+ }
+ gas_assert (c != EOF);
+
if (c == '#')
{
/* Begins with comment, may not want to preprocess. */
@@ -209,6 +218,9 @@ input_file_get (char *buf, int buflen)
{
int size;
+ if (feof (f_in))
+ return 0;
+
size = fread (buf, sizeof (char), buflen, f_in);
if (size < 0)
{
@@ -224,7 +236,7 @@ char *
input_file_give_next_buffer (char *where /* Where to place 1st character of new buffer. */)
{
char *return_value; /* -> Last char of what we read, + 1. */
- register int size;
+ int size;
if (f_in == (FILE *) 0)
return 0;
@@ -235,7 +247,13 @@ input_file_give_next_buffer (char *where /* Where to place 1st character of new
if (preprocess)
size = do_scrub_chars (input_file_get, where, BUFFER_SIZE);
else
- size = fread (where, sizeof (char), BUFFER_SIZE, f_in);
+ {
+ if (feof (f_in))
+ size = 0;
+ else
+ size = fread (where, sizeof (char), BUFFER_SIZE, f_in);
+ }
+
if (size < 0)
{
as_bad (_("can't read from %s: %s"), file_name, xstrerror (errno));