- if(!olddir || !newdir || !obj) {
- /* bad file */
- yaffsfs_SetError(-EBADF);
- renameAllowed = 0;
- } else if(obj->myDev->readOnly){
+ olddir = yaffsfs_FindDirectory(NULL,oldPath,&oldname,0,¬OldDir);
+ newdir = yaffsfs_FindDirectory(NULL,newPath,&newname,0,¬NewDir);
+ obj = yaffsfs_FindObject(NULL,oldPath,0,0,NULL,NULL);
+ newobj = yaffsfs_FindObject(NULL,newPath,0,0,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;
+
+ if((!olddir && notOldDir) || (!newdir && notNewDir)) {
+ yaffsfs_SetError(-ENOTDIR);
+ rename_allowed = 0;
+ } else if (olddir && oldname && yaffs_strncmp(oldname, _Y("."),2) == 0){