Diff for /rpl/src/instructions_d4.c between versions 1.41 and 1.62

version 1.41, 2012/10/01 11:05:03 version 1.62, 2015/06/08 14:11:34
Line 1 Line 1
 /*  /*
 ================================================================================  ================================================================================
   RPL/2 (R) version 4.1.11    RPL/2 (R) version 4.1.22
   Copyright (C) 1989-2012 Dr. BERTRAND Joël    Copyright (C) 1989-2015 Dr. BERTRAND Joël
   
   This file is part of RPL/2.    This file is part of RPL/2.
   
Line 42  instruction_delete(struct_processus *s_e Line 42  instruction_delete(struct_processus *s_e
   
     file                        *fichier;      file                        *fichier;
   
       int                         ios;
   
     integer8                    lecture_i64;      integer8                    lecture_i64;
   
     logical1                    erreur;      logical1                    erreur;
Line 59  instruction_delete(struct_processus *s_e Line 61  instruction_delete(struct_processus *s_e
   
     struct stat                 requete;      struct stat                 requete;
   
       struct timespec             attente;
   
     unsigned char               *commande;      unsigned char               *commande;
     unsigned char               *nom;      unsigned char               *nom;
     unsigned char               *utf8;      unsigned char               *utf8;
Line 306  instruction_delete(struct_processus *s_e Line 310  instruction_delete(struct_processus *s_e
                     return;                      return;
                 }                  }
   
                 if (alsprintf(&commande, "select count(*) from data where "                  if (alsprintf(s_etat_processus, &commande,
                         "id = %lld", (*((integer8 *) (*s_objet_indice).objet)))                          "select count(*) from data where id = %lld",
                         < 0)                          (*((integer8 *) (*s_objet_indice).objet))) < 0)
                 {                  {
                     (*s_etat_processus).erreur_systeme =                      (*s_etat_processus).erreur_systeme =
                             d_es_allocation_memoire;                              d_es_allocation_memoire;
Line 316  instruction_delete(struct_processus *s_e Line 320  instruction_delete(struct_processus *s_e
                 }                  }
   
                 if (sqlite3_prepare_v2((*descripteur).descripteur_sqlite,                  if (sqlite3_prepare_v2((*descripteur).descripteur_sqlite,
                         commande, strlen(commande), &ppStmt, &queue)                          commande, (int) strlen(commande), &ppStmt, &queue)
                         != SQLITE_OK)                          != SQLITE_OK)
                 {                  {
                     (*s_etat_processus).erreur_systeme = d_es_erreur_fichier;                      (*s_etat_processus).erreur_systeme = d_es_erreur_fichier;
                     return;                      return;
                 }                  }
   
                 if (sqlite3_step(ppStmt) != SQLITE_ROW)                  attente.tv_sec = 0;
                   attente.tv_nsec = GRANULARITE_us * 1000;
   
                   do
                 {                  {
                     (*s_etat_processus).erreur_systeme = d_es_erreur_fichier;                      ios = sqlite3_step(ppStmt);
                     return;  
                 }                      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);                  lecture_i64 = sqlite3_column_int64(ppStmt, 0);
   
Line 355  instruction_delete(struct_processus *s_e Line 377  instruction_delete(struct_processus *s_e
                     return;                      return;
                 }                  }
   
                 if (alsprintf(&commande, "delete from data where id = %lld",                  if (alsprintf(s_etat_processus, &commande,
                           "delete from data where id = %lld",
                         (*((integer8 *) (*s_objet_indice).objet))) < 0)                          (*((integer8 *) (*s_objet_indice).objet))) < 0)
                 {                  {
                     (*s_etat_processus).erreur_systeme =                      (*s_etat_processus).erreur_systeme =
Line 364  instruction_delete(struct_processus *s_e Line 387  instruction_delete(struct_processus *s_e
                 }                  }
   
                 if (sqlite3_prepare_v2((*descripteur).descripteur_sqlite,                  if (sqlite3_prepare_v2((*descripteur).descripteur_sqlite,
                         commande, strlen(commande), &ppStmt, &queue)                          commande, (int) strlen(commande), &ppStmt, &queue)
                         != SQLITE_OK)                          != SQLITE_OK)
                 {                  {
                     (*s_etat_processus).erreur_systeme = d_es_erreur_fichier;                      (*s_etat_processus).erreur_systeme = d_es_erreur_fichier;
Line 419  instruction_delete(struct_processus *s_e Line 442  instruction_delete(struct_processus *s_e
                     return;                      return;
                 }                  }
   
                 if (alsprintf(&commande, "select id from key where key = "                  if (alsprintf(s_etat_processus, &commande,
                         "'{ \"%s\" }'", utf8) < 0)                          "select id from key where key = '{ \"%s\" }'", utf8)
                           < 0)
                 {                  {
                     (*s_etat_processus).erreur_systeme =                      (*s_etat_processus).erreur_systeme =
                             d_es_allocation_memoire;                              d_es_allocation_memoire;
Line 430  instruction_delete(struct_processus *s_e Line 454  instruction_delete(struct_processus *s_e
                 free(utf8);                  free(utf8);
   
                 if (sqlite3_prepare_v2((*descripteur).descripteur_sqlite,                  if (sqlite3_prepare_v2((*descripteur).descripteur_sqlite,
                         commande, strlen(commande), &ppStmt, &queue)                          commande, (int) strlen(commande), &ppStmt, &queue)
                         != SQLITE_OK)                          != SQLITE_OK)
                 {                  {
                     (*s_etat_processus).erreur_systeme = d_es_erreur_fichier;                      (*s_etat_processus).erreur_systeme = d_es_erreur_fichier;
                     return;                      return;
                 }                  }
   
                 switch(sqlite3_step(ppStmt))                  attente.tv_sec = 0;
                   attente.tv_nsec = GRANULARITE_us * 1000;
   
                   do
                 {                  {
                     case SQLITE_ROW:                      ios = sqlite3_step(ppStmt);
                     {  
                         // Correspondance  
                         break;  
                     }  
   
                     case SQLITE_DONE:                      switch(ios)
                     {                      {
                         // Aucune correspondance                          case SQLITE_ROW:
                         if (sqlite3_finalize(ppStmt) != SQLITE_OK)  
                         {                          {
                             (*s_etat_processus).erreur_systeme =                              // Correspondance
                                     d_es_erreur_fichier;                              break;
                             return;  
                         }                          }
   
                         free(commande);                          case SQLITE_DONE:
                           {
                               // Aucune correspondance
                               if (sqlite3_finalize(ppStmt) != SQLITE_OK)
                               {
                                   (*s_etat_processus).erreur_systeme =
                                           d_es_erreur_fichier;
                                   return;
                               }
   
                         liberation(s_etat_processus, s_objet_argument);                              free(commande);
                         liberation(s_etat_processus, s_objet_indice);  
   
                         (*s_etat_processus).erreur_execution =                              liberation(s_etat_processus, s_objet_argument);
                                 d_ex_enregistrement_inexistant;                              liberation(s_etat_processus, s_objet_indice);
                         return;  
                     }  
   
                     default:                              (*s_etat_processus).erreur_execution =
                     {                                      d_ex_enregistrement_inexistant;
                         (*s_etat_processus).erreur_systeme =                              return;
                                 d_es_erreur_fichier;                          }
                         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)                  if (sqlite3_column_type(ppStmt, 0) != SQLITE_INTEGER)
                 {                  {
Line 496  instruction_delete(struct_processus *s_e Line 536  instruction_delete(struct_processus *s_e
   
                 free(commande);                  free(commande);
   
                 if (alsprintf(&commande, "delete from data where key_id = %lld",                  if (alsprintf(s_etat_processus, &commande,
                         lecture_i64) < 0)                          "delete from data where key_id = %lld", lecture_i64)
                           < 0)
                 {                  {
                     (*s_etat_processus).erreur_systeme =                      (*s_etat_processus).erreur_systeme =
                             d_es_allocation_memoire;                              d_es_allocation_memoire;
Line 505  instruction_delete(struct_processus *s_e Line 546  instruction_delete(struct_processus *s_e
                 }                  }
   
                 if (sqlite3_prepare_v2((*descripteur).descripteur_sqlite,                  if (sqlite3_prepare_v2((*descripteur).descripteur_sqlite,
                         commande, strlen(commande), &ppStmt, &queue)                          commande, (int) strlen(commande), &ppStmt, &queue)
                         != SQLITE_OK)                          != SQLITE_OK)
                 {                  {
                     (*s_etat_processus).erreur_systeme = d_es_erreur_fichier;                      (*s_etat_processus).erreur_systeme = d_es_erreur_fichier;
Line 527  instruction_delete(struct_processus *s_e Line 568  instruction_delete(struct_processus *s_e
   
                 free(commande);                  free(commande);
   
                 if (alsprintf(&commande, "delete from key where id = %lld",                  if (alsprintf(s_etat_processus, &commande,
                         lecture_i64) < 0)                          "delete from key where id = %lld", lecture_i64) < 0)
                 {                  {
                     (*s_etat_processus).erreur_systeme =                      (*s_etat_processus).erreur_systeme =
                             d_es_allocation_memoire;                              d_es_allocation_memoire;
Line 536  instruction_delete(struct_processus *s_e Line 577  instruction_delete(struct_processus *s_e
                 }                  }
   
                 if (sqlite3_prepare_v2((*descripteur).descripteur_sqlite,                  if (sqlite3_prepare_v2((*descripteur).descripteur_sqlite,
                         commande, strlen(commande), &ppStmt, &queue)                          commande, (int) strlen(commande), &ppStmt, &queue)
                         != SQLITE_OK)                          != SQLITE_OK)
                 {                  {
                     (*s_etat_processus).erreur_systeme = d_es_erreur_fichier;                      (*s_etat_processus).erreur_systeme = d_es_erreur_fichier;
Line 672  instruction_drws(struct_processus *s_eta Line 713  instruction_drws(struct_processus *s_eta
   
     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 815  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 1069  instruction_decr(struct_processus *s_eta Line 1110  instruction_decr(struct_processus *s_eta
         if ((*(*s_etat_processus).pointeur_variable_courante).objet          if ((*(*s_etat_processus).pointeur_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).pointeur_variable_courante).nom,                      (*(*s_etat_processus).pointeur_variable_courante).nom,
                     (*(*s_etat_processus).pointeur_variable_courante)                      (*(*s_etat_processus).pointeur_variable_courante)
                     .variable_partagee, (*(*s_etat_processus)                      .variable_partagee, (*(*s_etat_processus)
                     .pointeur_variable_courante).origine) == d_faux)                      .pointeur_variable_courante).origine) == NULL)
             {              {
                 (*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 1090  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
Line 1108  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 1124  instruction_decr(struct_processus *s_eta Line 1156  instruction_decr(struct_processus *s_eta
         if (variable_partagee == d_vrai)          if (variable_partagee == d_vrai)
         {          {
             (*(*s_etat_processus).pointeur_variable_courante).objet = NULL;              (*(*s_etat_processus).pointeur_variable_courante).objet = NULL;
             (*(*s_etat_processus)              (*(*s_etat_processus).pointeur_variable_partagee_courante).objet =
                     .s_liste_variables_partagees).table                      s_copie_argument;
                     [(*(*s_etat_processus).s_liste_variables_partagees)  
                     .position_variable].objet = s_copie_argument;  
         }          }
         else          else
         {          {
Line 1142  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 1154  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.41  
changed lines
  Added in v.1.62


CVSweb interface <joel.bertrand@systella.fr>