blob: d1e6c50ffb9be4830442f7fce9e4839ac99143d4 [file] [log] [blame]
#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_ */