diff options
author | Alex Auvolat <alex@adnab.me> | 2015-03-10 20:12:10 +0100 |
---|---|---|
committer | Alex Auvolat <alex@adnab.me> | 2015-03-10 20:12:10 +0100 |
commit | 6d9cd139c42a48f5ddf8f8e284f56873de73fd31 (patch) | |
tree | 7b4ca008eb6375c0d5ba9eb1456674ee996fb5d6 /src/kernel/fs/iso9660.c | |
parent | 4ab8b6206b1ba36cbf4db4a416e04304bbd7ebc0 (diff) | |
download | kogata-6d9cd139c42a48f5ddf8f8e284f56873de73fd31.tar.gz kogata-6d9cd139c42a48f5ddf8f8e284f56873de73fd31.zip |
Things are happenning ; lots of bugs.
Diffstat (limited to 'src/kernel/fs/iso9660.c')
-rw-r--r-- | src/kernel/fs/iso9660.c | 16 |
1 files changed, 9 insertions, 7 deletions
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 |