[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Bug#394318: [ibaldo@adinet.com.uy: Bug#399877: 394318: There is a fix for this.]



A patch might look like the one attached, adapted from the git patch.

However it introduces XkbConfigText and XkbWriteXKBGeometry,
XkbWriteXKBSymbols, XkbWriteXKBCompatMap, XkbWriteXKBKeyTypes,
XkbWriteXKBKeycodes, which my system does not know.

I'm not sure if this is a Build-Depends or a newer version of libxkbui
that's missing, or something else.

Drew


--- Begin Message ---
Revert xkb changes that broke XkbGetKeyboard()

Drew Parsons <dparsons@debian.org>:  modify original git patch to patch 
xkbout.c and xkbtext.c, since they had not been completely removed in Debian's
copy of xserver 1.1 (X11R7.1). Applied to xorg-server (2:1.1.1-11) 
---

Index: xorg-server/xkb/Makefile.am
===================================================================
--- xorg-server.orig/xkb/Makefile.am	2006-11-24 11:11:02.000000000 +1100
+++ xorg-server/xkb/Makefile.am	2006-11-24 11:11:29.000000000 +1100
@@ -30,8 +30,10 @@
 XKBFILE_SRCS = \
         maprules.c \
         xkmread.c \
+        xkbtext.c \
         xkbfmisc.c \
-        xkberrs.c
+        xkberrs.c \
+        xkbout.c
 
 X11_SRCS = \
         XKBMisc.c \
Index: xorg-server/xkb/xkbfmisc.c
===================================================================
--- xorg-server.orig/xkb/xkbfmisc.c	2006-11-24 11:11:02.000000000 +1100
+++ xorg-server/xkb/xkbfmisc.c	2006-11-24 11:11:29.000000000 +1100
@@ -50,16 +50,185 @@
 #include <X11/extensions/XKBgeom.h>
 #include "xkb.h"
 
+unsigned
+_XkbKSCheckCase(KeySym ks)
+{
+unsigned	set,rtrn;
+
+    set= (ks & (~0xff)) >> 8;
+    rtrn= 0;
+    switch (set) {
+	case 0:		/* latin 1 */
+	    if (((ks>=XK_A)&&(ks<=XK_Z))||
+		((ks>=XK_Agrave)&&(ks<=XK_THORN)&&(ks!=XK_multiply))) {
+		rtrn|= _XkbKSUpper;
+	    }
+	    if (((ks>=XK_a)&&(ks<=XK_z))||
+		((ks>=XK_agrave)&&(ks<=XK_ydiaeresis))) {
+		rtrn|= _XkbKSLower;
+	    }
+	    break;
+	case 1:		/* latin 2 */
+	    if (((ks>=XK_Aogonek)&&(ks<=XK_Zabovedot)&&(ks!=XK_breve))||
+		((ks>=XK_Racute)&&(ks<=XK_Tcedilla))) {
+		rtrn|= _XkbKSUpper;
+	    }
+	    if (((ks>=XK_aogonek)&&(ks<=XK_zabovedot)&&(ks!=XK_caron))||
+		((ks>=XK_racute)&&(ks<=XK_tcedilla))) {
+		rtrn|= _XkbKSLower;
+	    }
+	    break;
+	case 2:		/* latin 3 */
+	    if (((ks>=XK_Hstroke)&&(ks<=XK_Jcircumflex))||
+		((ks>=XK_Cabovedot)&&(ks<=XK_Scircumflex))) {
+		rtrn|= _XkbKSUpper;
+	    }
+	    if (((ks>=XK_hstroke)&&(ks<=XK_jcircumflex))||
+		((ks>=XK_cabovedot)&&(ks<=XK_scircumflex))) {
+		rtrn|= _XkbKSLower;
+	    }
+	    break;
+	case 3:		/* latin 4 */
+	    if (((ks>=XK_Rcedilla)&&(ks<=XK_Tslash))||
+	        (ks==XK_ENG)||
+		((ks>=XK_Amacron)&&(ks<=XK_Umacron))) {
+		rtrn|= _XkbKSUpper;
+	    }
+	    if (((ks>=XK_rcedilla)&&(ks<=XK_tslash))||
+	        (ks==XK_eng)||
+		((ks>=XK_amacron)&&(ks<=XK_umacron))) {
+		rtrn|= _XkbKSLower;
+	    }
+	    break;
+	case 18:		/* latin 8 */
+	    if ((ks==XK_Babovedot)||
+                ((ks>=XK_Dabovedot)&&(ks<=XK_Wacute))||
+		((ks>=XK_Ygrave)&&(ks<=XK_Fabovedot))||
+	        (ks==XK_Mabovedot)||
+	        (ks==XK_Pabovedot)||
+	        (ks==XK_Sabovedot)||
+	        (ks==XK_Wdiaeresis)||
+		((ks>=XK_Wcircumflex)&&(ks<=XK_Ycircumflex))) {
+		rtrn|= _XkbKSUpper;
+	    }
+	    if ((ks==XK_babovedot)||
+	        (ks==XK_dabovedot)||
+	        (ks==XK_fabovedot)||
+	        (ks==XK_mabovedot)||
+                ((ks>=XK_wgrave)&&(ks<=XK_wacute))||
+	        (ks==XK_ygrave)||
+		((ks>=XK_wdiaeresis)&&(ks<=XK_ycircumflex))) {
+		rtrn|= _XkbKSLower;
+	    }
+	    break;
+	case 19:		/* latin 9 */
+	    if ((ks==XK_OE)||(ks==XK_Ydiaeresis)) {
+		rtrn|= _XkbKSUpper;
+	    }
+	    if (ks==XK_oe) {
+		rtrn|= _XkbKSLower;
+	    }
+	    break;
+    }
+    return rtrn;
+}
+
+/***===================================================================***/
+
+Bool
+XkbLookupGroupAndLevel(	XkbDescPtr 	xkb,
+			int 		key,
+			int *		mods_inout,
+			int *		grp_inout,
+			int *		lvl_rtrn)
+{
+int		nG,eG;
+
+    if ((!xkb)||(!XkbKeycodeInRange(xkb,key))||(!grp_inout))
+	return False;
+
+    nG= XkbKeyNumGroups(xkb,key);
+    eG= *grp_inout;
+
+    if ( nG==0 ) {
+	*grp_inout= 0;
+	if (lvl_rtrn!=NULL)
+	    *lvl_rtrn= 0;
+	return False;
+    }
+    else if ( nG==1 ) {
+	eG= 0;
+    }
+    else if ( eG>=nG ) {
+	unsigned gI= XkbKeyGroupInfo(xkb,key);
+	switch (XkbOutOfRangeGroupAction(gI)) {
+	    default:
+		eG %= nG;
+		break;
+	    case XkbClampIntoRange:
+		eG = nG-1;
+		break;
+	    case XkbRedirectIntoRange:
+		eG = XkbOutOfRangeGroupNumber(gI);
+		if (eG>=nG)
+		    eG= 0;
+		break;
+	}
+    }
+    *grp_inout= eG;
+    if (mods_inout!=NULL) {
+	XkbKeyTypePtr	type;
+	int		preserve;
+
+	type = XkbKeyKeyType(xkb,key,eG);
+	if (lvl_rtrn!=NULL)
+	    *lvl_rtrn= 0;
+	preserve= 0;
+	if (type->map) { /* find the shift level */
+	    register int i;
+	    register XkbKTMapEntryPtr entry;
+	    for (i=0,entry=type->map;i<type->map_count;i++,entry++) {
+		if ((entry->active)&&
+			(((*mods_inout)&type->mods.mask)==entry->mods.mask)){
+		    if (lvl_rtrn!=NULL)
+			*lvl_rtrn= entry->level;
+		    if (type->preserve)
+			preserve= type->preserve[i].mask;
+		    break;
+		}
+	    }
+	}
+	(*mods_inout)&= ~(type->mods.mask&(~preserve));
+    }
+    return True;
+}
+
 /***===================================================================***/
 
 static Bool
 XkbWriteSectionFromName(FILE *file,char *sectionName,char *name)
 {
     fprintf(file,"    xkb_%-20s { include \"%s\" };\n",sectionName,name);
-    ErrorF("    xkb_%-20s { include \"%s\" };\n",sectionName,name);
     return True;
 }
 
+#define	NEED_DESC(n) ((!n)||((n)[0]=='+')||((n)[0]=='|')||(strchr((n),'%')))
+#define	COMPLETE(n)  ((n)&&(!NEED_DESC(n)))
+
+/* ARGSUSED */
+static void
+_AddIncl(	FILE *		file,
+		XkbFileInfo *	result,
+		Bool 		topLevel,
+		Bool 		showImplicit,
+		int 		index,
+		void *		priv)
+{
+    if ((priv)&&(strcmp((char *)priv,"%")!=0))
+	fprintf(file,"    include \"%s\"\n",(char *)priv);
+    return;
+}
+
 Bool
 XkbWriteXKBKeymapForNames(	FILE *			file,
 				XkbComponentNamesPtr	names,
@@ -68,29 +237,229 @@
 				unsigned		want,
 				unsigned		need)
 {
-    if (!names || (!names->keycodes && !names->types && !names->compat &&
-                   !names->symbols && !names->geometry))
-        return False;
-
-    fprintf(file, "xkb_keymap \"%s\" {\n", names->keymap ? names->keymap :
-                                                           "default");
-
-    if (names->keycodes)
-	XkbWriteSectionFromName(file, "keycodes", names->keycodes);
-    if (names->types)
-	XkbWriteSectionFromName(file, "types", names->types);
-    if (names->compat)
-	XkbWriteSectionFromName(file, "compatibility", names->compat);
-    if (names->symbols)
-	XkbWriteSectionFromName(file, "symbols", names->symbols);
-    if (names->geometry)
-	XkbWriteSectionFromName(file, "geometry", names->geometry);
+char *		name,*tmp;
+unsigned	complete;
+XkbNamesPtr	old_names;
+int		multi_section;
+unsigned	wantNames,wantConfig,wantDflts;
+XkbFileInfo	finfo;
+
+    bzero(&finfo,sizeof(XkbFileInfo));
+
+    complete= 0;
+    if ((name=names->keymap)==NULL)	name= "default";
+    if (COMPLETE(names->keycodes))	complete|= XkmKeyNamesMask;
+    if (COMPLETE(names->types))		complete|= XkmTypesMask;
+    if (COMPLETE(names->compat))	complete|= XkmCompatMapMask;
+    if (COMPLETE(names->symbols))	complete|= XkmSymbolsMask;
+    if (COMPLETE(names->geometry))	complete|= XkmGeometryMask;
+    want|= (complete|need);
+    if (want&XkmSymbolsMask)
+	want|= XkmKeyNamesMask|XkmTypesMask;
+
+    if (want==0)
+	return False;
+
+    if (xkb!=NULL) {
+	 old_names= xkb->names;
+	 finfo.type= 0;
+	 finfo.defined= 0;
+	 finfo.xkb= xkb;
+	 if (!XkbDetermineFileType(&finfo,XkbXKBFile,NULL))
+	    return False;
+    }
+    else old_names= NULL;
+
+    wantConfig= want&(~complete);
+    if (xkb!=NULL) {
+	if (wantConfig&XkmTypesMask) {
+	    if ((!xkb->map) || (xkb->map->num_types<XkbNumRequiredTypes))
+		wantConfig&= ~XkmTypesMask;
+	}
+	if (wantConfig&XkmCompatMapMask) {
+	    if ((!xkb->compat) || (xkb->compat->num_si<1))
+		wantConfig&= ~XkmCompatMapMask;
+	}
+	if (wantConfig&XkmSymbolsMask) {
+	    if ((!xkb->map) || (!xkb->map->key_sym_map))
+		wantConfig&= ~XkmSymbolsMask;
+	}
+	if (wantConfig&XkmIndicatorsMask) {
+	    if (!xkb->indicators)
+		wantConfig&= ~XkmIndicatorsMask;
+	}
+	if (wantConfig&XkmKeyNamesMask) {
+	    if ((!xkb->names)||(!xkb->names->keys))
+		wantConfig&= ~XkmKeyNamesMask;
+	}
+	if ((wantConfig&XkmGeometryMask)&&(!xkb->geom))
+	    wantConfig&= ~XkmGeometryMask;
+    }
+    else {
+	wantConfig= 0;
+    }
+    complete|= wantConfig;
+
+    wantDflts= 0;
+    wantNames= want&(~complete);
+    if ((xkb!=NULL) && (old_names!=NULL)) {
+	if (wantNames&XkmTypesMask) {
+	    if (old_names->types!=None) {
+		tmp= XkbAtomGetString(dpy,old_names->types);
+		names->types= _XkbDupString(tmp);
+	    }
+	    else {
+		wantDflts|= XkmTypesMask;
+	    }
+	    complete|= XkmTypesMask; 
+	}
+	if (wantNames&XkmCompatMapMask) {
+	    if (old_names->compat!=None) {
+		tmp= XkbAtomGetString(dpy,old_names->compat);
+		names->compat= _XkbDupString(tmp);
+	    }
+	    else wantDflts|= XkmCompatMapMask;
+	    complete|= XkmCompatMapMask; 
+	}
+	if (wantNames&XkmSymbolsMask) {
+	    if (old_names->symbols==None)
+		return False;
+	    tmp= XkbAtomGetString(dpy,old_names->symbols);
+	    names->symbols= _XkbDupString(tmp);
+	    complete|= XkmSymbolsMask; 
+	}
+	if (wantNames&XkmKeyNamesMask) {
+	   if (old_names->keycodes!=None) {
+		tmp= XkbAtomGetString(dpy,old_names->keycodes);
+		names->keycodes= _XkbDupString(tmp);
+	    }
+	    else wantDflts|= XkmKeyNamesMask;
+	    complete|= XkmKeyNamesMask;
+	}
+	if (wantNames&XkmGeometryMask) {
+	    if (old_names->geometry==None)
+		return False;
+	    tmp= XkbAtomGetString(dpy,old_names->geometry);
+	    names->geometry= _XkbDupString(tmp);
+	    complete|= XkmGeometryMask; 
+	    wantNames&= ~XkmGeometryMask;
+	}
+    }
+    if (complete&XkmCompatMapMask)
+	complete|= XkmIndicatorsMask|XkmVirtualModsMask;
+    else if (complete&(XkmSymbolsMask|XkmTypesMask))
+	complete|= XkmVirtualModsMask;
+    if (need & (~complete))
+	return False;
+    if ((complete&XkmSymbolsMask)&&((XkmKeyNamesMask|XkmTypesMask)&(~complete)))
+	return False;
+
+    multi_section= 1;
+    if (((complete&XkmKeymapRequired)==XkmKeymapRequired)&&
+	((complete&(~XkmKeymapLegal))==0)) {
+	fprintf(file,"xkb_keymap \"%s\" {\n",name);
+    }
+    else if (((complete&XkmSemanticsRequired)==XkmSemanticsRequired)&&
+	((complete&(~XkmSemanticsLegal))==0)) {
+	fprintf(file,"xkb_semantics \"%s\" {\n",name);
+    }
+    else if (((complete&XkmLayoutRequired)==XkmLayoutRequired)&&
+	((complete&(~XkmLayoutLegal))==0)) {
+	fprintf(file,"xkb_layout \"%s\" {\n",name);
+    }
+    else if (XkmSingleSection(complete&(~XkmVirtualModsMask))) {
+	multi_section= 0;
+    }
+    else {
+	return False;
+    }
 
-    fprintf(file,"};\n");
+    wantNames= complete&(~(wantConfig|wantDflts));
+    name= names->keycodes;
+    if (wantConfig&XkmKeyNamesMask)
+	XkbWriteXKBKeycodes(file,&finfo,False,False,_AddIncl,name);
+    else if (wantDflts&XkmKeyNamesMask)
+	fprintf(stderr,"Default symbols not implemented yet!\n");
+    else if (wantNames&XkmKeyNamesMask)
+	XkbWriteSectionFromName(file,"keycodes",name);
+
+    name= names->types;
+    if (wantConfig&XkmTypesMask)
+	XkbWriteXKBKeyTypes(file,&finfo,False,False,_AddIncl,name);
+    else if (wantDflts&XkmTypesMask)
+	fprintf(stderr,"Default types not implemented yet!\n");
+    else if (wantNames&XkmTypesMask)
+	XkbWriteSectionFromName(file,"types",name);
+
+    name= names->compat;
+    if (wantConfig&XkmCompatMapMask)
+	XkbWriteXKBCompatMap(file,&finfo,False,False,_AddIncl,name);
+    else if (wantDflts&XkmCompatMapMask)
+	fprintf(stderr,"Default interps not implemented yet!\n");
+    else if (wantNames&XkmCompatMapMask)
+	XkbWriteSectionFromName(file,"compatibility",name);
+
+    name= names->symbols;
+    if (wantConfig&XkmSymbolsMask)
+	XkbWriteXKBSymbols(file,&finfo,False,False,_AddIncl,name);
+    else if (wantNames&XkmSymbolsMask)
+	XkbWriteSectionFromName(file,"symbols",name);
+
+    name= names->geometry;
+    if (wantConfig&XkmGeometryMask)
+	XkbWriteXKBGeometry(file,&finfo,False,False,_AddIncl,name);
+    else if (wantNames&XkmGeometryMask)
+	XkbWriteSectionFromName(file,"geometry",name);
 
+    if (multi_section)
+	fprintf(file,"};\n");
     return True;
 }
 
+/***====================================================================***/
+
+/*ARGSUSED*/
+Status
+XkbMergeFile(XkbDescPtr xkb,XkbFileInfo finfo)
+{
+    return BadImplementation;
+}
+
+/***====================================================================***/
+
+int
+XkbFindKeycodeByName(XkbDescPtr xkb,char *name,Bool use_aliases)
+{
+register int	i;
+
+    if ((!xkb)||(!xkb->names)||(!xkb->names->keys))
+	return 0;
+    for (i=xkb->min_key_code;i<=xkb->max_key_code;i++) {
+	if (strncmp(xkb->names->keys[i].name,name,XkbKeyNameLength)==0)
+	    return i;
+    }
+    if (!use_aliases)
+	return 0;
+    if (xkb->geom && xkb->geom->key_aliases) {
+	XkbKeyAliasPtr	a;
+	a= xkb->geom->key_aliases;
+	for (i=0;i<xkb->geom->num_key_aliases;i++,a++) {
+	    if (strncmp(name,a->alias,XkbKeyNameLength)==0)
+		return XkbFindKeycodeByName(xkb,a->real,False);
+	}
+    }
+    if (xkb->names && xkb->names->key_aliases) {
+	XkbKeyAliasPtr	a;
+	a= xkb->names->key_aliases;
+	for (i=0;i<xkb->names->num_key_aliases;i++,a++) {
+	    if (strncmp(name,a->alias,XkbKeyNameLength)==0)
+		return XkbFindKeycodeByName(xkb,a->real,False);
+	}
+    }
+    return 0;
+}
+
+
 unsigned
 XkbConvertGetByNameComponents(Bool toXkm,unsigned orig)
 {
@@ -117,6 +486,34 @@
     return rtrn;
 }
 
+unsigned
+XkbConvertXkbComponents(Bool toXkm,unsigned orig)
+{
+unsigned	rtrn;
+
+    rtrn= 0;
+    if (toXkm) {
+	if (orig&XkbClientMapMask)	rtrn|= XkmTypesMask|XkmSymbolsMask;
+	if (orig&XkbServerMapMask)	rtrn|= XkmTypesMask|XkmSymbolsMask;
+	if (orig&XkbCompatMapMask)	rtrn|= XkmCompatMapMask;
+	if (orig&XkbIndicatorMapMask)	rtrn|= XkmIndicatorsMask;
+	if (orig&XkbNamesMask)		rtrn|= XkmKeyNamesMask;
+	if (orig&XkbGeometryMask)	rtrn|= XkmGeometryMask;
+    }
+    else {
+	if (orig!=0)			rtrn|= XkbNamesMask;
+	if (orig&XkmTypesMask)		rtrn|= XkbClientMapMask;
+	if (orig&XkmCompatMapMask)
+		rtrn|= XkbCompatMapMask|XkbIndicatorMapMask;
+	if (orig&XkmSymbolsMask)	rtrn|=XkbClientMapMask|XkbServerMapMask;
+	if (orig&XkmIndicatorsMask)	rtrn|= XkbIndicatorMapMask;
+	if (orig&XkmKeyNamesMask)	
+		rtrn|= XkbNamesMask|XkbIndicatorMapMask;
+	if (orig&XkmGeometryMask)	rtrn|= XkbGeometryMask;
+    }
+    return rtrn;
+}
+
 Bool
 XkbDetermineFileType(XkbFileInfoPtr finfo,int format,int *opts_missing)
 {
Index: xorg-server/xkb/xkmread.c
===================================================================
--- xorg-server.orig/xkb/xkmread.c	2006-11-24 11:11:02.000000000 +1100
+++ xorg-server/xkb/xkmread.c	2006-11-24 11:11:29.000000000 +1100
@@ -169,89 +169,6 @@
     return nRead;
 }
 
-unsigned
-_XkbKSCheckCase(KeySym ks)
-{
-unsigned	set,rtrn;
-
-    set= (ks & (~0xff)) >> 8;
-    rtrn= 0;
-    switch (set) {
-	case 0:		/* latin 1 */
-	    if (((ks>=XK_A)&&(ks<=XK_Z))||
-		((ks>=XK_Agrave)&&(ks<=XK_THORN)&&(ks!=XK_multiply))) {
-		rtrn|= _XkbKSUpper;
-	    }
-	    if (((ks>=XK_a)&&(ks<=XK_z))||
-		((ks>=XK_agrave)&&(ks<=XK_ydiaeresis))) {
-		rtrn|= _XkbKSLower;
-	    }
-	    break;
-	case 1:		/* latin 2 */
-	    if (((ks>=XK_Aogonek)&&(ks<=XK_Zabovedot)&&(ks!=XK_breve))||
-		((ks>=XK_Racute)&&(ks<=XK_Tcedilla))) {
-		rtrn|= _XkbKSUpper;
-	    }
-	    if (((ks>=XK_aogonek)&&(ks<=XK_zabovedot)&&(ks!=XK_caron))||
-		((ks>=XK_racute)&&(ks<=XK_tcedilla))) {
-		rtrn|= _XkbKSLower;
-	    }
-	    break;
-	case 2:		/* latin 3 */
-	    if (((ks>=XK_Hstroke)&&(ks<=XK_Jcircumflex))||
-		((ks>=XK_Cabovedot)&&(ks<=XK_Scircumflex))) {
-		rtrn|= _XkbKSUpper;
-	    }
-	    if (((ks>=XK_hstroke)&&(ks<=XK_jcircumflex))||
-		((ks>=XK_cabovedot)&&(ks<=XK_scircumflex))) {
-		rtrn|= _XkbKSLower;
-	    }
-	    break;
-	case 3:		/* latin 4 */
-	    if (((ks>=XK_Rcedilla)&&(ks<=XK_Tslash))||
-	        (ks==XK_ENG)||
-		((ks>=XK_Amacron)&&(ks<=XK_Umacron))) {
-		rtrn|= _XkbKSUpper;
-	    }
-	    if (((ks>=XK_rcedilla)&&(ks<=XK_tslash))||
-	        (ks==XK_eng)||
-		((ks>=XK_amacron)&&(ks<=XK_umacron))) {
-		rtrn|= _XkbKSLower;
-	    }
-	    break;
-	case 18:		/* latin 8 */
-	    if ((ks==XK_Babovedot)||
-                ((ks>=XK_Dabovedot)&&(ks<=XK_Wacute))||
-		((ks>=XK_Ygrave)&&(ks<=XK_Fabovedot))||
-	        (ks==XK_Mabovedot)||
-	        (ks==XK_Pabovedot)||
-	        (ks==XK_Sabovedot)||
-	        (ks==XK_Wdiaeresis)||
-		((ks>=XK_Wcircumflex)&&(ks<=XK_Ycircumflex))) {
-		rtrn|= _XkbKSUpper;
-	    }
-	    if ((ks==XK_babovedot)||
-	        (ks==XK_dabovedot)||
-	        (ks==XK_fabovedot)||
-	        (ks==XK_mabovedot)||
-                ((ks>=XK_wgrave)&&(ks<=XK_wacute))||
-	        (ks==XK_ygrave)||
-		((ks>=XK_wdiaeresis)&&(ks<=XK_ycircumflex))) {
-		rtrn|= _XkbKSLower;
-	    }
-	    break;
-	case 19:		/* latin 9 */
-	    if ((ks==XK_OE)||(ks==XK_Ydiaeresis)) {
-		rtrn|= _XkbKSUpper;
-	    }
-	    if (ks==XK_oe) {
-		rtrn|= _XkbKSLower;
-	    }
-	    break;
-    }
-    return rtrn;
-}
-
 /***====================================================================***/
 
 static int
@@ -1253,10 +1170,14 @@
 		*loaded_rtrn|= XkmGeometryMask;
 	    break;
 	default:
+	    _XkbLibError(_XkbErrBadImplementation,
+	    			XkbConfigText(tmpTOC.type,XkbMessage),0);
 	    nRead= 0;
 	    break;
     }
     if (nRead!=tmpTOC.size) {
+	_XkbLibError(_XkbErrBadLength,XkbConfigText(tmpTOC.type,XkbMessage),
+						nRead-tmpTOC.size);
 	return 0;
     }
     return (nRead>=0);
