]> git.ipfire.org Git - thirdparty/libarchive.git/commitdiff
Introduce internal archive_entry_set_digest()
authorEmil Velikov <emil.l.velikov@gmail.com>
Fri, 13 Mar 2020 19:21:55 +0000 (19:21 +0000)
committerEmil Velikov <emil.l.velikov@gmail.com>
Sat, 14 Mar 2020 11:52:16 +0000 (11:52 +0000)
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 <emil.l.velikov@gmail.com>
libarchive/archive_entry.c
libarchive/archive_entry_private.h

index 5d713376b69f1933c6d08f192f2373c303e744e9..718ab6d53a62861b5f5fabc16efddfcd52a0a573 100644 (file)
@@ -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
index abd89b591ecb0a87d5dbbdba7adec0f06467f9d5..cf4deb24ec83eacd2e38fac721fef9ca7d6edb3c 100644 (file)
@@ -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 */