return entry;
}
+static const struct pakfire_libarchive_digest {
+ enum pakfire_digests pakfire;
+ int libarchive;
+} pakfire_libarchive_digests[] = {
+ { PAKFIRE_DIGEST_SHA512, ARCHIVE_ENTRY_DIGEST_SHA512 },
+ { PAKFIRE_DIGEST_SHA256, ARCHIVE_ENTRY_DIGEST_SHA256 },
+ { PAKFIRE_DIGEST_SHA1, ARCHIVE_ENTRY_DIGEST_SHA1 },
+ { PAKFIRE_DIGEST_NONE, 0 },
+};
+
int pakfire_file_copy_archive_entry(struct pakfire_file* file, struct archive_entry* entry) {
+ int r = 0;
+
// Set abspath
pakfire_file_set_abspath(file, archive_entry_sourcepath(entry));
pakfire_file_set_ctime(file, archive_entry_ctime(entry));
pakfire_file_set_mtime(file, archive_entry_mtime(entry));
- // XXX copy digest
+ // Copy digest
+ for (const struct pakfire_libarchive_digest* type = pakfire_libarchive_digests;
+ type->pakfire; type++) {
+ const unsigned char* digest = archive_entry_digest(entry, type->libarchive);
+ if (digest) {
+ r = pakfire_file_set_digest(file, type->pakfire, digest);
+ if (r)
+ return r;
- return 0;
+ break;
+ }
+ }
+
+ return r;
}
static void pakfire_file_free(struct pakfire_file* file) {