On Tue, Sep 18, 2007 at 08:37:57PM +0300, Lucian Adrian Grijincu wrote: > I see that some of my messages may have not hit the list: > http://mail-archives.apache.org/mod_mbox/apr-dev/200709.mbox/browser > only lists a few. > > I've added a bug to bugzilla and attached patches for all three > development branches: 0.9.x, 1.2.x and trunk. > > http://issues.apache.org/bugzilla/show_bug.cgi?id=43417
Thanks for the patches. The placement of the configure tests was not quite right - it would not have effect if --disable-lfs was used. I also think it's unnecessary to hard-code ino_t for anything other than the "unsigned long" case; e.g. there are no platforms where the native ino_t is a 64-bit type *and* will vary by _FILE_OFFSET_BITS, to my knowledge. Here's an updated patch: Index: configure.in =================================================================== --- configure.in (revision 583792) +++ configure.in (working copy) @@ -1456,6 +1456,21 @@ fi AC_MSG_RESULT($off_t_value) +# Regardless of whether _LARGEFILE64_SOURCE is used, on 32-bit +# platforms _FILE_OFFSET_BITS will affect the size of ino_t and hence +# the build-time ABI may be different from the apparent ABI when using +# APR with another package which *does* define _FILE_OFFSET_BITS. +# (Exactly as per the case above with off_t where LFS is *not* used) +# +# To be safe, hard-code apr_ino_t as 'unsigned long' iff that is +# exactly the size of ino_t here; otherwise use ino_t as existing +# releases did. To be correct, apr_ino_t should have been made an +# ino64_t as apr_off_t is off64_t, but this can't be done now without +# breaking ABI. +ino_t_value=ino_t +APR_CHECK_TYPES_COMPATIBLE(ino_t, unsigned long, ino_t_value="unsigned long") +AC_MSG_NOTICE([using $ino_t_value for ino_t]) + APR_CHECK_SIZEOF_EXTENDED([#include <sys/types.h>], pid_t, 8) if test "$ac_cv_sizeof_pid_t" = "$ac_cv_sizeof_short"; then @@ -1495,6 +1510,7 @@ AC_SUBST(size_t_value) AC_SUBST(ssize_t_value) AC_SUBST(socklen_t_value) +AC_SUBST(ino_t_value) AC_SUBST(int64_t_fmt) AC_SUBST(uint64_t_fmt) AC_SUBST(uint64_t_hex_fmt) Index: include/apr.h.in =================================================================== --- include/apr.h.in (revision 583792) +++ include/apr.h.in (working copy) @@ -283,6 +283,7 @@ typedef @ssize_t_value@ apr_ssize_t; typedef @off_t_value@ apr_off_t; typedef @socklen_t_value@ apr_socklen_t; +typedef @ino_t_value@ apr_ino_t; #define APR_SIZEOF_VOIDP @voidp_size@ Index: include/apr_file_info.h =================================================================== --- include/apr_file_info.h (revision 583792) +++ include/apr_file_info.h (working copy) @@ -125,16 +125,10 @@ typedef apr_int32_t apr_fileperms_t; #if (defined WIN32) || (defined NETWARE) /** - * Structure for determining the inode of the file. - */ -typedef apr_uint64_t apr_ino_t; -/** * Structure for determining the device the file is on. */ typedef apr_uint32_t apr_dev_t; #else -/** The inode of the file. */ -typedef ino_t apr_ino_t; /** * Structure for determining the device the file is on. */ Index: include/apr.hw =================================================================== --- include/apr.hw (revision 583792) +++ include/apr.hw (working copy) @@ -346,6 +346,8 @@ #endif typedef int apr_socklen_t; +typedef apr_uint64_t apr_ino_t; + /* Are we big endian? */ /* XXX: Fatal assumption on Alpha platforms */ #define APR_IS_BIGENDIAN 0 Index: include/apr.hnw =================================================================== --- include/apr.hnw (revision 583792) +++ include/apr.hnw (working copy) @@ -256,6 +256,8 @@ typedef size_t apr_socklen_t; #endif +typedef apr_uint64_t apr_ino_t; + /* Are we big endian? */ /* XXX: Fatal assumption on Alpha platforms */ #define APR_IS_BIGENDIAN 0
