changeset 12255:83ddd76ac091

fflush, freadseek: use fseeko, not fseek 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>
author Eric Blake <ebb9@byu.net>
date Sat, 07 Nov 2009 16:03:38 -0700
parents a63ef3682584
children f704a98798c2
files 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
diffstat 14 files changed, 75 insertions(+), 7 deletions(-) [+]
line wrap: on
line diff
--- 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.
--- a/lib/fflush.c
+++ b/lib/fflush.c
@@ -39,7 +39,7 @@
 {
   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 @@
 # 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
 }
 
--- a/lib/freadseek.c
+++ b/lib/freadseek.c
@@ -106,7 +106,7 @@
   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
     {
--- a/modules/freadseek
+++ b/modules/freadseek
@@ -9,6 +9,7 @@
 Depends-on:
 freadahead
 freadptr
+fseeko
 lseek
 
 configure.ac:
--- a/modules/fseek
+++ b/modules/fseek
@@ -11,6 +11,7 @@
 
 configure.ac:
 gl_FUNC_FSEEK
+gl_MODULE_INDICATOR([fseek])
 gl_STDIO_MODULE_INDICATOR([fseek])
 
 Makefile.am:
--- a/tests/test-fflush.c
+++ b/tests/test-fflush.c
@@ -59,7 +59,7 @@
     }
 #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);
--- a/tests/test-fpurge.c
+++ b/tests/test-fpurge.c
@@ -23,6 +23,12 @@
 #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									     \
     {									     \
--- a/tests/test-freadable.c
+++ b/tests/test-freadable.c
@@ -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
@@ -23,6 +23,12 @@
 #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									     \
     {									     \
--- a/tests/test-freading.c
+++ b/tests/test-freading.c
@@ -23,6 +23,12 @@
 #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									     \
     {									     \
--- a/tests/test-fseeko.c
+++ b/tests/test-fseeko.c
@@ -21,6 +21,12 @@
 #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									     \
     {									     \
--- a/tests/test-ftell.c
+++ b/tests/test-ftell.c
@@ -23,6 +23,12 @@
 
 #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									     \
     {									     \
--- a/tests/test-ftello.c
+++ b/tests/test-ftello.c
@@ -23,6 +23,12 @@
 
 #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									     \
     {									     \
--- a/tests/test-fwritable.c
+++ b/tests/test-fwritable.c
@@ -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
@@ -23,6 +23,12 @@
 #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									     \
     {									     \
--- a/tests/test-fwriting.c
+++ b/tests/test-fwriting.c
@@ -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
@@ -23,6 +23,12 @@
 #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									     \
     {									     \