]> git.llucax.com Git - z.facultad/75.06/emufs.git/blob - tipo3/emufs.c
b55948967628b0699b7122cbc102bc6f3034bb19
[z.facultad/75.06/emufs.git] / tipo3 / emufs.c
1
2 #include "emufs.h"
3 #include "param_cte.h"
4
5 /* Defino las extenciones que usan cada tipo de archivo */
6 #define EXT_TIPO3_ID ".id3"
7 #define EXT_TIPO3_DATA ".dat"
8 #define EXT_TIPO3_DISP ".fsc"
9
10 char *str_dup(const char *s)
11 {
12         if (s == NULL) return NULL;
13         char *tmp = (char *)malloc(sizeof(char)*(strlen(s)+1));
14         strcpy(tmp, s);
15         return tmp;
16 }
17
18
19 EMUFS *emufs_crear(const char *filename, char tipo, unsigned int tam_bloque, unsigned int tam_reg)
20 {
21         char name[255];
22         FILE *fp;
23         EMUFS *tmp = (EMUFS *)malloc(sizeof(EMUFS));
24
25         switch (tipo) {
26                 case T1:
27                 break;
28                 case T2:
29                 break;
30                 case T3:
31                         tmp->tipo = T3;
32                         tmp->tam_bloque = tam_bloque;
33                         tmp->leer_bloque = leer_bloque;
34                         tmp->leer_registro = leer_registro;
35                         tmp->grabar_registro = grabar_registro;
36                         tmp->borrar_registro = NULL;
37                         tmp->nombre = str_dup(filename);
38
39                         strcpy(name, filename);
40                         strcat(name, EXT_TIPO3_DATA);
41                         fp = fopen(name, "w");
42                         if (fp == NULL) {
43                                 /* ERROR */
44                                 free(tmp->nombre);
45                                 free(tmp);
46                                 return NULL;
47                         }
48                         /* Guardo el Header */
49                         fwrite(&tipo, sizeof(char), 1, fp);
50                         fwrite(&tam_bloque, sizeof(unsigned int), 1, fp);
51                         fwrite(&tam_reg, sizeof(unsigned int), 1, fp);
52                         fclose(fp);
53                 break;
54                 default:
55                         free(tmp);
56                         return NULL;
57         }
58
59         return tmp;
60 }
61
62
63 int emufs_destruir(EMUFS *e)
64 {
65         if (e == NULL) return 1;
66         free(e->nombre);
67         free(e);
68         return 0;
69 }
70