diff --git a/kernel/filesystem/exfat.cpp b/kernel/filesystem/exfat.cpp index aebb49d3..baaeaf78 100644 --- a/kernel/filesystem/exfat.cpp +++ b/kernel/filesystem/exfat.cpp @@ -7,13 +7,6 @@ #include "std/string.h" #include "std/memfunctions.h" -const char* ExFATFS::advance_path(const char *path){ - while (*path != '/' && *path != '\0') - path++; - path++; - return path; -} - void* ExFATFS::read_cluster(uint32_t cluster_start, uint32_t cluster_size, uint32_t cluster_count, uint32_t root_index){ uint32_t count = cluster_count * cluster_size; @@ -166,12 +159,12 @@ void* ExFATFS::read_entry_handler(ExFATFS *instance, file_entry *entry, fileinfo uint32_t count = (info->filesize + bpc - 1) / bpc; return entry->flags.directory - ? instance->walk_directory(count, filecluster, instance->advance_path(seek), read_entry_handler) + ? instance->walk_directory(count, filecluster, seek_to(path, '/'), read_entry_handler) : instance->read_full_file(instance->mbs->cluster_heap_offset, 1 << instance->mbs->sectors_per_cluster_shift, count, info->filesize, filecluster); } void* ExFATFS::read_file(const char *path, size_t size){ - path = advance_path(path); + path = seek_to(path, '/'); return walk_directory(1, mbs->first_cluster_of_root_directory, path, read_entry_handler); } @@ -183,7 +176,7 @@ void* ExFATFS::list_entries_handler(ExFATFS *instance, file_entry *entry, filein if (strstart(seek, filename, false) != 0) return 0; - bool is_last = *instance->advance_path(seek) == '\0'; + bool is_last = *seek_to(seek, '/') == '\0'; uint32_t filecluster = info->first_cluster; uint32_t bps = 1 << instance->mbs->bytes_per_sector_shift; @@ -196,12 +189,12 @@ void* ExFATFS::list_entries_handler(ExFATFS *instance, file_entry *entry, filein if (is_last) return instance->list_directory(count, filecluster); if (entry->flags.directory) - return instance->walk_directory(count, filecluster, instance->advance_path(seek), list_entries_handler); + return instance->walk_directory(count, filecluster, seek_to(seek, '/'), list_entries_handler); return 0; } string_list* ExFATFS::list_contents(const char *path){ - path = advance_path(path); + path = seek_to(path, '/'); return (string_list*)walk_directory(1, mbs->first_cluster_of_root_directory, path, list_entries_handler); } diff --git a/kernel/filesystem/exfat.hpp b/kernel/filesystem/exfat.hpp index b1290789..d2172923 100644 --- a/kernel/filesystem/exfat.hpp +++ b/kernel/filesystem/exfat.hpp @@ -92,7 +92,6 @@ class ExFATFS: public FSDriver { void* list_directory(uint32_t cluster_count, uint32_t root_index); void* walk_directory(uint32_t cluster_count, uint32_t root_index, const char *seek, ef_entry_handler handler); void* read_cluster(uint32_t cluster_start, uint32_t cluster_size, uint32_t cluster_count, uint32_t root_index); - const char* advance_path(const char *path); exfat_mbs* mbs; void *fs_page; diff --git a/kernel/filesystem/fat32.cpp b/kernel/filesystem/fat32.cpp index 26e3f7cd..4dd56fd5 100644 --- a/kernel/filesystem/fat32.cpp +++ b/kernel/filesystem/fat32.cpp @@ -14,14 +14,6 @@ }\ }) -//TODO: use seek_to -const char* FAT32FS::advance_path(const char *path){ - while (*path != '/' && *path != '\0') - path++; - path++; - return path; -} - bool FAT32FS::init(uint32_t partition_sector){ fs_page = palloc(0x1000, true, true, false); @@ -238,7 +230,7 @@ uint32_t FAT32FS::count_FAT(uint32_t first){ sizedptr FAT32FS::read_entry_handler(FAT32FS *instance, f32file_entry *entry, char *filename, const char *seek) { if (entry->flags.volume_id) return {0,0}; - bool is_last = *instance->advance_path(seek) == '\0'; + bool is_last = *seek_to(seek, '/') == '\0'; if (!is_last && strstart(seek, filename, true) == 0) return {0, 0}; if (is_last && strcmp(seek, filename, true) != 0) return {0, 0}; @@ -249,13 +241,13 @@ sizedptr FAT32FS::read_entry_handler(FAT32FS *instance, f32file_entry *entry, ch uint32_t count = entry->filesize > 0 ? ((entry->filesize + bpc - 1) / bpc) : instance->count_FAT(filecluster); return entry->flags.directory - ? instance->walk_directory(count, filecluster, instance->advance_path(seek), read_entry_handler) + ? instance->walk_directory(count, filecluster, seek_to(seek, '/'), read_entry_handler) : instance->read_full_file(instance->data_start_sector, instance->mbs->sectors_per_cluster, count, entry->filesize, filecluster); } FS_RESULT FAT32FS::open_file(const char* path, file* descriptor){ if (!mbs) return FS_RESULT_DRIVER_ERROR; - path = advance_path(path); + path = seek_to(path, '/'); uint32_t count = count_FAT(mbs->first_cluster_of_root_directory); sizedptr buf_ptr = walk_directory(count, mbs->first_cluster_of_root_directory, path, read_entry_handler); void *buf = (void*)buf_ptr.ptr; @@ -279,20 +271,20 @@ sizedptr FAT32FS::list_entries_handler(FAT32FS *instance, f32file_entry *entry, if (entry->flags.volume_id) return { 0, 0 }; if (strstart(seek, filename, true) == 0) return { 0, 0 }; - bool is_last = *instance->advance_path(seek) == '\0'; + bool is_last = *seek_to(seek, '/') == '\0'; uint32_t filecluster = (entry->hi_first_cluster << 16) | entry->lo_first_cluster; uint32_t count = instance->count_FAT(filecluster); if (is_last) return instance->list_directory(count, filecluster); - if (entry->flags.directory) return instance->walk_directory(count, filecluster, instance->advance_path(seek), list_entries_handler); + if (entry->flags.directory) return instance->walk_directory(count, filecluster, seek_to(seek, '/'), list_entries_handler); return { 0, 0 }; } sizedptr FAT32FS::list_contents(const char *path){ if (!mbs) return { 0, 0 }; - path = advance_path(path); + path = seek_to(path, '/'); uint32_t count = count_FAT(mbs->first_cluster_of_root_directory); return walk_directory(count, mbs->first_cluster_of_root_directory, path, list_entries_handler); diff --git a/kernel/filesystem/fat32.hpp b/kernel/filesystem/fat32.hpp index 31f20252..33d5d58d 100644 --- a/kernel/filesystem/fat32.hpp +++ b/kernel/filesystem/fat32.hpp @@ -93,7 +93,6 @@ class FAT32FS: public FSDriver { sizedptr list_directory(uint32_t cluster_count, uint32_t root_index); sizedptr walk_directory(uint32_t cluster_count, uint32_t root_index, const char *seek, f32_entry_handler handler); sizedptr read_cluster(uint32_t cluster_start, uint32_t cluster_size, uint32_t cluster_count, uint32_t root_index); - const char* advance_path(const char *path); fat32_mbs* mbs = 0x0; void *fs_page = 0x0;