@@ -62,11 +62,15 @@ pub mod raw {
62
62
fn g_file_get_type() -> GType;
63
63
fn g_file_new_for_path(path: *gchar) -> *GFile;
64
64
fn g_file_get_path(file: *GFile) -> *gchar;
65
- fn g_file_read_async(file : *GFile,
66
- io_priority: libc::c_int,
67
- cancellable: *GCancellable,
68
- callback : *u8,
69
- user_data : *());
65
+ fn g_file_read_async (file : *GFile,
66
+ io_priority : libc::c_int,
67
+ cancellable : *GCancellable,
68
+ callback : *u8,
69
+ user_data : *());
70
+ fn g_file_read_finish (file : *GFile,
71
+ res : *GAsyncResult,
72
+ error : **glib::raw::GError)
73
+ -> *GFileInputStream;
70
74
}
71
75
}
72
76
@@ -135,6 +139,8 @@ pub trait File {
135
139
io_priority: int,
136
140
cancellable: Option<&classes::Cancellable>,
137
141
callback: AsyncReadyCallback);
142
+ fn read_finish(&self, res: &interfaces::AsyncResult)
143
+ -> object::Reference<raw::GFileInputStream>;
138
144
}
139
145
140
146
impl File {
@@ -231,4 +237,49 @@ impl File for interfaces::File {
231
237
}
232
238
}
233
239
}
240
+
241
+ fn read_finish(&self, res: &interfaces::AsyncResult)
242
+ -> object::Reference<raw::GFileInputStream> {
243
+ unsafe {
244
+ let self_ptr = self.raw();
245
+ let self_ctx = self.context();
246
+ let res_raw = res.raw();
247
+ let mut stack_out: (*plumbing::GMainContext,
248
+ *raw::GFileInputStream,
249
+ *glib::raw::GError)
250
+ = (ptr::null(), ptr::null(), ptr::null());
251
+ let mut owned_out: ~(*plumbing::GMainContext,
252
+ *raw::GFileInputStream,
253
+ *glib::raw::GError);
254
+ let mut out = ptr::to_unsafe_ptr(&stack_out);
255
+ if !plumbing::call_on_stack(self_ctx,
256
+ |_ctx| unsafe {
257
+ let error: *glib::raw::GError = ptr::null();
258
+ let ret = raw::symbols::g_file_read_finish(self_ptr,
259
+ res_raw, ptr::to_unsafe_ptr(&error));
260
+ stack_out = (_ctx, ret, error);
261
+ }) {
262
+ owned_out = ~(ptr::null(), ptr::null(), ptr::null());
263
+ let po = ptr::to_mut_unsafe_ptr(owned_out);
264
+ plumbing::call_off_stack(self_ctx,
265
+ |_ctx| unsafe {
266
+ let error: *glib::raw::GError = ptr::null();
267
+ let ret = raw::symbols::g_file_read_finish(self_ptr,
268
+ res_raw, ptr::to_unsafe_ptr(&error));
269
+ *po = (_ctx, ret, error);
270
+ });
271
+ out = ptr::to_unsafe_ptr(owned_out);
272
+ }
273
+ match (*out) {
274
+ (ctx, obj, error) => {
275
+ if ptr::is_not_null(error) {
276
+ let msg = str::raw::from_c_str((*error).message);
277
+ glib::raw::symbols::g_error_free(error);
278
+ fail!(msg);
279
+ }
280
+ object::take_object(obj, ctx)
281
+ }
282
+ }
283
+ }
284
+ }
234
285
}
0 commit comments