X-Git-Url: https://git.llucax.com/z.facultad/75.06/emufs.git/blobdiff_plain/ee3853f9b2bed3fa3a1f3a90c8dca81686d39fc8..HEAD:/emufs/emufs.c?ds=inline diff --git a/emufs/emufs.c b/emufs/emufs.c index 067c445..3adab5e 100644 --- a/emufs/emufs.c +++ b/emufs/emufs.c @@ -257,7 +257,7 @@ EMUFS *emufs_abrir(const char *filename) fread(&tipo, sizeof(EMUFS_Tipo), 1, fp); /* Si no es un tipo conocido, sale. */ - if ((tipo != T1) && (tipo != T2) && (tipo != T3)) { + if ((tipo != T1) && (tipo != T2) && (tipo != T3) && (tipo != T4) && (tipo != T5)) { fclose(fp); return NULL; } @@ -275,6 +275,7 @@ EMUFS *emufs_abrir(const char *filename) case T1: /* Lee cabeceras propias. */ if (!fread(&(efs->tam_bloque), sizeof(EMUFS_BLOCK_SIZE), 1, fp)) { + PERR("ERROR Tipo1 no se pudo leer cabecera"); free(efs->nombre); free(efs); fclose(fp); @@ -295,6 +296,7 @@ EMUFS *emufs_abrir(const char *filename) if ((!fread(&(efs->tam_bloque), sizeof(EMUFS_BLOCK_SIZE), 1, fp)) || (!fread(&(efs->tam_reg), sizeof(EMUFS_REG_SIZE), 1, fp))) { + PERR("ERROR Tipo3 no se pudo leer header"); free(efs->nombre); free(efs); fclose(fp); @@ -326,6 +328,8 @@ EMUFS *emufs_abrir(const char *filename) } /* Asigna punteros a funciones. */ emufs_tipo5_inicializar(efs); + default: + PERR("EMUFS TIPO NO SOPORTADO"); } /* finalmente cargo la data de los indices */ @@ -345,7 +349,7 @@ int emufs_destruir(EMUFS *e) while (cur) { del = cur; cur = cur->sig; - emufs_indice_destruir(e, cur); + emufs_indice_destruir(e, del); } free(e->nombre); @@ -464,6 +468,7 @@ int emufs_agregar_indice(EMUFS *emu, char *nombre, INDICE_FUNCION funcion, INDIC return 0; } + tmp->sig = NULL; if (emu->indices==NULL) emu->indices = tmp; else { @@ -550,14 +555,18 @@ int cargar_indices(EMUFS *emu) return 0; } + emu->indices = NULL; fread(&cant, 1, sizeof(int), fp); + if (cant == 0) { + PERR("NO HAY INDICES EN ESTE ARCHIVO"); + return 1; + } indices = malloc(cant*sizeof(t_Indice)); fread(indices, cant, sizeof(t_Indice), fp); fclose(fp); /* Leo */ - emu->indices = NULL; - for(i=cant-1; i>=0; i++) { + for(i=0; isig = emu->indices; - emu->indices = tmp; + PERR(indices[i].nombre); + if (emu->indices==NULL) + emu->indices = tmp; + else { + tmp->sig = emu->indices; + emu->indices = tmp; + } } free(indices);