#include "archive_private.h"
#include "archive_read_private.h"
-static int archive_read_extract_cleanup(struct archive_read *);
-
int
archive_read_extract(struct archive *_a, struct archive_entry *entry, int flags)
{
return (ARCHIVE_FATAL);
}
archive_write_disk_set_standard_lookup(extract->ad);
- a->cleanup_archive_extract = archive_read_extract_cleanup;
}
archive_write_disk_set_options(extract->ad, flags);
return (archive_read_extract2(&a->archive, entry, extract->ad));
}
-
-/*
- * Cleanup function for archive_extract.
- */
-static int
-archive_read_extract_cleanup(struct archive_read *a)
-{
- int ret = ARCHIVE_OK;
-
- ret = archive_write_free(a->extract->ad);
- free(a->extract);
- a->extract = NULL;
- return (ret);
-}
#include "archive_read_private.h"
static int copy_data(struct archive *ar, struct archive *aw);
+static int archive_read_extract_cleanup(struct archive_read *);
+
/* Retrieve an extract object without initialising the associated
* archive_write_disk object.
return (NULL);
}
memset(a->extract, 0, sizeof(*a->extract));
+ a->cleanup_archive_extract = archive_read_extract_cleanup;
}
return (a->extract);
}
+/*
+ * Cleanup function for archive_extract.
+ */
+static int
+archive_read_extract_cleanup(struct archive_read *a)
+{
+ int ret = ARCHIVE_OK;
+
+ if (a->extract->ad != NULL) {
+ ret = archive_write_free(a->extract->ad);
+ }
+ free(a->extract);
+ a->extract = NULL;
+ return (ret);
+}
+
int
archive_read_extract2(struct archive *_a, struct archive_entry *entry,
struct archive *ad)