/*si existe, lo busco en el archivo de bloques*/
block = buscar_registro(emu,ID); /*me devuelve el nro de bloque al que pertenece el registro*/
+ printf("block %d\n", block);
bloque = (char*)malloc(emu->tam_bloque);
if (leer_bloque(emu, block, bloque)==-1)
return -1; /*No se pudo leer el bloque*/
if ( (f_block_reg = fopen(name_f_block_reg,"r")) == NULL) return -1; /*ERROR*/
while ( !feof(f_block_reg) ){
- fread(®,sizeof(reg),1,f_block_reg);
+ if (fread(®,sizeof(reg),1,f_block_reg) != 1) continue;
if ( reg.id_reg == ID ){
fclose(f_block_reg);
+ printf("%d %d %d\n", reg.id_reg, ID, reg.block);
return reg.block;
}
}
/* me devuelve el ID del bloque donde quepa un registro y el espacio libre en "fs"*/
num_bloque = buscar_lugar(emu, tam, &fs);
/*si no hay bloques con suficiente espacio creo un bloque nuevo */
- printf("num_bloque = %d\n", num_bloque);
if (num_bloque == -1) {
/*crear un nuevo bloque en memoria */
bloque = (char*)malloc(emu->tam_bloque);
/*grabo el registro en el bloque*/
memcpy(bloque+sizeof(int),ptr,tam);
/* me paro al final del archivo */
- fseek(file, 0, SEEK_END);
+ fseek(file, 0, SEEK_END);
/* grabo el bloque en el final del archivo */
fwrite(bloque,emu->tam_bloque,1,file);
} else {
/*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,sizeof(int)+sizeof(char),SEEK_CUR);
- while ( !feof(file) ){
- fread(bloque,emu->tam_bloque,1,file);
- cant++; /*ya grabe el nuevo bloque !!!*/
- }
+ fseek(file, 0, SEEK_END); /* Me paro al final */
+ cant = (ftell(file)-(sizeof(int)+sizeof(char))) / emu->tam_bloque;
fclose(file);
/*cargo el registro*/
reg.block = cant; /*no incremento cant, porque grabe el nuevo bloque antes y no lo conte!!*/
fclose(f_block_free);
/*actualizo el archivo de bloques y registros*/
- if ( (f_block_reg = fopen(name_f_block_reg,"a+"))==NULL ) return -1; /*ERROR*/
+ if ( (f_block_reg = fopen(name_f_block_reg,"ab+"))==NULL ) return -1; /*ERROR*/
reg_b.block = reg.block;
reg_b.id_reg = ID_aux;
- fwrite(®_b,sizeof(reg_b),1,f_block_reg);
+ fwrite(®_b,sizeof(reg_b),1,f_block_reg);
fclose(f_block_reg);
free(bloque);
if ( (f_block_reg = fopen(name_f_block_reg,"r")) == NULL) return -1; /*ERROR*/
while ( !feof(f_block_reg) ){
/* Me aseguro de leer la cantidad de bytes correcta */
- if (fread(®,sizeof(reg),1,f_block_reg) != sizeof(reg)) continue;
+ if (fread(®,sizeof(reg),1,f_block_reg) != 1) continue;
if ( reg.id_reg >= max )
max = reg.id_reg;
}