From 900c56ee312e56b73aa80c6e07f439060f18d289 Mon Sep 17 00:00:00 2001 From: Junghoon Park Date: Thu, 23 Feb 2017 19:43:41 +0900 Subject: [PATCH] Set the cache even though app-selector is resolved Change-Id: I6c5f66a91d772facdc29b405952d59223b1624a5 Signed-off-by: Junghoon Park --- src/service.c | 31 ++++++++++++++++++++++--------- 1 file changed, 22 insertions(+), 9 deletions(-) diff --git a/src/service.c b/src/service.c index e0b01d2..48a497b 100755 --- a/src/service.c +++ b/src/service.c @@ -689,6 +689,14 @@ static void __put_cache(const char *checksum, const char *appid, uid_t uid) bundle_free(b); } +static void __put_cache_with_info(const char *checksum, const char *info, uid_t uid) +{ + char buf[PATH_MAX]; + + snprintf(buf, sizeof(buf), "@APP_SELECTOR %s", info); + __put_cache(checksum, buf, uid); +} + static void __invalidate_cache(uid_t uid) { int ret; @@ -831,6 +839,7 @@ API int aul_svc_run_service_for_uid(bundle *b, int request_code, int pkg_count = 0; int ret = -1; char *appid; + int l; GSList *pkg_list = NULL; char *query = NULL; @@ -877,16 +886,17 @@ API int aul_svc_run_service_for_uid(bundle *b, int request_code, if (appid) { _D("Hit! %s / %s", checksum, appid); - - if (!strcmp(appid, "^")) { - free(appid); - g_free(checksum); - __free_resolve_info_data(&info); - return AUL_SVC_RET_ENOMATCH; + l = strlen("@APP_SELECTOR "); + if (!strncmp("@APP_SELECTOR ", appid, l)) { + bundle_add(b, AUL_SVC_K_URI_R_INFO, &appid[l]); + ret = __run_svc_with_pkgname(APP_SELECTOR, b, request_code, + cbfunc, data, uid); + } else if (!strcmp(appid, "^")) { + ret = AUL_SVC_RET_ENOMATCH; + } else { + ret = __run_svc_with_pkgname(appid, b, request_code, + cbfunc, data, uid); } - - ret = __run_svc_with_pkgname(appid, b, request_code, - cbfunc, data, uid); free(appid); g_free(checksum); __free_resolve_info_data(&info); @@ -966,6 +976,7 @@ API int aul_svc_run_service_for_uid(bundle *b, int request_code, } } else if (pkg_count > 1) { bundle_add(b, AUL_SVC_K_URI_R_INFO, info.uri); + __put_cache_with_info(checksum, info.uri, uid); ret = __run_svc_with_pkgname(APP_SELECTOR, b, request_code, cbfunc, data, uid); goto end; @@ -1033,6 +1044,7 @@ API int aul_svc_run_service_for_uid(bundle *b, int request_code, } } else if (pkg_count > 1) { bundle_add(b, AUL_SVC_K_URI_R_INFO, info.uri_r_info); + __put_cache_with_info(checksum, info.uri_r_info, uid); ret = __run_svc_with_pkgname(APP_SELECTOR, b, request_code, cbfunc, data, uid); goto end; @@ -1096,6 +1108,7 @@ API int aul_svc_run_service_for_uid(bundle *b, int request_code, return AUL_SVC_RET_ENOMATCH; } else { bundle_add(b, AUL_SVC_K_URI_R_INFO, info.scheme); + __put_cache_with_info(checksum, info.scheme, uid); ret = __run_svc_with_pkgname(APP_SELECTOR, b, request_code, cbfunc, data, uid); } -- 2.7.4