#include #include #include "ocm.h" void ocm_error (const char *fmt, ...) { va_list ap; va_start (ap, fmt); fprintf (stderr, "** Fatal **: "); vfprintf (stderr, fmt, ap); fprintf (stderr, "\n"); va_end (ap); exit (-1); } void * ocm_malloc (size_t n) { void *mem = malloc (n); if (!mem) ocm_error ("Out of memory allocating %d bytes\n", mem); return mem; } void ocm_free (void *mem) { free (mem); } static int ignore_errors (Display *dpy, XErrorEvent *event) { return 0; } void ocm_begin_ignore_errors (ocm_app_t *app) { app->error_nesting++; if (app->error_handler) return; XSync (app->display, FALSE); app->error_handler = XSetErrorHandler (ignore_errors); } void ocm_end_ignore_errors (ocm_app_t *app) { if (--app->error_nesting == 0) { XSync (app->display, FALSE); XSetErrorHandler (app->error_handler); } }