[pypy-svn] r74061 - in pypy/trunk/pypy: module/_locale rlib

afa at codespeak.net afa at codespeak.net
Mon Apr 26 12:47:23 CEST 2010


Author: afa
Date: Mon Apr 26 12:47:21 2010
New Revision: 74061

Modified:
   pypy/trunk/pypy/module/_locale/interp_locale.py
   pypy/trunk/pypy/rlib/rlocale.py
Log:
Move most of _locale.getdefaultlocale to rlib.rlocale.


Modified: pypy/trunk/pypy/module/_locale/interp_locale.py
==============================================================================
--- pypy/trunk/pypy/module/_locale/interp_locale.py	(original)
+++ pypy/trunk/pypy/module/_locale/interp_locale.py	Mon Apr 26 12:47:21 2010
@@ -298,49 +298,7 @@
 
         bind_textdomain_codeset.unwrap_spec = [ObjSpace, str, W_Root]
 
-#___________________________________________________________________
-# getdefaultlocale() implementation for Windows and MacOSX
-
 if sys.platform == 'win32':
-    from pypy.rlib import rwin32
-    LCID = LCTYPE = rwin32.DWORD
-    GetACP = rlocale.external('GetACP',
-                      [], rffi.INT,
-                      calling_conv='win')
-    GetLocaleInfo = rlocale.external('GetLocaleInfoA',
-                             [LCID, LCTYPE, rwin32.LPSTR, rffi.INT], rffi.INT,
-                             calling_conv='win')
-
     def getdefaultlocale(space):
-        encoding = "cp%d" % GetACP()
-
-        BUFSIZE = 50
-        buf_lang = lltype.malloc(rffi.CCHARP.TO, BUFSIZE, flavor='raw')
-        buf_country = lltype.malloc(rffi.CCHARP.TO, BUFSIZE, flavor='raw')
-
-        try:
-            if (GetLocaleInfo(rlocale.cConfig.LOCALE_USER_DEFAULT,
-                              rlocale.cConfig.LOCALE_SISO639LANGNAME,
-                              buf_lang, BUFSIZE) and
-                GetLocaleInfo(rlocale.cConfig.LOCALE_USER_DEFAULT,
-                              rlocale.cConfig.LOCALE_SISO3166CTRYNAME,
-                              buf_country, BUFSIZE)):
-                lang = rffi.charp2str(buf_lang)
-                country = rffi.charp2str(buf_country)
-                return space.newtuple([space.wrap("%s_%s" % (lang, country)),
-                                       space.wrap(encoding)])
-
-            # If we end up here, this windows version didn't know about
-            # ISO639/ISO3166 names (it's probably Windows 95).  Return the
-            # Windows language identifier instead (a hexadecimal number)
-            elif GetLocaleInfo(rlocale.cConfig.LOCALE_USER_DEFAULT,
-                               rlocale.cConfig.LOCALE_IDEFAULTLANGUAGE,
-                               buf_lang, BUFSIZE):
-                lang = rffi.charp2str(buf_lang)
-                return space.newtuple([space.wrap("0x%s" % lang),
-                                       space.wrap(encoding)])
-            else:
-                return space.newtuple([space.w_None, space.wrap(encoding)])
-        finally:
-            lltype.free(buf_lang, flavor='raw')
-            lltype.free(buf_country, flavor='raw')
+        language, encoding = rlocale.getdefaultlocale()
+        return space.newtuple([space.wrap(language), space.wrap(encoding)])

Modified: pypy/trunk/pypy/rlib/rlocale.py
==============================================================================
--- pypy/trunk/pypy/rlib/rlocale.py	(original)
+++ pypy/trunk/pypy/rlib/rlocale.py	Mon Apr 26 12:47:21 2010
@@ -172,3 +172,51 @@
         if key in constants.values():
             return rffi.charp2str(_nl_langinfo(rffi.cast(rffi.INT, key)))
         raise ValueError
+
+#___________________________________________________________________
+# getdefaultlocale() implementation for Windows
+
+if sys.platform == 'win32':
+    from pypy.rlib import rwin32
+    LCID = LCTYPE = rwin32.DWORD
+    GetACP = external('GetACP',
+                      [], rffi.INT,
+                      calling_conv='win')
+    GetLocaleInfo = external('GetLocaleInfoA',
+                             [LCID, LCTYPE, rwin32.LPSTR, rffi.INT], rffi.INT,
+                             calling_conv='win')
+
+    def getdefaultlocale():
+        encoding = "cp%d" % GetACP()
+
+        BUFSIZE = 50
+        buf_lang = lltype.malloc(rffi.CCHARP.TO, BUFSIZE, flavor='raw')
+        buf_country = lltype.malloc(rffi.CCHARP.TO, BUFSIZE, flavor='raw')
+
+        try:
+            if (GetLocaleInfo(cConfig.LOCALE_USER_DEFAULT,
+                              cConfig.LOCALE_SISO639LANGNAME,
+                              buf_lang, BUFSIZE) and
+                GetLocaleInfo(cConfig.LOCALE_USER_DEFAULT,
+                              cConfig.LOCALE_SISO3166CTRYNAME,
+                              buf_country, BUFSIZE)):
+                lang = rffi.charp2str(buf_lang)
+                country = rffi.charp2str(buf_country)
+                language = "%s_%s" % (lang, country)
+
+            # If we end up here, this windows version didn't know about
+            # ISO639/ISO3166 names (it's probably Windows 95).  Return the
+            # Windows language identifier instead (a hexadecimal number)
+            elif GetLocaleInfo(cConfig.LOCALE_USER_DEFAULT,
+                               cConfig.LOCALE_IDEFAULTLANGUAGE,
+                               buf_lang, BUFSIZE):
+                lang = rffi.charp2str(buf_lang)
+                language = "0x%s" % (lang,)
+
+            else:
+                language = None
+        finally:
+            lltype.free(buf_lang, flavor='raw')
+            lltype.free(buf_country, flavor='raw')
+
+        return language, encoding



More information about the Pypy-commit mailing list