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
