#include <zstd.h>
#include <pakfire/compress.h>
+#include <pakfire/file.h>
+#include <pakfire/filelist.h>
#include <pakfire/logging.h>
#include <pakfire/progressbar.h>
#include <pakfire/util.h>
}
static int __pakfire_extract_entry(struct pakfire* pakfire, struct pakfire_extract* data,
- struct archive_entry* entry) {
+ struct archive_entry* entry, struct pakfire_filelist* filelist) {
+ struct pakfire_file* file = NULL;
char buffer[PATH_MAX];
int r;
}
}
+ // Add entry to filelist (if requested)
+ if (filelist) {
+ r = pakfire_file_create_from_archive_entry(&file, pakfire, entry);
+ if (r)
+ goto ERROR;
+
+ // Append the file to the list
+ r = pakfire_filelist_append(filelist, file);
+ if (r)
+ goto ERROR;
+ }
+
// Create file & extract payload
r = archive_read_extract2(data->archive, entry, data->writer);
switch (r) {
break;
}
+ERROR:
+ if (file)
+ pakfire_file_unref(file);
+
return r;
}
int pakfire_extract(struct pakfire* pakfire, struct archive* archive,
- size_t size, const char* prefix, const char* message, int flags) {
+ size_t size, struct pakfire_filelist* filelist,
+ const char* prefix, const char* message, int flags) {
int r = 1;
struct pakfire_extract data = {
}
// Extract the entry
- r = __pakfire_extract_entry(pakfire, &data, entry);
+ r = __pakfire_extract_entry(pakfire, &data, entry, filelist);
if (r)
goto ERROR;
}
};
int pakfire_extract(struct pakfire* pakfire, struct archive* archive,
- size_t size, const char* prefix, const char* message, int flags);
+ size_t size, struct pakfire_filelist* filelist, const char* prefix,
+ const char* message, int flags);
#endif