1#ifndef SELINUX_INTERNAL_H_ 2#define SELINUX_INTERNAL_H_ 3 4#include <selinux/selinux.h> 5#include <pthread.h> 6 7 8extern int require_seusers ; 9extern int selinux_page_size ; 10 11/* Make pthread_once optional */ 12#pragma weak pthread_once 13#pragma weak pthread_key_create 14#pragma weak pthread_key_delete 15#pragma weak pthread_setspecific 16#pragma weak pthread_getspecific 17 18/* Call handler iff the first call. */ 19#define __selinux_once(ONCE_CONTROL, INIT_FUNCTION) \ 20 do { \ 21 if (pthread_once != NULL) \ 22 pthread_once (&(ONCE_CONTROL), (INIT_FUNCTION)); \ 23 else if ((ONCE_CONTROL) == PTHREAD_ONCE_INIT) { \ 24 INIT_FUNCTION (); \ 25 (ONCE_CONTROL) = 2; \ 26 } \ 27 } while (0) 28 29/* Pthread key macros */ 30#define __selinux_key_create(KEY, DESTRUCTOR) \ 31 (pthread_key_create != NULL ? pthread_key_create(KEY, DESTRUCTOR) : -1) 32 33#define __selinux_key_delete(KEY) \ 34 do { \ 35 if (pthread_key_delete != NULL) \ 36 pthread_key_delete(KEY); \ 37 } while (0) 38 39#define __selinux_setspecific(KEY, VALUE) \ 40 do { \ 41 if (pthread_setspecific != NULL) \ 42 pthread_setspecific(KEY, VALUE); \ 43 } while (0) 44 45#define __selinux_getspecific(KEY) \ 46 (pthread_getspecific != NULL ? pthread_getspecific(KEY) : NULL) 47 48/* selabel_lookup() is only thread safe if we're compiled with pthreads */ 49 50#pragma weak pthread_mutex_init 51#pragma weak pthread_mutex_destroy 52#pragma weak pthread_mutex_lock 53#pragma weak pthread_mutex_unlock 54 55#define __pthread_mutex_init(LOCK, ATTR) \ 56 do { \ 57 if (pthread_mutex_init != NULL) \ 58 pthread_mutex_init(LOCK, ATTR); \ 59 } while (0) 60 61#define __pthread_mutex_destroy(LOCK) \ 62 do { \ 63 if (pthread_mutex_destroy != NULL) \ 64 pthread_mutex_destroy(LOCK); \ 65 } while (0) 66 67#define __pthread_mutex_lock(LOCK) \ 68 do { \ 69 if (pthread_mutex_lock != NULL) \ 70 pthread_mutex_lock(LOCK); \ 71 } while (0) 72 73#define __pthread_mutex_unlock(LOCK) \ 74 do { \ 75 if (pthread_mutex_unlock != NULL) \ 76 pthread_mutex_unlock(LOCK); \ 77 } while (0) 78 79#pragma weak pthread_create 80#pragma weak pthread_join 81#pragma weak pthread_cond_init 82#pragma weak pthread_cond_signal 83#pragma weak pthread_cond_destroy 84#pragma weak pthread_cond_wait 85 86/* check if all functions needed to do parallel operations are available */ 87#define __pthread_supported ( \ 88 pthread_create && \ 89 pthread_join && \ 90 pthread_cond_init && \ 91 pthread_cond_destroy && \ 92 pthread_cond_signal && \ 93 pthread_cond_wait \ 94) 95 96#define SELINUXDIR "/etc/selinux/" 97#define SELINUXCONFIG SELINUXDIR "config" 98 99extern int has_selinux_config ; 100 101#ifndef HAVE_STRLCPY 102size_t strlcpy(char *dest, const char *src, size_t size); 103#endif 104 105#endif /* SELINUX_INTERNAL_H_ */ 106