From 3a93537cbd053ba616fbe3c175804c117255c93f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B8rn=20Guldberg?= Date: Sun, 9 Jun 2019 14:57:29 +0000 Subject: [PATCH] Untested delete file function is added --- lsfs_disk_controller.h | 17 +++++++---------- lsfs_fuse | Bin 40048 -> 40056 bytes lsfs_fuse.c | 26 +++++++++++--------------- lsfs_fuse.o | Bin 38888 -> 39112 bytes 4 files changed, 18 insertions(+), 25 deletions(-) diff --git a/lsfs_disk_controller.h b/lsfs_disk_controller.h index d5b844c..c7ebd6a 100644 --- a/lsfs_disk_controller.h +++ b/lsfs_disk_controller.h @@ -34,7 +34,7 @@ int create_file_system(char* disk_name, char* hdd_or_partition, uint64_t filesys int lsfs_disk_create_entry(const char* path, Table_Entry_Kind entry_kind); Directory_Table* lsfs_find_directory(const char* path, bool drop_filename); int lsfs_disk_getattr(lsfs_file* find_file, const char *path); -int lsfs_disk_delete_file(lsfs_file_id file_id); +int lsfs_disk_delete_file(lsfs_file *file); int get_free_sectors_table(); int get_free_sectors(int num_sectors_needed, lsfs_sector_offset* output_array); int lsfs_disk_read_data_from_file(lsfs_file* file, int buffer_size, void* buffer_for_data); @@ -368,15 +368,12 @@ int lsfs_disk_rename_file(lsfs_file* file, const char* new_filename) { return 0; } -int lsfs_disk_delete_file(lsfs_file_id file_id) { - mif* mif_record = calloc(1, SECTOR_SIZE); - read_data_from_disk(file_id, 1, mif_record); - - - // TODO Delete/free all data sectors. - // Delete/free the mif record sector. - - free(mif_record); +int lsfs_disk_delete_file(lsfs_file *file) { + Table_Entry *zero_buffer = calloc(1, (DEFAULT_ENTRY_SIZE * SECTOR_SIZE)); + //read_data_from_disk(file_id, 1, mif_record); + write_data_to_disk(file->table_entry_sector_index, DEFAULT_TABLE_SIZE, zero_buffer); + + free(zero_buffer); return 1; } diff --git a/lsfs_fuse b/lsfs_fuse index e6a53dd18001e6d39c478d08ff2eb512c9ac7ff8..db7d14cd2b15e9ce499a6de8f4c508d86b74f315 100755 GIT binary patch delta 7582 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 diff --git a/lsfs_fuse.c b/lsfs_fuse.c index c87672d..908c4a5 100644 --- a/lsfs_fuse.c +++ b/lsfs_fuse.c @@ -59,7 +59,11 @@ int lsfs_rmdir(const char *path) { int lsfs_unlink(const char *path) { - // remove / delete a file + lsfs_file *found_file = calloc(1, sizeof(lsfs_file)); + + lsfs_disk_getattr(found_file, path); + lsfs_disk_delete_file(found_file); + free(found_file); return 0; } @@ -126,21 +130,13 @@ int lsfs_getattr( const char *path, struct stat *stbuf ) { return res; } -int lsfs_write(const char *path, const char *content, size_t content_length, off_t offset_to_next_entry, struct fuse_file_info *file_info) { - //(void) offset_to_next_entry; - //(void) file_info; - int res; - //printf("WRITE: offset id: %d\n", offset_to_next_entry); - // printf("read: (path=%s)\n", path); - - //time_t current_time; - //time ( ¤t_time ); - - res = lsfs_disk_write_data_to_file(((lsfs_file*) file_info->fh), content_length, (void*) content, offset_to_next_entry); +int lsfs_write(const char *path, const char *content, size_t content_length, off_t offset_to_next_entry, struct fuse_file_info *file_info) +{ + int res = lsfs_disk_write_data_to_file( + ((lsfs_file*) file_info->fh), + content_length, + (void*) content, offset_to_next_entry); - //((lsfs_file*) file_info->fh)->size += res; - //((lsfs_file*) file_info->fh)->access_time = current_time; - //((lsfs_file*) file_info->fh)->modification_time = current_time; return res; } diff --git a/lsfs_fuse.o b/lsfs_fuse.o index 66369a8e6ff571141d4e8dfc1f66eb2fd512e06b..18cf29a2db5fb233c4d5dc10d267d7f1c4a847db 100644 GIT binary patch delta 13878 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 delta 13824 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