diff --git a/c-programming/experiments/reverse-ramdisk.c b/c-programming/experiments/reverse-ramdisk.c index be05f55..6a28d55 100644 --- a/c-programming/experiments/reverse-ramdisk.c +++ b/c-programming/experiments/reverse-ramdisk.c @@ -14,8 +14,6 @@ * and/or with set macro DEBUG (using -DDEBUG) to enable debug mode * * TODO:XXX: `tf_free`: Do not shift the array, only empty entry - * TODO:XXX: Implement function `tf_finish` to free the array of TempFiles - * structs * TODO:XXX: `tf_free`, `tf_write`, `tf_read`: Do not use `ID` as `index`, but * look for it in TempFile structs * TODO:XXX: Set freed memory pointers to NULL @@ -82,6 +80,7 @@ int tf_alloc(size_t n, size_t type_size); int tf_free(int ID); int tf_write(int ID, size_t offset, void* src, size_t data_size); int tf_read(int ID, size_t offset, void* dest, size_t data_size); +void tf_finish(void); int tf_alloc(size_t n, size_t type_size) { DBG_PRINT("tf_alloc(%zu, %zu)\n", n, type_size); @@ -375,6 +374,17 @@ int tf_read(int ID, size_t offset, void* dest, size_t data_size) { return 0; } +void tf_finish(void) { + DBG_PRINT("tf_finish()\n"); + + for (size_t i = 0; i < num_temp_files; i++) + if (temp_files[i].file_path != NULL) + tf_free(temp_files[i].ID); + free(temp_files); + temp_files = NULL; + num_temp_files = 0; +} + #ifdef TEST int main(void) { DBG_PRINT("started\n"); @@ -440,6 +450,8 @@ int main(void) { tf_free(ID_2); DBG_PRINT("freed both files\n"); + tf_finish(); + return 0; } #endif