diff options
author | kientzle <kientzle@FreeBSD.org> | 2008-09-12 04:03:34 +0000 |
---|---|---|
committer | kientzle <kientzle@FreeBSD.org> | 2008-09-12 04:03:34 +0000 |
commit | 96223dee1179512c6e0474eda5991e0dd7a4df20 (patch) | |
tree | 1878f87aa630b7b2910378c00e6d1f90aa1ef5cb /lib | |
parent | 93721eec26260bfc298fb72175367030b9da3ff8 (diff) | |
download | FreeBSD-src-96223dee1179512c6e0474eda5991e0dd7a4df20.zip FreeBSD-src-96223dee1179512c6e0474eda5991e0dd7a4df20.tar.gz |
Portability: Support platforms that lack (struct stat).st_blksize or SSIZE_MAX
Of course, FreeBSD has both.
Diffstat (limited to 'lib')
-rw-r--r-- | lib/libarchive/archive_platform.h | 3 | ||||
-rw-r--r-- | lib/libarchive/archive_write_disk.c | 6 | ||||
-rw-r--r-- | lib/libarchive/config_freebsd.h | 2 |
3 files changed, 11 insertions, 0 deletions
diff --git a/lib/libarchive/archive_platform.h b/lib/libarchive/archive_platform.h index e349019..f43522e 100644 --- a/lib/libarchive/archive_platform.h +++ b/lib/libarchive/archive_platform.h @@ -78,6 +78,9 @@ #if !HAVE_DECL_SIZE_MAX #define SIZE_MAX (~(size_t)0) #endif +#if !HAVE_DECL_SSIZE_MAX +#define SSIZE_MAX ((ssize_t)(SIZE_MAX >> 1)) +#endif #if !HAVE_DECL_UINT32_MAX #define UINT32_MAX (~(uint32_t)0) #endif diff --git a/lib/libarchive/archive_write_disk.c b/lib/libarchive/archive_write_disk.c index b63a7b7..f0bec6e 100644 --- a/lib/libarchive/archive_write_disk.c +++ b/lib/libarchive/archive_write_disk.c @@ -514,9 +514,15 @@ write_data_block(struct archive_write_disk *a, } if (a->flags & ARCHIVE_EXTRACT_SPARSE) { +#if HAVE_STRUCT_STAT_ST_BLKSIZE if ((r = _archive_write_disk_lazy_stat(a)) != ARCHIVE_OK) return (r); block_size = a->pst->st_blksize; +#else + /* XXX TODO XXX Is there a more appropriate choice here ? */ + /* This needn't match the filesystem allocation size. */ + block_size = 16*1024; +#endif } if (a->filesize >= 0 && (off_t)(offset + size) > a->filesize) diff --git a/lib/libarchive/config_freebsd.h b/lib/libarchive/config_freebsd.h index 0957fbc..a8ea8b4 100644 --- a/lib/libarchive/config_freebsd.h +++ b/lib/libarchive/config_freebsd.h @@ -41,6 +41,7 @@ #define HAVE_DECL_INT64_MAX 1 #define HAVE_DECL_INT64_MIN 1 #define HAVE_DECL_SIZE_MAX 1 +#define HAVE_DECL_SSIZE_MAX 1 #define HAVE_DECL_STRERROR_R 1 #define HAVE_DECL_UINT32_MAX 1 #define HAVE_DECL_UINT64_MAX 1 @@ -86,6 +87,7 @@ #define HAVE_STRINGS_H 1 #define HAVE_STRING_H 1 #define HAVE_STRRCHR 1 +#define HAVE_STRUCT_STAT_ST_BLKSIZE 1 #define HAVE_STRUCT_STAT_ST_MTIMESPEC_TV_NSEC 1 #define HAVE_SYS_ACL_H 1 #define HAVE_SYS_IOCTL_H 1 |