// Reference to Pakfire
struct pakfire* pakfire;
+ // Flags
+ int flags;
+
// The archive to extract
struct archive* archive;
}
// Create file & extract payload
- r = archive_read_extract2(data->archive, entry, data->writer);
- switch (r) {
- case ARCHIVE_OK:
- r = 0;
- break;
+ if (data->writer) {
+ r = archive_read_extract2(data->archive, entry, data->writer);
+ switch (r) {
+ case ARCHIVE_OK:
+ r = 0;
+ break;
- case ARCHIVE_WARN:
- ERROR(pakfire, "%s\n", archive_error_string(data->writer));
+ case ARCHIVE_WARN:
+ ERROR(pakfire, "%s\n", archive_error_string(data->writer));
- // Pretend everything has been okay
- r = 0;
- break;
+ // Pretend everything has been okay
+ r = 0;
+ break;
- case ARCHIVE_FATAL:
- ERROR(pakfire, "%s\n", archive_error_string(data->writer));
- r = 1;
- break;
+ case ARCHIVE_FATAL:
+ ERROR(pakfire, "%s\n", archive_error_string(data->writer));
+ r = 1;
+ break;
+ }
}
ERROR:
struct pakfire_extract data = {
.pakfire = pakfire,
.archive = archive,
+ .flags = flags,
+ .writer = NULL,
};
+ // Is this a dry run?
+ const int dry_run = flags & PAKFIRE_EXTRACT_DRY_RUN;
+
// Set prefix (including pakfire path)
r = pakfire_path(pakfire, data.prefix, "%s", prefix);
if (r)
goto ERROR;
// Allocate writer
- data.writer = pakfire_make_archive_disk_writer(pakfire, 1);
- if (!data.writer) {
- ERROR(pakfire, "Could not create disk writer: %m\n");
- r = 1;
- goto ERROR;
+ if (!dry_run) {
+ data.writer = pakfire_make_archive_disk_writer(pakfire, 1);
+ if (!data.writer) {
+ ERROR(pakfire, "Could not create disk writer: %m\n");
+ r = 1;
+ goto ERROR;
+ }
}
// Create the progressbar
// Extract
enum pakfire_extract_flags {
- PAKFIRE_EXTRACT_SHOW_THROUGHPUT = (1 << 0),
+ PAKFIRE_EXTRACT_DRY_RUN = (1 << 0),
+ PAKFIRE_EXTRACT_SHOW_THROUGHPUT = (1 << 1),
};
int pakfire_extract(struct pakfire* pakfire, struct archive* archive,