]> git.llucax.com Git - z.facultad/75.06/emufs.git/blobdiff - emufs_gui/articulos.c
* metodo para eliminar nodos.
[z.facultad/75.06/emufs.git] / emufs_gui / articulos.c
index 5662bc7cdc20d95439b0645e909ab617fce8eb5c..51f2b1b17fbefb45ea9c0fb3b99e8b30282a07c0 100644 (file)
@@ -12,6 +12,26 @@ static int procesar_leer_articulo(t_Articulo *dst, void *src, EMUFS_REG_SIZE siz
 /* Manejo de la lista doble */
 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);
+
+int eliminar_nodo_articulo(t_LstArticulos *lst, t_Reg_Articulo *nodo)
+{
+       if (nodo == NULL) return 0;
+       if (nodo->ant == NULL) {
+               /* Me piden borrar el primer nodo */
+               if (nodo->sig) {
+                       nodo->sig->ant = NULL;
+               }
+               lst->primero = nodo->sig;
+       } else {
+               if (nodo->sig) {
+                       nodo->sig->ant = nodo->ant;
+               }
+               nodo->ant->sig = nodo->sig;
+       }
+       free(nodo);
+       return 1;
+}
 
 t_Reg_Articulo *crear_nodo_articulo(EMUFS_REG_ID reg, unsigned int num)
 {
@@ -241,7 +261,7 @@ void art_eliminar(char *s)
 {
        WINDOW *win;
        t_Articulo *articulo;
-       t_Reg_Articulo *nodo, *del;
+       t_Reg_Articulo *nodo;
        win = newwin(8, COLS-2, 13, 1);
        box(win, 0, 0);
        wrefresh(win);
@@ -259,19 +279,7 @@ void art_eliminar(char *s)
                while (nodo) {
                        if (nodo->numero == articulo->numero) {
                                lst_articulos->fp->borrar_registro(lst_articulos->fp, nodo->num_reg);
-                               del = nodo;
-                               if (nodo->ant) {
-                                       nodo->ant->sig = nodo->sig;
-                                       if (nodo->sig) {
-                                               nodo->sig->ant = nodo->ant;
-                                       }
-                               } else {
-                                       if (nodo->sig) {
-                                               nodo->sig->ant = NULL;
-                                       }
-                                       lst_articulos->primero = nodo->sig;
-                               }
-                               free(del);
+                               eliminar_nodo_articulo(lst_articulos, nodo);
                                break;
                        }
                        nodo = nodo->sig;