[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/