Quedo asi: int emufs_idx_agregar(EMUFS *emu, EMUFS_REG_ID n_IdReg, EMUFS_BLOCK_ID n_Location)
- Fixed EMUFS_REG_ID emufs_idx_buscar_mayor_id(EMUFS *emu), el cual andaba mal puese devolvia siempre ID 0, ya que comparaba todos los ID's encontrados contra el -1 pero definido en una variable EMUFS_REG_ID (unsigned long int), por lo que nunca encontraba anda mayor que eso, y luego al sumarle uno a ese maximo devolvia siempre 0. (En fin, ahora anda).
- Fixes en tipo2.c y tipo2_main.c. Ahora ya funcione como ayer mi proyecto.
/* Devuelve el mayor id de registro utilizado so far en el archivo de datos, revisando el indice. */
EMUFS_REG_ID emufs_idx_buscar_mayor_id(EMUFS *emu)
{
- EMUFS_REG_ID n_IdReg, max = -1;
+ EMUFS_REG_ID n_IdReg, max = 0;
FILE *f_idx;
EMUFS_IDX reg;
char name_f_idx[255]; /* TODO usar malloc para no limitar el tamaƱo de nombre de archivo */
+ unsigned short int b_Found = 0;
strcpy(name_f_idx,emu->nombre);
strcat(name_f_idx, EMUFS_IDX_EXT);
while ( !feof(f_idx) ){
/* Me aseguro de leer la cantidad de bytes correcta */
if (fread(®,sizeof(EMUFS_IDX),1,f_idx) != 1) continue;
- if ( reg.n_IdReg >= max )
+ if ( reg.n_IdReg >= max ) {
max = reg.n_IdReg;
+ b_Found = 1;
+ }
}
- n_IdReg = max+1;
fclose(f_idx);
-
+
+ if (!b_Found) return (0);
+ else return(max+1);
return n_IdReg;
}
}
/* agrega un registro al final del archivo */
-int emufs_idx_agregar(EMUFS *emu, EMUFS_BLOCK_ID n_Location, EMUFS_REG_ID n_IdReg)
+int emufs_idx_agregar(EMUFS *emu, EMUFS_REG_ID n_IdReg, EMUFS_BLOCK_ID n_Location)
{
FILE *f_idx;
EMUFS_IDX reg;
if ( (f_idx = fopen(name_f_idx,"a+"))==NULL ) return -1;
/* Note: Location = Bloque para Tipo 1 y 3, Offset para Tipo 2 */
- reg.n_Location = n_Location;
- reg.n_IdReg = n_IdReg;
+ reg.n_IdReg = n_IdReg;
+ reg.n_Location = n_Location;
fwrite(®,sizeof(EMUFS_IDX),1,f_idx);
fclose(f_idx);
return 0;
EMUFS_REG_ID n_IdReg;
EMUFS_FREE n_FreeSpace;
EMUFS_OFFSET n_WrtOffset,n_RegOffset;
+ unsigned long int n_FisicSize;
FILE *f_data;
char name_f[255];
/* Obtengo un offset en donde iniciar la escritura de mi registro */
/* de manera segura (habra espacio suficiente) */
- n_WrtOffset = emufs_fsc_buscar_lugar(emu, n_RegSize, &n_FreeSpace);
+ n_FisicSize = sizeof(EMUFS_REG_ID)+sizeof(EMUFS_REG_SIZE)+n_RegSize;
+ n_WrtOffset = emufs_fsc_buscar_lugar(emu,n_FisicSize,&n_FreeSpace);
printf("tipo2.c >> Searching FSC: Offset = %lu FSpace: %lu\n", n_WrtOffset, n_FreeSpace);
/* Si no encontre un gap, entonces escribo el registro al final */
n_RegOffset = ftell(f_data);
/* Escribo [RegId]|[RegSize]|[RegData] */
- fwrite(&n_IdReg,sizeof(int),1,f_data);
- fwrite(&n_RegSize,sizeof(int),1,f_data);
+ fwrite(&n_IdReg,sizeof(EMUFS_REG_ID),1,f_data);
+ fwrite(&n_RegSize,sizeof(EMUFS_REG_SIZE),1,f_data);
fwrite(ptr,n_RegSize,1,f_data);
/* Bye */
- printf("Tipo2.c >> RegNr: %lu inserted at Offset: %lu\n",n_IdReg,n_RegOffset);
+ printf("Tipo2.c >> RegNr: %lu with FisicSize: %lu inserted at Offset: %lu\n",n_IdReg,n_FisicSize,n_RegOffset);
fclose(f_data);
} else {
int main(int argc, char *argv[])
{
EMUFS *fp;
- int n1, n2, n3, n4, n5, n6, n7, n8;
+ EMUFS_REG_ID n1, n2, n3, n4, n5, n6, n7, n8;
char a[11];
char b[63];
char c[13];
n8 = fp->grabar_registro(fp, h, 63);
/* Borramos un registro del medio */
- printf("tipo2_main.c >> Borrando registro: %i\n",n4);
+ printf("tipo2_main.c >> Borrando registro: %lu\n",n4);
fp->borrar_registro(fp, 54);
/*n8 = fp->grabar_registro(fp, i, 100);
fp->leer_registro(fp, n8, b, 100);