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;
struct reg_info {
int compute_sum;
uint32_t crc;
- struct ae_mset_digest mset_digest;
+ uint_least32_t mset_digest;
struct ae_digest digest;
};
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(®->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(®->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(®->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(®->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(®->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(®->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(®->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(®->digest.sha512, entry->digest.sha512,
sizeof(reg->digest.sha512));
- reg->mset_digest.sha512 = entry->mset_digest.sha512;
}
}
#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
}
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. */