- Se cambia el prototipo de la función grabar_registro() para que acepte como
último parámetro un puntero a int para guardar un código de error.
(actualice todo para que siga compilando, es transparente si no lo usan)
- Implemento casi todo tipo1_grabar_registro(). Falta hacer get_id() para
empezar a probarlo.
- Se hace que leer_registro() y leer_bloque() devuelvan un puntero al
fragmento de memoria alocada para almacenar el registro/bloque a leer.
Para reportar errores, reciben un puntero a un entero como parametro.
- Se corrige prototipo de emufs_tipo3_grabar_registro().
- Se arregla test3_main.c para que compile.
- Se agrega una constante EMUFS_NOT_FOUND (== (unsigned long) -1 == ULONG_MAX)
para que sea mas legible el codigo (para usar en vez del -1).
Alan Kennedy [Sat, 10 Apr 2004 19:18:49 +0000 (19:18 +0000)]
- Changed routine: emufs_idx_agregar, cambiando el orden de los parametros 2 y 3 que estan invertidos respecto de como se graban en el HD y podia llevar a llamadas erroneas. Chequeen sus llamadas porque probablemente lo tengan que invertir (sorry por la molestia, pero lo cambie para hacerlo homogeneo con el resto).
Quedo asi: int emufs_idx_agregar(EMUFS *emu, EMUFS_REG_ID n_IdReg, EMUFS_BLOCK_ID n_Location)
- Fixed EMUFS_REG_ID emufs_idx_buscar_mayor_id(EMUFS *emu), el cual andaba mal puese devolvia siempre ID 0, ya que comparaba todos los ID's encontrados contra el -1 pero definido en una variable EMUFS_REG_ID (unsigned long int), por lo que nunca encontraba anda mayor que eso, y luego al sumarle uno a ese maximo devolvia siempre 0. (En fin, ahora anda).
- Fixes en tipo2.c y tipo2_main.c. Ahora ya funcione como ayer mi proyecto.
Alan Kennedy [Sat, 10 Apr 2004 17:42:22 +0000 (17:42 +0000)]
Cambios Realizados (son varios, read carefuly):
A) En los tres sets de rutinas para el manejo de los archivos auxiliares IDX,FSC y DID, se utilizan ahora los nuevos tipos de datos que definio Luca (son unsigned long int todos creo). Ademas, yo modifique algunas rutinas (y voy a tener que seguir modificando), para que se acomodem al esquema del Archivo Tipo2, en donde no tenemos bloques, tonces hay unas mini-diferencias ya que tenemos Gaps, no hay recompactacion automatica (perderia sentido tener los Gaps), se maneja la localizacion de los registros por Offsets y no bloque, etc.
B) En IDX, fixee la rutina que busca un registro por su ID. El problema que detecte ayer cuando la use, era que si terminaba de recorrer y no lo encontraba en vez de devolver -1, devolvia el ultimo ID que levanto.
C) En EMUFS.c|h, agrege a la estructura un campo para guardar el tamanio de registro, a ser utilizado solo por el Tipo3. Asi mismo, saque el ultimo parametro de la funcion dinamica borrar_registro en la cual se pasaba dicho dato, pues ahora ya se pasa en la estructura.
En el Emufs.c, ahora se deberia estar levantan correctamente el tamanio de registro en el header del archivo Tipo3 (chequeen ese OR por favor), por lo que Nico simplemente modificando tu funcion emufs_tipo3_borrar_registro, para que levante el dato de la estructura y no ese tercer parametro que ya no esta mas, deberia salir andando.
D) Por lo explicado anterioremente deshabilite las asignaciones en los Tipo1 y 3, de la rutina para Borrar Registros.
E) Tipo1 y Tipo3 me compilan, pero no se si estan tirando bien el output (o sea no se si es lo esperado). Fijense antes que nada en los printf que ahora es un unsigned int lo que se imprime y no integer, por lo que si ven un numero raro puede ser por eso. Los dos tests compilan sin warnings salvo el del truncate, pero recuerden que les saque el borrar registro, fix that.
-------------------------------------------
Bueno eso es todo, me tomo un buen rato reordenar esto con los tipos nuevos y lo que yo tenia desde ayer. Ahora voy a ver si puedo dejar mi tipo2 andando como lo habia dejado ayer y lo subo mas tarde. Por ahora solo grabo registros, ayer empeze hacer el borrar registro mio pero quebre (toy enfermo). Calculo que se me va a complicar un toque dado que si borro dos registros consecutivos deberia hacer un merge de esos dos gaps y dejarlo como uno solo en el .DID, pero bueno problema mio, cualquier cosa les pido ayuda.
Saludos, si me necesitan toy en ICQ hasta la noche facil, laburando sobre el TP.
Agreguo los nuevos tipos de datos:
EMUFS_REG_ID
EMUFS_REG_SIZE
EMUFS_BLOCK_ID
EMUFS_BLOCK_SIZE
EMUFS_FREE
EMUFS_OFFSET /* este hay que ver si vuela y hacemos un mismo tipo para BLOCK y
OFFSET */
En tipo3 hay cosas no convertidas porque no estaba seguro de que tipo de dato
tenia que guardar (nico por favor mira los sizeof(int) o similares).
Agrego un test del tipo1 que no anda.
- Se agrega svn:ignore para que no salga la libemufs.a en el svn st.
- Primer intento de tipo1; solo implementa leer_registro (y no esta probado).
- Se generaliza emufs_crear() y se le agrega soporte para tipo1 (falta probar).
- Se agrega emufs_crear_archivo_auxiliar().
- Se agregan los emufs_xxx_crear() para crear archivos auxiliares específicos.
- Se actualiza Makefile.
* Ahi la GUI carga bien y no se producen los problemas de memoria. Para resolverlo
tuve que poner el campo array de t_LstArticulos estatico (100 elementos), asi que
tengo que ver que es lo que hace que cuando uso malloc se caga todo.
* Limpio el codigo de tipo3
* borrar_registro esta muerta por ahora, despues la completo.
* Cosas raras en la GUI, al ejecutar me tira un excepcion de punto flotante!!
Comienzo a separar las cosas un poco, pero no compila porque hay una referencia a una funcion que se pierde en el camino y no encuentro el error, mirenlonsvn add did.c did.h idx.c idx.h
Se saca el subdirectorio tipo3 y se pone el contenido en emufs/ con los nombres apropiados. Se arregla Makefile y archivos necesarios para que compile.
* BUGFIX : ahora el archivo anda bien. El problema era que en el calculo de espacio libre
estaba faltando restar sizeof(int), entonces cuando se utilizaba ese valor para guardar
registros se creaban solapamientos.
si se intenta racuperar los registros impares anda, si no no... miren el main.c, estuve haciendo una pruebas cambiando los tamaños de los bloques. Seguramente estoy guardando mal los registros o el id, sigo examinando
* BUGFIX : Arreglo el bug que hacia que palme en el free de leer_registro. Al parecer el tener
los FILE * globales causaba algo en la memoria que jodia. Puse los FILE* dentro de cada funcion
como corresponde y ahora anda bien.
* Saco el malloc_debug
* Primer ejemplo de grabacion y recuperacion de un registro funciona al fin!
* Hay algo raro en leer_registro que hace que el free del final cause un SEGFAULT
* Arregle leer_bloque porque estaba faltando sumar el campo tamaño_registro al header del archivo.
* BUGFIX : Arreglo en get_id un par de cosas para que ande. Entre ellas que feof no me dice si estoy
al final apenas abri el archivo, por mas que el archivo este vacio.
Tambien habia un fseek(SEEK_END) donde el offset no era negativo
* BUGFIX : inicializo una variabla en buscar_lugar para que el resultado sea correcto.
* Ya hay un demo que guarda algo en un archivo. Falta verificar el resultado.
* Restauro el XML al original mandado por la catedra
* Hago un par de HACKs para manejar bien la salida UTF8 que me manda
la libxml2 (ya me puse en contacto con la gente del proyecto para ver como
manejar mejor estos casos, ya que el usar UTF8 en codigo C molesta muuucho
y andar haciendo conversiones es muyyyy molesto).
* Se comienza a crear la interfaz general para los 3 tipos de archivo. Por ahora
lo puse dentro de tipo3 que es lo que hay programado y lo voy a utilizar para
hacer un demo del archivo de nico. Despues vemos de moverlo y reorganizar el
arbol de codigo.
* EL menu cada dia mas lindo :-)
* La cosa empieza a tomar forma
* Menues anidados (Solo funciona Articulos->Modificar y Articulos->Volver,
cualquier otro causa cuelgue porque no inicie algunos puntero!!!!!!)
-Cambie un poco la interfaz que hizo Rich, para que me quede mas comodo, asi que se van a tener que adaptar a mi... ja!
-Tenemos que ponernos de acuerdo en algunos temas de nomenclatura, sobre todo de los nombres de los archivos de indice, porque los que puse yo no me gustan para nada..
* Algunos cambios.
Saco cosas que no deben ir. El tipo de archivo nunca sabe que dato
esta trabajando. Solo debe saber el tamaño de un registro y hacer
una copia bit a bit del registro sobre un puntero que se le pasa.