[Top][All Lists]
[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
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- avoid fseek link warning,
Eric Blake <=