* 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>
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.
#if !HAVE_FSEEKO
# undef fseek
# define fseeko fseek
+
+# include <verify.h>
+verify (sizeof (off_t) == sizeof (long));
#endif
int
Depends-on:
lseek
stdio
+verify
configure.ac-early:
AC_REQUIRE([AC_FUNC_FSEEKO])
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))
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);
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))