summaryrefslogtreecommitdiffstats
path: root/Utilities/cmlibarchive/libarchive/archive_read_disk_posix.c
diff options
context:
space:
mode:
authorBrad King <brad.king@kitware.com>2015-10-21 14:12:35 (GMT)
committerBrad King <brad.king@kitware.com>2015-10-21 14:18:52 (GMT)
commit932848f420a738ee07997198fead5b2c2fbf4787 (patch)
tree40404c3244ba87c5e71e8dd076f4dbcde6d8cfeb /Utilities/cmlibarchive/libarchive/archive_read_disk_posix.c
parente4b7d5afde91efafb59749a0a513732a089a6f0a (diff)
parent1a8c7bc2c649781d1163c1966245a45e0fb829ba (diff)
downloadCMake-932848f420a738ee07997198fead5b2c2fbf4787.zip
CMake-932848f420a738ee07997198fead5b2c2fbf4787.tar.gz
CMake-932848f420a738ee07997198fead5b2c2fbf4787.tar.bz2
Merge branch 'libarchive-upstream' into update-libarchive
Resolve conflicts by integrating changes from both sides.
Diffstat (limited to 'Utilities/cmlibarchive/libarchive/archive_read_disk_posix.c')
-rw-r--r--Utilities/cmlibarchive/libarchive/archive_read_disk_posix.c23
1 files changed, 22 insertions, 1 deletions
diff --git a/Utilities/cmlibarchive/libarchive/archive_read_disk_posix.c b/Utilities/cmlibarchive/libarchive/archive_read_disk_posix.c
index 94eb5e7..f480539 100644
--- a/Utilities/cmlibarchive/libarchive/archive_read_disk_posix.c
+++ b/Utilities/cmlibarchive/libarchive/archive_read_disk_posix.c
@@ -356,6 +356,8 @@ static int _archive_read_free(struct archive *);
static int _archive_read_close(struct archive *);
static int _archive_read_data_block(struct archive *,
const void **, size_t *, int64_t *);
+static int _archive_read_next_header(struct archive *,
+ struct archive_entry **);
static int _archive_read_next_header2(struct archive *,
struct archive_entry *);
static const char *trivial_lookup_gname(void *, int64_t gid);
@@ -377,6 +379,7 @@ archive_read_disk_vtable(void)
av.archive_free = _archive_read_free;
av.archive_close = _archive_read_close;
av.archive_read_data_block = _archive_read_data_block;
+ av.archive_read_next_header = _archive_read_next_header;
av.archive_read_next_header2 = _archive_read_next_header2;
inited = 1;
}
@@ -459,6 +462,7 @@ archive_read_disk_new(void)
a->archive.magic = ARCHIVE_READ_DISK_MAGIC;
a->archive.state = ARCHIVE_STATE_NEW;
a->archive.vtable = archive_read_disk_vtable();
+ a->entry = archive_entry_new2(&a->archive);
a->lookup_uname = trivial_lookup_uname;
a->lookup_gname = trivial_lookup_gname;
a->enable_copyfile = 1;
@@ -491,6 +495,7 @@ _archive_read_free(struct archive *_a)
if (a->cleanup_uname != NULL && a->lookup_uname_data != NULL)
(a->cleanup_uname)(a->lookup_uname_data);
archive_string_free(&a->archive.error_string);
+ archive_entry_free(a->entry);
a->archive.magic = 0;
__archive_clean(&a->archive);
free(a);
@@ -609,6 +614,10 @@ archive_read_disk_set_behavior(struct archive *_a, int flags)
a->traverse_mount_points = 0;
else
a->traverse_mount_points = 1;
+ if (flags & ARCHIVE_READDISK_NO_XATTR)
+ a->suppress_xattr = 1;
+ else
+ a->suppress_xattr = 0;
return (r);
}
@@ -974,7 +983,7 @@ next_entry(struct archive_read_disk *a, struct tree *t,
t->initial_filesystem_id = t->current_filesystem_id;
if (!a->traverse_mount_points) {
if (t->initial_filesystem_id != t->current_filesystem_id)
- return (ARCHIVE_RETRY);
+ descend = 0;
}
t->descend = descend;
@@ -1081,6 +1090,17 @@ next_entry(struct archive_read_disk *a, struct tree *t,
}
static int
+_archive_read_next_header(struct archive *_a, struct archive_entry **entryp)
+{
+ int ret;
+ struct archive_read_disk *a = (struct archive_read_disk *)_a;
+ *entryp = NULL;
+ ret = _archive_read_next_header2(_a, a->entry);
+ *entryp = a->entry;
+ return ret;
+}
+
+static int
_archive_read_next_header2(struct archive *_a, struct archive_entry *entry)
{
struct archive_read_disk *a = (struct archive_read_disk *)_a;
@@ -1148,6 +1168,7 @@ _archive_read_next_header2(struct archive *_a, struct archive_entry *entry)
break;
}
+ __archive_reset_read_data(&a->archive);
return (r);
}