about summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog3
-rw-r--r--libio/bug-ungetwc1.c21
2 files changed, 22 insertions, 2 deletions
diff --git a/ChangeLog b/ChangeLog
index 9090877c86..7fdc85da89 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,8 @@
 2014-11-27  Joseph Myers  <joseph@codesourcery.com>
 
+	* libio/bug-ungetwc1.c (do_test): Verify results of getwc and
+	feof.
+
 	* dlfcn/failtestmod.c (constr): Do not store result of dlsym in a
 	variable.
 
diff --git a/libio/bug-ungetwc1.c b/libio/bug-ungetwc1.c
index 8ed6acd175..56a3d336ae 100644
--- a/libio/bug-ungetwc1.c
+++ b/libio/bug-ungetwc1.c
@@ -53,8 +53,22 @@ do_test (void)
   /* Read from the file. */
   fp = fopen (fname, "r");
 
+  size_t i = 0;
   while (!feof (fp))
-    wc = getwc (fp);
+    {
+      wc = getwc (fp);
+      if (i >= sizeof (write_chars))
+	{
+	  printf ("Did not get end-of-file when expected.\n");
+	  return 1;
+	}
+      else if (wc != (write_chars[i] ? write_chars[i] : WEOF))
+	{
+	  printf ("Unexpected %lu from getwc.\n", (unsigned long int) wc);
+	  return 1;
+	}
+      i++;
+    }
   printf ("\nThe end-of-file indicator is set.\n");
 
   /* Unget a wide character. */
@@ -63,7 +77,10 @@ do_test (void)
 
   /* Check the end-of-file indicator. */
   if (feof (fp))
-    printf ("The end-of-file indicator is still set.\n");
+    {
+      printf ("The end-of-file indicator is still set.\n");
+      return 1;
+    }
   else
     printf ("The end-of-file flag is cleared.\n");