android: Provide a fallback for sigwaitinfo()
authorTobias Brunner <tobias@strongswan.org>
Wed, 11 Nov 2015 15:54:47 +0000 (16:54 +0100)
committerTobias Brunner <tobias@strongswan.org>
Thu, 12 Nov 2015 13:11:21 +0000 (14:11 +0100)
src/libstrongswan/utils/compat/android.h

index 91b6b14..a9a1b13 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2010 Tobias Brunner
+ * Copyright (C) 2010-2015 Tobias Brunner
  * Hochschule fuer Technik Rapperswil
  *
  * This program is free software; you can redistribute it and/or modify it
@@ -21,6 +21,8 @@
 #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
  * 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_ @}*/