X-Git-Url: https://git.llucax.com/z.facultad/75.06/emufs.git/blobdiff_plain/4f49d5af508818404abb40c3008cbeb3f9273843..e81cf1f1af923bee85d60e896bbbe0491bca4264:/emufs_gui/articulos.c?ds=sidebyside diff --git a/emufs_gui/articulos.c b/emufs_gui/articulos.c index af4536f..defdf7e 100644 --- a/emufs_gui/articulos.c +++ b/emufs_gui/articulos.c @@ -14,6 +14,11 @@ static t_Reg_Articulo *crear_nodo_articulo(EMUFS_REG_ID reg, unsigned int num); static int agregar_nodo_articulo(t_LstArticulos *lst, t_Reg_Articulo *nodo); static int eliminar_nodo_articulo(t_LstArticulos *lst, t_Reg_Articulo *nodo); +t_LstArticulos *art_get_lst() +{ + return lst_articulos; +} + int eliminar_nodo_articulo(t_LstArticulos *lst, t_Reg_Articulo *nodo) { if (nodo == NULL) return 0; @@ -111,6 +116,7 @@ t_LstArticulos *art_cargar(const char *filename, int tipo, int tam_bloque) /* 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) { + error = 0; id = tmp->fp->grabar_registro(tmp->fp, save, size, &error); agregar_nodo_articulo(tmp, crear_nodo_articulo(id, art.numero)); free(save); @@ -128,6 +134,7 @@ t_LstArticulos *art_cargar(const char *filename, int tipo, int tam_bloque) t_Articulo art; void *save; /* Leo el registro */ + error = 0; save = tmp->fp->leer_registro(tmp->fp, indices[i], &size, &error); if (procesar_leer_articulo(&art, save, size, tmp) == 1) { agregar_nodo_articulo(tmp, crear_nodo_articulo(indices[i], art.numero)); @@ -366,6 +373,7 @@ void art_agregar(char *s) /* 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) { + error = 0; id = lst_articulos->fp->grabar_registro(lst_articulos->fp, save, size, &error); if (error) { wattron(win, COLOR_PAIR(COLOR_YELLOW)); @@ -400,6 +408,7 @@ int procesar_leer_articulo(t_Articulo *dst, void *src, EMUFS_REG_SIZE size, t_Ls case T2: ini = (char *)src; /* Copio el primer campo, esto es facil :-) */ + memset(dst, '*', sizeof(t_Articulo)); memcpy(&dst->numero, ini, sizeof(unsigned int)); ini+=sizeof(unsigned int); /* Ahora empieza el juego */ @@ -425,7 +434,7 @@ int procesar_leer_articulo(t_Articulo *dst, void *src, EMUFS_REG_SIZE size, t_Ls ini = fin+1; fin = (char *)src+size; - memcpy(dst->emin, ini, fin-ini+1); + memcpy(dst->emin, ini, fin-ini); break; case T3: @@ -472,3 +481,69 @@ void *procesar_guardar_articulo(t_Articulo *src, EMUFS_REG_SIZE *size, t_LstArti return tmp; } +void art_reformatear(int tipo, int tam_bloque, int tam_reg) +{ + EMUFS *nuevo, *old; + EMUFS_REG_ID *indices, id; + EMUFS_REG_SIZE indices_total, i, size; + t_Articulo art; + t_LstArticulos *lst_nueva; + int error; + char *save; + + old = lst_articulos->fp; + + /* Si el tipo es el mismo, no tengo que hacer nada! */ + if (old->tipo == tipo) return; + + /* Creo el nuevo file */ + nuevo = emufs_crear("emufs_tmp", tipo, tam_bloque, sizeof(t_Articulo)); + if (nuevo == NULL) { + fprintf(stderr, "ARCHIVO NUEVO NO CREADO\n"); + return; + } + + /* Creo la nueva lista */ + lst_nueva = (t_LstArticulos *)malloc(sizeof(t_LstArticulos)); + lst_nueva->primero = NULL; + lst_nueva->fp = nuevo; + + /* Leo los indices del archivo viejo */ + indices = emufs_idx_get(old, &indices_total); + if (indices == NULL) { + art_liberar(lst_nueva); + return; + } + + for(i=0; ileer_registro(old, indices[i], &size, &error); + if (procesar_leer_articulo(&art, save, size, lst_articulos) == 1) { + free(save); + /* Lei un registro Ok. Lo salvo en el archivo nuevo */ + save = procesar_guardar_articulo(&art, &size, lst_nueva); + if (save) { + error = 0; + id = nuevo->grabar_registro(nuevo, save, size, &error); + agregar_nodo_articulo(lst_nueva, crear_nodo_articulo(id, art.numero)); + free(save); + } + } + } + + ver_archivo_FS(old); + ver_archivo_FS(nuevo); + + art_liberar(lst_articulos); + lst_articulos = lst_nueva; + + fprintf(stderr, "Listo. Renombre y me voy\n"); + /* Muevo los archivos! */ + /* TODO : Poner en otro lugar mas generico! */ + rename("emufs_tmp.dat", "articulos.dat"); + rename("emufs_tmp.idx", "articulos.idx"); + rename("emufs_tmp.fsc", "articulos.fsc"); + rename("emufs_tmp.did", "articulos.did"); +} +