From 2029412c9721d4b0c432fee43adb04d0e1fab0d4 Mon Sep 17 00:00:00 2001 From: Emil Velikov Date: Fri, 13 Mar 2020 19:21:55 +0000 Subject: [PATCH] Introduce internal archive_entry_set_digest() To be used by the mtree reader, to populate the internal digest storage. The function is deliberately not part of the user interface, since it's interactions are not defined yet. Signed-off-by: Emil Velikov --- libarchive/archive_entry.c | 34 ++++++++++++++++++++++++++++++ libarchive/archive_entry_private.h | 4 ++++ 2 files changed, 38 insertions(+) diff --git a/libarchive/archive_entry.c b/libarchive/archive_entry.c index 5d713376b..718ab6d53 100644 --- a/libarchive/archive_entry.c +++ b/libarchive/archive_entry.c @@ -1451,6 +1451,40 @@ archive_entry_digest(struct archive_entry *entry, int type) } } +int +archive_entry_set_digest(struct archive_entry *entry, int type, + const unsigned char *digest) +{ +#define copy_digest(_e, _t, _d)\ + memcpy(_e->digest._t, _d, sizeof(_e->digest._t)) + + switch (type) { + case ARCHIVE_ENTRY_DIGEST_MD5: + copy_digest(entry, md5, digest); + break; + case ARCHIVE_ENTRY_DIGEST_RMD160: + copy_digest(entry, rmd160, digest); + break; + case ARCHIVE_ENTRY_DIGEST_SHA1: + copy_digest(entry, sha1, digest); + break; + case ARCHIVE_ENTRY_DIGEST_SHA256: + copy_digest(entry, sha256, digest); + break; + case ARCHIVE_ENTRY_DIGEST_SHA384: + copy_digest(entry, sha384, digest); + break; + case ARCHIVE_ENTRY_DIGEST_SHA512: + copy_digest(entry, sha512, digest); + break; + default: + return ARCHIVE_WARN; + } + + return ARCHIVE_OK; +#undef copy_digest +} + /* * ACL management. The following would, of course, be a lot simpler * if: 1) the last draft of POSIX.1e were a really thorough and diff --git a/libarchive/archive_entry_private.h b/libarchive/archive_entry_private.h index abd89b591..cf4deb24e 100644 --- a/libarchive/archive_entry_private.h +++ b/libarchive/archive_entry_private.h @@ -193,4 +193,8 @@ struct archive_entry { int ae_symlink_type; }; +int +archive_entry_set_digest(struct archive_entry *entry, int type, + const unsigned char *digest); + #endif /* ARCHIVE_ENTRY_PRIVATE_H_INCLUDED */ -- 2.47.2