dri: Add a CriticalErrorMessageF macro.
authorCarl Worth <cworth@cworth.org>
Sat, 4 Feb 2012 00:17:29 +0000 (16:17 -0800)
committerCarl Worth <cworth@cworth.org>
Thu, 9 Feb 2012 01:07:53 +0000 (17:07 -0800)
Sometimes an error is so sever that we want to print it even when the
user hasn't specifically requested debugging by setting LIBGL_DEBUG.

Add a CriticalErrorMessageF macro to be used for this case. (The error
message can still be slienced with the existing LIBGL_DEBUG=quiet).

For critical error messages we also direct the user to set the
LIBGL_DEBUG environment variable for more details.

Reviewed-by: Eugeni Dodonov <eugeni.dodonov@intel.com>
src/glx/dri_common.c
src/glx/dri_common.h

index 5096c1f587e50767147249096ca18eead95de30b..0e06d51b4c7d6a69633aef8f6319907976dd0742 100644 (file)
@@ -84,6 +84,30 @@ ErrorMessageF(const char *f, ...)
    }
 }
 
+/**
+ * Print error message unless LIBGL_DEBUG is set to "quiet".
+ *
+ * The distinction between CriticalErrorMessageF and ErrorMessageF is
+ * that critcial errors will be printed by default, (even when
+ * LIBGL_DEBUG is unset).
+ */
+_X_HIDDEN void
+CriticalErrorMessageF(const char *f, ...)
+{
+   va_list args;
+   const char *env;
+
+   if (!(env = getenv("LIBGL_DEBUG")) || !strstr(env, "quiet")) {
+      fprintf(stderr, "libGL error: ");
+      va_start(args, f);
+      vfprintf(stderr, f, args);
+      va_end(args);
+
+      if (!env || !strstr(env, "verbose"))
+         fprintf(stderr, "libGL error: Try again with LIBGL_DEBUG=verbose for more details.\n");
+   }
+}
+
 #ifndef DEFAULT_DRIVER_DIR
 /* this is normally defined in Mesa/configs/default with DRI_DRIVER_SEARCH_PATH */
 #define DEFAULT_DRIVER_DIR "/usr/local/lib/dri"
index 3bcdebcc5296d89399f743cc0d969763146f9f1d..f5c7d456ee1b22a88cc13fc4a2d858746e4e350f 100644 (file)
@@ -65,6 +65,8 @@ extern void InfoMessageF(const char *f, ...);
 
 extern void ErrorMessageF(const char *f, ...);
 
+extern void CriticalErrorMessageF(const char *f, ...);
+
 extern void *driOpenDriver(const char *driverName);
 
 extern bool