Mercurial > public > mercurial-scm > hg
comparison mercurial/win32.py @ 16759:133a7922a900 stable
win32: fix encoding handling for registry strings (issue3467)
This stopped handling non-ASCII strings in 1.8
author | Matt Mackall <mpm@selenic.com> |
---|---|
date | Mon, 21 May 2012 16:32:49 -0500 |
parents | ec222a29bdf0 |
children | 07741a5d6608 |
comparison
equal
deleted
inserted
replaced
16748:0a730d3c5aae | 16759:133a7922a900 |
---|---|
3 # Copyright 2005-2009 Matt Mackall <mpm@selenic.com> and others | 3 # Copyright 2005-2009 Matt Mackall <mpm@selenic.com> and others |
4 # | 4 # |
5 # This software may be used and distributed according to the terms of the | 5 # This software may be used and distributed according to the terms of the |
6 # GNU General Public License version 2 or any later version. | 6 # GNU General Public License version 2 or any later version. |
7 | 7 |
8 import encoding | |
9 import ctypes, errno, os, struct, subprocess, random | 8 import ctypes, errno, os, struct, subprocess, random |
10 | 9 |
11 _kernel32 = ctypes.windll.kernel32 | 10 _kernel32 = ctypes.windll.kernel32 |
12 _advapi32 = ctypes.windll.advapi32 | 11 _advapi32 = ctypes.windll.advapi32 |
13 _user32 = ctypes.windll.user32 | 12 _user32 = ctypes.windll.user32 |
288 res = _advapi32.RegQueryValueExA(kh.value, valname, None, | 287 res = _advapi32.RegQueryValueExA(kh.value, valname, None, |
289 byref(type), buf, byref(size)) | 288 byref(type), buf, byref(size)) |
290 if res != _ERROR_SUCCESS: | 289 if res != _ERROR_SUCCESS: |
291 continue | 290 continue |
292 if type.value == _REG_SZ: | 291 if type.value == _REG_SZ: |
293 # never let a Unicode string escape into the wild | 292 # string is in ANSI code page, aka local encoding |
294 return encoding.tolocal(buf.value.encode('UTF-8')) | 293 return buf.value |
295 elif type.value == _REG_DWORD: | 294 elif type.value == _REG_DWORD: |
296 fmt = '<L' | 295 fmt = '<L' |
297 s = ctypes.string_at(byref(buf), struct.calcsize(fmt)) | 296 s = ctypes.string_at(byref(buf), struct.calcsize(fmt)) |
298 return struct.unpack(fmt, s)[0] | 297 return struct.unpack(fmt, s)[0] |
299 finally: | 298 finally: |