bug-gnulib
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

avoid fseek link warning


From: Eric Blake
Subject: avoid fseek link warning
Date: Sat, 07 Nov 2009 16:14:32 -0700
User-agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.23) Gecko/20090812 Thunderbird/2.0.0.23 Mnenhy/0.7.6.666

-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

I noticed several link warnings looking like this:

>   CCLD   test-rmdir
> ../lib/libcoreutils.a(fflush.o): warning: warning: fflush.c:42: warning: 
> fseek cannot handle files larger than 4 GB on 32-bit platforms - use fseeko 
> function for handling of large files

Indeed - that means that our fflush replacement will do the wrong thing on
large files when the current offset is larger than 2g.  Fixed by using
fseeko instead.

Several of our tests still use fseek, but that's not as bad, since we know
we aren't operating on large files in those cases.  So for those, I just
#undef'd the link warning if the module being tested did not already
depend on fseeko.

- --
Don't work too hard, make some time for fun as well!

Eric Blake             address@hidden
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.9 (Cygwin)
Comment: Public key at home.comcast.net/~ericblake/eblake.gpg
Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org/

iEYEARECAAYFAkr1/1gACgkQ84KuGfSFAYBI3wCgmJaTKgmhAtSAm5XTYk6+WDr3
9/oAoNVCqM0tljHveOF6w3/Jny5FNLjn
=AIG5
-----END PGP SIGNATURE-----
>From 7becd9d708425924f3a402fdd3c6e18ba2a7e4e3 Mon Sep 17 00:00:00 2001
From: Eric Blake <address@hidden>
Date: Sat, 7 Nov 2009 16:03:38 -0700
Subject: [PATCH] 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 <address@hidden>
---
 ChangeLog              |   18 ++++++++++++++++++
 lib/fflush.c           |    4 ++--
 lib/freadseek.c        |    2 +-
 modules/freadseek      |    1 +
 modules/fseek          |    1 +
 tests/test-fflush.c    |    2 +-
 tests/test-fpurge.c    |    6 ++++++
 tests/test-freadable.c |    8 +++++++-
 tests/test-freading.c  |    6 ++++++
 tests/test-fseeko.c    |    6 ++++++
 tests/test-ftell.c     |    6 ++++++
 tests/test-ftello.c    |    6 ++++++
 tests/test-fwritable.c |    8 +++++++-
 tests/test-fwriting.c  |    8 +++++++-
 14 files changed, 75 insertions(+), 7 deletions(-)

diff --git a/ChangeLog b/ChangeLog
index 997a759..c9d05ad 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,21 @@
+2009-11-07  Eric Blake  <address@hidden>
+
+       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  <address@hidden>

        * modules/memchr (Depends-on): Drop getpagesize dependency.
diff --git a/lib/fflush.c b/lib/fflush.c
index 7c6085c..0af1703 100644
--- a/lib/fflush.c
+++ b/lib/fflush.c
@@ -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
 }

diff --git a/lib/freadseek.c b/lib/freadseek.c
index 23046fa..fc50f51 100644
--- a/lib/freadseek.c
+++ b/lib/freadseek.c
@@ -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
     {
diff --git a/modules/freadseek b/modules/freadseek
index 6a920ee..e1ad31c 100644
--- a/modules/freadseek
+++ b/modules/freadseek
@@ -9,6 +9,7 @@ lib/stdio-impl.h
 Depends-on:
 freadahead
 freadptr
+fseeko
 lseek

 configure.ac:
diff --git a/modules/fseek b/modules/fseek
index 07f948e..375a54c 100644
--- a/modules/fseek
+++ b/modules/fseek
@@ -11,6 +11,7 @@ stdio

 configure.ac:
 gl_FUNC_FSEEK
+gl_MODULE_INDICATOR([fseek])
 gl_STDIO_MODULE_INDICATOR([fseek])

 Makefile.am:
diff --git a/tests/test-fflush.c b/tests/test-fflush.c
index 3a17f8d..3afdf7b 100644
--- a/tests/test-fflush.c
+++ b/tests/test-fflush.c
@@ -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);
diff --git a/tests/test-fpurge.c b/tests/test-fpurge.c
index 319a040..2197b89 100644
--- 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                                                                        \
     {                                                                       \
diff --git a/tests/test-freadable.c b/tests/test-freadable.c
index 4264cce..52a3287 100644
--- 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                                                                        \
     {                                                                       \
diff --git a/tests/test-freading.c b/tests/test-freading.c
index 0f8e686..dfa5ffb 100644
--- 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                                                                        \
     {                                                                       \
diff --git a/tests/test-fseeko.c b/tests/test-fseeko.c
index 9c284da..93b0adc 100644
--- 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                                                                        \
     {                                                                       \
diff --git a/tests/test-ftell.c b/tests/test-ftell.c
index 71f3ed2..786a448 100644
--- 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                                                                        \
     {                                                                       \
diff --git a/tests/test-ftello.c b/tests/test-ftello.c
index d3401ee..c5b1246 100644
--- 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                                                                        \
     {                                                                       \
diff --git a/tests/test-fwritable.c b/tests/test-fwritable.c
index 6a7b6f0..a0659ed 100644
--- 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                                                                        \
     {                                                                       \
diff --git a/tests/test-fwriting.c b/tests/test-fwriting.c
index f2ae068..9916b82 100644
--- 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                                                                        \
     {                                                                       \
-- 
1.6.5.rc1


reply via email to

[Prev in Thread] Current Thread [Next in Thread]