From 7dec2e7e3bf9562f6376b46c7c4f33a525521fc1 Mon Sep 17 00:00:00 2001 From: Pierre Pronchery Date: Fri, 25 Apr 2014 19:37:41 +0800 Subject: [PATCH] No longer require wrapping return values in Variables --- src/appclient.c | 4 ++-- src/appinterface.c | 14 ++++++++++++-- src/appinterface.h | 2 +- 3 files changed, 15 insertions(+), 5 deletions(-) diff --git a/src/appclient.c b/src/appclient.c index 856224a..b9a9df4 100644 --- a/src/appclient.c +++ b/src/appclient.c @@ -114,8 +114,8 @@ char const * appclient_get_app(AppClient * appclient) /* useful */ /* appclient_call */ -int appclient_call(AppClient * appclient, Variable ** result, - char const * function, ...) +int appclient_call(AppClient * appclient, + void ** result, char const * function, ...) { int ret; size_t cnt; diff --git a/src/appinterface.c b/src/appinterface.c index fe30ef2..4552988 100644 --- a/src/appinterface.c +++ b/src/appinterface.c @@ -387,16 +387,26 @@ int appinterface_get_args_count(AppInterface * appinterface, size_t * count, /* useful */ /* appinterface_callv */ -int appinterface_callv(AppInterface * appinterface, Variable ** result, +int appinterface_callv(AppInterface * appinterface, void ** result, char const * method, size_t argc, Variable ** argv) { + int ret; AppInterfaceCall * call; + Variable * r = NULL; if((call = _appinterface_get_call(appinterface, method)) == NULL) return -1; if(argc != call->args_cnt) return -1; - return marshall_call(call->type.type, result, call->func, argc, argv); + if((ret = marshall_call(call->type.type, &r, call->func, argc, argv)) + == 0 && r != NULL) + { + if(result != NULL) + /* XXX return 0 anyway? */ + ret = variable_get_as(r, call->type.type, *result); + variable_delete(r); + } + return ret; } diff --git a/src/appinterface.h b/src/appinterface.h index c5f64d9..22516e8 100644 --- a/src/appinterface.h +++ b/src/appinterface.h @@ -41,7 +41,7 @@ int appinterface_get_args_count(AppInterface * appinterface, size_t * count, char const * function); /* useful */ -int appinterface_callv(AppInterface * appinterface, Variable ** result, +int appinterface_callv(AppInterface * appinterface, void ** result, char const * method, size_t argc, Variable ** argv); #endif /* !LIBAPP_APPINTERFACE_H */