@@ -1290,6 +1211,8 @@
 		return _XkbDupString(name);
 	    break;
 	default:
+	    _XkbLibError(_XkbErrBadImplementation,
+				XkbConfigText(tmpTOC.type,XkbMessage),0);
 	    break;
     }
     return NULL;
@@ -1355,6 +1278,8 @@
 		tmp= ReadXkmGeometry(file,result);
 		break;
 	    default:
+		_XkbLibError(_XkbErrBadImplementation,
+				XkbConfigText(tmpTOC.type,XkbMessage),0);
 		tmp= 0;
 		break;
 	}
@@ -1364,7 +1289,8 @@
 	    result->defined|= (1<<toc[i].type);
 	}
 	if (nRead!=tmpTOC.size) {
-            return 0;
+	    _XkbLibError(_XkbErrBadLength,XkbConfigText(tmpTOC.type,XkbMessage),
+	    						nRead-tmpTOC.size);
 	}
     }
     return which;
Index: xorg-server/xkb/xkbout.c
===================================================================
--- xorg-server.orig/xkb/xkbout.c	2006-11-24 11:11:51.000000000 +1100
+++ xorg-server/xkb/xkbout.c	2006-11-24 11:12:17.000000000 +1100
@@ -28,8 +28,6 @@
 
 #ifdef HAVE_DIX_CONFIG_H
 #include <dix-config.h>
