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 <[EMAIL PROTECTED]>:  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 via email to