- /*grabo el id en el bloque*/
- memcpy(bloque,&ID_aux,sizeof(EMUFS_REG_ID));
- /*grabo el registro en el bloque*/
- memcpy(bloque+sizeof(EMUFS_REG_ID),ptr,emu->tam_reg);
- /* me paro al final del archivo */
- fseek(file, 0, SEEK_END);
- /* grabo el bloque en el final del archivo */
- fwrite(bloque,emu->tam_bloque,1,file);
- /*actualizo el archivo de espacios libres*/
- /*tengo que buscar la cantidad de bloques que existen*/
- /*me paro al principio salteando el encabezado del archivo*/
- fseek(file, 0, SEEK_END); /* Me paro al final */
- cant = (ftell(file)-(sizeof(EMUFS_Tipo)+sizeof(EMUFS_REG_SIZE)+sizeof(EMUFS_BLOCK_SIZE))) / emu->tam_bloque;
- cant--; /* Resto uno porque el numero de bloque debe empezar en 0 */
+ for (i=0; i<cant_bloques; i++) {
+ /*crear un nuevo bloque en memoria */
+ bloque = (char*)malloc(emu->tam_bloque);
+ memset(bloque, 0, emu->tam_bloque);
+ /* grabar el registro al principio del bloque */
+ /*grabo el id en el bloque*/
+ memcpy(bloque,&ID_aux,sizeof(EMUFS_REG_ID));
+ /*grabo el registro en el bloque*/
+ if ( cant_bloques == 0 ){
+ memcpy(bloque+sizeof(EMUFS_REG_ID),ptr,emu->tam_reg);
+ } else {
+ if ( cant_bloques-1 == i )
+ resto = emu->tam_reg - i*(emu->tam_bloque - sizeof(EMUFS_REG_ID));
+ memcpy(bloque+sizeof(EMUFS_REG_ID),((char*)ptr)+i*(emu->tam_bloque-sizeof(EMUFS_REG_ID)),resto);
+ }
+ /* me paro al final del archivo */
+ fseek(file, 0, SEEK_END);
+ /* grabo el bloque en el final del archivo */
+ fwrite(bloque,emu->tam_bloque,1,file);
+ /*actualizo el archivo de espacios libres*/
+ /*tengo que buscar la cantidad de bloques que existen*/
+ fseek(file, 0, SEEK_END); /* Me paro al final */
+ cant = (ftell(file)-(sizeof(EMUFS_Tipo)+sizeof(EMUFS_REG_SIZE)+sizeof(EMUFS_BLOCK_SIZE))) / emu->tam_bloque;
+ cant--; /* Resto uno porque el numero de bloque debe empezar en 0 */
+ num_bloque = cant;
+ /* grabo el nuevo registro en el archivo de espacios libres */
+ if ( emufs_fsc_agregar(emu, num_bloque, emu->tam_bloque - resto - sizeof(EMUFS_REG_ID)) != 0 ) {
+ fclose(file);
+ free(bloque);
+ return -1;
+ }
+ }