-#elif defined(HAVE_CONFIG_H)
-#include <config.h>
 #endif
 
 #include <stdio.h>
@@ -37,17 +35,6 @@
 #include <stdlib.h>
 #include <X11/Xfuncs.h>
 
-#ifndef XKB_IN_SERVER
-
-#include <X11/Xlib.h>
-#include <X11/XKBlib.h>
-#include <X11/extensions/XKBgeom.h>
-
-#include "XKMformat.h"
-#include "XKBfileInt.h"
-
-#else
-
 #include <X11/X.h>
 #define	NEED_EVENTS
 #include <X11/keysym.h>
@@ -62,8 +49,6 @@
 #include <X11/extensions/XKBgeom.h>
 #include <X11/extensions/XKBfile.h>
 
-#endif
-
 #define	VMOD_HIDE_VALUE	0
 #define	VMOD_SHOW_VALUE	1
 #define	VMOD_COMMENT_VALUE 2
Index: xorg-server/xkb/xkbtext.c
===================================================================
--- xorg-server.orig/xkb/xkbtext.c	2006-11-24 11:12:38.000000000 +1100
+++ xorg-server/xkb/xkbtext.c	2006-11-24 11:12:57.000000000 +1100
@@ -28,8 +28,6 @@
 
 #ifdef HAVE_DIX_CONFIG_H
 #include <dix-config.h>
