diff options
author | Cameron Katri <me@cameronkatri.com> | 2022-06-13 23:07:11 -0400 |
---|---|---|
committer | Cameron Katri <me@cameronkatri.com> | 2022-06-13 23:07:11 -0400 |
commit | 6a5be2524f0d31a601687e8b5d09b9af92848dac (patch) | |
tree | 5b972137814a4fb71eb29a1ee5520ca196d5b9f9 | |
parent | 5c02858affbcccd66f1f994c5a8cc475ea503591 (diff) | |
download | trustcache-6a5be2524f0d31a601687e8b5d09b9af92848dac.tar.gz trustcache-6a5be2524f0d31a601687e8b5d09b9af92848dac.tar.zst trustcache-6a5be2524f0d31a601687e8b5d09b9af92848dac.zip |
Unify writing of trustcache to new function
-rw-r--r-- | append.c | 18 | ||||
-rw-r--r-- | create.c | 20 | ||||
-rw-r--r-- | remove.c | 17 | ||||
-rw-r--r-- | trustcache.c | 26 | ||||
-rw-r--r-- | trustcache.h | 1 |
5 files changed, 32 insertions, 50 deletions
@@ -143,23 +143,9 @@ tcappend(int argc, char **argv) break; } - if ((f = fopen(argv[0], "wb")) == NULL) { - fprintf(stderr, "%s: %s\n", argv[0], strerror(errno)); + if (writetrustcache(cache, argv[0]) == -1) return 1; - } - - cache.version = htole32(cache.version); - cache.num_entries = htole32(cache.num_entries); - fwrite(&cache, sizeof(struct trust_cache) - sizeof(struct trust_cache_entry1*), 1, f); - cache.version = le32toh(cache.version); - cache.num_entries = le32toh(cache.num_entries); - - for (uint32_t i = 0; i < cache.num_entries; i++) { - if (cache.version == 0) - fwrite(&cache.hashes[i], sizeof(trust_cache_hash0), 1, f); - else if (cache.version == 1) - fwrite(&cache.entries[i], sizeof(struct trust_cache_entry1), 1, f); - } + free(cache.entries); return 0; } @@ -102,26 +102,8 @@ tccreate(int argc, char **argv) else if (cache.version == 0) qsort(cache.hashes, cache.num_entries, sizeof(*cache.hashes), hash_cmp); - FILE *f = NULL; - if ((f = fopen(argv[0], "wb")) == NULL) { - fprintf(stderr, "%s: %s\n", argv[0], strerror(errno)); + if (writetrustcache(cache, argv[0]) == -1) return 1; - } - - cache.version = htole32(cache.version); - cache.num_entries = htole32(cache.num_entries); - fwrite(&cache, sizeof(struct trust_cache) - sizeof(struct trust_cache_entry1*), 1, f); - cache.version = le32toh(cache.version); - cache.num_entries = le32toh(cache.num_entries); - - for (uint32_t i = 0; i < cache.num_entries; i++) { - if (cache.version == 1) - fwrite(&cache.entries[i], sizeof(struct trust_cache_entry1), 1, f); - else if (cache.version == 0) - fwrite(&cache.hashes[i], sizeof(trust_cache_hash0), 1, f); - } - - fclose(f); free(cache.entries); @@ -96,23 +96,10 @@ tcremove(int argc, char **argv) hash[j] = 0; } - if ((f = fopen(argv[0], "wb")) == NULL) { - fprintf(stderr, "%s: %s\n", argv[0], strerror(errno)); + if (writetrustcache(cache, argv[0]) == -1) return 1; - } - - cache.version = htole32(cache.version); - cache.num_entries = htole32(cache.num_entries); - fwrite(&cache, sizeof(struct trust_cache) - sizeof(struct trust_cache_entry1*), 1, f); - cache.version = le32toh(cache.version); - cache.num_entries = le32toh(cache.num_entries); - for (uint32_t i = 0; i < cache.num_entries; i++) { - if (cache.version == 0) - fwrite(&cache.hashes[i], sizeof(trust_cache_hash0), 1, f); - else if (cache.version == 1) - fwrite(&cache.entries[i], sizeof(struct trust_cache_entry1), 1, f); - } + free(cache.entries); printf("Removed %i %s\n", numremoved, numremoved == 1 ? "entry" : "entries"); diff --git a/trustcache.c b/trustcache.c index adc594c..cb6c7b0 100644 --- a/trustcache.c +++ b/trustcache.c @@ -99,3 +99,29 @@ opentrustcache(const char *path) fclose(f); return cache; } + +int +writetrustcache(struct trust_cache cache, const char *path) +{ + FILE *f = NULL; + if ((f = fopen(path, "wb")) == NULL) { + fprintf(stderr, "%s: %s\n", path, strerror(errno)); + return -1; + } + + cache.version = htole32(cache.version); + cache.num_entries = htole32(cache.num_entries); + fwrite(&cache, sizeof(struct trust_cache) - sizeof(struct trust_cache_entry1*), 1, f); + cache.version = le32toh(cache.version); + cache.num_entries = le32toh(cache.num_entries); + + for (uint32_t i = 0; i < cache.num_entries; i++) { + if (cache.version == 0) + fwrite(&cache.hashes[i], sizeof(trust_cache_hash0), 1, f); + else if (cache.version == 1) + fwrite(&cache.entries[i], sizeof(struct trust_cache_entry1), 1, f); + } + + fclose(f); + return 0; +} diff --git a/trustcache.h b/trustcache.h index 5b75459..3b1696a 100644 --- a/trustcache.h +++ b/trustcache.h @@ -40,6 +40,7 @@ struct trust_cache { #define CS_TRUST_CACHE_ANE 0x2 struct trust_cache opentrustcache(const char *path); +int writetrustcache(struct trust_cache cache, const char *path); struct trust_cache cache_from_tree(const char *path, uint32_t version); int tcinfo(int argc, char **argv); |