Diff for /rpl/src/instructions_r4.c between versions 1.59 and 1.69

version 1.59, 2012/06/22 10:12:19 version 1.69, 2013/02/26 19:56:15
Line 1 Line 1
 /*  /*
 ================================================================================  ================================================================================
   RPL/2 (R) version 4.1.9    RPL/2 (R) version 4.1.12
   Copyright (C) 1989-2012 Dr. BERTRAND Joël    Copyright (C) 1989-2013 Dr. BERTRAND Joël
   
   This file is part of RPL/2.    This file is part of RPL/2.
   
Line 1313  instruction_read(struct_processus *s_eta Line 1313  instruction_read(struct_processus *s_eta
                     (*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);
                     {  
                         // Résultat attendu  
                         break;  
                     }  
   
                     case SQLITE_DONE:                      switch(ios)
                     {                      {
                         // Aucun enregistrement                          case SQLITE_ROW:
                         if (sqlite3_finalize(ppStmt) != SQLITE_OK)  
                         {                          {
                             (*s_etat_processus).erreur_systeme =                              // Résultat attendu
                                     d_es_erreur_fichier;                              break;
                             return;  
                         }                          }
   
                         free(commande);                          case SQLITE_DONE:
                           {
                               // Aucun enregistrement
                               if (sqlite3_finalize(ppStmt) != SQLITE_OK)
                               {
                                   (*s_etat_processus).erreur_systeme =
                                           d_es_erreur_fichier;
                                   return;
                               }
   
                         liberation(s_etat_processus, s_objet_argument_1);                              free(commande);
                         liberation(s_etat_processus, s_objet_argument_2);  
   
                         (*s_etat_processus).erreur_execution =                              liberation(s_etat_processus, s_objet_argument_1);
                                 d_ex_enregistrement_inexistant;                              liberation(s_etat_processus, s_objet_argument_2);
                         return;  
                     }  
   
                     default:                              (*s_etat_processus).erreur_execution =
                     {                                      d_ex_enregistrement_inexistant;
                         (*s_etat_processus).erreur_systeme =                              return;
                                 d_es_erreur_fichier;                          }
                         return;  
                           case SQLITE_BUSY:
                           case SQLITE_LOCKED:
                           {
                               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_TEXT)                  if (sqlite3_column_type(ppStmt, 0) != SQLITE_TEXT)
                 {                  {
Line 1469  instruction_read(struct_processus *s_eta Line 1485  instruction_read(struct_processus *s_eta
                     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);
   
                 if (sqlite3_column_type(ppStmt, 0) != SQLITE_INTEGER)                  if (sqlite3_column_type(ppStmt, 0) != SQLITE_INTEGER)
                 {                  {
Line 1525  instruction_read(struct_processus *s_eta Line 1559  instruction_read(struct_processus *s_eta
                     return;                      return;
                 }                  }
   
                 switch(sqlite3_step(ppStmt))                  attente.tv_sec = 0;
                   attente.tv_nsec = GRANULARITE_us * 1000;
   
                   do
                 {                  {
                     case SQLITE_ROW:                      ios = sqlite3_step(ppStmt);
                     {  
                         // Résultat attendu : une clef correspond.  
                         break;  
                     }  
   
                     case SQLITE_DONE:                      switch(ios)
                     {                      {
                         // Aucun enregistrement                          case SQLITE_ROW:
                         if (sqlite3_finalize(ppStmt) != SQLITE_OK)  
                         {                          {
                             (*s_etat_processus).erreur_systeme =                              // Résultat attendu : une clef correspond.
                                     d_es_erreur_fichier;                              break;
                             return;  
                         }                          }
   
                         free(clef_utf8);                          case SQLITE_DONE:
                         free(commande);                          {
                               // Aucun enregistrement
                               if (sqlite3_finalize(ppStmt) != SQLITE_OK)
                               {
                                   (*s_etat_processus).erreur_systeme =
                                           d_es_erreur_fichier;
                                   return;
                               }
   
                         liberation(s_etat_processus, s_objet_argument_1);                              free(clef_utf8);
                         liberation(s_etat_processus, s_objet_argument_2);                              free(commande);
   
                         (*s_etat_processus).erreur_execution =                              liberation(s_etat_processus, s_objet_argument_1);
                                 d_ex_enregistrement_inexistant;                              liberation(s_etat_processus, s_objet_argument_2);
                         return;  
                     }  
   
                     default:                              (*s_etat_processus).erreur_execution =
                     {                                      d_ex_enregistrement_inexistant;
                         (*s_etat_processus).erreur_systeme =                              return;
                                 d_es_erreur_fichier;                          }
                         return;  
                           case SQLITE_BUSY:
                           case SQLITE_LOCKED:
                           {
                               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 1604  instruction_read(struct_processus *s_eta Line 1654  instruction_read(struct_processus *s_eta
   
                 element = 1;                  element = 1;
   
                   attente.tv_sec = 0;
                   attente.tv_nsec = GRANULARITE_us * 1000;
   
                 do                  do
                 {                  {
                     switch(ios = sqlite3_step(ppStmt))                      switch(ios = sqlite3_step(ppStmt))
Line 1782  instruction_read(struct_processus *s_eta Line 1835  instruction_read(struct_processus *s_eta
                             break;                              break;
                         }                          }
   
                           case SQLITE_BUSY:
                           case SQLITE_LOCKED:
                           {
                               nanosleep(&attente, NULL);
                               INCR_GRANULARITE(attente.tv_nsec);
                               break;
                           }
   
                         default:                          default:
                         {                          {
                             (*s_etat_processus).erreur_systeme =                              (*s_etat_processus).erreur_systeme =
Line 1789  instruction_read(struct_processus *s_eta Line 1850  instruction_read(struct_processus *s_eta
                             return;                              return;
                         }                          }
                     }                      }
   
                 } while(ios != SQLITE_DONE);                  } while(ios != SQLITE_DONE);
   
                 if (sqlite3_finalize(ppStmt) != SQLITE_OK)                  if (sqlite3_finalize(ppStmt) != SQLITE_OK)
Line 2108  printf("L=%d\n", longueur_enregistrement Line 2168  printf("L=%d\n", longueur_enregistrement
   
                     longueur = strlen(format_chaine);                      longueur = strlen(format_chaine);
   
                     if (format_chaine[longueur] != ')')                      if (format_chaine[longueur - 1] != ')')
                     {                      {
                         liberation(s_etat_processus, s_objet_argument_1);                          liberation(s_etat_processus, s_objet_argument_1);
                         liberation(s_etat_processus, s_objet_resultat);                          liberation(s_etat_processus, s_objet_resultat);
Line 2427  printf("L=%d\n", longueur_enregistrement Line 2487  printf("L=%d\n", longueur_enregistrement
   
                 if ((*s_etat_processus).var_volatile_requete_arret == -1)                  if ((*s_etat_processus).var_volatile_requete_arret == -1)
                 {                  {
                     longueur_effective += ios;                      if (ios >= 0)
                       {
                           longueur_effective += ios;
                       }
   
                     break;                      break;
                 }                  }
   
Line 2522  printf("L=%d\n", longueur_enregistrement Line 2586  printf("L=%d\n", longueur_enregistrement
                                     - ancienne_longueur_effective,                                      - ancienne_longueur_effective,
                                     MSG_DONTWAIT, (struct sockaddr *)                                      MSG_DONTWAIT, (struct sockaddr *)
                                     &adresse_unix, &longueur_adresse);                                      &adresse_unix, &longueur_adresse);
                         }                          } while((ios == -1) && (errno == EINTR));
                         while((ios == -1) && (errno == EINTR));  
                     }                      }
                     else if ((*((struct_socket *) (*s_objet_argument_1)                      else if ((*((struct_socket *) (*s_objet_argument_1)
                             .objet)).domaine == PF_INET)                              .objet)).domaine == PF_INET)
Line 2538  printf("L=%d\n", longueur_enregistrement Line 2601  printf("L=%d\n", longueur_enregistrement
                                     - ancienne_longueur_effective,                                      - ancienne_longueur_effective,
                                     MSG_DONTWAIT, (struct sockaddr *)                                      MSG_DONTWAIT, (struct sockaddr *)
                                     &adresse_ipv4, &longueur_adresse);                                      &adresse_ipv4, &longueur_adresse);
                         }                          } while((ios == -1) && (errno == EINTR));
                         while((ios == -1) && (errno == EINTR));  
                     }                      }
                     else if ((*((struct_socket *) (*s_objet_argument_1)                      else if ((*((struct_socket *) (*s_objet_argument_1)
                             .objet)) .domaine == PF_INET6)                              .objet)) .domaine == PF_INET6)
Line 2555  printf("L=%d\n", longueur_enregistrement Line 2617  printf("L=%d\n", longueur_enregistrement
                                     - ancienne_longueur_effective,                                      - ancienne_longueur_effective,
                                     MSG_DONTWAIT, (struct sockaddr *)                                      MSG_DONTWAIT, (struct sockaddr *)
                                     &adresse_ipv6, &longueur_adresse);                                      &adresse_ipv6, &longueur_adresse);
                         }                          } while((ios == -1) && (errno == EINTR));
                         while((ios == -1) && (errno == EINTR));  
 #                       else  #                       else
                         if ((*s_etat_processus).langue == 'F')                          if ((*s_etat_processus).langue == 'F')
                         {                          {
Line 2579  printf("L=%d\n", longueur_enregistrement Line 2640  printf("L=%d\n", longueur_enregistrement
                                 (*s_objet_argument_1).objet)).socket;                                  (*s_objet_argument_1).objet)).socket;
                         poll_fd.events = POLLIN;                          poll_fd.events = POLLIN;
   
                         while((ios = poll(&poll_fd, 1, 100)) <= 0)                          while((ios = poll(&poll_fd, 1, 10000)) <= 0)
                         {                          {
                             // La fin de la trame n'est pas atteinte                              // La fin de la trame n'est pas atteinte
                             // et il reste quelque chose à lire.                              // et il reste quelque chose à lire.
Line 2588  printf("L=%d\n", longueur_enregistrement Line 2649  printf("L=%d\n", longueur_enregistrement
                             {                              {
                                 case EINTR:                                  case EINTR:
                                 {                                  {
                                       if ((*s_etat_processus)
                                               .var_volatile_requete_arret == -1)
                                       {
                                           liberation(s_etat_processus,
                                                   s_objet_argument_1);
                                           free(tampon_lecture);
                                           return;
                                       }
   
                                     break;                                      break;
                                 }                                  }
   

Removed from v.1.59  
changed lines
  Added in v.1.69


CVSweb interface <joel.bertrand@systella.fr>