aboutsummaryrefslogtreecommitdiffstats
path: root/trustcache.c
diff options
context:
space:
mode:
Diffstat (limited to 'trustcache.c')
-rw-r--r--trustcache.c26
1 files changed, 26 insertions, 0 deletions
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;
+}