| #ifndef SELINUX_INTERNAL_H_ |
| #define SELINUX_INTERNAL_H_ |
| |
| #include <selinux/selinux.h> |
| #include <pthread.h> |
| |
| |
| extern int require_seusers ; |
| extern int selinux_page_size ; |
| |
| /* Make pthread_once optional */ |
| #pragma weak pthread_once |
| #pragma weak pthread_key_create |
| #pragma weak pthread_key_delete |
| #pragma weak pthread_setspecific |
| #pragma weak pthread_getspecific |
| |
| /* Call handler iff the first call. */ |
| #define __selinux_once(ONCE_CONTROL, INIT_FUNCTION) \ |
| do { \ |
| if (pthread_once != NULL) \ |
| pthread_once (&(ONCE_CONTROL), (INIT_FUNCTION)); \ |
| else if ((ONCE_CONTROL) == PTHREAD_ONCE_INIT) { \ |
| INIT_FUNCTION (); \ |
| (ONCE_CONTROL) = 2; \ |
| } \ |
| } while (0) |
| |
| /* Pthread key macros */ |
| #define __selinux_key_create(KEY, DESTRUCTOR) \ |
| (pthread_key_create != NULL ? pthread_key_create(KEY, DESTRUCTOR) : -1) |
| |
| #define __selinux_key_delete(KEY) \ |
| do { \ |
| if (pthread_key_delete != NULL) \ |
| pthread_key_delete(KEY); \ |
| } while (0) |
| |
| #define __selinux_setspecific(KEY, VALUE) \ |
| do { \ |
| if (pthread_setspecific != NULL) \ |
| pthread_setspecific(KEY, VALUE); \ |
| } while (0) |
| |
| #define __selinux_getspecific(KEY) \ |
| (pthread_getspecific != NULL ? pthread_getspecific(KEY) : NULL) |
| |
| /* selabel_lookup() is only thread safe if we're compiled with pthreads */ |
| |
| #pragma weak pthread_mutex_init |
| #pragma weak pthread_mutex_destroy |
| #pragma weak pthread_mutex_lock |
| #pragma weak pthread_mutex_unlock |
| |
| #define __pthread_mutex_init(LOCK, ATTR) \ |
| do { \ |
| if (pthread_mutex_init != NULL) \ |
| pthread_mutex_init(LOCK, ATTR); \ |
| } while (0) |
| |
| #define __pthread_mutex_destroy(LOCK) \ |
| do { \ |
| if (pthread_mutex_destroy != NULL) \ |
| pthread_mutex_destroy(LOCK); \ |
| } while (0) |
| |
| #define __pthread_mutex_lock(LOCK) \ |
| do { \ |
| if (pthread_mutex_lock != NULL) \ |
| pthread_mutex_lock(LOCK); \ |
| } while (0) |
| |
| #define __pthread_mutex_unlock(LOCK) \ |
| do { \ |
| if (pthread_mutex_unlock != NULL) \ |
| pthread_mutex_unlock(LOCK); \ |
| } while (0) |
| |
| #pragma weak pthread_create |
| #pragma weak pthread_join |
| #pragma weak pthread_cond_init |
| #pragma weak pthread_cond_signal |
| #pragma weak pthread_cond_destroy |
| #pragma weak pthread_cond_wait |
| |
| /* check if all functions needed to do parallel operations are available */ |
| #define __pthread_supported ( \ |
| pthread_create && \ |
| pthread_join && \ |
| pthread_cond_init && \ |
| pthread_cond_destroy && \ |
| pthread_cond_signal && \ |
| pthread_cond_wait \ |
| ) |
| |
| #define SELINUXDIR "/etc/selinux/" |
| #define SELINUXCONFIG SELINUXDIR "config" |
| |
| extern int has_selinux_config ; |
| |
| #ifndef HAVE_STRLCPY |
| size_t strlcpy(char *dest, const char *src, size_t size); |
| #endif |
| |
| #endif /* SELINUX_INTERNAL_H_ */ |