* input-file.c (input_file_open): Check for empty input files.
authorNick Clifton <nickc@redhat.com>
Wed, 17 Nov 2010 11:15:21 +0000 (11:15 +0000)
committerNick Clifton <nickc@redhat.com>
Wed, 17 Nov 2010 11:15:21 +0000 (11:15 +0000)
(input_file_get): Check for end of file before reading any more
data.
(input_file_give_next_buffer): Likewise.

gas/ChangeLog
gas/input-file.c

index 550f38e..e3d35b6 100644 (file)
@@ -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
index d3fa6ad..709c972 100644 (file)
@@ -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));