- olddir = yaffsfs_FindDirectory(NULL,oldPath,&oldname,0);
- newdir = yaffsfs_FindDirectory(NULL,newPath,&newname,0);
- obj = yaffsfs_FindObject(NULL,oldPath,0,0,NULL);
+ if(yaffsfs_alt_dir_path(newPath, &alt_newpath) < 0){
+ yaffsfs_SetError(-ENOMEM);
+ return -1;
+ }
+ if(alt_newpath)
+ newPath = alt_newpath;
+
+ yaffsfs_Lock();
+
+
+ olddir = yaffsfs_FindDirectory(NULL,oldPath,&oldname,0,¬OldDir,&oldLoop);
+ newdir = yaffsfs_FindDirectory(NULL,newPath,&newname,0,¬NewDir,&newLoop);
+ obj = yaffsfs_FindObject(NULL,oldPath,0,0,NULL,NULL,NULL);
+ newobj = yaffsfs_FindObject(NULL,newPath,0,0,NULL,NULL,NULL);
+
+ /* If the object being renamed is a directory and the
+ * path ended with a "/" then the olddir == obj.
+ * We pass through NULL for the old name to tell the lower layers
+ * to use olddir as the object.
+ */
+
+ if(olddir == obj)
+ oldname = NULL;