From 5d8a5fb8665fae4b4162df2b9cfda04751364a36 Mon Sep 17 00:00:00 2001 From: Guy Harris Date: Fri, 20 Jul 2018 15:20:40 -0700 Subject: If we have fseek/ftell variants with 64-bit offsets, use them. Or, at least, use them in the libwiretap file-writing code; we can change other places to use them as appropriate. Change-Id: I63af2267a22a158ee23f3359b043913dac0e285b Reviewed-on: https://code.wireshark.org/review/28783 Petri-Dish: Guy Harris Tested-by: Petri Dish Buildbot Reviewed-by: Guy Harris --- cmakeconfig.h.in | 3 +++ wiretap/file_access.c | 4 ++-- wsutil/file_util.h | 11 +++++++++++ 3 files changed, 16 insertions(+), 2 deletions(-) diff --git a/cmakeconfig.h.in b/cmakeconfig.h.in index 360e0648fe..65716b69c1 100644 --- a/cmakeconfig.h.in +++ b/cmakeconfig.h.in @@ -62,6 +62,9 @@ /* Define to 1 if you have the header file. */ #cmakedefine HAVE_IFADDRS_H 1 +/* Define to 1 if yu have the `fseeko` function. */ +#cmakedefine HAVE_FSEEKO 1 + /* Define to 1 if you have the `getexecname' function. */ #cmakedefine HAVE_GETEXECNAME 1 diff --git a/wiretap/file_access.c b/wiretap/file_access.c index 5de6744e3a..4cc15b3d94 100644 --- a/wiretap/file_access.c +++ b/wiretap/file_access.c @@ -2763,7 +2763,7 @@ wtap_dump_file_seek(wtap_dumper *wdh, gint64 offset, int whence, int *err) } else #endif { - if (-1 == fseek((FILE *)wdh->fh, (long)offset, whence)) { + if (-1 == ws_fseek64((FILE *)wdh->fh, offset, whence)) { *err = errno; return -1; } else @@ -2784,7 +2784,7 @@ wtap_dump_file_tell(wtap_dumper *wdh, int *err) } else #endif { - if (-1 == (rval = ftell((FILE *)wdh->fh))) { + if (-1 == (rval = ws_ftell64((FILE *)wdh->fh))) { *err = errno; return -1; } else diff --git a/wsutil/file_util.h b/wsutil/file_util.h index 0f88eab746..435bacd0f3 100644 --- a/wsutil/file_util.h +++ b/wsutil/file_util.h @@ -11,6 +11,8 @@ #ifndef __FILE_UTIL_H__ #define __FILE_UTIL_H__ +#include "config.h" + #include "ws_symbol_export.h" #ifdef __cplusplus @@ -104,7 +106,9 @@ WS_DLL_PUBLIC FILE * ws_stdio_freopen (const gchar *filename, const gchar *mode, #define ws_write _write #define ws_close _close #define ws_dup _dup +#define ws_fseek64 _fseeki64 /* use _fseeki64 for 64-bit offset support */ #define ws_fstat64 _fstati64 /* use _fstati64 for 64-bit size support */ +#define ws_ftell64 _ftelli64 /* use _ftelli64 for 64-bit offset support */ #define ws_lseek64 _lseeki64 /* use _lseeki64 for 64-bit offset support */ #define ws_fdopen _fdopen #define ws_fileno _fileno @@ -186,6 +190,13 @@ WS_DLL_PUBLIC void close_app_running_mutex(); #define ws_close close #endif #define ws_dup dup +#ifdef HAVE_FSEEKO +#define ws_fseek64 fseeko /* AC_SYS_LARGEFILE should make off_t 64-bit */ +#define ws_ftell64 ftello /* AC_SYS_LARGEFILE should make off_t 64-bit */ +#else +#define ws_fseek64(fh,offset,whence) fseek(fh,(long)(offset),whence) +#define ws_ftell64 ftell +#endif #define ws_fstat64 fstat /* AC_SYS_LARGEFILE should make off_t 64-bit */ #define ws_lseek64 lseek /* AC_SYS_LARGEFILE should make off_t 64-bit */ #define ws_fdopen fdopen -- cgit v1.2.3