summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--tmpfs/dir.c10
1 files changed, 9 insertions, 1 deletions
diff --git a/tmpfs/dir.c b/tmpfs/dir.c
index 4a0a60b5..c0ae9785 100644
--- a/tmpfs/dir.c
+++ b/tmpfs/dir.c
@@ -150,6 +150,7 @@ diskfs_get_directs (struct node *dp, int entry, int n,
struct dirstat
{
struct tmpfs_dirent **prevp;
+ int dotdot;
};
const size_t diskfs_dirstat_size = sizeof (struct dirstat);
@@ -178,6 +179,9 @@ diskfs_lookup_hard (struct node *dp,
if (type == REMOVE || type == RENAME)
assert (np);
+ if (ds)
+ ds->dotdot = type & SPEC_DOTDOT;
+
if (namelen == 1 && name[0] == '.')
{
if (np != 0)
@@ -279,7 +283,11 @@ error_t
diskfs_dirrewrite_hard (struct node *dp, struct node *np,
struct dirstat *ds)
{
- (*ds->prevp)->dn = np->dn;
+ if (ds->dotdot)
+ dp->dn->u.dir.dotdot = np->dn;
+ else
+ (*ds->prevp)->dn = np->dn;
+
return 0;
}