/* * Copyright (C) 2010 Red Hat, Inc. * * Author: Angus Salkeld * * This file is part of libqb. * * libqb is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 2.1 of the License, or * (at your option) any later version. * * libqb is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with libqb. If not, see . */ #ifndef QB_OS_BASE_H_DEFINED #define QB_OS_BASE_H_DEFINED #ifdef HAVE_CONFIG_H #include #endif /* HAVE_CONFIG_H */ #include #include #include #ifdef HAVE_SYS_TYPES_H #include #endif /* HAVE_SYS_TYPES_H */ #ifdef HAVE_SYS_UIO_H #include #endif /* HAVE_SYS_UIO_H */ #ifdef HAVE_STDINT_H #include #endif /* HAVE_STDINT_H */ #ifdef HAVE_STDDEF_H #include #endif /* HAVE_STDDEF_H */ #ifdef HAVE_INTTYPES_H #include #endif #include #ifdef HAVE_STDLIB_H #include #endif /* HAVE_STDLIB_H */ #ifdef HAVE_STRING_H #include #endif /* HAVE_STRING_H */ #ifdef HAVE_STRINGS_H #include #endif /* HAVE_STRINGS_H */ #ifndef S_SPLINT_S #ifdef HAVE_UNISTD_H #include #endif /* HAVE_UNISTD_H */ #endif /* S_SPLINT_S */ #ifdef HAVE_ERRNO_H #include #endif /*HAVE_ERRNO_H*/ #ifdef HAVE_TIME_H #include #endif /* HAVE_TIME_H */ #ifdef HAVE_SYS_TIME_H #include #endif /* HAVE_SYS_TIME_H */ #ifdef HAVE_SYS_STAT_H #include #endif /* HAVE_SYS_STAT_H */ #ifdef HAVE_FCNTL_H #include #endif /* HAVE_FCNTL_H */ #ifdef HAVE_SYS_SOCKET_H #include #endif /* HAVE_SYS_SOCKET_H */ #ifndef S_SPLINT_S #ifdef HAVE_SYSLOG_H #include #endif /* HAVE_SYSLOG_H */ #endif /* S_SPLINT_S */ #if defined HAVE_CLOCK_GETTIME && defined _POSIX_MONOTONIC_CLOCK && _POSIX_MONOTONIC_CLOCK >= 0 #define HAVE_MONOTONIC_CLOCK 1 #endif /* have monotonic clock */ #ifdef HAVE_EPOLL_CREATE1 #define HAVE_EPOLL 1 #endif /* HAVE_EPOLL_CREATE */ #if defined(__UCLIBC__) #define DISABLE_POSIX_THREAD_PROCESS_SHARED 1 #endif /* The pshared semaphore madness: * To have a usable pshared semaphore we need the timed_wait api * and pshared functionality. * * The order of choice is: * 1) real posix sem -> HAVE_POSIX_PSHARED_SEMAPHORE * 2) sysv sems (if we have semtimedop) -> HAVE_SYSV_PSHARED_SEMAPHORE * 3) faked sems using pthread_cond_timedwait -> HAVE_RPL_PSHARED_SEMAPHORE * 4) ENOTSUP */ #undef HAVE_POSIX_PSHARED_SEMAPHORE #undef HAVE_SYSV_PSHARED_SEMAPHORE #undef HAVE_RPL_PSHARED_SEMAPHORE #if defined(DISABLE_POSIX_THREAD_PROCESS_SHARED) #undef HAVE_PTHREAD_SHARED_SPIN_LOCK #endif /* DISABLE_POSIX_THREAD_PROCESS_SHARED */ #if !defined(DISABLE_POSIX_THREAD_PROCESS_SHARED) && \ _POSIX_THREAD_PROCESS_SHARED > 0 #if defined(HAVE_PTHREAD_SPIN_LOCK) #define HAVE_PTHREAD_SHARED_SPIN_LOCK 1 #endif /* HAVE_PTHREAD_SPIN_LOCK */ #if defined(HAVE_SEM_TIMEDWAIT) #define HAVE_POSIX_PSHARED_SEMAPHORE 1 #else #if defined(HAVE_PTHREAD_CONDATTR_SETPSHARED) && \ defined(HAVE_PTHREAD_MUTEXATTR_SETPSHARED) #define HAVE_RPL_PSHARED_SEMAPHORE 1 #endif #endif /* HAVE_SEM_TIMEDWAIT */ #endif /* posix pshared */ #ifdef HAVE_SEMTIMEDOP #define HAVE_SYSV_PSHARED_SEMAPHORE 1 #endif /* HAVE_SEM_TIMEDWAIT */ #if !defined(HAVE_SYSV_PSHARED_SEMAPHORE) && \ !defined(HAVE_POSIX_PSHARED_SEMAPHORE) && \ !defined(HAVE_RPL_PSHARED_SEMAPHORE) #define DISABLE_IPC_SHM 1 #endif /* HAVE PSHARED SEMAPHORE */ #ifndef HAVE_STRCHRNUL char *strchrnul (const char *s, int c_in); #endif #ifndef HAVE_STRLCPY size_t strlcpy(char *dest, const char *src, size_t maxlen); #endif #ifndef HAVE_STRLCAT size_t strlcat(char *dest, const char *src, size_t maxlen); #endif #ifndef PATH_MAX #define PATH_MAX 4096 #endif #ifndef NAME_MAX #define NAME_MAX 255 #endif #ifndef MSG_NOSIGNAL #define MSG_NOSIGNAL 0 #endif #endif /* QB_OS_BASE_H_DEFINED */