X-Git-Url: http://www.aleph1.co.uk/gitweb/?p=yaffs2.git;a=blobdiff_plain;f=yaffs_guts.c;h=c56e060ef5bc384e231eadb49bd484991d221492;hp=1bc6d51be66714e253e572ffac34ffc7bf3aebd1;hb=256ce201932cb4fb035c9996c7ae700b24818c17;hpb=2b102a7c5c9a5332e8159aa1c8c7d149596327ff diff --git a/yaffs_guts.c b/yaffs_guts.c index 1bc6d51..c56e060 100644 --- a/yaffs_guts.c +++ b/yaffs_guts.c @@ -1669,12 +1669,8 @@ int yaffs_rename_obj(struct yaffs_obj *old_dir, const YCHAR * old_name, /* Now do the handling for an existing target, if there is one */ existing_target = yaffs_find_by_name(new_dir, new_name); - if (existing_target && - existing_target->variant_type == YAFFS_OBJECT_TYPE_DIRECTORY - && !list_empty(&existing_target->variant.dir_variant. - children)) { - /* There is a target that is a non-empty directory, so we fail */ - return YAFFS_FAIL; /* EEXIST or ENOTEMPTY */ + if (yaffs_is_non_empty_dir(existing_target)){ + return YAFFS_FAIL; /* ENOTEMPTY */ } else if (existing_target && existing_target != obj) { /* Nuke the target first, using shadowing, * but only if it isn't the same object. @@ -3811,10 +3807,11 @@ int yaffs_del_file(struct yaffs_obj *in) } } -static int yaffs_is_non_empty_dir(struct yaffs_obj *obj) +int yaffs_is_non_empty_dir(struct yaffs_obj *obj) { - return (obj->variant_type == YAFFS_OBJECT_TYPE_DIRECTORY) && - !(list_empty(&obj->variant.dir_variant.children)); + return (obj && + obj->variant_type == YAFFS_OBJECT_TYPE_DIRECTORY) && + !(list_empty(&obj->variant.dir_variant.children)); } static int yaffs_del_dir(struct yaffs_obj *obj)