fflush, freadseek: use fseeko, not fseek
authorEric Blake <ebb9@byu.net>
Sat, 7 Nov 2009 23:03:38 +0000 (16:03 -0700)
committerEric Blake <ebb9@byu.net>
Sat, 7 Nov 2009 23:12:53 +0000 (16:12 -0700)
Follow our own advice: fseek is not safe to use on large files.

* lib/fflush.c (clear_ungetc_buffer_preserving_position)
(clear_ungetc_buffer): Avoid potential problems on large files.
* lib/freadseek.c (freadseek): Likewise.
* modules/freadseek (Depends-on): Add fseeko.
* modules/fseek (configure.ac): Set a witness.
* tests/test-fflush.c (main): Use fseeko.
* tests/test-fpurge.c (fseek): Disable link warning.
* tests/test-freadable.c (fseek): Likewise.
* tests/test-freading.c (fseek): Likewise.
* tests/test-fseeko.c (fseek): Likewise.
* tests/test-ftell.c (fseek): Likewise.
* tests/test-ftello.c (fseek): Likewise.
* tests/test-fwritable.c (fseek): Likewise.
* tests/test-fwriting.c (fseek): Likewise.

Signed-off-by: Eric Blake <ebb9@byu.net>
14 files changed:
ChangeLog
lib/fflush.c
lib/freadseek.c
modules/freadseek
modules/fseek
tests/test-fflush.c
tests/test-fpurge.c
tests/test-freadable.c
tests/test-freading.c
tests/test-fseeko.c
tests/test-ftell.c
tests/test-ftello.c
tests/test-fwritable.c
tests/test-fwriting.c

index 997a759..c9d05ad 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,21 @@
+2009-11-07  Eric Blake  <ebb9@byu.net>
+
+       fflush, freadseek: use fseeko, not fseek
+       * lib/fflush.c (clear_ungetc_buffer_preserving_position)
+       (clear_ungetc_buffer): Avoid potential problems on large files.
+       * lib/freadseek.c (freadseek): Likewise.
+       * modules/freadseek (Depends-on): Add fseeko.
+       * modules/fseek (configure.ac): Set a witness.
+       * tests/test-fflush.c (main): Use fseeko.
+       * tests/test-fpurge.c (fseek): Disable link warning.
+       * tests/test-freadable.c (fseek): Likewise.
+       * tests/test-freading.c (fseek): Likewise.
+       * tests/test-fseeko.c (fseek): Likewise.
+       * tests/test-ftell.c (fseek): Likewise.
+       * tests/test-ftello.c (fseek): Likewise.
+       * tests/test-fwritable.c (fseek): Likewise.
+       * tests/test-fwriting.c (fseek): Likewise.
+
 2009-11-06  Simon Josefsson  <simon@josefsson.org>
 
        * modules/memchr (Depends-on): Drop getpagesize dependency.
index 7c6085c..0af1703 100644 (file)
@@ -39,7 +39,7 @@ clear_ungetc_buffer_preserving_position (FILE *fp)
 {
   if (fp->_flags & _IO_IN_BACKUP)
     /* _IO_free_backup_area is a bit complicated.  Simply call fseek.  */
-    fseek (fp, 0, SEEK_CUR);
+    fseeko (fp, 0, SEEK_CUR);
 }
 
 #else
@@ -63,7 +63,7 @@ clear_ungetc_buffer (FILE *fp)
 # elif defined _IOERR               /* AIX, HP-UX, IRIX, OSF/1, Solaris, OpenServer, mingw */
   /* Nothing to do.  */
 # else                              /* other implementations */
-  fseek (fp, 0, SEEK_CUR);
+  fseeko (fp, 0, SEEK_CUR);
 # endif
 }
 
index 23046fa..fc50f51 100644 (file)
@@ -106,7 +106,7 @@ freadseek (FILE *fp, size_t offset)
   if (fd >= 0 && lseek (fd, 0, SEEK_CUR) >= 0)
     {
       /* FP refers to a regular file.  fseek is most efficient in this case.  */
-      return fseek (fp, offset, SEEK_CUR);
+      return fseeko (fp, offset, SEEK_CUR);
     }
   else
     {
index 6a920ee..e1ad31c 100644 (file)
@@ -9,6 +9,7 @@ lib/stdio-impl.h
 Depends-on:
 freadahead
 freadptr
+fseeko
 lseek
 
 configure.ac:
index 07f948e..375a54c 100644 (file)
@@ -11,6 +11,7 @@ stdio
 
 configure.ac:
 gl_FUNC_FSEEK
+gl_MODULE_INDICATOR([fseek])
 gl_STDIO_MODULE_INDICATOR([fseek])
 
 Makefile.am:
index 3a17f8d..3afdf7b 100644 (file)
@@ -59,7 +59,7 @@ main (void)
     }
 #endif
   /* POSIX requires fflush-fseek to set file offset of fd.  */
