* Ajusto cosas.
Luca, leer_registro de tipo1 anda mal cuando tengo mas de un bloque en un registro!
Creo que te estas olvidando de saltar el header de los registros siguientes.
cant_bloques = curr_reg_header.size / block_space + 1;
*size = cant_bloques*efs->tam_bloque;
- registro = chunk_ptr = (char*) malloc(*size - (cant_bloques-1)*sizeof(EMUFS_TIPO1_REG_HEADER));
+ registro = chunk_ptr = (char*) malloc(*size - (cant_bloques-1)*sizeof(EMUFS_TIPO1_REG_HEADER) + (cant_bloques-1)*2);
if (registro == NULL) {
/* TODO Manejo de errores */
free(block);
err = 0;
block = (char*)emufs_tipo1_leer_bloque(efs, block_id+i, &err);
/* Solo grabo el header del primer pedazo! */
- memcpy(registro, block+sizeof(EMUFS_TIPO1_REG_HEADER), efs->tam_bloque);
- chunk_ptr += efs->tam_bloque;
+ memcpy(chunk_ptr, "<>", 2);
+ chunk_ptr += 2;
+ memcpy(chunk_ptr, block+sizeof(EMUFS_TIPO1_REG_HEADER), efs->tam_bloque-sizeof(EMUFS_TIPO1_REG_HEADER));
+ chunk_ptr += efs->tam_bloque-sizeof(EMUFS_TIPO1_REG_HEADER);
free(block);
}
/* Todo listo! */
case T2:
ini = (char *)src;
/* Copio el primer campo, esto es facil :-) */
- memset(dst, '*', sizeof(t_Articulo));
+ memset(dst, 0, sizeof(t_Articulo));
memcpy(&dst->numero, ini, sizeof(unsigned int));
ini+=sizeof(unsigned int);
/* Ahora empieza el juego */
ini = fin+1;
fin = ini;
while (*fin!='\0') fin++;
+ fprintf(stderr, "INI=%s\n", ini);
memcpy(dst->presentacion, ini, fin-ini+1);
ini = fin+1;
} else {
cant_header++;
offset += curr_size;
+ fprintf(stderr, "Sume %lu\n", curr_size);
}
- } while (offset < (*size));
+ } while (offset+sizeof(EMUFS_REG_SIZE)+sizeof(EMUFS_REG_ID) < (*size));
/* Proceso */
+ fprintf(stderr, "Cantidad de headers = %d\n", cant_header);
salida = (char *)malloc((*size)-sizeof(unsigned int)*cant_header*3 + 3*cant_header*10+1);
tmp = ptr;
tmp1 = salida;
sprintf(tmp1, "[%08d]", *((unsigned int *)tmp));
tmp1 += 10;
tmp += sizeof(unsigned int);
- j = sizeof(unsigned int);;
+ j = sizeof(unsigned int);
+ PERR("Voy aca");
+ fprintf(stderr, "son %lu\n", curr_size);
while (j < curr_size) {
if (*tmp == '\0') {
if (ant == (*tmp))
tmp1++;
j++;
}
+ PERR("Y hasta todo bien");
i++;
}
/* Tengo que trabajar sobre lo que me falte (seguro es espacio libre) */