]> git.saurik.com Git - cycript.git/commitdiff
Allow errno exceptions to _syscall()'s _assert().
authorJay Freeman (saurik) <saurik@saurik.com>
Sun, 26 Jan 2014 21:54:07 +0000 (13:54 -0800)
committerJay Freeman (saurik) <saurik@saurik.com>
Sun, 26 Jan 2014 22:00:44 +0000 (14:00 -0800)
Exception.hpp

index da3546839098b101762448d84275a35fff5caa9d..73287ddd17b9797676df52a681057ebfbc448dd8 100644 (file)
@@ -74,16 +74,28 @@ while (false)
     fprintf(stderr, "_trace():%u\n", __LINE__); \
 } while (false)
 
-#define _syscall(expr) ({ \
+static _finline bool CYContains(int value, size_t many, int *okay) {
+    for (size_t i(0); i != many; ++i)
+        if (value == okay[i])
+            return true;
+    return false;
+}
+
+#define _syscall_(expr, many, okay) ({ \
     __typeof__(expr) _value; \
     do if ((long) (_value = (expr)) != -1) \
         break; \
+    else if (CYContains(errno, many, ((int [many]) okay))) \
+        break; \
     else \
         _assert_("syscall", errno == EINTR, #expr, " [errno=%d]", errno); \
     while (true); \
     _value; \
 })
 
+#define _syscall(expr) \
+    _syscall_(expr, 0, {})
+
 #define _aprcall(expr) \
     do { \
         apr_status_t _aprstatus((expr)); \