--- rpl/src/gestion_pile.c 2011/06/27 09:04:55 1.27 +++ rpl/src/gestion_pile.c 2013/03/21 12:08:25 1.48 @@ -1,7 +1,7 @@ /* ================================================================================ - RPL/2 (R) version 4.1.0 - Copyright (C) 1989-2011 Dr. BERTRAND Joël + RPL/2 (R) version 4.1.13 + Copyright (C) 1989-2013 Dr. BERTRAND Joël This file is part of RPL/2. @@ -54,9 +54,9 @@ estimation_taille_pile(struct_processus else { (*s_etat_processus).estimation_taille_pile_tampon = - ((*s_etat_processus).estimation_taille_pile_tampon * - ((double) 0.95)) + ((*s_etat_processus) - .hauteur_pile_operationnelle * ((double) 0.05)); + (((double) (*s_etat_processus).estimation_taille_pile_tampon) * + ((double) 0.95)) + (((double) (*s_etat_processus) + .hauteur_pile_operationnelle) * ((double) 0.05)); } return; @@ -251,14 +251,16 @@ depilement(struct_processus *s_etat_proc void affichage_pile(struct_processus *s_etat_processus, struct_liste_chainee - *l_element_courant, unsigned long niveau_courant) + *l_element_courant, integer8 niveau_courant) { unsigned char registre; registre = (*s_etat_processus).autorisation_conversion_chaine; (*s_etat_processus).autorisation_conversion_chaine = 'N'; + routine_recursive = 1; ecriture_pile(s_etat_processus, stdout, l_element_courant, niveau_courant); + routine_recursive = 0; (*s_etat_processus).autorisation_conversion_chaine = registre; return; @@ -266,15 +268,21 @@ affichage_pile(struct_processus *s_etat_ void ecriture_pile(struct_processus *s_etat_processus, file *flux, - struct_liste_chainee *l_element_courant, unsigned long niveau_courant) + struct_liste_chainee *l, integer8 niveau_courant) { unsigned char *chaine; unsigned char *registre; unsigned char tampon[32 + 1]; + // Évite le warning : argument l_element_courant might be clobbered by + // longjmp or vfork + volatile struct_liste_chainee *l_element_courant; + + l_element_courant = l; + if (l_element_courant != NULL) { - if (setjmp(contexte) == 0) + if (setjmp(contexte_ecriture) == 0) { (*s_etat_processus).var_volatile_recursivite = -1; ecriture_pile(s_etat_processus, flux, @@ -313,9 +321,9 @@ ecriture_pile(struct_processus *s_etat_p return; } - sprintf(tampon, "%lu: ", niveau_courant); + sprintf(tampon, "%lld: ", niveau_courant); - if ((chaine = formateur(s_etat_processus, strlen(tampon), + if ((chaine = formateur(s_etat_processus, (long) strlen(tampon), (*l_element_courant).donnee)) == NULL) { (*s_etat_processus).erreur_systeme = d_es_allocation_memoire; @@ -364,8 +372,7 @@ ecriture_pile(struct_processus *s_etat_p void impression_pile(struct_processus *s_etat_processus, - struct_liste_chainee *l_element_courant, unsigned char methode, - unsigned long niveau_courant) + struct_liste_chainee *l, unsigned char methode, integer8 niveau_courant) { struct_objet s_objet; @@ -373,9 +380,15 @@ impression_pile(struct_processus *s_etat unsigned char *registre; unsigned char tampon[32 + 1]; + // Évite le warning : argument l_element_courant might be clobbered by + // longjmp or vfork + volatile struct_liste_chainee *l_element_courant; + + l_element_courant = l; + if (l_element_courant != NULL) { - if (setjmp(contexte) == 0) + if (setjmp(contexte_impression) == 0) { (*s_etat_processus).var_volatile_recursivite = -1; impression_pile(s_etat_processus, (*l_element_courant).suivant, @@ -407,9 +420,9 @@ impression_pile(struct_processus *s_etat if (methode == 'C') { s_objet.type = CHN; - sprintf(tampon, "%lu: ", niveau_courant); + sprintf(tampon, "%lld: ", niveau_courant); - if ((chaine = formateur(s_etat_processus, strlen(tampon), + if ((chaine = formateur(s_etat_processus, (long) strlen(tampon), (*l_element_courant).donnee)) == NULL) { (*s_etat_processus).erreur_systeme = d_es_allocation_memoire; @@ -440,7 +453,7 @@ impression_pile(struct_processus *s_etat } sprintf((unsigned char *) s_objet.objet, - "\n\\noindent\\begin{verbatim}\n%lu: %s\n\\end{verbatim}", + "\n\\noindent\\begin{verbatim}\n%lld: %s\n\\end{verbatim}", niveau_courant, chaine); free(chaine);