From 620d10d025e2ec4cd44d6eb77ca77a54b4e5b569 Mon Sep 17 00:00:00 2001 From: Dan Sheppard Date: Tue, 22 Apr 2025 18:38:27 +0100 Subject: [PATCH] Description in superblock. --- src/superblock.c | 39 ++++++++++++++++++++++++++++++++------- src/superblock.h | 13 ++++++++++++- src/util.c | 7 +++++++ src/util.h | 1 + testdata/sb1.coquet | Bin 8193 -> 8193 bytes 5 files changed, 52 insertions(+), 8 deletions(-) diff --git a/src/superblock.c b/src/superblock.c index c901a70..4f2b690 100644 --- a/src/superblock.c +++ b/src/superblock.c @@ -1,5 +1,6 @@ #include #include +#include #include "coquet.h" #include "util.h" #include "sha2.h" @@ -16,8 +17,9 @@ * | global_iv | 16 32 * | sb_hash | 48 32 * | sb_serial | 80 8 + * | description | 88 128 * +-------------------+ - * | unused | 88 936 + * | unused | 216 808 * +-------------------+ * | current | 1024 512 * +-------------------+ @@ -30,11 +32,8 @@ * +-------------------+ * | block_size | 0 1 * | nursery_size | 1 1 - * | unused | 2 126 * +-------------------+ - * | description | 128 128 - * +-------------------+ - * | unused | 256 256 + * | unused | 2 510 * +-------------------+ */ @@ -45,7 +44,8 @@ struct cq_super default_super = { .sb_serial = 0, .sb_hash = {0,}, .version = COQUET_VERSION, - .from_b = 1 + .from_b = 1, + .desc = {0,}, }; /* Blindly do a extraction. Note that we may not have any verification @@ -67,10 +67,11 @@ static int extract_half(uint8_t *data, struct cq_super *super) { return 0; } super->version = be_decode(data+8,8); - /* (all versions are fine for now). */ + /* (all versions are fine for now). TODO */ memcpy(super->global_iv,data+16,GLOBAL_IV_LEN); memset(super->sb_hash,0,HASH_LEN); + memcpy(super->desc,data+88,DESC_LEN); super->sb_serial = be_decode(data+80,8); extract_config(data+1024,&(super->current)); @@ -95,6 +96,7 @@ static int super_init(coquet_t *cq, struct cq_super *super) { r = (cq->vfs_funcs.random)(cq->vfs_data, super->global_iv, GLOBAL_IV_LEN); + memset(super->desc,0,DESC_LEN); if(r != COQUET_RET_OK) { return r; } @@ -167,6 +169,7 @@ static void intract(uint8_t *data, struct cq_super *super, uint64_t serial) { be_encode(data+8,COQUET_VERSION,8); memcpy(data+16,super->global_iv,GLOBAL_IV_LEN); be_encode(data+80,serial,8); + memcpy(data+88,super->desc,DESC_LEN); intract_config(data+1024,&(super->current)); intract_config(data+1536,&(super->desired)); @@ -223,6 +226,20 @@ int cq_super_save(coquet_t *cq, struct cq_super *super, bool_t wait) { return ret; } +void cq_super_set_desc(struct cq_super *super, char *desc) { + memset(super->desc,0,DESC_LEN); + strncpy_ok(super->desc,desc,DESC_LEN); +} + +char * cq_super_get_desc(struct cq_super *super) { + char *out; + + out = malloc(DESC_LEN+1); + memcpy(out,super->desc,DESC_LEN); + out[DESC_LEN] = '\0'; + return out; +} + #ifdef COQUET_TEST #include @@ -231,6 +248,7 @@ void test_superblock() { coquet_t cq; int i,r; struct cq_super super; + char *desc; printf("testing superblock\n"); @@ -252,6 +270,7 @@ void test_superblock() { test_bail(&cq,r); super.desired.nursery_size = 11; /* change something for B */ + cq_super_set_desc(&super,"test file"); cq_super_save(&cq,&super,1); test_bail(&cq,r); @@ -274,6 +293,11 @@ void test_superblock() { test_assert(super.desired.block_size == 12,"dbsize"); test_assert(super.current.nursery_size == 10,"cnurs"); test_assert(super.desired.nursery_size == 11,"dnurs"); + + desc = cq_super_get_desc(&super); + test_assert(!strcmp(desc,"test file"),"desc"); + free(desc); + for(i=0;i>= 8; } } + +char *strncpy_ok(char *restrict dst, const char *restrict src, size_t sz) { +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wstringop-truncation" + return strncpy(dst,src,sz); +#pragma GCC diagnostic pop +} diff --git a/src/util.h b/src/util.h index 6d2f655..0b804bf 100644 --- a/src/util.h +++ b/src/util.h @@ -4,5 +4,6 @@ char * cq_message(const char *fmt, ...); uint64_t be_decode(uint8_t *data,int len); void be_encode(uint8_t *where, uint64_t value, int len); +char *strncpy_ok(char *restrict dst, const char *restrict src, size_t sz); #endif \ No newline at end of file diff --git a/testdata/sb1.coquet b/testdata/sb1.coquet index 669f78d9663a5dfbe10db3ac490b9b82d9ed7984..1e7308d871cfead714d7f30e9a4a31739eaa066e 100644 GIT binary patch delta 62 zcmZp4Xmr?Mz+sr5*kM^Ea!JqV^l{e|p`Q28cy_ie4f+23;Z%Lgg5S5!FhBrPNosM4 OLRw}{>gGg_1>yiVY#9Ln delta 57 zcmZp4Xmr?Mz@fn?aWIs7_1f!>O#6F6I{5w9-_Iy?;Ov>KBr7F$@~CeF0|YQ_7UWyO JyorZV1OP$b5r+T( -- 2.30.2