-#elif defined(HAVE_CONFIG_H)
-#include <config.h>
 #endif
 
 #include <stdio.h>
@@ -38,17 +36,6 @@
 
 #include <X11/Xos.h>
 
-#ifndef XKB_IN_SERVER
-
-#include <X11/Xlib.h>
-#include <X11/XKBlib.h>
-#include <X11/extensions/XKBgeom.h>
-
-#include "XKMformat.h"
-#include "XKBfileInt.h"
-
-#else
-
 #include <X11/X.h>
 #define	NEED_EVENTS
 #include <X11/Xproto.h>
@@ -60,8 +47,6 @@
 #include <X11/extensions/XKBsrv.h>
 #include <X11/extensions/XKBgeom.h>
 
-#endif
-
 /***====================================================================***/
 
 #define	BUFFER_SIZE	512
@@ -351,22 +336,10 @@
 {
 static char buf[32],*rtrn;
 
-#ifndef XKB_IN_SERVER
-    if (sym==NoSymbol)
-	strcpy(rtrn=buf,"NoSymbol");
-    else if ((rtrn=XKeysymToString(sym))==NULL)
-	sprintf(rtrn=buf, "0x%lx", (long)sym);
-    else if (format==XkbCFile) {
-	sprintf(buf,"XK_%s",rtrn);
-	rtrn= buf;
-    }
-    return rtrn;
-#else /* def XKB_IN_SERVER */
     if (sym==NoSymbol)
 	 strcpy(rtrn=buf,"NoSymbol");
     else sprintf(rtrn=buf, "0x%lx", (long)sym);
     return rtrn;
-#endif /* XKB_IN_SERVER */
 }
 
 char *
