changeset 29217:c00c359f1ca9

Beef up fseek tests. * tests/test-fseek.c (main): Also test eof handling. * tests/test-fseeko.c (main): Likewise. Reported by Larry Jones. Signed-off-by: Eric Blake <ebb9@byu.net>
author Eric Blake <ebb9@byu.net>
date Thu, 13 Dec 2007 11:25:42 -0700
parents 4af5a4be9c8c
children 55855e34d9d9
files ChangeLog tests/test-fseek.c tests/test-fseeko.c
diffstat 3 files changed, 41 insertions(+), 2 deletions(-) [+]
line wrap: on
line diff
--- a/ChangeLog	Thu Dec 13 11:11:53 2007 -0700
+++ b/ChangeLog	Thu Dec 13 11:25:42 2007 -0700
@@ -1,3 +1,10 @@
+2007-12-13  Eric Blake  <ebb9@byu.net>
+
+	Beef up fseek tests.
+	* tests/test-fseek.c (main): Also test eof handling.
+	* tests/test-fseeko.c (main): Likewise.
+	Reported by Larry Jones.
+
 2007-12-13  Larry Jones  <lawrence.jones@siemens.com>  (tiny change)
 
 	Fix fseeko on BSD-based platforms.
--- a/tests/test-fseek.c	Thu Dec 13 11:11:53 2007 -0700
+++ b/tests/test-fseek.c	Thu Dec 13 11:25:42 2007 -0700
@@ -25,5 +25,21 @@
 {
   /* Assume stdin is seekable iff argc > 1.  */
   int expected = argc > 1 ? 0 : -1;
-  return fseek (stdin, 0, SEEK_CUR) != expected;
+  if (fseek (stdin, 0, SEEK_CUR) != expected)
+    return 1;
+  if (argc > 1)
+    {
+      /* Test that fseek resets end-of-file marker.  */
+      if (fseek (stdin, 0, SEEK_END))
+        return 1;
+      if (fgetc (stdin) != EOF)
+        return 1;
+      if (!feof (stdin))
+        return 1;
+      if (fseek (stdin, 0, SEEK_END))
+        return 1;
+      if (feof (stdin))
+        return 1;
+    }
+  return 0;
 }
--- a/tests/test-fseeko.c	Thu Dec 13 11:11:53 2007 -0700
+++ b/tests/test-fseeko.c	Thu Dec 13 11:25:42 2007 -0700
@@ -31,5 +31,21 @@
   /* Exit with success only if fseek/fseeko agree.  */
   int r1 = fseeko (stdin, (off_t)0, SEEK_CUR);
   int r2 = fseek (stdin, (long)0, SEEK_CUR);
-  return ! (r1 == r2 && r1 == expected);
+  if (r1 != r2 || r1 != expected)
+    return 1;
+  if (argc > 1)
+    {
+      /* Test that fseek resets end-of-file marker.  */
+      if (fseeko (stdin, (off_t) 0, SEEK_END))
+        return 1;
+      if (fgetc (stdin) != EOF)
+        return 1;
+      if (!feof (stdin))
+        return 1;
+      if (fseeko (stdin, (off_t) 0, SEEK_END))
+        return 1;
+      if (feof (stdin))
+        return 1;
+    }
+  return 0;
 }