guile-commits
[Top][All Lists]
Advanced

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

[Guile-commits] GNU Guile branch, master, updated. release_1-9-3-64-g03d


From: Michael Gran
Subject: [Guile-commits] GNU Guile branch, master, updated. release_1-9-3-64-g03d80c0
Date: Fri, 09 Oct 2009 14:08:02 +0000

This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "GNU Guile".

http://git.savannah.gnu.org/cgit/guile.git/commit/?id=03d80c0327de6e38dec6c3c64759e4011ed890a5

The branch, master has been updated
       via  03d80c0327de6e38dec6c3c64759e4011ed890a5 (commit)
      from  3d1af79fece43fa40665c5dae53afba048827d47 (commit)

Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.

- Log -----------------------------------------------------------------
commit 03d80c0327de6e38dec6c3c64759e4011ed890a5
Author: Michael Gran <address@hidden>
Date:   Fri Oct 9 07:06:14 2009 -0700

    Revert changes that gather thread-specific local language
    
    The method used was not portable.  However, the underlying problem
    still exists: the uc_locale_language used by libunistring does not
    work with thread-specific locale_t locales.
    
    * libguile/i18n.c (locale_language): avoid unpacking semi-opaque type
      locale_t.
    
    * test-suite/tests/i18n.test: set Turkish string and char locale upcase
      and downcase tests to throw untested

-----------------------------------------------------------------------

Summary of changes:
 libguile/i18n.c            |   47 +++++++++----------------------------------
 test-suite/tests/i18n.test |   12 +++++++++++
 2 files changed, 22 insertions(+), 37 deletions(-)

diff --git a/libguile/i18n.c b/libguile/i18n.c
index 004db8d..7deb395 100644
--- a/libguile/i18n.c
+++ b/libguile/i18n.c
@@ -779,44 +779,17 @@ compare_u32_strings (SCM s1, SCM s2, SCM locale, const 
char *func_name)
 static const char *
 locale_language ()
 {
-#ifdef USE_GNU_LOCALE_API
-  {
-    static char lang[10];
-    scm_t_locale loc;
-    const char *c_result;
-    char *p;
-
-    /* If we are here, the locale has been set with 'uselocale'.  We
-       can't use libunistring's uc_locale_language because it calls
-       setlocale.  */
-    loc = uselocale (0);
-    if (loc == (scm_t_locale) -1)
-      return "";
-
-    /* The internal structure of locale_t may be specific to the C
-       library, but, there doesn't seem to be any other way to extract
-       the locale name.  */
-    c_result = loc->__names[LC_CTYPE];
-    p = (char *) c_result;
-    while (*p != '\0' && *p != '_' && *p != '.' && *p != '@')
-      p++;
-
-    /* Return a statically allocated pointer to the language portion,
-       so that the caller of this function does not need to free() the
-       result.  */
-    if (p != c_result)
-      {
-        memcpy (lang, c_result, p - c_result);
-        lang[p - c_result] = '\0';
-        return lang;
-      }
-    else
-      return "";
-  }
-#else
-  /* The locale has been set with setlocale.  */
+  /* FIXME: If the locale has been set with 'uselocale',
+     libunistring's uc_locale_language will return the incorrect
+     language: it will return the language appropriate for the global
+     (non-thread-specific) locale.
+
+     There appears to be no portable way to extract the language from
+     the thread-specific locale_t.  There is no LANGUAGE capability in
+     nl_langinfo or nl_langinfo_l.
+
+     Thus, uc_locale_language needs to be fixed upstream.  */
   return uc_locale_language ();
-#endif
 }
 
 static inline int
diff --git a/test-suite/tests/i18n.test b/test-suite/tests/i18n.test
index 4f11a8a..89924b6 100644
--- a/test-suite/tests/i18n.test
+++ b/test-suite/tests/i18n.test
@@ -205,11 +205,17 @@
   (pass-if "char-locale-upcase Turkish"
     (under-turkish-utf8-locale-or-unresolved
      (lambda ()
+       ;; This test is disabled for now, because char-locale-upcase is
+       ;; incomplete.
+       (throw 'untested)
        (eq? #\Ä° (char-locale-upcase #\i %turkish-utf8-locale)))))
 
   (pass-if "char-locale-downcase Turkish"
     (under-turkish-utf8-locale-or-unresolved
      (lambda ()
+       ;; This test is disabled for now, because char-locale-downcase
+       ;; is incomplete.
+       (throw 'untested)
        (eq? #\i (char-locale-downcase #\Ä° %turkish-utf8-locale))))))
 
 
@@ -226,11 +232,17 @@
   (pass-if "string-locale-upcase Turkish"
     (under-turkish-utf8-locale-or-unresolved
      (lambda ()
+       ;; This test is disabled for now, because string-locale-upcase
+       ;; is incomplete.
+       (throw 'untested)
        (string=? "İI" (string-locale-upcase "iı" %turkish-utf8-locale)))))
 
   (pass-if "string-locale-downcase Turkish"
     (under-turkish-utf8-locale-or-unresolved
      (lambda ()
+       ;; This test is disabled for now, because
+       ;; string-locale-downcase is incomplete.
+       (throw 'untested)
        (string=? "iı" (string-locale-downcase "İI" %turkish-utf8-locale))))))
 
 


hooks/post-receive
-- 
GNU Guile




reply via email to

[Prev in Thread] Current Thread [Next in Thread]