use core::marker::PhantomData;
use core::ptr::NonNull;
use kernel::types::ForeignOwnable;
pub struct Kiocb<'a, T> {
inner: NonNull<bindings::kiocb>,
_phantom: PhantomData<&'a T>,
}
impl<'a, T: ForeignOwnable> Kiocb<'a, T> {
pub unsafe fn from_raw(kiocb: *mut bindings::kiocb) -> Self {
Self {
inner: unsafe { NonNull::new_unchecked(kiocb) },
_phantom: PhantomData,
}
}
pub fn as_raw(&self) -> *mut bindings::kiocb {
self.inner.as_ptr()
}
pub fn file(&self) -> <T as ForeignOwnable>::Borrowed<'a> {
let private = unsafe { (*(*self.as_raw()).ki_filp).private_data };
unsafe { <T as ForeignOwnable>::borrow(private) }
}
pub fn ki_pos(&self) -> i64 {
unsafe { (*self.as_raw()).ki_pos }
}
pub fn ki_pos_mut(&mut self) -> &mut i64 {
unsafe { &mut (*self.as_raw()).ki_pos }
}
}