--- rpl/src/rpl.c 2011/11/30 12:15:18 1.102 +++ rpl/src/rpl.c 2011/11/30 17:21:07 1.103 @@ -41,6 +41,9 @@ rplinit(int argc, char *argv[], char *en char pile_signaux[SIGSTKSZ]; # endif +# define RPL_PATH_MAX 1024 + char repertoire_initial[RPL_PATH_MAX]; + file *f_source; int erreur_historique; @@ -177,17 +180,34 @@ rplinit(int argc, char *argv[], char *en (*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); + } + initialisation_contexte_cas(s_etat_processus); (*s_etat_processus).exception = d_ep; (*s_etat_processus).erreur_systeme = d_es; (*s_etat_processus).erreur_execution = d_ex; - (*s_etat_processus).argc = argc; - (*s_etat_processus).argv = argv; - (*s_etat_processus).envp = envp; (*s_etat_processus).requete_redemarrage = d_faux; - (*s_etat_processus).rpl_home = rpl_home; pthread_mutexattr_init(&attributs_mutex); @@ -3572,6 +3592,17 @@ rplinit(int argc, char *argv[], char *en liberation_contexte_cas(s_etat_processus); free((*s_etat_processus).chemin_fichiers_temporaires); + + if ((*s_etat_processus).requete_redemarrage == d_vrai) + { + chdir(repertoire_initial); + execve(argv[0], (*(argv + 1)), envp); + erreur = d_erreur; + } + + // Libération de la copie des arguments + // A FAIRE + free(s_etat_processus); # ifdef DEBUG_MEMOIRE