From fbaa0b510d01a631435d0a5dd4a9a7135eef06d8 Mon Sep 17 00:00:00 2001 From: Michael Lotz Date: Sun, 30 Aug 2009 00:02:44 +0000 Subject: [PATCH] Take into account that we may look up "." or ".." and we must obviously not set the parent directory in those cases. Also, when updating the parent directory we need to update the ".." dirent if we already populated it with a different value before. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@32823 a95241bf-73f2-0310-859d-f6bbb57e9c96 --- .../file_systems/layers/write_overlay/write_overlay.cpp | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/add-ons/kernel/file_systems/layers/write_overlay/write_overlay.cpp b/src/add-ons/kernel/file_systems/layers/write_overlay/write_overlay.cpp index d7139a0427..508671d23d 100644 --- a/src/add-ons/kernel/file_systems/layers/write_overlay/write_overlay.cpp +++ b/src/add-ons/kernel/file_systems/layers/write_overlay/write_overlay.cpp @@ -286,6 +286,8 @@ void OverlayInode::SetParentDir(OverlayInode *parentDir) { fParentDir = parentDir; + if (fHasDirents && fDirentCount >= 2) + fDirents[1]->inode_number = parentDir->InodeNumber(); } @@ -318,7 +320,7 @@ OverlayInode::Lookup(const char *name, ino_t *inodeNumber) OverlayInode *node = NULL; status_t result = get_vnode(Volume(), *inodeNumber, (void **)&node); - if (result == B_OK && node != NULL) + if (result == B_OK && node != NULL && i >= 2) node->SetParentDir(this); return result; }