Define new error handling macros
authorlucas <lucas@7cbeb6ba-43b4-40fd-8cce-4c39aea84d33>
Fri, 30 Apr 2010 14:54:05 +0000 (14:54 +0000)
committerlucas <lucas@7cbeb6ba-43b4-40fd-8cce-4c39aea84d33>
Fri, 30 Apr 2010 14:54:05 +0000 (14:54 +0000)
EINA_SAFETY_ON_TRUE_GOTO and EINA_SAFETY_ON_FALSE_GOTO are now defined
to ease error handling. Functions might need to take actions before
returning upon safety checks fail.

git-svn-id: svn+ssh://svn.enlightenment.org/var/svn/e/trunk/eina@48478 7cbeb6ba-43b4-40fd-8cce-4c39aea84d33

src/include/eina_safety_checks.h

index 7f4c525..1c0b4dd 100644 (file)
@@ -126,6 +126,18 @@ EAPI extern Eina_Error EINA_ERROR_SAFETY_FAILED;
     }                                                                  \
   while (0)
 
+#define EINA_SAFETY_ON_TRUE_GOTO(exp, label)                           \
+  do                                                                   \
+    {                                                                  \
+       if (EINA_UNLIKELY(exp))                                         \
+        {                                                              \
+           eina_error_set(EINA_ERROR_SAFETY_FAILED);                   \
+           EINA_LOG_ERR("%s", "safety check failed: " #exp " is true"); \
+           goto label;                                                 \
+        }                                                              \
+    }                                                                  \
+  while (0)
+
 #define EINA_SAFETY_ON_FALSE_RETURN(exp)                               \
   do                                                                   \
     {                                                                  \
@@ -150,6 +162,18 @@ EAPI extern Eina_Error EINA_ERROR_SAFETY_FAILED;
     }                                                                  \
   while (0)
 
+#define EINA_SAFETY_ON_FALSE_GOTO(exp, label)                          \
+  do                                                                   \
+    {                                                                  \
+       if (EINA_UNLIKELY(!(exp)))                                      \
+        {                                                              \
+           eina_error_set(EINA_ERROR_SAFETY_FAILED);                   \
+           EINA_LOG_ERR("%s", "safety check failed: " #exp " is false"); \
+           goto label;                                                 \
+        }                                                              \
+    }                                                                  \
+  while (0)
+
 #ifdef EINA_ARG_NONNULL
 /* make EINA_ARG_NONNULL void so GCC does not optimize safety checks */
 #undef EINA_ARG_NONNULL