Mercurial > yaffs-ecoscentric
changeset 290:3a9aa9edbf78
Get directory mtime to update correctly
| author | charles |
|---|---|
| date | Mon, 25 May 2009 03:27:36 +0100 |
| parents | 3e4a1f10896a |
| children | bd8e16ecbc93 |
| files | yaffs_guts.c |
| diffstat | 1 files changed, 29 insertions(+), 2 deletions(-) [+] |
line wrap: on
line diff
--- a/yaffs_guts.c +++ b/yaffs_guts.c @@ -49,6 +49,7 @@ static void yaffs_HandleUpdateChunk(yaff const yaffs_ExtendedTags *tags); /* Other local prototypes */ +static void yaffs_UpdateParent(yaffs_Object *obj); static int yaffs_UnlinkObject(yaffs_Object *obj); static int yaffs_ObjectHasCachedWriteData(yaffs_Object *obj); @@ -2345,6 +2346,7 @@ static yaffs_Object *yaffs_MknodObject(y in = NULL; } + yaffs_UpdateParent(parent); } return in; @@ -2499,6 +2501,9 @@ int yaffs_RenameObject(yaffs_Object *old existingTarget->objectId); yaffs_UnlinkObject(existingTarget); } + yaffs_UpdateParent(oldDir); + if(newDir != oldDir) + yaffs_UpdateParent(newDir); return yaffs_ChangeObjectName(obj, newDir, newName, 1, 0); } @@ -5230,6 +5235,9 @@ static int yaffs_UnlinkWorker(yaffs_Obje immediateDeletion = 1; #endif + if(obj) + yaffs_UpdateParent(obj->parent); + if (obj->variantType == YAFFS_OBJECT_TYPE_HARDLINK) { return yaffs_DeleteHardLink(obj); } else if (!ylist_empty(&obj->hardLinks)) { @@ -6666,6 +6674,26 @@ static void yaffs_VerifyDirectory(yaffs_ } } +/* + *yaffs_UpdateParent() handles fixing a directories mtime when a new + * link (ie. name) is created or deleted in the directory. + * + * ie. + * create dir/a : update dir's mtime + * rm dir/a: update dir's mtime + * modify dir/a: don't update dir's mtimme. + */ + +static void yaffs_UpdateParent(yaffs_Object *obj) +{ + if(!obj) + return; + + obj->dirty = 1; + obj->yst_mtime = Y_CURRENT_TIME; + + yaffs_UpdateObjectHeader(obj,NULL,0,0,0); +} static void yaffs_RemoveObjectFromDirectory(yaffs_Object *obj) { @@ -6683,11 +6711,10 @@ static void yaffs_RemoveObjectFromDirect ylist_del_init(&obj->siblings); obj->parent = NULL; - + yaffs_VerifyDirectory(parent); } - static void yaffs_AddObjectToDirectory(yaffs_Object *directory, yaffs_Object *obj) {
