aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorCameron Katri <me@cameronkatri.com>2022-06-13 23:07:11 -0400
committerCameron Katri <me@cameronkatri.com>2022-06-13 23:07:11 -0400
commit6a5be2524f0d31a601687e8b5d09b9af92848dac (patch)
tree5b972137814a4fb71eb29a1ee5520ca196d5b9f9
parent5c02858affbcccd66f1f994c5a8cc475ea503591 (diff)
downloadtrustcache-6a5be2524f0d31a601687e8b5d09b9af92848dac.tar.gz
trustcache-6a5be2524f0d31a601687e8b5d09b9af92848dac.tar.zst
trustcache-6a5be2524f0d31a601687e8b5d09b9af92848dac.zip
Unify writing of trustcache to new function
-rw-r--r--append.c18
-rw-r--r--create.c20
-rw-r--r--remove.c17
-rw-r--r--trustcache.c26
-rw-r--r--trustcache.h1
5 files changed, 32 insertions, 50 deletions
diff --git a/append.c b/append.c
index 764ab3f..5bc468d 100644
--- 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;
}
diff --git a/create.c b/create.c
index 02ab9e4..c88abc4 100644
--- 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);
diff --git a/remove.c b/remove.c
index 442a9e2..5f31848 100644
--- 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");
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);