summaryrefslogtreecommitdiffstats
path: root/PC/_winreg.c
diff options
context:
space:
mode:
authorMark Hammond <mhammond@skippinet.com.au>2000-07-28 03:44:41 (GMT)
committerMark Hammond <mhammond@skippinet.com.au>2000-07-28 03:44:41 (GMT)
commit4e80bb551e0df7e22ceeca51e93e9bb87a56b9a3 (patch)
tree7bcc7351532b1efbe39b080a916950c9b8b91cd1 /PC/_winreg.c
parentabfeff7f44fcc9451d7f4588bda53adebd2d4ea4 (diff)
downloadcpython-4e80bb551e0df7e22ceeca51e93e9bb87a56b9a3.zip
cpython-4e80bb551e0df7e22ceeca51e93e9bb87a56b9a3.tar.gz
cpython-4e80bb551e0df7e22ceeca51e93e9bb87a56b9a3.tar.bz2
Allow any object supporting the buffer protocol to be written as a binary object.
Diffstat (limited to 'PC/_winreg.c')
-rw-r--r--PC/_winreg.c18
1 files changed, 11 insertions, 7 deletions
diff --git a/PC/_winreg.c b/PC/_winreg.c
index 84bf3c4..edfadac 100644
--- a/PC/_winreg.c
+++ b/PC/_winreg.c
@@ -830,19 +830,23 @@ Py2Reg(PyObject *value, DWORD typ, BYTE **retDataBuf, DWORD *retDataSize)
if (value == Py_None)
*retDataSize = 0;
else {
- if (!PyString_Check(value))
- return 0;
- *retDataSize = PyString_Size(value);
+ void *src_buf;
+ PyBufferProcs *pb = value->ob_type->tp_as_buffer;
+ if (pb==NULL) {
+ PyErr_Format(PyExc_TypeError,
+ "Objects of type '%s' can not "
+ "be used as binary registry values",
+ value->ob_type->tp_name);
+ return FALSE;
+ }
+ *retDataSize = (*pb->bf_getreadbuffer)(value, 0, &src_buf);
*retDataBuf = (BYTE *)PyMem_NEW(char,
*retDataSize);
if (*retDataBuf==NULL){
PyErr_NoMemory();
return FALSE;
}
- memcpy(*retDataBuf,
- PyString_AS_STRING(
- (PyStringObject *)value),
- *retDataSize);
+ memcpy(*retDataBuf, src_buf, *retDataSize);
}
break;
}