libarchive: Check for 'struct statvfs' member 'f_iosize'
Configure the result as definition HAVE_STRUCT_STATVFS_F_IOSIZE and use the member only if it exists. At least one platform (IRIX) provides struct statvfs without this member.
This commit is contained in:
parent
8b7ee30bf4
commit
02d5e40572
|
@ -799,6 +799,12 @@ CHECK_STRUCT_MEMBER("struct stat" st_blksize
|
||||||
# Check for st_flags in struct stat (BSD fflags)
|
# Check for st_flags in struct stat (BSD fflags)
|
||||||
CHECK_STRUCT_MEMBER("struct stat" st_flags
|
CHECK_STRUCT_MEMBER("struct stat" st_flags
|
||||||
"sys/types.h;sys/stat.h" HAVE_STRUCT_STAT_ST_FLAGS)
|
"sys/types.h;sys/stat.h" HAVE_STRUCT_STAT_ST_FLAGS)
|
||||||
|
|
||||||
|
IF(HAVE_SYS_STATVFS_H)
|
||||||
|
CHECK_STRUCT_MEMBER("struct statvfs" f_iosize
|
||||||
|
"sys/types.h;sys/statvfs.h" HAVE_STRUCT_STATVFS_F_IOSIZE)
|
||||||
|
ENDIF()
|
||||||
|
|
||||||
#
|
#
|
||||||
#
|
#
|
||||||
CHECK_STRUCT_MEMBER("struct tm" tm_sec
|
CHECK_STRUCT_MEMBER("struct tm" tm_sec
|
||||||
|
|
|
@ -785,6 +785,9 @@ typedef uint64_t uintmax_t;
|
||||||
/* Define to 1 if `f_namemax' is a member of `struct statfs'. */
|
/* Define to 1 if `f_namemax' is a member of `struct statfs'. */
|
||||||
#cmakedefine HAVE_STRUCT_STATFS_F_NAMEMAX 1
|
#cmakedefine HAVE_STRUCT_STATFS_F_NAMEMAX 1
|
||||||
|
|
||||||
|
/* Define to 1 if `f_iosize' is a member of `struct statvfs'. */
|
||||||
|
#cmakedefine HAVE_STRUCT_STATVFS_F_IOSIZE 1
|
||||||
|
|
||||||
/* Define to 1 if `st_birthtime' is a member of `struct stat'. */
|
/* Define to 1 if `st_birthtime' is a member of `struct stat'. */
|
||||||
#cmakedefine HAVE_STRUCT_STAT_ST_BIRTHTIME 1
|
#cmakedefine HAVE_STRUCT_STAT_ST_BIRTHTIME 1
|
||||||
|
|
||||||
|
|
|
@ -1382,8 +1382,13 @@ setup_current_filesystem(struct archive_read_disk *a)
|
||||||
* for pathconf() function. */
|
* for pathconf() function. */
|
||||||
t->current_filesystem->xfer_align = sfs.f_frsize;
|
t->current_filesystem->xfer_align = sfs.f_frsize;
|
||||||
t->current_filesystem->max_xfer_size = -1;
|
t->current_filesystem->max_xfer_size = -1;
|
||||||
|
#if defined(HAVE_STRUCT_STATVFS_F_IOSIZE)
|
||||||
t->current_filesystem->min_xfer_size = sfs.f_iosize;
|
t->current_filesystem->min_xfer_size = sfs.f_iosize;
|
||||||
t->current_filesystem->incr_xfer_size = sfs.f_iosize;
|
t->current_filesystem->incr_xfer_size = sfs.f_iosize;
|
||||||
|
#else
|
||||||
|
t->current_filesystem->min_xfer_size = sfs.f_bsize;
|
||||||
|
t->current_filesystem->incr_xfer_size = sfs.f_bsize;
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
if (sfs.f_flag & ST_LOCAL)
|
if (sfs.f_flag & ST_LOCAL)
|
||||||
t->current_filesystem->remote = 0;
|
t->current_filesystem->remote = 0;
|
||||||
|
|
Loading…
Reference in New Issue