From 8f72eabf1f71ca0cc99dfae9da59fde134b3b7e6 Mon Sep 17 00:00:00 2001 From: Pradana Aumars Date: Mon, 31 May 2021 22:07:06 +0200 Subject: [PATCH] Fix test check_file_t.file_init * Add filepath_t enum key * file_init writes path according to filepath_t * file_init does NOT correctly write path FILEPATH_ABSOLUTE * file_init parameters changed to include filepath_t and no longer includes "ENV" string * file_close only now frees hash_str when non null ptr * calibrate verify function updated to use correct file_init parameters --- src/calibrate.c | 4 ++-- src/file_t.c | 40 +++++++++++++--------------------------- src/file_t.h | 7 ++++++- tests/check_file_t.c | 12 ++++++------ 4 files changed, 27 insertions(+), 36 deletions(-) diff --git a/src/calibrate.c b/src/calibrate.c index e2bc700..df34a07 100644 --- a/src/calibrate.c +++ b/src/calibrate.c @@ -192,7 +192,7 @@ verify(exception_t *e) file_t *f; xmlNode *x_name = b_node->children; xmlNode *x_sum = x_name->next; - f = file_init((char*) x_name->content, e, "HOME"); + f = file_init((char*) x_name->content, FILEPATH_ABSOLUTE, e); if (strcmp(f->hash_str, (char*) x_sum->content) != 0) { e->type = MD5SUM_VERIFY_FAIL; @@ -253,7 +253,7 @@ edit(exception_t *e) strcat(fullpath, x_group_type); strcat(fullpath, "/"); strcat(fullpath, x_path); - f = file_init(&fullpath, e, "HOME"); + f = file_init(&fullpath, FILEPATH_ABSOLUTE, e); replace_text(f, x_before, x_after, x_type, e); file_close(f); } diff --git a/src/file_t.c b/src/file_t.c index 50653fe..25266d9 100644 --- a/src/file_t.c +++ b/src/file_t.c @@ -7,7 +7,6 @@ #include #include #include -#include #include "file_t.h" @@ -28,38 +27,27 @@ get_size_by_fd(int fd) } file_t* -file_init(const char *filename, exception_t *e, const char *env) +file_init(const char *filename, filepath_t FILEPATH, exception_t *e) { - GString *abspath = g_string_new (NULL); - if (env != NULL) - { - char *envpath; - size_t sizehome, sizepath; - envpath = getenv (env); - sizehome = strlen(envpath); - sizepath = strlen(filename); - abspath = malloc(sizehome + sizepath + 2); - strcpy (abspath, envpath); - strcat (abspath, "/"); - strcat (abspath, filename); - abspath[sizehome + sizepath + 2] = '\0'; - } - else - { - abspath = filename; - } - + char *path; + switch (FILEPATH) { + case FILEPATH_ABSOLUTE: { + path = (char*) filename; break; + } + case FILEPATH_RELATIVE: path = (char*) filename; break; + } + /* Checks if the file path can be opened. */ - if (open(abspath, O_RDONLY) < 0) + if (open(path, O_RDONLY) < 0) { e->type = NO_FILE; - e->msg = abspath; + e->msg = path; return NULL; } file_t *f; f = malloc(sizeof(file_t*)); - f->name = (char*) abspath; + f->name = (char*) path; f->hash = NULL; f->hash_str = NULL; return f; @@ -68,9 +56,7 @@ file_init(const char *filename, exception_t *e, const char *env) void file_close(file_t *f) { - free(f->name); - free(f->hash); - free(f->hash_str); + if (f->hash_str != NULL) free(f->hash_str); free(f); } diff --git a/src/file_t.h b/src/file_t.h index 959108e..709ffae 100644 --- a/src/file_t.h +++ b/src/file_t.h @@ -3,6 +3,11 @@ #include "exception_t.h" +typedef enum filepath_t { + FILEPATH_ABSOLUTE, + FILEPATH_RELATIVE +} filepath_t; + /** * Wrapper to file */ @@ -20,7 +25,7 @@ typedef struct file_t { * @return Pointer to file_t */ file_t* -file_init(const char *filename, exception_t *e, const char *env); +file_init(const char *filename, filepath_t FILEPATH, exception_t *e); /** * Destroy file_t diff --git a/tests/check_file_t.c b/tests/check_file_t.c index 30f858c..b3592c0 100644 --- a/tests/check_file_t.c +++ b/tests/check_file_t.c @@ -6,9 +6,9 @@ START_TEST(test_file_init) { file_t *f; exception_t *e = NULL; - f = file_init ("samples/1.txt", e, NULL); - ck_assert_ptr_ne (f, NULL); - ck_assert_ptr_eq (e, NULL); + f = file_init ("samples/1.txt", FILEPATH_RELATIVE, e); + ck_assert_ptr_nonnull (f); + ck_assert_ptr_null (e); file_close (f); } END_TEST @@ -17,11 +17,11 @@ START_TEST(test_file_md5) { file_t *f; exception_t *e = NULL; - f = file_init("samples/1.txt", e, NULL); + f = file_init("samples/1.txt", FILEPATH_RELATIVE, e); file_md5_gen (f, e); - ck_assert_ptr_eq (e, NULL); + ck_assert_ptr_null (e); file_md5_str (f, e); - ck_assert_ptr_eq (e, NULL); + ck_assert_ptr_null (e); ck_assert_str_eq (f->hash_str, "492ff087b26577237c576e7ad409064e"); file_close (f); }