]> git.llucax.com Git - z.facultad/75.06/emufs.git/commitdiff
- Changed routine: emufs_idx_agregar, cambiando el orden de los parametros 2 y 3...
authorAlan Kennedy <kennedya@3dgames.com.ar>
Sat, 10 Apr 2004 19:18:49 +0000 (19:18 +0000)
committerAlan Kennedy <kennedya@3dgames.com.ar>
Sat, 10 Apr 2004 19:18:49 +0000 (19:18 +0000)
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.

emufs/idx.c
emufs/tipo2.c
emufs/tipo2_main.c

index c05c34c2537ac0c24ae1d5257ab60141744809b4..d0dd436da62f06cf3da17f4bda83fd94b6f7d3d0 100644 (file)
@@ -68,10 +68,11 @@ int emufs_idx_crear(EMUFS *efs)
 /* 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);
@@ -81,12 +82,15 @@ EMUFS_REG_ID emufs_idx_buscar_mayor_id(EMUFS *emu)
        while ( !feof(f_idx) ){
                /* Me aseguro de leer la cantidad de bytes correcta */
                if (fread(&reg,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; 
 }
 
@@ -116,7 +120,7 @@ EMUFS_BLOCK_ID emufs_idx_buscar_registro(EMUFS *emu, EMUFS_REG_ID 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;
@@ -128,8 +132,8 @@ int emufs_idx_agregar(EMUFS *emu, EMUFS_BLOCK_ID n_Location, EMUFS_REG_ID n_IdRe
        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(&reg,sizeof(EMUFS_IDX),1,f_idx); 
        fclose(f_idx);
        return 0;
index e3025cbec9b96969101a940aeed2a4daab957098..161c01be9e7064b10f8120a0305bca05177c641a 100644 (file)
@@ -49,6 +49,7 @@ EMUFS_REG_ID emufs_tipo2_grabar_registro(EMUFS *emu, void *ptr, EMUFS_REG_SIZE n
        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];
        
@@ -60,7 +61,8 @@ EMUFS_REG_ID emufs_tipo2_grabar_registro(EMUFS *emu, void *ptr, EMUFS_REG_SIZE n
        
        /* 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 */
@@ -72,12 +74,12 @@ EMUFS_REG_ID emufs_tipo2_grabar_registro(EMUFS *emu, void *ptr, EMUFS_REG_SIZE n
                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 {
index 0dc5c67ce057ca318bf45c406ce9950953e872f3..c9a9b186ba430ff6724399a248a295e199872b79 100644 (file)
@@ -35,7 +35,7 @@
 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];
@@ -71,7 +71,7 @@ int main(int argc, char *argv[])
        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);