int cant_bloques = 0, resto, i, copiado=0;
cant_bloques = (emu->tam_reg / (emu->tam_bloque-sizeof(EMUFS_REG_ID))) + 1;
+ if ( emu->tam_reg+sizeof(EMUFS_REG_ID) == emu->tam_bloque )
+ cant_bloques = 1;
/*si existe, lo busco en el archivo de bloques*/
block = emufs_idx_buscar_registro(emu,ID); /*me devuelve el nro de bloque al que pertenece el registro*/
strcat(name_f,".dat");
cant_bloques = (emu->tam_reg / (emu->tam_bloque-sizeof(EMUFS_REG_ID))) + 1;
+ if ( emu->tam_reg+sizeof(EMUFS_REG_ID) == emu->tam_bloque )
+ cant_bloques = 1;
resto = emu->tam_bloque - sizeof(EMUFS_REG_ID);
lugar = emu->tam_reg + sizeof(EMUFS_REG_ID);
- if ( emu->tam_bloque < emu->tam_reg - sizeof(EMUFS_REG_ID) )
+ if ( emu->tam_bloque-sizeof(EMUFS_REG_ID) < emu->tam_reg )
lugar = emu->tam_bloque;
/* me devuelve el ID del bloque donde quepa un registro y el espacio libre en "fs"*/
num_bloque = emufs_fsc_buscar_lugar(emu, lugar, &fs);
}
/* grabo el nuevo registro en el archivo de espacios libres */
- if ( emu->tam_bloque-sizeof(EMUFS_REG_ID) >= emu->tam_reg )
- new_fs = emu->tam_bloque - emu->tam_reg - sizeof(EMUFS_REG_ID);
- else new_fs = emu->tam_bloque - resto - sizeof(EMUFS_REG_ID);
+ if ( emu->tam_bloque-sizeof(EMUFS_REG_ID) < emu->tam_reg )
+ new_fs = emu->tam_bloque - sizeof(EMUFS_REG_ID) - resto ;
+ else new_fs = emu->tam_bloque - sizeof(EMUFS_REG_ID) - emu->tam_reg ;
if ( emufs_fsc_agregar(emu, num_bloque+i, new_fs) ) {
fclose(file);
free(bloque);
}
/*actualizo el archivo de espacios libres*/
- if ( emu->tam_bloque-sizeof(EMUFS_REG_ID) > emu->tam_reg ){
- resto = emu->tam_reg;
- if ( emufs_fsc_agregar(emu, num_bloque, fs - resto - sizeof(EMUFS_REG_ID) ) != 0 ) {
+ if ( emu->tam_bloque-sizeof(EMUFS_REG_ID) < emu->tam_reg ){
+ /*Si el registro ocupa mas de un bloque (original) resto = emu->tam_bloque-sizeof(EMUFS_REG_ID)*/
+ resto += sizeof(EMUFS_REG_ID);
+ if ( cant_bloques-1 == i )
+ resto = emu->tam_reg - i*(emu->tam_bloque - sizeof(EMUFS_REG_ID))+sizeof(EMUFS_REG_ID);
+ printf("fs-resto = %d\n", emu->tam_bloque-resto);
+ if ( emufs_fsc_agregar(emu, num_bloque+i, fs-resto) !=0 ){
fclose(file);
if (bloque) free(bloque);
return -1;
}
} else {
- resto += sizeof(EMUFS_REG_ID);
- if ( cant_bloques-1 == i )
- resto = emu->tam_reg - i*(emu->tam_bloque - sizeof(EMUFS_REG_ID))+sizeof(EMUFS_REG_ID);
- if ( emufs_fsc_agregar(emu, num_bloque+i, fs-resto) !=0 ){
+ /* si ocupa menos de un bloque*/
+ resto = emu->tam_reg;
+ if ( emufs_fsc_agregar(emu, num_bloque, fs - resto - sizeof(EMUFS_REG_ID) ) != 0 ) {
fclose(file);
if (bloque) free(bloque);
return -1;
/*cantidad de bloques que ocupa un registro*/
cant_bloques = emu->tam_reg/(emu->tam_bloque-sizeof(EMUFS_REG_ID))+1;
+ if ( emu->tam_reg+sizeof(EMUFS_REG_ID) == emu->tam_bloque )
+ cant_bloques = 1;
num_bloque = emufs_idx_buscar_registro(emu, ID);
if (!(bloque = emufs_tipo3_leer_bloque(emu, num_bloque, &err))) {
}
/*grabo el bloque en el archivo*/
- if ( emu->tam_bloque < emu->tam_reg )
+ if ( emu->tam_bloque-sizeof(EMUFS_REG_ID) < emu->tam_reg )
memset(bloque, 0, emu->tam_bloque);
if ( emufs_tipo3_grabar_bloque(emu, bloque, num_bloque) == -1 ){
free(bloque);
if (truncate(name, size)!=0)
PERR("NO TRUNQUE NADA");
/*hay que truncar el fsc!!!*/
- if(emu->tam_bloque<emu->tam_reg-sizeof(EMUFS_REG_ID)) block_id = block_id/2;
+ if(emu->tam_bloque-sizeof(EMUFS_REG_ID) < emu->tam_reg) block_id = block_id/2;
if (emufs_fsc_truncate(emu, block_id)!= 0)
PERR("NO TURNQUE EL FSC");
}
char h[100];
char i[100];
char* b_ptr;
- int err = 0, j, k;
+ int err = 0, j, k, cant_bloques;
EMUFS_Estadisticas stats;
if (argc != 2) {
strcpy(i, "me argrego despues de borrar a un registro");
fp = emufs_crear("articulos", T3, atoi(argv[1]), 100);
- printf("cant de bloques = %lu\n", fp->tam_reg/(fp->tam_bloque-sizeof(EMUFS_REG_ID)) +1);
+ cant_bloques = fp->tam_reg/(fp->tam_bloque-sizeof(EMUFS_REG_ID)) +1;
+ if ( fp->tam_reg+sizeof(EMUFS_REG_ID) == fp->tam_bloque )
+ cant_bloques = 1;
+ printf("cant de bloques = %lu\n",cant_bloques );
printf("GRABANDO REGISTROS....\n");
for ( k=0; k<2; k++){
ver_archivo_FS(fp);
printf("BORRANDO REGISTROS....\n");
- for (j=0; j<20; j++){
+ for (j=0; j<20; j+=3){
fp->borrar_registro(fp, j);
printf("borrado : %lu\n", j);
}
+ /*
printf("COMPACTANDO........\n");
fp->compactar(fp);
+ */
ver_archivo_FS(fp);
-
- emufs_destruir(fp);
+ debug_ver_estadisticas(fp);
+ emufs_destruir(fp);
return 0;
}