--- rpl/src/rpl.h 2012/03/01 10:14:08 1.158 +++ rpl/src/rpl.h 2012/05/16 09:14:04 1.163 @@ -1,6 +1,6 @@ /* ================================================================================ - RPL/2 (R) version 4.1.7 + RPL/2 (R) version 4.1.8 Copyright (C) 1989-2012 Dr. BERTRAND Joël This file is part of RPL/2. @@ -215,6 +215,14 @@ # endif #endif +#ifdef MAIN_RPL +# define __EXTERN__ +# define __STATIC_MUTEX_INITIALIZATION__ = PTHREAD_MUTEX_INITIALIZER +#else +# define __EXTERN__ extern +# define __STATIC_MUTEX_INITIALIZATION__ +#endif + /* ================================================================================ Bugs spécifiques @@ -270,18 +278,11 @@ typedef struct queue_signaux } queue[LONGUEUR_QUEUE_SIGNAUX]; } struct_queue_signaux; -# ifndef MAIN_RPL - extern struct_queue_signaux *s_queue_signaux; - extern int f_queue_signaux; -# ifdef SEMAPHORES_NOMMES - extern sem_t *semaphore_queue_signaux; -# endif -# else - struct_queue_signaux *s_queue_signaux; - int f_queue_signaux; -# ifdef SEMAPHORES_NOMMES - sem_t *semaphore_queue_signaux; -# endif +__EXTERN__ struct_queue_signaux *s_queue_signaux; +__EXTERN__ int f_queue_signaux; + +# ifdef SEMAPHORES_NOMMES + __EXTERN__ sem_t *semaphore_queue_signaux; # endif #endif @@ -411,60 +412,34 @@ typedef unsigned char t_8_bits; # define LONGUEUR_NOM_SEMAPHORE 64 # endif -# ifndef MAIN_RPL - extern jmp_buf contexte_ecriture; - extern jmp_buf contexte_impression; - extern jmp_buf contexte_initial; - extern jmp_buf contexte_processus; - extern jmp_buf contexte_thread; - - extern int signal_test; - - extern pid_t pid_processus_pere; - -# ifdef SEMAPHORES_NOMMES - extern pthread_mutex_t mutex_sem; -# endif - - extern pthread_mutex_t mutex_liste_threads; - extern pthread_mutex_t mutex_gestionnaires_signaux_atomique; +# ifdef SEMAPHORES_NOMMES +# define __PTR__ * +# else +# define __PTR__ +# endif - extern sem_t -# ifdef SEMAPHORES_NOMMES - * -# endif - semaphore_gestionnaires_signaux; + __EXTERN__ jmp_buf contexte_ecriture; + __EXTERN__ jmp_buf contexte_impression; + __EXTERN__ jmp_buf contexte_initial; + __EXTERN__ jmp_buf contexte_processus; + __EXTERN__ jmp_buf contexte_thread; - extern volatile int routine_recursive; -# else - jmp_buf contexte_ecriture; - jmp_buf contexte_impression; - jmp_buf contexte_initial; - jmp_buf contexte_processus; - jmp_buf contexte_thread; + __EXTERN__ int signal_test; - int signal_test; + __EXTERN__ pid_t pid_processus_pere; - pid_t pid_processus_pere; +# ifdef SEMAPHORES_NOMMES + __EXTERN__ pthread_mutex_t mutex_sem __STATIC_MUTEX_INITIALIZATION__; +# endif -# ifdef SEMAPHORES_NOMMES - pthread_mutex_t mutex_sem = PTHREAD_MUTEX_INITIALIZER; -# endif + __EXTERN__ pthread_mutex_t mutex_liste_threads + __STATIC_MUTEX_INITIALIZATION__; + __EXTERN__ pthread_mutex_t mutex_gestionnaires_signaux_atomique + __STATIC_MUTEX_INITIALIZATION__; - pthread_mutex_t mutex_liste_threads = - PTHREAD_MUTEX_INITIALIZER; - pthread_mutex_t mutex_gestionnaires_signaux = - PTHREAD_MUTEX_INITIALIZER; - pthread_mutex_t mutex_gestionnaires_signaux_atomique = - PTHREAD_MUTEX_INITIALIZER; - sem_t -# ifdef SEMAPHORES_NOMMES - * -# endif - semaphore_gestionnaires_signaux; + __EXTERN__ sem_t __PTR__ semaphore_gestionnaires_signaux; - volatile int routine_recursive; -# endif + __EXTERN__ volatile int routine_recursive; #endif #ifdef SEMAPHORES_NOMMES @@ -522,9 +497,6 @@ sem_t *sem_open2(pid_t pid, int ordre); # define fclose(...) ({ int ios; \ while((ios = fclose(__VA_ARGS__)) != 0) \ { if ((errno != EINTR) && (errno != 0)) break; } ios; }) -# define fread(...) ({ int ios; \ - while((ios = fread(__VA_ARGS__)) < 0) \ - { if ((errno != EINTR) && (errno != 0)) break; } ios; }) # define fflush(flux) ({ int ios; \ while((ios = fflush((flux == stdout) ? stderr : flux)) != 0) \ { if ((errno != EINTR) && (errno != 0)) break; } ios; }) @@ -942,6 +914,7 @@ pid_t debug_fork(); # define d_ex_fichier_corrompu __erreur(85) # define d_ex_mutex_acquis_autre_thread __erreur(86) # define d_ex_expression_reguliere __erreur(87) +# define d_ex_instruction_indisponible __erreur(88) #endif @@ -1203,8 +1176,11 @@ typedef struct descripteur_fichier pid_t pid; pthread_t tid; - file *descripteur_c; - sqlite3 *descripteur_sqlite; + union + { + file *descripteur_c; + sqlite3 *descripteur_sqlite; + }; } struct_descripteur_fichier; #endif