diff --git a/tasks/fs0/src/lookup.c b/tasks/fs0/src/lookup.c index 382327b..a5e1efb 100644 --- a/tasks/fs0/src/lookup.c +++ b/tasks/fs0/src/lookup.c @@ -76,7 +76,7 @@ struct vnode *generic_vnode_lookup(struct vnode *thisnode, char *path) /* Are there any more path components? */ if (path) { /* Read directory contents */ - if ((err = (int)d->vnode->ops.readdir(d->vnode))) + if ((err = d->vnode->ops.readdir(d->vnode)) < 0) return PTR_ERR(err); /* Search all children one level below. */ diff --git a/tasks/fs0/src/memfs/vnode.c b/tasks/fs0/src/memfs/vnode.c index 466ab18..cf89201 100644 --- a/tasks/fs0/src/memfs/vnode.c +++ b/tasks/fs0/src/memfs/vnode.c @@ -229,7 +229,6 @@ int memfs_vnode_readdir(struct vnode *v) /* This is as big as a page */ v->dirbuf.buffer = vfs_alloc_dirpage(); v->dirbuf.npages = 1; - memfsd = (struct memfs_dentry *) v->dirbuf.buffer; /* * Fail if vnode size is bigger than a page. Since this allocation @@ -241,6 +240,8 @@ int memfs_vnode_readdir(struct vnode *v) if ((err = v->fops.read(v, 0, 1, v->dirbuf.buffer))) return err; + memfsd = (struct memfs_dentry *)v->dirbuf.buffer; + /* Read fs-specific directory entry into vnode and dentry caches. */ for (int i = 0; i < (v->size / sizeof(struct memfs_dentry)); i++) { struct dentry *newd;