diff options
Diffstat (limited to 'c_implementation/src/ak_fs_mt.c')
-rw-r--r-- | c_implementation/src/ak_fs_mt.c | 68 |
1 files changed, 68 insertions, 0 deletions
diff --git a/c_implementation/src/ak_fs_mt.c b/c_implementation/src/ak_fs_mt.c new file mode 100644 index 0000000..7bdd6f4 --- /dev/null +++ b/c_implementation/src/ak_fs_mt.c @@ -0,0 +1,68 @@ +#include <stdio.h> +#include <libakfs.h> +#include <stdlib.h> + +bool ak_fs_mt_branch_is_null(mt_branch* node) +{ + if ( + ak_fs_sha512sum_is_null(&node->root) && + ak_fs_sha512sum_is_null(&node->head) && + ak_fs_sha512sum_is_null(&node->tail) + ) + { + return true; + } + return false; +} + +bool ak_fs_mt_branch_compare(mt_branch *a, mt_branch *b) +{ + if ( + ak_fs_sha512sum_compare(&a->root, &b->root) && + ak_fs_sha512sum_compare(&a->head, &b->head) && + ak_fs_sha512sum_compare(&a->tail, &b->tail) + ) + { + return true; + } + return false; +} + +int ak_fs_mt_branch_resolve(mt_branch *node) +{ + const char* leafs_dir = getenv("AK_LEAFSDIR"); + FILE *fd; + char *fullpath; + asprintf(&fullpath, "%s/%s", leafs_dir, ak_fs_sha512sum_struct_read_as_string(&node->head)); + fd = fopen(fullpath, "r"); + if ( fd == NULL ) + { + perror("fopen"); + return 1; + } + char buffer[258]; + fread(&buffer, sizeof(buffer), 1, fd); + fclose(fd); + char h1[129] = {0}; + char h2[129] = {0}; + if ( buffer[128] == '\n' && buffer[257] == '\n' ) printf("\\n found on the expected spot!\n"); + mt_branch h0; + ak_fs_sha512sum_init(&h0.root); + ak_fs_sha512sum_init(&h0.head); + ak_fs_sha512sum_init(&h0.tail); + h0.root = node->root; + for( size_t i = 0; i < 128; ++i ) + { + h1[i] = buffer[i]; + } + h1[128] = '\0'; + for( size_t i = 0; i < 128; ++i ) + { + h2[i] = buffer[i+129]; + } + h2[128] = '\0'; + ak_fs_sha512sum_string_to_struct(h1, &h0.head); + ak_fs_sha512sum_string_to_struct(h2, &h0.tail); + ak_fs_mt_branch_resolve(&h0); + return 0; +} |