From: Ricardo Markiewicz Date: Mon, 19 Apr 2004 08:49:38 +0000 (+0000) Subject: * Agrego idea de analisis .... OPINAR AHROA O CALLAR PARA SIMPRE! X-Git-Tag: svn_import_r684~293 X-Git-Url: https://git.llucax.com/z.facultad/75.06/emufs.git/commitdiff_plain/439d9f9ac17b496b8f90857995271bc17fa5600e?ds=sidebyside * Agrego idea de analisis .... OPINAR AHROA O CALLAR PARA SIMPRE! --- diff --git a/doc/analisis.lyx b/doc/analisis.lyx new file mode 100644 index 0000000..a81f70d --- /dev/null +++ b/doc/analisis.lyx @@ -0,0 +1,896 @@ +#LyX 1.3 created this file. For more info see http://www.lyx.org/ +\lyxformat 221 +\textclass article +\language spanish +\inputencoding auto +\fontscheme palatino +\graphics default +\paperfontsize 10 +\spacing single +\papersize Default +\paperpackage a4 +\use_geometry 1 +\use_amsmath 0 +\use_natbib 0 +\use_numerical_citations 0 +\paperorientation portrait +\leftmargin 2cm +\topmargin 1cm +\rightmargin 1cm +\bottommargin 2cm +\secnumdepth 3 +\tocdepth 3 +\paragraph_separation indent +\defskip medskip +\quotes_language english +\quotes_times 2 +\papercolumns 1 +\papersides 1 +\paperpagestyle default +\bullet 1 + 0 + 24 + -1 +\end_bullet + +\layout Title + +Comparacion de Tipo de archivos. +\layout Standard + +Método utilizado para la comparación +\layout Standard + +Para realizar la comparación entre los distintos tipos de archivo, se generaron + un xml de articulos con 200 entradas y uno de facturas de 1750 entreadas. + Los valores fueron arbitrarios y un poco mas elevados que los requeridos + en el enunciado para poner a prueba el sistema. +\layout Standard + +En la tabla que se dará más adelante, se pueden apreciar los datos característic +os de cada tipo de archivo. + El métido de prueba fue el siguiente : +\layout Enumerate + +Para cada tipo de archivo se cargaron los archivos xml de prueba +\layout Enumerate + +Se anotaron las estadísticas que entrega la GUI +\layout Enumerate + +Se eliminaron alrededor de 50 artículos y 200 facturas. + El valor no es exacto, puesto que al ser pseudo-aleatoria la cantidad borrada + puede no ser 50 o 200. +\layout Enumerate + +Se anotaron las estadísticas nuevamente. +\layout Standard + +Ahora, los tamaños de bloque para los archivos con bloques fueron tomados + de 512 bytes, por ser una unidad típica de dispositivos de almacenamiento, + y nos pareció lógico dada la similitud utilizar esta unidad. +\layout Standard + +De la operatorio antes descripta sale la siguiente tabla : +\layout Standard + + +\begin_inset Tabular + + + + + + + + + + + +\begin_inset Text + +\layout Standard + +Artículos +\end_inset + + +\begin_inset Text + +\layout Standard + +T1 +\end_inset + + +\begin_inset Text + +\layout Standard + +T2 +\end_inset + + +\begin_inset Text + +\layout Standard + +T3 +\end_inset + + +\begin_inset Text + +\layout Standard + +T1 +\end_inset + + +\begin_inset Text + +\layout Standard + +T2 +\end_inset + + +\begin_inset Text + +\layout Standard + +T3 +\end_inset + + + + +\begin_inset Text + +\layout Standard + +\end_inset + + +\begin_inset Text + +\layout Standard + +Inicial +\end_inset + + +\begin_inset Text + +\layout Standard + +\end_inset + + +\begin_inset Text + +\layout Standard + +\end_inset + + +\begin_inset Text + +\layout Standard + +Luego de borrar +\end_inset + + +\begin_inset Text + +\layout Standard + +\end_inset + + +\begin_inset Text + +\layout Standard + +\end_inset + + + + +\begin_inset Text + +\layout Standard + +Tamaño Datos +\end_inset + + +\begin_inset Text + +\layout Standard + + +\family roman +\series medium +\shape up +\size normal +\emph off +\bar no +\noun off +\color none +10528 bytes +\end_inset + + +\begin_inset Text + +\layout Standard + + +\family roman +\series medium +\shape up +\size normal +\emph off +\bar no +\noun off +\color none +10528 bytes +\end_inset + + +\begin_inset Text + +\layout Standard + + +\family roman +\series medium +\shape up +\size normal +\emph off +\bar no +\noun off +\color none +28800 bytes +\end_inset + + +\begin_inset Text + +\layout Standard + + +\family roman +\series medium +\shape up +\size normal +\emph off +\bar no +\noun off +\color none +7874 bytes +\end_inset + + +\begin_inset Text + +\layout Standard + + +\family roman +\series medium +\shape up +\size normal +\emph off +\bar no +\noun off +\color none +7278 bytes +\end_inset + + +\begin_inset Text + +\layout Standard + + +\family roman +\series medium +\shape up +\size normal +\emph off +\bar no +\noun off +\color none +17856 bytes +\end_inset + + + + +\begin_inset Text + +\layout Standard + +Tamaño Datos de Control +\end_inset + + +\begin_inset Text + +\layout Standard + + +\family roman +\series medium +\shape up +\size normal +\emph off +\bar no +\noun off +\color none +1608 bytes +\end_inset + + +\begin_inset Text + +\layout Standard + + +\family roman +\series medium +\shape up +\size normal +\emph off +\bar no +\noun off +\color none +1604 bytes +\end_inset + + +\begin_inset Text + +\layout Standard + + +\family roman +\series medium +\shape up +\size normal +\emph off +\bar no +\noun off +\color none +812 bytes +\end_inset + + +\begin_inset Text + +\layout Standard + + +\family roman +\series medium +\shape up +\size normal +\emph off +\bar no +\noun off +\color none +1208 bytes +\end_inset + + +\begin_inset Text + +\layout Standard + + +\family roman +\series medium +\shape up +\size normal +\emph off +\bar no +\noun off +\color none +1108 bytes +\end_inset + + +\begin_inset Text + +\layout Standard + + +\family roman +\series medium +\shape up +\size normal +\emph off +\bar no +\noun off +\color none +508 bytes +\end_inset + + + + +\begin_inset Text + +\layout Standard + +Espacio Libre +\end_inset + + +\begin_inset Text + +\layout Standard + + +\family roman +\series medium +\shape up +\size normal +\emph off +\bar no +\noun off +\color none +672 bytes +\end_inset + + +\begin_inset Text + +\layout Standard + + +\family roman +\series medium +\shape up +\size normal +\emph off +\bar no +\noun off +\color none +0 bytes +\end_inset + + +\begin_inset Text + +\layout Standard + + +\family roman +\series medium +\shape up +\size normal +\emph off +\bar no +\noun off +\color none +4704 bytes +\end_inset + + +\begin_inset Text + +\layout Standard + + +\family roman +\series medium +\shape up +\size normal +\emph off +\bar no +\noun off +\color none +3726 bytes +\end_inset + + +\begin_inset Text + +\layout Standard + + +\family roman +\series medium +\shape up +\size normal +\emph off +\bar no +\noun off +\color none +3746 bytes +\end_inset + + +\begin_inset Text + +\layout Standard + + +\family roman +\series medium +\shape up +\size normal +\emph off +\bar no +\noun off +\color none +15952 bytes +\end_inset + + + + +\begin_inset Text + +\layout Standard + +Media de Espacio Libre +\end_inset + + +\begin_inset Text + +\layout Standard + + +\family roman +\series medium +\shape up +\size normal +\emph off +\bar no +\noun off +\color none +26 bytes +\end_inset + + +\begin_inset Text + +\layout Standard + + +\family roman +\series medium +\shape up +\size normal +\emph off +\bar no +\noun off +\color none +0 bytes +\end_inset + + +\begin_inset Text + +\layout Standard + + +\family roman +\series medium +\shape up +\size normal +\emph off +\bar no +\noun off +\color none +70 bytes +\end_inset + + +\begin_inset Text + +\layout Standard + + +\family roman +\series medium +\shape up +\size normal +\emph off +\bar no +\noun off +\color none +149 bytes +\end_inset + + +\begin_inset Text + +\layout Standard + + +\family roman +\series medium +\shape up +\size normal +\emph off +\bar no +\noun off +\color none +73 bytes +\end_inset + + +\begin_inset Text + +\layout Standard + + +\family roman +\series medium +\shape up +\size normal +\emph off +\bar no +\noun off +\color none +238 bytes +\end_inset + + + + +\begin_inset Text + +\layout Standard + +Máximo de Espacio Libre +\end_inset + + +\begin_inset Text + +\layout Standard + + +\family roman +\series medium +\shape up +\size normal +\emph off +\bar no +\noun off +\color none +83 bytes +\end_inset + + +\begin_inset Text + +\layout Standard + + +\family roman +\series medium +\shape up +\size normal +\emph off +\bar no +\noun off +\color none +0 bytes +\end_inset + + +\begin_inset Text + +\layout Standard + + +\family roman +\series medium +\shape up +\size normal +\emph off +\bar no +\noun off +\color none +216 bytes +\end_inset + + +\begin_inset Text + +\layout Standard + + +\family roman +\series medium +\shape up +\size normal +\emph off +\bar no +\noun off +\color none +279 bytes +\end_inset + + +\begin_inset Text + +\layout Standard + + +\family roman +\series medium +\shape up +\size normal +\emph off +\bar no +\noun off +\color none +480 bytes +\end_inset + + +\begin_inset Text + +\layout Standard + + +\family roman +\series medium +\shape up +\size normal +\emph off +\bar no +\noun off +\color none +512 bytes +\end_inset + + + + +\begin_inset Text + +\layout Standard + +Mínimo de Espacio Libre +\end_inset + + +\begin_inset Text + +\layout Standard + + +\family roman +\series medium +\shape up +\size normal +\emph off +\bar no +\noun off +\color none +2 bytes +\end_inset + + +\begin_inset Text + +\layout Standard + + +\family roman +\series medium +\shape up +\size normal +\emph off +\bar no +\noun off +\color none +0 bytes +\end_inset + + +\begin_inset Text + +\layout Standard + + +\family roman +\series medium +\shape up +\size normal +\emph off +\bar no +\noun off +\color none +68 bytes +\end_inset + + +\begin_inset Text + +\layout Standard + + +\family roman +\series medium +\shape up +\size normal +\emph off +\bar no +\noun off +\color none +36 bytes +\end_inset + + +\begin_inset Text + +\layout Standard + + +\family roman +\series medium +\shape up +\size normal +\emph off +\bar no +\noun off +\color none + 41 bytes +\end_inset + + +\begin_inset Text + +\layout Standard + + +\family roman +\series medium +\shape up +\size normal +\emph off +\bar no +\noun off +\color none + 68 bytes +\end_inset + + + + +\end_inset + + +\layout Standard + +Evidentemente para el caso de artículos, una muy mala eleccion seria utilizar + el archivo de tipo3, puesto que al usar registros constantes es posible + que se desperdicie mucho espacio si ocurren muchas eliminaciones (como + se observa en la tabla). + Entre los tipos 1 y 2 no existe mucha diferencia en los números, por lo + que la desición podriía ser tomada en base a los tiempos de acceso. + Tomando este criterio el T2 sería la mejor forma de almacenar los datos + para si lo más frecuente son lecturas, ya que al leer se puede obtener + el offset desde el principio del registro, mientras que en el tipo1 se + debe hacer una búsqueda secuencial sobre el bloque, y de ser éste último + muy grande el tiempo de acceso puede ser elevado. + Para operaciones que requiera muchas bajas de elementos el tipo 2 no sería + la mejor opción, puesto que la liberación es compleja, ya que cuando se + da de baja un registro se debe verificar si dicho espacio se solapa con + algún espacio libre actual, de manera de mantener espacios libres como + lo hacen los sistemas de archivo ext2, manteniendo la lista de los offsets + y tamaño de espacios libres, a fin de buscar el que mejor ajuste en caso + de una alta. +\the_end diff --git a/emufs/fsc.c b/emufs/fsc.c index 344adb6..84746a8 100644 --- a/emufs/fsc.c +++ b/emufs/fsc.c @@ -58,7 +58,6 @@ int emufs_fsc_agregar(EMUFS *emu, EMUFS_BLOCK_ID marker, EMUFS_FREE freespace) strcat(name_f_fsc, EMUFS_FSC_EXT); /* Lo guardo en el archivo al final "a+"*/ - PERR(name_f_fsc); if ( (f_fsc = fopen(name_f_fsc,"r+"))==NULL ) return -1; /* lo busco.. si esta lo modifico y si no lo agrego */ fseek(f_fsc,0,SEEK_SET); diff --git a/emufs_gui/analisis/tipo1/art1.stat b/emufs_gui/analisis/tipo1/art1.stat new file mode 100644 index 0000000..238e1ab --- /dev/null +++ b/emufs_gui/analisis/tipo1/art1.stat @@ -0,0 +1,15 @@ +x Tipo de Archivo : Registro long. variable con bloque parametrizado x +x x +x Tamaño de bloque : 512 bytes x +x Tamaño ocupado por datos : 10528 bytes (82.20 %) x +x Tamaño de campos de control de datos: 1608 bytes (12.55 %) x +x Espacio Libre : 672 bytes (5.25 %) x +x Media de espacio libre : 26 bytes/bloque x +x Maximo de Espacio libre : 83 bytes x +x Minimo de Espacio libre : 2 bytes x +x Tamaño de Archivo de datos : 12808 bytes x +x Tamaño de Archivos auxiliares : 1800 bytes x +x Cantidad de bloques : 25 x +x Cant. Registros : 200 x +x x +x x \ No newline at end of file diff --git a/emufs_gui/analisis/tipo1/art2.stat b/emufs_gui/analisis/tipo1/art2.stat new file mode 100644 index 0000000..8e0dda9 --- /dev/null +++ b/emufs_gui/analisis/tipo1/art2.stat @@ -0,0 +1,13 @@ +x Tipo de Archivo : Registro long. variable con bloque parametrizado x +x x +x Tamaño de bloque : 512 bytes x +x Tamaño ocupado por datos : 7874 bytes (61.48 %) x +x Tamaño de campos de control de datos: 1208 bytes (9.43 %) x +x Espacio Libre : 3726 bytes (29.09 %) x +x Media de espacio libre : 149 bytes/bloque x +x Maximo de Espacio libre : 279 bytes x +x Minimo de Espacio libre : 36 bytes x +x Tamaño de Archivo de datos : 12808 bytes x +x Tamaño de Archivos auxiliares : 2000 bytes x +x Cantidad de bloques : 25 x +x Cant. Registros : 150 x \ No newline at end of file diff --git a/emufs_gui/analisis/tipo1/fact1.stat b/emufs_gui/analisis/tipo1/fact1.stat new file mode 100644 index 0000000..03b926b --- /dev/null +++ b/emufs_gui/analisis/tipo1/fact1.stat @@ -0,0 +1,12 @@ +x Tamaño de bloque : 512 bytes x +x Tamaño ocupado por datos : 268707 bytes (89.56 %) x +x Tamaño de campos de control de datos: 14008 bytes (4.67 %) x +x Espacio Libre : 17325 bytes (5.77 %) x +x Media de espacio libre : 29 bytes/bloque x +x Maximo de Espacio libre : 386 bytes x +x Minimo de Espacio libre : 1 bytes x +x Tamaño de Archivo de datos : 300040 bytes x +x Tamaño de Archivos auxiliares : 18688 bytes x +x Cantidad de bloques : 586 x +x Cant. Registros : 1750 x +x x \ No newline at end of file diff --git a/emufs_gui/analisis/tipo1/fact2.stat b/emufs_gui/analisis/tipo1/fact2.stat new file mode 100644 index 0000000..80cea76 --- /dev/null +++ b/emufs_gui/analisis/tipo1/fact2.stat @@ -0,0 +1,13 @@ +x Tipo de Archivo : Registro long. variable con bloque parametrizado x +x x +x Tamaño de bloque : 512 bytes x +x Tamaño ocupado por datos : 207295 bytes (69.09 %) x +x Tamaño de campos de control de datos: 12288 bytes (4.10 %) x +x Espacio Libre : 80457 bytes (26.82 %) x +x Media de espacio libre : 137 bytes/bloque x +x Maximo de Espacio libre : 512 bytes x +x Minimo de Espacio libre : 1 bytes x +x Tamaño de Archivo de datos : 300040 bytes x +x Tamaño de Archivos auxiliares : 19548 bytes x +x Cantidad de bloques : 586 x +x Cant. Registros : 1535 x \ No newline at end of file diff --git a/emufs_gui/analisis/tipo2/art1.stat b/emufs_gui/analisis/tipo2/art1.stat new file mode 100644 index 0000000..5485eb0 --- /dev/null +++ b/emufs_gui/analisis/tipo2/art1.stat @@ -0,0 +1,12 @@ +x Tipo de Archivo : Registro long. variable sin bloques x +x x +x Tamaño ocupado por datos : 10528 bytes (86.78 %) x +x Tamaño de campos de control de datos: 1604 bytes (13.22 %) x +x Espacio Libre : 0 bytes (0.00 %) x +x Media de espacio libre : 0 bytes/bloque x +x Maximo de Espacio libre : 0 bytes x +x Minimo de Espacio libre : 0 bytes x +x Tamaño de Archivo de datos : 12132 bytes x +x Tamaño de Archivos auxiliares : 1600 bytes x +x Cant. Registros : 200 x +x x \ No newline at end of file diff --git a/emufs_gui/analisis/tipo2/art2.stat b/emufs_gui/analisis/tipo2/art2.stat new file mode 100644 index 0000000..3e573c7 --- /dev/null +++ b/emufs_gui/analisis/tipo2/art2.stat @@ -0,0 +1,12 @@ +x Tipo de Archivo : Registro long. variable sin bloques x +x x +x Tamaño ocupado por datos : 7278 bytes (59.99 %) x +x Tamaño de campos de control de datos: 1108 bytes (9.13 %) x +x Espacio Libre : 3746 bytes (30.88 %) x +x Media de espacio libre : 73 bytes/bloque x +x Maximo de Espacio libre : 480 bytes x +x Minimo de Espacio libre : 41 bytes x +x Tamaño de Archivo de datos : 12132 bytes x +x Tamaño de Archivos auxiliares : 2256 bytes x +x Cant. Registros : 138 x +x x \ No newline at end of file diff --git a/emufs_gui/analisis/tipo2/fact1.stat b/emufs_gui/analisis/tipo2/fact1.stat new file mode 100644 index 0000000..e2a16b7 --- /dev/null +++ b/emufs_gui/analisis/tipo2/fact1.stat @@ -0,0 +1,12 @@ +x Tipo de Archivo : Registro long. variable sin bloques x +x x +x Tamaño ocupado por datos : 268707 bytes (95.05 %) x +x Tamaño de campos de control de datos: 14004 bytes (4.95 %) x +x Espacio Libre : 0 bytes (0.00 %) x +x Media de espacio libre : 0 bytes/bloque x +x Maximo de Espacio libre : 0 bytes x +x Minimo de Espacio libre : 0 bytes x +x Tamaño de Archivo de datos : 282711 bytes x +x Tamaño de Archivos auxiliares : 14000 bytes x +x Cant. Registros : 1750 x +x x \ No newline at end of file diff --git a/emufs_gui/analisis/tipo2/fact2.stat b/emufs_gui/analisis/tipo2/fact2.stat new file mode 100644 index 0000000..db61cb4 --- /dev/null +++ b/emufs_gui/analisis/tipo2/fact2.stat @@ -0,0 +1,12 @@ +x Tipo de Archivo : Registro long. variable sin bloques x +x x +x Tamaño ocupado por datos : 212465 bytes (75.15 %) x +x Tamaño de campos de control de datos: 12324 bytes (4.36 %) x +x Espacio Libre : 57922 bytes (20.49 %) x +x Media de espacio libre : 981 bytes/bloque x +x Maximo de Espacio libre : 10656 bytes x +x Minimo de Espacio libre : 216 bytes x +x Tamaño de Archivo de datos : 282711 bytes x +x Tamaño de Archivos auxiliares : 15312 bytes x +x Cant. Registros : 1540 x +x x \ No newline at end of file diff --git a/emufs_gui/analisis/tipo3/art1.stat b/emufs_gui/analisis/tipo3/art1.stat new file mode 100644 index 0000000..c1d5844 --- /dev/null +++ b/emufs_gui/analisis/tipo3/art1.stat @@ -0,0 +1,14 @@ +x Tipo de Archivo : Registro long. fija con bloque parametrizado x +x x +x Tamaño de bloque : 512 bytes x +x Tamaño de registro : 144 bytes x +x Tamaño ocupado por datos : 28800 bytes (83.93 %) x +x Tamaño de campos de control de datos: 812 bytes (2.37 %) x +x Espacio Libre : 4704 bytes (13.71 %) x +x Media de espacio libre : 70 bytes/bloque x +x Maximo de Espacio libre : 216 bytes x +x Minimo de Espacio libre : 68 bytes x +x Tamaño de Archivo de datos : 34316 bytes x +x Tamaño de Archivos auxiliares : 2136 bytes x +x Cantidad de bloques : 67 x +x Cant. Registros : 200 x \ No newline at end of file diff --git a/emufs_gui/analisis/tipo3/art2.stat b/emufs_gui/analisis/tipo3/art2.stat new file mode 100644 index 0000000..d8bceea --- /dev/null +++ b/emufs_gui/analisis/tipo3/art2.stat @@ -0,0 +1,14 @@ +x Tipo de Archivo : Registro long. fija con bloque parametrizado x +x x +x Tamaño de bloque : 512 bytes x +x Tamaño de registro : 144 bytes x +x Tamaño ocupado por datos : 17856 bytes (52.03 %) x +x Tamaño de campos de control de datos: 508 bytes (1.48 %) x +x Espacio Libre : 15952 bytes (46.49 %) x +x Media de espacio libre : 238 bytes/bloque x +x Maximo de Espacio libre : 512 bytes x +x Minimo de Espacio libre : 68 bytes x +x Tamaño de Archivo de datos : 34316 bytes x +x Tamaño de Archivos auxiliares : 2440 bytes x +x Cantidad de bloques : 67 x +x Cant. Registros : 124 x \ No newline at end of file diff --git a/emufs_gui/analisis/tipo3/fact1.stat b/emufs_gui/analisis/tipo3/fact1.stat new file mode 100644 index 0000000..9513df0 --- /dev/null +++ b/emufs_gui/analisis/tipo3/fact1.stat @@ -0,0 +1,14 @@ +x Tipo de Archivo : Registro long. fija con bloque parametrizado x +x x +x Tamaño de bloque : 512 bytes x +x Tamaño de registro : 312 bytes x +x Tamaño ocupado por datos : 546000 bytes (60.94 %) x +x Tamaño de campos de control de datos: 7012 bytes (0.78 %) x +x Espacio Libre : 343000 bytes (38.28 %) x +x Media de espacio libre : 196 bytes/bloque x +x Maximo de Espacio libre : 196 bytes x +x Minimo de Espacio libre : 196 bytes x +x Tamaño de Archivo de datos : 896012 bytes x +x Tamaño de Archivos auxiliares : 28000 bytes x +x Cantidad de bloques : 1750 x +x Cant. Registros : 1750 x \ No newline at end of file diff --git a/emufs_gui/analisis/tipo3/fact2.stat b/emufs_gui/analisis/tipo3/fact2.stat new file mode 100644 index 0000000..1d2ea31 --- /dev/null +++ b/emufs_gui/analisis/tipo3/fact2.stat @@ -0,0 +1,15 @@ +x Tipo de Archivo : Registro long. fija con bloque parametrizado +x +x Tamaño de bloque : 512 bytes +x Tamaño de registro : 312 bytes +x Tamaño ocupado por datos : 482664 bytes (53.87 %) +x Tamaño de campos de control de datos: 6200 bytes (0.69 %) +x Espacio Libre : 407148 bytes (45.44 %) +x Media de espacio libre : 232 bytes/bloque +x Maximo de Espacio libre : 512 bytes +x Minimo de Espacio libre : 196 bytes +x Tamaño de Archivo de datos : 896012 bytes +x Tamaño de Archivos auxiliares : 28812 bytes +x Cantidad de bloques : 1750 +x Cant. Registros : 1547 +x diff --git a/emufs_gui/facturas.c b/emufs_gui/facturas.c index 254e35e..9410c19 100644 --- a/emufs_gui/facturas.c +++ b/emufs_gui/facturas.c @@ -12,7 +12,7 @@ static t_Reg_Factura *crear_nodo_factura(EMUFS_REG_ID reg, EMUFS_REG_ID texto, u static int agregar_nodo_factura(t_LstFacturas *lst, t_Reg_Factura *nodo); int eliminar_nodo_factura(t_LstFacturas *lst, t_Reg_Factura *nodo); static t_Item *leer_items(xmlNode *, int *cant, int size); -static char *leer_nota(xmlNode *); +static char *leer_nota(xmlNode *, int max); t_LstFacturas *fact_get_lst() { @@ -116,14 +116,14 @@ t_Item *leer_items(xmlNode *node, int *cant, int size) while (node) { if (node->type == XML_ELEMENT_NODE) { if (strcmp(node->name, "ITEMVENTA") == 0) { - memset(&tmp[count], '*', sizeof(t_Item)); + memset(&tmp[count], 0, sizeof(t_Item)); prop = xml_get_prop(node, "NroArtículo"); tmp[count].numero = atoi(prop); xmlFree(prop); strncpy(tmp[count].cv, prop = xml_get_prop(node, "CV"), 8); xmlFree(prop); - tmp[count-1].cv[8] = '\0'; + tmp[count].cv[8] = '\0'; strncpy(tmp[count].pvu, prop = xml_get_prop(node, "PVU"), 8); xmlFree(prop); - tmp[count-1].pvu[8] = '\0'; + tmp[count].pvu[8] = '\0'; count++; } } @@ -134,7 +134,7 @@ t_Item *leer_items(xmlNode *node, int *cant, int size) return tmp; } -char *leer_nota(xmlNode *node) +char *leer_nota(xmlNode *node, int max) { xmlNode *tmp; char *salida; @@ -149,11 +149,22 @@ char *leer_nota(xmlNode *node) } if (tmp) { - salida = (char *)malloc(sizeof(char)*(strlen(XML_GET_CONTENT(tmp->children))+1)); - strcpy(salida, XML_GET_CONTENT(tmp->children)); + if (max == -1) { + salida = (char *)malloc(sizeof(char)*(strlen(XML_GET_CONTENT(tmp->children))+1)); + strcpy(salida, XML_GET_CONTENT(tmp->children)); + } else { + salida = (char *)malloc(sizeof(char)*max); + strncpy(salida, XML_GET_CONTENT(tmp->children), max-1); + salida[max-1] = '\0'; + } } else { - salida = (char *)malloc(sizeof(char)); - salida[0] = '\0'; + if (max == -1) { + salida = (char *)malloc(sizeof(char)); + salida[0] = '\0'; + } else { + salida = (char *)malloc(sizeof(char)*max); + memset(salida, 0, max); + } } return salida; } @@ -239,11 +250,11 @@ t_LstFacturas *fact_cargar(const char *filename, int tipo, int tam_bloque, int t strncpy(fact.cheque, prop = xml_get_prop(node, "NroCheque"), 18); xmlFree(prop); fact.cheque[18] = '\0'; - fact.nota = leer_nota(node); + fact.nota = leer_nota(node, (((tipo-1)==T3)?100:-1)); fact.items = leer_items(node, &fact.cant_items, ((tipo-1)==T3)?10:-1); error = 0; - id = tmp->fp_texto->grabar_registro(tmp->fp_texto, fact.nota, strlen(fact.nota)+1, &error); + id = tmp->fp_texto->grabar_registro(tmp->fp_texto, fact.nota, ((tipo-1)==T3)?100:(strlen(fact.nota)+1), &error); fact.reg_nota = id; save = procesar_guardar_factura(&fact, lst_facturas, &size); if (save != NULL) {