fread(&tipo, sizeof(EMUFS_Tipo), 1, fp);
/* Si no es un tipo conocido, sale. */
- if ((tipo != T1) && (tipo != T2) && (tipo != T3)) {
+ if ((tipo != T1) && (tipo != T2) && (tipo != T3) && (tipo != T4) && (tipo != T5)) {
fclose(fp);
return NULL;
}
strcat(tmp->filename, nombre);
strcat(tmp->filename, ".idx");
+ tmp->padre = emu;
tmp->nombre = (char *)malloc(sizeof(char)*(strlen(nombre)+1));
strcpy(tmp->nombre, nombre);
tmp->nombre = (char *)malloc(sizeof(char)*(strlen(nombre)+1));
strcpy(tmp->nombre, nombre);
-
+ tmp->padre = emu;
tmp->tipo = tipo;
tmp->tipo_dato = tipo_dato;
switch (tipo_dato) {
c = idx->str_offset;
while (c) {
- if ((*ptr) == '\0') c--;
- ptr++;
+ if ((*ptr) == '\0') {
+ c--;
+ /* Salteo los \0 seguidos */
+ if (idx->padre->tipo == T3)
+ while ((*ptr) == '\0') ptr++;
+ else
+ ptr++;
+ } else
+ ptr++;
}
error = 0;
- fprintf(stderr, "%s: ========> %s\n", idx->nombre, ptr);
+ fprintf(stderr, "%s: ========> %s (%d)\n", idx->nombre, ptr, strlen(ptr)+1);
k.i_clave = idx->emu_string->grabar_registro(idx->emu_string,
ptr,
strlen(ptr)+1,
*/
EMUFS *emu_mult;
+ EMUFS *padre;
/*EMUFS_Estadisticas (*obtener_estadisticas)(struct _indices_h_ *);*/
struct _indices_h_ *sig; /**< Siguiente indice */
} INDICE;
char* bloque = NULL;
int cant_bloques, resto, i=0;
+ PERR("TIPO3 GRABRAR REGISTRO");
strcpy(name_f,emu->nombre);
strcat(name_f,".dat");
/*si no hay bloques con suficiente espacio creo un bloque nuevo */
if (num_bloque == EMUFS_NOT_FOUND) {
- if ( (file = fopen(name_f,"a+"))==NULL ) return -1; /*ERROR*/
+ if ( (file = fopen(name_f,"a+"))==NULL ) {
+ PERR("NO SE PUDO ABRIR ARCHIVO DE DATOS");
+ return -1; /*ERROR*/
+ }
/*tengo que buscar un ID valido para el nuevo registro*/
ID_aux = emufs_idx_get_new_id(emu, err);
/* El free esta al final de la funcion! */
if (i == 0) {
/* Tengo que agregar el primer bloque en IDX */
if ( emufs_idx_agregar(emu, ID_aux, num_bloque) != 0 ){
+ PERR("FALLO AGREGAR A IDX");
free(bloque);
return -1;
}
if ( emufs_fsc_agregar(emu, num_bloque+i, new_fs) ) {
fclose(file);
free(bloque);
+ PERR("FALLO AGREGAR A IDX");
return -1;
}
}
if ( emufs_fsc_agregar(emu, num_bloque+i, fs-resto) !=0 ){
fclose(file);
if (bloque) free(bloque);
+ PERR("FALLO AGREGAR A IDX");
return -1;
}
} else {
if ( emufs_fsc_agregar(emu, num_bloque, fs - resto - sizeof(EMUFS_REG_ID) ) != 0 ) {
fclose(file);
if (bloque) free(bloque);
+ PERR("FALLO AGREGAR A FSC");
return -1;
}
}
if ( i == 0 ){
if ( emufs_idx_agregar(emu, ID_aux, num_bloque) != 0 ){
if (bloque) free(bloque);
+ PERR("FALLO AGREGAR A IDX");
return -1;
}
idx_data.id = ID_aux;
}
}
if (bloque) free(bloque);
+ PERR("GRABAR COMPLETO");
return ID_aux;
}
prop = xml_get_prop(node, "NroArtículo");
art.numero = atoi(prop);
xmlFree(prop);
- strncpy(art.desc, prop = xml_get_prop(node, "Descripción"), 50); xmlFree(prop);
- art.desc[50] = '\0'; /* Me aseguro de que este */
- strncpy(art.presentacion, prop = xml_get_prop(node, "Presentación"), 30); xmlFree(prop);
- art.presentacion[30] = '\0'; /* Me aseguro de que este */
- strncpy(art.existencia, prop = xml_get_prop(node, "Existencia"), 8); xmlFree(prop);
- art.existencia[8] = '\0'; /* Me aseguro de que este */
- strncpy(art.ubicacion, prop = xml_get_prop(node, "Ubicación"), 30); xmlFree(prop);
- strncpy(art.pvu, prop = xml_get_prop(node, "PVU"), 8); xmlFree(prop);
- art.pvu[8] = '\0'; /* Me aseguro de que este */
- strncpy(art.emin, prop = xml_get_prop(node, "Emín"), 8); xmlFree(prop);
- art.emin[8] = '\0'; /* Me aseguro de que este */
+ strcpy(art.desc, prop = xml_get_prop(node, "Descripción")); xmlFree(prop);
+ art.desc[50] = '\0';
+ strcpy(art.presentacion, prop = xml_get_prop(node, "Presentación")); xmlFree(prop);
+ art.presentacion[30] = '\0';
+ strcpy(art.existencia, prop = xml_get_prop(node, "Existencia")); xmlFree(prop);
+ art.existencia[8] = '\0';
+ strcpy(art.ubicacion, prop = xml_get_prop(node, "Ubicación")); xmlFree(prop);
+ art.ubicacion[30] = '\0';
+ strcpy(art.pvu, prop = xml_get_prop(node, "PVU")); xmlFree(prop);
+ art.pvu[8] = '\0';
+ strcpy(art.emin, prop = xml_get_prop(node, "Emín")); xmlFree(prop);
+ art.emin[8] = '\0';
/* Ya leido el articulo ahora paso a guardarlo en el archivo y agregarlo a la lista */
save = procesar_guardar_articulo(&art, &size, lst_articulos);
if (save != NULL) {
PERR("Creando todo de nuevo")
lst_articulos = (t_LstArticulos *)malloc(sizeof(t_LstArticulos));
+ lst_articulos->primero = NULL;
emu = lst_articulos->fp = emufs_crear("articulos", param->tipo_arch_art, param->tam_bloque_art, sizeof(t_Articulo));
+ fprintf(stderr, "NUEVO %s con tipo %d\n", emu->nombre, param->tipo_arch_art);
emufs_agregar_indice(emu, "presentacion", IND_EXAHUSTIVO, param->ind_art[2].tipo_arbol, IDX_STRING, STRUCT_OFFSET(un_articulo, desc), param->ind_art[2].tam_bloque, 1);
emufs_agregar_indice(emu, "desc", IND_EXAHUSTIVO, param->ind_art[1].tipo_arbol, IDX_STRING, STRUCT_OFFSET(un_articulo, desc), param->ind_art[1].tam_bloque, 0);
emufs_agregar_indice(emu, "codigo", IND_PRIMARIO, param->ind_art[0].tipo_arbol, IDX_INT, 0, param->ind_art[0].tam_bloque, 0);
<emufs>
<articulos>
<fuente>articulos.xml</fuente>
- <datos tipo="1" bloque="512" />
+ <datos tipo="3" bloque="512" />
<indices>
<indice nombre="codigo" tipo="B" bloque="512" />
<indice nombre="desc" tipo="B" bloque="512" />
void *save;
memset(&fact, 0, sizeof(t_Factura));
prop = xml_get_prop(node, "NroFac");
- PERR(prop);
fact.numero = atoi(prop); xmlFree(prop);
prop = xml_get_prop(node, "PorcDoI");
fact.procdoi = atof(prop); xmlFree(prop);