summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEric Blake <ebb9@byu.net>2007-12-13 14:58:44 -0700
committerEric Blake <ebb9@byu.net>2007-12-13 15:01:58 -0700
commit661445a1c0cf9197442b7d25270d4fbdcd14fb5a (patch)
tree59873e4fa892900716bbbb885031385eb3df30d5
parentc094ca2425ec5622fdf023088efee54bac29fc8a (diff)
downloadgnulib-661445a1c0cf9197442b7d25270d4fbdcd14fb5a.tar.gz
Another fseek test.
* tests/test-fseek.c (main): Also test ungetc handling. * tests/test-fseeko.c (main): Likewise. * modules/fseeko (Depends-on): Add verify. * lib/fseeko.c [!HAVE_FSEEKO]: Verify that off_t is not too large. Reported by Larry Jones. Signed-off-by: Eric Blake <ebb9@byu.net>
-rw-r--r--ChangeLog8
-rw-r--r--lib/fseeko.c3
-rw-r--r--modules/fseeko1
-rw-r--r--tests/test-fseek.c10
-rw-r--r--tests/test-fseeko.c10
5 files changed, 28 insertions, 4 deletions
diff --git a/ChangeLog b/ChangeLog
index dd3d5f2c1e..a7828da310 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,13 @@
2007-12-13 Eric Blake <ebb9@byu.net>
+ Another fseek test.
+ * tests/test-fseek.c (main): Also test ungetc handling.
+ * tests/test-fseeko.c (main): Likewise.
+ * modules/fseeko (Depends-on): Add verify.
+ * lib/fseeko.c [!HAVE_FSEEKO]: Verify that off_t is not too
+ large.
+ Reported by Larry Jones.
+
Fix fseeko on mingw.
* lib/fseeko.c (rpl_fseeko) [_IOERR]: Reset EOF flag on successful
seek.
diff --git a/lib/fseeko.c b/lib/fseeko.c
index 97dcf6da05..6d55ec8b12 100644
--- a/lib/fseeko.c
+++ b/lib/fseeko.c
@@ -27,6 +27,9 @@
#if !HAVE_FSEEKO
# undef fseek
# define fseeko fseek
+
+# include <verify.h>
+verify (sizeof (off_t) == sizeof (long));
#endif
int
diff --git a/modules/fseeko b/modules/fseeko
index eb109011ed..cb26003de8 100644
--- a/modules/fseeko
+++ b/modules/fseeko
@@ -8,6 +8,7 @@ m4/fseeko.m4
Depends-on:
lseek
stdio
+verify
configure.ac-early:
AC_REQUIRE([AC_FUNC_FSEEKO])
diff --git a/tests/test-fseek.c b/tests/test-fseek.c
index dde7ea0de4..0c7db958dd 100644
--- a/tests/test-fseek.c
+++ b/tests/test-fseek.c
@@ -23,17 +23,23 @@
int
main (int argc, char **argv)
{
- /* Assume stdin is seekable iff argc > 1. */
+ /* Assume stdin is non-empty and seekable iff argc > 1. */
int expected = argc > 1 ? 0 : -1;
if (fseek (stdin, 0, SEEK_CUR) != expected)
return 1;
if (argc > 1)
{
- /* Test that fseek resets end-of-file marker. */
+ /* Test that fseek discards ungetc data. */
+ int ch = fgetc (stdin);
+ if (ch == EOF)
+ return 1;
+ if (ungetc (ch ^ 0xff, stdin) != (ch ^ 0xff))
+ return 1;
if (fseek (stdin, 0, SEEK_END))
return 1;
if (fgetc (stdin) != EOF)
return 1;
+ /* Test that fseek resets end-of-file marker. */
if (!feof (stdin))
return 1;
if (fseek (stdin, 0, SEEK_END))
diff --git a/tests/test-fseeko.c b/tests/test-fseeko.c
index 3be4f6e502..25289cef06 100644
--- a/tests/test-fseeko.c
+++ b/tests/test-fseeko.c
@@ -26,7 +26,7 @@
int
main (int argc, char **argv)
{
- /* Assume stdin is seekable iff argc > 1. */
+ /* Assume stdin is non-empty and seekable iff argc > 1. */
int expected = argc > 1 ? 0 : -1;
/* Exit with success only if fseek/fseeko agree. */
int r1 = fseeko (stdin, (off_t)0, SEEK_CUR);
@@ -35,11 +35,17 @@ main (int argc, char **argv)
return 1;
if (argc > 1)
{
- /* Test that fseek resets end-of-file marker. */
+ /* Test that fseek discards ungetc data. */
+ int ch = fgetc (stdin);
+ if (ch == EOF)
+ return 1;
+ if (ungetc (ch ^ 0xff, stdin) != (ch ^ 0xff))
+ return 1;
if (fseeko (stdin, (off_t) 0, SEEK_END))
return 1;
if (fgetc (stdin) != EOF)
return 1;
+ /* Test that fseek resets end-of-file marker. */
if (!feof (stdin))
return 1;
if (fseeko (stdin, (off_t) 0, SEEK_END))