Commit c8738eba authored by Mark Hammond's avatar Mark Hammond

Allow any object supporting the buffer protocol to be written as a binary object.

parent f1ac41fb
...@@ -830,19 +830,23 @@ Py2Reg(PyObject *value, DWORD typ, BYTE **retDataBuf, DWORD *retDataSize) ...@@ -830,19 +830,23 @@ Py2Reg(PyObject *value, DWORD typ, BYTE **retDataBuf, DWORD *retDataSize)
if (value == Py_None) if (value == Py_None)
*retDataSize = 0; *retDataSize = 0;
else { else {
if (!PyString_Check(value)) void *src_buf;
return 0; PyBufferProcs *pb = value->ob_type->tp_as_buffer;
*retDataSize = PyString_Size(value); 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, *retDataBuf = (BYTE *)PyMem_NEW(char,
*retDataSize); *retDataSize);
if (*retDataBuf==NULL){ if (*retDataBuf==NULL){
PyErr_NoMemory(); PyErr_NoMemory();
return FALSE; return FALSE;
} }
memcpy(*retDataBuf, memcpy(*retDataBuf, src_buf, *retDataSize);
PyString_AS_STRING(
(PyStringObject *)value),
*retDataSize);
} }
break; break;
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment