summaryrefslogtreecommitdiff
path: root/yaffs_guts.c
diff options
context:
space:
mode:
authorCharles Manning <cdhmanning@gmail.com>2010-11-24 10:04:20 +1300
committerCharles Manning <cdhmanning@gmail.com>2010-11-24 10:04:20 +1300
commit2b102a7c5c9a5332e8159aa1c8c7d149596327ff (patch)
tree621de14ebb49d30ecd2f769c6fd5fe3064979724 /yaffs_guts.c
parent43f79e97ed02fe66be94b568da60126bcc351b0c (diff)
yaffs direct: Fix some more error handling and directory name handling
All Timothy's tests passing. Signed-off-by: Charles Manning <cdhmanning@gmail.com>
Diffstat (limited to 'yaffs_guts.c')
-rw-r--r--yaffs_guts.c16
1 files changed, 14 insertions, 2 deletions
diff --git a/yaffs_guts.c b/yaffs_guts.c
index 2348a94..1bc6d51 100644
--- a/yaffs_guts.c
+++ b/yaffs_guts.c
@@ -1620,6 +1620,10 @@ static int yaffs_change_obj_name(struct yaffs_obj *obj,
return YAFFS_FAIL;
}
+
+/* Note:
+ * If old_name is NULL then we take old_dir as the object to be renamed.
+ */
int yaffs_rename_obj(struct yaffs_obj *old_dir, const YCHAR * old_name,
struct yaffs_obj *new_dir, const YCHAR * new_name)
{
@@ -1641,7 +1645,9 @@ int yaffs_rename_obj(struct yaffs_obj *old_dir, const YCHAR * old_name,
* While look-up is case insensitive, the name isn't.
* Therefore we might want to change x.txt to X.txt
*/
- if (old_dir == new_dir && yaffs_strcmp(old_name, new_name) == 0)
+ if (old_dir == new_dir &&
+ old_name && new_name &&
+ yaffs_strcmp(old_name, new_name) == 0)
force = 1;
#endif
@@ -1650,7 +1656,13 @@ int yaffs_rename_obj(struct yaffs_obj *old_dir, const YCHAR * old_name,
/* ENAMETOOLONG */
return YAFFS_FAIL;
- obj = yaffs_find_by_name(old_dir, old_name);
+ if(old_name)
+ obj = yaffs_find_by_name(old_dir, old_name);
+ else{
+ obj = old_dir;
+ old_dir = obj->parent;
+ }
+
if (obj && obj->rename_allowed) {