]> git.llucax.com Git - z.facultad/75.06/emufs.git/commitdiff
por lo pronto parece que anda, hice un par de pruebas y anduvo jamon, pero me queda...
authorNicolás Dimov <ndimov@gmail.com>
Thu, 15 Apr 2004 18:41:17 +0000 (18:41 +0000)
committerNicolás Dimov <ndimov@gmail.com>
Thu, 15 Apr 2004 18:41:17 +0000 (18:41 +0000)
emufs/idx.c
emufs/idx.h
emufs/tipo3.c
emufs/tipo3_main.c

index cb2ff78b15e2592f44c42eb33260576a4e02750e..dcf57c59831562141069c1962d21f05ac0db0a5c 100644 (file)
@@ -251,3 +251,26 @@ int emufs_idx_existe_id(EMUFS *emu, int ID)
        fclose(f_idx);
        return -1;
 }
        fclose(f_idx);
        return -1;
 }
+
+int emufs_idx_actualizar(EMUFS *emu, int ID, int bloque)
+{
+       FILE *f_idx;
+       char name_f_idx[255];
+       EMUFS_IDX reg;
+       
+       strcpy(name_f_idx,emu->nombre);
+       strcat(name_f_idx, EMUFS_IDX_EXT);
+
+       if ( (f_idx = fopen(name_f_idx, "r+")) == NULL){
+               PERR("No se pudo abrir el archivo");
+               return -1;
+       }
+       
+       fseek(f_idx,ID*sizeof(EMUFS_IDX),SEEK_SET);
+       fread(&reg,sizeof(EMUFS_IDX),1,f_idx);
+       reg.location = bloque;
+       fseek(f_idx,-sizeof(EMUFS_IDX),SEEK_CUR);
+       fwrite(&reg,sizeof(EMUFS_IDX),1,f_idx);
+       fclose(f_idx);
+       return 0;
+}
index c6a927515505d9cc92992546f7c2912d63d0cb69..1ceccc9dfea9ec34c6361b13dace9a530f0e7e9f 100644 (file)
@@ -73,4 +73,6 @@ EMUFS_REG_ID emufs_idx_get_new_id(EMUFS*, int*);
 
 int emufs_idx_existe_id(EMUFS *emu, int ID);
 
 
 int emufs_idx_existe_id(EMUFS *emu, int ID);
 
+int emufs_idx_actualizar(EMUFS *emu, int ID, int bloque);
+
 #endif /* _EMUFS_IDX_H */
 #endif /* _EMUFS_IDX_H */
index fe46251f21c04f4fabc32f37df5f509aa762281f..2c24174d40adf6de01400f242d316dce6516f931 100644 (file)
@@ -187,9 +187,13 @@ EMUFS_REG_ID emufs_tipo3_grabar_registro(EMUFS *emu, void *ptr, EMUFS_REG_SIZE t
 
                        if (i == 0) {
                                /* Tengo que agregar el primer bloque en IDX */
 
                        if (i == 0) {
                                /* Tengo que agregar el primer bloque en IDX */
-                               if ( emufs_idx_agregar(emu, ID_aux, num_bloque) != 0 ){
-                                       free(bloque);
-                                       return -1;
+                               if ( emufs_idx_existe_id(emu,ID_aux) != 0){
+                                       emufs_idx_actualizar(emu,ID_aux,num_bloque);
+                               } else {
+                                       if ( emufs_idx_agregar(emu, ID_aux, num_bloque) != 0 ){
+                                               free(bloque);
+                                               return -1;
+                                       }
                                }
                        }
                        /* grabo el nuevo registro en el archivo de espacios libres */
                                }
                        }
                        /* grabo el nuevo registro en el archivo de espacios libres */
index f4fd20f655d13449f900e0f58a1270178a991422..317c1aee8504aa313f6258a2195ec3d10f3f8bc6 100644 (file)
@@ -58,12 +58,6 @@ int main(int argc, char *argv[])
                printf("Modo de uso : %s tam_bloque\n", argv[0]);
                return 1;
        }
                printf("Modo de uso : %s tam_bloque\n", argv[0]);
                return 1;
        }
