cpython: ac2a2534f793 (original) (raw)
Mercurial > cpython
changeset 101487:ac2a2534f793
Issue #23026: winreg.QueryValueEx() now return an integer for REG_QWORD type. (Patch by hakril) [#23026]
Steve Dower steve.dower@microsoft.com | |
---|---|
date | Tue, 24 May 2016 15:42:04 -0700 |
parents | 3a57eafd8401 |
children | b730baee0877 |
files | Doc/library/winreg.rst Doc/whatsnew/3.6.rst Lib/test/test_winreg.py Misc/NEWS PC/winreg.c |
diffstat | 5 files changed, 50 insertions(+), 3 deletions(-)[+] [-] Doc/library/winreg.rst 10 Doc/whatsnew/3.6.rst 8 Lib/test/test_winreg.py 1 Misc/NEWS 2 PC/winreg.c 32 |
line wrap: on
line diff
--- a/Doc/library/winreg.rst +++ b/Doc/library/winreg.rst @@ -633,7 +633,7 @@ For more information, see `Registry Valu .. data:: REG_DWORD_LITTLE_ENDIAN
.. data:: REG_DWORD_BIG_ENDIAN @@ -657,6 +657,14 @@ For more information, see `Registry Valu No defined value type. +.. data:: REG_QWORD +
+.. data:: REG_QWORD_LITTLE_ENDIAN +
.. data:: REG_RESOURCE_LIST A device-driver resource list.
--- a/Doc/whatsnew/3.6.rst
+++ b/Doc/whatsnew/3.6.rst
@@ -421,6 +421,14 @@ The "Object allocated at" traceback is n
:mod:warnings
was already imported.
+winreg
+------
+
+The :func:QueryValueEx <winreg.QueryValueEx>
function now returns
+integer values for registry type REG_QWORD
.
+(Contributed by Clement Rouault in :issue:23026
.)
+
+
zipfile
-------
--- a/Lib/test/test_winreg.py +++ b/Lib/test/test_winreg.py @@ -37,6 +37,7 @@ test_reflect_key_name = "SOFTWARE\Class test_data = [ ("Int Value", 45, REG_DWORD),
- ("Qword Value", 0x1122334455667788, REG_QWORD), ("String Val", "A string value", REG_SZ), ("StringExpand", "The path is %path%", REG_EXPAND_SZ), ("Multi-string", ["Lots", "of", "string", "values"], REG_MULTI_SZ),
--- a/Misc/NEWS +++ b/Misc/NEWS @@ -19,6 +19,8 @@ Core and Builtins Library ------- +- Issue #23026: winreg.QueryValueEx() now return an integer for REG_QWORD type. +
- Issue #26741: subprocess.Popen destructor now emits a ResourceWarning warning if the child process is still running.
--- a/PC/winreg.c +++ b/PC/winreg.c @@ -563,6 +563,24 @@ Py2Reg(PyObject *value, DWORD typ, BYTE memcpy(*retDataBuf, &d, sizeof(DWORD)); } break;
case REG_QWORD:[](#l5.7)
if (value != Py_None && !PyLong_Check(value))[](#l5.8)
return FALSE;[](#l5.9)
*retDataBuf = (BYTE *)PyMem_NEW(DWORD64, 1);[](#l5.10)
if (*retDataBuf==NULL){[](#l5.11)
PyErr_NoMemory();[](#l5.12)
return FALSE;[](#l5.13)
}[](#l5.14)
*retDataSize = sizeof(DWORD64);[](#l5.15)
if (value == Py_None) {[](#l5.16)
DWORD64 zero = 0;[](#l5.17)
memcpy(*retDataBuf, &zero, sizeof(DWORD64));[](#l5.18)
}[](#l5.19)
else {[](#l5.20)
DWORD64 d = PyLong_AsUnsignedLongLong(value);[](#l5.21)
memcpy(*retDataBuf, &d, sizeof(DWORD64));[](#l5.22)
}[](#l5.23)
break;[](#l5.24) case REG_SZ:[](#l5.25) case REG_EXPAND_SZ:[](#l5.26) {[](#l5.27)
@@ -690,7 +708,13 @@ Reg2Py(BYTE *retDataBuf, DWORD retDataSi if (retDataSize == 0) obData = PyLong_FromUnsignedLong(0); else
obData = PyLong_FromUnsignedLong(*(int *)retDataBuf);[](#l5.32)
obData = PyLong_FromUnsignedLong(*(DWORD *)retDataBuf);[](#l5.33)
break;[](#l5.34)
case REG_QWORD:[](#l5.35)
if (retDataSize == 0)[](#l5.36)
obData = PyLong_FromUnsignedLongLong(0);[](#l5.37)
else[](#l5.38)
obData = PyLong_FromUnsignedLongLong(*(DWORD64 *)retDataBuf);[](#l5.39) break;[](#l5.40) case REG_SZ:[](#l5.41) case REG_EXPAND_SZ:[](#l5.42)
@@ -1599,7 +1623,7 @@ winreg.SetValueEx An integer that specifies the type of the data, one of: REG_BINARY -- Binary data in any form. REG_DWORD -- A 32-bit number.
REG_DWORD_LITTLE_ENDIAN -- A 32-bit number in little-endian format.[](#l5.47)
REG_DWORD_LITTLE_ENDIAN -- A 32-bit number in little-endian format. Equivalent to REG_DWORD[](#l5.48) REG_DWORD_BIG_ENDIAN -- A 32-bit number in big-endian format.[](#l5.49) REG_EXPAND_SZ -- A null-terminated string that contains unexpanded[](#l5.50) references to environment variables (for example,[](#l5.51)
@@ -1609,6 +1633,8 @@ winreg.SetValueEx by two null characters. Note that Python handles this termination automatically. REG_NONE -- No defined value type.
REG_QWORD -- A 64-bit number.[](#l5.56)
value: object @@ -1918,6 +1944,8 @@ PyMODINIT_FUNC PyInit_winreg(void) ADD_INT(REG_DWORD); ADD_INT(REG_DWORD_LITTLE_ENDIAN); ADD_INT(REG_DWORD_BIG_ENDIAN);REG_QWORD_LITTLE_ENDIAN -- A 64-bit number in little-endian format. Equivalent to REG_QWORD.[](#l5.57) REG_RESOURCE_LIST -- A device-driver resource list.[](#l5.58) REG_SZ -- A null-terminated string.[](#l5.59)
- ADD_INT(REG_QWORD);
- ADD_INT(REG_QWORD_LITTLE_ENDIAN); ADD_INT(REG_LINK); ADD_INT(REG_MULTI_SZ); ADD_INT(REG_RESOURCE_LIST);