version 1.75, 2011/07/25 07:45:00
|
version 1.82, 2011/09/10 20:45:06
|
Line 1
|
Line 1
|
/* |
/* |
================================================================================ |
================================================================================ |
RPL/2 (R) version 4.1.2 |
RPL/2 (R) version 4.1.3 |
Copyright (C) 1989-2011 Dr. BERTRAND Joël |
Copyright (C) 1989-2011 Dr. BERTRAND Joël |
|
|
This file is part of RPL/2. |
This file is part of RPL/2. |
Line 105 rplinit(int argc, char *argv[], unsigned
|
Line 105 rplinit(int argc, char *argv[], unsigned
|
volatile unsigned char traitement_fichier_temporaire; |
volatile unsigned char traitement_fichier_temporaire; |
|
|
errno = 0; |
errno = 0; |
|
pid_processus_pere = getpid(); |
|
|
# ifdef DEBUG_MEMOIRE |
# ifdef DEBUG_MEMOIRE |
debug_memoire_initialisation(); |
debug_memoire_initialisation(); |
Line 182 rplinit(int argc, char *argv[], unsigned
|
Line 183 rplinit(int argc, char *argv[], unsigned
|
(*s_etat_processus).langue = 'E'; |
(*s_etat_processus).langue = 'E'; |
} |
} |
|
|
|
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).compteur_violation_d_acces = 0; |
|
|
(*s_etat_processus).rpl_home = rpl_home; |
(*s_etat_processus).rpl_home = rpl_home; |
|
|
Line 437 rplinit(int argc, char *argv[], unsigned
|
Line 441 rplinit(int argc, char *argv[], unsigned
|
return(EXIT_FAILURE); |
return(EXIT_FAILURE); |
} |
} |
|
|
|
signal_test = SIGTEST; |
|
kill(getpid(), SIGINT); |
|
|
|
if (signal_test != SIGINT) |
|
{ |
|
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); |
|
} |
|
|
if (sigaction(SIGTERM, &action, NULL) != 0) |
if (sigaction(SIGTERM, &action, NULL) != 0) |
{ |
{ |
erreur = d_es_signal; |
erreur = d_es_signal; |
Line 454 rplinit(int argc, char *argv[], unsigned
|
Line 478 rplinit(int argc, char *argv[], unsigned
|
return(EXIT_FAILURE); |
return(EXIT_FAILURE); |
} |
} |
|
|
|
signal_test = SIGTEST; |
|
kill(getpid(), SIGTERM); |
|
|
|
if (signal_test != SIGTERM) |
|
{ |
|
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); |
|
} |
|
|
# ifndef _BROKEN_SIGINFO |
# ifndef _BROKEN_SIGINFO |
action.sa_sigaction = interruption2; |
action.sa_sigaction = interruption2; |
# else |
# else |
Line 476 rplinit(int argc, char *argv[], unsigned
|
Line 520 rplinit(int argc, char *argv[], unsigned
|
return(EXIT_FAILURE); |
return(EXIT_FAILURE); |
} |
} |
|
|
|
signal_test = SIGTEST; |
|
kill(getpid(), SIGTSTP); |
|
|
|
if (signal_test != SIGTSTP) |
|
{ |
|
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); |
|
} |
|
|
# ifndef _BROKEN_SIGINFO |
# ifndef _BROKEN_SIGINFO |
action.sa_sigaction = interruption4; |
action.sa_sigaction = interruption4; |
# else |
# else |
Line 499 rplinit(int argc, char *argv[], unsigned
|
Line 563 rplinit(int argc, char *argv[], unsigned
|
return(EXIT_FAILURE); |
return(EXIT_FAILURE); |
} |
} |
|
|
|
signal_test = SIGTEST; |
|
kill(getpid(), SIGSTART); |
|
|
|
if (signal_test != SIGSTART) |
|
{ |
|
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); |
|
} |
|
|
if (sigaction(SIGCONT, &action, NULL) != 0) |
if (sigaction(SIGCONT, &action, NULL) != 0) |
{ |
{ |
if ((*s_etat_processus).langue == 'F') |
if ((*s_etat_processus).langue == 'F') |
Line 514 rplinit(int argc, char *argv[], unsigned
|
Line 598 rplinit(int argc, char *argv[], unsigned
|
return(EXIT_FAILURE); |
return(EXIT_FAILURE); |
} |
} |
|
|
|
signal_test = SIGTEST; |
|
kill(getpid(), SIGCONT); |
|
|
|
if (signal_test != SIGCONT) |
|
{ |
|
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); |
|
} |
|
|
# ifndef _BROKEN_SIGINFO |
# ifndef _BROKEN_SIGINFO |
action.sa_sigaction = interruption5; |
action.sa_sigaction = interruption5; |
# else |
# else |
Line 538 rplinit(int argc, char *argv[], unsigned
|
Line 642 rplinit(int argc, char *argv[], unsigned
|
return(EXIT_FAILURE); |
return(EXIT_FAILURE); |
} |
} |
|
|
|
signal_test = SIGTEST; |
|
kill(getpid(), SIGFSTOP); |
|
|
|
if (signal_test != SIGFSTOP) |
|
{ |
|
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); |
|
} |
|
|
# ifndef _BROKEN_SIGINFO |
# ifndef _BROKEN_SIGINFO |
action.sa_sigaction = interruption11; |
action.sa_sigaction = interruption11; |
# else |
# else |
Line 562 rplinit(int argc, char *argv[], unsigned
|
Line 686 rplinit(int argc, char *argv[], unsigned
|
return(EXIT_FAILURE); |
return(EXIT_FAILURE); |
} |
} |
|
|
|
signal_test = SIGTEST; |
|
kill(getpid(), SIGFABORT); |
|
|
|
if (signal_test != SIGFABORT) |
|
{ |
|
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); |
|
} |
|
|
# ifndef _BROKEN_SIGINFO |
# ifndef _BROKEN_SIGINFO |
action.sa_sigaction = interruption8; |
action.sa_sigaction = interruption8; |
# else |
# else |
Line 586 rplinit(int argc, char *argv[], unsigned
|
Line 730 rplinit(int argc, char *argv[], unsigned
|
return(EXIT_FAILURE); |
return(EXIT_FAILURE); |
} |
} |
|
|
|
signal_test = SIGTEST; |
|
kill(getpid(), SIGURG); |
|
|
|
if (signal_test != SIGURG) |
|
{ |
|
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); |
|
} |
|
|
# ifndef _BROKEN_SIGINFO |
# ifndef _BROKEN_SIGINFO |
action.sa_sigaction = interruption7; |
action.sa_sigaction = interruption7; |
# else |
# else |
Line 610 rplinit(int argc, char *argv[], unsigned
|
Line 774 rplinit(int argc, char *argv[], unsigned
|
return(EXIT_FAILURE); |
return(EXIT_FAILURE); |
} |
} |
|
|
|
signal_test = SIGTEST; |
|
kill(getpid(), SIGPIPE); |
|
|
|
if (signal_test != SIGPIPE) |
|
{ |
|
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); |
|
} |
|
|
# ifndef _BROKEN_SIGINFO |
# ifndef _BROKEN_SIGINFO |
action.sa_sigaction = interruption6; |
action.sa_sigaction = interruption6; |
# else |
# else |
Line 634 rplinit(int argc, char *argv[], unsigned
|
Line 818 rplinit(int argc, char *argv[], unsigned
|
return(EXIT_FAILURE); |
return(EXIT_FAILURE); |
} |
} |
|
|
|
signal_test = SIGTEST; |
|
kill(getpid(), SIGINJECT); |
|
|
|
if (signal_test != SIGINJECT) |
|
{ |
|
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); |
|
} |
|
|
# ifndef _BROKEN_SIGINFO |
# ifndef _BROKEN_SIGINFO |
action.sa_sigaction = interruption9; |
action.sa_sigaction = interruption9; |
# else |
# else |
Line 658 rplinit(int argc, char *argv[], unsigned
|
Line 862 rplinit(int argc, char *argv[], unsigned
|
return(EXIT_FAILURE); |
return(EXIT_FAILURE); |
} |
} |
|
|
|
signal_test = SIGTEST; |
|
kill(getpid(), SIGABORT); |
|
|
|
if (signal_test != SIGABORT) |
|
{ |
|
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); |
|
} |
|
|
# ifndef _BROKEN_SIGINFO |
# ifndef _BROKEN_SIGINFO |
action.sa_sigaction = interruption1; |
action.sa_sigaction = interruption1; |
# else |
# else |
Line 682 rplinit(int argc, char *argv[], unsigned
|
Line 906 rplinit(int argc, char *argv[], unsigned
|
return(EXIT_FAILURE); |
return(EXIT_FAILURE); |
} |
} |
|
|
# ifndef _BROKEN_SIGINFO |
signal_test = SIGTEST; |
action.sa_sigaction = interruption3; |
kill(getpid(), SIGALRM); |
# else |
|
action.sa_handler = interruption3; |
if (signal_test != SIGALRM) |
# endif |
{ |
action.sa_flags = SA_NODEFER | SA_ONSTACK | SA_SIGINFO; |
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 + 1; |
|
|
erreur = d_absence_erreur; |
erreur = d_absence_erreur; |
core = d_faux; |
core = d_faux; |
Line 1576 rplinit(int argc, char *argv[], unsigned
|
Line 1815 rplinit(int argc, char *argv[], unsigned
|
|
|
if (debug == d_faux) |
if (debug == d_faux) |
{ |
{ |
|
# ifndef _BROKEN_SIGINFO |
|
action.sa_sigaction = interruption3; |
|
# else |
|
action.sa_handler = interruption3; |
|
# endif |
|
action.sa_flags = SA_NODEFER | SA_ONSTACK | SA_SIGINFO; |
|
|
if (sigaction(SIGSEGV, &action, NULL) != 0) |
if (sigaction(SIGSEGV, &action, NULL) != 0) |
{ |
{ |
if ((*s_etat_processus).langue == 'F') |
if ((*s_etat_processus).langue == 'F') |
Line 2010 rplinit(int argc, char *argv[], unsigned
|
Line 2256 rplinit(int argc, char *argv[], unsigned
|
(*s_etat_processus).var_volatile_recursivite = 0; |
(*s_etat_processus).var_volatile_recursivite = 0; |
(*s_etat_processus).var_volatile_exception_gsl = 0; |
(*s_etat_processus).var_volatile_exception_gsl = 0; |
(*s_etat_processus).arret_depuis_abort = 0; |
(*s_etat_processus).arret_depuis_abort = 0; |
|
(*s_etat_processus).signal_a_traiter = d_faux; |
|
|
initialisation_allocateur(s_etat_processus); |
initialisation_allocateur(s_etat_processus); |
initialisation_drapeaux(s_etat_processus); |
initialisation_drapeaux(s_etat_processus); |
Line 2763 rplinit(int argc, char *argv[], unsigned
|
Line 3010 rplinit(int argc, char *argv[], unsigned
|
if (setjmp(contexte_initial) == 0) |
if (setjmp(contexte_initial) == 0) |
{ |
{ |
erreur = sequenceur(s_etat_processus); |
erreur = sequenceur(s_etat_processus); |
|
|
|
if (erreur == d_absence_erreur) |
|
{ |
|
if (((*s_etat_processus).var_volatile_alarme |
|
== 0) && ((*s_etat_processus) |
|
.arret_depuis_abort == 0) && |
|
((*s_etat_processus).at_exit |
|
!= NULL)) |
|
{ |
|
erreur = evaluation(s_etat_processus, |
|
(*s_etat_processus).at_exit, |
|
'E'); |
|
} |
|
} |
} |
} |
} |
} |
else |
else |
Line 2770 rplinit(int argc, char *argv[], unsigned
|
Line 3031 rplinit(int argc, char *argv[], unsigned
|
if (setjmp(contexte_initial) == 0) |
if (setjmp(contexte_initial) == 0) |
{ |
{ |
erreur = sequenceur_optimise(s_etat_processus); |
erreur = sequenceur_optimise(s_etat_processus); |
} |
|
} |
|
|
|
if (erreur == d_absence_erreur) |
if (erreur == d_absence_erreur) |
{ |
{ |
if (((*s_etat_processus).var_volatile_alarme == 0) |
if (((*s_etat_processus).var_volatile_alarme |
&& ((*s_etat_processus).arret_depuis_abort |
== 0) && ((*s_etat_processus) |
== 0) && ((*s_etat_processus).at_exit |
.arret_depuis_abort == 0) && |
!= NULL)) |
((*s_etat_processus).at_exit |
{ |
!= NULL)) |
erreur = evaluation(s_etat_processus, |
{ |
(*s_etat_processus).at_exit, 'E'); |
erreur = evaluation(s_etat_processus, |
|
(*s_etat_processus).at_exit, |
|
'E'); |
|
} |
|
} |
} |
} |
} |
} |
} |
} |
Line 3616 rplinit(int argc, char *argv[], unsigned
|
Line 3879 rplinit(int argc, char *argv[], unsigned
|
# undef return |
# undef return |
# endif |
# endif |
|
|
|
liberation_contexte_cas(s_etat_processus); |
|
|
free((*s_etat_processus).chemin_fichiers_temporaires); |
free((*s_etat_processus).chemin_fichiers_temporaires); |
free(s_etat_processus); |
free(s_etat_processus); |
|
|