From 1e768ed1d33e21faabb52b3b80d49a0027ac745b Mon Sep 17 00:00:00 2001 From: Ingo Weinhold Date: Tue, 3 Apr 2007 04:29:24 +0000 Subject: [PATCH] get_vnode_name(): * read_dir() is supposed to return B_OK and and a count of 0 when reaching the end of the directory. In case the node in question could not be found, we were looping infinitely. * free_dir_cookie() was not invoked. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@20519 a95241bf-73f2-0310-859d-f6bbb57e9c96 --- src/system/kernel/fs/vfs.cpp | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/src/system/kernel/fs/vfs.cpp b/src/system/kernel/fs/vfs.cpp index 91daec4bdc..35624a79fe 100644 --- a/src/system/kernel/fs/vfs.cpp +++ b/src/system/kernel/fs/vfs.cpp @@ -1852,13 +1852,21 @@ get_vnode_name(struct vnode *vnode, struct vnode *parent, struct dirent *buffer, status = dir_read(parent, cookie, buffer, bufferSize, &num); if (status < B_OK) break; + if (num == 0) { + status = B_ENTRY_NOT_FOUND; + break; + } if (vnode->id == buffer->d_ino) { // found correct entry! break; } } - FS_CALL(vnode, close_dir)(vnode->mount->cookie, vnode->private_node, cookie); + + FS_CALL(vnode, close_dir)(vnode->mount->cookie, vnode->private_node, + cookie); + FS_CALL(vnode, free_dir_cookie)(vnode->mount->cookie, + vnode->private_node, cookie); } return status; }