[Python-checkins] cpython: Issue #23026: winreg.QueryValueEx() now return an integer for REG_QWORD type.
steve.dower
python-checkins at python.org
Tue May 24 18:43:28 EDT 2016
https://hg.python.org/cpython/rev/ac2a2534f793
changeset: 101487:ac2a2534f793
user: Steve Dower <steve.dower at microsoft.com>
date: Tue May 24 15:42:04 2016 -0700
summary:
Issue #23026: winreg.QueryValueEx() now return an integer for REG_QWORD type. (Patch by hakril)
files:
Doc/library/winreg.rst | 10 ++++++++-
Doc/whatsnew/3.6.rst | 8 +++++++
Lib/test/test_winreg.py | 1 +
Misc/NEWS | 2 +
PC/winreg.c | 32 +++++++++++++++++++++++++++-
5 files changed, 50 insertions(+), 3 deletions(-)
diff --git a/Doc/library/winreg.rst b/Doc/library/winreg.rst
--- a/Doc/library/winreg.rst
+++ b/Doc/library/winreg.rst
@@ -633,7 +633,7 @@
.. data:: REG_DWORD_LITTLE_ENDIAN
- A 32-bit number in little-endian format.
+ A 32-bit number in little-endian format. Equivalent to :const:`REG_DWORD`.
.. data:: REG_DWORD_BIG_ENDIAN
@@ -657,6 +657,14 @@
No defined value type.
+.. data:: REG_QWORD
+
+ A 64-bit number.
+
+.. data:: REG_QWORD_LITTLE_ENDIAN
+
+ A 64-bit number in little-endian format. Equivalent to :const:`REG_QWORD`.
+
.. data:: REG_RESOURCE_LIST
A device-driver resource list.
diff --git a/Doc/whatsnew/3.6.rst b/Doc/whatsnew/3.6.rst
--- a/Doc/whatsnew/3.6.rst
+++ b/Doc/whatsnew/3.6.rst
@@ -421,6 +421,14 @@
: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
-------
diff --git a/Lib/test/test_winreg.py b/Lib/test/test_winreg.py
--- a/Lib/test/test_winreg.py
+++ b/Lib/test/test_winreg.py
@@ -37,6 +37,7 @@
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),
diff --git a/Misc/NEWS b/Misc/NEWS
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -19,6 +19,8 @@
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.
diff --git a/PC/winreg.c b/PC/winreg.c
--- a/PC/winreg.c
+++ b/PC/winreg.c
@@ -563,6 +563,24 @@
memcpy(*retDataBuf, &d, sizeof(DWORD));
}
break;
+ case REG_QWORD:
+ if (value != Py_None && !PyLong_Check(value))
+ return FALSE;
+ *retDataBuf = (BYTE *)PyMem_NEW(DWORD64, 1);
+ if (*retDataBuf==NULL){
+ PyErr_NoMemory();
+ return FALSE;
+ }
+ *retDataSize = sizeof(DWORD64);
+ if (value == Py_None) {
+ DWORD64 zero = 0;
+ memcpy(*retDataBuf, &zero, sizeof(DWORD64));
+ }
+ else {
+ DWORD64 d = PyLong_AsUnsignedLongLong(value);
+ memcpy(*retDataBuf, &d, sizeof(DWORD64));
+ }
+ break;
case REG_SZ:
case REG_EXPAND_SZ:
{
@@ -690,7 +708,13 @@
if (retDataSize == 0)
obData = PyLong_FromUnsignedLong(0);
else
- obData = PyLong_FromUnsignedLong(*(int *)retDataBuf);
+ obData = PyLong_FromUnsignedLong(*(DWORD *)retDataBuf);
+ break;
+ case REG_QWORD:
+ if (retDataSize == 0)
+ obData = PyLong_FromUnsignedLongLong(0);
+ else
+ obData = PyLong_FromUnsignedLongLong(*(DWORD64 *)retDataBuf);
break;
case REG_SZ:
case REG_EXPAND_SZ:
@@ -1599,7 +1623,7 @@
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.
+ REG_DWORD_LITTLE_ENDIAN -- A 32-bit number in little-endian format. Equivalent to REG_DWORD
REG_DWORD_BIG_ENDIAN -- A 32-bit number in big-endian format.
REG_EXPAND_SZ -- A null-terminated string that contains unexpanded
references to environment variables (for example,
@@ -1609,6 +1633,8 @@
by two null characters. Note that Python handles
this termination automatically.
REG_NONE -- No defined value type.
+ REG_QWORD -- A 64-bit number.
+ REG_QWORD_LITTLE_ENDIAN -- A 64-bit number in little-endian format. Equivalent to REG_QWORD.
REG_RESOURCE_LIST -- A device-driver resource list.
REG_SZ -- A null-terminated string.
value: object
@@ -1918,6 +1944,8 @@
ADD_INT(REG_DWORD);
ADD_INT(REG_DWORD_LITTLE_ENDIAN);
ADD_INT(REG_DWORD_BIG_ENDIAN);
+ ADD_INT(REG_QWORD);
+ ADD_INT(REG_QWORD_LITTLE_ENDIAN);
ADD_INT(REG_LINK);
ADD_INT(REG_MULTI_SZ);
ADD_INT(REG_RESOURCE_LIST);
--
Repository URL: https://hg.python.org/cpython
More information about the Python-checkins
mailing list