Mercurial > yaffs-ecoscentric
diff yaffs_guts.c @ 85:eeca349affa6
Add support for faster yaffs direct look-ups. Fix rename over problem
| author | charles |
|---|---|
| date | Tue, 20 Sep 2005 06:08:50 +0100 |
| parents | a06876fb1295 |
| children | 2b4deace2c2f |
line wrap: on
line diff
--- a/yaffs_guts.c +++ b/yaffs_guts.c @@ -57,6 +57,8 @@ static void yaffs_HandleUpdateChunk(yaff const yaffs_ExtendedTags * tags); /* Other local prototypes */ +static int yaffs_UnlinkObject( yaffs_Object *obj); + static int yaffs_WriteNewChunkWithTagsToNAND(yaffs_Device * dev, const __u8 * buffer, yaffs_ExtendedTags * tags, @@ -1729,10 +1731,10 @@ int yaffs_RenameObject(yaffs_Object * ol */ yaffs_ChangeObjectName(obj, newDir, newName, force, existingTarget->objectId); - yaffs_Unlink(newDir, newName); + yaffs_UnlinkObject(existingTarget); } - return yaffs_ChangeObjectName(obj, newDir, newName, force, 0); + return yaffs_ChangeObjectName(obj, newDir, newName, 1, 0); } return YAFFS_FAIL; } @@ -3771,11 +3773,9 @@ static int yaffs_UnlinkWorker(yaffs_Obje } } -int yaffs_Unlink(yaffs_Object * dir, const YCHAR * name) + +static int yaffs_UnlinkObject( yaffs_Object *obj) { - yaffs_Object *obj; - - obj = yaffs_FindObjectByName(dir, name); if (obj && obj->unlinkAllowed) { return yaffs_UnlinkWorker(obj); @@ -3784,6 +3784,13 @@ int yaffs_Unlink(yaffs_Object * dir, con return YAFFS_FAIL; } +int yaffs_Unlink(yaffs_Object * dir, const YCHAR * name) +{ + yaffs_Object *obj; + + obj = yaffs_FindObjectByName(dir, name); + return yaffs_UnlinkObject(obj); +} /*----------------------- Initialisation Scanning ---------------------- */ @@ -4910,6 +4917,18 @@ static int yaffs_ScanBackwards(yaffs_Dev /*------------------------------ Directory Functions ----------------------------- */ +static void yaffs_RemoveObjectFromDirectory(yaffs_Object * obj) +{ + yaffs_Device *dev = obj->myDev; + + if(dev && dev->removeObjectCallback) + dev->removeObjectCallback(obj); + + list_del_init(&obj->siblings); + obj->parent = NULL; +} + + static void yaffs_AddObjectToDirectory(yaffs_Object * directory, yaffs_Object * obj) { @@ -4935,7 +4954,7 @@ static void yaffs_AddObjectToDirectory(y } else if (!list_empty(&obj->siblings)) { /* If it is holed up somewhere else, un hook it */ - list_del_init(&obj->siblings); + yaffs_RemoveObjectFromDirectory(obj); } /* Now add it */ list_add(&obj->siblings, &directory->variant.directoryVariant.children); @@ -4949,12 +4968,6 @@ static void yaffs_AddObjectToDirectory(y } } -static void yaffs_RemoveObjectFromDirectory(yaffs_Object * obj) -{ - list_del_init(&obj->siblings); - obj->parent = NULL; -} - yaffs_Object *yaffs_FindObjectByName(yaffs_Object * directory, const YCHAR * name) {
