static int _archive_read_close(struct archive *);
static int _archive_read_free(struct archive *);
static int64_t advance_file_pointer(struct archive_read_filter *, int64_t);
+#if ARCHIVE_VERSION_NUMBER < 3000000
+static int archive_read_data_block64(struct archive *,
+ const void **, size_t *, int64_t *);
+#endif
static struct archive_vtable *
archive_read_vtable(void)
while (s > 0) {
if (a->read_data_remaining == 0) {
read_buf = a->read_data_block;
+#if ARCHIVE_VERSION_NUMBER < 3000000
+ r = archive_read_data_block64(&a->archive, &read_buf,
+ &a->read_data_remaining, &a->read_data_offset);
+#else
r = archive_read_data_block(&a->archive, &read_buf,
&a->read_data_remaining, &a->read_data_offset);
+#endif
a->read_data_block = read_buf;
if (r == ARCHIVE_EOF)
return (bytes_read);
int
archive_read_data_block(struct archive *_a,
const void **buff, size_t *size, off_t *offset)
+{
+ int r;
+ int64_t offset64;
+ r = archive_read_data_block64(_a, buff, size, &offset64);
+ *offset = (off_t)offset64;
+ return (r);
+}
+#endif
+
+#if ARCHIVE_VERSION_NUMBER < 3000000
+static int
+archive_read_data_block64(struct archive *_a,
+ const void **buff, size_t *size, int64_t *offset)
#else
-int
+static int
archive_read_data_block(struct archive *_a,
const void **buff, size_t *size, int64_t *offset)
#endif
return (a->format->read_data)(a, buff, size, offset);
}
+#endif
static int
close_filters(struct archive_read *a)
}
}
-/*
+/*
* return the count of # of filters in use
*/
static int
int (*bid)(struct archive_read *),
int (*options)(struct archive_read *, const char *, const char *),
int (*read_header)(struct archive_read *, struct archive_entry *),
-#if ARCHIVE_VERSION_NUMBER < 3000000
- int (*read_data)(struct archive_read *, const void **, size_t *, off_t *),
-#else
int (*read_data)(struct archive_read *, const void **, size_t *, int64_t *),
-#endif
int (*read_data_skip)(struct archive_read *),
int (*cleanup)(struct archive_read *))
{
#else
int64_t offset;
#endif
- off_t output_offset;
+ int64_t output_offset;
archive_check_magic(a, ARCHIVE_READ_MAGIC, ARCHIVE_STATE_DATA,
"archive_read_data_into_fd");
* data to client buffers, filling gaps with zero bytes.
*/
const char *read_data_block;
-#if ARCHIVE_VERSION_NUMBER < 3000000
- off_t read_data_offset;
-#else
int64_t read_data_offset;
-#endif
- off_t read_data_output_offset;
+ int64_t read_data_output_offset;
size_t read_data_remaining;
/* Callbacks to open/read/write/close client archive stream. */
struct archive_read_filter *filter;
/* File offset of beginning of most recently-read header. */
- off_t header_position;
+ int64_t header_position;
/*
* Format detection is mostly the same as compression
int (*options)(struct archive_read *, const char *key,
const char *value);
int (*read_header)(struct archive_read *, struct archive_entry *);
-#if ARCHIVE_VERSION_NUMBER < 3000000
- int (*read_data)(struct archive_read *, const void **, size_t *, off_t *);
-#else
int (*read_data)(struct archive_read *, const void **, size_t *, int64_t *);
-#endif
int (*read_data_skip)(struct archive_read *);
int (*cleanup)(struct archive_read *);
} formats[9];
int (*bid)(struct archive_read *),
int (*options)(struct archive_read *, const char *, const char *),
int (*read_header)(struct archive_read *, struct archive_entry *),
-#if ARCHIVE_VERSION_NUMBER < 3000000
- int (*read_data)(struct archive_read *, const void **, size_t *, off_t *),
-#else
int (*read_data)(struct archive_read *, const void **, size_t *, int64_t *),
-#endif
int (*read_data_skip)(struct archive_read *),
int (*cleanup)(struct archive_read *));
static int archive_read_format_ar_bid(struct archive_read *a);
static int archive_read_format_ar_cleanup(struct archive_read *a);
-#if ARCHIVE_VERSION_NUMBER < 3000000
-static int archive_read_format_ar_read_data(struct archive_read *a,
- const void **buff, size_t *size, off_t *offset);
-#else
static int archive_read_format_ar_read_data(struct archive_read *a,
const void **buff, size_t *size, int64_t *offset);
-#endif
static int archive_read_format_ar_skip(struct archive_read *a);
static int archive_read_format_ar_read_header(struct archive_read *a,
struct archive_entry *e);
return (ARCHIVE_OK);
}
-#if ARCHIVE_VERSION_NUMBER < 3000000
-static int
-archive_read_format_ar_read_data(struct archive_read *a,
- const void **buff, size_t *size, off_t *offset)
-#else
static int
archive_read_format_ar_read_data(struct archive_read *a,
const void **buff, size_t *size, int64_t *offset)
-#endif
{
ssize_t bytes_read;
struct ar *ar;
static int64_t atol8(const char *, unsigned);
static int archive_read_format_cpio_bid(struct archive_read *);
static int archive_read_format_cpio_cleanup(struct archive_read *);
-#if ARCHIVE_VERSION_NUMBER < 3000000
-static int archive_read_format_cpio_read_data(struct archive_read *,
- const void **, size_t *, off_t *);
-#else
static int archive_read_format_cpio_read_data(struct archive_read *,
const void **, size_t *, int64_t *);
-#endif
static int archive_read_format_cpio_read_header(struct archive_read *,
struct archive_entry *);
static int be4(const unsigned char *);
return (r);
}
-#if ARCHIVE_VERSION_NUMBER < 3000000
-static int
-archive_read_format_cpio_read_data(struct archive_read *a,
- const void **buff, size_t *size, off_t *offset)
-#else
static int
archive_read_format_cpio_read_data(struct archive_read *a,
const void **buff, size_t *size, int64_t *offset)
-#endif
{
ssize_t bytes_read;
struct cpio *cpio;
#include "archive_read_private.h"
static int archive_read_format_empty_bid(struct archive_read *);
-#if ARCHIVE_VERSION_NUMBER < 3000000
-static int archive_read_format_empty_read_data(struct archive_read *,
- const void **, size_t *, off_t *);
-#else
static int archive_read_format_empty_read_data(struct archive_read *,
const void **, size_t *, int64_t *);
-#endif
static int archive_read_format_empty_read_header(struct archive_read *,
struct archive_entry *);
int
return (ARCHIVE_EOF);
}
-#if ARCHIVE_VERSION_NUMBER < 3000000
-static int
-archive_read_format_empty_read_data(struct archive_read *a,
- const void **buff, size_t *size, off_t *offset)
-#else
static int
archive_read_format_empty_read_data(struct archive_read *a,
const void **buff, size_t *size, int64_t *offset)
-#endif
{
(void)a; /* UNUSED */
(void)buff; /* UNUSED */
static int archive_read_format_iso9660_options(struct archive_read *,
const char *, const char *);
static int archive_read_format_iso9660_cleanup(struct archive_read *);
-#if ARCHIVE_VERSION_NUMBER < 3000000
-static int archive_read_format_iso9660_read_data(struct archive_read *,
- const void **, size_t *, off_t *);
-#else
static int archive_read_format_iso9660_read_data(struct archive_read *,
const void **, size_t *, int64_t *);
-#endif
static int archive_read_format_iso9660_read_data_skip(struct archive_read *);
static int archive_read_format_iso9660_read_header(struct archive_read *,
struct archive_entry *);
#ifdef HAVE_ZLIB_H
-#if ARCHIVE_VERSION_NUMBER < 3000000
-static int
-zisofs_read_data(struct archive_read *a,
- const void **buff, size_t *size, off_t *offset)
-#else
static int
zisofs_read_data(struct archive_read *a,
const void **buff, size_t *size, int64_t *offset)
-#endif
{
struct iso9660 *iso9660;
struct zisofs *zisofs;
#else /* HAVE_ZLIB_H */
-#if ARCHIVE_VERSION_NUMBER < 3000000
-static int
-zisofs_read_data(struct archive_read *a,
- const void **buff, size_t *size, off_t *offset)
-#else
static int
zisofs_read_data(struct archive_read *a,
const void **buff, size_t *size, int64_t *offset)
-#endif
{
(void)buff;/* UNUSED */
#endif /* HAVE_ZLIB_H */
-#if ARCHIVE_VERSION_NUMBER < 3000000
-static int
-archive_read_format_iso9660_read_data(struct archive_read *a,
- const void **buff, size_t *size, off_t *offset)
-#else
static int
archive_read_format_iso9660_read_data(struct archive_read *a,
const void **buff, size_t *size, int64_t *offset)
-#endif
{
ssize_t bytes_read;
struct iso9660 *iso9660;
struct mtree *, struct mtree_entry *, int *);
static int parse_keyword(struct archive_read *, struct mtree *,
struct archive_entry *, struct mtree_option *, int *);
-#if ARCHIVE_VERSION_NUMBER < 3000000
-static int read_data(struct archive_read *a,
- const void **buff, size_t *size, off_t *offset);
-#else
static int read_data(struct archive_read *a,
const void **buff, size_t *size, int64_t *offset);
-#endif
static ssize_t readline(struct archive_read *, struct mtree *, char **, ssize_t);
static int skip(struct archive_read *a);
static int read_header(struct archive_read *,
return (ARCHIVE_OK);
}
-#if ARCHIVE_VERSION_NUMBER < 3000000
-static int
-read_data(struct archive_read *a, const void **buff, size_t *size, off_t *offset)
-#else
static int
read_data(struct archive_read *a, const void **buff, size_t *size, int64_t *offset)
-#endif
{
size_t bytes_to_read;
ssize_t bytes_read;
static int archive_read_format_raw_bid(struct archive_read *);
static int archive_read_format_raw_cleanup(struct archive_read *);
-#if ARCHIVE_VERSION_NUMBER < 3000000
-static int archive_read_format_raw_read_data(struct archive_read *,
- const void **, size_t *, off_t *);
-#else
static int archive_read_format_raw_read_data(struct archive_read *,
const void **, size_t *, int64_t *);
-#endif
static int archive_read_format_raw_read_data_skip(struct archive_read *);
static int archive_read_format_raw_read_header(struct archive_read *,
struct archive_entry *);
return (ARCHIVE_OK);
}
-#if ARCHIVE_VERSION_NUMBER < 3000000
-static int
-archive_read_format_raw_read_data(struct archive_read *a,
- const void **buff, size_t *size, off_t *offset)
-#else
static int
archive_read_format_raw_read_data(struct archive_read *a,
const void **buff, size_t *size, int64_t *offset)
-#endif
{
struct raw_info *info;
ssize_t avail;
struct archive_entry *, const void *h);
static int archive_read_format_tar_bid(struct archive_read *);
static int archive_read_format_tar_cleanup(struct archive_read *);
-#if ARCHIVE_VERSION_NUMBER < 3000000
-static int archive_read_format_tar_read_data(struct archive_read *a,
- const void **buff, size_t *size, off_t *offset);
-#else
static int archive_read_format_tar_read_data(struct archive_read *a,
const void **buff, size_t *size, int64_t *offset);
-#endif
static int archive_read_format_tar_skip(struct archive_read *a);
static int archive_read_format_tar_read_header(struct archive_read *,
struct archive_entry *);
return (r);
}
-#if ARCHIVE_VERSION_NUMBER < 3000000
-static int
-archive_read_format_tar_read_data(struct archive_read *a,
- const void **buff, size_t *size, off_t *offset)
-#else
static int
archive_read_format_tar_read_data(struct archive_read *a,
const void **buff, size_t *size, int64_t *offset)
-#endif
{
ssize_t bytes_read;
struct tar *tar;
static int xar_bid(struct archive_read *);
static int xar_read_header(struct archive_read *,
struct archive_entry *);
-#if ARCHIVE_VERSION_NUMBER < 3000000
-static int xar_read_data(struct archive_read *,
- const void **, size_t *, off_t *);
-#else
static int xar_read_data(struct archive_read *,
const void **, size_t *, int64_t *);
-#endif
static int xar_read_data_skip(struct archive_read *);
static int xar_cleanup(struct archive_read *);
static int move_reading_point(struct archive_read *, uint64_t);
return (r);
}
-#if ARCHIVE_VERSION_NUMBER < 3000000
-static int
-xar_read_data(struct archive_read *a,
- const void **buff, size_t *size, off_t *offset)
-#else
static int
xar_read_data(struct archive_read *a,
const void **buff, size_t *size, int64_t *offset)
-#endif
{
struct xar *xar;
size_t used;
static int archive_read_format_zip_bid(struct archive_read *);
static int archive_read_format_zip_cleanup(struct archive_read *);
-#if ARCHIVE_VERSION_NUMBER < 3000000
-static int archive_read_format_zip_read_data(struct archive_read *,
- const void **, size_t *, off_t *);
-#else
static int archive_read_format_zip_read_data(struct archive_read *,
const void **, size_t *, int64_t *);
-#endif
static int archive_read_format_zip_read_data_skip(struct archive_read *a);
static int archive_read_format_zip_read_header(struct archive_read *,
struct archive_entry *);
-#if ARCHIVE_VERSION_NUMBER < 3000000
-static int zip_read_data_deflate(struct archive_read *a, const void **buff,
- size_t *size, off_t *offset);
-static int zip_read_data_none(struct archive_read *a, const void **buff,
- size_t *size, off_t *offset);
-#else
static int zip_read_data_deflate(struct archive_read *a, const void **buff,
size_t *size, int64_t *offset);
static int zip_read_data_none(struct archive_read *a, const void **buff,
size_t *size, int64_t *offset);
-#endif
static int zip_read_file_header(struct archive_read *a,
struct archive_entry *entry, struct zip *zip);
static time_t zip_time(const char *);
return mktime(&ts);
}
-#if ARCHIVE_VERSION_NUMBER < 3000000
-static int
-archive_read_format_zip_read_data(struct archive_read *a,
- const void **buff, size_t *size, off_t *offset)
-#else
static int
archive_read_format_zip_read_data(struct archive_read *a,
const void **buff, size_t *size, int64_t *offset)
-#endif
{
int r;
struct zip *zip;
* Returns ARCHIVE_OK if successful, ARCHIVE_FATAL otherwise, sets
* zip->end_of_entry if it consumes all of the data.
*/
-#if ARCHIVE_VERSION_NUMBER < 3000000
-static int
-zip_read_data_none(struct archive_read *a, const void **buff,
- size_t *size, off_t *offset)
-#else
static int
zip_read_data_none(struct archive_read *a, const void **buff,
size_t *size, int64_t *offset)
-#endif
{
struct zip *zip;
ssize_t bytes_avail;
}
#ifdef HAVE_ZLIB_H
-#if ARCHIVE_VERSION_NUMBER < 3000000
-static int
-zip_read_data_deflate(struct archive_read *a, const void **buff,
- size_t *size, off_t *offset)
-#else
static int
zip_read_data_deflate(struct archive_read *a, const void **buff,
size_t *size, int64_t *offset)
-#endif
{
struct zip *zip;
ssize_t bytes_avail;
return (ARCHIVE_OK);
}
#else
-#if ARCHIVE_VERSION_NUMBER < 3000000
-static int
-zip_read_data_deflate(struct archive_read *a, const void **buff,
- size_t *size, off_t *offset)
-#else
static int
zip_read_data_deflate(struct archive_read *a, const void **buff,
size_t *size, int64_t *offset)
-#endif
{
*buff = NULL;
*size = 0;
*/
if (zip->flags & ZIP_LENGTH_AT_END) {
size_t size;
-#if ARCHIVE_VERSION_NUMBER < 3000000
- off_t offset;
-#else
int64_t offset;
-#endif
int r;
do {
r = archive_read_format_zip_read_data(a, &buff,
extern int __la_chmod(const char *path, mode_t mode);
extern int __la_fcntl(int fd, int cmd, int val);
extern int __la_fstat(int fd, struct stat *st);
-extern int __la_ftruncate(int fd, off_t length);
+extern int __la_ftruncate(int fd, int64_t length);
extern int __la_futimes(int fd, const struct __timeval *times);
extern int __la_link(const char *src, const char *dst);
extern __int64 __la_lseek(int fd, __int64 offset, int whence);
struct zip_file_header_link {
struct zip_file_header_link *next;
struct archive_entry *entry;
- off_t offset;
+ int64_t offset;
unsigned long crc32;
- off_t compressed_size;
+ int64_t compressed_size;
enum compression compression;
};
struct zip_file_header h;
struct zip_central_directory_end end;
struct zip_extra_data_central e;
- off_t offset_start, offset_end;
+ int64_t offset_start, offset_end;
int entries;
int ret;