X-Git-Url: https://git.llucax.com/z.facultad/75.06/emufs.git/blobdiff_plain/4905645b9485987df5d6a5a898c5c6d50ebeab31..2bbb263b7b66a8b883e1700cdf4552369b17696e:/emufs_gui/facturas.c?ds=inline diff --git a/emufs_gui/facturas.c b/emufs_gui/facturas.c index 9e791cf..f940890 100644 --- a/emufs_gui/facturas.c +++ b/emufs_gui/facturas.c @@ -132,7 +132,7 @@ t_LstFacturas *fact_cargar(const char *filename, int tipo, int tam_bloque) int error = 0, cant_items; EMUFS_REG_SIZE size; t_LstFacturas *tmp; - EMUFS_REG_ID id, id_texto; /*, *indices, indices_cant;*/ + EMUFS_REG_ID id; /*, *indices, indices_cant;*/ lst_facturas = NULL; @@ -144,6 +144,8 @@ t_LstFacturas *fact_cargar(const char *filename, int tipo, int tam_bloque) if (filename != NULL) { document = xmlReadFile(filename, "ISO-8859-1",0); if (document == NULL) { + free(tmp); + lst_facturas = NULL; return NULL; } @@ -190,13 +192,14 @@ t_LstFacturas *fact_cargar(const char *filename, int tipo, int tam_bloque) fact.nota = leer_nota(node); fact.items = leer_items(node, &fact.cant_items, (tipo==3)?10:-1); + error = 0; + id = tmp->fp_texto->grabar_registro(tmp->fp_texto, fact.nota, strlen(fact.nota)+1, &error); + fact.reg_nota = id; save = procesar_guardar_factura(&fact, lst_facturas, &size); if (save != NULL) { error = 0; id = tmp->fp->grabar_registro(tmp->fp, save, size, &error); - error = 0; - id_texto = tmp->fp_texto->grabar_registro(tmp->fp_texto, fact.nota, strlen(fact.nota)+1, &error); - agregar_nodo_factura(tmp, crear_nodo_factura(id, id_texto, fact.numero)); + agregar_nodo_factura(tmp, crear_nodo_factura(id, fact.reg_nota, fact.numero)); if (fact.items) free(fact.items); if (fact.nota) free(fact.nota); free(save); @@ -251,12 +254,14 @@ t_Factura *fact_buscar(t_LstFacturas *lst, int numero, EMUFS_REG_ID *id, EMUFS_R while (reg) { if (reg->numero == numero) { size = 0; - fprintf(stderr, "Leer me dice que %lu\n", size); error = 0; leo = lst->fp->leer_registro(lst->fp, reg->num_reg, &size, &error); - fprintf(stderr, "Leer me dice que %lu\n", size); if (leo != NULL) { fact = (t_Factura *)malloc(sizeof(t_Factura)); + if (fact == NULL) { + free(leo); + return NULL; + } procesar_leer_factura(fact, leo, size, lst); (*id) = reg->num_reg; (*id_texto) = reg->texto_reg; @@ -415,7 +420,7 @@ void fact_agregar(char *s) t_Item *its = NULL; t_Factura fact; EMUFS_REG_SIZE size; - EMUFS_REG_ID id, id_texto; + EMUFS_REG_ID id; /*, id_texto;*/ int y_actual, cant, error; char *entrada; @@ -523,7 +528,7 @@ void fact_agregar(char *s) void *procesar_guardar_factura(t_Factura *f, t_LstFacturas *lst, EMUFS_REG_SIZE *size) { char *tmp=NULL; - int i[11]; + int i[12]; switch (lst->fp->tipo) { case T1: @@ -533,14 +538,15 @@ void *procesar_guardar_factura(t_Factura *f, t_LstFacturas *lst, EMUFS_REG_SIZE i[1] = sizeof(float); i[2] = sizeof(int); i[3] = sizeof(int); - i[4] = sizeof(char)*(strlen(f->emision)+1); /* +1 por el \0 para separar */ - i[5] = sizeof(char)*(strlen(f->vencimiento)+1); /* +1 por el \0 para separar */ - i[6] = sizeof(char)*(strlen(f->estado)+1); /* +1 por el \0 para separar */ - i[7] = sizeof(char)*(strlen(f->fp)+1); /* +1 por el \0 para separar */ - i[8] = sizeof(char)*(strlen(f->ctacte)+1); /* +1 por el \0 para separar */ - i[9] = sizeof(char)*(strlen(f->cheque)+1); /* +1 por el \0 para separar */ - i[10] = sizeof(t_Item)*f->cant_items; - (*size) = i[0]+i[1]+i[2]+i[3]+i[4]+i[5]+i[6]+i[7]+i[8]+i[9]+i[10]; + i[4] = sizeof(EMUFS_BLOCK_ID); + i[5] = sizeof(char)*(strlen(f->emision)+1); /* +1 por el \0 para separar */ + i[6] = sizeof(char)*(strlen(f->vencimiento)+1); /* +1 por el \0 para separar */ + i[7] = sizeof(char)*(strlen(f->estado)+1); /* +1 por el \0 para separar */ + i[8] = sizeof(char)*(strlen(f->fp)+1); /* +1 por el \0 para separar */ + i[9] = sizeof(char)*(strlen(f->ctacte)+1); /* +1 por el \0 para separar */ + i[10] = sizeof(char)*(strlen(f->cheque)+1); /* +1 por el \0 para separar */ + i[11] = sizeof(t_Item)*f->cant_items; + (*size) = i[0]+i[1]+i[2]+i[3]+i[4]+i[5]+i[6]+i[7]+i[8]+i[9]+i[10]+i[11]; tmp = (char *)malloc(*size); if (tmp == NULL) return NULL; memset(tmp, 0, *size); @@ -549,13 +555,14 @@ void *procesar_guardar_factura(t_Factura *f, t_LstFacturas *lst, EMUFS_REG_SIZE memcpy(tmp, &f->procdoi, i[1]); memcpy(tmp, &f->numero_remito, i[2]); memcpy(tmp, &f->cant_items, i[3]); - memcpy(tmp+i[0]+i[1]+i[2]+i[3], f->emision, i[4]); - memcpy(tmp+i[0]+i[1]+i[2]+i[3]+i[4], f->vencimiento, i[5]); - memcpy(tmp+i[0]+i[1]+i[2]+i[3]+i[4]+i[5], f->estado, i[6]); - memcpy(tmp+i[0]+i[1]+i[2]+i[3]+i[4]+i[5]+i[6], f->fp, i[7]); - memcpy(tmp+i[0]+i[1]+i[2]+i[3]+i[4]+i[5]+i[6]+i[7], f->ctacte, i[8]); - memcpy(tmp+i[0]+i[1]+i[2]+i[3]+i[4]+i[5]+i[6]+i[7]+i[8], f->cheque, i[9]); - memcpy(tmp+i[0]+i[1]+i[2]+i[3]+i[4]+i[5]+i[6]+i[7]+i[8]+i[9], f->items, i[10]); + memcpy(tmp, &f->reg_nota, i[4]); + memcpy(tmp+i[0]+i[1]+i[2]+i[3]+i[4], f->emision, i[5]); + memcpy(tmp+i[0]+i[1]+i[2]+i[3]+i[4]+i[5], f->vencimiento, i[6]); + memcpy(tmp+i[0]+i[1]+i[2]+i[3]+i[4]+i[5]+i[6], f->estado, i[7]); + memcpy(tmp+i[0]+i[1]+i[2]+i[3]+i[4]+i[5]+i[6]+i[7], f->fp, i[8]); + memcpy(tmp+i[0]+i[1]+i[2]+i[3]+i[4]+i[5]+i[6]+i[7]+i[8], f->ctacte, i[9]); + memcpy(tmp+i[0]+i[1]+i[2]+i[3]+i[4]+i[5]+i[6]+i[7]+i[8]+i[9], f->cheque, i[10]); + memcpy(tmp+i[0]+i[1]+i[2]+i[3]+i[4]+i[5]+i[6]+i[7]+i[8]+i[9]+i[10], f->items, i[11]); break; case T3: (*size) = sizeof(t_Factura)-sizeof(char *)-sizeof(t_Item *) + f->cant_items*sizeof(t_Item); @@ -570,6 +577,7 @@ void *procesar_guardar_factura(t_Factura *f, t_LstFacturas *lst, EMUFS_REG_SIZE static int procesar_leer_factura(t_Factura *dst, void *src, EMUFS_REG_SIZE size, t_LstFacturas *lst) { char *ini, *fin; + int dummy; switch (lst->fp->tipo) { case T1: @@ -587,6 +595,9 @@ static int procesar_leer_factura(t_Factura *dst, void *src, EMUFS_REG_SIZE size, memcpy(&dst->cant_items, ini, sizeof(int)); ini+=sizeof(int); + + memcpy(&dst->reg_nota, ini, sizeof(EMUFS_BLOCK_ID)); + ini+=sizeof(EMUFS_BLOCK_ID); /* Ahora empieza el juego */ /* Los \0 son los delimitadores de campo! */ @@ -624,9 +635,10 @@ static int procesar_leer_factura(t_Factura *dst, void *src, EMUFS_REG_SIZE size, dst->items = (t_Item *)malloc(sizeof(t_Item)*dst->cant_items); ini = fin+1; - fprintf(stderr, "trabajo con 1 -> %lu\n", size); fin = (char *)src+size; memcpy(dst->items, ini, fin-ini); + + dst->nota = lst->fp_texto->leer_registro(lst->fp_texto, dst->reg_nota, (EMUFS_REG_SIZE *)&dummy, &dummy); } else { dst->items = NULL; }