@@ -3007,16 +3007,17 @@ PyCData_nohash(PyObject *self)
30073007}
30083008
30093009/*[clinic input]
3010- _ctypes.PyCData.__reduce__ as PyCData_reduce
3010+ @critical_section
3011+ _ctypes.PyCData.__reduce__
30113012
30123013 myself: self
30133014 cls: defining_class
30143015 /
30153016[clinic start generated code]*/
30163017
30173018static PyObject *
3018- PyCData_reduce_impl (PyObject * myself , PyTypeObject * cls )
3019- /*[clinic end generated code: output=1a025ccfdd8c935d input=34097a5226ea63c1 ]*/
3019+ _ctypes_PyCData___reduce___impl (PyObject * myself , PyTypeObject * cls )
3020+ /*[clinic end generated code: output=eaad97e111599294 input=6a464e1a1e2bbdbd ]*/
30203021{
30213022 CDataObject * self = _CDataObject_CAST (myself );
30223023
@@ -3037,33 +3038,33 @@ PyCData_reduce_impl(PyObject *myself, PyTypeObject *cls)
30373038 return NULL ;
30383039 }
30393040 PyObject * bytes ;
3040- LOCK_PTR (self );
30413041 bytes = PyBytes_FromStringAndSize (self -> b_ptr , self -> b_size );
3042- UNLOCK_PTR (self );
30433042 return Py_BuildValue ("O(O(NN))" , st -> _unpickle , Py_TYPE (myself ), dict ,
30443043 bytes );
30453044}
30463045
3046+ /*[clinic input]
3047+ @critical_section
3048+ _ctypes.PyCData.__setstate__
3049+
3050+ myself: self
3051+ dict: object(subclass_of="&PyDict_Type")
3052+ data: str(accept={str, robuffer}, zeroes=True)
3053+ /
3054+ [clinic start generated code]*/
3055+
30473056static PyObject *
3048- PyCData_setstate (PyObject * myself , PyObject * args )
3057+ _ctypes_PyCData___setstate___impl (PyObject * myself , PyObject * dict ,
3058+ const char * data , Py_ssize_t data_length )
3059+ /*[clinic end generated code: output=8bd4c0a5b4f254bd input=124f5070258254c6]*/
30493060{
3050- void * data ;
3051- Py_ssize_t len ;
3052- int res ;
3053- PyObject * dict , * mydict ;
30543061 CDataObject * self = _CDataObject_CAST (myself );
3055- if (!PyArg_ParseTuple (args , "O!s#" ,
3056- & PyDict_Type , & dict , & data , & len ))
3057- {
3058- return NULL ;
3062+
3063+ if (data_length > self -> b_size ) {
3064+ data_length = self -> b_size ;
30593065 }
3060- if (len > self -> b_size )
3061- len = self -> b_size ;
3062- // XXX Can we use locked_memcpy_to()?
3063- LOCK_PTR (self );
3064- memmove (self -> b_ptr , data , len );
3065- UNLOCK_PTR (self );
3066- mydict = PyObject_GetAttrString (myself , "__dict__" );
3066+ memmove (self -> b_ptr , data , data_length );
3067+ PyObject * mydict = PyObject_GetAttrString (myself , "__dict__" );
30673068 if (mydict == NULL ) {
30683069 return NULL ;
30693070 }
@@ -3074,26 +3075,30 @@ PyCData_setstate(PyObject *myself, PyObject *args)
30743075 Py_DECREF (mydict );
30753076 return NULL ;
30763077 }
3077- res = PyDict_Update (mydict , dict );
3078+ int res = PyDict_Update (mydict , dict );
30783079 Py_DECREF (mydict );
30793080 if (res == -1 )
30803081 return NULL ;
30813082 Py_RETURN_NONE ;
30823083}
30833084
3084- /*
3085- * default __ctypes_from_outparam__ method returns self.
3086- */
3085+ /*[clinic input]
3086+ _ctypes.PyCData.__ctypes_from_outparam__
3087+
3088+ default __ctypes_from_outparam__ method returns self.
3089+ [clinic start generated code]*/
3090+
30873091static PyObject *
3088- PyCData_from_outparam (PyObject * self , PyObject * args )
3092+ _ctypes_PyCData___ctypes_from_outparam___impl (PyObject * self )
3093+ /*[clinic end generated code: output=a7facc849097b549 input=910c5fec33e268c9]*/
30893094{
30903095 return Py_NewRef (self );
30913096}
30923097
30933098static PyMethodDef PyCData_methods [] = {
3094- { "__ctypes_from_outparam__" , PyCData_from_outparam , METH_NOARGS , },
3095- PYCDATA_REDUCE_METHODDEF
3096- { "__setstate__" , PyCData_setstate , METH_VARARGS , },
3099+ _CTYPES_PYCDATA___CTYPES_FROM_OUTPARAM___METHODDEF
3100+ _CTYPES_PYCDATA___SETSTATE___METHODDEF
3101+ _CTYPES_PYCDATA___REDUCE___METHODDEF
30973102 { NULL , NULL },
30983103};
30993104
0 commit comments