Diff for /rpl/src/instructions_d4.c between versions 1.1 and 1.75

version 1.1, 2010/01/26 15:22:44 version 1.75, 2020/01/10 11:15:44
Line 1 Line 1
 /*  /*
 ================================================================================  ================================================================================
   RPL/2 (R) version 4.0.9    RPL/2 (R) version 4.1.32
   Copyright (C) 1989-2010 Dr. BERTRAND Joël    Copyright (C) 1989-2020 Dr. BERTRAND Joël
   
   This file is part of RPL/2.    This file is part of RPL/2.
   
Line 20 Line 20
 */  */
   
   
 #include "rpl.conv.h"  #include "rpl-conv.h"
   
   
 /*  /*
Line 38 Line 38
 void  void
 instruction_delete(struct_processus *s_etat_processus)  instruction_delete(struct_processus *s_etat_processus)
 {  {
       const char                  *queue;
   
     file                        *fichier;      file                        *fichier;
   
       int                         ios;
   
       integer8                    lecture_i64;
   
     logical1                    erreur;      logical1                    erreur;
     logical1                    existence;      logical1                    existence;
     logical1                    ouverture;      logical1                    ouverture;
   
       sqlite3_stmt                *ppStmt;
   
       struct_descripteur_fichier  *descripteur;
   
     struct_objet                *s_objet_argument;      struct_objet                *s_objet_argument;
       struct_objet                *s_objet_indice;
   
     struct flock                lock;      struct flock                lock;
   
     struct stat                 requete;      struct stat                 requete;
   
       struct timespec             attente;
   
       unsigned char               *commande;
       unsigned char               *nom;
       unsigned char               *utf8;
   
     unsigned long               unite;      unsigned long               unite;
   
     (*s_etat_processus).erreur_execution = d_ex;      (*s_etat_processus).erreur_execution = d_ex;
Line 60  instruction_delete(struct_processus *s_e Line 77  instruction_delete(struct_processus *s_e
   
         if ((*s_etat_processus).langue == 'F')          if ((*s_etat_processus).langue == 'F')
         {          {
             printf("(effacement d'un fichier)\n\n");              printf("(effacement d'un fichier ou d'un enregistrement)\n\n");
         }          }
         else          else
         {          {
             printf("(delete a file)\n\n");              printf("(delete file or record)\n\n");
         }          }
   
         printf("    1: %s\n", d_CHN);          printf("    1: %s\n\n", d_CHN);
   
           printf("    2: %s, %s\n", d_CHN, d_INT);
           printf("    1: %s\n", d_FCH);
         return;          return;
     }      }
     else if ((*s_etat_processus).test_instruction == 'Y')      else if ((*s_etat_processus).test_instruction == 'Y')
Line 79  instruction_delete(struct_processus *s_e Line 98  instruction_delete(struct_processus *s_e
   
     if (test_cfsf(s_etat_processus, 31) == d_vrai)      if (test_cfsf(s_etat_processus, 31) == d_vrai)
     {      {
         if (empilement_pile_last(s_etat_processus, 1) == d_erreur)          if ((*s_etat_processus).l_base_pile == NULL)
         {          {
               (*s_etat_processus).erreur_execution = d_ex_manque_argument;
             return;              return;
         }          }
   
           if ((*(*(*s_etat_processus).l_base_pile).donnee).type == FCH)
           {
               if (empilement_pile_last(s_etat_processus, 2) == d_erreur)
               {
                   return;
               }
           }
           else
           {
               if (empilement_pile_last(s_etat_processus, 1) == d_erreur)
               {
                   return;
               }
           }
     }      }
   
     if (depilement(s_etat_processus, &((*s_etat_processus).l_base_pile),      if (depilement(s_etat_processus, &((*s_etat_processus).l_base_pile),
Line 94  instruction_delete(struct_processus *s_e Line 129  instruction_delete(struct_processus *s_e
   
     if ((*s_objet_argument).type == CHN)      if ((*s_objet_argument).type == CHN)
     {      {
         if (stat((unsigned char *) (*s_objet_argument).objet,          if ((nom = transliteration(s_etat_processus,
                 &requete) != 0)                  (unsigned char *) (*s_objet_argument).objet,
                   d_locale, "UTF-8")) == NULL)
         {          {
             liberation(s_etat_processus, s_objet_argument);              liberation(s_etat_processus, s_objet_argument);
               return;
           }
   
           if (stat(nom, &requete) != 0)
           {
               liberation(s_etat_processus, s_objet_argument);
               free(nom);
   
             (*s_etat_processus).erreur_execution =              (*s_etat_processus).erreur_execution =
                     d_ex_erreur_acces_fichier;                      d_ex_erreur_acces_fichier;
Line 106  instruction_delete(struct_processus *s_e Line 149  instruction_delete(struct_processus *s_e
   
         if (S_ISREG(requete.st_mode)) // Fichier régulier          if (S_ISREG(requete.st_mode)) // Fichier régulier
         {          {
             if ((fichier = fopen((unsigned char *)              if ((fichier = fopen(nom, "r+")) == NULL)
                     (*s_objet_argument).objet, "r+")) == NULL)  
             {              {
                 liberation(s_etat_processus, s_objet_argument);                  liberation(s_etat_processus, s_objet_argument);
                   free(nom);
   
                 (*s_etat_processus).erreur_execution =                  (*s_etat_processus).erreur_execution =
                         d_ex_erreur_acces_fichier;                          d_ex_erreur_acces_fichier;
Line 124  instruction_delete(struct_processus *s_e Line 167  instruction_delete(struct_processus *s_e
   
             if (fcntl(fileno(fichier), F_GETLK, &lock) == -1)              if (fcntl(fileno(fichier), F_GETLK, &lock) == -1)
             {              {
                   free(nom);
   
                 if (fclose(fichier) != 0)                  if (fclose(fichier) != 0)
                 {                  {
                     liberation(s_etat_processus, s_objet_argument);                      liberation(s_etat_processus, s_objet_argument);
Line 143  instruction_delete(struct_processus *s_e Line 188  instruction_delete(struct_processus *s_e
             if (lock.l_type != F_UNLCK)              if (lock.l_type != F_UNLCK)
             {              {
                 liberation(s_etat_processus, s_objet_argument);                  liberation(s_etat_processus, s_objet_argument);
                   free(nom);
   
                 (*s_etat_processus).erreur_execution =                  (*s_etat_processus).erreur_execution =
                         d_ex_erreur_acces_fichier;                          d_ex_erreur_acces_fichier;
                 return;                  return;
             }              }
   
             erreur = caracteristiques_fichier(s_etat_processus,              erreur = caracteristiques_fichier(s_etat_processus, nom,
                     (unsigned char *) (*s_objet_argument).objet,  
                     &existence, &ouverture, &unite);                      &existence, &ouverture, &unite);
   
             if ((erreur != d_absence_erreur) || (ouverture == d_vrai))              if ((erreur != d_absence_erreur) || (ouverture == d_vrai))
             {              {
                 liberation(s_etat_processus, s_objet_argument);                  liberation(s_etat_processus, s_objet_argument);
                   free(nom);
   
                 (*s_etat_processus).erreur_execution =                  (*s_etat_processus).erreur_execution =
                         d_ex_erreur_acces_fichier;                          d_ex_erreur_acces_fichier;
                 return;                  return;
             }              }
   
             if (destruction_fichier((unsigned char *)              if (destruction_fichier(nom) == d_erreur)
                     (*s_objet_argument).objet) == d_erreur)  
             {              {
                 liberation(s_etat_processus, s_objet_argument);                  liberation(s_etat_processus, s_objet_argument);
                   free(nom);
   
                 (*s_etat_processus).erreur_execution =                  (*s_etat_processus).erreur_execution =
                         d_ex_erreur_acces_fichier;                          d_ex_erreur_acces_fichier;
Line 174  instruction_delete(struct_processus *s_e Line 220  instruction_delete(struct_processus *s_e
         }          }
         else // Socket          else // Socket
         {          {
             if (unlink((unsigned char *) (*s_objet_argument).objet) != 0)              if (unlink(nom) != 0)
             {              {
                 liberation(s_etat_processus, s_objet_argument);                  liberation(s_etat_processus, s_objet_argument);
                   free(nom);
   
                 (*s_etat_processus).erreur_execution =                  (*s_etat_processus).erreur_execution =
                         d_ex_erreur_acces_fichier;                          d_ex_erreur_acces_fichier;
                 return;                  return;
             }              }
         }          }
   
           free(nom);
       }
       else if ((*s_objet_argument).type == FCH)
       {
           if ((descripteur = descripteur_fichier(s_etat_processus,
                   (struct_fichier *) (*s_objet_argument).objet)) == NULL)
           {
               return;
           }
   
           /*
            * Vérification des verrous
            */
   
           lock.l_type = F_RDLCK;
           lock.l_whence = SEEK_SET;
           lock.l_start = 0;
           lock.l_len = 0;
           lock.l_pid = getpid();
   
           if (fcntl(fileno((*descripteur).descripteur_c), F_GETLK, &lock)
                   == -1)
           {
               liberation(s_etat_processus, s_objet_argument);
   
               (*s_etat_processus).erreur_systeme = d_es_erreur_fichier;
               return;
           }
   
           if (lock.l_type != F_UNLCK)
           {
               liberation(s_etat_processus, s_objet_argument);
   
               (*s_etat_processus).erreur_execution =
                       d_ex_fichier_verrouille;
               return;
           }
   
           if ((*((struct_fichier *) (*s_objet_argument).objet))
                   .protection == 'R')
           {
               liberation(s_etat_processus, s_objet_argument);
   
               (*s_etat_processus).erreur_execution = d_ex_erreur_acces_fichier;
               return;
           }
   
           if ((*((struct_fichier *) (*s_objet_argument).objet)).binaire == 'N')
           {
               if ((*((struct_fichier *) (*s_objet_argument).objet)).acces
                       == 'S')
               {
                   liberation(s_etat_processus, s_objet_argument);
   
                   (*s_etat_processus).erreur_execution = d_ex_erreur_type_fichier;
                   return;
               }
               else if ((*((struct_fichier *) (*s_objet_argument).objet)).acces
                       == 'D')
               {
                   BUG(((*descripteur).type == 'C'), uprintf("Bad filtype !\n"));
   
                   if (depilement(s_etat_processus, &((*s_etat_processus)
                           .l_base_pile), &s_objet_indice) == d_erreur)
                   {
                       (*s_etat_processus).erreur_execution = d_ex_manque_argument;
                       return;
                   }
   
                   if ((*s_objet_indice).type != INT)
                   {
                       liberation(s_etat_processus, s_objet_argument);
                       liberation(s_etat_processus, s_objet_indice);
   
                       (*s_etat_processus).erreur_execution =
                               d_ex_erreur_type_argument;
                       return;
                   }
   
                   if (alsprintf(s_etat_processus, &commande,
                           "select count(*) from data where id = %lld",
                           (*((integer8 *) (*s_objet_indice).objet))) < 0)
                   {
                       (*s_etat_processus).erreur_systeme =
                               d_es_allocation_memoire;
                       return;
                   }
   
                   if (sqlite3_prepare_v2((*descripteur).descripteur_sqlite,
                           commande, (int) strlen(commande), &ppStmt, &queue)
                           != SQLITE_OK)
                   {
                       (*s_etat_processus).erreur_systeme = d_es_erreur_fichier;
                       return;
                   }
   
                   attente.tv_sec = 0;
                   attente.tv_nsec = GRANULARITE_us * 1000;
   
                   do
                   {
                       ios = sqlite3_step(ppStmt);
   
                       if (ios == SQLITE_ROW)
                       {
                           break;
                       }
                       else if ((ios == SQLITE_BUSY) || (ios == SQLITE_LOCKED))
                       {
                           nanosleep(&attente, NULL);
                           INCR_GRANULARITE(attente.tv_nsec);
                       }
                       else
                       {
                           (*s_etat_processus).erreur_systeme =
                                   d_es_erreur_fichier;
                           return;
                       }
                   } while(ios != SQLITE_ROW);
   
                   lecture_i64 = sqlite3_column_int64(ppStmt, 0);
   
                   if (sqlite3_step(ppStmt) != SQLITE_DONE)
                   {
                       (*s_etat_processus).erreur_systeme = d_es_erreur_fichier;
                       return;
                   }
   
                   if (sqlite3_finalize(ppStmt) != SQLITE_OK)
                   {
                       (*s_etat_processus).erreur_systeme = d_es_erreur_fichier;
                       return;
                   }
   
                   free(commande);
   
                   if (lecture_i64 == 0)
                   {
                       liberation(s_etat_processus, s_objet_argument);
                       liberation(s_etat_processus, s_objet_indice);
   
                       (*s_etat_processus).erreur_execution =
                               d_ex_enregistrement_inexistant;
                       return;
                   }
   
                   if (alsprintf(s_etat_processus, &commande,
                           "delete from data where id = %lld",
                           (*((integer8 *) (*s_objet_indice).objet))) < 0)
                   {
                       (*s_etat_processus).erreur_systeme =
                               d_es_allocation_memoire;
                       return;
                   }
   
                   if (sqlite3_prepare_v2((*descripteur).descripteur_sqlite,
                           commande, (int) strlen(commande), &ppStmt, &queue)
                           != SQLITE_OK)
                   {
                       (*s_etat_processus).erreur_systeme = d_es_erreur_fichier;
                       return;
                   }
   
                   if (sqlite3_step(ppStmt) != SQLITE_DONE)
                   {
                       (*s_etat_processus).erreur_systeme = d_es_erreur_fichier;
                       return;
                   }
   
                   if (sqlite3_finalize(ppStmt) != SQLITE_OK)
                   {
                       (*s_etat_processus).erreur_systeme = d_es_erreur_fichier;
                       return;
                   }
   
                   free(commande);
                   liberation(s_etat_processus, s_objet_indice);
               }
               else
               {
                   BUG(((*descripteur).type == 'C'), uprintf("Bad filtype !\n"));
   
                   if (depilement(s_etat_processus, &((*s_etat_processus)
                           .l_base_pile), &s_objet_indice) == d_erreur)
                   {
                       (*s_etat_processus).erreur_execution = d_ex_manque_argument;
                       return;
                   }
   
                   if ((*s_objet_indice).type != CHN)
                   {
                       liberation(s_etat_processus, s_objet_argument);
                       liberation(s_etat_processus, s_objet_indice);
   
                       (*s_etat_processus).erreur_execution =
                               d_ex_erreur_type_argument;
                       return;
                   }
   
                   // Récupération de l'identifiant de la clef
   
                   if ((utf8 = transliteration(s_etat_processus,
                           (unsigned char *) (*s_objet_indice).objet, d_locale,
                           "UTF-8")) == NULL)
                   {
                       liberation(s_etat_processus, s_objet_argument);
                       liberation(s_etat_processus, s_objet_indice);
   
                       return;
                   }
   
                   if (alsprintf(s_etat_processus, &commande,
                           "select id from key where key = '{ \"%s\" }'", utf8)
                           < 0)
                   {
                       (*s_etat_processus).erreur_systeme =
                               d_es_allocation_memoire;
                       return;
                   }
   
                   free(utf8);
   
                   if (sqlite3_prepare_v2((*descripteur).descripteur_sqlite,
                           commande, (int) strlen(commande), &ppStmt, &queue)
                           != SQLITE_OK)
                   {
                       (*s_etat_processus).erreur_systeme = d_es_erreur_fichier;
                       return;
                   }
   
                   attente.tv_sec = 0;
                   attente.tv_nsec = GRANULARITE_us * 1000;
   
                   do
                   {
                       ios = sqlite3_step(ppStmt);
   
                       switch(ios)
                       {
                           case SQLITE_ROW:
                           {
                               // Correspondance
                               break;
                           }
   
                           case SQLITE_DONE:
                           {
                               // Aucune correspondance
                               if (sqlite3_finalize(ppStmt) != SQLITE_OK)
                               {
                                   (*s_etat_processus).erreur_systeme =
                                           d_es_erreur_fichier;
                                   return;
                               }
   
                               free(commande);
   
                               liberation(s_etat_processus, s_objet_argument);
                               liberation(s_etat_processus, s_objet_indice);
   
                               (*s_etat_processus).erreur_execution =
                                       d_ex_enregistrement_inexistant;
                               return;
                           }
   
                           case SQLITE_LOCKED:
                           case SQLITE_BUSY:
                           {
                               nanosleep(&attente, NULL);
                               INCR_GRANULARITE(attente.tv_nsec);
                               break;
                           }
   
                           default:
                           {
                               (*s_etat_processus).erreur_systeme =
                                       d_es_erreur_fichier;
                               return;
                           }
                       }
                   } while(ios != SQLITE_ROW);
   
                   if (sqlite3_column_type(ppStmt, 0) != SQLITE_INTEGER)
                   {
                       (*s_etat_processus).erreur_systeme = d_es_erreur_fichier;
                       return;
                   }
   
                   lecture_i64 = sqlite3_column_int64(ppStmt, 0);
   
                   if (sqlite3_step(ppStmt) != SQLITE_DONE)
                   {
                       (*s_etat_processus).erreur_systeme = d_es_erreur_fichier;
                       return;
                   }
   
                   if (sqlite3_finalize(ppStmt) != SQLITE_OK)
                   {
                       (*s_etat_processus).erreur_systeme =
                               d_es_erreur_fichier;
                       return;
                   }
   
                   free(commande);
   
                   if (alsprintf(s_etat_processus, &commande,
                           "delete from data where key_id = %lld", lecture_i64)
                           < 0)
                   {
                       (*s_etat_processus).erreur_systeme =
                               d_es_allocation_memoire;
                       return;
                   }
   
                   if (sqlite3_prepare_v2((*descripteur).descripteur_sqlite,
                           commande, (int) strlen(commande), &ppStmt, &queue)
                           != SQLITE_OK)
                   {
                       (*s_etat_processus).erreur_systeme = d_es_erreur_fichier;
                       return;
                   }
   
                   if (sqlite3_step(ppStmt) != SQLITE_DONE)
                   {
                       (*s_etat_processus).erreur_systeme = d_es_erreur_fichier;
                       return;
                   }
   
                   if (sqlite3_finalize(ppStmt) != SQLITE_OK)
                   {
                       (*s_etat_processus).erreur_systeme =
                               d_es_erreur_fichier;
                       return;
                   }
   
                   free(commande);
   
                   if (alsprintf(s_etat_processus, &commande,
                           "delete from key where id = %lld", lecture_i64) < 0)
                   {
                       (*s_etat_processus).erreur_systeme =
                               d_es_allocation_memoire;
                       return;
                   }
   
                   if (sqlite3_prepare_v2((*descripteur).descripteur_sqlite,
                           commande, (int) strlen(commande), &ppStmt, &queue)
                           != SQLITE_OK)
                   {
                       (*s_etat_processus).erreur_systeme = d_es_erreur_fichier;
                       return;
                   }
   
                   if (sqlite3_step(ppStmt) != SQLITE_DONE)
                   {
                       (*s_etat_processus).erreur_systeme = d_es_erreur_fichier;
                       return;
                   }
   
                   if (sqlite3_finalize(ppStmt) != SQLITE_OK)
                   {
                       (*s_etat_processus).erreur_systeme =
                               d_es_erreur_fichier;
                       return;
                   }
   
                   free(commande);
                   liberation(s_etat_processus, s_objet_indice);
               }
           }
           else // Fichiers non formatés
           {
           }
     }      }
     else      else
     {      {
Line 286  instruction_drws(struct_processus *s_eta Line 707  instruction_drws(struct_processus *s_eta
   
     int                         dimensions;      int                         dimensions;
   
     logical1                    presence_variable;  
     logical1                    matrice_entiere;      logical1                    matrice_entiere;
   
     long                        i;  
   
     struct_objet                *s_objet_statistique;      struct_objet                *s_objet_statistique;
   
     unsigned char               *nom_fichier;      unsigned char               *nom_fichier;
   
     unsigned long               j;      integer8                    j;
   
     struct_fichier_graphique    *l_fichier_courant;      struct_fichier_graphique    *l_fichier_courant;
     struct_fichier_graphique    *l_fichier_precedent;      struct_fichier_graphique    *l_fichier_precedent;
Line 337  instruction_drws(struct_processus *s_eta Line 755  instruction_drws(struct_processus *s_eta
      * Vérification de la présence de la matrice statistique       * Vérification de la présence de la matrice statistique
      */       */
   
     if (recherche_variable(s_etat_processus, ds_sdat) == d_faux)      if (recherche_variable_globale(s_etat_processus, ds_sdat) == d_faux)
     {      {
         /*          /*
          * Aucune variable ds_sdat n'existe.           * Aucune variable ds_sdat n'existe.
          */           */
   
         (*s_etat_processus).erreur_execution = d_ex_absence_observations;          if ((*s_etat_processus).erreur_execution == d_ex)
         (*s_etat_processus).erreur_systeme = d_es;  
   
         return;  
     }  
   
     i = (*s_etat_processus).position_variable_courante;  
     presence_variable = d_faux;  
   
     while(i >= 0)  
     {  
         if ((strcmp((*s_etat_processus).s_liste_variables[i].nom,  
                 ds_sdat) == 0) && ((*s_etat_processus)  
                 .s_liste_variables[i].niveau == 1))  
         {          {
             presence_variable = d_vrai;              (*s_etat_processus).erreur_execution = d_ex_absence_observations;
             break;  
         }          }
   
         i--;          (*s_etat_processus).erreur_systeme = d_es;
     }  
   
     if (presence_variable == d_faux)  
     {  
         (*s_etat_processus).erreur_execution = d_ex_absence_observations;  
         return;          return;
     }      }
   
     if ((s_objet_statistique = (*s_etat_processus).s_liste_variables[i].objet)      s_objet_statistique = (*(*s_etat_processus).pointeur_variable_courante)
             == NULL)              .objet;
     {  
         (*s_etat_processus).erreur_execution = d_ex_variable_partagee;  
         return;  
     }  
   
     if ((*s_objet_statistique).type == MIN)      if ((*s_objet_statistique).type == MIN)
     {      {
Line 460  instruction_drws(struct_processus *s_eta Line 856  instruction_drws(struct_processus *s_eta
   
             if (((*s_etat_processus).colonne_statistique_1 < 1) ||              if (((*s_etat_processus).colonne_statistique_1 < 1) ||
                     ((*s_etat_processus).colonne_statistique_2 < 1) ||                      ((*s_etat_processus).colonne_statistique_2 < 1) ||
                     ((*s_etat_processus).colonne_statistique_1 > (signed long)                      ((*s_etat_processus).colonne_statistique_1 >
                     (*((struct_matrice *) (*s_objet_statistique).objet))                      (*((struct_matrice *) (*s_objet_statistique).objet))
                     .nombre_colonnes) ||                      .nombre_colonnes) ||
                     ((*s_etat_processus).colonne_statistique_2 > (signed long)                      ((*s_etat_processus).colonne_statistique_2 >
                     (*((struct_matrice *) (*s_objet_statistique).objet))                      (*((struct_matrice *) (*s_objet_statistique).objet))
                     .nombre_colonnes))                      .nombre_colonnes))
             {              {
Line 703  instruction_decr(struct_processus *s_eta Line 1099  instruction_decr(struct_processus *s_eta
   
         liberation(s_etat_processus, s_objet_argument);          liberation(s_etat_processus, s_objet_argument);
   
         if ((*s_etat_processus).s_liste_variables          if ((*(*s_etat_processus).pointeur_variable_courante)
                 [(*s_etat_processus).position_variable_courante]  
                 .variable_verrouillee == d_vrai)                  .variable_verrouillee == d_vrai)
         {          {
             (*s_etat_processus).erreur_execution =              (*s_etat_processus).erreur_execution =
Line 712  instruction_decr(struct_processus *s_eta Line 1107  instruction_decr(struct_processus *s_eta
             return;              return;
         }          }
   
         if ((*s_etat_processus).s_liste_variables          if ((*(*s_etat_processus).pointeur_variable_courante).objet
                 [(*s_etat_processus).position_variable_courante].objet  
                 == NULL)                  == 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,              if (recherche_variable_partagee(s_etat_processus,
                     (*s_etat_processus).s_liste_variables                      (*(*s_etat_processus).pointeur_variable_courante).nom,
                     [(*s_etat_processus).position_variable_courante].nom,                      (*(*s_etat_processus).pointeur_variable_courante)
                     (*s_etat_processus).s_liste_variables                      .variable_partagee, (*(*s_etat_processus)
                     [(*s_etat_processus).position_variable_courante]                      .pointeur_variable_courante).origine) == NULL)
                     .variable_partagee, (*s_etat_processus).s_liste_variables  
                     [(*s_etat_processus).position_variable_courante]  
                     .origine) == d_faux)  
             {              {
                 (*s_etat_processus).erreur_systeme = d_es;                  (*s_etat_processus).erreur_systeme = d_es;
                 (*s_etat_processus).erreur_execution =                  (*s_etat_processus).erreur_execution =
Line 740  instruction_decr(struct_processus *s_eta Line 1124  instruction_decr(struct_processus *s_eta
             }              }
   
             s_objet_argument = (*(*s_etat_processus)              s_objet_argument = (*(*s_etat_processus)
                     .s_liste_variables_partagees).table                      .pointeur_variable_partagee_courante).objet;
                     [(*(*s_etat_processus).s_liste_variables_partagees)  
                     .position_variable].objet;  
             variable_partagee = d_vrai;              variable_partagee = d_vrai;
         }          }
         else          else
         {          {
             s_objet_argument = (*s_etat_processus).s_liste_variables              s_objet_argument = (*(*s_etat_processus).pointeur_variable_courante)
                     [(*s_etat_processus).position_variable_courante].objet;                      .objet;
             variable_partagee = d_faux;              variable_partagee = d_faux;
         }          }
   
Line 758  instruction_decr(struct_processus *s_eta Line 1140  instruction_decr(struct_processus *s_eta
             if (variable_partagee == d_vrai)              if (variable_partagee == d_vrai)
             {              {
                 if (pthread_mutex_unlock(&((*(*s_etat_processus)                  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;                      (*s_etat_processus).erreur_systeme = d_es_processus;
                     return;                      return;
Line 773  instruction_decr(struct_processus *s_eta Line 1155  instruction_decr(struct_processus *s_eta
   
         if (variable_partagee == d_vrai)          if (variable_partagee == d_vrai)
         {          {
             (*s_etat_processus).s_liste_variables[(*s_etat_processus)              (*(*s_etat_processus).pointeur_variable_courante).objet = NULL;
                     .position_variable_courante].objet = NULL;              (*(*s_etat_processus).pointeur_variable_partagee_courante).objet =
             (*(*s_etat_processus)                      s_copie_argument;
                     .s_liste_variables_partagees).table  
                     [(*(*s_etat_processus).s_liste_variables_partagees)  
                     .position_variable].objet = s_copie_argument;  
         }          }
         else          else
         {          {
             (*s_etat_processus).s_liste_variables[(*s_etat_processus)              (*(*s_etat_processus).pointeur_variable_courante).objet =
                     .position_variable_courante].objet = s_copie_argument;                      s_copie_argument;
         }          }
   
         if ((*s_copie_argument).type == INT)          if ((*s_copie_argument).type == INT)
Line 793  instruction_decr(struct_processus *s_eta Line 1172  instruction_decr(struct_processus *s_eta
             if (variable_partagee == d_vrai)              if (variable_partagee == d_vrai)
             {              {
                 if (pthread_mutex_unlock(&((*(*s_etat_processus)                  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;                      (*s_etat_processus).erreur_systeme = d_es_processus;
                     return;                      return;
Line 805  instruction_decr(struct_processus *s_eta Line 1184  instruction_decr(struct_processus *s_eta
             if (variable_partagee == d_vrai)              if (variable_partagee == d_vrai)
             {              {
                 if (pthread_mutex_unlock(&((*(*s_etat_processus)                  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;                      (*s_etat_processus).erreur_systeme = d_es_processus;
                     return;                      return;

Removed from v.1.1  
changed lines
  Added in v.1.75


CVSweb interface <joel.bertrand@systella.fr>