If we have fseek/ftell variants with 64-bit offsets, use them.
authorGuy Harris <guy@alum.mit.edu>
Fri, 20 Jul 2018 22:20:40 +0000 (15:20 -0700)
committerGuy Harris <guy@alum.mit.edu>
Fri, 20 Jul 2018 23:13:08 +0000 (23:13 +0000)
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 <guy@alum.mit.edu>
Tested-by: Petri Dish Buildbot
Reviewed-by: Guy Harris <guy@alum.mit.edu>
cmakeconfig.h.in
wiretap/file_access.c
wsutil/file_util.h

index 360e0648fe83ccd62961cddb97ba6ba29eddc27b..65716b69c1ccb34fe44a6d631fac3bd1a8ccb82d 100644 (file)
@@ -62,6 +62,9 @@
 /* Define to 1 if you have the <ifaddrs.h> 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
 
index 5de6744e3ac3b75269be555cc4b8f2c07395abcd..4cc15b3d943c83de7b80d3f5f514cb782dea1751 100644 (file)
@@ -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
index 0f88eab746db28b4135d692a1a5904a56e78d601..435bacd0f3b9a5b56554a3ab49686a23334772cb 100644 (file)
@@ -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