From 268d61e00cf4bc52c05f19eda7ab4f6accce12c8 Mon Sep 17 00:00:00 2001 From: Daniel Stone Date: Wed, 7 May 2008 22:28:45 +0300 Subject: [PATCH 1/3] GL: Make errors non-fatal GLX, there's more to the world than just you. If you fail to load the software renderer, don't bring the entire server down. The error path probably needs better testing on this one, but it seems mostly okay to me. --- GL/glx/glxext.c | 2 +- GL/glx/glxglcore.c | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/GL/glx/glxext.c b/GL/glx/glxext.c index 85d8debd4..1cbc27953 100644 --- a/GL/glx/glxext.c +++ b/GL/glx/glxext.c @@ -288,7 +288,7 @@ void GlxExtensionInit(void) __glXDispatch, ResetExtension, StandardMinorOpcode); if (!extEntry) { - FatalError("__glXExtensionInit: AddExtensions failed\n"); + ErrorF("__glXExtensionInit: AddExtensions failed\n"); return; } if (!AddExtensionAlias(GLX_EXTENSION_ALIAS, extEntry)) { diff --git a/GL/glx/glxglcore.c b/GL/glx/glxglcore.c index dafa9bca7..00279b73a 100644 --- a/GL/glx/glxglcore.c +++ b/GL/glx/glxglcore.c @@ -510,7 +510,7 @@ handle_error: xfree(screen); - FatalError("GLX: could not load software renderer\n"); + ErrorF("GLX: could not load software renderer\n"); return NULL; } From 641a5f955b7b3ae04eeb6bc45fb30b0b531898e4 Mon Sep 17 00:00:00 2001 From: Daniel Stone Date: Wed, 7 May 2008 22:29:04 +0300 Subject: [PATCH 2/3] Build: Ensure xf86DefModeSet.c ends in an empty line This shuts up a warning. --- hw/xfree86/common/Makefile.am | 1 + 1 file changed, 1 insertion(+) diff --git a/hw/xfree86/common/Makefile.am b/hw/xfree86/common/Makefile.am index 0f44075ba..c4be599f1 100644 --- a/hw/xfree86/common/Makefile.am +++ b/hw/xfree86/common/Makefile.am @@ -25,6 +25,7 @@ MODEDEFSOURCES = $(srcdir)/vesamodes $(srcdir)/extramodes xf86DefModeSet.c: $(srcdir)/modeline2c.awk $(MODEDEFSOURCES) cat $(MODEDEFSOURCES) | $(AWK) -f $(srcdir)/modeline2c.awk > $@ + echo >> $@ BUILT_SOURCES = xf86DefModeSet.c From cf20df39cc78203d17b99223908af388ecbf7d0e Mon Sep 17 00:00:00 2001 From: Daniel Stone Date: Wed, 7 May 2008 22:24:19 +0300 Subject: [PATCH 3/3] XKB: Actually explain keymap failures When something went wrong building a keymap, try to explain to the user what it actually was, instead of the dreaded 'Failed to load XKB keymap' catch-all. --- xkb/ddxLoad.c | 54 ++++++++++++++++++++++++++++++--------------------- 1 file changed, 32 insertions(+), 22 deletions(-) diff --git a/xkb/ddxLoad.c b/xkb/ddxLoad.c index d80ce62b8..1fb097987 100644 --- a/xkb/ddxLoad.c +++ b/xkb/ddxLoad.c @@ -274,7 +274,7 @@ char tmpname[PATH_MAX]; return True; } else - DebugF("Error compiling keymap (%s)\n",keymap); + LogMessage(X_ERROR, "Error compiling keymap (%s)\n", keymap); #ifdef WIN32 /* remove the temporary file */ unlink(tmpname); @@ -282,9 +282,9 @@ char tmpname[PATH_MAX]; } else { #ifndef WIN32 - DebugF("Could not invoke keymap compiler\n"); + LogMessage(X_ERROR, "XKB: Could not invoke xkbcomp\n"); #else - DebugF("Could not open file %s\n", tmpname); + LogMessage(X_ERROR, "Could not open file %s\n", tmpname); #endif } if (nameRtrn) @@ -350,11 +350,13 @@ unsigned missing; if ((names->keycodes==NULL)&&(names->types==NULL)&& (names->compat==NULL)&&(names->symbols==NULL)&& (names->geometry==NULL)) { + LogMessage(X_ERROR, "XKB: No components provided for device %s\n", + keybd->name); return 0; } else if (!XkbDDXCompileKeymapByNames(xkb,names,want,need, nameRtrn,nameRtrnLen)){ - DebugF("Couldn't compile keymap file\n"); + LogMessage(X_ERROR, "XKB: Couldn't compile keymap\n"); return 0; } file= XkbDDXOpenConfigFile(nameRtrn,fileName,PATH_MAX); @@ -369,7 +371,7 @@ unsigned missing; (void) unlink (fileName); return 0; } - else if (xkbDebugFlags) { + else { DebugF("Loaded XKB keymap %s, defined=0x%x\n",fileName,(*xkbRtrn)->defined); } fclose(file); @@ -390,32 +392,40 @@ XkbRF_RulesPtr rules; if (!rules_name) return False; - if (XkbBaseDirectory==NULL) { - if (strlen(rules_name)+7 > PATH_MAX) - return False; - sprintf(buf,"rules/%s",rules_name); + + if (strlen(XkbBaseDirectory) + strlen(rules_name) + 8 > PATH_MAX) { + LogMessage(X_ERROR, "XKB: Rules name is too long\n"); + return False; } - else { - if (strlen(XkbBaseDirectory)+strlen(rules_name)+8 > PATH_MAX) - return False; - sprintf(buf,"%s/rules/%s",XkbBaseDirectory,rules_name); - } - if ((file= fopen(buf,"r"))==NULL) + sprintf(buf,"%s/rules/%s", XkbBaseDirectory, rules_name); + + file = fopen(buf, "r"); + if (!file) { + LogMessage(X_ERROR, "XKB: Couldn't open rules file %s\n", file); return False; - if ((rules= XkbRF_Create(0,0))==NULL) { + } + + rules = XkbRF_Create(0, 0); + if (!rules) { + LogMessage(X_ERROR, "XKB: Couldn't create rules struct\n"); fclose(file); return False; } - if (!XkbRF_LoadRules(file,rules)) { + + if (!XkbRF_LoadRules(file, rules)) { + LogMessage(X_ERROR, "XKB: Couldn't parse rules file %s\n", rules_name); fclose(file); XkbRF_Free(rules,True); return False; } - bzero((char *)names,sizeof(XkbComponentNamesRec)); - complete= XkbRF_GetComponents(rules,defs,names); + + memset(names, 0, sizeof(*names)); + complete = XkbRF_GetComponents(rules,defs,names); fclose(file); - XkbRF_Free(rules,True); + XkbRF_Free(rules, True); + + if (!complete) + LogMessage(X_ERROR, "XKB: Rules returned no components\n"); + return complete; } - -