Diff for /rpl/src/instructions_w1.c between versions 1.117 and 1.132

version 1.117, 2019/02/12 14:38:43 version 1.132, 2025/04/15 10:17:56
Line 1 Line 1
 /*  /*
 ================================================================================  ================================================================================
   RPL/2 (R) version 4.1.31    RPL/2 (R) version 4.1.36
   Copyright (C) 1989-2019 Dr. BERTRAND Joël    Copyright (C) 1989-2025 Dr. BERTRAND Joël
   
   This file is part of RPL/2.    This file is part of RPL/2.
   
Line 20 Line 20
 */  */
   
   
   #define DEBUG_ERREURS
 #include "rpl-conv.h"  #include "rpl-conv.h"
   
   
Line 1361  instruction_write(struct_processus *s_et Line 1362  instruction_write(struct_processus *s_et
                     return;                      return;
                 }                  }
   
                 if (fwrite(chaine, sizeof(unsigned char),                  if (write(fileno((*descripteur).descripteur_c),
                         (size_t) longueur_effective,                          chaine, (size_t) longueur_effective) !=
                         (*descripteur).descripteur_c) !=                          (ssize_t) longueur_effective)
                         (size_t) longueur_effective)  
                 {                  {
                     (*s_etat_processus).erreur_systeme = d_es_erreur_fichier;                      (*s_etat_processus).erreur_systeme = d_es_erreur_fichier;
                     return;                      return;
Line 1411  instruction_write(struct_processus *s_et Line 1411  instruction_write(struct_processus *s_et
   
                     return;                      return;
                 }                  }
   
                   if ((chaine_utf8 = transliteration(s_etat_processus,
                           chaine, d_locale, "UTF-8")) == NULL)
                   {
                       free(chaine);
   
                       liberation(s_etat_processus, s_objet_argument_2);
                       liberation(s_etat_processus, s_objet_argument_1);
   
                       return;
                   }
   
                   free(chaine);
   
                   if (alsprintf(s_etat_processus, &commande,
                           "insert or replace into data "
                           "(id, data) values (%lld, '%s')", (*((integer8 *)
                           (*s_objet_argument_2).objet)), chaine_utf8) < 0)
                   {
                       (*s_etat_processus).erreur_systeme =
                               d_es_allocation_memoire;
                       return;
                   }
   
                   free(chaine_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;
                   }
   
                   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;
                   }
   
                   liberation(s_etat_processus, s_objet_argument_3);
                   free(commande);
             }              }
             else // Fichiers indexés              else // Fichiers indexés
             {              {
Line 1584  instruction_write(struct_processus *s_et Line 1632  instruction_write(struct_processus *s_et
                     if ((format_degenere == d_vrai) ||                      if ((format_degenere == d_vrai) ||
                             (longueur_effective < longueur))                              (longueur_effective < longueur))
                     {                      {
                         if (fwrite(chaine, sizeof(unsigned char),                          if (write(fileno((*descripteur).descripteur_c),
                                 (size_t) longueur_effective,                                  chaine, (size_t) longueur_effective)
                                 (*descripteur).descripteur_c) !=                                  != (ssize_t) longueur_effective)
                                 (size_t) longueur_effective)  
                         {                          {
                             (*s_etat_processus).erreur_systeme =                              (*s_etat_processus).erreur_systeme =
                                     d_es_erreur_fichier;                                      d_es_erreur_fichier;
Line 1596  instruction_write(struct_processus *s_et Line 1643  instruction_write(struct_processus *s_et
                     }                      }
                     else                      else
                     {                      {
                         if (fwrite(chaine, sizeof(unsigned char),                          if (write(fileno((*descripteur).descripteur_c),
                                 (size_t) longueur_effective,                                  chaine, (size_t) longueur_effective)
                                 (*descripteur).descripteur_c) !=                                  != (ssize_t) longueur)
                                 (size_t) longueur)  
                         {                          {
                             (*s_etat_processus).erreur_systeme =                              (*s_etat_processus).erreur_systeme =
                                     d_es_erreur_fichier;                                      d_es_erreur_fichier;
Line 1611  instruction_write(struct_processus *s_et Line 1657  instruction_write(struct_processus *s_et
   
                     if (format_oriente_ligne == d_vrai)                      if (format_oriente_ligne == d_vrai)
                     {                      {
                         if (fwrite("\n", 1, 1, (*descripteur).descripteur_c)                          if (write(fileno((*descripteur).descripteur_c),
                                 != 1)                                  "\n", 1) != 1)
                         {                          {
                             (*s_etat_processus).erreur_systeme =                              (*s_etat_processus).erreur_systeme =
                                     d_es_erreur_fichier;                                      d_es_erreur_fichier;
Line 2328  instruction_wflock(struct_processus *s_e Line 2374  instruction_wflock(struct_processus *s_e
                 return;                  return;
             }              }
   
 #           ifndef SEMAPHORES_NOMMES  
                 if (sem_post(&((*s_etat_processus).semaphore_fork)) != 0)  
 #           else  
                 if (sem_post((*s_etat_processus).semaphore_fork) != 0)  
 #           endif  
             {  
                 (*s_etat_processus).erreur_systeme = d_es_processus;  
                 return;  
             }  
   
 #           ifndef SEMAPHORES_NOMMES  
                 while(sem_wait(&((*s_etat_processus).semaphore_fork)) != 0)  
 #           else  
                 while(sem_wait((*s_etat_processus).semaphore_fork) != 0)  
 #           endif  
             {  
                 if (errno != EINTR)  
                 {  
                     (*s_etat_processus).erreur_systeme = d_es_processus;  
                     return;  
                 }  
             }  
   
             if (lock.l_type == F_UNLCK)              if (lock.l_type == F_UNLCK)
             {              {
                 drapeau = d_vrai;                  drapeau = d_vrai;
Line 2386  instruction_wflock(struct_processus *s_e Line 2409  instruction_wflock(struct_processus *s_e
                             registre_instruction_valide;                              registre_instruction_valide;
                 }                  }
   
                 nanosleep(&attente, NULL);  
                 scrutation_injection(s_etat_processus);                  scrutation_injection(s_etat_processus);
   
   #               ifndef SEMAPHORES_NOMMES
                       if (sem_post(&((*s_etat_processus).semaphore_fork)) != 0)
   #               else
                       if (sem_post((*s_etat_processus).semaphore_fork) != 0)
   #               endif
                   {
                       (*s_etat_processus).erreur_systeme = d_es_processus;
                       return;
                   }
   
                   nanosleep(&attente, NULL);
   
                 INCR_GRANULARITE(attente.tv_nsec);                  INCR_GRANULARITE(attente.tv_nsec);
   
   #               ifndef SEMAPHORES_NOMMES
                       while(sem_wait(&((*s_etat_processus).semaphore_fork)) != 0)
   #               else
                       while(sem_wait((*s_etat_processus).semaphore_fork) != 0)
   #               endif
                   {
                       if (errno != EINTR)
                       {
                           (*s_etat_processus).erreur_systeme = d_es_processus;
                           return;
                       }
                   }
             }              }
         } while((drapeau == d_faux) && ((*s_etat_processus)          } while((drapeau == d_faux) && ((*s_etat_processus)
                 .var_volatile_requete_arret != -1));                  .var_volatile_requete_arret != -1));
Line 3104  instruction_wfdata(struct_processus *s_e Line 3151  instruction_wfdata(struct_processus *s_e
 static inline logical1  static inline logical1
 options_sockets(struct_processus *s_etat_processus, struct_socket *s_socket)  options_sockets(struct_processus *s_etat_processus, struct_socket *s_socket)
 {  {
     int                         drapeau;  
   
     if (((*s_socket).options & (1 << d_BROADCAST)) != 0)      if (((*s_socket).options & (1 << d_BROADCAST)) != 0)
     {      {
         if (setsockopt((*s_socket).socket, SOL_SOCKET, SO_BROADCAST, &drapeau,          if (setsockopt((*s_socket).socket, SOL_SOCKET, SO_BROADCAST, NULL, 0)
                 sizeof(drapeau)) != 0)                  != 0)
         {          {
             return(d_erreur);              return(d_erreur);
         }          }
Line 3117  options_sockets(struct_processus *s_etat Line 3162  options_sockets(struct_processus *s_etat
   
     if (((*s_socket).options & (1 << d_DONT_ROUTE)) != 0)      if (((*s_socket).options & (1 << d_DONT_ROUTE)) != 0)
     {      {
         if (setsockopt((*s_socket).socket, SOL_SOCKET, SO_DONTROUTE, &drapeau,          if (setsockopt((*s_socket).socket, SOL_SOCKET, SO_DONTROUTE, NULL, 0)
                 sizeof(drapeau)) != 0)                  != 0)
         {          {
             return(d_erreur);              return(d_erreur);
         }          }
Line 3126  options_sockets(struct_processus *s_etat Line 3171  options_sockets(struct_processus *s_etat
   
     if (((*s_socket).options & (1 << d_KEEP_ALIVE)) != 0)      if (((*s_socket).options & (1 << d_KEEP_ALIVE)) != 0)
     {      {
         if (setsockopt((*s_socket).socket, SOL_SOCKET, SO_KEEPALIVE, &drapeau,          if (setsockopt((*s_socket).socket, SOL_SOCKET, SO_KEEPALIVE, NULL, 0)
                 sizeof(drapeau)) != 0)                  != 0)
         {          {
             return(d_erreur);              return(d_erreur);
         }          }
Line 3284  instruction_wfsock(struct_processus *s_e Line 3329  instruction_wfsock(struct_processus *s_e
                 (*s_objet_argument).objet)).type, "SEQUENTIAL DATAGRAM") != 0))                  (*s_objet_argument).objet)).type, "SEQUENTIAL DATAGRAM") != 0))
         {          {
             // Mode non connecté : l'attente se fait sur un poll()              // Mode non connecté : l'attente se fait sur un poll()
   #define DEBUG_RETURN
             if ((s_objet_resultat = copie_objet(s_etat_processus,              if ((s_objet_resultat = copie_objet(s_etat_processus,
                     s_objet_argument, 'P')) == NULL)                      s_objet_argument, 'P')) == NULL)
             {              {
Line 3928  instruction_wfswi(struct_processus *s_et Line 3973  instruction_wfswi(struct_processus *s_et
             }              }
             else              else
             {              {
   #               ifndef SEMAPHORES_NOMMES
                       if (sem_post(&((*s_etat_processus).semaphore_fork)) != 0)
   #               else
                       if (sem_post((*s_etat_processus).semaphore_fork) != 0)
   #               endif
                   {
                       (*s_etat_processus).erreur_systeme = d_es_processus;
                       return;
                   }
                 nanosleep(&attente, NULL);                  nanosleep(&attente, NULL);
   
   #               ifndef SEMAPHORES_NOMMES
                       while(sem_wait(&((*s_etat_processus).semaphore_fork)) != 0)
   #               else
                       while(sem_wait((*s_etat_processus).semaphore_fork) != 0)
   #               endif
                   {
                       if (errno != EINTR)
                       {
                           (*s_etat_processus).erreur_systeme = d_es_processus;
                           return;
                       }
                   }
   
                 scrutation_injection(s_etat_processus);                  scrutation_injection(s_etat_processus);
                 INCR_GRANULARITE(attente.tv_nsec);                  INCR_GRANULARITE(attente.tv_nsec);
             }              }

Removed from v.1.117  
changed lines
  Added in v.1.132


CVSweb interface <joel.bertrand@systella.fr>