-  if (fflush (f) != 0 || fseek (f, 0, SEEK_CUR) != 0)
+  if (fflush (f) != 0 || fseeko (f, 0, SEEK_CUR) != 0)
     {
       fputs ("Failed to flush-fseek sample file.\n", stderr);
       fclose (f);
index 319a040..2197b89 100644 (file)
 #include <stdlib.h>
 #include <string.h>
 
+/* None of the files accessed by this test are large, so disable the
+   fseek link warning if we are not using the gnulib fseek module.  */
+#if !GNULIB_FSEEK
+# undef fseek
+#endif
+
 #define ASSERT(expr) \
   do                                                                        \
     {                                                                       \
index 4264cce..52a3287 100644 (file)
@@ -1,5 +1,5 @@
 /* Test of freadable() function.
-   Copyright (C) 2007-2008 Free Software Foundation, Inc.
+   Copyright (C) 2007-2009 Free Software Foundation, Inc.
 
    This program is free software: you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
 #include <stdio.h>
 #include <stdlib.h>
 
+/* None of the files accessed by this test are large, so disable the
+   fseek link warning if we are not using the gnulib fseek module.  */
+#if !GNULIB_FSEEK
+# undef fseek
+#endif
+
 #define ASSERT(expr) \
   do                                                                        \
     {                                                                       \
index 0f8e686..dfa5ffb 100644 (file)
 #include <stdio.h>
 #include <stdlib.h>
 
+/* None of the files accessed by this test are large, so disable the
+   fseek link warning if we are not using the gnulib fseek module.  */
+#if !GNULIB_FSEEK
+# undef fseek
+#endif
+
 #define ASSERT(expr) \
   do                                                                        \
     {                                                                       \
index 9c284da..93b0adc 100644 (file)
 #include <stdio.h>
 #include <stdlib.h>
 
+/* None of the files accessed by this test are large, so disable the
+   fseek link warning if we are not using the gnulib fseek module.  */
+#if !GNULIB_FSEEK
+# undef fseek
+#endif
+
 #define ASSERT(expr) \
   do                                                                        \
     {                                                                       \
index 71f3ed2..786a448 100644 (file)
 
 #include "binary-io.h"
 
+/* None of the files accessed by this test are large, so disable the
+   fseek link warning if we are not using the gnulib fseek module.  */
+#if !GNULIB_FSEEK
+# undef fseek
+#endif
+
 #define ASSERT(expr) \
   do                                                                        \
     {                                                                       \
index d3401ee..c5b1246 100644 (file)
 
 #include "binary-io.h"
 
+/* None of the files accessed by this test are large, so disable the
+   fseek link warning if we are not using the gnulib fseek module.  */
+#if !GNULIB_FSEEK
+# undef fseek
+#endif
+
 #define ASSERT(expr) \
   do                                                                        \
     {                                                                       \
index 6a7b6f0..a0659ed 100644 (file)
@@ -1,5 +1,5 @@
 /* Test of fwritable() function.
-   Copyright (C) 2007-2008 Free Software Foundation, Inc.
+   Copyright (C) 2007-2009 Free Software Foundation, Inc.
 
    This program is free software: you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
 #include <stdio.h>
 #include <stdlib.h>
 
+/* None of the files accessed by this test are large, so disable the
+   fseek link warning if we are not using the gnulib fseek module.  */
+#if !GNULIB_FSEEK
+# undef fseek
+#endif
+
 #define ASSERT(expr) \
   do                                                                        \
     {                                                                       \
index f2ae068..9916b82 100644 (file)
@@ -1,5 +1,5 @@
 /* Test of fwriting() function.
-   Copyright (C) 2007-2008 Free Software Foundation, Inc.
+   Copyright (C) 2007-2009 Free Software Foundation, Inc.
 
    This program is free software: you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
 #include <stdio.h>
 #include <stdlib.h>
 
+/* None of the files accessed by this test are large, so disable the
+   fseek link warning if we are not using the gnulib fseek module.  */
+#if !GNULIB_FSEEK
+# undef fseek
+#endif
+
 #define ASSERT(expr) \
   do                                                                        \
     {                                                                       \