Diff for /rpl/src/instructions_r4.c between versions 1.73 and 1.74

version 1.73, 2013/03/11 15:41:05 version 1.74, 2013/03/15 11:37:26
Line 2335  instruction_read(struct_processus *s_eta Line 2335  instruction_read(struct_processus *s_eta
                     return;                      return;
                 }                  }
   
                 if (ios < 0)                  if (ios <= 0)
                 {                  {
                     nanosleep(&attente, NULL);                      nanosleep(&attente, NULL);
                     INCR_GRANULARITE(attente.tv_nsec);                      INCR_GRANULARITE(attente.tv_nsec);
                     scrutation_injection(s_etat_processus);  
                 }                  }
                 else                  else
                 {                  {
Line 2347  instruction_read(struct_processus *s_eta Line 2346  instruction_read(struct_processus *s_eta
                     attente.tv_nsec = GRANULARITE_us * 1000;                      attente.tv_nsec = GRANULARITE_us * 1000;
                 }                  }
   
                   scrutation_injection(s_etat_processus);
   
                 if ((*s_etat_processus).var_volatile_requete_arret == -1)                  if ((*s_etat_processus).var_volatile_requete_arret == -1)
                 {                  {
                     if (ios >= 0)                      if (ios >= 0)
                     {                      {
                         longueur_effective += ios;                          longueur_effective = ios;
                     }                      }
   
                     break;                      break;
Line 2361  instruction_read(struct_processus *s_eta Line 2362  instruction_read(struct_processus *s_eta
   
                 if (ios >= 0)                  if (ios >= 0)
                 {                  {
                     longueur_effective += ios;                      longueur_effective = ios;
                     position_initiale = 0;                      position_initiale = 0;
                     presence_indicateur = d_faux;                      presence_indicateur = d_faux;
   
Line 2968  instruction_read(struct_processus *s_eta Line 2969  instruction_read(struct_processus *s_eta
                     return;                      return;
                 }                  }
   
                 if (ios < 0)                  if (ios <= 0)
                 {                  {
                     nanosleep(&attente, NULL);                      nanosleep(&attente, NULL);
                     INCR_GRANULARITE(attente.tv_nsec);                      INCR_GRANULARITE(attente.tv_nsec);
                     scrutation_injection(s_etat_processus);  
                 }                  }
                 else                  else
                 {                  {
Line 2980  instruction_read(struct_processus *s_eta Line 2980  instruction_read(struct_processus *s_eta
                     attente.tv_nsec = GRANULARITE_us * 1000;                      attente.tv_nsec = GRANULARITE_us * 1000;
                 }                  }
   
                   scrutation_injection(s_etat_processus);
   
                 if ((*s_etat_processus).var_volatile_requete_arret == -1)                  if ((*s_etat_processus).var_volatile_requete_arret == -1)
                 {                  {
                     if (ios >= 0)                      if (ios >= 0)
Line 2992  instruction_read(struct_processus *s_eta Line 2994  instruction_read(struct_processus *s_eta
   
                 // Une donnée a été reçue.                  // Une donnée a été reçue.
   
                 if (ios >= 0)                  if (ios == (longueur_effective + longueur_questure))
                 {                  {
                     longueur_effective += ios;                      longueur_effective = ios;
                     position_initiale = 0;                      position_initiale = 0;
                     presence_indicateur = d_faux;                      presence_indicateur = d_faux;
                   }
                   else if (ios > 0)
                   {
                       // On retire une trame du buffer.
   
                     do                      if ((*((struct_socket *) (*s_objet_argument_1).objet))
                               .domaine == PF_UNIX)
                     {                      {
                         if (tampon_lecture[position_initiale] == '{')                          do
                         {                          {
                             presence_indicateur = d_vrai;                              longueur_adresse = sizeof(adresse_unix);
                             break;                              recvfrom((*((struct_socket *)
                         }                                      (*s_objet_argument_1).objet)).socket,
                                       tampon_lecture, longueur_effective,
                         position_initiale++;                                      0, (struct sockaddr *)
                     } while(position_initiale < longueur_effective);                                      &adresse_unix, &longueur_adresse);
                           } while((ios == -1) && (errno == EINTR));
                     if (presence_indicateur == d_vrai)                      }
                       else if ((*((struct_socket *) (*s_objet_argument_1)
                               .objet)).domaine == PF_INET)
                     {                      {
                         position_finale = position_initiale + 1;                          do
                         presence_chaine = d_faux;  
                         presence_indicateur = d_faux;  
                         niveau = 1;  
   
                         while(position_finale < longueur_effective)  
                         {                          {
                             caractere = tampon_lecture[position_finale];                              longueur_adresse = sizeof(adresse_ipv4);
                               recvfrom((*((struct_socket *)
                             if (caractere == '"')                                      (*s_objet_argument_1).objet)).socket,
                             {                                      tampon_lecture, longueur_effective,
                                 if (position_finale > 0)                                      0, (struct sockaddr *)
                                 {                                      &adresse_ipv4, &longueur_adresse);
                                     if (tampon_lecture[position_finale - 1]                          } while((ios == -1) && (errno == EINTR));
                                             != '\\')  
                                     {  
                                         presence_chaine = (presence_chaine ==  
                                                 d_vrai) ? d_faux : d_vrai;  
                                     }  
                                 }  
                                 else  
                                 {  
                                     presence_chaine =  
                                             (presence_chaine == d_vrai)  
                                             ? d_faux : d_vrai;  
                                 }  
                             }  
                             else  
                             {  
                                 if (presence_chaine == d_faux)  
                                 {  
                                     if (caractere == '{')  
                                     {  
                                         niveau++;  
                                     }  
                                     else if (caractere == '}')  
                                     {  
                                         niveau--;  
                                     }  
                                 }  
                             }  
   
                             if (niveau == 0)  
                             {  
                                 presence_indicateur = d_vrai;  
                                 trame_complete = d_vrai;  
                                 break;  
                             }  
   
                             position_finale++;  
                         }  
                     }                      }
                       else if ((*((struct_socket *) (*s_objet_argument_1)
                     // On retire une trame du buffer.                              .objet)) .domaine == PF_INET6)
   
                     if (trame_complete == d_vrai)  
                     {                      {
                         if ((*((struct_socket *) (*s_objet_argument_1).objet))  #                       ifdef IPV6
                                 .domaine == PF_UNIX)                          do
                         {                          {
                             do                              longueur_adresse = sizeof(adresse_ipv6);
                             {                              recvfrom((*((struct_socket *)
                                 longueur_adresse = sizeof(adresse_unix);                                      (*s_objet_argument_1).objet)).socket,
                                 recvfrom((*((struct_socket *)                                      tampon_lecture, longueur_effective,
                                         (*s_objet_argument_1).objet)).socket,                                      0, (struct sockaddr *)
                                         tampon_lecture, longueur_effective,                                      &adresse_ipv6, &longueur_adresse);
                                         0, (struct sockaddr *)                          } while((ios == -1) && (errno == EINTR));
                                         &adresse_unix, &longueur_adresse);  #                       else
                             } while((ios == -1) && (errno == EINTR));                          if ((*s_etat_processus).langue == 'F')
                         }  
                         else if ((*((struct_socket *) (*s_objet_argument_1)  
                                 .objet)).domaine == PF_INET)  
                         {                          {
                             do                              printf("+++Attention : Support du protocole"
                             {                                      " IPv6 indisponible\n");
                                 longueur_adresse = sizeof(adresse_ipv4);  
                                 recvfrom((*((struct_socket *)  
                                         (*s_objet_argument_1).objet)).socket,  
                                         tampon_lecture, longueur_effective,  
                                         0, (struct sockaddr *)  
                                         &adresse_ipv4, &longueur_adresse);  
                             } while((ios == -1) && (errno == EINTR));  
                         }                          }
                         else if ((*((struct_socket *) (*s_objet_argument_1)                          else
                                 .objet)) .domaine == PF_INET6)  
                         {                          {
 #                           ifdef IPV6                              printf("+++Warning : IPv6 support "
                             do                                      "unavailable\n");
                             {  
                                 longueur_adresse = sizeof(adresse_ipv6);  
                                 recvfrom((*((struct_socket *)  
                                         (*s_objet_argument_1).objet)).socket,  
                                         tampon_lecture, longueur_effective,  
                                         0, (struct sockaddr *)  
                                         &adresse_ipv6, &longueur_adresse);  
                             } while((ios == -1) && (errno == EINTR));  
 #                           else  
                             if ((*s_etat_processus).langue == 'F')  
                             {  
                                 printf("+++Attention : Support du protocole"  
                                         " IPv6 indisponible\n");  
                             }  
                             else  
                             {  
                                 printf("+++Warning : IPv6 support "  
                                         "unavailable\n");  
                             }  
   
 #                           endif  
                         }                          }
   #                       endif
                         longueur_effective = ios;  
                     }                      }
                     else  
                     {  
                         // Installation d'un timeout pour sortir de  
                         // l'instruction dans le cas où la transmission serait  
                         // invalide et que la trame reçue serait erronée.  
   
                         poll_fd.fd = (*((struct_socket *)  
                                 (*s_objet_argument_1).objet)).socket;  
                         poll_fd.events = POLLIN;  
   
                         while((ios = poll(&poll_fd, 1, 10000)) <= 0)  
                         {  
                             // La fin de la trame n'est pas atteinte.  
   
                             switch(ios)                      longueur_effective = ios;
                             {                      trame_complete = d_vrai;
                                 case EINTR:  
                                 {  
                                     if ((*s_etat_processus)  
                                             .var_volatile_requete_arret == -1)  
                                     {  
                                         liberation(s_etat_processus,  
                                                 s_objet_argument_1);  
                                         free(tampon_lecture);  
                                         return;  
                                     }  
   
                                     break;  
                                 }  
   
                                 case 0:  
                                 {  
                                     liberation(s_etat_processus,  
                                             s_objet_argument_1);  
                                     free(tampon_lecture);  
   
                                     (*s_etat_processus).erreur_execution =  
                                             d_ex_fin_de_fichier_atteinte;  
                                     return;  
                                 }  
                             }  
                         }  
                     }  
                 }                  }
   
 #               ifndef SEMAPHORES_NOMMES  #               ifndef SEMAPHORES_NOMMES
Line 3208  instruction_read(struct_processus *s_eta Line 3100  instruction_read(struct_processus *s_eta
                 }                  }
             } while(trame_complete == d_faux);              } while(trame_complete == d_faux);
   
             tampon_lecture[++position_finale] = d_code_fin_chaine;  
             tampon = (*s_etat_processus).instruction_courante;  
             (*s_etat_processus).instruction_courante = tampon_lecture;  
   
             indicateur_48 = test_cfsf(s_etat_processus, 48);  
             cf(s_etat_processus, 48);  
   
             recherche_type(s_etat_processus);  
   
             if ((*s_etat_processus).erreur_execution != d_ex)  
             {  
                 (*s_etat_processus).instruction_courante = tampon;  
                 free(tampon_lecture);  
                   
                 if (indicateur_48 == d_vrai)  
                 {  
                     sf(s_etat_processus, 48);  
                 }  
                 else  
                 {  
                     cf(s_etat_processus, 48);  
                 }  
   
                 if ((*s_etat_processus).var_volatile_requete_arret == -1)  
                 {  
                     (*s_etat_processus).erreur_execution = d_ex;  
                 }  
   
                 liberation(s_etat_processus, s_objet_argument_1);  
                 return;  
             }  
   
             if (indicateur_48 == d_vrai)  
             {  
                 sf(s_etat_processus, 48);  
             }  
             else  
             {  
                 cf(s_etat_processus, 48);  
             }  
   
             (*s_etat_processus).instruction_courante = tampon;  
   
             /*              /*
              * Création de la liste de sortie               * Création de la liste de sortie
              */               */
   
             if (depilement(s_etat_processus, &((*s_etat_processus).l_base_pile),              ptr = tampon_lecture;
                     &s_objet_type) == d_erreur)  
               if ((s_objet_type = lecture_fichier_non_formate(s_etat_processus,
                       &ptr, longueur_effective, d_faux)) == NULL)
             {              {
                 (*s_etat_processus).erreur_execution = d_ex_manque_argument;                  free(tampon_lecture);
   
                   (*s_etat_processus).erreur_execution = d_ex_syntaxe;
                 return;                  return;
             }              }
   

Removed from v.1.73  
changed lines
  Added in v.1.74


CVSweb interface <joel.bertrand@systella.fr>