]> git.llucax.com Git - z.facultad/75.06/emufs.git/commitdiff
Se actualizan los archivos indice, falta implementar boorar_registro
authorNicolás Dimov <ndimov@gmail.com>
Sun, 4 Apr 2004 20:25:23 +0000 (20:25 +0000)
committerNicolás Dimov <ndimov@gmail.com>
Sun, 4 Apr 2004 20:25:23 +0000 (20:25 +0000)
tipo3/param_cte.c

index 311cf40b502f0a9b91acf805b17405bc93feb448..70a10516c2e3156f7e19de73c861512094046995 100644 (file)
@@ -106,22 +106,32 @@ int leer_bloque(EMUFS *emu, int ID, void* ptr)
 
 int grabar_registro(EMUFS *emu, void *ptr, unsigned long tam)
 {
-       int ID_aux, fs, num_bloque;
+       int ID_aux, fs, num_bloque, cant;
        FILE *file;
+       FILE *f_id;
+       FILE *f_block_reg;
+       FILE *f_block_free;
+       BLOCK_FREE_T reg;
+       BLOCK_REG_T reg_b;
        char name_f[255];
+       char name_f_block_reg[255];
+       char name_f_id[255];
+       char name_f_free[255];
        char* bloque;
        strcpy(name_f,emu->nombre);
        strcat(name_f,".dat");
        
-       if ( (file = fopen(name_f,"r"))==NULL ) return -1; /*ERROR*/
-       /*FIXME: FALTA ACTUALIZAR LOS ARCHIVOS DE ESPACIO LIBRE Y TODO LO DEMAS !!!!!!!!
-        *FIXME: FALTA ACTUALIZAR LOS ARCHIVOS DE ESPACIO LIBRE Y TODO LO DEMAS !!!!!!!!
-        *FIXME: FALTA ACTUALIZAR LOS ARCHIVOS DE ESPACIO LIBRE Y TODO LO DEMAS !!!!!!!!
-        *FIXME: FALTA ACTUALIZAR LOS ARCHIVOS DE ESPACIO LIBRE Y TODO LO DEMAS !!!!!!!!
-        *FIXME: FALTA ACTUALIZAR LOS ARCHIVOS DE ESPACIO LIBRE Y TODO LO DEMAS !!!!!!!!
-        *FIXME: FALTA ACTUALIZAR LOS ARCHIVOS DE ESPACIO LIBRE Y TODO LO DEMAS !!!!!!!!
-        *FIXME: FALTA ACTUALIZAR LOS ARCHIVOS DE ESPACIO LIBRE Y TODO LO DEMAS !!!!!!!!
-       */
+       strcpy(name_f_block_reg,emu->nombre);
+       strcat(name_f_block_reg,".id3");
+       
+       strcpy(name_f_id,emu->nombre);
+       strcat(name_f_id,".idc");
+
+       strcpy(name_f_free,emu->nombre);
+       strcat(name_f_free,".fsc");
+       
+       
+       if ( (file = fopen(name_f,"a+"))==NULL ) return -1; /*ERROR*/
        /* 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 */
@@ -143,7 +153,7 @@ int grabar_registro(EMUFS *emu, void *ptr, unsigned long tam)
                /*cargo el bloque en "bloque"*/
                bloque = (char*)malloc(emu->tam_bloque);        
                if ( leer_bloque(emu,num_bloque,bloque)== -1) return -1; 
-               /*El error puede haberse producido porque la funcion buscar_lugar devolvio -1, el cual es un bloque invalido*/
+               /*El error puede haberse producido porque la funcion leer_bloque devolvio -1, el cual es un bloque invalido*/
                /*insertar el registro en el bloque*/
                /*tengo que buscar un ID valido para el nuevo registro*/
                ID_aux = get_id(emu);
@@ -154,6 +164,36 @@ int grabar_registro(EMUFS *emu, void *ptr, unsigned long tam)
                /*guardo el bloque en el archivo*/
                if ( grabar_bloque(emu, bloque, num_bloque) != 0) return -1; /* se produjo un error */  
        }
+
+       /*actualizo el archivo de id`s*/
+       if ( (f_id = fopen(name_f_id,"a+"))==NULL ) return -1; /*ERROR*/
+       fwrite(&ID_aux,sizeof(ID_aux),1,f_id);
+       fclose(f_id);
+
+       /*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 !!!*/
+       }
+       fclose(file);
+       /*cargo el registro*/
+       reg.block = cant; /*no incremento cant, porque grabe el nuevo bloque antes y no lo conte!!*/
+       reg.free_space = fs - tam;
+       /*lo guardo en el archivo al final  "a+"*/
+       if ( (f_block_free = fopen(name_f_free,"a+"))==NULL ) return -1; /*ERROR*/              
+       fwrite(&reg,sizeof(reg),1,f_block_free);
+       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*/
+       reg_b.block = reg.block;
+       reg_b.id_reg = ID_aux;
+       fwrite(&reg_b,sizeof(reg_b),1,f_block_reg);
+       fclose(f_block_reg);
+
        free(bloque);
        return ID_aux;
 }
@@ -192,7 +232,10 @@ int buscar_lugar(EMUFS *emu, unsigned long tam, int *fs)
                fread(&reg,sizeof(reg),1,f_block_free);
                if ( reg.free_space >= tam ) 
                        break;
-               else reg.block = -1;
+               else {
+                       reg.block = -1;
+                       *fs = emu->tam_bloque;
+               }
        }
        
        fclose(f_block_free);