[Python-Dev] Re: [Python-checkins] CVS: python/dist/src/PC _winreg.c,1.7,1.8
Greg Stein
gstein@lyra.org
Tue, 1 Aug 2000 18:26:51 -0700
This could be simplified quite a bit by using PyObject_AsReadBuffer() from
abstract.h ...
Cheers,
-g
On Thu, Jul 27, 2000 at 08:44:43PM -0700, Mark Hammond wrote:
> Update of /cvsroot/python/python/dist/src/PC
> In directory slayer.i.sourceforge.net:/tmp/cvs-serv12325
>
> Modified Files:
> _winreg.c
> Log Message:
> Allow any object supporting the buffer protocol to be written as a binary object.
>
> Index: _winreg.c
> ===================================================================
> RCS file: /cvsroot/python/python/dist/src/PC/_winreg.c,v
> retrieving revision 1.7
> retrieving revision 1.8
> diff -C2 -r1.7 -r1.8
> *** _winreg.c 2000/07/16 12:04:32 1.7
> --- _winreg.c 2000/07/28 03:44:41 1.8
> ***************
> *** 831,837 ****
> *retDataSize = 0;
> else {
> ! if (!PyString_Check(value))
> ! return 0;
> ! *retDataSize = PyString_Size(value);
> *retDataBuf = (BYTE *)PyMem_NEW(char,
> *retDataSize);
> --- 831,844 ----
> *retDataSize = 0;
> else {
> ! 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);
> ***************
> *** 840,847 ****
> return FALSE;
> }
> ! memcpy(*retDataBuf,
> ! PyString_AS_STRING(
> ! (PyStringObject *)value),
> ! *retDataSize);
> }
> break;
> --- 847,851 ----
> return FALSE;
> }
> ! memcpy(*retDataBuf, src_buf, *retDataSize);
> }
> break;
>
>
> _______________________________________________
> Python-checkins mailing list
> Python-checkins@python.org
> http://www.python.org/mailman/listinfo/python-checkins
--
Greg Stein, http://www.lyra.org/