aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGuy Harris <guy@alum.mit.edu>2018-07-20 15:20:40 -0700
committerGuy Harris <guy@alum.mit.edu>2018-07-20 23:13:08 +0000
commit5d8a5fb8665fae4b4162df2b9cfda04751364a36 (patch)
treeb405ed8dd4329fabfa854341c95ddd82ae4e040c
parentffbd3151b533800ec3c637007a430a93554bc471 (diff)
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 <guy@alum.mit.edu> Tested-by: Petri Dish Buildbot Reviewed-by: Guy Harris <guy@alum.mit.edu>
-rw-r--r--cmakeconfig.h.in3
-rw-r--r--wiretap/file_access.c4
-rw-r--r--wsutil/file_util.h11
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 <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
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