--- rpl/src/controle.c 2010/03/04 17:42:46 1.1 +++ rpl/src/controle.c 2010/08/26 19:07:35 1.13 @@ -1,7 +1,7 @@ /* ================================================================================ - RPL/2 (R) version 4.0.12 - Copyright (C) 1989-2010 Dr. BERTRAND Joël + RPL/2 (R) version 4.0.19 + Copyright (C) 1989-2010 Dr. BERTRAND Joël This file is part of RPL/2. @@ -20,34 +20,32 @@ */ -#include "rpl.conv.h" +#include "rpl-conv.h" /* ================================================================================ - Calcul des sommes de contrôle avant le lancement d'un exécutable + Calcul des sommes de contrôle avant le lancement d'un exécutable de la famille RPL/2 (rpliconv, rplconvert, rplfile et rplpp). ================================================================================ - Entrée : - - chaîne de caractères sur le fichier à contrôler - - chaîne de caractères contenant la somme à contrôler - - type de somme de contrôle + Entrée : + - chaîne de caractères sur le fichier à contrôler + - chaîne de caractères contenant la somme à contrôler + - type de somme de contrôle -------------------------------------------------------------------------------- Sortie : drapeau -------------------------------------------------------------------------------- - Effets de bord : néant + Effets de bord : néant ================================================================================ */ - logical1 controle(struct_processus *s_etat_processus, unsigned char *fichier, unsigned char *type, unsigned char *somme_candidate) { EVP_MD_CTX contexte; - int i_rval = 0; - int in_fd = -1; + int in_fd; logical1 drapeau; @@ -64,30 +62,67 @@ controle(struct_processus *s_etat_proces unsigned int i; unsigned int longueur_somme; - i_rval = stat(fichier, &stat_buf); +# 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) + { +# ifdef OS2 + free(fichier); +# endif + + (*s_etat_processus).erreur_systeme = d_es_erreur_fichier; + return(d_faux); + } + taille_fichier = stat_buf.st_size; if ((chaine = malloc(taille_fichier)) == NULL) { +# ifdef OS2 + free(fichier); +# endif + (*s_etat_processus).erreur_systeme = d_es_allocation_memoire; return(d_faux); } if ((in_fd = open(fichier, 0, O_RDONLY)) < 0) { +# ifdef OS2 + free(fichier); +# endif + free(chaine); (*s_etat_processus).erreur_systeme = d_es_erreur_fichier; return(d_faux); } +# ifdef OS2 + free(fichier); +# endif + if ((octets_lus = read(in_fd, chaine, taille_fichier)) != taille_fichier) { +# ifndef OS2 close(in_fd); free(chaine); (*s_etat_processus).erreur_systeme = d_es_erreur_fichier; return(d_faux); +# endif } close(in_fd); @@ -150,6 +185,10 @@ controle(struct_processus *s_etat_proces return(d_faux); } } + else + { + return(d_faux); + } EVP_MD_CTX_cleanup(&contexte); free(chaine);