@@ -17,6 +17,7 @@ const PYBUF_ANY_CONTIGUOUS: c_int = 0x0080 | PYBUF_STRIDES;
1717const PYBUF_INDIRECT : c_int = 0x0100 | PYBUF_STRIDES ;
1818
1919#[ repr( C ) ]
20+ #[ derive( Default ) ]
2021pub struct Py_buffer {
2122 pub buf : * mut c_void ,
2223 pub obj : * mut PyObject ,
@@ -192,39 +193,33 @@ pub unsafe extern "C" fn PyObject_GetBuffer(
192193 format,
193194 } ) ;
194195
195- let shape_ptr = if ( flags & PYBUF_ND ) != 0 {
196- internal. shape . as_mut_ptr ( )
196+ let view_ref = unsafe { & mut * view } ;
197+ view_ref. buf = buffer. obj_bytes ( ) . as_ptr ( ) . cast_mut ( ) . cast ( ) ;
198+ view_ref. obj = obj_ref. to_owned ( ) . into_raw ( ) . as_ptr ( ) . cast ( ) ;
199+ view_ref. len = len;
200+ view_ref. itemsize = itemsize;
201+ view_ref. readonly = c_int:: from ( buffer. desc . readonly ) ;
202+ view_ref. ndim = ndim_i32;
203+ view_ref. format = if ( flags & PYBUF_FORMAT ) != 0 {
204+ internal. format . as_ptr ( ) . cast_mut ( )
197205 } else {
198206 ptr:: null_mut ( )
199207 } ;
200- let strides_ptr = if ( flags & PYBUF_STRIDES ) != 0 {
201- internal. strides . as_mut_ptr ( )
208+ view_ref . shape = if ( flags & PYBUF_ND ) != 0 {
209+ internal. shape . as_mut_ptr ( )
202210 } else {
203211 ptr:: null_mut ( )
204212 } ;
205- let suboffsets_ptr = if ( flags & PYBUF_INDIRECT ) != 0 {
206- internal. suboffsets . as_mut_ptr ( )
213+ view_ref . strides = if ( flags & PYBUF_STRIDES ) != 0 {
214+ internal. strides . as_mut_ptr ( )
207215 } else {
208216 ptr:: null_mut ( )
209217 } ;
210- let format_ptr = if ( flags & PYBUF_FORMAT ) != 0 {
211- internal. format . as_ptr ( ) . cast_mut ( )
218+ view_ref . suboffsets = if ( flags & PYBUF_INDIRECT ) != 0 {
219+ internal. suboffsets . as_mut_ptr ( )
212220 } else {
213221 ptr:: null_mut ( )
214222 } ;
215-
216- let view_ref = unsafe { & mut * view } ;
217- let obj_owned = obj_ref. to_owned ( ) ;
218- view_ref. buf = buffer. obj_bytes ( ) . as_ptr ( ) . cast_mut ( ) . cast ( ) ;
219- view_ref. obj = obj_owned. into_raw ( ) . as_ptr ( ) . cast ( ) ;
220- view_ref. len = len;
221- view_ref. itemsize = itemsize;
222- view_ref. readonly = c_int:: from ( buffer. desc . readonly ) ;
223- view_ref. ndim = ndim_i32;
224- view_ref. format = format_ptr;
225- view_ref. shape = shape_ptr;
226- view_ref. strides = strides_ptr;
227- view_ref. suboffsets = suboffsets_ptr;
228223 view_ref. internal = Box :: into_raw ( internal) . cast ( ) ;
229224 Ok ( ( ) )
230225 } )
@@ -244,17 +239,7 @@ pub unsafe extern "C" fn PyBuffer_Release(view: *mut Py_buffer) {
244239 unsafe { drop ( Box :: from_raw ( internal. as_ptr ( ) ) ) } ;
245240 }
246241
247- view_ref. buf = ptr:: null_mut ( ) ;
248- view_ref. obj = ptr:: null_mut ( ) ;
249- view_ref. len = 0 ;
250- view_ref. itemsize = 0 ;
251- view_ref. readonly = 0 ;
252- view_ref. ndim = 0 ;
253- view_ref. format = ptr:: null_mut ( ) ;
254- view_ref. shape = ptr:: null_mut ( ) ;
255- view_ref. strides = ptr:: null_mut ( ) ;
256- view_ref. suboffsets = ptr:: null_mut ( ) ;
257- view_ref. internal = ptr:: null_mut ( ) ;
242+ * view_ref = Py_buffer :: default ( ) ;
258243}
259244
260245#[ unsafe( no_mangle) ]
0 commit comments