--- rpl/src/instructions_u1.c 2010/03/04 10:17:53 1.4 +++ rpl/src/instructions_u1.c 2010/05/24 10:58:35 1.10 @@ -1,6 +1,6 @@ /* ================================================================================ - RPL/2 (R) version 4.0.12 + RPL/2 (R) version 4.0.16 Copyright (C) 1989-2010 Dr. BERTRAND Joël This file is part of RPL/2. @@ -782,17 +782,35 @@ instruction_use(struct_processus *s_etat { free(tampon); - if ((tampon = malloc((strlen((unsigned char *) - (*s_objet_argument).objet) + strlen(d_exec_path) + 7) - * sizeof(unsigned char))) == NULL) + if ((*s_etat_processus).rpl_home == NULL) { - (*s_etat_processus).erreur_systeme = - d_es_allocation_memoire; - return; + if ((tampon = malloc((strlen((unsigned char *) + (*s_objet_argument).objet) + strlen(d_exec_path) + + 7) * sizeof(unsigned char))) == NULL) + { + (*s_etat_processus).erreur_systeme = + d_es_allocation_memoire; + return; + } + + sprintf(tampon, "/%s/lib/%s", d_exec_path, (unsigned char *) + (*s_objet_argument).objet); } + else + { + if ((tampon = malloc((strlen((unsigned char *) + (*s_objet_argument).objet) + + strlen((*s_etat_processus).rpl_home) + + 7) * sizeof(unsigned char))) == NULL) + { + (*s_etat_processus).erreur_systeme = + d_es_allocation_memoire; + return; + } - sprintf(tampon, "/%s/lib/%s", d_exec_path, (unsigned char *) - (*s_objet_argument).objet); + sprintf(tampon, "/%s/lib/%s", (*s_etat_processus).rpl_home, + (unsigned char *) (*s_objet_argument).objet); + } caracteristiques_fichier(s_etat_processus, tampon, &existence, &ouverture, &unite); @@ -1059,10 +1077,10 @@ instruction_uchol(struct_processus *s_et void instruction_unlock(struct_processus *s_etat_processus) { - file *descripteur; - struct flock lock; + struct_descripteur_fichier *descripteur; + struct_objet *s_objet; (*s_etat_processus).erreur_execution = d_ex; @@ -1119,7 +1137,8 @@ instruction_unlock(struct_processus *s_e return; } - if (fcntl(fileno(descripteur), F_SETLK, &lock) == -1) + if (fcntl(fileno((*descripteur).descripteur_c), F_SETLK, &lock) + == -1) { liberation(s_etat_processus, s_objet);