Diff for /rpl/src/rpl.c between versions 1.96 and 1.114

version 1.96, 2011/10/10 10:58:12 version 1.114, 2012/05/21 17:25:46
Line 1 Line 1
 /*  /*
 ================================================================================  ================================================================================
   RPL/2 (R) version 4.1.4    RPL/2 (R) version 4.1.9
   Copyright (C) 1989-2011 Dr. BERTRAND Joël    Copyright (C) 1989-2012 Dr. BERTRAND Joël
   
   This file is part of RPL/2.    This file is part of RPL/2.
   
Line 31 Line 31
 */  */
   
 int  int
 rplinit(int argc, char *argv[], unsigned char ***resultats, char *rpl_home)  rplinit(int argc, char *argv[], char *envp[],
           unsigned char ***resultats, char *rpl_home)
 {  {
 #   include                             "copyright-conv.h"  #   include                             "copyright-conv.h"
 #   include                             "licence-conv.h"  #   include                             "licence-conv.h"
   
       char                                **arg_exec;
   
   #   ifdef HAVE_STACK_OVERFLOW_RECOVERY
     char                                pile_signaux[SIGSTKSZ];      char                                pile_signaux[SIGSTKSZ];
   #   endif
   
   #   define RPL_PATH_MAX                 1024
       char                                repertoire_initial[RPL_PATH_MAX];
   
     file                                *f_source;      file                                *f_source;
   
Line 174  rplinit(int argc, char *argv[], unsigned Line 182  rplinit(int argc, char *argv[], unsigned
         (*s_etat_processus).langue = 'E';          (*s_etat_processus).langue = 'E';
     }      }
   
       if (getcwd(repertoire_initial, RPL_PATH_MAX) == NULL)
       {
           if ((langue = getenv("LANG")) != NULL)
           {
               if (strncmp(langue, "fr", 2) == 0)
               {
                   uprintf("+++Système : Mémoire insuffisante\n");
               }
               else
               {
                   uprintf("+++System : Not enough memory\n");
               }
           }
           else
           {
               uprintf("+++System : Not enough memory\n");
           }
   
           return(EXIT_FAILURE);
       }
   
       if ((arg_exec = malloc((argc + 1) * sizeof(char *))) == NULL)
       {
           if ((langue = getenv("LANG")) != NULL)
           {
               if (strncmp(langue, "fr", 2) == 0)
               {
                   uprintf("+++Système : Mémoire insuffisante\n");
               }
               else
               {
                   uprintf("+++System : Not enough memory\n");
               }
           }
           else
           {
               uprintf("+++System : Not enough memory\n");
           }
   
           return(EXIT_FAILURE);
       }
   
       for(i = 0; i < (unsigned long) argc; i++)
       {
           arg_exec[i] = argv[i];
       }
   
       argv[argc] = NULL;
   
     initialisation_contexte_cas(s_etat_processus);      initialisation_contexte_cas(s_etat_processus);
   
     (*s_etat_processus).exception = d_ep;      (*s_etat_processus).exception = d_ep;
     (*s_etat_processus).erreur_systeme = d_es;      (*s_etat_processus).erreur_systeme = d_es;
     (*s_etat_processus).erreur_execution = d_ex;      (*s_etat_processus).erreur_execution = d_ex;
   
       (*s_etat_processus).requete_redemarrage = d_faux;
     (*s_etat_processus).rpl_home = rpl_home;      (*s_etat_processus).rpl_home = rpl_home;
   
     pthread_mutexattr_init(&attributs_mutex);      pthread_mutexattr_init(&attributs_mutex);
Line 287  rplinit(int argc, char *argv[], unsigned Line 345  rplinit(int argc, char *argv[], unsigned
   
     if ((*s_etat_processus).langue == 'F')      if ((*s_etat_processus).langue == 'F')
     {      {
         printf("+++Copyright (C) 1989 à 2010, 2011 BERTRAND Joël\n");          printf("+++Copyright (C) 1989 à 2011, 2012 BERTRAND Joël\n");
     }      }
     else      else
     {      {
         printf("+++Copyright (C) 1989 to 2010, 2011 BERTRAND Joel\n");          printf("+++Copyright (C) 1989 to 2011, 2012 BERTRAND Joel\n");
     }      }
   
     if (getenv("HOME") != NULL)      if (getenv("HOME") != NULL)
Line 425  rplinit(int argc, char *argv[], unsigned Line 483  rplinit(int argc, char *argv[], unsigned
         return(EXIT_FAILURE);          return(EXIT_FAILURE);
     }      }
   
       if (sigaction(SIGALRM, &action, NULL) != 0)
       {
           erreur = d_es_signal;
   
           if ((*s_etat_processus).langue == 'F')
           {
               printf("+++Système : Initialisation des signaux POSIX "
                       "impossible\n");
           }
           else
           {
               printf("+++System : Initialization of POSIX signals failed\n");
           }
   
           return(EXIT_FAILURE);
       }
   
       signal_test = SIGTEST;
       kill(getpid(), SIGALRM);
   
       if (signal_test != SIGALRM)
       {
           erreur = d_es_signal;
   
           if ((*s_etat_processus).langue == 'F')
           {
               printf("+++Système : Initialisation des signaux POSIX "
                       "impossible\n");
           }
           else
           {
               printf("+++System : Initialization of POSIX signals failed\n");
           }
   
           return(EXIT_FAILURE);
       }
   
     action.sa_handler = interruption2;      action.sa_handler = interruption2;
     action.sa_flags = 0;      action.sa_flags = 0;
   
Line 1937  rplinit(int argc, char *argv[], unsigned Line 2032  rplinit(int argc, char *argv[], unsigned
             (*s_etat_processus).arbre_instructions = NULL;              (*s_etat_processus).arbre_instructions = NULL;
   
             (*s_etat_processus).tid_processus_pere = pthread_self();              (*s_etat_processus).tid_processus_pere = pthread_self();
               (*s_etat_processus).tid = pthread_self();
             (*s_etat_processus).pid_processus_pere = getpid();              (*s_etat_processus).pid_processus_pere = getpid();
             (*s_etat_processus).processus_detache = d_vrai;              (*s_etat_processus).processus_detache = d_vrai;
             (*s_etat_processus).var_volatile_processus_pere = -1;              (*s_etat_processus).var_volatile_processus_pere = -1;
Line 2033  rplinit(int argc, char *argv[], unsigned Line 2129  rplinit(int argc, char *argv[], unsigned
                 (*((*s_etat_processus).l_base_pile_systeme))                  (*((*s_etat_processus).l_base_pile_systeme))
                         .retour_definition = 'Y';                          .retour_definition = 'Y';
   
                 (*s_etat_processus).indep = (struct_objet *) malloc(                  (*s_etat_processus).indep = allocation(s_etat_processus, NON);
                         sizeof(struct_objet));                  (*s_etat_processus).depend = allocation(s_etat_processus, NON);
                 (*s_etat_processus).depend = (struct_objet *) malloc(  
                         sizeof(struct_objet));  
                 (*s_etat_processus).parametres_courbes_de_niveau =                  (*s_etat_processus).parametres_courbes_de_niveau =
                         (struct_objet *) malloc(sizeof(struct_objet));                          allocation(s_etat_processus, NON);
   
                 if (((*s_etat_processus).indep != NULL) &&                  if (((*s_etat_processus).indep != NULL) &&
                         ((*s_etat_processus).depend != NULL) &&                          ((*s_etat_processus).depend != NULL) &&
Line 2448  rplinit(int argc, char *argv[], unsigned Line 2542  rplinit(int argc, char *argv[], unsigned
                             home, ds_fichier_historique);                              home, ds_fichier_historique);
   
                     using_history();                      using_history();
   
                       // Pour pouvoir utiliser le keymap avant le premier
                       // appel à readline().
                       rl_initialize();
   
                     erreur_historique = read_history(                      erreur_historique = read_history(
                             (*s_etat_processus).nom_fichier_historique);                              (*s_etat_processus).nom_fichier_historique);
   
Line 2755  rplinit(int argc, char *argv[], unsigned Line 2854  rplinit(int argc, char *argv[], unsigned
                     l_element_courant = (*s_etat_processus).liste_mutexes;                      l_element_courant = (*s_etat_processus).liste_mutexes;
                     while(l_element_courant != NULL)                      while(l_element_courant != NULL)
                     {                      {
                         pthread_mutex_trylock(&((*((struct_mutex *)  
                                 (*(*((struct_liste_chainee *)  
                                 l_element_courant)).donnee).objet)).mutex));  
                         pthread_mutex_unlock(&((*((struct_mutex *)  
                                 (*(*((struct_liste_chainee *)  
                                 l_element_courant)).donnee).objet)).mutex));  
                         pthread_mutex_destroy(&((*((struct_mutex *)  
                                 (*(*((struct_liste_chainee *)  
                                 l_element_courant)).donnee).objet)).mutex));  
   
                         liberation(s_etat_processus,                          liberation(s_etat_processus,
                                 (*((struct_liste_chainee *)                                  (*((struct_liste_chainee *)
                                 l_element_courant)).donnee);                                  l_element_courant)).donnee);
Line 3574  rplinit(int argc, char *argv[], unsigned Line 3663  rplinit(int argc, char *argv[], unsigned
     liberation_contexte_cas(s_etat_processus);      liberation_contexte_cas(s_etat_processus);
   
     free((*s_etat_processus).chemin_fichiers_temporaires);      free((*s_etat_processus).chemin_fichiers_temporaires);
   
       if ((*s_etat_processus).requete_redemarrage == d_vrai)
       {
           chdir(repertoire_initial);
           execvp(arg_exec[0], &(arg_exec[0]));
           erreur = d_erreur;
       }
   
       free(arg_exec);
     free(s_etat_processus);      free(s_etat_processus);
   
 #   ifdef DEBUG_MEMOIRE  #   ifdef DEBUG_MEMOIRE
Line 3648  informations(struct_processus *s_etat_pr Line 3746  informations(struct_processus *s_etat_pr
 }  }
   
   
   logical1
   controle_integrite(struct_processus *s_etat_processus,
           unsigned char *executable_candidat, unsigned char *executable)
   {
       unsigned char       *md5;
       unsigned char       *sha1;
   
       if (strcmp(executable, "rplpp") == 0)
       {
           md5 = rplpp_md5;
           sha1 = rplpp_sha1;
       }
       else if (strcmp(executable, "rplfile") == 0)
       {
           md5 = rplfile_md5;
           sha1 = rplfile_sha1;
       }
       else if (strcmp(executable, "rpliconv") == 0)
       {
           md5 = rpliconv_md5;
           sha1 = rpliconv_sha1;
       }
       else if (strcmp(executable, "rplawk") == 0)
       {
           md5 = rplawk_md5;
           sha1 = rplawk_sha1;
       }
       else if (strcmp(executable, "rplconvert") == 0)
       {
           md5 = rplconvert_md5;
           sha1 = rplconvert_sha1;
       }
       else
       {
           return(d_faux);
       }
   
       if (controle(s_etat_processus, executable_candidat, "md5", md5) != d_vrai)
       {
           return(d_faux);
       }
   
       if (controle(s_etat_processus, executable_candidat, "sha1", sha1) != d_vrai)
       {
           return(d_faux);
       }
   
       return(d_vrai);
   }
   
   
 unsigned char *  unsigned char *
 date_compilation()  date_compilation()
 {  {

Removed from v.1.96  
changed lines
  Added in v.1.114


CVSweb interface <joel.bertrand@systella.fr>