Diff for /rpl/src/controle.c between versions 1.7 and 1.69

version 1.7, 2010/06/24 10:10:40 version 1.69, 2020/01/10 11:15:41
Line 1 Line 1
 /*  /*
 ================================================================================  ================================================================================
   RPL/2 (R) version 4.0.17    RPL/2 (R) version 4.1.32
   Copyright (C) 1989-2010 Dr. BERTRAND Joël    Copyright (C) 1989-2020 Dr. BERTRAND Joël
   
   This file is part of RPL/2.    This file is part of RPL/2.
   
Line 20 Line 20
 */  */
   
   
 #include "rpl.conv.h"  #include "rpl-conv.h"
   
   
 /*  /*
Line 43  logical1 Line 43  logical1
 controle(struct_processus *s_etat_processus, unsigned char *fichier,  controle(struct_processus *s_etat_processus, unsigned char *fichier,
         unsigned char *type, unsigned char *somme_candidate)          unsigned char *type, unsigned char *somme_candidate)
 {  {
     EVP_MD_CTX          contexte;      EVP_MD_CTX          *contexte;
   
     int                 in_fd;      int                 in_fd;
   
Line 56  controle(struct_processus *s_etat_proces Line 56  controle(struct_processus *s_etat_proces
     struct stat         stat_buf;      struct stat         stat_buf;
   
     unsigned char       *chaine;      unsigned char       *chaine;
       unsigned char       *registre;
     unsigned char       somme[EVP_MAX_MD_SIZE];      unsigned char       somme[EVP_MAX_MD_SIZE];
     unsigned char       somme_hexadecimale[2 * EVP_MAX_MD_SIZE];      unsigned char       somme_hexadecimale[2 * EVP_MAX_MD_SIZE];
   
     unsigned int        i;      unsigned int        i;
     unsigned int        longueur_somme;      unsigned int        longueur_somme;
   
       registre = fichier;
   
   #   ifdef OS2
       unsigned char       *tampon;
   
       if ((tampon = malloc((strlen(fichier) + 5) * sizeof(unsigned char)))
               == NULL)
       {
           (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
           return(d_faux);
       }
   
       sprintf(tampon, "%s.exe", fichier);
       fichier = tampon;
   #   endif
   
     if (stat(fichier, &stat_buf) != 0)      if (stat(fichier, &stat_buf) != 0)
     {      {
   #       ifdef OS2
           free(fichier);
   #       endif
   
         (*s_etat_processus).erreur_systeme = d_es_erreur_fichier;          (*s_etat_processus).erreur_systeme = d_es_erreur_fichier;
         return(d_faux);          return(d_faux);
     }      }
   
     taille_fichier = stat_buf.st_size;      taille_fichier = stat_buf.st_size;
   
     if ((chaine = malloc(taille_fichier)) == NULL)      if ((chaine = malloc((size_t) taille_fichier)) == NULL)
     {      {
   #       ifdef OS2
           free(fichier);
   #       endif
   
         (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;          (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
         return(d_faux);          return(d_faux);
     }      }
   
     if ((in_fd = open(fichier, 0, O_RDONLY)) < 0)      if ((in_fd = open(fichier, 0, O_RDONLY)) < 0)
     {      {
   #       ifdef OS2
           free(fichier);
   #       endif
   
         free(chaine);          free(chaine);
   
         (*s_etat_processus).erreur_systeme = d_es_erreur_fichier;          (*s_etat_processus).erreur_systeme = d_es_erreur_fichier;
         return(d_faux);          return(d_faux);
     }      }
   
     if ((octets_lus = read(in_fd, chaine, taille_fichier)) != taille_fichier)  #   ifdef OS2
       free(fichier);
   #   endif
   
       if ((octets_lus = read(in_fd, chaine, (size_t) taille_fichier))
               != (ssize_t) taille_fichier)
     {      {
   #       ifndef OS2
         close(in_fd);          close(in_fd);
         free(chaine);          free(chaine);
   
         (*s_etat_processus).erreur_systeme = d_es_erreur_fichier;          (*s_etat_processus).erreur_systeme = d_es_erreur_fichier;
         return(d_faux);          return(d_faux);
   #       endif
     }      }
   
     close(in_fd);      close(in_fd);
   
       if ((contexte = EVP_MD_CTX_new()) == NULL)
       {
           close(in_fd);
           return(d_faux);
       }
   
     if (strcmp(type, "md5") == 0)      if (strcmp(type, "md5") == 0)
     {      {
         if (EVP_DigestInit(&contexte, EVP_md5()) != 1)          if (EVP_DigestInit(contexte, EVP_md5()) != 1)
         {          {
               EVP_MD_CTX_free(contexte);
             close(in_fd);              close(in_fd);
             free(chaine);              free(chaine);
   
Line 106  controle(struct_processus *s_etat_proces Line 149  controle(struct_processus *s_etat_proces
             return(d_faux);              return(d_faux);
         }          }
   
         if (EVP_DigestUpdate(&contexte, chaine, taille_fichier) != 1)          if (EVP_DigestUpdate(contexte, chaine, (size_t) taille_fichier) != 1)
         {          {
               EVP_MD_CTX_free(contexte);
             close(in_fd);              close(in_fd);
             free(chaine);              free(chaine);
   
Line 115  controle(struct_processus *s_etat_proces Line 159  controle(struct_processus *s_etat_proces
             return(d_faux);              return(d_faux);
         }          }
   
         if (EVP_DigestFinal_ex(&contexte, somme, &longueur_somme) != 1)          if (EVP_DigestFinal_ex(contexte, somme, &longueur_somme) != 1)
         {          {
               EVP_MD_CTX_free(contexte);
             close(in_fd);              close(in_fd);
             free(chaine);              free(chaine);
   
Line 126  controle(struct_processus *s_etat_proces Line 171  controle(struct_processus *s_etat_proces
     }      }
     else if (strcmp(type, "sha1") == 0)      else if (strcmp(type, "sha1") == 0)
     {      {
         if (EVP_DigestInit(&contexte, EVP_sha1()) != 1)          if (EVP_DigestInit(contexte, EVP_sha1()) != 1)
         {          {
               EVP_MD_CTX_free(contexte);
             close(in_fd);              close(in_fd);
             free(chaine);              free(chaine);
   
Line 135  controle(struct_processus *s_etat_proces Line 181  controle(struct_processus *s_etat_proces
             return(d_faux);              return(d_faux);
         }          }
   
         if (EVP_DigestUpdate(&contexte, chaine, taille_fichier) != 1)          if (EVP_DigestUpdate(contexte, chaine, (size_t) taille_fichier) != 1)
         {          {
               EVP_MD_CTX_free(contexte);
             close(in_fd);              close(in_fd);
             free(chaine);              free(chaine);
   
Line 144  controle(struct_processus *s_etat_proces Line 191  controle(struct_processus *s_etat_proces
             return(d_faux);              return(d_faux);
         }          }
   
         if (EVP_DigestFinal_ex(&contexte, somme, &longueur_somme) != 1)          if (EVP_DigestFinal_ex(contexte, somme, &longueur_somme) != 1)
         {          {
               EVP_MD_CTX_free(contexte);
             close(in_fd);              close(in_fd);
             free(chaine);              free(chaine);
   
Line 158  controle(struct_processus *s_etat_proces Line 206  controle(struct_processus *s_etat_proces
         return(d_faux);          return(d_faux);
     }      }
   
     EVP_MD_CTX_cleanup(&contexte);      EVP_MD_CTX_free(contexte);
     free(chaine);      free(chaine);
   
     for(i = 0; i < longueur_somme; i++)      for(i = 0; i < longueur_somme; i++)
Line 172  controle(struct_processus *s_etat_proces Line 220  controle(struct_processus *s_etat_proces
     }      }
     else      else
     {      {
           if ((*s_etat_processus).langue == 'F')
           {
               printf("+++Fatal : Somme de contrôle invalide\n");
               printf("Fonction %s(%s)\n", type, registre);
               printf("Résultat obtenu  : %s\n", somme_hexadecimale);
               printf("Résultat attendu : %s\n", somme_candidate);
           }
           else
           {
               printf("+++Fatal : Hash code mismatch\n");
               printf("Function %s(%s)\n", type, registre);
               printf("Computed hash code : %s\n", somme_hexadecimale);
               printf("Expected hash code : %s\n", somme_candidate);
           }
   
         drapeau = d_faux;          drapeau = d_faux;
     }      }
   

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


CVSweb interface <joel.bertrand@systella.fr>