xserver: Branch 'master' - 22 commits

GitLab Mirror gitlab-mirror at kemper.freedesktop.org
Wed Jul 16 22:41:10 UTC 2025


 hw/xfree86/sdksyms.sh |    1 
 include/meson.build   |    1 
 include/xkbfile.h     |  154 ++++++++++++++++++++++++++++++++++++++++++++++++++
 include/xkbrules.h    |   73 +++++++++++++++++++++++
 include/xkbsrv.h      |    2 
 test/test_xkb.c       |    1 
 xkb/XKBMisc.c         |    5 -
 xkb/ddxLoad.c         |    7 --
 xkb/maprules.c        |  124 ++++++++++++++++++++++++++--------------
 xkb/xkb.c             |   40 ------------
 xkb/xkbInit.c         |    3 
 xkb/xkbfile_priv.h    |   45 --------------
 xkb/xkbfmisc.c        |   45 +++++++++++++-
 xkb/xkbfmisc_priv.h   |   79 -------------------------
 xkb/xkbout.c          |    3 
 xkb/xkbout_priv.h     |   32 ----------
 xkb/xkbrules_priv.h   |   61 -------------------
 xkb/xkmread.c         |    6 -
 18 files changed, 360 insertions(+), 322 deletions(-)

New commits:
commit 122345d48426525eccb0186f1d64fe61a3685e89
Author: Alan Coopersmith <alan.coopersmith at oracle.com>
Date:   Sat Jul 12 11:47:06 2025 -0700

    Revert "xkb: move XkbConvertGetByNameComponents and make it static"
    
    This reverts commit 114c1c84b1b1dae2d74f7a719e8e682920cc1557.
    
    Part-of: <https://gitlab.freedesktop.org/xorg/xserver/-/merge_requests/2046>

diff --git a/include/xkbfile.h b/include/xkbfile.h
index 706f94018..df2221313 100644
--- a/include/xkbfile.h
+++ b/include/xkbfile.h
@@ -86,6 +86,14 @@ extern _X_EXPORT int XkbFindKeycodeByName(XkbDescPtr /* xkb */ ,
                                           Bool  /* use_aliases */
     );
 
+/***====================================================================***/
+
+extern _X_EXPORT unsigned XkbConvertGetByNameComponents(Bool /* toXkm */ ,
+                                                        unsigned        /* orig */
+    );
+
+/***====================================================================***/
+
 extern _X_EXPORT Bool XkbWriteXKBKeycodes(FILE * /* file */ ,
                                           XkbDescPtr /* result */ ,
                                           Bool /* topLevel */ ,
diff --git a/xkb/xkb.c b/xkb/xkb.c
index 313309155..2433b7d73 100644
--- a/xkb/xkb.c
+++ b/xkb/xkb.c
@@ -5906,45 +5906,6 @@ ProcXkbListComponents(ClientPtr client)
     return Success;
 }
 
-static unsigned
-XkbConvertGetByNameComponents(Bool toXkm, unsigned orig)
-{
-    unsigned rtrn;
-
-    rtrn = 0;
-    if (toXkm) {
-        if (orig & XkbGBN_TypesMask)
-            rtrn |= XkmTypesMask;
-        if (orig & XkbGBN_CompatMapMask)
-            rtrn |= XkmCompatMapMask;
-        if (orig & XkbGBN_SymbolsMask)
-            rtrn |= XkmSymbolsMask;
-        if (orig & XkbGBN_IndicatorMapMask)
-            rtrn |= XkmIndicatorsMask;
-        if (orig & XkbGBN_KeyNamesMask)
-            rtrn |= XkmKeyNamesMask;
-        if (orig & XkbGBN_GeometryMask)
-            rtrn |= XkmGeometryMask;
-    }
-    else {
-        if (orig & XkmTypesMask)
-            rtrn |= XkbGBN_TypesMask;
-        if (orig & XkmCompatMapMask)
-            rtrn |= XkbGBN_CompatMapMask;
-        if (orig & XkmSymbolsMask)
-            rtrn |= XkbGBN_SymbolsMask;
-        if (orig & XkmIndicatorsMask)
-            rtrn |= XkbGBN_IndicatorMapMask;
-        if (orig & XkmKeyNamesMask)
-            rtrn |= XkbGBN_KeyNamesMask;
-        if (orig & XkmGeometryMask)
-            rtrn |= XkbGBN_GeometryMask;
-        if (orig != 0)
-            rtrn |= XkbGBN_OtherNamesMask;
-    }
-    return rtrn;
-}
-
 /***====================================================================***/
 int
 ProcXkbGetKbdByName(ClientPtr client)
diff --git a/xkb/xkbfmisc.c b/xkb/xkbfmisc.c
index a2063e40f..146e36683 100644
--- a/xkb/xkbfmisc.c
+++ b/xkb/xkbfmisc.c
@@ -390,3 +390,42 @@ XkbFindKeycodeByName(XkbDescPtr xkb, char *name, Bool use_aliases)
     }
     return 0;
 }
+
+unsigned
+XkbConvertGetByNameComponents(Bool toXkm, unsigned orig)
+{
+    unsigned rtrn;
+
+    rtrn = 0;
+    if (toXkm) {
+        if (orig & XkbGBN_TypesMask)
+            rtrn |= XkmTypesMask;
+        if (orig & XkbGBN_CompatMapMask)
+            rtrn |= XkmCompatMapMask;
+        if (orig & XkbGBN_SymbolsMask)
+            rtrn |= XkmSymbolsMask;
+        if (orig & XkbGBN_IndicatorMapMask)
+            rtrn |= XkmIndicatorsMask;
+        if (orig & XkbGBN_KeyNamesMask)
+            rtrn |= XkmKeyNamesMask;
+        if (orig & XkbGBN_GeometryMask)
+            rtrn |= XkmGeometryMask;
+    }
+    else {
+        if (orig & XkmTypesMask)
+            rtrn |= XkbGBN_TypesMask;
+        if (orig & XkmCompatMapMask)
+            rtrn |= XkbGBN_CompatMapMask;
+        if (orig & XkmSymbolsMask)
+            rtrn |= XkbGBN_SymbolsMask;
+        if (orig & XkmIndicatorsMask)
+            rtrn |= XkbGBN_IndicatorMapMask;
+        if (orig & XkmKeyNamesMask)
+            rtrn |= XkbGBN_KeyNamesMask;
+        if (orig & XkmGeometryMask)
+            rtrn |= XkbGBN_GeometryMask;
+        if (orig != 0)
+            rtrn |= XkbGBN_OtherNamesMask;
+    }
+    return rtrn;
+}
commit d0d62a791b84eba4858ddcda3becc04595d41735
Author: Alan Coopersmith <alan.coopersmith at oracle.com>
Date:   Sat Jul 12 11:47:06 2025 -0700

    Revert "xkb: unexport functions from xkbfmisc.c"
    
    This reverts commit 5d98664ec13803b6ddfd0d317c8cc57765706b8c.
    
    Part-of: <https://gitlab.freedesktop.org/xorg/xserver/-/merge_requests/2046>

