From 6d9cd139c42a48f5ddf8f8e284f56873de73fd31 Mon Sep 17 00:00:00 2001 From: Alex Auvolat Date: Tue, 10 Mar 2015 20:12:10 +0100 Subject: Things are happenning ; lots of bugs. --- src/kernel/fs/iso9660.c | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) (limited to 'src/kernel/fs/iso9660.c') diff --git a/src/kernel/fs/iso9660.c b/src/kernel/fs/iso9660.c index 4c1bdd2..4de6f2b 100644 --- a/src/kernel/fs/iso9660.c +++ b/src/kernel/fs/iso9660.c @@ -186,8 +186,6 @@ bool iso9660_dir_walk(fs_node_t *n, const char* search_for, struct fs_node *node size_t filename_len = strlen(search_for); - dbg_printf("Looking up %s...\n", search_for); - size_t dr_len = 0; for (size_t pos = 0; pos < node->dr.size.lsb; pos += dr_len) { union { @@ -206,11 +204,13 @@ bool iso9660_dir_walk(fs_node_t *n, const char* search_for, struct fs_node *node if (node->fs->use_lowercase) convert_dr_to_lowercase(dr); char* name = dr->name; - size_t len = dr->name_len - 2; + size_t len = dr->name_len; + if (!(dr->flags & ISO9660_DR_FLAG_DIR)) len -= 2; + + if (!(dr->flags & ISO9660_DR_FLAG_DIR) && name[len] != ';') continue; + if (name[len-1] == '.') len--; // file with no extension - if (name[len] != ';') continue; if (len != filename_len) continue; - if (strncmp(name, search_for, len) == 0) { // Found it ! iso9660_node_t *n = (iso9660_node_t*)malloc(sizeof(iso9660_node_t)); @@ -309,9 +309,11 @@ bool iso9660_dir_readdir(fs_handle_t *h, size_t ent_no, dirent_t *d) { if (node->fs->use_lowercase) convert_dr_to_lowercase(dr); char* name = dr->name; - size_t len = dr->name_len - 2; + size_t len = dr->name_len; + if (!(dr->flags & ISO9660_DR_FLAG_DIR)) len -= 2; - if (name[len] != ';') continue; + if (!(dr->flags & ISO9660_DR_FLAG_DIR) && name[len] != ';') continue; + if (name[len-1] == '.') len--; // file with no extension if (idx == ent_no) { // Found the node we are interested in -- cgit v1.2.3