Skip to content

Commit 657eee8

Browse files
Review
1 parent 6591f36 commit 657eee8

1 file changed

Lines changed: 17 additions & 32 deletions

File tree

crates/capi/src/pybuffer.rs

Lines changed: 17 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ const PYBUF_ANY_CONTIGUOUS: c_int = 0x0080 | PYBUF_STRIDES;
1717
const PYBUF_INDIRECT: c_int = 0x0100 | PYBUF_STRIDES;
1818

1919
#[repr(C)]
20+
#[derive(Default)]
2021
pub 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

Comments
 (0)