@@ -1350,91 +1323,3 @@
     buf[size]= '\0';
     return buf;
 }
-
-#ifndef XKB_IN_SERVER
-
-/***====================================================================***/
-
-#define	PIXEL_MAX	65535
-
-Bool
-XkbLookupCanonicalRGBColor(char *def,XColor *color)
-{
-int     tmp;
-
-    if (_XkbStrCaseEqual(def,"black")) {
-	color->red= color->green= color->blue= 0;
-	return True;
-    }
-    else if (_XkbStrCaseEqual(def,"white")) {
-	color->red= color->green= color->blue= PIXEL_MAX;
-	return True;
-    }
-    else if ((sscanf(def,"grey%d",&tmp)==1)||
-        (sscanf(def,"gray%d",&tmp)==1)||
-        (sscanf(def,"Grey%d",&tmp)==1)||
-        (sscanf(def,"Gray%d",&tmp)==1)) {
-	if ((tmp>0)&&(tmp<=100)) {
-	    tmp= (PIXEL_MAX*tmp)/100;
-	    color->red= color->green= color->blue= tmp;
-	    return True;
-	}
-    }
-    else if ((tmp=(_XkbStrCaseEqual(def,"red")*100))||
-             (sscanf(def,"red%d",&tmp)==1)) {
-	if ((tmp>0)&&(tmp<=100)) {
-	    tmp= (PIXEL_MAX*tmp)/100;
-	    color->red= tmp;
-	    color->green= color->blue= 0;
-	    return True;
-	}
-    }
-    else if ((tmp=(_XkbStrCaseEqual(def,"green")*100))||
-             (sscanf(def,"green%d",&tmp)==1)) {
-	if ((tmp>0)&&(tmp<=100)) {
-	    tmp= (PIXEL_MAX*tmp)/100;
-	    color->green= tmp;
-	    color->red= color->blue= 0;
-	    return True;
-	}
-    }
-    else if ((tmp=(_XkbStrCaseEqual(def,"blue")*100))||
-             (sscanf(def,"blue%d",&tmp)==1)) {
-	if ((tmp>0)&&(tmp<=100)) {
-	    tmp= (PIXEL_MAX*tmp)/100;
-	    color->blue= tmp;
-	    color->red= color->green= 0;
-	    return True;
-	}
-    }
-    else if ((tmp=(_XkbStrCaseEqual(def,"magenta")*100))||
-             (sscanf(def,"magenta%d",&tmp)==1)) {
-	if ((tmp>0)&&(tmp<=100)) {
-	    tmp= (PIXEL_MAX*tmp)/100;
-	    color->green= 0;
-	    color->red= color->blue= tmp;
-	    return True;
-	}
-    }
-    else if ((tmp=(_XkbStrCaseEqual(def,"cyan")*100))||
-             (sscanf(def,"cyan%d",&tmp)==1)) {
-	if ((tmp>0)&&(tmp<=100)) {
-	    tmp= (PIXEL_MAX*tmp)/100;
-	    color->red= 0;
-	    color->green= color->blue= tmp;
-	    return True;
-	}
-    }
-    else if ((tmp=(_XkbStrCaseEqual(def,"yellow")*100))||
-             (sscanf(def,"yellow%d",&tmp)==1)) {
-	if ((tmp>0)&&(tmp<=100)) {
-	    tmp= (PIXEL_MAX*tmp)/100;
-	    color->blue= 0;
-	    color->red= color->green= tmp;
-	    return True;
-	}
-    }
-    return False;
-}
-
-#endif

--- End Message ---

Reply to: