summaryrefslogtreecommitdiffstats
path: root/lib/libarchive
diff options
context:
space:
mode:
authorkientzle <kientzle@FreeBSD.org>2008-09-12 04:03:34 +0000
committerkientzle <kientzle@FreeBSD.org>2008-09-12 04:03:34 +0000
commit96223dee1179512c6e0474eda5991e0dd7a4df20 (patch)
tree1878f87aa630b7b2910378c00e6d1f90aa1ef5cb /lib/libarchive
parent93721eec26260bfc298fb72175367030b9da3ff8 (diff)
downloadFreeBSD-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/libarchive')
-rw-r--r--lib/libarchive/archive_platform.h3
-rw-r--r--lib/libarchive/archive_write_disk.c6
-rw-r--r--lib/libarchive/config_freebsd.h2
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
OpenPOWER on IntegriCloud