diff --git a/gio/src/data_input_stream.rs b/gio/src/data_input_stream.rs index 07bfc1ca5822..c3dce736ef20 100644 --- a/gio/src/data_input_stream.rs +++ b/gio/src/data_input_stream.rs @@ -11,7 +11,7 @@ pub trait DataInputStreamExtManual: IsA + 'static { fn read_line>( &self, cancellable: Option<&P>, - ) -> Result, glib::Error> { + ) -> Result>, glib::Error> { unsafe { let mut length = mem::MaybeUninit::uninit(); let mut error = ptr::null_mut(); @@ -21,9 +21,13 @@ pub trait DataInputStreamExtManual: IsA + 'static { cancellable.map(|p| p.as_ref()).to_glib_none().0, &mut error, ); - let length = length.assume_init(); if error.is_null() { - Ok(FromGlibContainer::from_glib_full_num(ret, length)) + if ret.is_null() { + Ok(None) + } else { + let length = length.assume_init(); + Ok(Some(FromGlibContainer::from_glib_full_num(ret, length))) + } } else { Err(from_glib_full(error)) } @@ -33,7 +37,7 @@ pub trait DataInputStreamExtManual: IsA + 'static { #[doc(alias = "g_data_input_stream_read_line_async")] fn read_line_async< P: IsA, - Q: FnOnce(Result, glib::Error>) + 'static, + Q: FnOnce(Result>, glib::Error>) + 'static, >( &self, io_priority: glib::Priority, @@ -53,7 +57,7 @@ pub trait DataInputStreamExtManual: IsA + 'static { let user_data: Box_> = Box_::new(glib::thread_guard::ThreadGuard::new(callback)); unsafe extern "C" fn read_line_async_trampoline< - Q: FnOnce(Result, glib::Error>) + 'static, + Q: FnOnce(Result>, glib::Error>) + 'static, >( _source_object: *mut glib::gobject_ffi::GObject, res: *mut ffi::GAsyncResult, @@ -67,9 +71,13 @@ pub trait DataInputStreamExtManual: IsA + 'static { length.as_mut_ptr(), &mut error, ); - let length = length.assume_init(); let result = if error.is_null() { - Ok(FromGlibContainer::from_glib_full_num(ret, length)) + if ret.is_null() { + Ok(None) + } else { + let length = length.assume_init(); + Ok(Some(FromGlibContainer::from_glib_full_num(ret, length))) + } } else { Err(from_glib_full(error)) }; @@ -95,8 +103,9 @@ pub trait DataInputStreamExtManual: IsA + 'static { io_priority: glib::Priority, ) -> Pin< Box_< - dyn std::future::Future, glib::Error>> - + 'static, + dyn std::future::Future< + Output = Result>, glib::Error>, + > + 'static, >, > { Box_::pin(crate::GioFuture::new( @@ -159,7 +168,7 @@ pub trait DataInputStreamExtManual: IsA + 'static { user_data: glib::ffi::gpointer, ) { let mut error = ptr::null_mut(); - let ret = ffi::g_data_input_stream_read_line_finish( + let ret = ffi::g_data_input_stream_read_line_finish_utf8( _source_object as *mut _, res, ptr::null_mut(),