X-Git-Url: https://git.llucax.com/z.facultad/75.06/emufs.git/blobdiff_plain/0a8c25d48c0fa1602556582885e33426cb2e05fa..f68323b8913e191679584b23568aa162760bbd64:/emufs/emufs.c?ds=sidebyside diff --git a/emufs/emufs.c b/emufs/emufs.c index 7ddd4bd..148ccc4 100644 --- a/emufs/emufs.c +++ b/emufs/emufs.c @@ -40,6 +40,7 @@ #include "emufs.h" #include "tipo1.h" +#include "tipo2.h" #include "tipo3.h" #include "did.h" #include "fsc.h" @@ -78,9 +79,7 @@ int emufs_crear_archivo_auxiliar(const char* name, const char* ext) return 0; } - -EMUFS *emufs_crear(const char *filename, EMUFS_TYPE tipo, - EMUFS_BLOCK_SIZE tam_bloque, EMUFS_REG_SIZE tam_reg) +EMUFS *emufs_crear(const char *filename, EMUFS_Tipo tipo, EMUFS_BLOCK_SIZE tam_bloque, EMUFS_REG_SIZE tam_reg) { char name[255]; FILE *fp; @@ -96,9 +95,10 @@ EMUFS *emufs_crear(const char *filename, EMUFS_TYPE tipo, if (efs == NULL) { return NULL; } - efs->tipo = tipo; + efs->tipo = tipo; efs->tam_bloque = tam_bloque; - efs->nombre = str_dup(filename); + efs->tam_reg = tam_reg; + efs->nombre = str_dup(filename); /* Abre archivo de datos. */ strcpy(name, filename); @@ -112,7 +112,7 @@ EMUFS *emufs_crear(const char *filename, EMUFS_TYPE tipo, } /* Guarda cabecera común. */ - fwrite(&tipo, sizeof(EMUFS_TYPE), 1, fp); + fwrite(&tipo, sizeof(EMUFS_Tipo), 1, fp); /* Crea archivo de índice. */ if (emufs_idx_crear(efs)) { @@ -142,6 +142,7 @@ EMUFS *emufs_crear(const char *filename, EMUFS_TYPE tipo, switch (tipo) { case T1: + /* Asigna punteros a funciones. */ emufs_tipo1_inicializar(efs); /* Guarda cabeceras propias. */ @@ -150,6 +151,8 @@ EMUFS *emufs_crear(const char *filename, EMUFS_TYPE tipo, break; case T2: + /* Asigna punteros a funciones. */ + emufs_tipo2_inicializar(efs); break; case T3: @@ -161,8 +164,7 @@ EMUFS *emufs_crear(const char *filename, EMUFS_TYPE tipo, /* Guarda cabeceras propias. */ fwrite(&tam_bloque, sizeof(EMUFS_BLOCK_SIZE), 1, fp); - fwrite(&tam_reg, sizeof(EMUFS_REG_SIZE), 1, fp); - + fwrite(&tam_reg, sizeof(EMUFS_REG_SIZE), 1, fp); break; } @@ -184,7 +186,7 @@ EMUFS *emufs_abrir(const char *filename) /* Trato de determinar el tipo de archivo */ fp = fopen(name, "r"); if (fp == NULL) return NULL; - fread(&tipo, sizeof(EMUFS_TYPE), 1, fp); + fread(&tipo, sizeof(EMUFS_Tipo), 1, fp); /* Si no es un tipo conocido, sale. */ if ((tipo != T1) && (tipo != T2) && (tipo != T3)) { @@ -203,6 +205,7 @@ EMUFS *emufs_abrir(const char *filename) switch (tipo) { case T1: + /* Asigna punteros a funciones. */ emufs_tipo1_inicializar(efs); /* Lee cabeceras propias. */ if (!fread(&(efs->tam_bloque), sizeof(EMUFS_BLOCK_SIZE), 1, fp)) { @@ -213,15 +216,19 @@ EMUFS *emufs_abrir(const char *filename) } break; case T2: + /* Asigna punteros a funciones. */ + emufs_tipo2_inicializar(efs); break; case T3: - if (!fread(&(efs->tam_bloque), sizeof(EMUFS_BLOCK_SIZE), 1, fp)) { + if ((!fread(&(efs->tam_bloque), sizeof(EMUFS_BLOCK_SIZE), 1, fp)) || + (!fread(&(efs->tam_reg), sizeof(EMUFS_REG_SIZE), 1, fp))) + { free(efs->nombre); free(efs); fclose(fp); return NULL; - } - /* FIXME no falta leer el tamaño del registro???? */ + } + /* Asigna punteros a funciones. */ efs->leer_bloque = emufs_tipo3_leer_bloque; efs->leer_registro = emufs_tipo3_leer_registro; efs->grabar_registro = emufs_tipo3_grabar_registro; @@ -256,14 +263,14 @@ int ver_archivo_FS(EMUFS *emu) } fread(®,sizeof(reg),1,f_block_free); while ( !feof(f_block_free) ){ - printf(" Bloque = %d Espacio libre = %d\n",reg.block, reg.free_space); + fprintf(stderr, " Bloque = %li Espacio libre = %li\n",reg.marker, reg.freespace); fread(®,sizeof(reg),1,f_block_free); } fclose(f_block_free); /* Imprimo la lista de bloques/registros */ - printf("BLOQUES Y REGISTROS\n"); + fprintf(stderr, "BLOQUES Y REGISTROS\n"); strcpy(name_f_block_free,emu->nombre); strcat(name_f_block_free,".idx"); { @@ -271,7 +278,7 @@ int ver_archivo_FS(EMUFS *emu) f_block_free = fopen(name_f_block_free, "r"); fread(&r, sizeof(EMUFS_IDX), 1, f_block_free); while (!feof(f_block_free)) { - printf("ID %ld en bloque %d\n", r.id_reg, r.block); + fprintf(stderr, "ID %li en bloque %li\n", r.id_reg, r.location); fread(&r, sizeof(EMUFS_IDX), 1, f_block_free); } fclose(f_block_free);