]> git.llucax.com Git - z.facultad/75.06/emufs.git/blobdiff - emufs/idx.c
* ADDED : TreeView para ver en pantalla el arbol B para debug personal
[z.facultad/75.06/emufs.git] / emufs / idx.c
index 50f3d1cd35c157944a7b3d23272fb658e188b4de..6e33fda41ed442fd5e803a91b8de93cb07a374af 100644 (file)
@@ -37,6 +37,8 @@
 
 #include "idx.h"
 #include "did.h"
 
 #include "idx.h"
 #include "did.h"
+#include "error.h"
+#include "common.h"
 #include <stdlib.h>
 #include <strings.h>
 #include <unistd.h>
 #include <stdlib.h>
 #include <strings.h>
 #include <unistd.h>
@@ -50,7 +52,6 @@ FILE* emufs_idx_abrir(EMUFS* efs, const char* mode)
        filename = (char*) malloc(sizeof(char) * (strlen(efs->nombre)
                                + strlen(EMUFS_IDX_EXT) + 1));
        if (filename == NULL) {
        filename = (char*) malloc(sizeof(char) * (strlen(efs->nombre)
                                + strlen(EMUFS_IDX_EXT) + 1));
        if (filename == NULL) {
-               /* TODO Manejo de errores */
                return NULL;
        }
        strcpy(filename, efs->nombre);
                return NULL;
        }
        strcpy(filename, efs->nombre);
@@ -80,7 +81,7 @@ EMUFS_REG_ID emufs_idx_buscar_mayor_id_libre(EMUFS* emu, int* err)
 
        if ((f_idx = fopen(name_f_idx, "rb")) == NULL) {
                PERR("No se puede abrir archivo");
 
        if ((f_idx = fopen(name_f_idx, "rb")) == NULL) {
                PERR("No se puede abrir archivo");
-               *err = 4; /* EMUFS_ERROR_CANT_OPEN_FILE */
+               *err = EMUFS_ERROR_CANT_OPEN_FILE;
                return EMUFS_NOT_FOUND;
        }
 
                return EMUFS_NOT_FOUND;
        }
 
@@ -115,7 +116,7 @@ EMUFS_BLOCK_ID emufs_idx_buscar_registro(EMUFS *emu, EMUFS_REG_ID reg_id)
        
        if ((f_idx = fopen(name_f_idx, "rb")) == NULL) {
                PERR("No se puede abrir archivo");
        
        if ((f_idx = fopen(name_f_idx, "rb")) == NULL) {
                PERR("No se puede abrir archivo");
-               /*    *err = 4; * EMUFS_ERROR_CANT_OPEN_FILE */
+               /* *err = EMUFS_ERROR_CANT_OPEN_FILE; */
                return EMUFS_NOT_FOUND;
        }
 
                return EMUFS_NOT_FOUND;
        }
 
@@ -131,7 +132,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;
@@ -215,10 +215,11 @@ 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 */
-               tmp = realloc(tmp, count);
-               tmp[count-1] = reg.id_reg;
+               if (reg.location != EMUFS_NOT_FOUND) {
+                       count++;
+                       tmp = realloc(tmp, count*sizeof(EMUFS_REG_ID));
+                       tmp[count-1] = reg.id_reg;
+               }
        }
        fclose(f_idx);
 
        }
        fclose(f_idx);
 
@@ -226,6 +227,10 @@ EMUFS_REG_ID *emufs_idx_get(EMUFS *emu, EMUFS_REG_ID *cant)
        return tmp;
 }
 
        return tmp;
 }
 
+/** @todo FIXME borrar cuando se cambie emufs_gui/registros.c que es el unico
+ * que lo usa.
+ * @deprecated Usar emufs_idx_buscar_registro.
+ */
 int emufs_idx_existe_id(EMUFS *emu, int ID)
 {
        FILE *f_idx;
 int emufs_idx_existe_id(EMUFS *emu, int ID)
 {
        FILE *f_idx;
@@ -242,13 +247,13 @@ int emufs_idx_existe_id(EMUFS *emu, int ID)
        
        if (fseek(f_idx, sizeof(EMUFS_IDX)*ID, SEEK_SET) == 0) {
                fread(&reg, sizeof(EMUFS_IDX), 1, f_idx);
        
        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 (reg.location != EMUFS_NOT_FOUND) {
                        fclose(f_idx);
                        fclose(f_idx);
-                       return -1;
+                       return 0;
                }
        }
        fclose(f_idx);
                }
        }
        fclose(f_idx);
-       return 0;/*no existe el id*/
+       return -1;/*no existe el id*/
 }
 
 int emufs_idx_actualizar(EMUFS *emu, int ID, EMUFS_BLOCK_ID bloque)
 }
 
 int emufs_idx_actualizar(EMUFS *emu, int ID, EMUFS_BLOCK_ID bloque)
@@ -264,8 +269,7 @@ int emufs_idx_actualizar(EMUFS *emu, int ID, EMUFS_BLOCK_ID 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,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;
@@ -274,3 +278,12 @@ int emufs_idx_actualizar(EMUFS *emu, int ID, EMUFS_BLOCK_ID bloque)
        fclose(f_idx);
        return 0;
 }
        fclose(f_idx);
        return 0;
 }
+
+long emufs_idx_get_file_size(EMUFS* efs, int* err)
+{
+       char name[255];
+       strcpy(name, efs->nombre);
+       strcat(name, EMUFS_IDX_EXT);
+       return emufs_common_get_file_size(name, err);
+}
+