Hello community,

here is the log from the commit of package libxkbcommon for openSUSE:Factory 
checked in at 2017-01-27 10:46:52
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/libxkbcommon (Old)
 and      /work/SRC/openSUSE:Factory/.libxkbcommon.new (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "libxkbcommon"

Changes:
--------
--- /work/SRC/openSUSE:Factory/libxkbcommon/libxkbcommon.changes        
2016-11-14 20:09:59.000000000 +0100
+++ /work/SRC/openSUSE:Factory/.libxkbcommon.new/libxkbcommon.changes   
2017-02-03 17:48:57.401174702 +0100
@@ -1,0 +2,7 @@
+Wed Jan 18 21:43:43 UTC 2017 - [email protected]
+
+- Update to new upstream release 0.7.1
+  * Fixed various reported problems when the current locale is
+    tr_TR.UTF-8.
+
+-------------------------------------------------------------------

Old:
----
  libxkbcommon-0.7.0.tar.xz

New:
----
  libxkbcommon-0.7.1.tar.xz

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ libxkbcommon.spec ++++++
--- /var/tmp/diff_new_pack.FcguM6/_old  2017-02-03 17:48:57.905103658 +0100
+++ /var/tmp/diff_new_pack.FcguM6/_new  2017-02-03 17:48:57.913102531 +0100
@@ -1,7 +1,7 @@
 #
 # spec file for package libxkbcommon
 #
-# Copyright (c) 2016 SUSE LINUX GmbH, Nuernberg, Germany.
+# Copyright (c) 2017 SUSE LINUX GmbH, Nuernberg, Germany.
 #
 # All modifications and additions to the file contributed by third parties
 # remain the property of their copyright owners, unless otherwise agreed
@@ -17,7 +17,7 @@
 
 
 Name:           libxkbcommon
-Version:        0.7.0
+Version:        0.7.1
 Release:        0
 Summary:        Library for handling xkb descriptions
 License:        MIT

++++++ libxkbcommon-0.7.0.tar.xz -> libxkbcommon-0.7.1.tar.xz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/libxkbcommon-0.7.0/Makefile.in 
new/libxkbcommon-0.7.1/Makefile.in
--- old/libxkbcommon-0.7.0/Makefile.in  2016-11-11 19:03:10.000000000 +0100
+++ new/libxkbcommon-0.7.1/Makefile.in  2017-01-18 19:18:20.000000000 +0100
@@ -2275,10 +2275,10 @@
        -rm -f src/xkbcomp/parser.c
        -rm -f src/xkbcomp/parser.h
        -test -z "$(BUILT_SOURCES)" || rm -f $(BUILT_SOURCES)
-@ENABLE_DOCS_FALSE@uninstall-local:
-@HAVE_DOXYGEN_FALSE@uninstall-local:
 @ENABLE_DOCS_FALSE@install-data-local:
 @HAVE_DOXYGEN_FALSE@install-data-local:
+@ENABLE_DOCS_FALSE@uninstall-local:
+@HAVE_DOXYGEN_FALSE@uninstall-local:
 @ENABLE_DOCS_FALSE@clean-local:
 @HAVE_DOXYGEN_FALSE@clean-local:
 clean: clean-am
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/libxkbcommon-0.7.0/NEWS new/libxkbcommon-0.7.1/NEWS
--- old/libxkbcommon-0.7.0/NEWS 2016-11-11 19:01:41.000000000 +0100
+++ new/libxkbcommon-0.7.1/NEWS 2017-01-18 19:16:07.000000000 +0100
@@ -1,3 +1,17 @@
+libxkbcommon 0.7.1 - 2017-01-18
+==================
+
+- Fixed various reported problems when the current locale is tr_TR.UTF-8.
+
+  The function xkb_keysym_from_name() used to perform case-insensitive
+  string comparisons in a locale-dependent way, but required it to to
+  work as in the C/ASCII locale (the so called "Turkish i problem").
+
+  The function is now no longer affected by the current locale.
+
+- Fixed compilation in NetBSD.
+
+
 libxkbcommon 0.7.0 - 2016-11-11
 ==================
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/libxkbcommon-0.7.0/configure 
new/libxkbcommon-0.7.1/configure
--- old/libxkbcommon-0.7.0/configure    2016-11-11 19:03:08.000000000 +0100
+++ new/libxkbcommon-0.7.1/configure    2017-01-18 19:18:18.000000000 +0100
@@ -1,6 +1,6 @@
 #! /bin/sh
 # Guess values for system-dependent variables and create Makefiles.
-# Generated by GNU Autoconf 2.69 for libxkbcommon 0.7.0.
+# Generated by GNU Autoconf 2.69 for libxkbcommon 0.7.1.
 #
 # Report bugs to 
<https://bugs.freedesktop.org/enter_bug.cgi?product=libxkbcommon>.
 #
@@ -591,8 +591,8 @@
 # Identity of this package.
 PACKAGE_NAME='libxkbcommon'
 PACKAGE_TARNAME='libxkbcommon'
-PACKAGE_VERSION='0.7.0'
-PACKAGE_STRING='libxkbcommon 0.7.0'
+PACKAGE_VERSION='0.7.1'
+PACKAGE_STRING='libxkbcommon 0.7.1'
 
PACKAGE_BUGREPORT='https://bugs.freedesktop.org/enter_bug.cgi?product=libxkbcommon'
 PACKAGE_URL='http://xkbcommon.org'
 
@@ -1397,7 +1397,7 @@
   # Omit some internal or obsolete options to make the list less imposing.
   # This message is too long to be a string in the A/UX 3.1 sh.
   cat <<_ACEOF
-\`configure' configures libxkbcommon 0.7.0 to adapt to many kinds of systems.
+\`configure' configures libxkbcommon 0.7.1 to adapt to many kinds of systems.
 
 Usage: $0 [OPTION]... [VAR=VALUE]...
 
@@ -1467,7 +1467,7 @@
 
 if test -n "$ac_init_help"; then
   case $ac_init_help in
-     short | recursive ) echo "Configuration of libxkbcommon 0.7.0:";;
+     short | recursive ) echo "Configuration of libxkbcommon 0.7.1:";;
    esac
   cat <<\_ACEOF
 
@@ -1632,7 +1632,7 @@
 test -n "$ac_init_help" && exit $ac_status
 if $ac_init_version; then
   cat <<\_ACEOF
-libxkbcommon configure 0.7.0
+libxkbcommon configure 0.7.1
 generated by GNU Autoconf 2.69
 
 Copyright (C) 2012 Free Software Foundation, Inc.
@@ -2047,7 +2047,7 @@
 This file contains any messages produced by compilers while
 running configure, to aid debugging if configure makes a mistake.
 
-It was created by libxkbcommon $as_me 0.7.0, which was
+It was created by libxkbcommon $as_me 0.7.1, which was
 generated by GNU Autoconf 2.69.  Invocation command line was
 
   $ $0 $@
@@ -2916,7 +2916,7 @@
 
 # Define the identity of the package.
  PACKAGE='libxkbcommon'
- VERSION='0.7.0'
+ VERSION='0.7.1'
 
 
 cat >>confdefs.h <<_ACEOF
@@ -19062,25 +19062,6 @@
 fi
 
 # Checks for library functions.
-for ac_func in strcasecmp strncasecmp
-do :
-  as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh`
-ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var"
-if eval test \"x\$"$as_ac_var"\" = x"yes"; then :
-  cat >>confdefs.h <<_ACEOF
-#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1
-_ACEOF
-
-fi
-done
-
-if test "x$ac_cv_func_strcasecmp" = xno -o \
-            "x$ac_cv_func_strncasecmp" = xno; then :
-
-    as_fn_error $? "C library does not support strcasecmp/strncasecmp" 
"$LINENO" 5
-
-fi
-
 for ac_func in eaccess euidaccess mmap
 do :
   as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh`
@@ -20647,7 +20628,7 @@
 # report actual input values of CONFIG_FILES etc. instead of their
 # values after options handling.
 ac_log="
-This file was extended by libxkbcommon $as_me 0.7.0, which was
+This file was extended by libxkbcommon $as_me 0.7.1, which was
 generated by GNU Autoconf 2.69.  Invocation command line was
 
   CONFIG_FILES    = $CONFIG_FILES
@@ -20714,7 +20695,7 @@
 cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
 ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; 
s/[\\""\`\$]/\\\\&/g'`"
 ac_cs_version="\\
-libxkbcommon config.status 0.7.0
+libxkbcommon config.status 0.7.1
 configured by $0, generated by GNU Autoconf 2.69,
   with options \\"\$ac_cs_config\\"
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/libxkbcommon-0.7.0/configure.ac 
new/libxkbcommon-0.7.1/configure.ac
--- old/libxkbcommon-0.7.0/configure.ac 2016-11-11 19:02:14.000000000 +0100
+++ new/libxkbcommon-0.7.1/configure.ac 2017-01-18 19:17:38.000000000 +0100
@@ -22,7 +22,7 @@
 
 # Initialize Autoconf
 AC_PREREQ([2.62])
-AC_INIT([libxkbcommon], [0.7.0],
+AC_INIT([libxkbcommon], [0.7.1],
         [https://bugs.freedesktop.org/enter_bug.cgi?product=libxkbcommon],
         [libxkbcommon], [http://xkbcommon.org])
 AC_CONFIG_SRCDIR([Makefile.am])
@@ -68,12 +68,6 @@
 ])
 
 # Checks for library functions.
-AC_CHECK_FUNCS([strcasecmp strncasecmp])
-AS_IF([test "x$ac_cv_func_strcasecmp" = xno -o \
-            "x$ac_cv_func_strncasecmp" = xno], [
-    AC_MSG_ERROR([C library does not support strcasecmp/strncasecmp])
-])
-
 AC_CHECK_FUNCS([eaccess euidaccess mmap])
 
 AC_CHECK_FUNCS([secure_getenv __secure_getenv])
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/libxkbcommon-0.7.0/src/compose/parser.c 
new/libxkbcommon-0.7.1/src/compose/parser.c
--- old/libxkbcommon-0.7.0/src/compose/parser.c 2016-06-09 14:05:14.000000000 
+0200
+++ new/libxkbcommon-0.7.1/src/compose/parser.c 2017-01-15 17:30:50.000000000 
+0100
@@ -64,45 +64,6 @@
 #define MAX_LHS_LEN 10
 #define MAX_INCLUDE_DEPTH 5
 
-#define KEYSYM_FROM_NAME_CACHE_SIZE 8
-
-/*
- * xkb_keysym_from_name() is fairly slow, because for internal reasons
- * it must use strcasecmp().
- * A small cache reduces about 20% from the compilation time of
- * en_US.UTF-8/Compose.
- */
-struct keysym_from_name_cache {
-    struct {
-        char name[64];
-        unsigned len;
-        xkb_keysym_t keysym;
-    } cache[KEYSYM_FROM_NAME_CACHE_SIZE];
-    unsigned next;
-};
-
-static xkb_keysym_t
-cached_keysym_from_name(struct keysym_from_name_cache *cache,
-                        const char *name, size_t len)
-{
-    xkb_keysym_t keysym;
-
-    if (len >= sizeof(cache->cache[0].name))
-        return XKB_KEY_NoSymbol;
-
-    for (unsigned i = 0; i < KEYSYM_FROM_NAME_CACHE_SIZE; i++)
-        if (cache->cache[i].len == len &&
-            memcmp(cache->cache[i].name, name, len) == 0)
-            return cache->cache[i].keysym;
-
-    keysym = xkb_keysym_from_name(name, XKB_KEYSYM_NO_FLAGS);
-    strcpy(cache->cache[cache->next].name, name);
-    cache->cache[cache->next].len = len;
-    cache->cache[cache->next].keysym = keysym;
-    cache->next = (cache->next + 1) % KEYSYM_FROM_NAME_CACHE_SIZE;
-    return keysym;
-}
-
 /*
  * Grammar adapted from libX11/modules/im/ximcp/imLcPrs.c.
  * See also the XCompose(5) manpage.
@@ -536,7 +497,6 @@
 {
     enum rules_token tok;
     union lvalue val;
-    struct keysym_from_name_cache *cache = s->priv;
     xkb_keysym_t keysym;
     struct production production;
     enum { MAX_ERRORS = 10 };
@@ -612,7 +572,7 @@
 lhs_keysym_tok:
     switch (tok) {
     case TOK_LHS_KEYSYM:
-        keysym = cached_keysym_from_name(cache, val.string.str, 
val.string.len);
+        keysym = xkb_keysym_from_name(val.string.str, XKB_KEYSYM_NO_FLAGS);
         if (keysym == XKB_KEY_NoSymbol) {
             scanner_err(s, "unrecognized keysym \"%s\" on left-hand side",
                         val.string.str);
@@ -683,7 +643,7 @@
         production.has_string = true;
         goto rhs;
     case TOK_IDENT:
-        keysym = cached_keysym_from_name(cache, val.string.str, 
val.string.len);
+        keysym = xkb_keysym_from_name(val.string.str, XKB_KEYSYM_NO_FLAGS);
         if (keysym == XKB_KEY_NoSymbol) {
             scanner_err(s, "unrecognized keysym \"%s\" on right-hand side",
                         val.string.str);
@@ -735,9 +695,7 @@
              const char *file_name)
 {
     struct scanner s;
-    struct keysym_from_name_cache cache;
-    memset(&cache, 0, sizeof(cache));
-    scanner_init(&s, table->ctx, string, len, file_name, &cache);
+    scanner_init(&s, table->ctx, string, len, file_name, NULL);
     if (!parse(table, &s, 0))
         return false;
     /* Maybe the allocator can use the excess space. */
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/libxkbcommon-0.7.0/src/config.h.in 
new/libxkbcommon-0.7.1/src/config.h.in
--- old/libxkbcommon-0.7.0/src/config.h.in      2016-11-11 19:03:09.000000000 
+0100
+++ new/libxkbcommon-0.7.1/src/config.h.in      2017-01-18 19:18:19.000000000 
+0100
@@ -45,18 +45,12 @@
 /* Define to 1 if you have the <stdlib.h> header file. */
 #undef HAVE_STDLIB_H
 
-/* Define to 1 if you have the `strcasecmp' function. */
-#undef HAVE_STRCASECMP
-
 /* Define to 1 if you have the <strings.h> header file. */
 #undef HAVE_STRINGS_H
 
 /* Define to 1 if you have the <string.h> header file. */
 #undef HAVE_STRING_H
 
-/* Define to 1 if you have the `strncasecmp' function. */
-#undef HAVE_STRNCASECMP
-
 /* Define to 1 if you have the <sys/stat.h> header file. */
 #undef HAVE_SYS_STAT_H
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/libxkbcommon-0.7.0/src/keysym.c 
new/libxkbcommon-0.7.1/src/keysym.c
--- old/libxkbcommon-0.7.0/src/keysym.c 2016-06-09 14:05:14.000000000 +0200
+++ new/libxkbcommon-0.7.1/src/keysym.c 2017-01-15 17:30:50.000000000 +0100
@@ -76,7 +76,7 @@
 {
     const char *key = a;
     const struct name_keysym *entry = b;
-    return strcasecmp(key, get_name(entry));
+    return istrcmp(key, get_name(entry));
 }
 
 XKB_EXPORT int
@@ -109,7 +109,7 @@
 /*
  * Find the correct keysym if one case-insensitive match is given.
  *
- * The name_to_keysym table is sorted by strcasecmp(). So bsearch() may return
+ * The name_to_keysym table is sorted by istrcmp(). So bsearch() may return
  * _any_ of all possible case-insensitive duplicates. This function searches 
the
  * returned entry @entry, all previous and all next entries that match by
  * case-insensitive comparison and returns the exact match to @name. If @icase
@@ -138,7 +138,7 @@
     for (iter = entry - 1; iter >= name_to_keysym; --iter) {
         if (!icase && strcmp(get_name(iter), name) == 0)
             return iter;
-        if (strcasecmp(get_name(iter), get_name(entry)) != 0)
+        if (istrcmp(get_name(iter), get_name(entry)) != 0)
             break;
         if (icase && xkb_keysym_is_lower(iter->keysym))
             return iter;
@@ -148,7 +148,7 @@
     for (iter = entry + 1; iter < last; ++iter) {
         if (!icase && strcmp(get_name(iter), name) == 0)
             return iter;
-        if (strcasecmp(get_name(iter), get_name(entry)) != 0)
+        if (istrcmp(get_name(iter), get_name(entry)) != 0)
             break;
         if (icase && xkb_keysym_is_lower(iter->keysym))
             return iter;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/libxkbcommon-0.7.0/src/state.c 
new/libxkbcommon-0.7.1/src/state.c
--- old/libxkbcommon-0.7.0/src/state.c  2016-10-31 12:19:02.000000000 +0100
+++ new/libxkbcommon-0.7.1/src/state.c  2016-11-14 16:36:13.000000000 +0100
@@ -1359,7 +1359,7 @@
             if (XkbLevelsSameSyms(level, no_mods_level))
                 continue;
 
-            if (entry == matching_entry || popcount(entry->mods.mask) == 1)
+            if (entry == matching_entry || my_popcount(entry->mods.mask) == 1)
                 consumed |= entry->mods.mask & ~entry->preserve.mask;
         }
         break;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/libxkbcommon-0.7.0/src/utils.c 
new/libxkbcommon-0.7.1/src/utils.c
--- old/libxkbcommon-0.7.0/src/utils.c  2016-10-31 11:51:01.000000000 +0100
+++ new/libxkbcommon-0.7.1/src/utils.c  2017-01-15 17:30:50.000000000 +0100
@@ -108,3 +108,56 @@
 }
 
 #endif
+
+// ASCII lower-case map.
+static const unsigned char lower_map[] = {
+    0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20,
+    21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39,
+    40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58,
+    59, 60, 61, 62, 63, 64, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107,
+    108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122,
+    91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107,
+    108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122,
+    123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137,
+    138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152,
+    153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167,
+    168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182,
+    183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197,
+    198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212,
+    213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227,
+    228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242,
+    243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255
+};
+
+// ASCII tolower (to avoid locale issues).
+char
+to_lower(char c)
+{
+    return (char) lower_map[(unsigned char) c];
+}
+
+// ASCII strcasecmp (to avoid locale issues).
+int
+istrcmp(const char *a, const char *b)
+{
+    for (size_t i = 0; ; i++) {
+        if (to_lower(a[i]) != to_lower(b[i]))
+            return (int) to_lower(a[i]) - (int) to_lower(b[i]);
+        if (!a[i])
+            break;
+    }
+    return 0;
+}
+
+// ASCII strncasecmp (to avoid locale issues).
+int
+istrncmp(const char *a, const char *b, size_t n)
+{
+    for (size_t i = 0; i < n; i++) {
+        if (to_lower(a[i]) != to_lower(b[i]))
+            return (int) to_lower(a[i]) - (int) to_lower(b[i]);
+        if (!a[i])
+            break;
+    }
+    return 0;
+}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/libxkbcommon-0.7.0/src/utils.h 
new/libxkbcommon-0.7.1/src/utils.h
--- old/libxkbcommon-0.7.0/src/utils.h  2016-10-31 12:19:02.000000000 +0100
+++ new/libxkbcommon-0.7.1/src/utils.h  2017-01-15 17:30:50.000000000 +0100
@@ -29,7 +29,6 @@
 #include <stdbool.h>
 #include <stdio.h>
 #include <string.h>
-#include <strings.h>
 
 #include "darray.h"
 
@@ -44,6 +43,15 @@
     switch (0) { case 0: case (expr): ; } \
 } while (0)
 
+char
+to_lower(char c);
+
+int
+istrcmp(const char *a, const char *b);
+
+int
+istrncmp(const char *a, const char *b, size_t n);
+
 static inline bool
 streq(const char *s1, const char *s2)
 {
@@ -61,13 +69,13 @@
 static inline bool
 istreq(const char *s1, const char *s2)
 {
-    return strcasecmp(s1, s2) == 0;
+    return istrcmp(s1, s2) == 0;
 }
 
 static inline bool
 istreq_prefix(const char *s1, const char *s2)
 {
-    return strncasecmp(s1, s2, strlen(s1)) == 0;
+    return istrncmp(s1, s2, strlen(s1)) == 0;
 }
 
 static inline char *
@@ -178,8 +186,9 @@
     return pos;
 }
 
+// Avoid conflict with other popcount()s.
 static inline int
-popcount(uint32_t x)
+my_popcount(uint32_t x)
 {
     int count;
 #if defined(HAVE___BUILTIN_POPCOUNT)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/libxkbcommon-0.7.0/test/keysym.c 
new/libxkbcommon-0.7.1/test/keysym.c
--- old/libxkbcommon-0.7.0/test/keysym.c        2016-01-07 14:41:09.000000000 
+0100
+++ new/libxkbcommon-0.7.1/test/keysym.c        2017-01-15 17:30:50.000000000 
+0100
@@ -20,6 +20,7 @@
  * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
  * DEALINGS IN THE SOFTWARE.
  */
+#include <locale.h>
 
 #include "test.h"
 #include "keysym.h" /* For unexported is_lower/upper/keypad() */
@@ -81,6 +82,25 @@
     return streq(s, expected);
 }
 
+static void
+test_github_issue_42(void)
+{
+    // Verify we are not dependent on locale, Turkish-i problem in particular.
+    if (setlocale(LC_CTYPE, "tr_TR.UTF-8") == NULL) {
+        // The locale is not available, probably; skip.
+        return;
+    }
+
+    assert(test_string("i", XKB_KEY_i));
+    assert(test_string("I", XKB_KEY_I));
+    assert(test_casestring("i", XKB_KEY_i));
+    assert(test_casestring("I", XKB_KEY_i));
+    assert(xkb_keysym_to_upper(XKB_KEY_i) == XKB_KEY_I);
+    assert(xkb_keysym_to_lower(XKB_KEY_I) == XKB_KEY_i);
+
+    setlocale(LC_CTYPE, "C");
+}
+
 int
 main(void)
 {
@@ -196,5 +216,7 @@
     assert(xkb_keysym_to_upper(XKB_KEY_eacute) == XKB_KEY_Eacute);
     assert(xkb_keysym_to_lower(XKB_KEY_Eacute) == XKB_KEY_eacute);
 
+    test_github_issue_42();
+
     return 0;
 }
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/libxkbcommon-0.7.0/xkbcommon/xkbcommon-compose.h 
new/libxkbcommon-0.7.1/xkbcommon/xkbcommon-compose.h
--- old/libxkbcommon-0.7.0/xkbcommon/xkbcommon-compose.h        2016-06-09 
14:05:14.000000000 +0200
+++ new/libxkbcommon-0.7.1/xkbcommon/xkbcommon-compose.h        2017-01-15 
17:30:50.000000000 +0100
@@ -211,7 +211,11 @@
  * @param context
  *     The library context in which to create the compose table.
  * @param locale
- *     The current locale.  See @ref compose-locale.
+ *     The current locale.  See @ref compose-locale.\n
+ *
+ *     The value is copied, so it is safe to pass the result of getenv(3)
+ *     (or similar) without fear of it being invalidated by a subsequent
+ *     setenv(3) (or similar).
  * @param flags
  *     Optional flags for the compose table, or 0.
  *
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/libxkbcommon-0.7.0/xkbcommon/xkbcommon.h 
new/libxkbcommon-0.7.1/xkbcommon/xkbcommon.h
--- old/libxkbcommon-0.7.0/xkbcommon/xkbcommon.h        2016-10-31 
12:19:02.000000000 +0100
+++ new/libxkbcommon-0.7.1/xkbcommon/xkbcommon.h        2017-01-15 
17:30:50.000000000 +0100
@@ -449,6 +449,9 @@
  * fails, only then to try with this flag, while possibly warning the user
  * he had misspelled the name, and might get wrong results.
  *
+ * Case folding is done according to the C locale; the current locale is not
+ * consulted.
+ *
  * @returns The keysym. If the name is invalid, returns XKB_KEY_NoSymbol.
  *
  * @sa xkb_keysym_t


Reply via email to