-/*
-       if (atoi(argv[1]) < 104) {
-               printf("El tamaño de bloque debe ser mayor a 104\n");
-               return 1;
-       }
-*/
        strcpy(a, "1234567890");
        strcpy(c, "REGISTRO NUMERO 2. ESTE REGISTRO ES MUCHO MAS LARGO QUE EL UNO");
        strcpy(d, "ABCDEFGHIJKL");
        strcpy(a, "1234567890");
        strcpy(c, "REGISTRO NUMERO 2. ESTE REGISTRO ES MUCHO MAS LARGO QUE EL UNO");
        strcpy(d, "ABCDEFGHIJKL");
@@ -75,9 +69,7 @@ int main(int argc, char *argv[])
        
        fp = emufs_crear("articulos", T3, atoi(argv[1]), 100);
 
        
        fp = emufs_crear("articulos", T3, atoi(argv[1]), 100);
 
-       printf("pase0\n");
        n1 = fp->grabar_registro(fp, a, 100, &err);
        n1 = fp->grabar_registro(fp, a, 100, &err);
-       printf("pase1\n");
        n2 = fp->grabar_registro(fp, c, 100, &err);
        n3 = fp->grabar_registro(fp, d, 100, &err);
        n4 = fp->grabar_registro(fp, e, 100, &err);
        n2 = fp->grabar_registro(fp, c, 100, &err);
        n3 = fp->grabar_registro(fp, d, 100, &err);
        n4 = fp->grabar_registro(fp, e, 100, &err);
@@ -86,27 +78,22 @@ int main(int argc, char *argv[])
        n7 = fp->grabar_registro(fp, h, 100, &err);
        n8 = fp->grabar_registro(fp, i, 100, &err);
 
        n7 = fp->grabar_registro(fp, h, 100, &err);
        n8 = fp->grabar_registro(fp, i, 100, &err);
 
-/*     
-       fp->borrar_registro(fp, n1);
-       fp->borrar_registro(fp, n2);
-       fp->borrar_registro(fp, n3);
-       fp->borrar_registro(fp, n4);
-       fp->borrar_registro(fp, n5);
-/*     if ( fp->borrar_registro(fp, n6) == -1) printf("la cague %d\n",n6);     
-       if ( fp->borrar_registro(fp, n7) == -1) printf("la cague %d\n",n7);
-       if ( fp->borrar_registro(fp, n8) == -1) printf("la cague %d\n",n8);     
-       */
        ver_archivo_FS(fp);
        fp->borrar_registro(fp, n3);
        fp->borrar_registro(fp, n4);
        ver_archivo_FS(fp);
        fp->borrar_registro(fp, n3);
        fp->borrar_registro(fp, n4);
-       printf("pase3\n");
-       /*n6 = fp->grabar_registro(fp, g, 100, &err);*/
-       printf("pase4\n");
-       b_ptr = fp->leer_registro(fp, n7, &reg_size, &err);
        
        
+       n6 = fp->grabar_registro(fp, g, 100, &err);
+       b_ptr = fp->leer_registro(fp, n6, &reg_size, &err);
        printf("Recuperado : %s\n", b_ptr);
        printf("Recuperado : %s\n", b_ptr);
+       
+       fp->borrar_registro(fp, n5);
+       fp->borrar_registro(fp, n6);
+       
+       n4 = fp->grabar_registro(fp, h, 100, &err);
+       b_ptr = fp->leer_registro(fp, n2, &reg_size, &err);
+       printf("Recuperado : %s\n", b_ptr);
+       
        free(b_ptr);
        free(b_ptr);
-
        ver_archivo_FS(fp);
        /*s = fp->leer_estadisticas(fp);
        printf("tam_archivo = %d\ntam_archivo_bytes = %d\ninfo_control = %d\n",s.tam_archivo,s.tam_archivo_bytes,s.info_control);
        ver_archivo_FS(fp);
        /*s = fp->leer_estadisticas(fp);
        printf("tam_archivo = %d\ntam_archivo_bytes = %d\ninfo_control = %d\n",s.tam_archivo,s.tam_archivo_bytes,s.info_control);