--- rpl/src/rpl.c 2010/07/14 14:19:40 1.33 +++ rpl/src/rpl.c 2010/08/17 11:59:28 1.40 @@ -21,7 +21,13 @@ #define MAIN_RPL -#include "rpl.conv.h" +#include "rpl-conv.h" + +#ifdef SEMAPHORES_SYSV +#ifndef OS2 + unsigned char *chemin_semaphores_SysV; +#endif +#endif /* @@ -33,8 +39,8 @@ int rplinit(int argc, char *argv[], unsigned char ***resultats, char *rpl_home) { -# include "copyright.conv.h" -# include "licence.conv.h" +# include "copyright-conv.h" +# include "licence-conv.h" file *f_source; @@ -99,6 +105,8 @@ rplinit(int argc, char *argv[], unsigned volatile int erreur; volatile unsigned char traitement_fichier_temporaire; + errno = 0; + # ifdef DEBUG_MEMOIRE debug_memoire_initialisation(); # endif @@ -231,6 +239,24 @@ rplinit(int argc, char *argv[], unsigned .mutex), &attributs_mutex); pthread_mutexattr_destroy(&attributs_mutex); + (*s_etat_processus).chemin_fichiers_temporaires = + recherche_chemin_fichiers_temporaires(s_etat_processus); + +# ifdef SEMAPHORES_SYSV +# ifndef OS2 + chemin_semaphores_SysV = (*s_etat_processus).chemin_fichiers_temporaires; +# endif +# endif + +# ifdef _BROKEN_SIGINFO + creation_fifos_signaux(s_etat_processus); + +# ifdef return +# undef return +# endif +# define return destruction_fifos_signaux(s_etat_processus); return +# endif + localisation_courante(s_etat_processus); (*s_etat_processus).erreur_systeme = d_es; @@ -327,7 +353,7 @@ rplinit(int argc, char *argv[], unsigned // Initialisation d'une pile de signal pour récupérer les // débordement de pile -# ifndef Cygwin +# if !defined(Cygwin) && !defined(OpenBSD) if (((*s_etat_processus).pile_signal.ss_sp = malloc((*s_etat_processus).pile_signal.ss_size = SIGSTKSZ)) == NULL) @@ -366,7 +392,11 @@ rplinit(int argc, char *argv[], unsigned } # endif +# ifndef _BROKEN_SIGINFO action.sa_sigaction = interruption1; +# else + action.sa_handler = interruption1; +# endif action.sa_flags = SA_ONSTACK | SA_SIGINFO; if (sigaction(SIGINT, &action, NULL) != 0) @@ -386,7 +416,11 @@ rplinit(int argc, char *argv[], unsigned return(EXIT_FAILURE); } +# ifndef _BROKEN_SIGINFO action.sa_sigaction = interruption2; +# else + action.sa_handler = interruption2; +# endif action.sa_flags = SA_NODEFER | SA_ONSTACK | SA_SIGINFO; if (sigaction(SIGTSTP, &action, NULL) != 0) @@ -404,7 +438,11 @@ rplinit(int argc, char *argv[], unsigned return(EXIT_FAILURE); } +# ifndef _BROKEN_SIGINFO action.sa_sigaction = interruption4; +# else + action.sa_handler = interruption4; +# endif action.sa_flags = SA_ONSTACK | SA_SIGINFO; if (sigaction(SIGSTART, &action, NULL) != 0) @@ -437,7 +475,11 @@ rplinit(int argc, char *argv[], unsigned return(EXIT_FAILURE); } +# ifndef _BROKEN_SIGINFO action.sa_sigaction = interruption5; +# else + action.sa_handler = interruption5; +# endif action.sa_flags = SA_NODEFER | SA_ONSTACK | SA_SIGINFO; if (sigaction(SIGFSTOP, &action, NULL) != 0) @@ -457,7 +499,11 @@ rplinit(int argc, char *argv[], unsigned return(EXIT_FAILURE); } +# ifndef _BROKEN_SIGINFO action.sa_sigaction = interruption11; +# else + action.sa_handler = interruption11; +# endif action.sa_flags = SA_NODEFER | SA_ONSTACK | SA_SIGINFO; if (sigaction(SIGFABORT, &action, NULL) != 0) @@ -477,7 +523,11 @@ rplinit(int argc, char *argv[], unsigned return(EXIT_FAILURE); } +# ifndef _BROKEN_SIGINFO action.sa_sigaction = interruption8; +# else + action.sa_handler = interruption8; +# endif action.sa_flags = SA_NODEFER | SA_ONSTACK | SA_SIGINFO; if (sigaction(SIGURG, &action, NULL) != 0) @@ -497,7 +547,11 @@ rplinit(int argc, char *argv[], unsigned return(EXIT_FAILURE); } +# ifndef _BROKEN_SIGINFO action.sa_sigaction = interruption7; +# else + action.sa_handler = interruption7; +# endif action.sa_flags = SA_NODEFER | SA_ONSTACK | SA_SIGINFO; if (sigaction(SIGPIPE, &action, NULL) != 0) @@ -517,7 +571,11 @@ rplinit(int argc, char *argv[], unsigned return(EXIT_FAILURE); } +# ifndef _BROKEN_SIGINFO action.sa_sigaction = interruption6; +# else + action.sa_handler = interruption6; +# endif action.sa_flags = SA_ONSTACK | SA_SIGINFO; if (sigaction(SIGINJECT, &action, NULL) != 0) @@ -537,7 +595,11 @@ rplinit(int argc, char *argv[], unsigned return(EXIT_FAILURE); } +# ifndef _BROKEN_SIGINFO action.sa_sigaction = interruption9; +# else + action.sa_handler = interruption9; +# endif action.sa_flags = SA_ONSTACK | SA_SIGINFO; if (sigaction(SIGABORT, &action, NULL) != 0) @@ -557,7 +619,11 @@ rplinit(int argc, char *argv[], unsigned return(EXIT_FAILURE); } +# ifndef _BROKEN_SIGINFO action.sa_sigaction = interruption1; +# else + action.sa_handler = interruption1; +# endif action.sa_flags = SA_NODEFER | SA_ONSTACK | SA_SIGINFO; if (sigaction(SIGALRM, &action, NULL) != 0) @@ -577,12 +643,13 @@ rplinit(int argc, char *argv[], unsigned return(EXIT_FAILURE); } +# ifndef _BROKEN_SIGINFO action.sa_sigaction = interruption3; +# else + action.sa_handler = interruption3; +# endif action.sa_flags = SA_NODEFER | SA_ONSTACK | SA_SIGINFO; - (*s_etat_processus).chemin_fichiers_temporaires = - recherche_chemin_fichiers_temporaires(s_etat_processus); - erreur = d_absence_erreur; core = d_faux; mode_interactif = d_faux; @@ -1505,7 +1572,11 @@ rplinit(int argc, char *argv[], unsigned if (option_n == d_vrai) { +# ifndef _BROKEN_SIGINFO action.sa_sigaction = interruption10; +# else + action.sa_handler = interruption10; +# endif action.sa_flags = SA_ONSTACK | SA_SIGINFO; if (sigaction(SIGHUP, &action, NULL) != 0) @@ -1871,6 +1942,8 @@ rplinit(int argc, char *argv[], unsigned } (*s_etat_processus).at_exit = NULL; + (*s_etat_processus).at_poke = NULL; + (*s_etat_processus).traitement_at_poke = 'N'; (*s_etat_processus).pointeurs_caracteres = NULL; (*s_etat_processus).arbre_instructions = NULL; @@ -2663,11 +2736,11 @@ rplinit(int argc, char *argv[], unsigned (*s_etat_processus).at_exit, 'E'); } } - - liberation(s_etat_processus, - (*s_etat_processus).at_exit); } + liberation(s_etat_processus, (*s_etat_processus).at_exit); + liberation(s_etat_processus, (*s_etat_processus).at_poke); + if ((*s_etat_processus).generateur_aleatoire != NULL) { liberation_generateur_aleatoire(s_etat_processus); @@ -3409,8 +3482,6 @@ rplinit(int argc, char *argv[], unsigned l_element_courant = l_element_suivant; } - free((*s_etat_processus).chemin_fichiers_temporaires); - l_element_courant = (*s_etat_processus).s_marques; while(l_element_courant != NULL) { @@ -3462,7 +3533,7 @@ rplinit(int argc, char *argv[], unsigned } } -# ifndef Cygwin +# if !defined(Cygwin) && !defined(OpenBSD) (*s_etat_processus).pile_signal.ss_flags = SS_DISABLE; sigaltstack(&((*s_etat_processus).pile_signal), NULL); free((*s_etat_processus).pile_signal.ss_sp); @@ -3505,6 +3576,12 @@ rplinit(int argc, char *argv[], unsigned sem_gestionnaires_signaux_atomique); # endif +# ifdef _BROKEN_SIGINFO + destruction_fifos_signaux(s_etat_processus); +# undef return +# endif + + free((*s_etat_processus).chemin_fichiers_temporaires); free(s_etat_processus); # ifdef DEBUG_MEMOIRE