--- rpl/src/instructions_c4.c 2010/03/04 10:17:50 1.4 +++ rpl/src/instructions_c4.c 2010/03/04 17:42:46 1.5 @@ -543,21 +543,43 @@ instruction_convert(struct_processus *s_ (((*s_objet_argument_3).type == INT) || ((*s_objet_argument_3).type == REL))) { - longueur_chaine = strlen(ds_rplconvert_commande) - 9 - + strlen((unsigned char *) (*s_objet_argument_1).objet) - + strlen((unsigned char *) (*s_objet_argument_2).objet) - + (2 * strlen(d_exec_path)); - - if ((commande = malloc((longueur_chaine + 1) * sizeof(unsigned char))) - == NULL) + if ((*s_etat_processus).rpl_home == NULL) { - (*s_etat_processus).erreur_systeme = d_es_allocation_memoire; - return; + longueur_chaine = strlen(ds_rplconvert_commande) - 9 + + strlen((unsigned char *) (*s_objet_argument_1).objet) + + strlen((unsigned char *) (*s_objet_argument_2).objet) + + (2 * strlen(d_exec_path)); + + if ((commande = malloc((longueur_chaine + 1) * + sizeof(unsigned char))) == NULL) + { + (*s_etat_processus).erreur_systeme = d_es_allocation_memoire; + return; + } + + sprintf(commande, ds_rplconvert_commande, d_exec_path, d_exec_path, + (unsigned char *) (*s_objet_argument_2).objet, + (unsigned char *) (*s_objet_argument_1).objet); } + else + { + longueur_chaine = strlen(ds_rplconvert_commande) - 9 + + strlen((unsigned char *) (*s_objet_argument_1).objet) + + strlen((unsigned char *) (*s_objet_argument_2).objet) + + (2 * strlen((*s_etat_processus).rpl_home)); + + if ((commande = malloc((longueur_chaine + 1) * + sizeof(unsigned char))) == NULL) + { + (*s_etat_processus).erreur_systeme = d_es_allocation_memoire; + return; + } - sprintf(commande, ds_rplconvert_commande, d_exec_path, d_exec_path, - (unsigned char *) (*s_objet_argument_2).objet, - (unsigned char *) (*s_objet_argument_1).objet); + sprintf(commande, ds_rplconvert_commande, + (*s_etat_processus).rpl_home, (*s_etat_processus).rpl_home, + (unsigned char *) (*s_objet_argument_2).objet, + (unsigned char *) (*s_objet_argument_1).objet); + } if ((pipe = popen(commande, "r")) == NULL) {