--- rpl/src/instructions_r3.c 2010/03/07 18:33:02 1.7 +++ rpl/src/instructions_r3.c 2011/06/10 11:35:13 1.26 @@ -1,7 +1,7 @@ /* ================================================================================ - RPL/2 (R) version 4.0.12 - Copyright (C) 1989-2010 Dr. BERTRAND Joël + RPL/2 (R) version 4.1.0.prerelease.0 + Copyright (C) 1989-2011 Dr. BERTRAND Joël This file is part of RPL/2. @@ -20,7 +20,7 @@ */ -#include "rpl.conv.h" +#include "rpl-conv.h" /* @@ -741,10 +741,6 @@ instruction_rnrm(struct_processus *s_eta void instruction_rceq(struct_processus *s_etat_processus) { - logical1 presence_variable; - - long i; - struct_objet *s_objet_variable; (*s_etat_processus).erreur_execution = d_ex; @@ -787,48 +783,20 @@ instruction_rceq(struct_processus *s_eta } } - if (recherche_variable(s_etat_processus, "EQ") == d_vrai) + if (recherche_variable_globale(s_etat_processus, "EQ") == d_faux) { - i = (*s_etat_processus).position_variable_courante; - presence_variable = d_faux; - - while(i >= 0) - { - if ((strcmp((*s_etat_processus).s_liste_variables[i].nom, "EQ") - == 0) && ((*s_etat_processus).s_liste_variables[i] - .niveau == 1)) - { - presence_variable = d_vrai; - break; - } - - i--; - } - - (*s_etat_processus).position_variable_courante = i; + (*s_etat_processus).erreur_systeme = d_es; - if (presence_variable == d_faux) + if ((*s_etat_processus).erreur_execution == d_ex) { (*s_etat_processus).erreur_execution = d_ex_variable_non_definie; - return; } - if ((*s_etat_processus).s_liste_variables[i].objet == NULL) - { - (*s_etat_processus).erreur_execution = d_ex_variable_partagee; - return; - } - } - else - { - (*s_etat_processus).erreur_systeme = d_es; - (*s_etat_processus).erreur_execution = d_ex_variable_non_definie; return; } if ((s_objet_variable = copie_objet(s_etat_processus, - ((*s_etat_processus).s_liste_variables) - [(*s_etat_processus).position_variable_courante].objet, 'P')) + (*(*s_etat_processus).pointeur_variable_courante).objet, 'P')) == NULL) { (*s_etat_processus).erreur_systeme = d_es_allocation_memoire; @@ -974,12 +942,27 @@ instruction_recall(struct_processus *s_e unsigned char *chaine; unsigned char *commande; unsigned char *executable_candidat; + +# ifndef OS2 unsigned char *instructions = "%s/bin/rpliconv %s " "`%s/bin/rplfile " - "-m %s/share/rplfiles -i %s | awk " - "'{ print $3; }' | awk -F= '{ if " + "-m %s/share/rplfiles -i %s | " + "%s/bin/rplawk " + "'{ print $3; }' | %s/bin/rplawk -F= '{ if " "($2 != \"\") printf(\"-f %%s\", $2); }'` " "-t `locale charmap` | %s/bin/%s -o %s"; +# else + unsigned char *instructions = BOURNE_SHELL + " -c \"%s/bin/rpliconv %s " + "`%s/bin/rplfile " + "-m %s/share/rplfiles -i %s | " + "%s/bin/rplawk " + "'{ print $3; }' | %s/bin/rplawk -F= '{ if " + "($2 != \\\"\\\") printf(\\\"-f %%s\\\", " + "$2); }'` -t `" d_locale + "` | %s/bin/%s -o %s\""; +# endif + unsigned char *nom_fichier_temporaire; unsigned char *tampon_definitions_chainees; unsigned char *tampon_instruction_courante; @@ -1058,8 +1041,8 @@ instruction_recall(struct_processus *s_e { if ((commande = malloc((strlen(ds_preprocesseur) + (2 * strlen((unsigned char *) (*s_objet).objet)) + - (4 * strlen(d_exec_path)) + - strlen(nom_fichier_temporaire) + strlen(instructions) - 11) + (6 * strlen(d_exec_path)) + + strlen(nom_fichier_temporaire) + strlen(instructions) - 19) * sizeof(unsigned char))) == NULL) { (*s_etat_processus).erreur_systeme = d_es_allocation_memoire; @@ -1070,6 +1053,7 @@ instruction_recall(struct_processus *s_e (unsigned char *) (*s_objet).objet, d_exec_path, d_exec_path, (unsigned char *) (*s_objet).objet, + d_exec_path, d_exec_path, d_exec_path, ds_preprocesseur, nom_fichier_temporaire); if (alsprintf(&executable_candidat, "%s/bin/rpliconv", @@ -1140,13 +1124,36 @@ instruction_recall(struct_processus *s_e } free(executable_candidat); + + if (alsprintf(&executable_candidat, "%s/bin/rplawk", + d_exec_path) < 0) + { + (*s_etat_processus).erreur_systeme = d_es_allocation_memoire; + return; + } + + if (controle(s_etat_processus, executable_candidat, "md5", + rplawk_md5) != d_vrai) + { + (*s_etat_processus).erreur_systeme = d_es_somme_controle; + return; + } + + if (controle(s_etat_processus, executable_candidat, "sha1", + rplawk_sha1) != d_vrai) + { + (*s_etat_processus).erreur_systeme = d_es_somme_controle; + return; + } + + free(executable_candidat); } else { if ((commande = malloc((strlen(ds_preprocesseur) + (2 * strlen((unsigned char *) (*s_objet).objet)) + - (4 * strlen((*s_etat_processus).rpl_home)) + - strlen(nom_fichier_temporaire) + strlen(instructions) - 11) + (6 * strlen((*s_etat_processus).rpl_home)) + + strlen(nom_fichier_temporaire) + strlen(instructions) - 19) * sizeof(unsigned char))) == NULL) { (*s_etat_processus).erreur_systeme = d_es_allocation_memoire; @@ -1157,6 +1164,7 @@ instruction_recall(struct_processus *s_e (unsigned char *) (*s_objet).objet, (*s_etat_processus).rpl_home, (*s_etat_processus).rpl_home, (unsigned char *) (*s_objet).objet, + (*s_etat_processus).rpl_home, (*s_etat_processus).rpl_home, (*s_etat_processus).rpl_home, ds_preprocesseur, nom_fichier_temporaire); @@ -1228,6 +1236,29 @@ instruction_recall(struct_processus *s_e } free(executable_candidat); + + if (alsprintf(&executable_candidat, "%s/bin/rplawk", + d_exec_path) < 0) + { + (*s_etat_processus).erreur_systeme = d_es_allocation_memoire; + return; + } + + if (controle(s_etat_processus, executable_candidat, "md5", + rplawk_md5) != d_vrai) + { + (*s_etat_processus).erreur_systeme = d_es_somme_controle; + return; + } + + if (controle(s_etat_processus, executable_candidat, "sha1", + rplawk_sha1) != d_vrai) + { + (*s_etat_processus).erreur_systeme = d_es_somme_controle; + return; + } + + free(executable_candidat); } if ((pipe = popen(commande, "r")) == NULL) @@ -1635,10 +1666,6 @@ instruction_rcws(struct_processus *s_eta void instruction_rcls(struct_processus *s_etat_processus) { - logical1 presence_variable; - - long i; - struct_objet *s_objet_variable; (*s_etat_processus).erreur_execution = d_ex; @@ -1679,48 +1706,20 @@ instruction_rcls(struct_processus *s_eta } } - if (recherche_variable(s_etat_processus, ds_sdat) == d_vrai) + if (recherche_variable_globale(s_etat_processus, ds_sdat) == d_faux) { - i = (*s_etat_processus).position_variable_courante; - presence_variable = d_faux; - - while(i >= 0) - { - if ((strcmp((*s_etat_processus).s_liste_variables[i].nom, ds_sdat) - == 0) && ((*s_etat_processus).s_liste_variables[i] - .niveau == 1)) - { - presence_variable = d_vrai; - break; - } - - i--; - } - - (*s_etat_processus).position_variable_courante = i; + (*s_etat_processus).erreur_systeme = d_es; - if (presence_variable == d_faux) + if ((*s_etat_processus).erreur_execution == d_ex) { (*s_etat_processus).erreur_execution = d_ex_variable_non_definie; - return; } - if ((*s_etat_processus).s_liste_variables[i].objet == NULL) - { - (*s_etat_processus).erreur_execution = d_ex_variable_partagee; - return; - } - } - else - { - (*s_etat_processus).erreur_systeme = d_es; - (*s_etat_processus).erreur_execution = d_ex_variable_non_definie; return; } if ((s_objet_variable = copie_objet(s_etat_processus, - ((*s_etat_processus).s_liste_variables) - [(*s_etat_processus).position_variable_courante].objet, 'O')) + (*(*s_etat_processus).pointeur_variable_courante).objet, 'O')) == NULL) { (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;