void yaffs_set_obj_name(struct yaffs_obj *obj, const YCHAR * name)
{
-#ifdef CONFIG_YAFFS_SHORT_NAMES_IN_RAM
- memset(obj->short_name, 0,
- sizeof(YCHAR) * (YAFFS_SHORT_NAME_LENGTH + 1));
- if (name
- && yaffs_strnlen(name,
- YAFFS_SHORT_NAME_LENGTH + 1) <=
+#ifndef CONFIG_YAFFS_NO_SHORT_NAMES
+ memset(obj->short_name, 0, sizeof(obj->short_name));
+ if (name &&
+ yaffs_strnlen(name, YAFFS_SHORT_NAME_LENGTH + 1) <=
YAFFS_SHORT_NAME_LENGTH)
yaffs_strcpy(obj->short_name, name);
else
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)
{
* 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
/* 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) {
/* 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.
dev->block_info =
YMALLOC_ALT(n_blocks * sizeof(struct yaffs_block_info));
dev->block_info_alt = 1;
- } else
+ } else {
dev->block_info_alt = 0;
+ }
if (dev->block_info) {
/* Set up dynamic blockinfo stuff. */
dev->chunk_bits =
YMALLOC_ALT(dev->chunk_bit_stride * n_blocks);
dev->chunk_bits_alt = 1;
- } else
+ } else {
dev->chunk_bits_alt = 0;
+ }
}
if (dev->block_info && dev->chunk_bits) {
oh,
&tags,
1);
- } else
+ } else {
new_chunk =
yaffs_write_new_chunk(dev,
buffer,
&tags,
1);
+ }
if (new_chunk < 0) {
ret_val = YAFFS_FAIL;
bi = yaffs_get_block_info(dev, selected);
dev->gc_pages_in_use =
bi->pages_in_use - bi->soft_del_pages;
- } else
+ } else {
dev->gc_not_done = 0;
+ }
}
if (selected) {
memcpy(old_name, oh->name, sizeof(oh->name));
memset(buffer, 0xFF, sizeof(struct yaffs_obj_hdr));
- } else
+ } else {
memset(buffer, 0xFF, dev->data_bytes_per_chunk);
+ }
oh->type = in->variant_type;
oh->yst_mode = in->yst_mode;
if (name && *name) {
memset(oh->name, 0, sizeof(oh->name));
yaffs_load_oh_from_name(dev, oh->name, name);
- } else if (prev_chunk_id > 0)
+ } else if (prev_chunk_id > 0) {
memcpy(oh->name, old_name, sizeof(oh->name));
- else
+ } else {
memset(oh->name, 0, sizeof(oh->name));
+ }
oh->is_shrink = is_shrink;
}
return cache;
- } else
+ } else {
return NULL;
-
+ }
}
/* Find a cached chunk */
}
}
-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)
default:
return YAFFS_FAIL;
}
- } else if (yaffs_is_non_empty_dir(obj))
+ } else if (yaffs_is_non_empty_dir(obj)) {
return YAFFS_FAIL;
- else
+ } else {
return yaffs_change_obj_name(obj, obj->my_dev->unlinked_dir,
_Y("unlinked"), 0, 0);
+ }
}
static int yaffs_unlink_obj(struct yaffs_obj *obj)
hanging = 0;
} else if (!parent
|| parent->variant_type !=
- YAFFS_OBJECT_TYPE_DIRECTORY)
+ YAFFS_OBJECT_TYPE_DIRECTORY) {
hanging = 1;
- else if (yaffs_has_null_parent(dev, parent))
+ } else if (yaffs_has_null_parent(dev, parent)) {
hanging = 0;
- else {
+ } else {
/*
* Need to follow the parent chain to see if it is hanging.
*/
obj->obj_id));
}
- } else
+ } else {
yaffs_update_oh(obj, NULL, 0, 0, 0, NULL);
+ }
}
void yaffs_update_dirty_dirs(struct yaffs_dev *dev)
/* Special case for lost-n-found */
if (l->obj_id == YAFFS_OBJECTID_LOSTNFOUND) {
- if (yaffs_strcmp(name, YAFFS_LOSTNFOUND_NAME) ==
- 0)
+ if (!yaffs_strcmp(name, YAFFS_LOSTNFOUND_NAME))
return l;
} else if (yaffs_sum_cmp(l->sum, sum)
|| l->hdr_chunk <= 0) {
ascii_oh_name++;
n--;
}
- } else
+ } else {
yaffs_strncpy(name, oh_name + 1, buff_size - 1);
- } else
+ }
+ } else {
+#else
+ {
#endif
yaffs_strncpy(name, oh_name, buff_size - 1);
+ }
}
static void yaffs_load_oh_from_name(struct yaffs_dev *dev, YCHAR * oh_name,
yaffs_strncpy(oh_name + 1, name,
YAFFS_MAX_NAME_LENGTH - 2);
}
- } else
+ } else {
+#else
+ {
#endif
yaffs_strncpy(oh_name, name, YAFFS_MAX_NAME_LENGTH - 1);
+ }
}
if (obj->obj_id == YAFFS_OBJECTID_LOSTNFOUND) {
yaffs_strncpy(name, YAFFS_LOSTNFOUND_NAME, buffer_size - 1);
}
-#ifdef CONFIG_YAFFS_SHORT_NAMES_IN_RAM
+#ifndef CONFIG_YAFFS_NO_SHORT_NAMES
else if (obj->short_name[0]) {
yaffs_strcpy(name, obj->short_name);
}
dev->tnode_width = 16;
else
dev->tnode_width = bits;
- } else
+ } else {
dev->tnode_width = 16;
+ }
dev->tnode_mask = (1 << dev->tnode_width) - 1;
if (dev->param.is_yaffs2) {
if (yaffs2_checkpt_restore(dev)) {
yaffs_check_obj_details_loaded(dev->root_dir);
- T(YAFFS_TRACE_ALWAYS,
+ T(YAFFS_TRACE_CHECKPOINT | YAFFS_TRACE_MOUNT,
(TSTR
("yaffs: restored from checkpoint"
TENDSTR)));
if (!init_failed && !yaffs2_scan_backwards(dev))
init_failed = 1;
}
- } else if (!yaffs1_scan(dev))
+ } else if (!yaffs1_scan(dev)) {
init_failed = 1;
+ }
yaffs_strip_deleted_objs(dev);
yaffs_fix_hanging_objs(dev);