EMUFS_REG_SIZE* reg_size, int *err)
{
char* block; /* bloque leido (en donde está el registro a leer) */
char* registro; /* registro a leer */
EMUFS_BLOCK_ID block_id; /* id del bloque en donde esta el registro a leer */
EMUFS_BLOCK_SIZE offset; /* offset del bloque leído */
EMUFS_REG_SIZE* reg_size, int *err)
{
char* block; /* bloque leido (en donde está el registro a leer) */
char* registro; /* registro a leer */
EMUFS_BLOCK_ID block_id; /* id del bloque en donde esta el registro a leer */
EMUFS_BLOCK_SIZE offset; /* offset del bloque leído */
EMUFS_TIPO1_REG_HEADER curr_reg_header; /* cabecera del registro a leer */
block_id = emufs_idx_buscar_registro(efs, reg_id);
EMUFS_TIPO1_REG_HEADER curr_reg_header; /* cabecera del registro a leer */
block_id = emufs_idx_buscar_registro(efs, reg_id);
return NULL;
}
if (fread(block, efs->tam_bloque, 1, file) != 1) {
free(block);
return NULL;
}
if (fread(block, efs->tam_bloque, 1, file) != 1) {
free(block);
emufs_tipo1_escribir_reg_chunk_en_memoria(block + efs->tam_bloque - fs,
header, chunk_ptr, chunk_size);
/* rellena el espacio libre con ceros para la GUI */
emufs_tipo1_escribir_reg_chunk_en_memoria(block + efs->tam_bloque - fs,
header, chunk_ptr, chunk_size);
/* rellena el espacio libre con ceros para la GUI */
- if (fs) memset(block + efs->tam_bloque - fs, 0, fs);
+ memset(block + efs->tam_bloque - fs + chunk_size
+ + sizeof(EMUFS_TIPO1_REG_HEADER), 0,
+ fs - chunk_size - sizeof(EMUFS_TIPO1_REG_HEADER));
/* graba el bloque en el archivo */
new_block_id = emufs_tipo1_grabar_bloque_fsc(efs, block, curr_block_id,
fs - sizeof(EMUFS_TIPO1_REG_HEADER) - chunk_size, err);
/* graba el bloque en el archivo */
new_block_id = emufs_tipo1_grabar_bloque_fsc(efs, block, curr_block_id,
fs - sizeof(EMUFS_TIPO1_REG_HEADER) - chunk_size, err);
/* tamaño máximo ultilizable para datos en un bloque */
EMUFS_BLOCK_SIZE block_space
= efs->tam_bloque - sizeof(EMUFS_TIPO1_REG_HEADER);
/* tamaño máximo ultilizable para datos en un bloque */
EMUFS_BLOCK_SIZE block_space
= efs->tam_bloque - sizeof(EMUFS_TIPO1_REG_HEADER);
- fs = emufs_fsc_get_fs(efs, curr_block_id)
- + MIN(curr_reg_header.size, block_space)
+ fs = orig_fs + MIN(curr_reg_header.size, block_space)
+ sizeof(EMUFS_TIPO1_REG_HEADER);
if ((err = emufs_fsc_actualizar(efs, curr_block_id, fs))) {
PERR("no se pudo actualizar .fsc");
+ sizeof(EMUFS_TIPO1_REG_HEADER);
if ((err = emufs_fsc_actualizar(efs, curr_block_id, fs))) {
PERR("no se pudo actualizar .fsc");
/* si es necesario desplazar */
if (offset < offset_reg_end) {
/* muevo la porción de bloque a izquierda */
/* si es necesario desplazar */
if (offset < offset_reg_end) {
/* muevo la porción de bloque a izquierda */
memcpy(block + offset, block + offset_reg_end,
efs->tam_bloque - offset_reg_end);
/* rellena el espacio libre con ceros para la GUI */
memcpy(block + offset, block + offset_reg_end,
efs->tam_bloque - offset_reg_end);
/* rellena el espacio libre con ceros para la GUI */
- if (fs) memset(block + offset_reg_end, 0,
- efs->tam_bloque - offset_reg_end);
+ memset(block + efs->tam_bloque - offset_reg_end - orig_fs + offset,
+ 0, offset_reg_end + orig_fs - offset);
EMUFS_BLOCK_SIZE block_space /* tamaño para datos de un bloque */
= efs->tam_bloque - sizeof(EMUFS_TIPO1_REG_HEADER);
EMUFS_REG_ID total_ids; /* cantidad total de registros en el array */
EMUFS_BLOCK_SIZE block_space /* tamaño para datos de un bloque */
= efs->tam_bloque - sizeof(EMUFS_TIPO1_REG_HEADER);
EMUFS_REG_ID total_ids; /* cantidad total de registros en el array */