aboutsummaryrefslogtreecommitdiff
path: root/c_implementation
diff options
context:
space:
mode:
Diffstat (limited to 'c_implementation')
-rw-r--r--c_implementation/include/libakdatetime.h14
-rw-r--r--c_implementation/include/libakfs.h10
-rw-r--r--c_implementation/src/ak_fs.c60
-rw-r--r--c_implementation/src/ak_fs_map_v3.c28
-rw-r--r--c_implementation/src/ak_fs_maps_v3.c22
-rw-r--r--c_implementation/src/ak_fs_sha512sum.c5
-rw-r--r--c_implementation/tests/test_akfs.c35
7 files changed, 136 insertions, 38 deletions
diff --git a/c_implementation/include/libakdatetime.h b/c_implementation/include/libakdatetime.h
new file mode 100644
index 0000000..435c3d8
--- /dev/null
+++ b/c_implementation/include/libakdatetime.h
@@ -0,0 +1,14 @@
+#include <stdbool.h>
+#include <stddef.h>
+#ifndef AK_DATETIME_H
+#define AK_DATETIME_H
+
+long ak_datetime_unix();
+void ak_datetime_unix_nanosecs(char *buffer, size_t size);
+void ak_datetime_human(char *buffer, size_t size);
+void ak_datetime_human_date_only(char *buffer, size_t size);
+void ak_datetime_human_date_only_yesterday(char *buffer, size_t size);
+//static bool is_digits_only(const char *str);
+bool ak_datetime_unix_to_human(const char *timestamp_str, char *buffer, size_t size);
+
+#endif // AK_DATETIME_H
diff --git a/c_implementation/include/libakfs.h b/c_implementation/include/libakfs.h
index 455baa7..80fea58 100644
--- a/c_implementation/include/libakfs.h
+++ b/c_implementation/include/libakfs.h
@@ -131,7 +131,7 @@ char* ak_fs_return_hash_dir(const char*);
* param char* string to be checked
* returns boolean
*/
-bool ak_fs_verify_input_is_hash(const char*);
+bool ak_fs_verify_input_is_hash(const char*, size_t);
/**
* Unused
@@ -293,11 +293,13 @@ sha512sum* ak_fs_map_v3_get_map_hash(akfs_map_v3*);
/**
* Unused
*/
-char* ak_fs_map_v3_get_root_hash(akfs_map_v3*);
+sha512sum* ak_fs_map_v3_get_root_hash(akfs_map_v3*);
/**
- * Unused
+ * Gets original hash out of the akfs_map_v3
+ * param: akfs_map_v3
+ * return: pointer to sha512sum
*/
-char* ak_fs_map_v3_get_orig_hash(akfs_map_v3*);
+sha512sum* ak_fs_map_v3_get_orig_hash(akfs_map_v3*);
/**
* Unused
*/
diff --git a/c_implementation/src/ak_fs.c b/c_implementation/src/ak_fs.c
index 1d30744..c037fd8 100644
--- a/c_implementation/src/ak_fs.c
+++ b/c_implementation/src/ak_fs.c
@@ -12,7 +12,7 @@
char* ak_fs_return_hash_path(const char* str)
{
- if ( ak_fs_verify_input_is_hash(str) )
+ if ( ak_fs_verify_input_is_hash(str, strlen(str)) )
{
unsigned int i = 0;
char *result = malloc((128*2)+1);
@@ -43,7 +43,7 @@ char* ak_fs_return_hash_path(const char* str)
char* ak_fs_return_hash_dir(const char* str)
{
- if ( ak_fs_verify_input_is_hash(str) )
+ if ( ak_fs_verify_input_is_hash(str, strlen(str)) )
{
unsigned int i = 0;
char *result = malloc((128*2)+1);
@@ -69,20 +69,27 @@ char* ak_fs_return_hash_dir(const char* str)
}
}
-bool ak_fs_verify_input_is_hash(const char* str)
+bool ak_fs_verify_input_is_hash(const char* str, size_t len)
{
size_t i = 0;
+ printf("%s: this %lu is %lu: %s\n", __func__, i, len, str);
+ if (len != 128)
+ {
+ ak_log_debug(__func__, "Hash string length not right");
+ return false;
+ }
while ( str[i] != '\0' )
{
if (
i < 128 &&
!(
( str[i] >= 0x30 ) &&
- (( str[i] <= 0x39) || ( str[i] >= 0x61 )) &&
+ ( str[i] <= 0x39 || str[i] >= 0x61 ) &&
( str[i] <= 0x66 )
- )
- )
+ )
+ )
{
+ ak_log_debug(__func__, "Char out of range");
return false;
}
else {
@@ -91,8 +98,10 @@ bool ak_fs_verify_input_is_hash(const char* str)
}
if ( i > 128 )
{
+ ak_log_debug(__func__, "String exceeds limit");
return false;
}
+ ak_log_debug(__func__, "String okay");
return true;
}
@@ -107,7 +116,7 @@ int ak_fs_create_dir_for_hash(const char* str)
* 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) )
+ if ( ak_fs_verify_input_is_hash(str, strlen(str)) )
{
char* dir_path = ak_fs_return_hash_dir(str);
// We will need to separate the string so we can create the path one
@@ -196,7 +205,7 @@ int ak_fs_convert_map_v3_string_to_struct(const char *str, size_t ssize, akfs_ma
si++;
}
original_hash_str[si] = '\0';
- if( !ak_fs_verify_input_is_hash(original_hash_str) )
+ if( !ak_fs_verify_input_is_hash(original_hash_str, strlen(original_hash_str)) )
{
ak_log_error(__func__, "original_hash_str not a hash");
return 1;
@@ -213,7 +222,7 @@ int ak_fs_convert_map_v3_string_to_struct(const char *str, size_t ssize, akfs_ma
si++;
}
root_hash_str[si] = '\0';
- if( !ak_fs_verify_input_is_hash(root_hash_str) )
+ if( !ak_fs_verify_input_is_hash(root_hash_str, strlen(root_hash_str)) )
{
ak_log_error(__func__, "root_hash_str not a hash");
return 1;
@@ -237,40 +246,55 @@ int ak_fs_convert_map_v3_string_to_struct(const char *str, size_t ssize, akfs_ma
return 0;
}
-void ak_fs_get_available_maps_from_fs(sha512sum **ma, size_t length)
+void ak_fs_maps_v3_get_from_fs(akfs_map_v3 **ma, size_t length)
{
+ (void)length;
DIR *d;
d = opendir(ak_fs_maps_v3_get_dir());
- sha512sum *ptr = NULL;
+ akfs_map_v3 *ptr = NULL;
+ ptr = *ma;
+ ak_log_debug(__func__, "gonna if");
if (d)
{
- for ( ptr = *ma; ptr < *ma+length; ++ptr)
+ ak_log_debug(__func__, "in if");
+ const struct dirent *dir;
+ while((dir = readdir(d)) != NULL )
{
- 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);
+ ak_log_debug(__func__, "in while");
+ // if ( ptr >= *ma+length ) break;
+ printf("iMH: %s\n", dir->d_name);
+ if (!ak_fs_verify_input_is_hash(dir->d_name, 128)) continue;
+ ak_fs_sha512sum_string_to_struct(dir->d_name, &(ptr->mh));
+ ++ptr;
}
+ ak_log_debug(__func__, "out while");
}
+ ak_log_debug(__func__, "out if");
closedir(d);
}
int ak_fs_map_v3_resolve_maps(akfs_map_v3 **ms, size_t ms_len)
{
akfs_map_v3 *ptr = NULL;
+ // char s[129] = {0};
+ printf("%s: %lu\n", __func__, ms_len);
for ( ptr = *ms; ptr < *ms+ms_len; ++ptr)
{
+ printf("MH: %s\n", ak_fs_sha512sum_struct_read_as_string(&(ptr->mh)));
if ( ak_fs_sha512sum_is_null(&(ptr->mh)) )
{
+ ak_log_debug(__func__, "map hash is null");
continue;
}
if( ak_fs_map_v3_open_from_file(ptr) != 2)
{
+ ak_log_debug(__func__, "not 2");
++(ptr);
continue;
}
else
{
+ ak_log_debug(__func__, "2");
++(ptr);
// return 1;
}
@@ -318,9 +342,9 @@ int ak_fs_ls()
void* mps_start = &map_store[0];
(void)mps_start;
ak_fs_maps_v3_init(&maps_ptr, len);
+ // ak_fs_maps_v3_print(&maps_ptr, len);
+ ak_fs_maps_v3_get_from_fs(&maps_ptr, len);
ak_fs_maps_v3_print(&maps_ptr, len);
-
- // TODO Rename the following to "ak_fs_resolve_map_v3_array" or close to it
ak_fs_map_v3_resolve_maps(&maps_ptr, len);
// TODO Decide what we should be printing
diff --git a/c_implementation/src/ak_fs_map_v3.c b/c_implementation/src/ak_fs_map_v3.c
index 1b26d89..92bef5d 100644
--- a/c_implementation/src/ak_fs_map_v3.c
+++ b/c_implementation/src/ak_fs_map_v3.c
@@ -84,15 +84,27 @@ sha512sum* ak_fs_map_v3_get_map_hash(akfs_map_v3 *map)
return &(map->mh);
}
-char* ak_fs_map_v3_get_root_hash(akfs_map_v3 *map)
+sha512sum* ak_fs_map_v3_get_root_hash(akfs_map_v3 *map)
{
if (!ak_fs_sha512sum_is_null(&(map->rh)))
{
- return ak_fs_sha512sum_struct_read_as_string(&(map->rh));
+ return &(map->rh);
}
else
{
- return "";
+ return NULL;
+ }
+}
+
+sha512sum* ak_fs_map_v3_get_orig_hash(akfs_map_v3 *map)
+{
+ if (!ak_fs_sha512sum_is_null(&(map->oh)))
+ {
+ return &(map->oh);
+ }
+ else
+ {
+ return NULL;
}
}
@@ -103,7 +115,7 @@ char* ak_fs_map_v3_get_filename(akfs_map_v3 *map)
void ak_fs_map_v3_print_filename(akfs_map_v3 *map)
{
- printf(" .fn: %s\n", ak_fs_map_v3_get_filename(map));
+ printf("%s", ak_fs_map_v3_get_filename(map));
}
void ak_fs_map_v3_print(akfs_map_v3 *map)
@@ -126,13 +138,13 @@ void ak_fs_map_v3_print_as_json(akfs_map_v3 *map)
printf("\"map\":\"");
ak_fs_map_v3_print_map_hash(map);
printf("\",");
- printf("{\"original\":\"");
+ printf("\"original\":\"");
ak_fs_map_v3_print_original_hash(map);
printf("\",");
- printf("{\"root\":\"");
+ printf("\"root\":\"");
ak_fs_map_v3_print_root_hash(map);
printf("\",");
- printf("{\"filename\":\"");
+ printf("\"filename\":\"");
ak_fs_map_v3_print_filename(map);
printf("\"");
printf("}\n");
@@ -189,7 +201,7 @@ int ak_fs_open_map_v3_file(char* maphash, akfs_map_v3 * map)
ak_log_debug(__func__, "Zeropointer");
return 1;
}
- if ( !ak_fs_verify_input_is_hash(maphash) )
+ if ( !ak_fs_verify_input_is_hash(maphash, strlen(maphash)) )
{
ak_log_debug(__func__,"not a hash");
return 1;
diff --git a/c_implementation/src/ak_fs_maps_v3.c b/c_implementation/src/ak_fs_maps_v3.c
index 9b047b0..a89dd79 100644
--- a/c_implementation/src/ak_fs_maps_v3.c
+++ b/c_implementation/src/ak_fs_maps_v3.c
@@ -1,6 +1,8 @@
-#include <libakfs.h>
#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
#include <dirent.h>
+#include "libakfs.h"
const char* ak_fs_maps_v3_get_dir()
{
@@ -30,7 +32,11 @@ void ak_fs_maps_v3_print_filenames(akfs_map_v3** m, size_t s)
akfs_map_v3 *ptr = NULL;
for (ptr = *m; ptr < *m+s; ++ptr)
{
- if ( ptr != NULL ) ak_fs_map_v3_print_filename(ptr);
+ if ( ptr != NULL )
+ {
+ ak_fs_map_v3_print_filename(ptr);
+ printf("\n");
+ }
}
}
@@ -40,10 +46,18 @@ void ak_fs_maps_v3_print(akfs_map_v3 **map_store, size_t length)
for ( ptr = *map_store; ptr < *map_store + length; ++ptr)
{
ak_fs_map_v3_print(ptr);
- ak_fs_map_v3_print_as_json(ptr);
+ printf("\n");
}
}
+void ak_fs_maps_v3_print_as_json(akfs_map_v3 **map_store, size_t length)
+{
+ akfs_map_v3 *ptr = NULL;
+ for ( ptr = *map_store; ptr < *map_store + length; ++ptr)
+ {
+ ak_fs_map_v3_print_as_json(ptr);
+ }
+}
size_t ak_fs_maps_v3_found_in_fs()
{
@@ -55,7 +69,7 @@ size_t ak_fs_maps_v3_found_in_fs()
const struct dirent *dir;
while ((dir = readdir(d)) != NULL )
{
- if (ak_fs_verify_input_is_hash(dir->d_name)) counter++;
+ if (ak_fs_verify_input_is_hash(dir->d_name, strlen(dir->d_name))) counter++;
}
}
closedir(d);
diff --git a/c_implementation/src/ak_fs_sha512sum.c b/c_implementation/src/ak_fs_sha512sum.c
index 2e10544..6a2ebaa 100644
--- a/c_implementation/src/ak_fs_sha512sum.c
+++ b/c_implementation/src/ak_fs_sha512sum.c
@@ -2,6 +2,7 @@
#include <libaklog.h>
#include <stdlib.h>
#include <assert.h>
+#include <string.h>
void ak_fs_sha512sum_init(sha512sum *hash)
{
@@ -41,7 +42,7 @@ char* ak_fs_sha512sum_struct_read_as_string(const sha512sum *ptr)
{
char *str = malloc(129*sizeof(char));
ak_fs_sha512sum_struct_to_string(ptr, str);
- ak_log_debug(__func__, str);
+ // ak_log_debug(__func__, str);
return str;
}
@@ -54,7 +55,7 @@ bool ak_fs_sha512sum_is_null(const sha512sum *h)
int ak_fs_sha512sum_string_to_struct(const char* str, sha512sum* hash)
{
- if ( ak_fs_verify_input_is_hash(str) )
+ if ( ak_fs_verify_input_is_hash(str, strlen(str)) )
{
for (size_t l = 0; l < 8; ++l)
{
diff --git a/c_implementation/tests/test_akfs.c b/c_implementation/tests/test_akfs.c
index 237f490..9506ec9 100644
--- a/c_implementation/tests/test_akfs.c
+++ b/c_implementation/tests/test_akfs.c
@@ -200,11 +200,25 @@ static void test_hash_check()
static void test_map_opener()
{
akfs_map_v3 map;
+ ak_fs_map_v3_init(&map);
char *map_string = "28bde5fa7aacd8da0ec84b61cf3a69141686906c00f8cff904c9a0b12f5a4cf061da254feb188c32b711b2e1d6a3853d5ac3fb0bcd3564899bae55dd30470392";
- ak_fs_open_map_v3_file(map_string, &map);
+ ak_fs_sha512sum_string_to_struct(map_string, &(map.mh));
+ if ( ak_fs_map_v3_open_from_file(&map) != 0 )
+ {
+ ak_log_debug(__func__, "FAILED");
+ return;
+ }
const char *orig_string = "fa19bdc471bedc42abf3ff52069214bc7339a7eafc03f8551e8af892a0e3ce175cff0dde6f815da031cd0566fded455c937f7cae27181f7a90ab92e6131ba2be";
const char *root_string = "438aebe24c89d36f84a68ea29327b27af1abc05f8f85e69af650159c4928834bd6fd2b3df690de74d42f861a8dbe30cebc6cba6afe07fabb1066d1380cd3adea";
const char *filename = "mixtapes-v0.0.0.tar.gz";
+ // printf("%s\n",ak_fs_sha512sum_struct_read_as_string((const sha512sum*)&(map.mh)));
+ // printf("%s\n",ak_fs_sha512sum_struct_read_as_string((const sha512sum*)&(map.oh)));
+ // printf("%s\n",ak_fs_sha512sum_struct_read_as_string((const sha512sum*)&(map.rh)));
+ // printf("%s\n",map.filename);
+
+ ak_fs_map_v3_print(&map);
+ ak_fs_map_v3_print_as_json(&map);
+
if (
(strcmp(map_string, ak_fs_sha512sum_struct_read_as_string(&(map.mh)))!=0) ||
(strcmp(orig_string, ak_fs_sha512sum_struct_read_as_string(&(map.oh)))!=0) ||
@@ -212,18 +226,35 @@ static void test_map_opener()
(strcmp(filename, map.filename)!=0))
{
ak_log_debug(__func__, "FAILED");
+ return;
}
else
{
ak_log_debug(__func__, "PASSED");
+ return;
}
}
static void test_ak_fs_ls()
{
ak_log_test(__func__, ".....=====.....");
+ // size_t len = ak_fs_maps_v3_found_in_fs();
+ // akfs_map_v3 map_store[len];
+ // akfs_map_v3* mps_ptr = &map_store[0];
+ // void* mps_start = &map_store[0];
+ // (void)mps_start;
+ // ak_fs_map_v3_init_store(&mps_ptr, len);
+
+ // // TODO Rename the following to "ak_fs_resolve_map_v3_array" or close to it
+ // ak_fs_map_v3_resolve_maps(&mps_ptr, len);
+
+ // // TODO Decide what we should be printing
+ // // Possibly, something like "maphex(6)_filename" so we can put multiple
+ // // files with the same name into the list
+ // ak_fs_maps_v3_print(&mps_ptr, len);
+ // ak_fs_print_filenames_from_map_store(&mps_ptr, len);
ak_fs_ls();
- ak_log_test(__func__, ".....=END=.....");
+ // ak_log_test(__func__, ".....=END=.....");
}