mingw-w64 implementation of fseeko64() and _fseeki64() functions in files mingw-w64-crt/stdio/_fseeki64.c and mingw-w64-crt/stdio/fseeko64.c are exactly same.
Also both both fseeko64() and _fseeki64() functions have C fseek() ABI with 64-bit offset type. So remove the mingw-w64 fseeko64 implementation and define fseeko64 symbol as an alias to the _fseeki64 symbol. For msvcr80+ define it in def include file crt-aliases.def.in and for other implementations define it in the mingw-w64-crt/stdio/_fseeki64.c file. This change allows to use native msvcr80+ / UCRT implementation of _fseeki64() function for the POSIX fseeko64() instead of statically linking the mingw-w64 implementation. --- mingw-w64-crt/Makefile.am | 2 +- mingw-w64-crt/def-include/crt-aliases.def.in | 3 ++ .../api-ms-win-crt-stdio-l1-1-0.def | 1 + mingw-w64-crt/stdio/_fseeki64.c | 3 ++ mingw-w64-crt/stdio/fseeko64.c | 34 ------------------- 5 files changed, 8 insertions(+), 35 deletions(-) delete mode 100644 mingw-w64-crt/stdio/fseeko64.c diff --git a/mingw-w64-crt/Makefile.am b/mingw-w64-crt/Makefile.am index a6d45d93419e..d6576bb7320a 100644 --- a/mingw-w64-crt/Makefile.am +++ b/mingw-w64-crt/Makefile.am @@ -1113,7 +1113,7 @@ src_libmingwex=\ stdio/strtok_r.c \ stdio/_Exit.c stdio/_findfirst64i32.c stdio/_findnext64i32.c stdio/_wfindfirst64i32.c stdio/_wfindnext64i32.c \ stdio/asprintf.c \ - stdio/fopen64.c stdio/fseeko64.c \ + stdio/fopen64.c \ stdio/ftello64.c stdio/ftruncate64.c stdio/lltoa.c stdio/lltow.c stdio/lseek64.c \ stdio/__mingw_fix_stat_path.c stdio/__mingw_fix_wstat_path.c \ \ diff --git a/mingw-w64-crt/def-include/crt-aliases.def.in b/mingw-w64-crt/def-include/crt-aliases.def.in index 25f5b87010e0..b30e8ea64911 100644 --- a/mingw-w64-crt/def-include/crt-aliases.def.in +++ b/mingw-w64-crt/def-include/crt-aliases.def.in @@ -319,6 +319,9 @@ fstat64 == _fstat64 #else fstat64 == _fstat64 #endif +#ifndef FIXED_SIZE_SYMBOLS +fseeko64 == _fseeki64 +#endif ; This is list of symbol aliases for GNU functions which are not part of POSIX or ISO C strcasecmp == _stricmp diff --git a/mingw-w64-crt/lib-common/api-ms-win-crt-stdio-l1-1-0.def b/mingw-w64-crt/lib-common/api-ms-win-crt-stdio-l1-1-0.def index abdcb8224c7c..38bd1aa819f4 100644 --- a/mingw-w64-crt/lib-common/api-ms-win-crt-stdio-l1-1-0.def +++ b/mingw-w64-crt/lib-common/api-ms-win-crt-stdio-l1-1-0.def @@ -63,6 +63,7 @@ _fread_nolock _fread_nolock_s _fseek_nolock _fseeki64 +fseeko64 == _fseeki64 _fseeki64_nolock _fsopen _ftell_nolock diff --git a/mingw-w64-crt/stdio/_fseeki64.c b/mingw-w64-crt/stdio/_fseeki64.c index 3ec4ccb3a392..6881930b0698 100644 --- a/mingw-w64-crt/stdio/_fseeki64.c +++ b/mingw-w64-crt/stdio/_fseeki64.c @@ -38,3 +38,6 @@ static int __cdecl emu__fseeki64(FILE *stream, __int64 offset, int whence) #define ARGS FILE *stream, __int64 offset, int whence #define CALL stream, offset, whence #include "msvcrt_or_emu_glue.h" + +int __attribute__ ((alias ("_fseeki64"))) __cdecl fseeko64(FILE *stream, _off64_t offset, int whence); +extern int __attribute__ ((alias (__MINGW64_STRINGIFY(__MINGW_IMP_SYMBOL(_fseeki64))))) (__cdecl *__MINGW_IMP_SYMBOL(fseeko64))(FILE *stream, _off64_t offset, int whence); diff --git a/mingw-w64-crt/stdio/fseeko64.c b/mingw-w64-crt/stdio/fseeko64.c deleted file mode 100644 index 316163497b78..000000000000 --- a/mingw-w64-crt/stdio/fseeko64.c +++ /dev/null @@ -1,34 +0,0 @@ -/** - * This file has no copyright assigned and is placed in the Public Domain. - * This file is part of the mingw-w64 runtime package. - * No warranty is given; refer to the file DISCLAIMER.PD within this package. - */ -#include <stdio.h> -#include <io.h> -#include <errno.h> - -int fseeko64 (FILE* stream, _off64_t offset, int whence) -{ - fpos_t pos; - if (whence == SEEK_CUR) - { - /* If stream is invalid, fgetpos sets errno. */ - if (fgetpos (stream, &pos)) - return (-1); - pos += (fpos_t) offset; - } - else if (whence == SEEK_END) - { - /* If writing, we need to flush before getting file length. */ - fflush (stream); - pos = (fpos_t) (_filelengthi64 (_fileno (stream)) + offset); - } - else if (whence == SEEK_SET) - pos = (fpos_t) offset; - else - { - errno = EINVAL; - return (-1); - } - return fsetpos (stream, &pos); -} -- 2.20.1 _______________________________________________ Mingw-w64-public mailing list Mingw-w64-public@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/mingw-w64-public