]> git.llucax.com Git - z.facultad/75.06/emufs.git/blobdiff - emufs_gui/facturas.c
* BUGFIXs : Varios memory leaks
[z.facultad/75.06/emufs.git] / emufs_gui / facturas.c
index 966bd70178ca55ab9b47d03c1cad451bf42dbfad..f2ceeb2c5abf0c3ef6c30ab7e9ff6a9f871a41e9 100644 (file)
@@ -680,6 +680,15 @@ static int procesar_leer_factura(t_Factura *dst, void *src, EMUFS_REG_SIZE size,
        char *ini, *fin;
        int dummy;
 
+       if (lst == NULL) {
+               PERR("Puntero a lista NULO");
+               return 0;
+       }
+       if (lst->fp == NULL) {
+               PERR("EMUFS No creado!");
+               return 0;
+       }
+
        switch (lst->fp->tipo) {
                case T1:
                case T2:
@@ -756,3 +765,83 @@ static int procesar_leer_factura(t_Factura *dst, void *src, EMUFS_REG_SIZE size,
        return 0;
 }
 
+void fact_reformatear(int tipo, int tam_bloque, int tam_reg)
+{
+       EMUFS *nuevo, *old;
+       EMUFS_REG_ID *indices, id;
+       EMUFS_REG_SIZE indices_total, i, size, tam_reg1;
+       t_Factura fact;
+       t_LstFacturas *lst_nueva;
+       int error;
+       char *save;
+
+       PERR("==== EMPIEZO ====\n");
+       old = lst_facturas->fp;
+
+       /* Creo el nuevo file */
+       PERR("Creo el archivo\n");
+       if (tipo == T3) {
+               /* Me aseguro de que entren n items completos */
+               tam_reg1 = sizeof(t_Factura)-sizeof(char *)-sizeof(t_Item*)+10*sizeof(t_Item);
+       }
+       nuevo = emufs_crear("emufs_tmp", tipo, tam_bloque, tam_reg1);
+       if (nuevo == NULL) {
+               PERR("ARCHIVO NUEVO NO CREADO");
+               return;
+       }
+
+       /* Creo la nueva lista */
+       lst_nueva = (t_LstFacturas *)malloc(sizeof(t_LstFacturas));
+       lst_nueva->primero = NULL;
+       lst_nueva->fp = nuevo;
+
+       /* Leo los indices del archivo viejo */
+       PERR("Obtengo Indices\n");
+       indices = emufs_idx_get(old, &indices_total);
+       if (indices == NULL) {
+               fact_liberar(lst_nueva);
+               return;
+       }
+
+       PERR("Proceso datos\n");
+       for(i=0; i<indices_total; i++) {
+               error = 0;
+               save = old->leer_registro(old, indices[i], &size, &error);
+               if (procesar_leer_factura(&fact, save, size, lst_facturas) == 0) {
+                       free(save);
+                       /* Lei un registro Ok. Lo salvo en el archivo nuevo */
+                       save = procesar_guardar_factura(&fact, lst_nueva, &size);
+                       if (save) {
+                               error = 0;
+                               id = nuevo->grabar_registro(nuevo, save, size, &error);
+                               agregar_nodo_factura(lst_nueva, crear_nodo_factura(id, fact.reg_nota, fact.numero));
+                               free(save);
+                               if (fact.items) free(fact.items);
+                               if (fact.nota) free(fact.nota);
+                       }
+               }
+       }
+
+       free(indices);
+
+       PERR("Libero lo viejo\n");
+       fact_liberar(lst_facturas);
+
+       PERR("Ahora tengo lo nuevo\n");
+       lst_facturas = lst_nueva;
+
+       /* El nuevo tiene como nombre emufs_tmp, lo cambio a mano! */
+       free(lst_facturas->fp->nombre);
+       lst_facturas->fp->nombre = (char *)malloc(sizeof(char)*(strlen("facturas")+1));
+       strcpy(lst_facturas->fp->nombre, "facturas");
+       
+       /* Muevo los archivos! */
+       /* TODO : Poner en otro lugar mas generico! */
+       PERR("Renombre!!\n");
+       rename("emufs_tmp.dat", "facturas.dat");
+       rename("emufs_tmp.idx", "facturas.idx");
+       rename("emufs_tmp.fsc", "facturas.fsc");
+       rename("emufs_tmp.did", "facturas.did");
+       PERR("==== TERMINE ====\n");
+}
+