X-Git-Url: https://git.llucax.com/z.facultad/75.06/emufs.git/blobdiff_plain/7ea1065532dc62464c0172076c8985aaec617e90..db30ec34669e71266f038fcf7cb2386fa210d531:/emufs/emufs.c?ds=sidebyside diff --git a/emufs/emufs.c b/emufs/emufs.c index 734c936..760fc49 100644 --- a/emufs/emufs.c +++ b/emufs/emufs.c @@ -101,6 +101,7 @@ EMUFS *emufs_crear(const char *filename, EMUFS_Tipo tipo, EMUFS_BLOCK_SIZE tam_b efs->tam_bloque = tam_bloque; efs->tam_reg = tam_reg; efs->nombre = str_dup(filename); + efs->indices = NULL; /* Abre archivo de datos. */ strcpy(name, filename); @@ -119,6 +120,7 @@ EMUFS *emufs_crear(const char *filename, EMUFS_Tipo tipo, EMUFS_BLOCK_SIZE tam_b /* Crea archivo de índice. */ if (emufs_idx_crear(efs)) { /* TODO ERROR */ + fclose(fp); free(efs->nombre); free(efs); return NULL; @@ -127,6 +129,7 @@ EMUFS *emufs_crear(const char *filename, EMUFS_Tipo tipo, EMUFS_BLOCK_SIZE tam_b /* Crea archivo de control de espacio libre. */ if (emufs_fsc_crear(efs)) { /* TODO ERROR */ + fclose(fp); free(efs->nombre); free(efs); return NULL; @@ -135,6 +138,7 @@ EMUFS *emufs_crear(const char *filename, EMUFS_Tipo tipo, EMUFS_BLOCK_SIZE tam_b /* Crea archivo de identificadores borrados (recuperables). */ if (emufs_did_crear(efs)) { /* TODO ERROR */ + fclose(fp); free(efs->nombre); free(efs); return NULL; @@ -148,6 +152,7 @@ EMUFS *emufs_crear(const char *filename, EMUFS_Tipo tipo, EMUFS_BLOCK_SIZE tam_b if ((err = emufs_tipo1_inicializar(efs))) { /* TODO ERROR */ PERR("No se pudo inicializar el EMUFS de tipo1"); + fclose(fp); free(efs->nombre); free(efs); return NULL; @@ -337,3 +342,19 @@ int debug_ver_estadisticas(EMUFS* efs) return 0; } +int emufs_agregar_indice(EMUFS *emu, char *nombre, INDICE_TIPO tipo, INDICE_TIPO_DATO tipo_dato, unsigned int offset) +{ + INDICE *tmp; + tmp = emufs_indice_crear(emu, nombre, tipo, tipo_dato, offset); + + if (tmp == NULL) return 0; + + if (emu->indices==NULL) + emu->indices = tmp; + else { + tmp->sig = emu->indices; + emu->indices = tmp; + } + return 1; +} +