diff --git a/include/xkbfile.h b/include/xkbfile.h
index 317f15937..706f94018 100644
--- a/include/xkbfile.h
+++ b/include/xkbfile.h
@@ -71,6 +71,21 @@ typedef void (*XkbFileAddOnFunc) (FILE * /* file */ ,
 
 _XFUNCPROTOBEGIN
 
+#define	_XkbKSLower	(1<<0)
+#define	_XkbKSUpper	(1<<1)
+
+#define	XkbKSIsLower(k)		(_XkbKSCheckCase(k)&_XkbKSLower)
+#define	XkbKSIsUpper(k)		(_XkbKSCheckCase(k)&_XkbKSUpper)
+#define XkbKSIsKeypad(k)	(((k)>=XK_KP_Space)&&((k)<=XK_KP_Equal))
+
+extern _X_EXPORT unsigned _XkbKSCheckCase(KeySym        /* sym */
+    );
+
+extern _X_EXPORT int XkbFindKeycodeByName(XkbDescPtr /* xkb */ ,
+                                          char * /* name */ ,
+                                          Bool  /* use_aliases */
+    );
+
 extern _X_EXPORT Bool XkbWriteXKBKeycodes(FILE * /* file */ ,
                                           XkbDescPtr /* result */ ,
                                           Bool /* topLevel */ ,
@@ -111,6 +126,14 @@ extern _X_EXPORT Bool XkbWriteXKBGeometry(FILE * /* file */ ,
                                           void *        /* priv */
     );
 
+extern _X_EXPORT Bool XkbWriteXKBKeymapForNames(FILE * /* file */ ,
+                                                XkbComponentNamesPtr /* names */
+                                                ,
+                                                XkbDescPtr /* xkb */ ,
+                                                unsigned /* want */ ,
+                                                unsigned        /* need */
+    );
+
 /***====================================================================***/
 
 extern _X_EXPORT unsigned XkmReadFile(FILE * /* file */ ,
diff --git a/xkb/XKBMisc.c b/xkb/XKBMisc.c
index fd180fad2..253e1774b 100644
--- a/xkb/XKBMisc.c
+++ b/xkb/XKBMisc.c
@@ -29,12 +29,9 @@ THE USE OR PERFORMANCE OF THIS SOFTWARE.
 #include <stdio.h>
 #include <X11/X.h>
 #include <X11/Xproto.h>
-#include <X11/keysym.h>
-
-#include "xkb/xkbfmisc_priv.h"
-
 #include "misc.h"
 #include "inputstr.h"
+#include <X11/keysym.h>
 #include <xkbsrv.h>
 
 /***====================================================================***/
diff --git a/xkb/ddxLoad.c b/xkb/ddxLoad.c
index bfdb6f467..30f593bda 100644
--- a/xkb/ddxLoad.c
+++ b/xkb/ddxLoad.c
@@ -40,7 +40,6 @@ THE USE OR PERFORMANCE OF THIS SOFTWARE.
 
 #include "dix/dix_priv.h"
 #include "os/osdep.h"
-#include "xkb/xkbfmisc_priv.h"
 
 #include "inputstr.h"
 #include "scrnintstr.h"
diff --git a/xkb/xkb.c b/xkb/xkb.c
index 744dba63d..313309155 100644
--- a/xkb/xkb.c
+++ b/xkb/xkb.c
@@ -34,7 +34,6 @@ THE USE OR PERFORMANCE OF THIS SOFTWARE.
 
 #include "dix/dix_priv.h"
 #include "os/osdep.h"
-#include "xkb/xkbfmisc_priv.h"
 
 #include "misc.h"
 #include "inputstr.h"
diff --git a/xkb/xkbfmisc.c b/xkb/xkbfmisc.c
index c09c11b1a..a2063e40f 100644
--- a/xkb/xkbfmisc.c
+++ b/xkb/xkbfmisc.c
@@ -29,15 +29,14 @@
 #include <stdio.h>
 #include <ctype.h>
 #include <stdlib.h>
+
 #include <X11/Xos.h>
 #include <X11/Xfuncs.h>
 #include <X11/extensions/XKMformat.h>
+
 #include <X11/X.h>
 #include <X11/keysym.h>
 #include <X11/Xproto.h>
-
-#include "xkb/xkbfmisc_priv.h"
-
 #include "misc.h"
 #include "inputstr.h"
 #include "dix.h"
diff --git a/xkb/xkbfmisc_priv.h b/xkb/xkbfmisc_priv.h
deleted file mode 100644
index b08947b91..000000000
--- a/xkb/xkbfmisc_priv.h
+++ /dev/null
@@ -1,79 +0,0 @@
-/* SPDX-License-Identifier: MIT OR X11
- *
- * Copyright © 2024 Enrico Weigelt, metux IT consult <info at metux.net>
- */
-#ifndef _XSERVER_XKB_XKBFMISC_PRIV_H
-#define _XSERVER_XKB_XKBFMISC_PRIV_H
-
-/* needed for X11/keysymdef.h to define all symdefs */
-#define XK_MISCELLANY
-
-#include <stdio.h>
-#include <X11/X.h>
-#include <X11/Xdefs.h>
-#include <X11/keysymdef.h>
-
-#include "xkbstr.h"
-
-/*
- * return mask bits for _XkbKSCheckCase()
- */
-#define _XkbKSLower     (1<<0)
-#define _XkbKSUpper     (1<<1)
-
-/*
- * check whether given KeySym is a upper or lower case key
- *
- * @param sym the KeySym to check
- * @return mask of _XkbKS* flags
- */
-unsigned int _XkbKSCheckCase(KeySym sym);
-
-/*
- * check whether given KeySym is an lower case key
- *
- * @param k the KeySym to check
- * @return TRUE if k is a lower case key
- */
-static inline Bool XkbKSIsLower(KeySym k) { return _XkbKSCheckCase(k)&_XkbKSLower; }
-
-/*
- * check whether given KeySym is an upper case key
- *
- * @param k the KeySym to check
- * @return TRUE if k is a upper case key
- */
-static inline Bool XkbKSIsUpper(KeySym k) { return _XkbKSCheckCase(k)&_XkbKSUpper; }
-
-/*
- * check whether given KeySym is an keypad key
- *
- * @param k the KeySym to check
- * @return TRUE if k is a keypad key
- */
-static inline Bool XkbKSIsKeypad(KeySym k) { return (((k)>=XK_KP_Space)&&((k)<=XK_KP_Equal)); }
-
-/*
- * find a keycode by its name
- *
- * @param xkb pointer to xkb descriptor
- * @param name the key name
- * @param use_aliases TRUE if aliases should be resolved
- * @return keycode ID
- */
-int XkbFindKeycodeByName(XkbDescPtr xkb, char *name, Bool use_aliases);
-
-/*
- * write keymap for given component names
- *
- * @param file the FILE to write to
- * @param names pointer to list of keymap component names to write out
- * @param xkb pointer to xkb descriptor
- * @param want bitmask of wanted elements
- * @param need bitmask of needed elements
- * @return TRUE if succeeded
-*/
-Bool XkbWriteXKBKeymapForNames(FILE *file, XkbComponentNamesPtr names,
-                               XkbDescPtr xkb, unsigned want, unsigned need);
-
-#endif /* _XSERVER_XKB_XKBFMISC_PRIV_H */
diff --git a/xkb/xkbout.c b/xkb/xkbout.c
index 1fd45e7af..98130fc32 100644
--- a/xkb/xkbout.c
+++ b/xkb/xkbout.c
@@ -35,7 +35,6 @@
 #include <X11/Xproto.h>
 #include <X11/extensions/XKMformat.h>
 
-#include "xkb/xkbfmisc_priv.h"
 #include "xkb/xkbtext_priv.h"
 
 #include "misc.h"
diff --git a/xkb/xkmread.c b/xkb/xkmread.c
index b40f8fc64..45da55660 100644
--- a/xkb/xkmread.c
+++ b/xkb/xkmread.c
@@ -27,15 +27,14 @@
 #include <dix-config.h>
 
 #include <stdio.h>
+
 #include <X11/Xos.h>
 #include <X11/Xfuncs.h>
+
 #include <X11/X.h>
 #include <X11/Xproto.h>
 #include <X11/keysym.h>
 #include <X11/extensions/XKMformat.h>
-
-#include "xkb/xkbfmisc_priv.h"
-
 #include "misc.h"
 #include "inputstr.h"
 #include "xkbstr.h"
commit f5085758180a01f460701c579d732a121be51ee8
Author: Alan Coopersmith <alan.coopersmith at oracle.com>
Date:   Sat Jul 12 11:47:06 2025 -0700

    Revert "xkb: unexport functions from xkbout.c"
    
    This reverts commit 660657a2c3a28d92d5671b44bc20de49ceacf971.
    
    Part-of: <https://gitlab.freedesktop.org/xorg/xserver/-/merge_requests/2046>

diff --git a/include/xkbfile.h b/include/xkbfile.h
index 172d0c1f7..317f15937 100644
--- a/include/xkbfile.h
+++ b/include/xkbfile.h
@@ -71,6 +71,48 @@ typedef void (*XkbFileAddOnFunc) (FILE * /* file */ ,
 
 _XFUNCPROTOBEGIN
 
+extern _X_EXPORT Bool XkbWriteXKBKeycodes(FILE * /* file */ ,
+                                          XkbDescPtr /* result */ ,
+                                          Bool /* topLevel */ ,
+                                          Bool /* showImplicit */ ,
+                                          XkbFileAddOnFunc /* addOn */ ,
+                                          void *        /* priv */
+    );
+
+extern _X_EXPORT Bool XkbWriteXKBKeyTypes(FILE * /* file */ ,
+                                          XkbDescPtr /* result */ ,
+                                          Bool /* topLevel */ ,
+                                          Bool /* showImplicit */ ,
+                                          XkbFileAddOnFunc /* addOn */ ,
+                                          void *        /* priv */
+    );
+
+extern _X_EXPORT Bool XkbWriteXKBCompatMap(FILE * /* file */ ,
+                                           XkbDescPtr /* result */ ,
+                                           Bool /* topLevel */ ,
+                                           Bool /* showImplicit */ ,
+                                           XkbFileAddOnFunc /* addOn */ ,
+                                           void *       /* priv */
+    );
+
+extern _X_EXPORT Bool XkbWriteXKBSymbols(FILE * /* file */ ,
+                                         XkbDescPtr /* result */ ,
+                                         Bool /* topLevel */ ,
+                                         Bool /* showImplicit */ ,
+                                         XkbFileAddOnFunc /* addOn */ ,
+                                         void * /* priv */
+    );
+
+extern _X_EXPORT Bool XkbWriteXKBGeometry(FILE * /* file */ ,
+                                          XkbDescPtr /* result */ ,
+                                          Bool /* topLevel */ ,
+                                          Bool /* showImplicit */ ,
+                                          XkbFileAddOnFunc /* addOn */ ,
+                                          void *        /* priv */
+    );
+
+/***====================================================================***/
+
 extern _X_EXPORT unsigned XkmReadFile(FILE * /* file */ ,
                                       unsigned /* need */ ,
                                       unsigned /* want */ ,
diff --git a/xkb/xkbfmisc.c b/xkb/xkbfmisc.c
index 2ec3b85ed..c09c11b1a 100644
--- a/xkb/xkbfmisc.c
+++ b/xkb/xkbfmisc.c
@@ -37,7 +37,6 @@
 #include <X11/Xproto.h>
 
 #include "xkb/xkbfmisc_priv.h"
-#include "xkb/xkbout_priv.h"
 
 #include "misc.h"
 #include "inputstr.h"
diff --git a/xkb/xkbout.c b/xkb/xkbout.c
index e1b97a56f..1fd45e7af 100644
--- a/xkb/xkbout.c
+++ b/xkb/xkbout.c
@@ -36,7 +36,6 @@
 #include <X11/extensions/XKMformat.h>
 
 #include "xkb/xkbfmisc_priv.h"
-#include "xkb/xkbout_priv.h"
 #include "xkb/xkbtext_priv.h"
 
 #include "misc.h"
diff --git a/xkb/xkbout_priv.h b/xkb/xkbout_priv.h
deleted file mode 100644
index 790a009ec..000000000
--- a/xkb/xkbout_priv.h
+++ /dev/null
@@ -1,32 +0,0 @@
-/* SPDX-License-Identifier: MIT OR X11
- *
- * Copyright © 2024 Enrico Weigelt, metux IT consult <info at metux.net>
- */
-#ifndef _XSERVER_XKB_XKBFOUT_PRIV_H
-#define _XSERVER_XKB_XKBFOUT_PRIV_H
-
-#include <stdio.h>
-#include <X11/X.h>
-#include <X11/Xdefs.h>
-
-#include "xkbstr.h"
-
-typedef void (*XkbFileAddOnFunc) (FILE *file,
-                                  XkbDescPtr result,
-                                  Bool topLevel,
-                                  Bool showImplicit,
-                                  int fileSection,
-                                  void *priv);
-
-Bool XkbWriteXKBKeyTypes(FILE *file, XkbDescPtr result, Bool topLevel,
-                         Bool showImplicit, XkbFileAddOnFunc addOn, void *priv);
-Bool XkbWriteXKBKeycodes(FILE *file, XkbDescPtr result, Bool topLevel,
-                         Bool showImplicit, XkbFileAddOnFunc addOn, void *priv);
-Bool XkbWriteXKBCompatMap(FILE *file, XkbDescPtr result, Bool topLevel,
-                          Bool showImplicit, XkbFileAddOnFunc addOn, void *priv);
-Bool XkbWriteXKBSymbols(FILE *file, XkbDescPtr result, Bool topLevel,
-                        Bool showImplicit, XkbFileAddOnFunc addOn, void *priv);
-Bool XkbWriteXKBGeometry(FILE *file, XkbDescPtr result, Bool topLevel,
-                         Bool showImplicit, XkbFileAddOnFunc addOn, void *priv);
-
-#endif /* _XSERVER_XKB_XKBFOUT_PRIV_H */
commit f666efd73a1c60c60fb00e5f8153676cb4c3386e
Author: Alan Coopersmith <alan.coopersmith at oracle.com>
Date:   Sat Jul 12 11:47:06 2025 -0700

    Revert "xkb: unexport remaining internal declarations"
    
    This reverts commit 3f8a5475c917326c780f87e3f2dff11cd7d17d0f.
    
    Part-of: <https://gitlab.freedesktop.org/xorg/xserver/-/merge_requests/2046>

diff --git a/include/xkbfile.h b/include/xkbfile.h
index 9bc25cd94..172d0c1f7 100644
--- a/include/xkbfile.h
+++ b/include/xkbfile.h
@@ -29,4 +29,53 @@
 
 #include "xkbstr.h"
 
+typedef void (*XkbFileAddOnFunc) (FILE * /* file */ ,
+                                  XkbDescPtr /* result */ ,
+                                  Bool /* topLevel */ ,
+                                  Bool /* showImplicit */ ,
+                                  int /* fileSection */ ,
+                                  void *        /* priv */
+    );
+
+/***====================================================================***/
+
+#define	_XkbSuccess			0	/* unused */
+#define	_XkbErrMissingNames		1
+#define	_XkbErrMissingTypes		2
+#define	_XkbErrMissingReqTypes		3
+#define	_XkbErrMissingSymbols		4
+#define	_XkbErrMissingVMods		5	/* unused */
+#define	_XkbErrMissingIndicators	6	/* unused */
+#define	_XkbErrMissingCompatMap		7
+#define	_XkbErrMissingSymInterps	8	/* unused */
+#define	_XkbErrMissingGeometry		9
+#define	_XkbErrIllegalDoodad		10	/* unused */
+#define	_XkbErrIllegalTOCType		11	/* unused */
+#define	_XkbErrIllegalContents		12
+#define	_XkbErrEmptyFile		13	/* unused */
+#define	_XkbErrFileNotFound		14	/* unused */
+#define	_XkbErrFileCannotOpen		15	/* unused */
+#define	_XkbErrBadValue			16
+#define	_XkbErrBadMatch			17
+#define	_XkbErrBadTypeName		18
+#define	_XkbErrBadTypeWidth		19
+#define	_XkbErrBadFileType		20
+#define	_XkbErrBadFileVersion		21
+#define	_XkbErrBadFileFormat		22	/* unused */
+#define	_XkbErrBadAlloc			23
+#define	_XkbErrBadLength		24
+#define	_XkbErrXReqFailure		25	/* unused */
+#define	_XkbErrBadImplementation	26
+
+/***====================================================================***/
+
+_XFUNCPROTOBEGIN
+
+extern _X_EXPORT unsigned XkmReadFile(FILE * /* file */ ,
+                                      unsigned /* need */ ,
+                                      unsigned /* want */ ,
+                                      XkbDescPtr *      /* result */
+    );
+
+_XFUNCPROTOEND
 #endif                          /* _XKBFILE_H_ */
diff --git a/xkb/ddxLoad.c b/xkb/ddxLoad.c
index e147aabce..bfdb6f467 100644
--- a/xkb/ddxLoad.c
+++ b/xkb/ddxLoad.c
@@ -40,7 +40,6 @@ THE USE OR PERFORMANCE OF THIS SOFTWARE.
 
 #include "dix/dix_priv.h"
 #include "os/osdep.h"
-#include "xkb/xkbfile_priv.h"
 #include "xkb/xkbfmisc_priv.h"
 
 #include "inputstr.h"
diff --git a/xkb/xkbfile_priv.h b/xkb/xkbfile_priv.h
deleted file mode 100644
index 3a37b9d49..000000000
--- a/xkb/xkbfile_priv.h
+++ /dev/null
@@ -1,45 +0,0 @@
-/* SPDX-License-Identifier: MIT OR X11
- *
- * Copyright © 2024 Enrico Weigelt, metux IT consult <info at metux.net>
- * Copyright © 1994 by Silicon Graphics Computer Systems, Inc.
- */
-#ifndef _XSERVER_XKB_XKBFILE_PRIV_H
-#define _XSERVER_XKB_XKBFILE_PRIV_H
-
-#include <stdio.h>
-#include <X11/X.h>
-#include <X11/Xdefs.h>
-
-#include "xkbstr.h"
-
-/* XKB error codes */
-#define _XkbErrMissingNames		1
-#define _XkbErrMissingTypes		2
-#define _XkbErrMissingReqTypes		3
-#define _XkbErrMissingSymbols		4
-#define _XkbErrMissingCompatMap		7
-#define _XkbErrMissingGeometry		9
-#define _XkbErrIllegalContents		12
-#define _XkbErrBadValue			16
-#define _XkbErrBadMatch			17
-#define _XkbErrBadTypeName		18
-#define _XkbErrBadTypeWidth		19
-#define _XkbErrBadFileType		20
-#define _XkbErrBadFileVersion		21
-#define _XkbErrBadAlloc			23
-#define _XkbErrBadLength		24
-#define _XkbErrBadImplementation	26
-
-/*
- * read xkm file
- *
- * @param file the FILE to read from
- * @param need mask of needed elements (fails if some are missing)
- * @param want mask of wanted elements
- * @param result pointer to xkb descriptor to load the data into
- * @return mask of elements missing (from need | want)
- */
-unsigned XkmReadFile(FILE *file, unsigned need, unsigned want,
-                     XkbDescPtr *result);
-
-#endif /* _XSERVER_XKB_XKBFILE_PRIV_H */
diff --git a/xkb/xkmread.c b/xkb/xkmread.c
index cdcb443ba..b40f8fc64 100644
--- a/xkb/xkmread.c
+++ b/xkb/xkmread.c
@@ -34,7 +34,6 @@
 #include <X11/keysym.h>
 #include <X11/extensions/XKMformat.h>
 
-#include "xkb/xkbfile_priv.h"
 #include "xkb/xkbfmisc_priv.h"
 
 #include "misc.h"
commit 8540bda07aa2b1c7399f56f3e563ff2bde3d8d4f
Author: Alan Coopersmith <alan.coopersmith at oracle.com>
Date:   Sat Jul 12 11:47:06 2025 -0700

    Revert "include: drop now empty xkbfile.h"
    
    This reverts commit f8fc46cbbfa3253d24d65fc2d129f8b4b5fd76aa.
    
    Part-of: <https://gitlab.freedesktop.org/xorg/xserver/-/merge_requests/2046>

diff --git a/hw/xfree86/sdksyms.sh b/hw/xfree86/sdksyms.sh
index 4747846f5..4df88f63f 100755
--- a/hw/xfree86/sdksyms.sh
+++ b/hw/xfree86/sdksyms.sh
@@ -271,6 +271,7 @@ cat > sdksyms.c << EOF
 #include "window.h"
 #include "windowstr.h"
 #include "xace.h"
+#include "xkbfile.h"
 #include "xkbsrv.h"
 #include "xkbstr.h"
 #include "xkbrules.h"
diff --git a/include/meson.build b/include/meson.build
index 994b4cfba..2393c1625 100644
--- a/include/meson.build
+++ b/include/meson.build
@@ -499,6 +499,7 @@ if build_xorg
             'displaymode.h',
             'window.h',
             'windowstr.h',
+            'xkbfile.h',
             'xkbsrv.h',
             'xkbstr.h',
             'xkbrules.h',
diff --git a/include/xkbfile.h b/include/xkbfile.h
new file mode 100644
index 000000000..9bc25cd94
--- /dev/null
+++ b/include/xkbfile.h
@@ -0,0 +1,32 @@
+/************************************************************
+ Copyright (c) 1994 by Silicon Graphics Computer Systems, Inc.
+
+ Permission to use, copy, modify, and distribute this
+ software and its documentation for any purpose and without
+ fee is hereby granted, provided that the above copyright
+ notice appear in all copies and that both that copyright
+ notice and this permission notice appear in supporting
+ documentation, and that the name of Silicon Graphics not be
+ used in advertising or publicity pertaining to distribution
+ of the software without specific prior written permission.
+ Silicon Graphics makes no representation about the suitability
+ of this software for any purpose. It is provided "as is"
+ without any express or implied warranty.
+
+ SILICON GRAPHICS DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS
+ SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
+ AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL SILICON
+ GRAPHICS BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL
+ DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+ DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
+ OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION  WITH
+ THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+ ********************************************************/
+
+#ifndef _XKBFILE_H_
+#define	_XKBFILE_H_ 1
+
+#include "xkbstr.h"
+
+#endif                          /* _XKBFILE_H_ */
diff --git a/include/xkbsrv.h b/include/xkbsrv.h
index ab3a40743..2f291886b 100644
--- a/include/xkbsrv.h
+++ b/include/xkbsrv.h
@@ -818,7 +818,7 @@ extern _X_EXPORT Bool XkbDeviceApplyKeymap(DeviceIntPtr /* dst */ ,
 extern _X_EXPORT void XkbCopyControls(XkbDescPtr /* dst */ ,
                                       XkbDescPtr /* src */ );
 
-#include "xkbstr.h"
+#include "xkbfile.h"
 #include "xkbrules.h"
 
 extern _X_EXPORT unsigned int XkbDDXLoadKeymapByNames(DeviceIntPtr /* keybd */ ,
diff --git a/test/test_xkb.c b/test/test_xkb.c
index 11a0f4ce8..2fd9d1f36 100644
--- a/test/test_xkb.c
+++ b/test/test_xkb.c
@@ -44,6 +44,7 @@
 #include <xkbsrv.h>
 #include "../xkb/xkbgeom.h"
 #include <X11/extensions/XKMformat.h>
+#include "xkbfile.h"
 #include <assert.h>
 
 #include "tests-common.h"
diff --git a/xkb/xkbInit.c b/xkb/xkbInit.c
index edd4de4b5..2819935eb 100644
--- a/xkb/xkbInit.c
+++ b/xkb/xkbInit.c
@@ -48,6 +48,7 @@ THE USE OR PERFORMANCE OF THIS SOFTWARE.
 #include "property.h"
 #include "scrnintstr.h"
 #include "xkbgeom.h"
+#include "xkbfile.h"
 
 #define	CREATE_ATOM(s)	MakeAtom(s,sizeof(s)-1,1)
 
diff --git a/xkb/xkbout.c b/xkb/xkbout.c
index a8b2f1523..e1b97a56f 100644
--- a/xkb/xkbout.c
+++ b/xkb/xkbout.c
@@ -46,6 +46,7 @@
 #include <xkbsrv.h>
 
 #include "xkbgeom.h"
+#include "xkbfile.h"
 
 #define	VMOD_HIDE_VALUE	0
 #define	VMOD_SHOW_VALUE	1
commit d8aedc5cfc705e36c22041e06682621020b13413
Author: Alan Coopersmith <alan.coopersmith at oracle.com>
Date:   Sat Jul 12 11:47:06 2025 -0700

    Revert "xkb: drop unused XkbRF_LoadRulesByName()"
    
    This reverts commit e38eeb471865b7a7812583d55f8f9991f8a0271a.
    
    Part-of: <https://gitlab.freedesktop.org/xorg/xserver/-/merge_requests/2046>

diff --git a/include/xkbrules.h b/include/xkbrules.h
index 8832c01e2..ab5b4b266 100644
--- a/include/xkbrules.h
+++ b/include/xkbrules.h
@@ -98,6 +98,13 @@ extern _X_EXPORT Bool XkbRF_LoadRules(FILE * /* file */ ,
                                       XkbRF_RulesPtr    /* rules */
     );
 
+extern _X_EXPORT Bool XkbRF_LoadRulesByName(char * /* base */ ,
+                                            char * /* locale */ ,
+                                            XkbRF_RulesPtr      /* rules */
+    );
+
+/***====================================================================***/
+
 extern _X_EXPORT XkbRF_RulesPtr XkbRF_Create(void);
 
 extern _X_EXPORT void XkbRF_Free(XkbRF_RulesPtr /* rules */ ,
diff --git a/xkb/maprules.c b/xkb/maprules.c
index a324c67a0..0b6c107ae 100644
--- a/xkb/maprules.c
+++ b/xkb/maprules.c
@@ -963,6 +963,37 @@ XkbRF_LoadRules(FILE * file, XkbRF_RulesPtr rules)
     return TRUE;
 }
 
+Bool
+XkbRF_LoadRulesByName(char *base, char *locale, XkbRF_RulesPtr rules)
+{
+    FILE *file;
+    char buf[PATH_MAX];
+    Bool ok;
+
+    if ((!base) || (!rules))
+        return FALSE;
+    if (locale) {
+        if (snprintf(buf, PATH_MAX, "%s-%s", base, locale) >= PATH_MAX)
+            return FALSE;
+    }
+    else {
+        if (strlen(base) + 1 > PATH_MAX)
+            return FALSE;
+        strcpy(buf, base);
+    }
+
+    file = fopen(buf, "r");
+    if ((!file) && (locale)) {  /* fallback if locale was specified */
+        strcpy(buf, base);
+        file = fopen(buf, "r");
+    }
+    if (!file)
+        return FALSE;
+    ok = XkbRF_LoadRules(file, rules);
+    fclose(file);
+    return ok;
+}
+
 /***====================================================================***/
 
 XkbRF_RulesPtr
commit f21c9b9fc3a9cfbce22dc5de5daad9b23e87a284
Author: Alan Coopersmith <alan.coopersmith at oracle.com>
Date:   Sat Jul 12 11:47:06 2025 -0700

    Revert "xkb: drop unused _XKB_RF_NAMES_PROP_MAXLEN define"
    
    This reverts commit 975aed300e0a32118a98a7aaf2a5a0cab26a18e6.
    
    Part-of: <https://gitlab.freedesktop.org/xorg/xserver/-/merge_requests/2046>

diff --git a/include/xkbrules.h b/include/xkbrules.h
index 0203984fe..8832c01e2 100644
--- a/include/xkbrules.h
+++ b/include/xkbrules.h
@@ -107,6 +107,7 @@ extern _X_EXPORT void XkbRF_Free(XkbRF_RulesPtr /* rules */ ,
 /***====================================================================***/
 
 #define	_XKB_RF_NAMES_PROP_ATOM		"_XKB_RULES_NAMES"
+#define	_XKB_RF_NAMES_PROP_MAXLEN	1024
 
 _XFUNCPROTOEND
 #endif                          /* _XKBRULES_H_ */
commit d74398ef1d596290681c39323572fd4611fad62e
Author: Alan Coopersmith <alan.coopersmith at oracle.com>
Date:   Sat Jul 12 11:47:06 2025 -0700

    Revert "xkb: drop unused XkbRF_Invalid define from xkbrules.h"
    
    This reverts commit 5030f23f943d632416e304365c481d9d67dc70c1.
    
    Part-of: <https://gitlab.freedesktop.org/xorg/xserver/-/merge_requests/2046>

diff --git a/include/xkbrules.h b/include/xkbrules.h
index 8f8ad11e7..0203984fe 100644
--- a/include/xkbrules.h
+++ b/include/xkbrules.h
@@ -71,6 +71,7 @@ typedef struct _XkbRF_Group {
 #define	XkbRF_Option		(1L<<2)
 #define	XkbRF_Append		(1L<<3)
 #define	XkbRF_Normal		(1L<<4)
+#define	XkbRF_Invalid		(1L<<5)
 
 typedef struct _XkbRF_Rules {
     unsigned short sz_rules;
commit 9cac71e660beea6882afc4d51e90894f025708ed
Author: Alan Coopersmith <alan.coopersmith at oracle.com>
Date:   Sat Jul 12 11:47:06 2025 -0700

    Revert "xkb: move _XKB_RF_NAMES_PROP_ATOM define into xkbInit.c"
    
    This reverts commit 1a9592ea4b37fbdcb7cbf0f72dcde5159cfd6094.
    
    Part-of: <https://gitlab.freedesktop.org/xorg/xserver/-/merge_requests/2046>

diff --git a/include/xkbrules.h b/include/xkbrules.h
index 6be20ea5f..8f8ad11e7 100644
--- a/include/xkbrules.h
+++ b/include/xkbrules.h
@@ -103,5 +103,9 @@ extern _X_EXPORT void XkbRF_Free(XkbRF_RulesPtr /* rules */ ,
                                  Bool   /* freeRules */
     );
 
+/***====================================================================***/
+
+#define	_XKB_RF_NAMES_PROP_ATOM		"_XKB_RULES_NAMES"
+
 _XFUNCPROTOEND
 #endif                          /* _XKBRULES_H_ */
diff --git a/xkb/xkbInit.c b/xkb/xkbInit.c
index d187a1e87..edd4de4b5 100644
--- a/xkb/xkbInit.c
+++ b/xkb/xkbInit.c
@@ -49,8 +49,6 @@ THE USE OR PERFORMANCE OF THIS SOFTWARE.
 #include "scrnintstr.h"
 #include "xkbgeom.h"
 
-#define      _XKB_RF_NAMES_PROP_ATOM         "_XKB_RULES_NAMES"
-
 #define	CREATE_ATOM(s)	MakeAtom(s,sizeof(s)-1,1)
 
 #if defined(__alpha) || defined(__alpha__)
commit adf0fa5b195148c8342771906db2e27050c30985
Author: Alan Coopersmith <alan.coopersmith at oracle.com>
Date:   Sat Jul 12 11:47:06 2025 -0700

    Revert "xkb: move XkbRF_* defines into xkb/maprules.c"
    
    This reverts commit b535fd7a4c4baec990e726fb2c4c00b74c1cc57b.
    
    Part-of: <https://gitlab.freedesktop.org/xorg/xserver/-/merge_requests/2046>

diff --git a/include/xkbrules.h b/include/xkbrules.h
index 74473cb24..6be20ea5f 100644
--- a/include/xkbrules.h
+++ b/include/xkbrules.h
@@ -67,6 +67,11 @@ typedef struct _XkbRF_Group {
     char *words;
 } XkbRF_GroupRec, *XkbRF_GroupPtr;
 
+#define	XkbRF_PendingMatch	(1L<<1)
+#define	XkbRF_Option		(1L<<2)
+#define	XkbRF_Append		(1L<<3)
+#define	XkbRF_Normal		(1L<<4)
+
 typedef struct _XkbRF_Rules {
     unsigned short sz_rules;
     unsigned short num_rules;
diff --git a/xkb/maprules.c b/xkb/maprules.c
index 395b5bfab..a324c67a0 100644
--- a/xkb/maprules.c
+++ b/xkb/maprules.c
@@ -47,11 +47,7 @@
 #include "xkbstr.h"
 #include <xkbsrv.h>
 
-
-#define XkbRF_PendingMatch      (1L<<1)
-#define XkbRF_Option            (1L<<2)
-#define XkbRF_Append            (1L<<3)
-#define XkbRF_Normal            (1L<<4)
+/***====================================================================***/
 
 #define DFLT_LINE_SIZE	128
 
commit ef329d6a5c50f4b5c775f8fb5aad07caea809c3c
Author: Alan Coopersmith <alan.coopersmith at oracle.com>
Date:   Sat Jul 12 11:47:06 2025 -0700

    Revert "xkb: unexport XkbRF_GetComponents()"
    
    This reverts commit d3b328ba4a70bc74f9dde6d004023b185d70beaa.
    
    Part-of: <https://gitlab.freedesktop.org/xorg/xserver/-/merge_requests/2046>

diff --git a/include/xkbrules.h b/include/xkbrules.h
index 97887ec78..74473cb24 100644
--- a/include/xkbrules.h
+++ b/include/xkbrules.h
@@ -80,6 +80,14 @@ typedef struct _XkbRF_Rules {
 
 _XFUNCPROTOBEGIN
 
+/* Seems preferable to dragging xkbstr.h in. */
+    struct _XkbComponentNames;
+
+extern _X_EXPORT Bool XkbRF_GetComponents(XkbRF_RulesPtr /* rules */ ,
+                                          XkbRF_VarDefsPtr /* var_defs */ ,
+                                          struct _XkbComponentNames *   /* names */
+    );
+
 extern _X_EXPORT Bool XkbRF_LoadRules(FILE * /* file */ ,
                                       XkbRF_RulesPtr    /* rules */
     );
diff --git a/xkb/ddxLoad.c b/xkb/ddxLoad.c
index 8001cb25d..e147aabce 100644
--- a/xkb/ddxLoad.c
+++ b/xkb/ddxLoad.c
@@ -42,7 +42,6 @@ THE USE OR PERFORMANCE OF THIS SOFTWARE.
 #include "os/osdep.h"
 #include "xkb/xkbfile_priv.h"
 #include "xkb/xkbfmisc_priv.h"
-#include "xkb/xkbrules_priv.h"
 
 #include "inputstr.h"
 #include "scrnintstr.h"
diff --git a/xkb/maprules.c b/xkb/maprules.c
index 83abe8076..395b5bfab 100644
--- a/xkb/maprules.c
+++ b/xkb/maprules.c
@@ -40,9 +40,6 @@
 #include <X11/Xfuncs.h>
 #include <X11/Xatom.h>
 #include <X11/keysym.h>
-
-#include "xkb/xkbrules_priv.h"
-
 #include "misc.h"
 #include "inputstr.h"
 #include "dix.h"
diff --git a/xkb/xkbrules_priv.h b/xkb/xkbrules_priv.h
deleted file mode 100644
index 7e73ec7a3..000000000
--- a/xkb/xkbrules_priv.h
+++ /dev/null
@@ -1,18 +0,0 @@
-/* SPDX-License-Identifier: MIT OR X11
- *
- * Copyright © 2024 Enrico Weigelt, metux IT consult <info at metux.net>
- */
-#ifndef _XSERVER_XKB_XKBRULES_PRIV_H
-#define _XSERVER_XKB_XKBRULES_PRIV_H
-
-#include <X11/Xdefs.h>
-
-#include "include/xkbrules.h"
-
-struct _XkbComponentNames;
-
-Bool XkbRF_GetComponents(XkbRF_RulesPtr rules,
-                         XkbRF_VarDefsPtr var_defs,
-                         struct _XkbComponentNames *names);
-
-#endif /* _XSERVER_XKB_XKBRULES_PRIV_H */
commit fef268f6801790e10dcf7327cdb707548e995513
Author: Alan Coopersmith <alan.coopersmith at oracle.com>
Date:   Sat Jul 12 11:47:06 2025 -0700

    Revert "xkb: unexport XkbRF_LoadRules()"
    
    This reverts commit c376cd2c3dfc82b842e0db8abdddd6fa0e455cdb.
    
    Part-of: <https://gitlab.freedesktop.org/xorg/xserver/-/merge_requests/2046>

diff --git a/include/xkbrules.h b/include/xkbrules.h
index 11bd6ab93..97887ec78 100644
--- a/include/xkbrules.h
+++ b/include/xkbrules.h
@@ -80,6 +80,10 @@ typedef struct _XkbRF_Rules {
 
 _XFUNCPROTOBEGIN
 
+extern _X_EXPORT Bool XkbRF_LoadRules(FILE * /* file */ ,
+                                      XkbRF_RulesPtr    /* rules */
+    );
+
 extern _X_EXPORT XkbRF_RulesPtr XkbRF_Create(void);
 
 extern _X_EXPORT void XkbRF_Free(XkbRF_RulesPtr /* rules */ ,
diff --git a/xkb/xkbrules_priv.h b/xkb/xkbrules_priv.h
index e498f6ced..7e73ec7a3 100644
--- a/xkb/xkbrules_priv.h
+++ b/xkb/xkbrules_priv.h
@@ -5,7 +5,6 @@
 #ifndef _XSERVER_XKB_XKBRULES_PRIV_H
 #define _XSERVER_XKB_XKBRULES_PRIV_H
 
-#include <stdio.h>
 #include <X11/Xdefs.h>
 
 #include "include/xkbrules.h"
@@ -16,6 +15,4 @@ Bool XkbRF_GetComponents(XkbRF_RulesPtr rules,
                          XkbRF_VarDefsPtr var_defs,
                          struct _XkbComponentNames *names);
 
-Bool XkbRF_LoadRules(FILE *file, XkbRF_RulesPtr rules);
-
 #endif /* _XSERVER_XKB_XKBRULES_PRIV_H */
commit cb285e18c0a75f7a02968bb0c2ecdbd24e49050c
Author: Alan Coopersmith <alan.coopersmith at oracle.com>
Date:   Sat Jul 12 11:47:06 2025 -0700

    Revert "xkb: unexport XkbRF_Create()"
    
    This reverts commit 89475cbed488b46278ca46812d6443eba9d33797.
    
    Part-of: <https://gitlab.freedesktop.org/xorg/xserver/-/merge_requests/2046>

diff --git a/include/xkbrules.h b/include/xkbrules.h
index ac9de2bfd..11bd6ab93 100644
--- a/include/xkbrules.h
+++ b/include/xkbrules.h
@@ -80,6 +80,8 @@ typedef struct _XkbRF_Rules {
 
 _XFUNCPROTOBEGIN
 
+extern _X_EXPORT XkbRF_RulesPtr XkbRF_Create(void);
+
 extern _X_EXPORT void XkbRF_Free(XkbRF_RulesPtr /* rules */ ,
                                  Bool   /* freeRules */
     );
diff --git a/xkb/xkbrules_priv.h b/xkb/xkbrules_priv.h
index 932ce3f1d..e498f6ced 100644
--- a/xkb/xkbrules_priv.h
+++ b/xkb/xkbrules_priv.h
@@ -18,6 +18,4 @@ Bool XkbRF_GetComponents(XkbRF_RulesPtr rules,
 
 Bool XkbRF_LoadRules(FILE *file, XkbRF_RulesPtr rules);
 
-XkbRF_RulesPtr XkbRF_Create(void);
-
 #endif /* _XSERVER_XKB_XKBRULES_PRIV_H */
commit dafa74fa1bb435c08bf863888517d5ac79090017
Author: Alan Coopersmith <alan.coopersmith at oracle.com>
Date:   Sat Jul 12 11:47:06 2025 -0700

    Revert "xkb: unexport XkbRF_Free()"
    
    This reverts commit 34372cb3da14f6086614ca4d8c9c5294c7b793bf.
    
    Part-of: <https://gitlab.freedesktop.org/xorg/xserver/-/merge_requests/2046>

diff --git a/include/xkbrules.h b/include/xkbrules.h
index b2c1c7230..ac9de2bfd 100644
--- a/include/xkbrules.h
+++ b/include/xkbrules.h
@@ -76,4 +76,13 @@ typedef struct _XkbRF_Rules {
     XkbRF_GroupPtr groups;
 } XkbRF_RulesRec, *XkbRF_RulesPtr;
 
+/***====================================================================***/
+
+_XFUNCPROTOBEGIN
+
+extern _X_EXPORT void XkbRF_Free(XkbRF_RulesPtr /* rules */ ,
+                                 Bool   /* freeRules */
+    );
+
+_XFUNCPROTOEND
 #endif                          /* _XKBRULES_H_ */
diff --git a/xkb/xkbrules_priv.h b/xkb/xkbrules_priv.h
index 8f1688030..932ce3f1d 100644
--- a/xkb/xkbrules_priv.h
+++ b/xkb/xkbrules_priv.h
@@ -20,6 +20,4 @@ Bool XkbRF_LoadRules(FILE *file, XkbRF_RulesPtr rules);
 
 XkbRF_RulesPtr XkbRF_Create(void);
 
-void XkbRF_Free(XkbRF_RulesPtr rules, Bool freeRules);
-
 #endif /* _XSERVER_XKB_XKBRULES_PRIV_H */
commit 01fa00fb906b21199233f76c774a505768df4b17
Author: Alan Coopersmith <alan.coopersmith at oracle.com>
Date:   Sat Jul 12 11:47:06 2025 -0700

    Revert "xkb: unexport XkbRF_RulesRec struct"
    
    This reverts commit 043dc8041c09c444fe04b0322518205bd668b31c.
    
    Part-of: <https://gitlab.freedesktop.org/xorg/xserver/-/merge_requests/2046>

diff --git a/include/xkbrules.h b/include/xkbrules.h
index 98068afac..b2c1c7230 100644
--- a/include/xkbrules.h
+++ b/include/xkbrules.h
@@ -67,4 +67,13 @@ typedef struct _XkbRF_Group {
     char *words;
 } XkbRF_GroupRec, *XkbRF_GroupPtr;
 
+typedef struct _XkbRF_Rules {
+    unsigned short sz_rules;
+    unsigned short num_rules;
+    XkbRF_RulePtr rules;
+    unsigned short sz_groups;
+    unsigned short num_groups;
+    XkbRF_GroupPtr groups;
+} XkbRF_RulesRec, *XkbRF_RulesPtr;
+
 #endif                          /* _XKBRULES_H_ */
diff --git a/xkb/xkbrules_priv.h b/xkb/xkbrules_priv.h
index 71b1a8cd0..8f1688030 100644
--- a/xkb/xkbrules_priv.h
+++ b/xkb/xkbrules_priv.h
@@ -10,15 +10,6 @@
 
 #include "include/xkbrules.h"
 
-typedef struct _XkbRF_Rules {
-    unsigned short sz_rules;
-    unsigned short num_rules;
-    XkbRF_RulePtr rules;
-    unsigned short sz_groups;
-    unsigned short num_groups;
-    XkbRF_GroupPtr groups;
-} XkbRF_RulesRec, *XkbRF_RulesPtr;
-
 struct _XkbComponentNames;
 
 Bool XkbRF_GetComponents(XkbRF_RulesPtr rules,
commit 396e3e7a54dab218ab9dde518912da936990480a
Author: Alan Coopersmith <alan.coopersmith at oracle.com>
Date:   Sat Jul 12 11:47:06 2025 -0700

    Revert "xkb: unexport XkbRF_GroupRec struct"
    
    This reverts commit 83c8a90a61a2dbeb755752ac66e16506be9aba34.
    
    Part-of: <https://gitlab.freedesktop.org/xorg/xserver/-/merge_requests/2046>

diff --git a/include/xkbrules.h b/include/xkbrules.h
index 2add6996e..98068afac 100644
--- a/include/xkbrules.h
+++ b/include/xkbrules.h
@@ -61,4 +61,10 @@ typedef struct _XkbRF_Rule {
     unsigned flags;
 } XkbRF_RuleRec, *XkbRF_RulePtr;
 
+typedef struct _XkbRF_Group {
+    int number;
+    const char *name;
+    char *words;
+} XkbRF_GroupRec, *XkbRF_GroupPtr;
+
 #endif                          /* _XKBRULES_H_ */
diff --git a/xkb/xkbrules_priv.h b/xkb/xkbrules_priv.h
index 918be5339..71b1a8cd0 100644
--- a/xkb/xkbrules_priv.h
+++ b/xkb/xkbrules_priv.h
@@ -10,12 +10,6 @@
 
 #include "include/xkbrules.h"
 
-typedef struct _XkbRF_Group {
-    int number;
-    const char *name;
-    char *words;
-} XkbRF_GroupRec, *XkbRF_GroupPtr;
-
 typedef struct _XkbRF_Rules {
     unsigned short sz_rules;
     unsigned short num_rules;
commit 033936539b55cb7a923ea3fc7fbdde3f8f9dc2b9
Author: Alan Coopersmith <alan.coopersmith at oracle.com>
Date:   Sat Jul 12 11:47:06 2025 -0700

    Revert "xkb: unexport XkbRF_RuleRec struct"
    
    This reverts commit a82fa008359022ed1beb05d403d3f1dbe933b2ff.
    
    Part-of: <https://gitlab.freedesktop.org/xorg/xserver/-/merge_requests/2046>

diff --git a/include/xkbrules.h b/include/xkbrules.h
index 20ea78e17..2add6996e 100644
--- a/include/xkbrules.h
+++ b/include/xkbrules.h
@@ -44,4 +44,21 @@ typedef struct _XkbRF_VarDefs {
     const char *options;
 } XkbRF_VarDefsRec, *XkbRF_VarDefsPtr;
 
+typedef struct _XkbRF_Rule {
+    int number;
+    int layout_num;
+    int variant_num;
+    const char *model;
+    const char *layout;
+    const char *variant;
+    const char *option;
+    /* yields */
+    const char *keycodes;
+    const char *symbols;
+    const char *types;
+    const char *compat;
+    const char *geometry;
+    unsigned flags;
+} XkbRF_RuleRec, *XkbRF_RulePtr;
+
 #endif                          /* _XKBRULES_H_ */
diff --git a/xkb/xkbrules_priv.h b/xkb/xkbrules_priv.h
index b494edb8d..918be5339 100644
--- a/xkb/xkbrules_priv.h
+++ b/xkb/xkbrules_priv.h
@@ -10,23 +10,6 @@
 
 #include "include/xkbrules.h"
 
-typedef struct _XkbRF_Rule {
-    int number;
-    int layout_num;
-    int variant_num;
-    const char *model;
-    const char *layout;
-    const char *variant;
-    const char *option;
-    /* yields */
-    const char *keycodes;
-    const char *symbols;
-    const char *types;
-    const char *compat;
-    const char *geometry;
-    unsigned flags;
-} XkbRF_RuleRec, *XkbRF_RulePtr;
-
 typedef struct _XkbRF_Group {
     int number;
     const char *name;
commit 950462f6e67db0e358643e0a488404dc630a9d88
Author: Alan Coopersmith <alan.coopersmith at oracle.com>
Date:   Sat Jul 12 11:47:06 2025 -0700

    Revert "xkb: make XkbRF_Create() static inline"
    
    This reverts commit 60d37d0158ad9e1c29e4740e73911083e218c332.
    
    Part-of: <https://gitlab.freedesktop.org/xorg/xserver/-/merge_requests/2046>

diff --git a/xkb/maprules.c b/xkb/maprules.c
index 9c6f7c2b3..83abe8076 100644
--- a/xkb/maprules.c
+++ b/xkb/maprules.c
@@ -970,6 +970,16 @@ XkbRF_LoadRules(FILE * file, XkbRF_RulesPtr rules)
     return TRUE;
 }
 
+/***====================================================================***/
+
+XkbRF_RulesPtr
+XkbRF_Create(void)
+{
+    return calloc(1, sizeof(XkbRF_RulesRec));
+}
+
+/***====================================================================***/
+
 void
 XkbRF_Free(XkbRF_RulesPtr rules, Bool freeRules)
 {
diff --git a/xkb/xkbrules_priv.h b/xkb/xkbrules_priv.h
index 3739c15a8..b494edb8d 100644
--- a/xkb/xkbrules_priv.h
+++ b/xkb/xkbrules_priv.h
@@ -6,7 +6,6 @@
 #define _XSERVER_XKB_XKBRULES_PRIV_H
 
 #include <stdio.h>
-#include <stdlib.h>
 #include <X11/Xdefs.h>
 
 #include "include/xkbrules.h"
@@ -51,10 +50,7 @@ Bool XkbRF_GetComponents(XkbRF_RulesPtr rules,
 
 Bool XkbRF_LoadRules(FILE *file, XkbRF_RulesPtr rules);
 
-static inline XkbRF_RulesPtr XkbRF_Create(void)
-{
-    return calloc(1, sizeof(XkbRF_RulesRec));
-}
+XkbRF_RulesPtr XkbRF_Create(void);
 
 void XkbRF_Free(XkbRF_RulesPtr rules, Bool freeRules);
 
commit 03b1d94dc386ba03b1a73edcd611765859dd2da2
Author: Alan Coopersmith <alan.coopersmith at oracle.com>
Date:   Sat Jul 12 11:47:06 2025 -0700

    Revert "xkb: maprules: put some loop counters into local scope"
    
    This reverts commit ffd7ca8af2885da59c9879abe8a15d698e73aa4a.
    
    Part-of: <https://gitlab.freedesktop.org/xorg/xserver/-/merge_requests/2046>

diff --git a/xkb/maprules.c b/xkb/maprules.c
index fe064fd14..9c6f7c2b3 100644
--- a/xkb/maprules.c
+++ b/xkb/maprules.c
@@ -262,6 +262,7 @@ SetUpRemap(InputLine * line, RemapSpec * remap)
 {
     char *tok, *str;
     unsigned present, l_ndx_present, v_ndx_present;
+    register int i;
     int len, ndx;
     _Xstrtokparams strtok_buf;
     Bool found;
@@ -276,7 +277,7 @@ SetUpRemap(InputLine * line, RemapSpec * remap)
         str = NULL;
         if (strcmp(tok, "=") == 0)
             continue;
-        for (int i = 0; i < MAX_WORDS; i++) {
+        for (i = 0; i < MAX_WORDS; i++) {
             len = strlen(cname[i]);
             if (strncmp(cname[i], tok, len) == 0) {
                 if (strlen(tok) > len) {
@@ -322,7 +323,7 @@ SetUpRemap(InputLine * line, RemapSpec * remap)
         unsigned mask = PART_MASK;
 
         ErrorF("Mapping needs at least one of ");
-        for (int i = 0; (i < MAX_WORDS); i++) {
+        for (i = 0; (i < MAX_WORDS); i++) {
             if ((1L << i) & mask) {
                 mask &= ~(1L << i);
                 if (mask)
@@ -375,7 +376,7 @@ CheckLine(InputLine * line,
           RemapSpec * remap, XkbRF_RulePtr rule, XkbRF_GroupPtr group)
 {
     char *str, *tok;
-    register int nread;
+    register int nread, i;
     FileSpec tmp;
     _Xstrtokparams strtok_buf;
     Bool append = FALSE;
@@ -397,8 +398,6 @@ CheckLine(InputLine * line,
                 return FALSE;
             group->name = Xstrdup(gname);
             group->words = Xstrdup(words);
-
-            int i;
             for (i = 1, words = group->words; *words; words++) {
                 if (*words == ' ') {
                     *words++ = '\0';
@@ -462,7 +461,7 @@ CheckLine(InputLine * line,
     rule->geometry = Xstrdup(tmp.name[GEOMETRY]);
 
     rule->layout_num = rule->variant_num = 0;
-    for (int i = 0; i < nread; i++) {
+    for (i = 0; i < nread; i++) {
         if (remap->remap[i].index) {
             if (remap->remap[i].word == LAYOUT)
                 rule->layout_num = remap->remap[i].index;
@@ -490,7 +489,9 @@ _Concat(char *str1, const char *str2)
 static void
 squeeze_spaces(char *p1)
 {
-    for (char *p2 = p1; *p2; p2++) {
+    char *p2;
+
+    for (p2 = p1; *p2; p2++) {
         *p1 = *p2;
         if (*p1 != ' ')
             p1++;
@@ -516,6 +517,7 @@ MakeMultiDefs(XkbRF_MultiDefsPtr mdefs, XkbRF_VarDefsPtr defs)
         else {
             char *p;
             char *layout;
+            int i;
 
             layout = Xstrdup(defs->layout);
             if (layout == NULL)
@@ -523,7 +525,7 @@ MakeMultiDefs(XkbRF_MultiDefsPtr mdefs, XkbRF_VarDefsPtr defs)
             squeeze_spaces(layout);
             mdefs->layout[1] = layout;
             p = layout;
-            for (int i = 2; i <= XkbNumKbdGroups; i++) {
+            for (i = 2; i <= XkbNumKbdGroups; i++) {
                 if ((p = strchr(p, ','))) {
                     *p++ = '\0';
                     mdefs->layout[i] = p;
@@ -544,6 +546,7 @@ MakeMultiDefs(XkbRF_MultiDefsPtr mdefs, XkbRF_VarDefsPtr defs)
         else {
             char *p;
             char *variant;
+            int i;
 
             variant = Xstrdup(defs->variant);
             if (variant == NULL)
@@ -551,7 +554,7 @@ MakeMultiDefs(XkbRF_MultiDefsPtr mdefs, XkbRF_VarDefsPtr defs)
             squeeze_spaces(variant);
             mdefs->variant[1] = variant;
             p = variant;
-            for (int i = 2; i <= XkbNumKbdGroups; i++) {
+            for (i = 2; i <= XkbNumKbdGroups; i++) {
                 if ((p = strchr(p, ','))) {
                     *p++ = '\0';
                     mdefs->variant[i] = p;
commit 1598978df25158249271a420190f28b594a22d67
Author: Alan Coopersmith <alan.coopersmith at oracle.com>
Date:   Sat Jul 12 11:47:06 2025 -0700

    Revert "xkb: maprules: use static struct init instead of memset()"
    
    This reverts commit a88b17565bd98f2a5112e7e05ed1507c15c996f0.
    
    Part-of: <https://gitlab.freedesktop.org/xorg/xserver/-/merge_requests/2046>

diff --git a/xkb/maprules.c b/xkb/maprules.c
index b5bdfefc3..fe064fd14 100644
--- a/xkb/maprules.c
+++ b/xkb/maprules.c
@@ -376,6 +376,7 @@ CheckLine(InputLine * line,
 {
     char *str, *tok;
     register int nread;
+    FileSpec tmp;
     _Xstrtokparams strtok_buf;
     Bool append = FALSE;
 
@@ -418,9 +419,7 @@ CheckLine(InputLine * line,
         DebugF("Illegal line of data ignored\n");
         return FALSE;
     }
-
-    FileSpec tmp = { 0 };
-
+    memset((char *) &tmp, 0, sizeof(FileSpec));
     str = line->line;
     for (nread = 0; (tok = _XStrtok(str, " ", strtok_buf)) != NULL; nread++) {
         str = NULL;
commit 8f184bb6ca34ef662d3f8e20d2cddee6c05f9101
Author: Alan Coopersmith <alan.coopersmith at oracle.com>
Date:   Sat Jul 12 11:47:06 2025 -0700

    Revert "xkb: drop obsolete parameter from XkbRF_Free()"
    
    This reverts commit abfbc768240f740192e00e3c136d37f93bec542d.
    
    Part-of: <https://gitlab.freedesktop.org/xorg/xserver/-/merge_requests/2046>

diff --git a/xkb/ddxLoad.c b/xkb/ddxLoad.c
index a231e96bf..8001cb25d 100644
--- a/xkb/ddxLoad.c
+++ b/xkb/ddxLoad.c
@@ -436,14 +436,14 @@ XkbDDXNamesFromRules(DeviceIntPtr keybd,
     if (!XkbRF_LoadRules(file, rules)) {
         LogMessage(X_ERROR, "XKB: Couldn't parse rules file %s\n", rules_name);
         fclose(file);
-        XkbRF_Free(rules);
+        XkbRF_Free(rules, TRUE);
         return FALSE;
     }
 
     memset(names, 0, sizeof(*names));
     complete = XkbRF_GetComponents(rules, defs, names);
     fclose(file);
-    XkbRF_Free(rules);
+    XkbRF_Free(rules, TRUE);
 
     if (!complete)
         LogMessage(X_ERROR, "XKB: Rules returned no components\n");
diff --git a/xkb/maprules.c b/xkb/maprules.c
index 222b6107e..b5bdfefc3 100644
--- a/xkb/maprules.c
+++ b/xkb/maprules.c
@@ -969,7 +969,7 @@ XkbRF_LoadRules(FILE * file, XkbRF_RulesPtr rules)
 }
 
 void
-XkbRF_Free(XkbRF_RulesPtr rules)
+XkbRF_Free(XkbRF_RulesPtr rules, Bool freeRules)
 {
     int i;
     XkbRF_RulePtr rule;
@@ -988,8 +988,11 @@ XkbRF_Free(XkbRF_RulesPtr rules)
             free((void *) rule->types);
             free((void *) rule->compat);
             free((void *) rule->geometry);
+            memset((char *) rule, 0, sizeof(XkbRF_RuleRec));
         }
         free(rules->rules);
+        rules->num_rules = rules->sz_rules = 0;
+        rules->rules = NULL;
     }
 
     if (rules->groups) {
@@ -998,8 +1001,10 @@ XkbRF_Free(XkbRF_RulesPtr rules)
             free(group->words);
         }
         free(rules->groups);
+        rules->num_groups = 0;
+        rules->groups = NULL;
     }
-
-    free(rules);
+    if (freeRules)
+        free(rules);
     return;
 }
diff --git a/xkb/xkbrules_priv.h b/xkb/xkbrules_priv.h
index deb29d093..3739c15a8 100644
--- a/xkb/xkbrules_priv.h
+++ b/xkb/xkbrules_priv.h
@@ -56,6 +56,6 @@ static inline XkbRF_RulesPtr XkbRF_Create(void)
     return calloc(1, sizeof(XkbRF_RulesRec));
 }
 
-void XkbRF_Free(XkbRF_RulesPtr rules);
+void XkbRF_Free(XkbRF_RulesPtr rules, Bool freeRules);
 
 #endif /* _XSERVER_XKB_XKBRULES_PRIV_H */
commit 239b212c657dccb5e1cbbcb0d287a02affbdc3ad
Author: Alan Coopersmith <alan.coopersmith at oracle.com>
Date:   Sat Jul 12 11:47:06 2025 -0700

    Revert "xkb: simplify loops in XkbRF_Free()"
    
    This reverts commit a0c1eeea98b907abc0fd1200f2be6308c854d5c6.
    
    Part-of: <https://gitlab.freedesktop.org/xorg/xserver/-/merge_requests/2046>

diff --git a/xkb/maprules.c b/xkb/maprules.c
index 8a1944ef5..222b6107e 100644
--- a/xkb/maprules.c
+++ b/xkb/maprules.c
@@ -971,34 +971,31 @@ XkbRF_LoadRules(FILE * file, XkbRF_RulesPtr rules)
 void
 XkbRF_Free(XkbRF_RulesPtr rules)
 {
+    int i;
+    XkbRF_RulePtr rule;
+    XkbRF_GroupPtr group;
+
     if (!rules)
         return;
-
     if (rules->rules) {
-        XkbRF_RulePtr r = rules->rules;
-        int num = rules->num_rules;
-        for (int i = 0; i < num; i++) {
-            // the typecast on free() is necessary because the pointers are const
-            free((void *) r[i].model);
-            free((void *) r[i].layout);
-            free((void *) r[i].variant);
-            free((void *) r[i].option);
-            free((void *) r[i].keycodes);
-            free((void *) r[i].symbols);
-            free((void *) r[i].types);
-            free((void *) r[i].compat);
-            free((void *) r[i].geometry);
+        for (i = 0, rule = rules->rules; i < rules->num_rules; i++, rule++) {
+            free((void *) rule->model);
+            free((void *) rule->layout);
+            free((void *) rule->variant);
+            free((void *) rule->option);
+            free((void *) rule->keycodes);
+            free((void *) rule->symbols);
+            free((void *) rule->types);
+            free((void *) rule->compat);
+            free((void *) rule->geometry);
         }
         free(rules->rules);
     }
 
     if (rules->groups) {
-        XkbRF_GroupPtr g = rules->groups;
-        int num = rules->num_groups;
-        for (int i = 0; i < num; i++) {
-            // the typecast on free() is necessary because the pointers are const
-            free((void *) g[i].name);
-            free(g[i].words);
+        for (i = 0, group = rules->groups; i < rules->num_groups; i++, group++) {
+            free((void *) group->name);
+            free(group->words);
         }
         free(rules->groups);
     }


More information about the xorg-commit mailing list