+static const char *
+_pui_magic_string_get(PUI_Magic m)
+{
+ switch (m)
+ {
+ case PUI_MAGIC_NONE:
+ return "None (Freed Object)";
+ break;
+
+ case PUI_MAGIC_PUI_M:
+ return "PUI MODULE (PUI_M)";
+ break;
+
+ case PUI_MAGIC_PUI_H:
+ return "PUI HANDLE (PUI_H)";
+ break;
+
+ case PUI_MAGIC_ANI_H:
+ return "PUI ANI HANDLE (ANI_H)";
+ break;
+
+ case PUI_MAGIC_ANI_T:
+ return "PUI ANI RUNTIME HANDLE (ANI_T)";
+ break;
+
+ default:
+ return "<Unknown>";
+ }
+}
+
+PUI_API void
+_pui_magic_fail(const void *p, PUI_Magic m, PUI_Magic req_m, const char *fname)
+{
+ pui_err(" ### PUI ERROR : PUI Magic Check Failed !!! in %s().\n", fname);
+
+ if (!p)
+ pui_err(" Given handle/pointer is NULL !\n");
+ else if (m == PUI_MAGIC_NONE)
+ pui_err(" Given handle/pointer has been freed !\n");
+ else if (m != req_m)
+ pui_err(" Given handle/pointer is wrong type\n"
+ " Expected: %08x - %s\n"
+ " Supplied: %08x - %s",
+ (unsigned int)req_m, _pui_magic_string_get(req_m),
+ (unsigned int)m, _pui_magic_string_get(m));
+
+ //if (getenv("ECORE_ERROR_ABORT"))
+ {
+ pui_err("### Abort ! ###\n");
+ abort();
+ }
+}
+