aboutsummaryrefslogtreecommitdiff
path: root/c_implementation/src/akfs.c
diff options
context:
space:
mode:
Diffstat (limited to 'c_implementation/src/akfs.c')
-rw-r--r--c_implementation/src/akfs.c388
1 files changed, 0 insertions, 388 deletions
diff --git a/c_implementation/src/akfs.c b/c_implementation/src/akfs.c
deleted file mode 100644
index 0e362aa..0000000
--- a/c_implementation/src/akfs.c
+++ /dev/null
@@ -1,388 +0,0 @@
-#include <stdio.h>
-#include <unistd.h>
-#include <stdbool.h>
-#include <assert.h>
-#include <stdlib.h>
-#include <string.h>
-#include <libakfs.h>
-#include <libaklog.h>
-#include <libaksettings.h>
-#include <sys/stat.h>
-#include <dirent.h>
-
-const char* ak_fs_maps_v3_get_dir()
-{
- return getenv("AK_MAPSDIR");
-}
-
-char* ak_fs_return_hash_path(const char* str)
-{
- if ( ak_fs_verify_input_is_hash(str) )
- {
- unsigned int i = 0;
- char *result = malloc((128*2)+1);
- if ( result == NULL )
- {
- return "";
- }
- while ( str[i] != '\0' )
- {
- result[i*2] = str[i];
- if ( (i*2) + 1 <= 254 )
- {
- result[(i*2)+1] = '/';
- }
- else
- {
- result[(i*2)+1] = '\0';
- }
- ++i;
- }
- return result;
- }
- else
- {
- return NULL;
- }
-}
-
-char* ak_fs_return_hash_dir(const char* str)
-{
- if ( ak_fs_verify_input_is_hash(str) )
- {
- unsigned int i = 0;
- char *result = malloc((128*2)+1);
- if ( result == NULL ) return "";
- while ( str[i] != '\0' )
- {
- result[i*2] = str[i];
- if ( (i*2) + 1 <= 254-2 )
- {
- result[(i*2)+1] = '/';
- }
- else
- {
- result[(i*2)+1] = '\0';
- }
- ++i;
- }
- return result;
- }
- else
- {
- return NULL;
- }
-}
-
-bool ak_fs_verify_input_is_hash(const char* str)
-{
- size_t i = 0;
- while ( str[i] != '\0' )
- {
- if (
- i < 128 &&
- !(
- ( str[i] >= 0x30 ) &&
- (( str[i] <= 0x39) || ( str[i] >= 0x61 )) &&
- ( str[i] <= 0x66 )
- )
- )
- {
- return false;
- }
- else {
- i++;
- }
- }
- if ( i > 128 )
- {
- return false;
- }
- return true;
-}
-
-int ak_fs_create_dir_for_hash(const char* str)
-{
- /* TODO
- * Some aspects of this function
- * 1. We need a "root" place to put our dirs into, this is not specified
- * anywhere in this code but it is spartially specified in other files
- * like lib/_ak_fs bash script and the rc/config file we currently source
- * in $HOME/.bashrc
- * 2. We might need to "lock" onto some version of glibc and be aware of
- * other systems that do not use that one.
- */
- if ( ak_fs_verify_input_is_hash(str) )
- {
- char* dir_path = ak_fs_return_hash_dir(str);
- // We will need to separate the string so we can create the path one
- // directory at the time
- int len = strlen(dir_path);
- for ( int i = 0; i < len+1; ++i)
- {
- if ( dir_path[i] == '/' )
- {
- //printf("%c\n", dir_path[i]);
- //char* test = strndup(dir_path, i);
- //printf("A: [i:%d] [c:%c] - %s\n", i, dir_path[i], test);
- continue;
- }
- else
- {
- char* incremental_dir_path = strndup(dir_path, i+1);
- // printf("B: [i:%d] [c:%c] - %s\n", i, dir_path[i], test);
- struct stat sb;
- if (stat(incremental_dir_path, &sb) == 0 && S_ISDIR(sb.st_mode))
- {
- continue;
- }
- else
- {
- int return_code = mkdir(incremental_dir_path, 0777);
- if ( return_code == 0 )
- {
- continue;
- }
- else
- {
- // should be unreachable I guess since previous checks
- // though it could be caused by some other kind of error
- // like, no permission, or exists but is not a directory
- // but a file, dev, char, pipe whatever this thing
- // supports anyway
- free(incremental_dir_path);
- free(dir_path);
- return -3;
- }
- }
- free(incremental_dir_path);
- }
- }
- free(dir_path);
- return 0;
- }
- else
- {
- return -2;
- }
-}
-
-int ak_fs_convert_map_v3_string_to_struct(const char *str, size_t ssize, akfs_map_v3* map)
-{
- size_t sa[] = { -1, -1, -1, -1, -1 };
- size_t na[] = { -1, -1, -1 };
- int spaces_found = 0;
- int newlines_found = 0;
- char original_hash_str[129] = {0};
- char root_hash_str[129] = {0};
- char filename[256] = {0};
- if ( map == 0x0 )
- {
- printf("FAILED IN %s! : %p \n", __func__, (void*)map);
- return 1;
- }
- for ( size_t i = 0; i < ssize; ++i)
- {
- if ( str[i] == ' ' )
- {
- spaces_found++;
- sa[spaces_found] = i;
- }
- if ( str[i] == '\n' )
- {
- newlines_found++;
- na[newlines_found] = i;
- }
- }
- int si = 0;
- for ( size_t i = 0; i < sa[1]; ++i)
- {
- original_hash_str[si] = str[i];
- si++;
- }
- original_hash_str[si] = '\0';
- if( !ak_fs_verify_input_is_hash(original_hash_str) )
- {
- ak_log_error(__func__, "original_hash_str not a hash");
- return 1;
- }
- if ( ak_fs_sha512sum_string_to_struct(original_hash_str, &(map->oh)) != 0 )
- {
- ak_log_error(__func__, "String convertion of original_hash_str");
- return 1;
- }
- si = 0;
- for ( size_t i = na[1]+1; i < sa[3]; ++i)
- {
- root_hash_str[si] = str[i];
- si++;
- }
- root_hash_str[si] = '\0';
- if( !ak_fs_verify_input_is_hash(root_hash_str) )
- {
- ak_log_error(__func__, "root_hash_str not a hash");
- return 1;
- }
- if ( ak_fs_sha512sum_string_to_struct(root_hash_str, &(map->rh)) != 0 )
- {
- ak_log_error(__func__, "String convertion of root_hash_str");
- return 1;
- }
- si = 0;
- if ( sa[2] < na[1] )
- {
- for ( size_t i = sa[2]+1; i < na[1]; ++i)
- {
- filename[si] = str[i];
- si++;
- }
- filename[si] = '\0';
- }
- strncpy(map->filename, filename, sizeof(map->filename));
- return 0;
-}
-
-void ak_fs_get_available_maps_from_fs(sha512sum **ma, size_t length)
-{
- DIR *d;
- d = opendir(ak_fs_maps_v3_get_dir());
- sha512sum *ptr = NULL;
- if (d)
- {
- for ( ptr = *ma; ptr < *ma+length; ++ptr)
- {
- const struct dirent *dir;
- if ((dir = readdir(d)) == NULL ) break;
- if (!ak_fs_verify_input_is_hash(dir->d_name)) continue;
- ak_fs_sha512sum_string_to_struct(dir->d_name, ptr);
- }
- }
- closedir(d);
-}
-
-int ak_fs_load_available_maps(sha512sum **ma, size_t ma_len, akfs_map_v3 **ms, size_t ms_len)
-{
- sha512sum *ptr = NULL;
- akfs_map_v3 *mptr = NULL;
- mptr = *ms;
- (void)ms_len;
- for ( ptr = *ma; ptr < *ma+ma_len; ++ptr)
- {
- if ( ak_fs_sha512sum_is_null(ptr))
- {
- continue;
- }
- if( ak_fs_open_map_v3_file(ak_fs_sha512sum_struct_read_as_string(ptr), mptr) != 2)
- {
- ++(mptr);
- continue;
- }
- else
- {
- ++(mptr);
- // return 1;
- }
- }
- return 0;
-}
-
-void ak_fs_print_loaded_maps(akfs_map_v3 **map_store, size_t length)
-{
- akfs_map_v3 *ptr = NULL;
- for ( ptr = *map_store; ptr < *map_store + length; ++ptr)
- {
- if ( !ak_fs_map_v3_is_null(ptr) ) ak_fs_map_v3_print(ptr);
- }
-}
-
-bool ak_fs_map_v3_compare(akfs_map_v3* a, akfs_map_v3* b)
-{
- return (
- (ak_fs_sha512sum_compare(&a->oh, &b->oh) == true) &&
- (ak_fs_sha512sum_compare(&a->rh, &b->rh) == true) &&
- (ak_fs_sha512sum_compare(&a->mh, &b->mh) == true) &&
- (strcmp(a->filename, b->filename) == 0)
- );
-}
-
-void ak_fs_print_available_maps(sha512sum **ma, size_t ma_len)
-{
- sha512sum *ptr = NULL;
- for ( ptr = *ma; ptr < *ma+ma_len; ++ptr)
- {
- ak_log_debug(__func__, ak_fs_sha512sum_struct_read_as_string(ptr));
- }
-
-}
-
-void ak_fs_init_string(char *str, size_t len)
-{
- for (size_t i = 0; i < len; ++i)
- {
- str[i] = '\0';
- }
-}
-
-
-void ak_fs_print_map_avail(const sha512sum* m)
-{
- printf(" .MA: %s\n", ak_fs_sha512sum_struct_read_as_string(m));
-}
-
-void ak_fs_print_map_all_avail(sha512sum** m, size_t s)
-{
- sha512sum *ptr = NULL;
- for (ptr = *m; ptr < *m+s; ++ptr)
- {
- ak_fs_print_map_avail(ptr);
- }
-}
-
-void ak_fs_print_filenames_from_map_store(akfs_map_v3** m, size_t s)
-{
- akfs_map_v3 *ptr = NULL;
- for (ptr = *m; ptr < *m+s; ++ptr)
- {
- if ( !ak_fs_map_v3_is_null(ptr) ) ak_fs_map_v3_print_filename(ptr);
- }
-}
-
-// char* ak_fs_fuse_list_filenames_from_map_store(akfs_map_v3** m, size_t s)
-// {
-// akfs_map_v3 *ptr = NULL;
-// for (ptr = *m; ptr < *m+s; ++ptr)
-// {
-// if ( !ak_fs_map_v3_is_null(ptr) ) ak_fs_map_v3_get_filename(ptr);
-// }
-// }
-
-void ak_fs_print_all_maps_from_map_store(akfs_map_v3** m, size_t s)
-{
- akfs_map_v3 *ptr = NULL;
- for (ptr = *m; ptr < *m+s; ++ptr)
- {
- if (!ak_fs_map_v3_is_null(ptr)) ak_fs_map_v3_print(ptr);
- }
-}
-
-int ak_fs_ls()
-{
- size_t ms_len = 100;
- size_t ma_len = 100;
- akfs_map_v3 map_store[ms_len];
- akfs_map_v3* mps_ptr = &map_store[0];
- void* mps_start = &map_store[0];
- (void)mps_start;
- sha512sum maps_avail[ma_len];
- sha512sum *mav_ptr = &maps_avail[0];
- void* mav_start = &map_store[0];
- (void)mav_start;
- ak_fs_map_v3_init_store(&mps_ptr, ms_len);
- ak_fs_sha512sum_init_avail(&mav_ptr, ma_len);
- ak_fs_print_all_maps_from_map_store(&mps_ptr, ms_len);
- ak_fs_get_available_maps_from_fs(&mav_ptr, ma_len);
- ak_fs_load_available_maps(&mav_ptr, ma_len, &mps_ptr, ms_len);
- ak_fs_print_loaded_maps(&mps_ptr, ms_len);
- ak_fs_print_filenames_from_map_store(&mps_ptr, ms_len);
- return 0;
-}