-
-
-/* me devuelve el ID del bloque donde quepa un registro, y guarda en fs el espacio libre que queda en el bloque */
-int buscar_lugar(EMUFS *emu, unsigned long tam, int *fs)
-{
- FILE *f_block_free;
- BLOCK_FREE_T reg;
- char name_f_block_free[255];
-
- strcpy(name_f_block_free,emu->nombre);
- strcat(name_f_block_free,".fsc");
-
- if ( (f_block_free = fopen(name_f_block_free,"r"))==NULL ) return -1;
-
- /* Inicializo la estructura para evitar que si el archivo esta vacio
- * el resultado sea correcto
- */
- reg.block = -1;
- *fs = emu->tam_bloque;
- while( !feof(f_block_free) ){
- if (fread(®,sizeof(BLOCK_FREE_T),1,f_block_free) != 1) continue;
- if ( reg.free_space >= tam )
- break;
- else {
- reg.block = -1;
- *fs = emu->tam_bloque;
- }
- }
-
- fclose(f_block_free);
- if (reg.block != -1)
- *fs = reg.free_space;
- return reg.block;
-}
-
-/*Busco en el archivo de Id`s un Id valido para un nuevo registro*/
-int get_id(EMUFS *emu)
-{
- FILE *f_reg_exist, *f_block_reg;
- BLOCK_REG_T reg;
- int id, max = -1, offset;
- char name_f_reg_exist[255];
- char name_f_block_reg[255];
-
- strcpy(name_f_block_reg,emu->nombre);
- strcat(name_f_block_reg,".idx");
-
- strcpy(name_f_reg_exist,emu->nombre);
- strcat(name_f_reg_exist,".did");
-
- if ( (f_reg_exist = fopen(name_f_reg_exist,"r")) == NULL) return -1; /*ERROR*/
- fseek(f_reg_exist, 0, SEEK_END);
-
- if (ftell(f_reg_exist) > 0){
- /* si el archivo no esta vacio es porque hay un nro disponible*/
- fseek(f_reg_exist, -sizeof(int),SEEK_END);
- fread(&id,sizeof(int),1,f_reg_exist);
- fseek(f_reg_exist, 0, SEEK_END);
- offset = ftell(f_reg_exist);
- truncate(name_f_reg_exist, offset - sizeof(int));
- }else{
- /*si no, hay que buscar el mayor de los numeros*/
- id = -1;
- 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(BLOCK_REG_T),1,f_block_reg) != 1) continue;
- if ( reg.id_reg >= max )
- max = reg.id_reg;
- }
- id = max+1;
- }
-
- fclose(f_block_reg);
- fclose(f_reg_exist);
- return id;
-}
-