]> git.llucax.com Git - z.facultad/75.06/emufs.git/blobdiff - emufs/emufs.c
Retoques en los reportes
[z.facultad/75.06/emufs.git] / emufs / emufs.c
index 0586999311cd71ebdad68700793712898567352f..cc33ee38472b0bba99cb1c7df259ee3eef0a1278 100644 (file)
@@ -475,3 +475,69 @@ int guardar_indice(EMUFS *emu, char *nombre, INDICE_FUNCION funcion, INDICE_TIPO
        return 1;
 }
 
+/*crea un bloque y devuelve en numero del mismo*/
+EMUFS_BLOCK_ID emufs_create_new_block(EMUFS *emu)
+{
+       FILE *fp;
+       char name[255];
+       char *dummy;
+       EMUFS_BLOCK_ID num;
+       
+       /* obtengo nombre del archivo */
+       strcpy(name, emu->nombre);
+       strcat(name,".dat");
+       
+       if ( (fp=fopen(name,"a+")) == NULL ){
+               PERR("NO SE PUDO ABRIR EL ARCHIVO");
+               return -1;
+       }
+       
+       dummy = (char*)malloc(emu->tam_bloque);
+       memset(dummy, 0, emu->tam_bloque);
+       fwrite(dummy, emu->tam_bloque, 1, fp);
+       switch(emu->tipo){
+               case T1: num = (ftell(fp)-sizeof(EMUFS_Tipo)+sizeof(EMUFS_BLOCK_SIZE))/emu->tam_bloque;
+                       break;
+               case T3: num = (ftell(fp)-sizeof(EMUFS_Tipo)+sizeof(EMUFS_BLOCK_SIZE)+sizeof(EMUFS_REG_SIZE))/emu->tam_bloque;
+       }
+       fclose(fp);
+       free(dummy);
+       return num;
+}
+
+/*devuelve un numero de bloque siguiente al ultimo*/
+EMUFS_BLOCK_ID emufs_get_new_block_number(EMUFS *emu)
+{
+       FILE *fp;
+       char name[255];
+       EMUFS_BLOCK_ID num;
+       
+       /* obtengo nombre del archivo */
+       strcpy(name, emu->nombre);
+       strcat(name,".dat");
+
+       if ( (fp=fopen(name,"a+")) == NULL ){
+               PERR("NO SE PUDO ABRIR EL ARCHIVO");
+               return -1;
+       }
+       switch(emu->tipo){
+               case T1: num = (ftell(fp)-sizeof(EMUFS_Tipo)+sizeof(EMUFS_BLOCK_SIZE))/emu->tam_bloque;
+                       break;
+               case T3: num = (ftell(fp)-sizeof(EMUFS_Tipo)+sizeof(EMUFS_BLOCK_SIZE)+sizeof(EMUFS_REG_SIZE))/emu->tam_bloque;
+       }
+       fclose(fp);
+       return num+1;
+}
+
+INDICE *emufs_buscar_indice_por_nombre(EMUFS *emu, const char *nombre)
+{
+       INDICE *tmp;
+
+       tmp = emu->indices;
+       while (tmp) {
+               if (strcmp(tmp->nombre, nombre) == 0) break;
+               tmp = tmp->sig;
+       }
+       return tmp;
+}
+