Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
17 changes: 5 additions & 12 deletions kernel/filesystem/exfat.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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;

Expand Down Expand Up @@ -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);
}
Expand All @@ -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;
Expand All @@ -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);
}
Expand Down
1 change: 0 additions & 1 deletion kernel/filesystem/exfat.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down
20 changes: 6 additions & 14 deletions kernel/filesystem/fat32.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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);

Expand Down Expand Up @@ -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};

Expand All @@ -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;
Expand All @@ -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);
Expand Down
1 change: 0 additions & 1 deletion kernel/filesystem/fat32.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down