]> git.llucax.com Git - z.facultad/75.06/emufs.git/blobdiff - emufs/idx.c
* Bugfix en idx_get para saltar los registros no utilizados
[z.facultad/75.06/emufs.git] / emufs / idx.c
index dcf57c59831562141069c1962d21f05ac0db0a5c..8b4f969a922b1c2e3df7e99ad6abdb5a6f266202 100644 (file)
@@ -131,7 +131,6 @@ EMUFS_BLOCK_ID emufs_idx_buscar_registro(EMUFS *emu, EMUFS_REG_ID reg_id)
        return EMUFS_NOT_FOUND;
 }
 
        return EMUFS_NOT_FOUND;
 }
 
-/* agrega un registro al final del archivo */
 int emufs_idx_agregar(EMUFS *emu, EMUFS_REG_ID id_reg, EMUFS_BLOCK_ID location)
 {
        FILE *f_idx;
 int emufs_idx_agregar(EMUFS *emu, EMUFS_REG_ID id_reg, EMUFS_BLOCK_ID location)
 {
        FILE *f_idx;
@@ -141,7 +140,7 @@ int emufs_idx_agregar(EMUFS *emu, EMUFS_REG_ID id_reg, EMUFS_BLOCK_ID location)
        strcpy(name_f_idx,emu->nombre);
        strcat(name_f_idx, EMUFS_IDX_EXT);
 
        strcpy(name_f_idx,emu->nombre);
        strcat(name_f_idx, EMUFS_IDX_EXT);
 
-       if ( (f_idx = fopen(name_f_idx,"a+b"))==NULL ) return -1;
+       if ( (f_idx = fopen(name_f_idx,"a+"))==NULL ) return -1;
 
        fseek(f_idx, sizeof(EMUFS_IDX)*id_reg, SEEK_SET); 
        reg.id_reg = id_reg;
 
        fseek(f_idx, sizeof(EMUFS_IDX)*id_reg, SEEK_SET); 
        reg.id_reg = id_reg;
@@ -215,14 +214,18 @@ EMUFS_REG_ID *emufs_idx_get(EMUFS *emu, EMUFS_REG_ID *cant)
        count = 0;
        while (!feof(f_idx)) {
                if (fread(&reg, sizeof(EMUFS_IDX), 1, f_idx) != 1) continue;
        count = 0;
        while (!feof(f_idx)) {
                if (fread(&reg, sizeof(EMUFS_IDX), 1, f_idx) != 1) continue;
-               count++;
                /* TODO : Verificar errores :-D */
                /* TODO : Verificar errores :-D */
-               tmp = realloc(tmp, count);
-               tmp[count-1] = reg.id_reg;
+               if (reg.location != EMUFS_NOT_FOUND) {
+                       count++;
+                       tmp = realloc(tmp, count);
+                       tmp[count-1] = reg.id_reg;
+                       fprintf(stderr, "Nuevo registro de id = %lu\n", reg.id_reg);
+               }
        }
        fclose(f_idx);
 
        (*cant) = count;
        }
        fclose(f_idx);
 
        (*cant) = count;
+       fprintf(stderr, "Mando %d registros\n", count);
        return tmp;
 }
 
        return tmp;
 }
 
@@ -239,7 +242,7 @@ int emufs_idx_existe_id(EMUFS *emu, int ID)
                PERR("No se pudo abrir el archivo");
                return -1;
        }
                PERR("No se pudo abrir el archivo");
                return -1;
        }
-
+       
        if (fseek(f_idx, sizeof(EMUFS_IDX)*ID, SEEK_SET) == 0) {
                fread(&reg, sizeof(EMUFS_IDX), 1, f_idx);
                if (reg.location != EMUFS_NOT_FOUND) {
        if (fseek(f_idx, sizeof(EMUFS_IDX)*ID, SEEK_SET) == 0) {
                fread(&reg, sizeof(EMUFS_IDX), 1, f_idx);
                if (reg.location != EMUFS_NOT_FOUND) {
@@ -247,12 +250,11 @@ int emufs_idx_existe_id(EMUFS *emu, int ID)
                        return 0;
                }
        }
                        return 0;
                }
        }
-
        fclose(f_idx);
        fclose(f_idx);
-       return -1;
+       return -1;/*no existe el id*/
 }
 
 }
 
-int emufs_idx_actualizar(EMUFS *emu, int ID, int bloque)
+int emufs_idx_actualizar(EMUFS *emu, int ID, EMUFS_BLOCK_ID bloque)
 {
        FILE *f_idx;
        char name_f_idx[255];
 {
        FILE *f_idx;
        char name_f_idx[255];
@@ -265,7 +267,8 @@ int emufs_idx_actualizar(EMUFS *emu, int ID, int bloque)
                PERR("No se pudo abrir el archivo");
                return -1;
        }
                PERR("No se pudo abrir el archivo");
                return -1;
        }
-       
+       printf("actualice el id = %d\n",ID);
+       fseek(f_idx,0,SEEK_SET);
        fseek(f_idx,ID*sizeof(EMUFS_IDX),SEEK_SET);
        fread(&reg,sizeof(EMUFS_IDX),1,f_idx);
        reg.location = bloque;
        fseek(f_idx,ID*sizeof(EMUFS_IDX),SEEK_SET);
        fread(&reg,sizeof(EMUFS_IDX),1,f_idx);
        reg.location = bloque;