Fix to wrong free filter list
[platform/core/appfw/pkgmgr-info.git] / src / pkgmgrinfo_private.c
index f06e841..1ace1b5 100644 (file)
@@ -51,7 +51,8 @@ static struct _pkginfo_str_map_t pkginfo_str_prop_map[] = {
        {E_PMINFO_PKGINFO_PROP_PACKAGE_AUTHOR_NAME,     PMINFO_PKGINFO_PROP_PACKAGE_AUTHOR_NAME},
        {E_PMINFO_PKGINFO_PROP_PACKAGE_AUTHOR_EMAIL,    PMINFO_PKGINFO_PROP_PACKAGE_AUTHOR_EMAIL},
        {E_PMINFO_PKGINFO_PROP_PACKAGE_AUTHOR_HREF,     PMINFO_PKGINFO_PROP_PACKAGE_AUTHOR_HREF},
-       {E_PMINFO_PKGINFO_PROP_PACKAGE_PRIVILEGE,       PMINFO_PKGINFO_PROP_PACKAGE_PRIVILEGE}
+       {E_PMINFO_PKGINFO_PROP_PACKAGE_PRIVILEGE,       PMINFO_PKGINFO_PROP_PACKAGE_PRIVILEGE},
+       {E_PMINFO_PKGINFO_PROP_PACKAGE_RES_TYPE,        PMINFO_PKGINFO_PROP_PACKAGE_RES_TYPE}
 };
 
 struct _pkginfo_int_map_t {
@@ -317,7 +318,19 @@ API int __get_filter_condition(gpointer data, uid_t uid, char **condition, GList
        case E_PMINFO_PKGINFO_PROP_PACKAGE_SYSTEM:
                snprintf(buf, sizeof(buf), "pi.package_system=? COLLATE NOCASE");
                break;
-
+       case E_PMINFO_PKGINFO_PROP_PACKAGE_RES_TYPE:
+               if (node->value == NULL || strlen(node->value) == 0) {
+                       *condition = strdup("package_res_info.res_type IS NOT NULL COLLATE NOCASE");
+                       if (*condition == NULL) {
+                               _LOGE("out of memeory");
+                               return 0;
+                       }
+                       return E_PMINFO_PKGINFO_JOIN_RES_INFO;
+               } else {
+                       snprintf(buf, sizeof(buf), "package_res_info.res_type=? COLLATE NOCASE");
+                       flag = E_PMINFO_PKGINFO_JOIN_RES_INFO;
+                       break;
+               }
        case E_PMINFO_APPINFO_PROP_APP_ID:
                snprintf(buf, sizeof(buf), "ai.app_id=?");
                break;
@@ -573,16 +586,14 @@ API char *__get_type_from_path(const char *pkg_path)
        return strdup(type);
 }
 
-static const char *__get_library_path(const char *pkg_type)
+static void __get_library_path(const char *pkg_type, const char **path)
 {
        char buf[64];
-       const char *path;
 
        snprintf(buf, sizeof(buf), "package-manager/backendlib/lib%s.so",
                        pkg_type);
-       path = tzplatform_mkpath(TZ_SYS_RO_ETC, buf);
 
-       return path;
+       *path = tzplatform_mkpath(TZ_SYS_RO_ETC, buf);
 }
 
 API pkg_plugin_set *__load_library(const char *pkg_type)
@@ -592,7 +603,7 @@ API pkg_plugin_set *__load_library(const char *pkg_type)
        bool (*on_load)(pkg_plugin_set *plugin);
        const char *library_path;
 
-       library_path = __get_library_path(pkg_type);
+       __get_library_path(pkg_type, &library_path);
        if (library_path == NULL) {
                _LOGE("cannot get library path for %s", pkg_type);
                return NULL;