--- rpl/src/rpl.c 2011/11/30 17:21:07 1.103 +++ rpl/src/rpl.c 2011/11/30 20:40:08 1.104 @@ -37,6 +37,8 @@ rplinit(int argc, char *argv[], char *en # include "copyright-conv.h" # include "licence-conv.h" + char **arg_exec; + # ifdef HAVE_STACK_OVERFLOW_RECOVERY char pile_signaux[SIGSTKSZ]; # endif @@ -201,6 +203,34 @@ rplinit(int argc, char *argv[], char *en 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); (*s_etat_processus).exception = d_ep; @@ -3596,13 +3626,11 @@ rplinit(int argc, char *argv[], char *en if ((*s_etat_processus).requete_redemarrage == d_vrai) { chdir(repertoire_initial); - execve(argv[0], (*(argv + 1)), envp); + execve(arg_exec[0], &(arg_exec[0]), envp); erreur = d_erreur; } - // Libération de la copie des arguments - // A FAIRE - + free(arg_exec); free(s_etat_processus); # ifdef DEBUG_MEMOIRE