]> git.ipfire.org Git - thirdparty/libarchive.git/commitdiff
Replace struct ae_mset_digest with uint_least32_t
authorNicholas Vinson <nvinson234@gmail.com>
Tue, 13 May 2025 23:38:50 +0000 (19:38 -0400)
committerNicholas Vinson <nvinson234@gmail.com>
Sat, 17 May 2025 15:33:15 +0000 (11:33 -0400)
Signed-off-by: Nicholas Vinson <nvinson234@gmail.com>
libarchive/archive_entry.c
libarchive/archive_entry_private.h
libarchive/archive_write_set_format_mtree.c

index 7e7d518704713c91bfaea17edbe297e57439906a..dc74430f80aa5f3d56d0690d733539b58dabb0d7 100644 (file)
@@ -1607,27 +1607,27 @@ archive_entry_set_digest(struct archive_entry *entry, int type,
        switch (type) {
        case ARCHIVE_ENTRY_DIGEST_MD5:
                copy_digest(entry, md5, digest);
-               entry->mset_digest.md5 = 1;
+               entry->mset_digest |= AE_MSET_DIGEST_MD5;
                break;
        case ARCHIVE_ENTRY_DIGEST_RMD160:
                copy_digest(entry, rmd160, digest);
-               entry->mset_digest.rmd160 = 1;
+               entry->mset_digest |= AE_MSET_DIGEST_RMD160;
                break;
        case ARCHIVE_ENTRY_DIGEST_SHA1:
                copy_digest(entry, sha1, digest);
-               entry->mset_digest.sha1 = 1;
+               entry->mset_digest |= AE_MSET_DIGEST_SHA1;
                break;
        case ARCHIVE_ENTRY_DIGEST_SHA256:
                copy_digest(entry, sha256, digest);
-               entry->mset_digest.sha256 = 1;
+               entry->mset_digest |= AE_MSET_DIGEST_SHA256;
                break;
        case ARCHIVE_ENTRY_DIGEST_SHA384:
                copy_digest(entry, sha384, digest);
-               entry->mset_digest.sha384 = 1;
+               entry->mset_digest |= AE_MSET_DIGEST_SHA384;
                break;
        case ARCHIVE_ENTRY_DIGEST_SHA512:
                copy_digest(entry, sha512, digest);
-               entry->mset_digest.sha512 = 1;
+               entry->mset_digest |= AE_MSET_DIGEST_SHA512;
                break;
        default:
                return ARCHIVE_WARN;
index 2af7b2b8c9de9166aef222819f1d1409ea49f515..9736f7716eec8dc24cb9e0f6ec7885880e7b09f0 100644 (file)
@@ -48,15 +48,6 @@ struct ae_sparse {
        int64_t  length;
 };
 
-struct ae_mset_digest {
-       char md5;
-       char rmd160;
-       char sha1;
-       char sha256;
-       char sha384;
-       char sha512;
-};
-
 struct ae_digest {
        unsigned char md5[16];
        unsigned char rmd160[20];
@@ -183,7 +174,13 @@ struct archive_entry {
        size_t mac_metadata_size;
 
        /* Digest support. */
-       struct ae_mset_digest mset_digest;
+#define AE_MSET_DIGEST_MD5      1
+#define AE_MSET_DIGEST_RMD160   2
+#define AE_MSET_DIGEST_SHA1     4
+#define AE_MSET_DIGEST_SHA256   8
+#define AE_MSET_DIGEST_SHA384  16
+#define AE_MSET_DIGEST_SHA512  32
+       uint_least32_t mset_digest;
        struct ae_digest digest;
 
        /* ACL support. */
index b2767bfec020bd0400c2469ffcef9ee86190be84..c2ecc424675b49e8443e17f23eeb3ff880c7152a 100644 (file)
@@ -82,7 +82,7 @@ struct dir_info {
 struct reg_info {
        int compute_sum;
        uint32_t crc;
-       struct ae_mset_digest mset_digest;
+       uint_least32_t mset_digest;
        struct ae_digest digest;
 };
 
@@ -867,33 +867,43 @@ static void
 mtree_copy_ae_digests(struct reg_info *reg, struct archive_entry *entry, int compute_sum)
 {
        reg->compute_sum = compute_sum;
-       if ((reg->compute_sum & F_MD5) && entry->mset_digest.md5) {
-               memcpy(&reg->digest.md5, entry->digest.md5, sizeof(reg->digest.md5));
-                reg->mset_digest.md5 = entry->mset_digest.md5;
+       reg->mset_digest = entry->mset_digest;
+
+       if ((reg->compute_sum & F_MD5)
+               && (reg->mset_digest & AE_MSET_DIGEST_MD5)) {
+
+               memcpy(&reg->digest.md5, entry->digest.md5,
+                       sizeof(reg->digest.md5));
        }
-       if (reg->compute_sum & F_RMD160 && entry->mset_digest.rmd160) {
+       if ((reg->compute_sum & F_RMD160)
+               && (reg->mset_digest & AE_MSET_DIGEST_RMD160)) {
+
                memcpy(&reg->digest.rmd160, entry->digest.rmd160,
                        sizeof(reg->digest.rmd160));
-                reg->mset_digest.rmd160 = entry->mset_digest.rmd160;
        }
-       if (reg->compute_sum & F_SHA1 && entry->mset_digest.sha1) {
-               memcpy(&reg->digest.sha1, entry->digest.sha1, sizeof(reg->digest.sha1));
-                reg->mset_digest.sha1 = entry->mset_digest.sha1;
+       if ((reg->compute_sum & F_SHA1)
+               && (reg->mset_digest & AE_MSET_DIGEST_SHA1)) {
+
+               memcpy(&reg->digest.sha1, entry->digest.sha1,
+                       sizeof(reg->digest.sha1));
        }
-       if (reg->compute_sum & F_SHA256 && entry->mset_digest.sha256) {
+       if ((reg->compute_sum & F_SHA256)
+               && (reg->mset_digest & AE_MSET_DIGEST_SHA256)) {
+
                memcpy(&reg->digest.sha256, entry->digest.sha256,
                        sizeof(reg->digest.sha256));
-                reg->mset_digest.sha256 = entry->mset_digest.sha256;
        }
-       if (reg->compute_sum & F_SHA384 && entry->mset_digest.sha384) {
+       if ((reg->compute_sum & F_SHA384)
+               && (reg->mset_digest & AE_MSET_DIGEST_SHA384)) {
+
                memcpy(&reg->digest.sha384, entry->digest.sha384,
                        sizeof(reg->digest.sha384));
-                reg->mset_digest.sha384 = entry->mset_digest.sha384;
        }
-       if (reg->compute_sum & F_SHA512 && entry->mset_digest.sha512) {
+       if ((reg->compute_sum & F_SHA512)
+               && (reg->mset_digest & AE_MSET_DIGEST_SHA512)) {
+
                memcpy(&reg->digest.sha512, entry->digest.sha512,
                        sizeof(reg->digest.sha512));
-                reg->mset_digest.sha512 = entry->mset_digest.sha512;
        }
 }
 
@@ -1557,37 +1567,43 @@ sum_update(struct mtree_writer *mtree, const void *buff, size_t n)
 #ifdef ARCHIVE_HAS_MD5
        if (mtree->compute_sum & F_MD5) {
                archive_md5_update(&mtree->md5ctx, buff, n);
-               mtree->mtree_entry->reg_info->mset_digest.md5 = 0;
+               mtree->mtree_entry->reg_info->mset_digest &=
+                       ~AE_MSET_DIGEST_MD5;
        }
 #endif
 #ifdef ARCHIVE_HAS_RMD160
        if (mtree->compute_sum & F_RMD160) {
                archive_rmd160_update(&mtree->rmd160ctx, buff, n);
-               mtree->mtree_entry->reg_info->mset_digest.rmd160 = 0;
+               mtree->mtree_entry->reg_info->mset_digest &=
+                       ~AE_MSET_DIGEST_RMD160;
        }
 #endif
 #ifdef ARCHIVE_HAS_SHA1
        if (mtree->compute_sum & F_SHA1) {
                archive_sha1_update(&mtree->sha1ctx, buff, n);
-               mtree->mtree_entry->reg_info->mset_digest.sha1 = 0;
+               mtree->mtree_entry->reg_info->mset_digest &=
+                       ~AE_MSET_DIGEST_SHA1;
        }
 #endif
 #ifdef ARCHIVE_HAS_SHA256
        if (mtree->compute_sum & F_SHA256) {
                archive_sha256_update(&mtree->sha256ctx, buff, n);
-               mtree->mtree_entry->reg_info->mset_digest.sha256 = 0;
+               mtree->mtree_entry->reg_info->mset_digest &=
+                       ~AE_MSET_DIGEST_SHA256;
        }
 #endif
 #ifdef ARCHIVE_HAS_SHA384
        if (mtree->compute_sum & F_SHA384) {
                archive_sha384_update(&mtree->sha384ctx, buff, n);
-               mtree->mtree_entry->reg_info->mset_digest.sha384 = 0;
+               mtree->mtree_entry->reg_info->mset_digest &=
+                       ~AE_MSET_DIGEST_SHA384;
        }
 #endif
 #ifdef ARCHIVE_HAS_SHA512
        if (mtree->compute_sum & F_SHA512) {
                archive_sha512_update(&mtree->sha512ctx, buff, n);
-               mtree->mtree_entry->reg_info->mset_digest.sha512 = 0;
+               mtree->mtree_entry->reg_info->mset_digest &=
+                       ~AE_MSET_DIGEST_SHA512;
        }
 #endif
 }
@@ -1604,27 +1620,39 @@ sum_final(struct mtree_writer *mtree, struct reg_info *reg)
                reg->crc = ~mtree->crc;
        }
 #ifdef ARCHIVE_HAS_MD5
-       if (mtree->compute_sum & F_MD5 && !reg->mset_digest.md5)
+       if ((mtree->compute_sum & F_MD5)
+               && !(reg->mset_digest & AE_MSET_DIGEST_MD5))
+
                archive_md5_final(&mtree->md5ctx, reg->digest.md5);
 #endif
 #ifdef ARCHIVE_HAS_RMD160
-       if (mtree->compute_sum & F_RMD160 && !reg->mset_digest.rmd160)
+       if ((mtree->compute_sum & F_RMD160)
+               && !(reg->mset_digest & AE_MSET_DIGEST_RMD160))
+
                archive_rmd160_final(&mtree->rmd160ctx, reg->digest.rmd160);
 #endif
 #ifdef ARCHIVE_HAS_SHA1
-       if (mtree->compute_sum & F_SHA1 && !reg->mset_digest.sha1)
+       if ((mtree->compute_sum & F_SHA1)
+               && !(reg->mset_digest & AE_MSET_DIGEST_SHA1))
+
                archive_sha1_final(&mtree->sha1ctx, reg->digest.sha1);
 #endif
 #ifdef ARCHIVE_HAS_SHA256
-       if (mtree->compute_sum & F_SHA256 && !reg->mset_digest.sha256)
+       if ((mtree->compute_sum & F_SHA256)
+               && !(reg->mset_digest & AE_MSET_DIGEST_SHA256))
+
                archive_sha256_final(&mtree->sha256ctx, reg->digest.sha256);
 #endif
 #ifdef ARCHIVE_HAS_SHA384
-       if (mtree->compute_sum & F_SHA384 && !reg->mset_digest.sha384)
+       if ((mtree->compute_sum & F_SHA384)
+               && !(reg->mset_digest & AE_MSET_DIGEST_SHA384))
+
                archive_sha384_final(&mtree->sha384ctx, reg->digest.sha384);
 #endif
 #ifdef ARCHIVE_HAS_SHA512
-       if (mtree->compute_sum & F_SHA512 && !reg->mset_digest.sha512)
+       if ((mtree->compute_sum & F_SHA512)
+               && !(reg->mset_digest & AE_MSET_DIGEST_SHA512))
+
                archive_sha512_final(&mtree->sha512ctx, reg->digest.sha512);
 #endif
        /* Save what types of sum are computed. */