Diff for /rpl/src/instructions_i3.c between versions 1.4 and 1.5

version 1.4, 2010/03/04 10:17:51 version 1.5, 2010/03/06 18:29:07
Line 48  instruction_inquire(struct_processus *s_ Line 48  instruction_inquire(struct_processus *s_
   
     long                        position_courante;      long                        position_courante;
   
       struct_descripteur_fichier  *dfichier;
   
     struct flock                lock;      struct flock                lock;
   
     struct_objet                *s_objet_argument_1;      struct_objet                *s_objet_argument_1;
Line 55  instruction_inquire(struct_processus *s_ Line 57  instruction_inquire(struct_processus *s_
     struct_objet                *s_objet_resultat;      struct_objet                *s_objet_resultat;
   
     unsigned char               caractere;      unsigned char               caractere;
       unsigned char               *nom;
     unsigned char               *requete;      unsigned char               *requete;
     unsigned char               verrou;      unsigned char               verrou;
   
Line 190  instruction_inquire(struct_processus *s_ Line 193  instruction_inquire(struct_processus *s_
              * du fichier mais à un défaut d'enregistrement.               * du fichier mais à un défaut d'enregistrement.
              */               */
   
             if ((fichier = descripteur_fichier(s_etat_processus,              if ((dfichier = descripteur_fichier(s_etat_processus,
                     (struct_fichier *) (*s_objet_argument_2).objet)) == NULL)                      (struct_fichier *) (*s_objet_argument_2).objet)) == NULL)
             {              {
                 return;                  return;
             }              }
   
             if ((position_courante = ftell(fichier)) == -1)              if ((*dfichier).type != 'C')
               {
                   liberation(s_etat_processus, s_objet_argument_1);
                   liberation(s_etat_processus, s_objet_argument_2);
   
                   free(requete);
   
                   (*s_etat_processus).erreur_execution = d_ex_erreur_type_fichier;
                   return;
               }
   
               if ((position_courante = ftell((*dfichier).descripteur_c)) == -1)
             {              {
                 (*s_etat_processus).erreur_systeme = d_es_erreur_fichier;                  (*s_etat_processus).erreur_systeme = d_es_erreur_fichier;
                 return;                  return;
Line 204  instruction_inquire(struct_processus *s_ Line 218  instruction_inquire(struct_processus *s_
   
             fin_fichier = d_vrai;              fin_fichier = d_vrai;
   
             while(feof(fichier) == 0)              while(feof((*dfichier).descripteur_c) == 0)
             {              {
                 if (fread(&caractere, sizeof(unsigned char), (size_t) 1,                  if (fread(&caractere, sizeof(unsigned char), (size_t) 1,
                         fichier) > 0)                          (*dfichier).descripteur_c) > 0)
                 {                  {
                     if (caractere == '{')                      if (caractere == '{')
                     {                      {
Line 217  instruction_inquire(struct_processus *s_ Line 231  instruction_inquire(struct_processus *s_
                 }                  }
             }              }
   
             if (fseek(fichier, position_courante, SEEK_SET) != 0)              if (fseek((*dfichier).descripteur_c, position_courante, SEEK_SET)
                       != 0)
             {              {
                 (*s_etat_processus).erreur_systeme = d_es_erreur_fichier;                  (*s_etat_processus).erreur_systeme = d_es_erreur_fichier;
                 return;                  return;
Line 430  instruction_inquire(struct_processus *s_ Line 445  instruction_inquire(struct_processus *s_
          * La question porte sur un fichier fermé.           * La question porte sur un fichier fermé.
          */           */
   
           if ((nom = transliteration(s_etat_processus,
                   (unsigned char *) (*s_objet_argument_2).objet,
                   d_locale, "UTF-8")) == NULL)
           {
               liberation(s_etat_processus, s_objet_argument_1);
               liberation(s_etat_processus, s_objet_argument_2);
               return;
           }
   
         if (strcmp(requete, "EXISTENCE") == 0)          if (strcmp(requete, "EXISTENCE") == 0)
         {          {
             erreur = caracteristiques_fichier(s_etat_processus,              erreur = caracteristiques_fichier(s_etat_processus, nom,
                     (unsigned char *) (*s_objet_argument_2).objet,  
                     &existence, &ouverture, &unite);                      &existence, &ouverture, &unite);
   
             if (erreur != d_absence_erreur)              if (erreur != d_absence_erreur)
             {              {
                   free(nom);
                 free(requete);                  free(requete);
   
                 liberation(s_etat_processus, s_objet_argument_1);                  liberation(s_etat_processus, s_objet_argument_1);
Line 474  instruction_inquire(struct_processus *s_ Line 498  instruction_inquire(struct_processus *s_
         }          }
         else if (strcmp(requete, "LOCK") == 0)          else if (strcmp(requete, "LOCK") == 0)
         {          {
             erreur = caracteristiques_fichier(s_etat_processus,              erreur = caracteristiques_fichier(s_etat_processus, nom,
                     (unsigned char *) (*s_objet_argument_2).objet,  
                     &existence, &ouverture, &unite);                      &existence, &ouverture, &unite);
   
             if (erreur != d_absence_erreur)              if (erreur != d_absence_erreur)
             {              {
                 free(requete);                  free(requete);
                   free(nom);
   
                 liberation(s_etat_processus, s_objet_argument_1);                  liberation(s_etat_processus, s_objet_argument_1);
                 liberation(s_etat_processus, s_objet_argument_2);                  liberation(s_etat_processus, s_objet_argument_2);
Line 504  instruction_inquire(struct_processus *s_ Line 528  instruction_inquire(struct_processus *s_
                  */                   */
   
                 free(requete);                  free(requete);
                   free(nom);
   
                 liberation(s_etat_processus, s_objet_argument_1);                  liberation(s_etat_processus, s_objet_argument_1);
                 liberation(s_etat_processus, s_objet_argument_2);                  liberation(s_etat_processus, s_objet_argument_2);
Line 519  instruction_inquire(struct_processus *s_ Line 544  instruction_inquire(struct_processus *s_
                  * Fichier existant                   * Fichier existant
                  */                   */
   
                 if ((fichier = fopen((unsigned char *)                  if ((fichier = fopen(nom, "r+")) == NULL)
                         (*s_objet_argument_2).objet, "r+")) == NULL)  
                 {                  {
                     free(requete);                      free(requete);
                       free(nom);
   
                     liberation(s_etat_processus, s_objet_argument_1);                      liberation(s_etat_processus, s_objet_argument_1);
                     liberation(s_etat_processus, s_objet_argument_2);                      liberation(s_etat_processus, s_objet_argument_2);
Line 541  instruction_inquire(struct_processus *s_ Line 566  instruction_inquire(struct_processus *s_
   
                 if (fcntl(fileno(fichier), F_GETLK, &lock) == -1)                  if (fcntl(fileno(fichier), F_GETLK, &lock) == -1)
                 {                  {
                       free(nom);
   
                     if (fclose(fichier) != 0)                      if (fclose(fichier) != 0)
                     {                      {
                         free(requete);                          free(requete);
Line 580  instruction_inquire(struct_processus *s_ Line 607  instruction_inquire(struct_processus *s_
   
                     if (fcntl(fileno(fichier), F_GETLK, &lock) == -1)                      if (fcntl(fileno(fichier), F_GETLK, &lock) == -1)
                     {                      {
                           free(nom);
   
                         if (fclose(fichier) != 0)                          if (fclose(fichier) != 0)
                         {                          {
                             free(requete);                              free(requete);
Line 668  instruction_inquire(struct_processus *s_ Line 697  instruction_inquire(struct_processus *s_
                 if (fclose(fichier) != 0)                  if (fclose(fichier) != 0)
                 {                  {
                     free(requete);                      free(requete);
                       free(nom);
   
                     liberation(s_etat_processus, s_objet_argument_1);                      liberation(s_etat_processus, s_objet_argument_1);
                     liberation(s_etat_processus, s_objet_argument_2);                      liberation(s_etat_processus, s_objet_argument_2);
Line 680  instruction_inquire(struct_processus *s_ Line 710  instruction_inquire(struct_processus *s_
         }          }
         else          else
         {          {
               free(nom);
             free(requete);              free(requete);
   
             liberation(s_etat_processus, s_objet_argument_1);              liberation(s_etat_processus, s_objet_argument_1);
Line 688  instruction_inquire(struct_processus *s_ Line 719  instruction_inquire(struct_processus *s_
             (*s_etat_processus).erreur_execution = d_ex_erreur_requete_fichier;              (*s_etat_processus).erreur_execution = d_ex_erreur_requete_fichier;
             return;              return;
         }          }
   
           free(nom);
     }      }
     else      else
     {      {

Removed from v.1.4  
changed lines
  Added in v.1.5


CVSweb interface <joel.bertrand@systella.fr>