--- rpl/src/rpl.h 2010/08/18 12:56:55 1.59 +++ rpl/src/rpl.h 2010/08/22 16:38:36 1.60 @@ -101,6 +101,9 @@ # ifndef SEMAPHORES_SYSV # include # else +# include +# include + # ifdef OS2 # define INCL_DOSSEMAPHORES # define INCL_DOSMEMMGR @@ -117,8 +120,6 @@ ULONG allocated; } sem_t; # else -# include -# include typedef struct { int sem; @@ -197,6 +198,12 @@ # define UNIX_PATH_MAX sizeof(sizecheck.sun_path) #endif +/* +================================================================================ + Bugs spécifiques +================================================================================ +*/ + #ifdef _BROKEN_SIGINFO # define SIGHANDLER_ARGS int signal # ifdef SA_SIGINFO @@ -204,26 +211,31 @@ # endif # define SA_SIGINFO 0 -# define kill(pid, signal) rpl_kill(pid, signal) -# define pthread_kill(tid, signal) rpl_pthread_kill(tid, signal) - int rpl_kill(pid_t pid, int signal); - int rpl_pthread_kill(pthread_t tid, int signal); +# define kill(pid, signal) kill_broken_siginfo(pid, signal) +# define pthread_kill(tid, signal) pthread_kill_broken_siginfo(tid, signal) + int kill_broken_siginfo(pid_t pid, int signal); + int pthread_kill_broken_siginfo(pthread_t tid, int signal); #else # define SIGHANDLER_ARGS int signal, siginfo_t *siginfo, void *context #endif -#define ftok(path, proj) \ - ({ \ - key_t key; \ - struct stat s; \ - while(stat(path, &s) != 0); \ - errno = 0; \ - key = ftok(path, proj); \ - if (key != -1) \ - key |= ((((key_t) s.st_dev) & 0xFF) << 8) | \ - ((((key_t) s.st_ino) & 0xFFFF) << 16); \ - key; \ - }) +#ifdef OpenBSD +# ifdef PTHREAD_SCOPE_SYSTEM +# undef PTHREAD_SCOPE_SYSTEM +# endif +# define PTHREAD_SCOPE_SYSTEM 0 +#endif + +#if ! defined(UNION_SEMUN) && defined(SEMAPHORES_SYSV) +union semun +{ + int val; + struct semid_ds *buf; + unsigned short *array; + struct seminfo *__buf; +}; +#endif + /* ================================================================================ @@ -725,8 +737,9 @@ pid_t debug_fork(); # define __erreur_(i) i # endif # define __erreur(i) ({ if (strstr(__FUNCTION__, "recherche_variable") \ - == NULL) ufprintf(stderr, "ERROR %d AT %s() LINE %d\n", \ - i, __FUNCTION__, __LINE__); i; }) + == NULL) ufprintf(stderr, \ + "ERROR %d AT %s() FROM %s LINE %d\n", \ + i, __FUNCTION__, __FILE__, __LINE__); i; }) # endif #else # define __erreur(i) i @@ -751,6 +764,7 @@ pid_t debug_fork(); # define d_es_interruption_invalide __erreur(2012) # define d_es_contexte __erreur(2013) # define d_es_somme_controle __erreur(2014) +# define d_es_semaphore __erreur(2015) #endif /*