android: Provide a fallback for sigwaitinfo()
[strongswan.git] / 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_ @}*/