aboutsummaryrefslogtreecommitdiffstats
path: root/src/libstrongswan/utils
diff options
context:
space:
mode:
authorTobias Brunner <tobias@strongswan.org>2015-11-13 15:46:27 +0100
committerTobias Brunner <tobias@strongswan.org>2015-11-13 18:24:45 +0100
commitef4279f2e5aa9881855ed608cb81062c3676f077 (patch)
treea26bdefc5ff700204dd7b800a849ef9c02d5716e /src/libstrongswan/utils
parent1c1f71343178b35b68265b33093389625a7b2ed6 (diff)
downloadstrongswan-ef4279f2e5aa9881855ed608cb81062c3676f077.tar.bz2
strongswan-ef4279f2e5aa9881855ed608cb81062c3676f077.tar.xz
utils: Provide a fallback for sigwaitinfo() if needed
Apparently, not available on Mac OS X 10.10 Yosemite. We don't provide this on Windows.
Diffstat (limited to 'src/libstrongswan/utils')
-rw-r--r--src/libstrongswan/utils/compat/android.h28
-rw-r--r--src/libstrongswan/utils/utils.c22
-rw-r--r--src/libstrongswan/utils/utils.h16
3 files changed, 36 insertions, 30 deletions
diff --git a/src/libstrongswan/utils/compat/android.h b/src/libstrongswan/utils/compat/android.h
index a9a1b13a5..b3ea9c475 100644
--- a/src/libstrongswan/utils/compat/android.h
+++ b/src/libstrongswan/utils/compat/android.h
@@ -21,8 +21,6 @@
#ifndef ANDROID_H_
#define ANDROID_H_
-#include <android/api-level.h>
-
/* stuff defined in AndroidConfig.h, which is included using the -include
* command-line option, thus cannot be undefined using -U CFLAGS options.
* the reason we have to undefine these flags in the first place, is that
@@ -30,30 +28,4 @@
* actually defined. */
#undef HAVE_BACKTRACE
-/* sigwaitinfo() is not defined up to this API level, provide a fallback */
-#if __ANDROID_API__ <= 21
-#include <errno.h>
-#include <signal.h>
-
-static inline int sigwaitinfo(const sigset_t *set, void *info)
-{
- int sig, err;
-
- if (info)
- { /* we don't replicate siginfo_t, which we don't use */
- errno = EINVAL;
- return -1;
- }
- err = sigwait(set, &sig);
- if (err != 0)
- {
- errno = err;
- sig = -1;
- }
- return sig;
-}
-#else
-#error Check availability of sigwaitinfo() in this API level
-#endif
-
#endif /** ANDROID_H_ @}*/
diff --git a/src/libstrongswan/utils/utils.c b/src/libstrongswan/utils/utils.c
index fca614ef4..47d72ee98 100644
--- a/src/libstrongswan/utils/utils.c
+++ b/src/libstrongswan/utils/utils.c
@@ -20,6 +20,7 @@
#include <unistd.h>
#include <limits.h>
#include <ctype.h>
+#include <errno.h>
#ifndef WIN32
# include <signal.h>
#endif
@@ -126,7 +127,26 @@ void wait_sigint()
sigwaitinfo(&set, NULL);
}
-#endif
+#ifndef HAVE_SIGWAITINFO
+int sigwaitinfo(const sigset_t *set, void *info)
+{
+ int sig, err;
+
+ if (info)
+ { /* we don't replicate siginfo_t, fail if anybody tries to use it */
+ errno = EINVAL;
+ return -1;
+ }
+ err = sigwait(set, &sig);
+ if (err != 0)
+ {
+ errno = err;
+ sig = -1;
+ }
+ return sig;
+}
+#endif /* HAVE_SIGWAITINFO */
+#endif /* WIN32 */
#ifndef HAVE_CLOSEFROM
/**
diff --git a/src/libstrongswan/utils/utils.h b/src/libstrongswan/utils/utils.h
index 44d882bab..18b17b120 100644
--- a/src/libstrongswan/utils/utils.h
+++ b/src/libstrongswan/utils/utils.h
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2014 Tobias Brunner
+ * Copyright (C) 2008-2015 Tobias Brunner
* Copyright (C) 2008 Martin Willi
* Hochschule fuer Technik Rapperswil
*
@@ -38,6 +38,7 @@
# include <netinet/in.h>
# include <sched.h>
# include <poll.h>
+# include <signal.h>
#endif
#include "utils/types.h"
@@ -151,6 +152,19 @@ void utils_deinit();
*/
#define ignore_result(call) { if(call){}; }
+#if !defined(HAVE_SIGWAITINFO) && !defined(WIN32)
+/**
+ * Block and wait for a set of signals
+ *
+ * We don't replicate the functionality of siginfo_t. If info is not NULL
+ * -1 is returend and errno is set to EINVAL.
+ *
+ * @param set set of signals to wait for
+ * @param info must be NULL
+ */
+int sigwaitinfo(const sigset_t *set, void *info);
+#endif
+
/**
* Portable function to wait for SIGINT/SIGTERM (or equivalent).
*/