--- rpl/src/gestion_variables_statiques.c 2012/10/07 08:18:35 1.38 +++ rpl/src/gestion_variables_statiques.c 2012/10/07 13:44:08 1.39 @@ -103,7 +103,6 @@ creation_variable_statique(struct_proces // Ajout de la variable en tête de la liste des variables statiques -printf("<0>\n"); if ((l_nouvel_element = malloc(sizeof(struct_liste_variables_statiques))) == NULL) { @@ -289,12 +288,10 @@ retrait_variable_statique(struct_process logical1 erreur; -printf("<1>\n"); if ((l_element_a_supprimer = recherche_variable_statique(s_etat_processus, nom_variable, position, ((*s_etat_processus) .mode_execution_programme == 'Y') ? 'P' : 'E')) != NULL) { -printf("<2>\n"); // (*s_etat_processus).pointeur_variable_statique_courante // pointe sur la variable à éliminer. Cette variable est celle qui // est présente dans l'une des feuilles statiques de l'arbre des @@ -306,11 +303,22 @@ printf("<2>\n"); if ((*l_element_liste_a_supprimer).precedent != NULL) { + // L'élément à supprimer n'est pas le premier de la liste. + (*(*l_element_liste_a_supprimer).precedent).suivant = (*l_element_liste_a_supprimer).suivant; + + if ((*l_element_liste_a_supprimer).suivant != NULL) + { + // Il y a un élément suivant. On le chaîne. + (*(*l_element_liste_a_supprimer).suivant).precedent = NULL; + } } else { + // L'élement est le premier de la liste. S'il y a un élément + // suivant, on le chaîne. + if ((*l_element_liste_a_supprimer).suivant != NULL) { (*(*l_element_liste_a_supprimer).suivant).precedent = NULL; @@ -320,16 +328,6 @@ printf("<2>\n"); (*l_element_liste_a_supprimer).suivant; } - if ((*l_element_liste_a_supprimer).suivant != NULL) - { - (*(*l_element_liste_a_supprimer).suivant).precedent = - (*l_element_liste_a_supprimer).precedent; - } - else - { - (*(*l_element_liste_a_supprimer).precedent).suivant = NULL; - } - free(l_element_liste_a_supprimer); // Suppression depuis la feuille statique. Le champ 'precedent' ne sert @@ -337,26 +335,34 @@ printf("<2>\n"); if ((*l_element_a_supprimer).precedent != NULL) { + // L'élément n'est pas le premier de la liste. + (*(*l_element_a_supprimer).precedent).suivant = (*l_element_a_supprimer).suivant; + + if ((*l_element_a_supprimer).suivant != NULL) + { + (*(*l_element_a_supprimer).suivant).precedent = + (*l_element_a_supprimer).precedent; + } + else + { + (*(*l_element_a_supprimer).precedent).suivant = NULL; + } } else { - (*(*l_element_a_supprimer).suivant).precedent = NULL; + // L'élément est le premier de la liste. + + if ((*l_element_a_supprimer).suivant != NULL) + { + (*(*l_element_a_supprimer).suivant).precedent = NULL; + } + (*(*l_element_a_supprimer).feuille).feuille_statique = (*l_element_a_supprimer).suivant; } - if ((*l_element_a_supprimer).suivant != NULL) - { - (*(*l_element_a_supprimer).suivant).precedent = - (*l_element_a_supprimer).precedent; - } - else - { - (*(*l_element_a_supprimer).precedent).suivant = NULL; - } - liberation(s_etat_processus, (*(*l_element_a_supprimer).variable) .objet); free((*(*l_element_a_supprimer).variable).nom);