diff options
author | mm <mm@FreeBSD.org> | 2011-07-17 21:27:38 +0000 |
---|---|---|
committer | mm <mm@FreeBSD.org> | 2011-07-17 21:27:38 +0000 |
commit | af1b78954b9a91ab8b481f90c8b8c3522f6ea0fa (patch) | |
tree | 56f3cd4886fe6a4096374e4acc635884f68227ee /lib/libarchive/test/read_open_memory.c | |
parent | 352be4e985c0df0cf92cf64d89515b0b32bd1bf4 (diff) | |
download | FreeBSD-src-af1b78954b9a91ab8b481f90c8b8c3522f6ea0fa.zip FreeBSD-src-af1b78954b9a91ab8b481f90c8b8c3522f6ea0fa.tar.gz |
- Update libarchive to 2.8.4
- Add support for extracting xar and rpm archives
- Add libarchive_fe subdir (common code for tar and cpio)
Approved by: kientzle
MFC after: 2 weeks
Diffstat (limited to 'lib/libarchive/test/read_open_memory.c')
-rw-r--r-- | lib/libarchive/test/read_open_memory.c | 21 |
1 files changed, 8 insertions, 13 deletions
diff --git a/lib/libarchive/test/read_open_memory.c b/lib/libarchive/test/read_open_memory.c index 17e7f75..db0de85 100644 --- a/lib/libarchive/test/read_open_memory.c +++ b/lib/libarchive/test/read_open_memory.c @@ -43,16 +43,13 @@ struct read_memory_data { unsigned char *end; size_t read_size; size_t copy_buff_size; + size_t copy_buff_offset; char *copy_buff; }; static int memory_read_close(struct archive *, void *); static int memory_read_open(struct archive *, void *); -#if ARCHIVE_VERSION_NUMBER < 2000000 -static ssize_t memory_read_skip(struct archive *, void *, size_t request); -#else static off_t memory_read_skip(struct archive *, void *, off_t request); -#endif static ssize_t memory_read(struct archive *, void *, const void **buff); static int read_open_memory_internal(struct archive *a, void *buff, size_t size, size_t read_size, int fullapi); @@ -89,8 +86,10 @@ read_open_memory_internal(struct archive *a, void *buff, mine->buffer = (unsigned char *)buff; mine->end = mine->buffer + size; mine->read_size = read_size; - mine->copy_buff_size = read_size + 64; + mine->copy_buff_offset = 32; + mine->copy_buff_size = read_size + mine->copy_buff_offset * 2; mine->copy_buff = malloc(mine->copy_buff_size); + memset(mine->copy_buff, 0xA5, mine->copy_buff_size); if (fullapi) return (archive_read_open2(a, mine, memory_read_open, memory_read, memory_read_skip, memory_read_close)); @@ -126,9 +125,10 @@ memory_read(struct archive *a, void *client_data, const void **buff) size = mine->end - mine->buffer; if (size > mine->read_size) size = mine->read_size; - memset(mine->copy_buff, 0xA5, mine->copy_buff_size); - memcpy(mine->copy_buff, mine->buffer, size); - *buff = mine->copy_buff; + else + memset(mine->copy_buff, 0xA5, mine->copy_buff_size); + memcpy(mine->copy_buff + mine->copy_buff_offset, mine->buffer, size); + *buff = mine->copy_buff + mine->copy_buff_offset; mine->buffer += size; return ((ssize_t)size); @@ -137,13 +137,8 @@ memory_read(struct archive *a, void *client_data, const void **buff) /* * How mean can a skip() routine be? Let's try to find out. */ -#if ARCHIVE_VERSION_NUMBER < 2000000 -static ssize_t -memory_read_skip(struct archive *a, void *client_data, size_t skip) -#else static off_t memory_read_skip(struct archive *a, void *client_data, off_t skip) -#endif { struct read_memory_data *mine = (struct read_memory_data *)client_data; |