[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