diff options
author | guy <guy@f5534014-38df-0310-8fa8-9805f1628bb7> | 2011-04-10 18:22:47 +0000 |
---|---|---|
committer | guy <guy@f5534014-38df-0310-8fa8-9805f1628bb7> | 2011-04-10 18:22:47 +0000 |
commit | 1d08d4f0116ea613bd3f4f2ccdb4d6795d7755f3 (patch) | |
tree | 47be42075ef0ca489ee8fb4e6427977c9d2fefd9 | |
parent | f7b049a2c9c92a4f3766910f5284311f47b26d61 (diff) |
Use AC_SYS_LARGEFILE to turn on large file support on platforms that
support it.
Rename ws_lseek to ws_lseek64, as it should be given a 64-bit offset,
and have it use _lseeki64 on Windows, to try to get 64-bit offset
support; AC_SYS_LARGEFILE should cause lseek() to support 64-bit offsets
on UN*X if possible.
git-svn-id: http://anonsvn.wireshark.org/wireshark/trunk@36542 f5534014-38df-0310-8fa8-9805f1628bb7
-rw-r--r-- | configure.in | 5 | ||||
-rw-r--r-- | wiretap/file_wrappers.c | 18 | ||||
-rw-r--r-- | wiretap/wtap.c | 4 | ||||
-rw-r--r-- | wsutil/file_util.h | 20 |
4 files changed, 20 insertions, 27 deletions
diff --git a/configure.in b/configure.in index 8db1d08000..1da5ce6830 100644 --- a/configure.in +++ b/configure.in @@ -138,6 +138,11 @@ AC_PATH_PROG(DOXYGEN, doxygen) AC_CHECK_PROG(HAVE_DOXYGEN, doxygen, "yes", "no") AM_CONDITIONAL(HAVE_DOXYGEN, test x$HAVE_DOXYGEN = xyes) +# +# Try to arrange for large file support. +# +AC_SYS_LARGEFILE + # gnu tls tls_message="no" AC_ARG_WITH([gnutls], diff --git a/wiretap/file_wrappers.c b/wiretap/file_wrappers.c index daaec5d51b..2bb2ce78f3 100644 --- a/wiretap/file_wrappers.c +++ b/wiretap/file_wrappers.c @@ -106,8 +106,6 @@ struct wtap_reader { #define ZLIB 2 /* decompress a zlib stream */ #endif -/* XXX, lseek64() instead of ws_lseek()? */ - static int /* gz_load */ raw_read(FILE_T state, unsigned char *buf, unsigned int count, unsigned *have) { @@ -415,7 +413,7 @@ filed_open(int fd) state->fd = fd; /* save the current position for rewinding (only if reading) */ - state->start = ws_lseek(state->fd, 0, SEEK_CUR); + state->start = ws_lseek64(state->fd, 0, SEEK_CUR); if (state->start == -1) state->start = 0; /* initialize stream */ @@ -517,12 +515,7 @@ file_seek(FILE_T file, gint64 offset, int whence, int *err) /* if within raw area while reading, just go there */ if (file->compression == UNCOMPRESSED && file->pos + offset >= file->raw) { - /* XXX - handle 64-bit offsets better */ -#ifdef _WIN32 - if (ws_lseek(file->fd, (long)(offset - file->have), SEEK_CUR) == -1) { -#else - if (ws_lseek(file->fd, (off_t)(offset - file->have), SEEK_CUR) == -1) { -#endif + if (ws_lseek64(file->fd, offset - file->have, SEEK_CUR) == -1) { *err = errno; return -1; } @@ -545,12 +538,7 @@ file_seek(FILE_T file, gint64 offset, int whence, int *err) /* rewind, then skip to offset */ /* back up and start over */ - /* XXX - handle 64-bit offsets better */ -#ifdef _WIN32 - if (ws_lseek(file->fd, (long)file->start, SEEK_SET) == -1) { -#else - if (ws_lseek(file->fd, (off_t)file->start, SEEK_SET) == -1) { -#endif + if (ws_lseek64(file->fd, file->start, SEEK_SET) == -1) { *err = errno; return -1; } diff --git a/wiretap/wtap.c b/wiretap/wtap.c index 80d5a204fa..30c71810e2 100644 --- a/wiretap/wtap.c +++ b/wiretap/wtap.c @@ -717,9 +717,9 @@ wtap_read(wtap *wth, int *err, gchar **err_info, gint64 *data_offset) gint64 wtap_read_so_far(wtap *wth, int *err) { - off_t file_pos; + gint64 file_pos; - file_pos = ws_lseek(wth->fd, 0, SEEK_CUR); + file_pos = ws_lseek64(wth->fd, 0, SEEK_CUR); if (file_pos == -1) { if (err != NULL) *err = errno; diff --git a/wsutil/file_util.h b/wsutil/file_util.h index 4225fe5933..e81d8773a7 100644 --- a/wsutil/file_util.h +++ b/wsutil/file_util.h @@ -92,11 +92,11 @@ extern FILE * ws_stdio_freopen (const gchar *filename, const gchar *mode, FILE * /* some common file function differences between UNIX and WIN32 */ #ifdef _WIN32 /* the Win32 API prepends underscores for whatever reasons */ -#define ws_read _read -#define ws_write _write -#define ws_close _close -#define ws_dup _dup -#define ws_lseek _lseek +#define ws_read _read +#define ws_write _write +#define ws_close _close +#define ws_dup _dup +#define ws_lseek64 _lseeki64 /* use _lseeki64 for 64-bit offset support */ /* DLL loading */ @@ -130,11 +130,11 @@ GModule *ws_module_open(gchar *module_name, GModuleFlags flags); extern char *getenv_utf8(const char *varname); #else /* _WIN32 */ -#define ws_read read -#define ws_write write -#define ws_close close -#define ws_dup dup -#define ws_lseek lseek +#define ws_read read +#define ws_write write +#define ws_close close +#define ws_dup dup +#define ws_lseek64 lseek /* AC_SYS_LARGEFILE should make off_t 64-bit */ #define O_BINARY 0 /* Win32 needs the O_BINARY flag for open() */ #endif /* _WIN32 */ |