--- rpl/src/instructions_s9.c 2012/05/21 17:25:45 1.49 +++ rpl/src/instructions_s9.c 2013/02/27 17:11:44 1.59 @@ -1,7 +1,7 @@ /* ================================================================================ - RPL/2 (R) version 4.1.9 - Copyright (C) 1989-2012 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. @@ -154,26 +154,12 @@ instruction_sort(struct_processus *s_eta if ((*(*s_etat_processus).pointeur_variable_courante).objet == NULL) { - if (pthread_mutex_lock(&((*(*s_etat_processus) - .s_liste_variables_partagees).mutex)) != 0) - { - (*s_etat_processus).erreur_systeme = d_es_processus; - return; - } - if (recherche_variable_partagee(s_etat_processus, (*(*s_etat_processus).pointeur_variable_courante).nom, (*(*s_etat_processus).pointeur_variable_courante) .variable_partagee, (*(*s_etat_processus) - .pointeur_variable_courante).origine) == d_faux) + .pointeur_variable_courante).origine) == NULL) { - if (pthread_mutex_unlock(&((*(*s_etat_processus) - .s_liste_variables_partagees).mutex)) != 0) - { - (*s_etat_processus).erreur_systeme = d_es_processus; - return; - } - (*s_etat_processus).erreur_execution = d_ex_erreur_type_argument; @@ -183,15 +169,12 @@ instruction_sort(struct_processus *s_eta return; } - if (((*(*(*s_etat_processus).s_liste_variables_partagees) - .table[(*(*s_etat_processus).s_liste_variables_partagees) - .position_variable].objet).type != LST) && - ((*(*(*s_etat_processus).s_liste_variables_partagees) - .table[(*(*s_etat_processus).s_liste_variables_partagees) - .position_variable].objet).type != TBL)) + if (((*(*(*s_etat_processus).pointeur_variable_partagee_courante) + .objet).type != LST) && ((*(*(*s_etat_processus) + .pointeur_variable_partagee_courante).objet).type != TBL)) { if (pthread_mutex_unlock(&((*(*s_etat_processus) - .s_liste_variables_partagees).mutex)) != 0) + .pointeur_variable_partagee_courante).mutex)) != 0) { (*s_etat_processus).erreur_systeme = d_es_processus; return; @@ -208,15 +191,14 @@ instruction_sort(struct_processus *s_eta liberation(s_etat_processus, s_objet_liste); - s_objet_liste = (*(*s_etat_processus).s_liste_variables_partagees) - .table[(*(*s_etat_processus).s_liste_variables_partagees) - .position_variable].objet; + s_objet_liste = (*(*s_etat_processus) + .pointeur_variable_partagee_courante).objet; if ((s_objet_copie = copie_objet(s_etat_processus, s_objet_liste, 'N')) == NULL) { if (pthread_mutex_unlock(&((*(*s_etat_processus) - .s_liste_variables_partagees).mutex)) != 0) + .pointeur_variable_partagee_courante).mutex)) != 0) { (*s_etat_processus).erreur_systeme = d_es_processus; return; @@ -594,7 +576,7 @@ instruction_sort(struct_processus *s_eta else { if (pthread_mutex_unlock(&((*(*s_etat_processus) - .s_liste_variables_partagees).mutex)) != 0) + .pointeur_variable_partagee_courante).mutex)) != 0) { (*s_etat_processus).erreur_systeme = d_es_processus; return; @@ -619,12 +601,11 @@ instruction_sort(struct_processus *s_eta { if (variable_partagee == d_vrai) { - (*(*s_etat_processus).s_liste_variables_partagees) - .table[(*(*s_etat_processus).s_liste_variables_partagees) - .position_variable].objet = s_objet_liste; + (*(*s_etat_processus).pointeur_variable_partagee_courante).objet = + s_objet_liste; if (pthread_mutex_unlock(&((*(*s_etat_processus) - .s_liste_variables_partagees).mutex)) != 0) + .pointeur_variable_partagee_courante).mutex)) != 0) { (*s_etat_processus).erreur_systeme = d_es_processus; return; @@ -760,6 +741,18 @@ instruction_save(struct_processus *s_eta * Aucune variable n'est accessible (ni locale, ni globale). */ + if (((*s_etat_processus).autorisation_nom_implicite == 'N') && + ((*((struct_nom *) (*s_objet_1).objet)).symbole == d_faux)) + { + liberation(s_etat_processus, s_objet_1); + liberation(s_etat_processus, s_objet_2); + + (*s_etat_processus).erreur_systeme = d_es; + (*s_etat_processus).erreur_execution = + d_ex_creation_variable_globale; + return; + } + if ((s_variable.nom = malloc((strlen((*((struct_nom *) (*s_objet_1).objet)).nom) + 1) * sizeof(unsigned char))) == NULL) @@ -1323,7 +1316,7 @@ instruction_swi(struct_processus *s_etat } else { - tid = -1; + tid = (pthread_t) -1; attente.tv_sec = 0; attente.tv_nsec = GRANULARITE_us * 1000; @@ -1624,7 +1617,7 @@ instruction_swi(struct_processus *s_etat } else { - tid = -3; + tid = (pthread_t) -3; # ifndef SEMAPHORES_NOMMES if (sem_post(&((*s_etat_processus).semaphore_fork)) != 0)