--- rpl/src/interface_tex.c 2010/02/28 14:47:14 1.5 +++ rpl/src/interface_tex.c 2010/08/06 15:33:03 1.16 @@ -1,6 +1,6 @@ /* ================================================================================ - RPL/2 (R) version 4.0.11 + RPL/2 (R) version 4.0.18 Copyright (C) 1989-2010 Dr. BERTRAND Joël This file is part of RPL/2. @@ -20,8 +20,8 @@ */ -#include "rpl.conv.h" -#include "tex.conv.h" +#include "rpl-conv.h" +#include "tex-conv.h" /* @@ -2244,6 +2244,7 @@ impression_tex(struct_processus *s_etat_ file *fichier_impression; unsigned char *commande; + unsigned char *executable_candidat; unsigned char *nom_fichier_aux; unsigned char *nom_fichier_dvi; unsigned char *nom_fichier_log; @@ -2329,15 +2330,125 @@ impression_tex(struct_processus *s_etat_ return; } - if (alsprintf(&commande, ds_tex_commande, - d_exec_path, d_exec_path, d_exec_path, - (*s_etat_processus).nom_fichier_impression, - (*s_etat_processus).nom_fichier_impression, nom_fichier_tex, - (*s_etat_processus).chemin_fichiers_temporaires, - nom_fichier_tex, nom_fichier_dvi, nom_fichier_ps) < 0) + if ((*s_etat_processus).rpl_home == NULL) { - (*s_etat_processus).erreur_systeme = d_es_allocation_memoire; - return; + if (alsprintf(&commande, ds_tex_commande, + d_exec_path, d_exec_path, d_exec_path, + (*s_etat_processus).nom_fichier_impression, + (*s_etat_processus).nom_fichier_impression, nom_fichier_tex, + (*s_etat_processus).chemin_fichiers_temporaires, + nom_fichier_tex, nom_fichier_dvi, nom_fichier_ps) < 0) + { + (*s_etat_processus).erreur_systeme = d_es_allocation_memoire; + return; + } + + if (alsprintf(&executable_candidat, "%s/bin/rpliconv", + d_exec_path) < 0) + { + (*s_etat_processus).erreur_systeme = d_es_allocation_memoire; + return; + } + + if (controle(s_etat_processus, executable_candidat, "md5", + rpliconv_md5) != d_vrai) + { + (*s_etat_processus).erreur_systeme = d_es_somme_controle; + return; + } + + if (controle(s_etat_processus, executable_candidat, "sha1", + rpliconv_sha1) != d_vrai) + { + (*s_etat_processus).erreur_systeme = d_es_somme_controle; + return; + } + + free(executable_candidat); + + if (alsprintf(&executable_candidat, "%s/bin/rplfile", + d_exec_path) < 0) + { + (*s_etat_processus).erreur_systeme = d_es_allocation_memoire; + return; + } + + if (controle(s_etat_processus, executable_candidat, "md5", + rplfile_md5) != d_vrai) + { + (*s_etat_processus).erreur_systeme = d_es_somme_controle; + return; + } + + if (controle(s_etat_processus, executable_candidat, "sha1", + rplfile_sha1) != d_vrai) + { + (*s_etat_processus).erreur_systeme = d_es_somme_controle; + return; + } + + free(executable_candidat); + } + else + { + if (alsprintf(&commande, ds_tex_commande, + (*s_etat_processus).rpl_home, + (*s_etat_processus).rpl_home, + (*s_etat_processus).rpl_home, + (*s_etat_processus).nom_fichier_impression, + (*s_etat_processus).nom_fichier_impression, nom_fichier_tex, + (*s_etat_processus).chemin_fichiers_temporaires, + nom_fichier_tex, nom_fichier_dvi, nom_fichier_ps) < 0) + { + (*s_etat_processus).erreur_systeme = d_es_allocation_memoire; + return; + } + + if (alsprintf(&executable_candidat, "%s/bin/rpliconv", + (*s_etat_processus).rpl_home) < 0) + { + (*s_etat_processus).erreur_systeme = d_es_allocation_memoire; + return; + } + + if (controle(s_etat_processus, executable_candidat, "md5", + rpliconv_md5) != d_vrai) + { + (*s_etat_processus).erreur_systeme = d_es_somme_controle; + return; + } + + if (controle(s_etat_processus, executable_candidat, "sha1", + rpliconv_sha1) != d_vrai) + { + (*s_etat_processus).erreur_systeme = d_es_somme_controle; + return; + } + + free(executable_candidat); + + if (alsprintf(&executable_candidat, "%s/bin/rplfile", + (*s_etat_processus).rpl_home) < 0) + { + (*s_etat_processus).erreur_systeme = d_es_allocation_memoire; + return; + } + + if (controle(s_etat_processus, executable_candidat, "md5", + rplfile_md5) != d_vrai) + { + (*s_etat_processus).erreur_systeme = d_es_somme_controle; + return; + } + + if (controle(s_etat_processus, executable_candidat, "sha1", + rplfile_sha1) != d_vrai) + { + (*s_etat_processus).erreur_systeme = d_es_somme_controle; + return; + } + + free(executable_candidat); } if (system(commande) != 0)