--- rpl/src/rpl.c 2011/09/14 17:56:00 1.84 +++ rpl/src/rpl.c 2011/09/20 07:16:40 1.89 @@ -23,12 +23,6 @@ #define MAIN_RPL #include "rpl-conv.h" -#ifdef IPCS_SYSV -#ifndef OS2 - unsigned char *chemin_semaphores_SysV; -#endif -#endif - /* ================================================================================ @@ -105,6 +99,7 @@ rplinit(int argc, char *argv[], unsigned volatile unsigned char traitement_fichier_temporaire; errno = 0; + s_queue_signaux = NULL; pid_processus_pere = getpid(); # ifdef DEBUG_MEMOIRE @@ -114,16 +109,10 @@ rplinit(int argc, char *argv[], unsigned setvbuf(stdout, NULL, _IOLBF, 0); setvbuf(stderr, NULL, _IOLBF, 0); - // mutex_liste_thread est dévérouillé par défaut. - // mutex_gestionnaires_signaux et mutex_gestionnaires_signaux_atomique - // sont verrouillés par défaut. - - pthread_mutex_lock(&mutex_gestionnaires_signaux_atomique); - # ifndef SEMAPHORES_NOMMES sem_init(&semaphore_gestionnaires_signaux, 0, 0); # else - semaphore_gestionnaires_signaux = sem_init2(0, sem_gestionnaires_signaux); + semaphore_gestionnaires_signaux = sem_init2(0, getpid()); if (semaphore_gestionnaires_signaux == SEM_FAILED) { @@ -230,13 +219,6 @@ rplinit(int argc, char *argv[], unsigned (*s_etat_processus).chemin_fichiers_temporaires = recherche_chemin_fichiers_temporaires(s_etat_processus); -# ifdef IPCS_SYSV -# ifndef OS2 - chemin_semaphores_SysV = - (*s_etat_processus).chemin_fichiers_temporaires; -# endif -# endif - insertion_thread(s_etat_processus, d_vrai); creation_queue_signaux(s_etat_processus); @@ -605,6 +587,15 @@ rplinit(int argc, char *argv[], unsigned option_t = d_faux; option_v = d_faux; + // Lorsque le programme est appelé depuis un shebang, argv[0] contient + // le chemin du programme et argv[1] tous les arguments. + // argv[2] contient quant à lui le nom du script RPL/2. + // + // Exemple : + // argv[0] : /usr/local/bin/rpl + // argv[1] : -csdp -t 800 + // argv[2] : ./on_exit.rpl + while((--argc) > 0) { if ((*(++argv))[0] == '-') @@ -1400,6 +1391,12 @@ rplinit(int argc, char *argv[], unsigned break; } + case '-': + case ' ': + { + break; + } + default : { if ((*s_etat_processus).langue == 'F') @@ -2629,8 +2626,6 @@ rplinit(int argc, char *argv[], unsigned lancement_daemon(s_etat_processus); } -// A FIXER -// création signaux if (option_p == d_faux) { if (setjmp(contexte_initial) == 0) @@ -2673,8 +2668,6 @@ rplinit(int argc, char *argv[], unsigned } } } -// A FIXER -// destruction signaux } liberation(s_etat_processus, (*s_etat_processus).at_exit); @@ -2955,6 +2948,7 @@ rplinit(int argc, char *argv[], unsigned } nanosleep(&attente, NULL); + scrutation_interruptions(s_etat_processus); pthread_mutex_lock(&((*s_etat_processus).mutex)); } @@ -3493,7 +3487,7 @@ rplinit(int argc, char *argv[], unsigned sem_destroy(&semaphore_gestionnaires_signaux); # else sem_post(semaphore_gestionnaires_signaux); - sem_destroy2(semaphore_gestionnaires_signaux, sem_gestionnaires_signaux); + sem_destroy2(semaphore_gestionnaires_signaux, getpid()); # endif destruction_queue_signaux(s_etat_processus);