75 lines
3.3 KiB
Diff
75 lines
3.3 KiB
Diff
diff --git lib/fseeko.c lib/fseeko.c
|
|
index 5ae106f..d47481d 100644
|
|
--- lib/fseeko.c
|
|
+++ lib/fseeko.c
|
|
@@ -1,9 +1,9 @@
|
|
/* An fseeko() function that, together with fflush(), is POSIX compliant.
|
|
- Copyright (C) 2007-2017 Free Software Foundation, Inc.
|
|
+ Copyright (C) 2007-2018 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
|
|
- the Free Software Foundation; either version 3, or (at your option)
|
|
+ the Free Software Foundation; either version 2, or (at your option)
|
|
any later version.
|
|
|
|
This program is distributed in the hope that it will be useful,
|
|
@@ -12,7 +12,7 @@
|
|
GNU General Public License for more details.
|
|
|
|
You should have received a copy of the GNU General Public License along
|
|
- with this program; if not, see <http://www.gnu.org/licenses/>. */
|
|
+ with this program; if not, see <https://www.gnu.org/licenses/>. */
|
|
|
|
#include <config.h>
|
|
|
|
@@ -33,9 +33,9 @@ fseeko (FILE *fp, off_t offset, int whence)
|
|
#endif
|
|
#if _GL_WINDOWS_64_BIT_OFF_T
|
|
# undef fseeko
|
|
-# if HAVE__FSEEKI64 /* msvc, mingw64 */
|
|
+# if HAVE__FSEEKI64 && HAVE_DECL__FSEEKI64 /* msvc, mingw since msvcrt8.0, mingw64 */
|
|
# define fseeko _fseeki64
|
|
-# else /* mingw */
|
|
+# else /* mingw before msvcrt8.0 */
|
|
# define fseeko fseeko64
|
|
# endif
|
|
#endif
|
|
@@ -47,7 +47,8 @@ fseeko (FILE *fp, off_t offset, int whence)
|
|
#endif
|
|
|
|
/* These tests are based on fpurge.c. */
|
|
-#if defined _IO_ftrylockfile || __GNU_LIBRARY__ == 1 /* GNU libc, BeOS, Haiku, Linux libc5 */
|
|
+#if defined _IO_EOF_SEEN || defined _IO_ftrylockfile || __GNU_LIBRARY__ == 1
|
|
+ /* GNU libc, BeOS, Haiku, Linux libc5 */
|
|
if (fp->_IO_read_end == fp->_IO_read_ptr
|
|
&& fp->_IO_write_ptr == fp->_IO_write_base
|
|
&& fp->_IO_save_base == NULL)
|
|
@@ -80,7 +81,7 @@ fseeko (FILE *fp, off_t offset, int whence)
|
|
#elif defined __minix /* Minix */
|
|
if (fp_->_ptr == fp_->_buf
|
|
&& (fp_->_ptr == NULL || fp_->_count == 0))
|
|
-#elif defined _IOERR /* AIX, HP-UX, IRIX, OSF/1, Solaris, OpenServer, mingw, MSVC, NonStop Kernel */
|
|
+#elif defined _IOERR /* AIX, HP-UX, IRIX, OSF/1, Solaris, OpenServer, mingw, MSVC, NonStop Kernel, OpenVMS */
|
|
if (fp_->_ptr == fp_->_base
|
|
&& (fp_->_ptr == NULL || fp_->_cnt == 0))
|
|
#elif defined __UCLIBC__ /* uClibc */
|
|
@@ -123,7 +124,8 @@ fseeko (FILE *fp, off_t offset, int whence)
|
|
return -1;
|
|
}
|
|
|
|
-#if defined _IO_ftrylockfile || __GNU_LIBRARY__ == 1 /* GNU libc, BeOS, Haiku, Linux libc5 */
|
|
+#if defined _IO_EOF_SEEN || defined _IO_ftrylockfile || __GNU_LIBRARY__ == 1
|
|
+ /* GNU libc, BeOS, Haiku, Linux libc5 */
|
|
fp->_flags &= ~_IO_EOF_SEEN;
|
|
fp->_offset = pos;
|
|
#elif defined __sferror || defined __DragonFly__ || defined __ANDROID__
|
|
@@ -150,7 +152,7 @@ fseeko (FILE *fp, off_t offset, int whence)
|
|
fp_->_flags &= ~__SEOF;
|
|
#elif defined __EMX__ /* emx+gcc */
|
|
fp->_flags &= ~_IOEOF;
|
|
-#elif defined _IOERR /* AIX, HP-UX, IRIX, OSF/1, Solaris, OpenServer, mingw, MSVC, NonStop Kernel */
|
|
+#elif defined _IOERR /* AIX, HP-UX, IRIX, OSF/1, Solaris, OpenServer, mingw, MSVC, NonStop Kernel, OpenVMS */
|
|
fp_->_flag &= ~_IOEOF;
|
|
#elif defined __MINT__ /* Atari FreeMiNT */
|
|
fp->__offset = pos;
|