X-Git-Url: http://www.aleph1.co.uk/gitweb/?p=yaffs2.git;a=blobdiff_plain;f=yaffs_guts.c;h=9c296e24bcd181440cdb254f3dc3b3602f3730a9;hp=6d9f608601f48d0e12fe35a1db630805a08d950d;hb=8205f5a2a78fc7e67680b42fb004f47c522e7c9d;hpb=cb185cec287359727e44321979ad2324b4fad7cb diff --git a/yaffs_guts.c b/yaffs_guts.c index 6d9f608..9c296e2 100644 --- a/yaffs_guts.c +++ b/yaffs_guts.c @@ -40,7 +40,8 @@ static int yaffs_wr_data_obj(struct yaffs_obj *in, int inode_chunk, const u8 *buffer, int n_bytes, int use_reserve); - +static void yaffs_fix_null_name(struct yaffs_obj *obj, YCHAR *name, + int buffer_size); /* Function to calculate chunk and offset */ @@ -194,18 +195,18 @@ static void yaffs_handle_chunk_wr_ok(struct yaffs_dev *dev, int nand_chunk, const u8 *data, const struct yaffs_ext_tags *tags) { - dev = dev; - nand_chunk = nand_chunk; - data = data; - tags = tags; + (void) dev; + (void) nand_chunk; + (void) data; + (void) tags; } static void yaffs_handle_chunk_update(struct yaffs_dev *dev, int nand_chunk, const struct yaffs_ext_tags *tags) { - dev = dev; - nand_chunk = nand_chunk; - tags = tags; + (void) dev; + (void) nand_chunk; + (void) tags; } void yaffs_handle_chunk_error(struct yaffs_dev *dev, @@ -647,15 +648,21 @@ static u16 yaffs_calc_name_sum(const YCHAR *name) return sum; } + void yaffs_set_obj_name(struct yaffs_obj *obj, const YCHAR * name) { memset(obj->short_name, 0, sizeof(obj->short_name)); - if (name && + + if (name && !name[0]) { + yaffs_fix_null_name(obj, obj->short_name, + YAFFS_SHORT_NAME_LENGTH); + name = obj->short_name; + } else if (name && strnlen(name, YAFFS_SHORT_NAME_LENGTH + 1) <= - YAFFS_SHORT_NAME_LENGTH) + YAFFS_SHORT_NAME_LENGTH) { strcpy(obj->short_name, name); - else - obj->short_name[0] = _Y('\0'); + } + obj->sum = yaffs_calc_name_sum(name); } @@ -675,7 +682,10 @@ void yaffs_set_obj_name_from_oh(struct yaffs_obj *obj, loff_t yaffs_max_file_size(struct yaffs_dev *dev) { - return ((loff_t) YAFFS_MAX_CHUNK_ID) * dev->data_bytes_per_chunk; + if(sizeof(loff_t) < 8) + return YAFFS_MAX_FILE_SIZE_32; + else + return ((loff_t) YAFFS_MAX_CHUNK_ID) * dev->data_bytes_per_chunk; } /*-------------------- TNODES ------------------- @@ -791,7 +801,7 @@ struct yaffs_tnode *yaffs_find_tnode_0(struct yaffs_dev *dev, int required_depth; int level = file_struct->top_level; - dev = dev; + (void) dev; /* Check sane level and chunk Id */ if (level < 0 || level > YAFFS_TNODES_MAX_LEVEL) @@ -3198,7 +3208,7 @@ static void yaffs_load_name_from_oh(struct yaffs_dev *dev, YCHAR *name, } } else { #else - dev = dev; + (void) dev; { #endif strncpy(name, oh_name, buff_size - 1); @@ -4983,8 +4993,44 @@ int yaffs_get_n_free_chunks(struct yaffs_dev *dev) return n_free; } -/*\ - * Marshalling functions to get loff_t file sizes into aand out of + +int yaffs_format_dev(struct yaffs_dev *dev) +{ + int i; + enum yaffs_block_state state; + u32 dummy; + + if(dev->is_mounted) + return YAFFS_FAIL; + + /* + * The runtime variables might not have been set up, + * so set up what we need. + */ + dev->internal_start_block = dev->param.start_block; + dev->internal_end_block = dev->param.end_block; + dev->block_offset = 0; + dev->chunk_offset = 0; + + if (dev->param.start_block == 0) { + dev->internal_start_block = dev->param.start_block + 1; + dev->internal_end_block = dev->param.end_block + 1; + dev->block_offset = 1; + dev->chunk_offset = dev->param.chunks_per_block; + } + + for (i = dev->internal_start_block; i <= dev->internal_end_block; i++) { + yaffs_query_init_block_state(dev, i, &state, &dummy); + if (state != YAFFS_BLOCK_STATE_DEAD) + yaffs_erase_block(dev, i); + } + + return YAFFS_OK; +} + + +/* + * Marshalling functions to get loff_t file sizes into and out of * object headers. */ void yaffs_oh_size_load(struct yaffs_obj_hdr *oh, loff_t fsize) @@ -4997,7 +5043,7 @@ loff_t yaffs_oh_to_size(struct yaffs_obj_hdr *oh) { loff_t retval; - if (~(oh->file_size_high)) + if (sizeof(loff_t) >= 8 && ~(oh->file_size_high)) retval = (((loff_t) oh->file_size_high) << 32) | (((loff_t) oh->file_size_low) & 0xFFFFFFFF); else