- Se agrega reporte de errores a emufs_did_get_last() y a emufs_did_get_last().
- Se crea una nueva funcion emufs_idx_get_new_id() para reemplazar la serie
emufs_tipoX_get_id().
- Se agrega una macro PERR() que cuando se compila con -DDEBUG imprime un
mensaje de debug por la salida de error (si se compila sin DEBUG no hace
nada).
- Se cambia nombre de emufs_idx_buscar_mayor_id() a
emufs_idx_buscar_mayor_id_libre() que es mas representativo (igual con
emufs_idx_get_new_id() ya practicamente no se usa directamente).
* BUGFIX : en tipo3 cuando pedia lugar estaba faltando agregar sizeof(EMUFS_REG_ID)
* CodeClean : se limpia un poco algunas cosas, se ajusta coding style.
Alan Kennedy [Sun, 11 Apr 2004 02:37:09 +0000 (02:37 +0000)]
- El archivo del tipo 2 ya mete registros y los borra (falta fixear el emufs_ifx_borrar_registro para que los borre de ese indice porque hasta ahora no me funciono ni pa atras (ahora me bajo el nuevo idx.c que subio luca a ver que onda..
- Cambios fsc.c: Implemente una funcion especifica para mi tipo2, emufs_fsc_agregar_gap la cual mete un gap dado el borrado de un registro en el .dat, y si encuentra un gap anterior Y/O posterior, hace los merges que tenga que hacer. Por ahora cuando hacer un merge y tiene que justificar el .fsc, lo hace reg por reg (leeeeentoooo), luego lo hare de a N Registros por vez, como hablaba con Luca hoy por icq...
- 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.