Diff for /rpl/src/instructions_w1.c between versions 1.106 and 1.116

version 1.106, 2017/01/18 15:44:23 version 1.116, 2019/02/11 09:45:52
Line 1 Line 1
 /*  /*
 ================================================================================  ================================================================================
   RPL/2 (R) version 4.1.26    RPL/2 (R) version 4.1.31
   Copyright (C) 1989-2017 Dr. BERTRAND Joël    Copyright (C) 1989-2019 Dr. BERTRAND Joël
   
   This file is part of RPL/2.    This file is part of RPL/2.
   
Line 410  instruction_write(struct_processus *s_et Line 410  instruction_write(struct_processus *s_et
     integer8                            recursivite;      integer8                            recursivite;
   
     logical1                            format_degenere;      logical1                            format_degenere;
       logical1                            format_oriente_ligne;
     logical1                            mise_a_jour;      logical1                            mise_a_jour;
   
   
     sqlite3_stmt                        *ppStmt;      sqlite3_stmt                        *ppStmt;
   
     ssize_t                             ios;      ssize_t                             ios;
Line 1507  instruction_write(struct_processus *s_et Line 1507  instruction_write(struct_processus *s_et
                         return;                          return;
                     }                      }
   
                     if (strncmp("LENGTH*(", format_chaine, 8) != 0)                      if (strcmp("LINE*(*)", format_chaine) == 0)
                     {                      {
                         free(format_chaine);                          format_oriente_ligne = d_vrai;
                           format_degenere = d_vrai;
                         liberation(s_etat_processus, s_objet_argument_2);  
                         liberation(s_etat_processus, s_objet_argument_1);  
   
                         (*s_etat_processus).erreur_execution =  
                                 d_ex_erreur_format_fichier;  
                         return;  
                     }                      }
                       else
                     longueur = (integer8) strlen(format_chaine);  
   
                     if (format_chaine[longueur - 1] != ')')  
                     {                      {
                         free(format_chaine);                          format_oriente_ligne = d_faux;
                           
                         liberation(s_etat_processus, s_objet_argument_2);                          if (strncmp("LENGTH*(", format_chaine, 8) != 0)
                         liberation(s_etat_processus, s_objet_argument_1);                          {
                               free(format_chaine);
   
                         (*s_etat_processus).erreur_execution =                              liberation(s_etat_processus, s_objet_argument_2);
                                 d_ex_erreur_format_fichier;                              liberation(s_etat_processus, s_objet_argument_1);
                         return;  
                     }  
   
                     format_chaine[longueur] = d_code_fin_chaine;                              (*s_etat_processus).erreur_execution =
                                       d_ex_erreur_format_fichier;
                               return;
                           }
   
                     if (format_chaine[8] == '*')                          longueur = (integer8) strlen(format_chaine);
                     {  
                         format_degenere = d_vrai;  
                     }  
                     else  
                     {  
                         // Détermination de la longueur  
                         format_degenere = d_faux;  
   
                         if (sscanf(&(format_chaine[8]), "%lld", &longueur) != 1)                          if (format_chaine[longueur - 1] != ')')
                         {                          {
                             free(format_chaine);                              free(format_chaine);
   
Line 1555  instruction_write(struct_processus *s_et Line 1541  instruction_write(struct_processus *s_et
                                     d_ex_erreur_format_fichier;                                      d_ex_erreur_format_fichier;
                             return;                              return;
                         }                          }
   
                           format_chaine[longueur] = d_code_fin_chaine;
   
                           if (format_chaine[8] == '*')
                           {
                               format_degenere = d_vrai;
                           }
                           else
                           {
                               // Détermination de la longueur
                               format_degenere = d_faux;
   
                               if (sscanf(&(format_chaine[8]), "%lld", &longueur)
                                       != 1)
                               {
                                   free(format_chaine);
   
                                   liberation(s_etat_processus,
                                           s_objet_argument_2);
                                   liberation(s_etat_processus,
                                           s_objet_argument_1);
   
                                   (*s_etat_processus).erreur_execution =
                                           d_ex_erreur_format_fichier;
                                   return;
                               }
                           }
                     }                      }
   
                     free(format_chaine);                      free(format_chaine);
Line 1596  instruction_write(struct_processus *s_et Line 1609  instruction_write(struct_processus *s_et
   
                     free(chaine);                      free(chaine);
   
                       if (format_oriente_ligne == d_vrai)
                       {
                           if (fwrite("\n", 1, 1, (*descripteur).descripteur_c)
                                   != 1)
                           {
                               (*s_etat_processus).erreur_systeme =
                                       d_es_erreur_fichier;
                               return;
                           }
                       }
   
                     l_element_courant = (*l_element_courant).suivant;                      l_element_courant = (*l_element_courant).suivant;
                     l_element_courant_format = (*l_element_courant_format)                      l_element_courant_format = (*l_element_courant_format)
                             .suivant;                              .suivant;
Line 1708  instruction_write(struct_processus *s_et Line 1732  instruction_write(struct_processus *s_et
                 (*s_objet_argument_1).objet)).type,                  (*s_objet_argument_1).objet)).type,
                 "SEQUENTIAL DATAGRAM") == 0))                  "SEQUENTIAL DATAGRAM") == 0))
         { // Sockets connectées          { // Sockets connectées
               if (pthread_mutex_lock(&mutex_sigaction) != 0)
               {
                   (*s_etat_processus).erreur_systeme = d_es_processus;
                   return;
               }
   
             action.sa_handler = SIG_IGN;              action.sa_handler = SIG_IGN;
             action.sa_flags = SA_ONSTACK;              action.sa_flags = 0;
   
             if (sigaction(SIGPIPE, &action, &registre) != 0)              if (sigaction(SIGPIPE, &action, &registre) != 0)
             {              {
                   pthread_mutex_unlock(&mutex_sigaction);
                 (*s_etat_processus).erreur_systeme = d_es_signal;                  (*s_etat_processus).erreur_systeme = d_es_signal;
                 return;                  return;
             }              }
Line 1726  instruction_write(struct_processus *s_et Line 1756  instruction_write(struct_processus *s_et
             {              {
                 if (sigaction(SIGPIPE, &registre, NULL) != 0)                  if (sigaction(SIGPIPE, &registre, NULL) != 0)
                 {                  {
                       pthread_mutex_unlock(&mutex_sigaction);
                     (*s_etat_processus).erreur_systeme = d_es_signal;                      (*s_etat_processus).erreur_systeme = d_es_signal;
                     return;                      return;
                 }                  }
   
                   pthread_mutex_unlock(&mutex_sigaction);
                 (*s_etat_processus).erreur_systeme = d_es_processus;                  (*s_etat_processus).erreur_systeme = d_es_processus;
                 return;                  return;
             }              }
Line 1741  instruction_write(struct_processus *s_et Line 1773  instruction_write(struct_processus *s_et
   
                 if (sigaction(SIGPIPE, &registre, NULL) != 0)                  if (sigaction(SIGPIPE, &registre, NULL) != 0)
                 {                  {
                       pthread_mutex_unlock(&mutex_sigaction);
                     (*s_etat_processus).erreur_systeme = d_es_signal;                      (*s_etat_processus).erreur_systeme = d_es_signal;
                     return;                      return;
                 }                  }
   
                   if (pthread_mutex_unlock(&mutex_sigaction) != 0)
                   {
                       (*s_etat_processus).erreur_systeme = d_es_processus;
                       return;
                   }
   
 #               ifndef SEMAPHORES_NOMMES  #               ifndef SEMAPHORES_NOMMES
                     while(sem_wait(&((*s_etat_processus).semaphore_fork)) != 0)                      while(sem_wait(&((*s_etat_processus).semaphore_fork)) != 0)
 #               else  #               else
Line 1779  instruction_write(struct_processus *s_et Line 1818  instruction_write(struct_processus *s_et
                 {                  {
                     if (sigaction(SIGPIPE, &registre, NULL) != 0)                      if (sigaction(SIGPIPE, &registre, NULL) != 0)
                     {                      {
                           pthread_mutex_unlock(&mutex_sigaction);
                         (*s_etat_processus).erreur_systeme = d_es_signal;                          (*s_etat_processus).erreur_systeme = d_es_signal;
                         return;                          return;
                     }                      }
   
                       pthread_mutex_unlock(&mutex_sigaction);
                     (*s_etat_processus).erreur_systeme = d_es_processus;                      (*s_etat_processus).erreur_systeme = d_es_processus;
                     return;                      return;
                 }                  }
Line 1790  instruction_write(struct_processus *s_et Line 1831  instruction_write(struct_processus *s_et
   
             if (sigaction(SIGPIPE, &registre, NULL) != 0)              if (sigaction(SIGPIPE, &registre, NULL) != 0)
             {              {
                   pthread_mutex_unlock(&mutex_sigaction);
                 (*s_etat_processus).erreur_systeme = d_es_signal;                  (*s_etat_processus).erreur_systeme = d_es_signal;
                 return;                  return;
             }              }
   
               if (pthread_mutex_unlock(&mutex_sigaction) != 0)
               {
                   (*s_etat_processus).erreur_systeme = d_es_processus;
                   return;
               }
         }          }
         else          else
         { // Sockets non connectées          { // Sockets non connectées
Line 3177  instruction_wfsock(struct_processus *s_e Line 3225  instruction_wfsock(struct_processus *s_e
     struct sockaddr_in6     adresse_ipv6;      struct sockaddr_in6     adresse_ipv6;
 #   endif  #   endif
   
     unsigned long           i;  
   
     if ((*s_etat_processus).affichage_arguments == 'Y')      if ((*s_etat_processus).affichage_arguments == 'Y')
     {      {
         printf("\n  WFSOCK ");          printf("\n  WFSOCK ");
Line 3542  instruction_wfsock(struct_processus *s_e Line 3588  instruction_wfsock(struct_processus *s_e
                 } while(drapeau == d_faux);                  } while(drapeau == d_faux);
   
                 if (((*((struct_socket *) (*s_objet_resultat).objet))                  if (((*((struct_socket *) (*s_objet_resultat).objet))
                         .adresse_distante = malloc(55 *                          .adresse_distante = malloc(47 *
                         sizeof(unsigned char))) == NULL)                          sizeof(unsigned char))) == NULL)
                 {                  {
                     (*s_etat_processus).erreur_systeme =                      (*s_etat_processus).erreur_systeme =
Line 3550  instruction_wfsock(struct_processus *s_e Line 3596  instruction_wfsock(struct_processus *s_e
                     return;                      return;
                 }                  }
   
                 (*((struct_socket *) (*s_objet_resultat).objet))  
                         .adresse_distante = d_code_fin_chaine;  
   
                 for(i = 0; i < 16; i++)  
                 {  
                     sprintf((*((struct_socket *) (*s_objet_resultat)  
                             .objet)).adresse_distante, (i == 0) ? "%s%X"  
                             : "%s:%X", (*((struct_socket *) (*s_objet_resultat)  
                             .objet)).adresse_distante,  
                             adresse_ipv6.sin6_addr.s6_addr[i]);  
                 }  
   
                 sprintf((*((struct_socket *) (*s_objet_resultat)                  sprintf((*((struct_socket *) (*s_objet_resultat)
                         .objet)).adresse_distante, "%s(%u)",  
                         (*((struct_socket *) (*s_objet_resultat)  
                         .objet)).adresse_distante,                          .objet)).adresse_distante,
                           "%02X%02X:%02X%02X:%02X%02X:%02X%02X:"
                           "%02X%02X:%02X%02X:%02X%02X:%02X%02X(%u)",
                           adresse_ipv6.sin6_addr.s6_addr[0],
                           adresse_ipv6.sin6_addr.s6_addr[1],
                           adresse_ipv6.sin6_addr.s6_addr[2],
                           adresse_ipv6.sin6_addr.s6_addr[3],
                           adresse_ipv6.sin6_addr.s6_addr[4],
                           adresse_ipv6.sin6_addr.s6_addr[5],
                           adresse_ipv6.sin6_addr.s6_addr[6],
                           adresse_ipv6.sin6_addr.s6_addr[7],
                           adresse_ipv6.sin6_addr.s6_addr[8],
                           adresse_ipv6.sin6_addr.s6_addr[9],
                           adresse_ipv6.sin6_addr.s6_addr[10],
                           adresse_ipv6.sin6_addr.s6_addr[11],
                           adresse_ipv6.sin6_addr.s6_addr[12],
                           adresse_ipv6.sin6_addr.s6_addr[13],
                           adresse_ipv6.sin6_addr.s6_addr[14],
                           adresse_ipv6.sin6_addr.s6_addr[15],
                         ntohs(adresse_ipv6.sin6_port));                          ntohs(adresse_ipv6.sin6_port));
 #           else  #           else
                 if ((*s_etat_processus).langue == 'F')                  if ((*s_etat_processus).langue == 'F')

Removed from v.1.106  
changed lines
  Added in v.1.116


CVSweb interface <joel.bertrand@systella.fr>