]> git.cameronkatri.com Git - trustcache.git/commitdiff
Unify writing of trustcache to new function
authorCameron Katri <me@cameronkatri.com>
Tue, 14 Jun 2022 03:07:11 +0000 (23:07 -0400)
committerCameron Katri <me@cameronkatri.com>
Tue, 14 Jun 2022 03:07:11 +0000 (23:07 -0400)
append.c
create.c
remove.c
trustcache.c
trustcache.h

index 764ab3fb6708d1c069124241305242fa446b2f20..5bc468d9146e4155f9d78a105650384ca237d3c8 100644 (file)
--- a/append.c
+++ b/append.c
@@ -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;
 }
index 02ab9e456c0426ea957df80aa56c38165c7ce279..c88abc48c8feb8cf220cd939473e89678adea867 100644 (file)
--- a/create.c
+++ b/create.c
@@ -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);
 
index 442a9e2148c16244d736b31830eb4f9841bd2100..5f31848eacd2dba8674c0344742278a873eefe05 100644 (file)
--- a/remove.c
+++ b/remove.c
@@ -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");
 
index adc594c1461c62aaff81c713cd2184973b3ae619..cb6c7b0e1565afc9c71752503a4217af584ad42d 100644 (file)
@@ -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;
+}
index 5b75459237fcf7f692ee45acbc8628e0bcdec685..3b1696acce08e12c93bea0f22de5a8a50f77df22 100644 (file)
@@ -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);