--- rpl/src/instructions_p4.c 2013/02/26 19:56:15 1.44 +++ rpl/src/instructions_p4.c 2024/01/09 07:33:53 1.78 @@ -1,7 +1,7 @@ /* ================================================================================ - RPL/2 (R) version 4.1.12 - Copyright (C) 1989-2013 Dr. BERTRAND Joël + RPL/2 (R) version 4.1.35 + Copyright (C) 1989-2024 Dr. BERTRAND Joël This file is part of RPL/2. @@ -470,8 +470,9 @@ instruction_prvar(struct_processus *s_et void instruction_prusr(struct_processus *s_etat_processus) { - int i; - int nb_variables; + integer8 i; + integer8 j; + integer8 nb_variables; struct_objet s_objet; @@ -512,8 +513,8 @@ instruction_prusr(struct_processus *s_et nb_variables = nombre_variables(s_etat_processus); - if ((tableau = malloc(nb_variables * sizeof(struct_tableau_variables))) - == NULL) + if ((tableau = malloc(((size_t) nb_variables) * + sizeof(struct_tableau_variables))) == NULL) { liberation_mutexes_arbre_variables_partagees(s_etat_processus, (*(*s_etat_processus).s_arbre_variables_partagees)); @@ -521,8 +522,7 @@ instruction_prusr(struct_processus *s_et return; } - liste_variables(s_etat_processus, tableau); - + nb_variables = liste_variables(s_etat_processus, tableau); s_objet.type = CHN; for(i = 0; i < nb_variables; i++) @@ -530,15 +530,28 @@ instruction_prusr(struct_processus *s_et if ((s_objet.objet = malloc((strlen(tableau[i].nom) + 64) * sizeof(unsigned char))) == NULL) { + for(j = i; j < nb_variables; j++) + { + if (tableau[j].mutex != NULL) + { + pthread_mutex_unlock(tableau[i].mutex); + } + } + free(tableau); (*s_etat_processus).erreur_systeme = d_es_allocation_memoire; return; } - sprintf((unsigned char *) s_objet.objet, "\\\\noindent %s [%lu]\n", + sprintf((unsigned char *) s_objet.objet, "\\\\noindent %s [%lld]\n", tableau[i].nom, tableau[i].niveau); + if (tableau[i].mutex != NULL) + { + pthread_mutex_unlock(tableau[i].mutex); + } + formateur_tex(s_etat_processus, &s_objet, 'N'); free(s_objet.objet); } @@ -563,14 +576,13 @@ instruction_prusr(struct_processus *s_et void instruction_prmd(struct_processus *s_etat_processus) { + long i; + long j; long longueur_utile; long longueur_utile_limite; struct_objet s_objet; - unsigned long i; - unsigned long j; - (*s_etat_processus).erreur_execution = d_ex; if ((*s_etat_processus).affichage_arguments == 'Y') @@ -1289,7 +1301,7 @@ instruction_perm(struct_processus *s_eta return; } - if (fabs(c - floor(c)) < fabs(ceil(c) - c)) + if (abs(c - floor(c)) < fabs(ceil(c) - c)) { (*((integer8 *) (*s_objet_resultat).objet)) = (integer8) floor(c); @@ -1342,7 +1354,7 @@ instruction_psdev(struct_processus *s_et struct_objet *s_objet_resultat; struct_objet *s_objet_temporaire; - unsigned long nombre_colonnes; + integer8 nombre_colonnes; (*s_etat_processus).erreur_execution = d_ex; @@ -1424,6 +1436,7 @@ instruction_psdev(struct_processus *s_et } if (((*s_objet_resultat).objet = ecart_type_statistique( + s_etat_processus, (struct_matrice *) (*s_objet_statistique).objet, 'P')) == NULL) { (*s_etat_processus).erreur_systeme = d_es_allocation_memoire; @@ -1519,7 +1532,7 @@ instruction_pvar(struct_processus *s_eta struct_objet *s_objet_resultat; struct_objet *s_objet_temporaire; - unsigned long nombre_colonnes; + integer8 nombre_colonnes; (*s_etat_processus).erreur_execution = d_ex; @@ -1601,8 +1614,8 @@ instruction_pvar(struct_processus *s_eta return; } - if (((*s_objet_resultat).objet = variance_statistique((struct_matrice *) - (*s_objet_statistique).objet, 'P')) == NULL) + if (((*s_objet_resultat).objet = variance_statistique(s_etat_processus, + (struct_matrice *) (*s_objet_statistique).objet, 'P')) == NULL) { (*s_etat_processus).erreur_systeme = d_es_allocation_memoire; return;