Diff for /rpl/src/gestion_variables.c between versions 1.70 and 1.100

version 1.70, 2013/03/20 17:11:44 version 1.100, 2017/01/18 15:44:18
Line 1 Line 1
 /*  /*
 ================================================================================  ================================================================================
   RPL/2 (R) version 4.1.13    RPL/2 (R) version 4.1.26
   Copyright (C) 1989-2013 Dr. BERTRAND Joël    Copyright (C) 1989-2017 Dr. BERTRAND Joël
   
   This file is part of RPL/2.    This file is part of RPL/2.
   
Line 1531  retrait_variables_par_niveau(struct_proc Line 1531  retrait_variables_par_niveau(struct_proc
                 break;                  break;
             }              }
   
               if (((*s_etat_processus).at_exit != NULL) &&
                       ((*s_etat_processus).niveau_courant == 0))
               {
                   // Il y a une routine ATEXIT enregistrée. On ne détruit pas
                   // les variables globales qui pourraient y être utilisées.
   
                   break;
               }
   
             while((*(*s_etat_processus).l_liste_variables_par_niveau).liste              while((*(*s_etat_processus).l_liste_variables_par_niveau).liste
                     != NULL)                      != NULL)
             {              {
Line 1863  nombre_variables_partagees(struct_proces Line 1872  nombre_variables_partagees(struct_proces
         return(0);          return(0);
     }      }
   
       // Mutex deverrouillé par liste_variables_partagees();
     if (pthread_mutex_lock(&((*l_element_courant).mutex_feuille)) != 0)      if (pthread_mutex_lock(&((*l_element_courant).mutex_feuille)) != 0)
     {      {
         (*s_etat_processus).erreur_systeme = d_es_processus;          (*s_etat_processus).erreur_systeme = d_es_processus;
Line 1953  liste_variables_locales(struct_processus Line 1963  liste_variables_locales(struct_processus
   
     if (l_element_courant == NULL)      if (l_element_courant == NULL)
     {      {
         return(0);          return(position);
     }      }
   
     if ((*l_element_courant).feuille != NULL)      if ((*l_element_courant).feuille != NULL)
Line 1973  liste_variables_locales(struct_processus Line 1983  liste_variables_locales(struct_processus
             tableau[position].variable_partagee =              tableau[position].variable_partagee =
                     (*(*l_variable).variable).variable_partagee;                      (*(*l_variable).variable).variable_partagee;
             tableau[position].variable_masquee = d_faux;              tableau[position].variable_masquee = d_faux;
               tableau[position].mutex = NULL;
   
             position++;              position++;
   
             l_variable = (*l_variable).suivant;              l_variable = (*l_variable).suivant;
         } while(l_variable != (*l_element_courant).feuille);          } while(l_variable != (*l_element_courant).feuille);
     }      }
Line 1991  liste_variables_locales(struct_processus Line 2003  liste_variables_locales(struct_processus
                 tableau[position].nom = (*(*l_variable_statique).variable).nom;                  tableau[position].nom = (*(*l_variable_statique).variable).nom;
                 tableau[position].niveau =                  tableau[position].niveau =
                         (*(*l_variable_statique).variable).niveau;                          (*(*l_variable_statique).variable).niveau;
                 tableau[position].objet =                  tableau[position].objet = (*(*l_variable_statique).variable)
                         (*(*l_variable_statique).variable).objet;                          .objet;
                 tableau[position].variable_verrouillee = d_faux;                  tableau[position].variable_verrouillee = d_faux;
                 tableau[position].variable_statique =                  tableau[position].variable_statique =
                         (*(*l_variable_statique).variable).variable_statique;                          (*(*l_variable_statique).variable).variable_statique;
                 tableau[position].variable_partagee.pointeur = NULL;                  tableau[position].variable_partagee.pointeur = NULL;
                 tableau[position].variable_masquee = d_vrai;                  tableau[position].variable_masquee = d_vrai;
                   tableau[position].mutex = NULL;
   
                 position++;                  position++;
             }              }
Line 2030  liste_variables_partagees(struct_process Line 2043  liste_variables_partagees(struct_process
   
     if (l_element_courant == NULL)      if (l_element_courant == NULL)
     {      {
         return(0);          return(position);
     }      }
   
     if ((*l_element_courant).feuille != NULL)      if ((*l_element_courant).feuille != NULL)
Line 2046  liste_variables_partagees(struct_process Line 2059  liste_variables_partagees(struct_process
             tableau[position].variable_verrouillee = d_faux;              tableau[position].variable_verrouillee = d_faux;
             tableau[position].variable_partagee =              tableau[position].variable_partagee =
                     (*(*l_variable).variable).variable_partagee;                      (*(*l_variable).variable).variable_partagee;
             tableau[position].variable_partagee.pointeur = NULL;              tableau[position].variable_statique.pointeur = NULL;
             tableau[position].variable_masquee = d_faux;              tableau[position].variable_masquee = d_faux;
               tableau[position].mutex = &((*(*l_variable).variable).mutex);
               pthread_mutex_lock(tableau[position].mutex);
   
             position++;              position++;
   
Line 2064  liste_variables_partagees(struct_process Line 2079  liste_variables_partagees(struct_process
         }          }
     }      }
   
       // Mutex verrouillé par nombre_variables_partagees();
       if (pthread_mutex_unlock(&((*l_element_courant).mutex_feuille)) != 0)
       {
           (*s_etat_processus).erreur_systeme = d_es_processus;
           return(0);
       }
   
     return(position);      return(position);
 }  }
   
Line 2100  liste_variables(struct_processus *s_etat Line 2122  liste_variables(struct_processus *s_etat
   
     nombre_elements = liste_variables_locales(s_etat_processus,      nombre_elements = liste_variables_locales(s_etat_processus,
             tableau, 0, (*s_etat_processus).s_arbre_variables);              tableau, 0, (*s_etat_processus).s_arbre_variables);
     nombre_elements += liste_variables_partagees(s_etat_processus,      nombre_elements = liste_variables_partagees(s_etat_processus,
             tableau, nombre_elements, (*(*s_etat_processus)              tableau, nombre_elements, (*(*s_etat_processus)
             .s_arbre_variables_partagees));              .s_arbre_variables_partagees));
   
Line 2214  copie_arbre_variables(struct_processus * Line 2236  copie_arbre_variables(struct_processus *
                     s_variable = (*((struct_variable *)                      s_variable = (*((struct_variable *)
                             (*l_element_courant).donnee));                              (*l_element_courant).donnee));
   
                     if ((s_variable.nom = strdup((*((struct_variable *)                      if ((s_variable.nom = rpl_malloc(s_nouvel_etat_processus,
                             (*l_element_courant).donnee)).nom)) == NULL)                              (strlen((*((struct_variable *)
                               (*l_element_courant).donnee)).nom) + 1) *
                               sizeof(unsigned char))) == NULL)
                     {                      {
                         (*s_nouvel_etat_processus).erreur_systeme =                          (*s_nouvel_etat_processus).erreur_systeme =
                                 d_es_allocation_memoire;                                  d_es_allocation_memoire;
                         return;                          return;
                     }                      }
   
                       strcpy(s_variable.nom, (*((struct_variable *)
                               (*l_element_courant).donnee)).nom);
   
                     if ((s_variable.objet = copie_objet(s_nouvel_etat_processus,                      if ((s_variable.objet = copie_objet(s_nouvel_etat_processus,
                             (*((struct_variable *) (*l_element_courant).donnee))                              (*((struct_variable *) (*l_element_courant).donnee))
                             .objet, 'P')) == NULL)                              .objet, 'P')) == NULL)
Line 2389  copie_arbre_variables(struct_processus * Line 2416  copie_arbre_variables(struct_processus *
             return;              return;
         }          }
   
         if ((s_variable_statique.nom = malloc((strlen(          if ((s_variable_statique.nom = rpl_malloc(s_nouvel_etat_processus,
                 (*(*l_element_statique_courant).variable).nom) + 1) *                  (strlen((*(*l_element_statique_courant).variable).nom) + 1) *
                 sizeof(unsigned char))) == NULL)                  sizeof(unsigned char))) == NULL)
         {          {
             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;              (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
Line 2427  copie_arbre_variables(struct_processus * Line 2454  copie_arbre_variables(struct_processus *
 */  */
   
 /*  /*
  * Caractères autorisés dans les instructions   * Caractères autorisés dans les variables
  *   *
  * A B C D E F G H I J K L M N O P Q R S T U V W X Y Z   * A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
  * a b c d e f g h i j k l m n o p q r s t u v w x y z   * a b c d e f g h i j k l m n o p q r s t u v w x y z

Removed from v.1.70  
changed lines
  Added in v.1.100


CVSweb interface <joel.bertrand@systella.fr>