tcpdump mailing list archives
Re: large file support in libpcap (it's that time of year again)
From: Erik de Castro Lopo <erikd+tcpdump () sensorynetworks com>
Date: Fri, 27 Feb 2004 09:20:30 +1100
On Fri, 27 Feb 2004 10:49:50 +1300 Jesper Peterson <jesper () endace com> wrote:
Would the maintainers be receptive to a patch to use fopen64() in savefile.c when it's available (and possibly selected from the configure command line)? Is there some other large file solution that Google isn't revealing to me?
Yes there is and I do it in a project of mine (libsndfile). This stuff is really only needed on Linux and 32 bit Solaris. All of the later (Free|Net|Open)BSDs (including Darwin) already have a 64 bit off_t. The following M4 macro was originally by Paul Eggert. I made a slight tweak and renamed it from AC_SYS_LARGEFILE to AC_SYS_EXTRA_LARGEFILE. The macro goes acinclude.m4 and is called from configure.ac by: AC_SYS_EXTRA_LARGEFILE If you then include "config.h" before including <stdio.h> open/read/ write/llseek etc all become large file aware and off_t becomes 64 bit. That means that no code needs to be changed, the existing systems which have largefile support by default continue to work and Linux and Solaris suddenly become large file aware. HTH, Erik ---------------------------- start acinclude.m4 ---------------------------- dnl By default, many hosts won't let programs access large files; dnl one must use special compiler options to get large-file access to work. dnl For more details about this brain damage please see: dnl http://www.sas.com/standards/large.file/x_open.20Mar96.html dnl Written by Paul Eggert <eggert at twinsun dot com>. dnl Internal subroutine of AC_SYS_EXTRA_LARGEFILE. dnl AC_SYS_EXTRA_LARGEFILE_FLAGS(FLAGSNAME) AC_DEFUN(AC_SYS_EXTRA_LARGEFILE_FLAGS, [AC_CACHE_CHECK([for $1 value to request large file support], ac_cv_sys_largefile_$1, [ac_cv_sys_largefile_$1=`($GETCONF LFS_$1) 2>/dev/null` || { ac_cv_sys_largefile_$1=no ifelse($1, CFLAGS, [case "$host_os" in # IRIX 6.2 and later require cc -n32. changequote(, )dnl irix6.[2-9]* | irix6.1[0-9]* | irix[7-9].* | irix[1-9][0-9]*) changequote([, ])dnl if test "$GCC" != yes; then ac_cv_sys_largefile_CFLAGS=-n32 fi ac_save_CC="$CC" CC="$CC $ac_cv_sys_largefile_CFLAGS" AC_TRY_LINK(, , , ac_cv_sys_largefile_CFLAGS=no) CC="$ac_save_CC" esac]) }])]) dnl Internal subroutine of AC_SYS_EXTRA_LARGEFILE. dnl AC_SYS_EXTRA_LARGEFILE_SPACE_APPEND(VAR, VAL) AC_DEFUN(AC_SYS_EXTRA_LARGEFILE_SPACE_APPEND, [case $2 in no) ;; ?*) case "[$]$1" in '') $1=$2 ;; *) $1=[$]$1' '$2 ;; esac ;; esac]) dnl Internal subroutine of AC_SYS_EXTRA_LARGEFILE. dnl AC_SYS_EXTRA_LARGEFILE_MACRO_VALUE(C-MACRO, CACHE-VAR, COMMENT, CODE-TO-SET-DEFAULT) AC_DEFUN(AC_SYS_EXTRA_LARGEFILE_MACRO_VALUE, [AC_CACHE_CHECK([for $1], $2, [$2=no changequote(, )dnl $4 for ac_flag in $ac_cv_sys_largefile_CFLAGS no; do case "$ac_flag" in -D$1) $2=1 ;; -D$1=*) $2=`expr " $ac_flag" : '[^=]*=\(.*\)'` ;; esac done changequote([, ])dnl ]) if test "[$]$2" != no; then AC_DEFINE_UNQUOTED([$1], [$]$2, [$3]) fi]) AC_DEFUN(AC_SYS_EXTRA_LARGEFILE, [AC_REQUIRE([AC_CANONICAL_HOST]) AC_ARG_ENABLE(largefile, [ --disable-largefile omit support for large files]) if test "$enable_largefile" != no; then AC_CHECK_TOOL(GETCONF, getconf) AC_SYS_EXTRA_LARGEFILE_FLAGS(CFLAGS) AC_SYS_EXTRA_LARGEFILE_FLAGS(LDFLAGS) AC_SYS_EXTRA_LARGEFILE_FLAGS(LIBS) for ac_flag in $ac_cv_sys_largefile_CFLAGS no; do case "$ac_flag" in no) ;; -D_FILE_OFFSET_BITS=*) ;; -D_LARGEFILE_SOURCE | -D_LARGEFILE_SOURCE=*) ;; -D_LARGE_FILES | -D_LARGE_FILES=*) ;; -D?* | -I?*) AC_SYS_EXTRA_LARGEFILE_SPACE_APPEND(CPPFLAGS, "$ac_flag") ;; *) AC_SYS_EXTRA_LARGEFILE_SPACE_APPEND(CFLAGS, "$ac_flag") ;; esac done AC_SYS_EXTRA_LARGEFILE_SPACE_APPEND(LDFLAGS, "$ac_cv_sys_largefile_LDFLAGS") AC_SYS_EXTRA_LARGEFILE_SPACE_APPEND(LIBS, "$ac_cv_sys_largefile_LIBS") AC_SYS_EXTRA_LARGEFILE_MACRO_VALUE(_FILE_OFFSET_BITS, ac_cv_sys_file_offset_bits, [Number of bits in a file offset, on hosts where this is settable.]) [case "$host_os" in # HP-UX 10.20 and later hpux10.[2-9][0-9]* | hpux1[1-9]* | hpux[2-9][0-9]*) ac_cv_sys_file_offset_bits=64 ;; esac] AC_SYS_EXTRA_LARGEFILE_MACRO_VALUE(_LARGEFILE_SOURCE, ac_cv_sys_largefile_source, [Define to make fseeko etc. visible, on some hosts.], [case "$host_os" in # HP-UX 10.20 and later hpux10.[2-9][0-9]* | hpux1[1-9]* | hpux[2-9][0-9]*) ac_cv_sys_largefile_source=1 ;; esac]) AC_SYS_EXTRA_LARGEFILE_MACRO_VALUE(_LARGE_FILES, ac_cv_sys_large_files, [Define for large files, on AIX-style hosts.], [case "$host_os" in # AIX 4.2 and later aix4.[2-9]* | aix4.1[0-9]* | aix[5-9].* | aix[1-9][0-9]*) ac_cv_sys_large_files=1 ;; esac]) fi ]) ----------------------------- end acinclude.m4 ----------------------------- -- ------------------------------------------------------ [N] Erik de Castro Lopo, Senior Computer Engineer [E] erik.de.castro.lopo () sensorynetworks com [W] http://www.sensorynetworks.com [T] +61 2 83022726 [F] +61 2 94750316 [A] L4/140 William St, East Sydney NSW 2011, Australia ------------------------------------------------------ - This is the TCPDUMP workers list. It is archived at http://www.tcpdump.org/lists/workers/index.html To unsubscribe use mailto:tcpdump-workers-request () tcpdump org?body=unsubscribe
Current thread:
- large file support in libpcap (it's that time of year again) Jesper Peterson (Feb 26)
- Re: large file support in libpcap (it's that time of year again) Erik de Castro Lopo (Feb 26)
- Re: large file support in libpcap (it's that time of year again) Jesper Peterson (Feb 26)
- Re: large file support in libpcap (it's that time of year again) Michael Richardson (Feb 26)