Make dc_get_info() work on a closed context

There is very little API guarantees about this, but clients seem to
expect *something* to work on a closed context.  So split this up into
static info an more dynamic context-related info, but let's not
provide any guarantees about what keys are available when.

Fixes #599
This commit is contained in:
Floris Bruynooghe
2019-09-25 19:33:52 +02:00
committed by Floris Bruynooghe
parent 2b46f01fe3
commit 69f1497986
4 changed files with 66 additions and 17 deletions

View File

@@ -347,9 +347,12 @@ pub unsafe extern "C" fn dc_get_info(context: *mut dc_context_t) -> *mut libc::c
return dc_strdup(ptr::null());
}
let ffi_context = &*context;
ffi_context
.with_inner(|ctx| render_info(ctx.get_info()).unwrap_or_default().strdup())
.unwrap_or_else(|_| "".strdup())
let guard = ffi_context.inner.read().unwrap();
let info = match guard.as_ref() {
Some(ref ctx) => ctx.get_info(),
None => context::get_info(),
};
render_info(info).unwrap_or_default().strdup()
}
fn render_info(