From: Neal Norwitz Date: Sun, 26 Aug 2007 23:07:13 +0000 (+0000) Subject: Patch 1030, Adapt _winreg.c to the new buffer API. X-Git-Tag: v3.0a1~226 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=1385b8940a449c0a7ef693e5bbb1b39d30e58270;p=python Patch 1030, Adapt _winreg.c to the new buffer API. Applying without testing since I don't have Windows. It seems to make sense from a cursory review. --- diff --git a/PC/_winreg.c b/PC/_winreg.c index 135be32c0f..7386ea10c7 100644 --- a/PC/_winreg.c +++ b/PC/_winreg.c @@ -814,23 +814,28 @@ Py2Reg(PyObject *value, DWORD typ, BYTE **retDataBuf, DWORD *retDataSize) if (value == Py_None) *retDataSize = 0; else { - void *src_buf; - PyBufferProcs *pb = value->ob_type->tp_as_buffer; - if (pb==NULL) { + PyBuffer view; + + if (!PyObject_CheckBuffer(value)) { 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 (PyObject_GetBuffer(value, &view, PyBUF_SIMPLE) < 0) + return FALSE; + + *retDataBuf = (BYTE *)PyMem_NEW(char, view.len); if (*retDataBuf==NULL){ + PyObject_ReleaseBuffer(value, &view); PyErr_NoMemory(); return FALSE; } - memcpy(*retDataBuf, src_buf, *retDataSize); + *retDataSize = view.len; + memcpy(*retDataBuf, view.buf, view.len); + PyObject_ReleaseBuffer(value, &view); } break; }