]> git.llucax.com Git - z.facultad/75.06/emufs.git/blob - emufs/fsc.c
Faltan reemplazar un par de llamadas e implementar un par de funciones mas, pero...
[z.facultad/75.06/emufs.git] / emufs / fsc.c
1 #include "fsc.h"
2 #include "tipo3.h"
3
4 int emufs_fsc_agregar(EMUFS *emu, int num_bloque, int fs)
5 {
6         FILE *f_fsc;
7         BLOCK_FREE_T reg;
8         char name_f_fsc[255];
9         
10         strcpy(name_f_fsc,emu->nombre);
11         strcat(name_f_fsc,".fsc");
12         
13         /*cargo el registro*/
14         reg.block = num_bloque; /*no incremento cant, porque grabe el nuevo bloque antes y no lo conte!!*/
15         reg.free_space = fs;
16         /*lo guardo en el archivo al final  "a+"*/
17         if ( (f_fsc = fopen(name_f_fsc,"a+"))==NULL ) return -1;
18         fwrite(&reg,sizeof(BLOCK_FREE_T),1,f_fsc);
19         fclose(f_fsc);
20         return 0;
21 }
22
23 int emufs_fsc_actualizar(EMUFS *emu, int num_bloque, int fs)
24 {
25         FILE *f_fsc;
26         BLOCK_FREE_T reg;
27         char name_f_fsc[255];
28         
29         strcpy(name_f_fsc,emu->nombre);
30         strcat(name_f_fsc,".fsc");
31
32         /*busco el bloque que modifique*/
33         if ( (f_fsc = fopen(name_f_fsc,"r+")) == NULL) return -1; 
34         while ( !feof(f_fsc) ){
35                 if ( fread(&reg,sizeof(BLOCK_FREE_T),1,f_fsc) != 1) continue;
36                 if ( reg.block == num_bloque ){
37                         reg.free_space -= fs;
38                         fseek(f_fsc,-sizeof(BLOCK_FREE_T),SEEK_CUR);
39                         fwrite(&reg,sizeof(BLOCK_FREE_T),1,f_fsc);
40                         break;
41                 }
42         }
43         fclose(f_fsc);
44         return 0;
45 }