tizen 2.3 release tizen_2.3 submit/tizen_2.3/20150202.061422 tizen_2.3_release
authorjk7744.park <jk7744.park@samsung.com>
Sun, 1 Feb 2015 04:35:03 +0000 (13:35 +0900)
committerjk7744.park <jk7744.park@samsung.com>
Sun, 1 Feb 2015 04:35:03 +0000 (13:35 +0900)
35 files changed:
CMakeLists.txt
dump_pkgmgr.sh.in [new file with mode: 0644]
include/pkgmgr-info-internal.h [deleted file]
include/pkgmgr-info.h
include/pkgmgrinfo_basic.h [new file with mode: 0644]
include/pkgmgrinfo_debug.h [moved from include/pkgmgr-info-debug.h with 100% similarity]
include/pkgmgrinfo_feature.h [new file with mode: 0755]
include/pkgmgrinfo_private.h
include/pkgmgrinfo_type.h [new file with mode: 0755]
packaging/pkgmgr-info.spec
parser/CMakeLists.txt
parser/manifest.xsd.in
parser/pkgmgr_parser.c
parser/pkgmgr_parser.h
parser/pkgmgr_parser_db.c
parser/pkgmgr_parser_db.h
parser/pkgmgr_parser_db_util.c [new file with mode: 0644]
parser/pkgmgr_parser_db_util.h [new file with mode: 0644]
parser/pkgmgr_parser_feature.c [new file with mode: 0755]
parser/pkgmgr_parser_feature.h [new file with mode: 0755]
parser/pkgmgr_parser_internal.h
parser/pkgmgr_parser_plugin.c
parser/pkgmgr_parser_plugin_list.txt.in
parser/pkgmgr_parser_signature.c
parser/preload_list.txt.in [deleted file]
pkgmgr-parser.manifest.in
src/pkgmgr-info-internal.c [deleted file]
src/pkgmgrinfo_appinfo.c
src/pkgmgrinfo_basic.c [new file with mode: 0644]
src/pkgmgrinfo_certinfo.c
src/pkgmgrinfo_client.c
src/pkgmgrinfo_db.c
src/pkgmgrinfo_feature.c [new file with mode: 0644]
src/pkgmgrinfo_pkginfo.c
src/pkgmgrinfo_private.c [changed mode: 0644->0755]

index b848832..fbc53a7 100755 (executable)
@@ -17,14 +17,14 @@ INCLUDE_DIRECTORIES(${CMAKE_SOURCE_DIR}/include ${CMAKE_SOURCE_DIR}/src ${CMAKE_
 
 ### Required packages
 INCLUDE(FindPkgConfig)
-pkg_check_modules(pkgs REQUIRED glib-2.0 dlog vconf sqlite3 db-util libxml-2.0 dbus-1 dbus-glib-1)
+pkg_check_modules(pkgs REQUIRED openssl glib-2.0 dlog vconf sqlite3 db-util libxml-2.0 dbus-1 dbus-glib-1 journal)
 
 FOREACH(flag ${pkgs_CFLAGS})
        SET(EXTRA_CFLAGS "${EXTRA_CFLAGS} ${flag}")
 ENDFOREACH(flag)
 
 
-pkg_check_modules(libpkgs REQUIRED glib-2.0 dlog vconf sqlite3 db-util libxml-2.0 dbus-1 dbus-glib-1)
+pkg_check_modules(libpkgs REQUIRED openssl glib-2.0 dlog vconf sqlite3 db-util libxml-2.0 dbus-1 dbus-glib-1 journal)
 
 FOREACH(flag ${libpkgs_CFLAGS})
        SET(EXTRA_CFLAGS "${EXTRA_CFLAGS} ${flag}")
@@ -47,7 +47,10 @@ add_subdirectory(parser)
 ## build pkgmgr-info library
 add_library(pkgmgr-info SHARED         src/pkgmgrinfo_client.c src/pkgmgrinfo_db.c src/pkgmgrinfo_certinfo.c
                                                                src/pkgmgrinfo_appinfo.c src/pkgmgrinfo_pkginfo.c
-                                                               src/pkgmgrinfo_private.c src/pkgmgr-info-internal.c)
+                                                               src/pkgmgrinfo_private.c
+                                                               src/pkgmgrinfo_basic.c
+                                                               src/pkgmgrinfo_feature.c
+                                                               )
 
 
 SET_TARGET_PROPERTIES(pkgmgr-info PROPERTIES SOVERSION ${VERSION_MAJOR})
@@ -58,8 +61,14 @@ CONFIGURE_FILE(${CMAKE_SOURCE_DIR}/pkgmgr-info.pc.in ${CMAKE_BINARY_DIR}/pkgmgr-
 configure_file(parser_path.conf.in parser_path.conf @ONLY)
 configure_file(pkgmgr-info.manifest.in pkgmgr-info.manifest @ONLY)
 configure_file(pkgmgr-parser.manifest.in pkgmgr-parser.manifest @ONLY)
+configure_file(dump_pkgmgr.sh.in dump_pkgmgr.sh @ONLY)
 
 INSTALL(TARGETS pkgmgr-info DESTINATION ${LIB_INSTALL_DIR} COMPONENT RuntimeLibraries)
 INSTALL(FILES ${CMAKE_CURRENT_BINARY_DIR}/pkgmgr-info.pc DESTINATION ${LIB_INSTALL_DIR}/pkgconfig)
 INSTALL(FILES ${CMAKE_CURRENT_SOURCE_DIR}/include/pkgmgr-info.h DESTINATION include)
+INSTALL(FILES ${CMAKE_CURRENT_SOURCE_DIR}/include/pkgmgrinfo_basic.h DESTINATION include)
+INSTALL(FILES ${CMAKE_CURRENT_SOURCE_DIR}/include/pkgmgrinfo_feature.h DESTINATION include)
+INSTALL(FILES ${CMAKE_CURRENT_SOURCE_DIR}/include/pkgmgrinfo_type.h DESTINATION include)
 INSTALL(FILES ${CMAKE_CURRENT_BINARY_DIR}/parser_path.conf DESTINATION ${PREFIX}/etc/package-manager/)
+INSTALL(FILES ${CMAKE_CURRENT_BINARY_DIR}/dump_pkgmgr.sh DESTINATION /opt/etc/dump.d/module.d/)
+
diff --git a/dump_pkgmgr.sh.in b/dump_pkgmgr.sh.in
new file mode 100644 (file)
index 0000000..e63f879
--- /dev/null
@@ -0,0 +1,10 @@
+#!/bin/sh
+#--------------------------------------
+#    dump pkgmgr db
+#--------------------------------------
+
+PKGMGR_DB_DEBUG=$1/pkgmgr
+mkdir -p ${PKGMGR_DB_DEBUG}
+/bin/cp /opt/dbspace/.pkgmgr_cert.db* ${PKGMGR_DB_DEBUG}
+/bin/cp /opt/dbspace/.pkgmgr_parser.db* ${PKGMGR_DB_DEBUG}
+/bin/cp -r /opt/usr/data/pkgmgr/ ${PKGMGR_DB_DEBUG}
diff --git a/include/pkgmgr-info-internal.h b/include/pkgmgr-info-internal.h
deleted file mode 100755 (executable)
index 5329e1b..0000000
+++ /dev/null
@@ -1,144 +0,0 @@
-/*
- * pkgmgr-info
- *
- * Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved.
- *
- * Contact: Jayoun Lee <airjany@samsung.com>, Sewook Park <sewook7.park@samsung.com>,
- * Jaeho Lee <jaeho81.lee@samsung.com>, Shobhit Srivastava <shobhit.s@samsung.com>
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- */
-
-
-#ifndef __PKGMGR_INFO_INTERNAL_H__
-#define __PKGMGR_INFO_INTERNAL_H__
-
-#ifndef DEPRECATED
-#define DEPRECATED     __attribute__ ((__deprecated__))
-#endif
-
-#ifndef API
-#define API __attribute__ ((visibility("default")))
-#endif
-
-#define MMC_PATH "/opt/storage/sdcard"
-#define PKG_SD_PATH MMC_PATH"/app2sd/"
-
-#define PKG_RW_PATH "/opt/usr/apps/"
-#define PKG_RO_PATH "/usr/apps/"
-#define BLOCK_SIZE      4096 /*in bytes*/
-
-#define PKG_TYPE_STRING_LEN_MAX                        128
-#define PKG_VERSION_STRING_LEN_MAX             128
-#define PKG_VALUE_STRING_LEN_MAX               512
-#define PKG_LOCALE_STRING_LEN_MAX              8
-
-#define MAX_QUERY_LEN  4096
-#define MAX_CERT_TYPE  9
-
-#define MANIFEST_DB            "/opt/dbspace/.pkgmgr_parser.db"
-#define CERT_DB                        "/opt/dbspace/.pkgmgr_cert.db"
-#define DATACONTROL_DB "/opt/usr/dbspace/.app-package.db"
-
-/*String properties for filtering based on package info*/
-typedef enum _pkgmgrinfo_pkginfo_filter_prop_str {
-       E_PMINFO_PKGINFO_PROP_PACKAGE_MIN_STR = 101,
-       E_PMINFO_PKGINFO_PROP_PACKAGE_ID = E_PMINFO_PKGINFO_PROP_PACKAGE_MIN_STR,
-       E_PMINFO_PKGINFO_PROP_PACKAGE_TYPE,
-       E_PMINFO_PKGINFO_PROP_PACKAGE_VERSION,
-       E_PMINFO_PKGINFO_PROP_PACKAGE_INSTALL_LOCATION,
-       E_PMINFO_PKGINFO_PROP_PACKAGE_INSTALLED_STORAGE,
-       E_PMINFO_PKGINFO_PROP_PACKAGE_AUTHOR_NAME,
-       E_PMINFO_PKGINFO_PROP_PACKAGE_AUTHOR_EMAIL,
-       E_PMINFO_PKGINFO_PROP_PACKAGE_AUTHOR_HREF,
-       E_PMINFO_PKGINFO_PROP_PACKAGE_MAX_STR = E_PMINFO_PKGINFO_PROP_PACKAGE_AUTHOR_HREF
-} pkgmgrinfo_pkginfo_filter_prop_str;
-
-/*Boolean properties for filtering based on package info*/
-typedef enum _pkgmgrinfo_pkginfo_filter_prop_bool {
-       E_PMINFO_PKGINFO_PROP_PACKAGE_MIN_BOOL = 201,
-       E_PMINFO_PKGINFO_PROP_PACKAGE_REMOVABLE = E_PMINFO_PKGINFO_PROP_PACKAGE_MIN_BOOL,
-       E_PMINFO_PKGINFO_PROP_PACKAGE_PRELOAD,
-       E_PMINFO_PKGINFO_PROP_PACKAGE_READONLY,
-       E_PMINFO_PKGINFO_PROP_PACKAGE_UPDATE,
-       E_PMINFO_PKGINFO_PROP_PACKAGE_APPSETTING,
-       E_PMINFO_PKGINFO_PROP_PACKAGE_NODISPLAY_SETTING,
-       E_PMINFO_PKGINFO_PROP_PACKAGE_MAX_BOOL = E_PMINFO_PKGINFO_PROP_PACKAGE_NODISPLAY_SETTING
-} pkgmgrinfo_pkginfo_filter_prop_bool;
-
-/*Integer properties for filtering based on package info*/
-typedef enum _pkgmgrinfo_pkginfo_filter_prop_int {
-       E_PMINFO_PKGINFO_PROP_PACKAGE_MIN_INT = 301,
-       E_PMINFO_PKGINFO_PROP_PACKAGE_SIZE = E_PMINFO_PKGINFO_PROP_PACKAGE_MIN_INT,
-       E_PMINFO_PKGINFO_PROP_PACKAGE_MAX_INT = E_PMINFO_PKGINFO_PROP_PACKAGE_SIZE
-} pkgmgrinfo_pkginfo_filter_prop_int;
-
-/*String properties for filtering based on app info*/
-typedef enum _pkgmgrinfo_appinfo_filter_prop_str {
-       E_PMINFO_APPINFO_PROP_APP_MIN_STR = 401,
-       E_PMINFO_APPINFO_PROP_APP_ID = E_PMINFO_APPINFO_PROP_APP_MIN_STR,
-       E_PMINFO_APPINFO_PROP_APP_COMPONENT,
-       E_PMINFO_APPINFO_PROP_APP_EXEC,
-       E_PMINFO_APPINFO_PROP_APP_ICON,
-       E_PMINFO_APPINFO_PROP_APP_TYPE,
-       E_PMINFO_APPINFO_PROP_APP_OPERATION,
-       E_PMINFO_APPINFO_PROP_APP_URI,
-       E_PMINFO_APPINFO_PROP_APP_MIME,
-       E_PMINFO_APPINFO_PROP_APP_HWACCELERATION,
-       E_PMINFO_APPINFO_PROP_APP_CATEGORY,
-       E_PMINFO_APPINFO_PROP_APP_SCREENREADER,
-       E_PMINFO_APPINFO_PROP_APP_MAX_STR = E_PMINFO_APPINFO_PROP_APP_CATEGORY
-} pkgmgrinfo_appinfo_filter_prop_str;
-
-/*Boolean properties for filtering based on app info*/
-typedef enum _pkgmgrinfo_appinfo_filter_prop_bool {
-       E_PMINFO_APPINFO_PROP_APP_MIN_BOOL = 501,
-       E_PMINFO_APPINFO_PROP_APP_NODISPLAY = E_PMINFO_APPINFO_PROP_APP_MIN_BOOL,
-       E_PMINFO_APPINFO_PROP_APP_MULTIPLE,
-       E_PMINFO_APPINFO_PROP_APP_ONBOOT,
-       E_PMINFO_APPINFO_PROP_APP_AUTORESTART,
-       E_PMINFO_APPINFO_PROP_APP_TASKMANAGE,
-       E_PMINFO_APPINFO_PROP_APP_LAUNCHCONDITION,
-       E_PMINFO_APPINFO_PROP_APP_MAX_BOOL = E_PMINFO_APPINFO_PROP_APP_LAUNCHCONDITION
-} pkgmgrinfo_appinfo_filter_prop_bool;
-
-/*Integer properties for filtering based on app info*/
-typedef enum _pkgmgrinfo_appinfo_filter_prop_int {
-       /*Currently No Fields*/
-       E_PMINFO_APPINFO_PROP_APP_MIN_INT = 601,
-       E_PMINFO_APPINFO_PROP_APP_MAX_INT = E_PMINFO_APPINFO_PROP_APP_MIN_INT
-} pkgmgrinfo_appinfo_filter_prop_int;
-
-/*Integer properties for filtering based on app info*/
-typedef enum _pkgmgrinfo_pkginfo_filter_prop_range {
-       /*Currently No Fields*/
-       E_PMINFO_PKGINFO_PROP_RANGE_MIN_INT = 701,
-       E_PMINFO_PKGINFO_PROP_RANGE_BASIC,
-       E_PMINFO_PKGINFO_PROP_RANGE_MAX_INT = E_PMINFO_PKGINFO_PROP_RANGE_BASIC
-} pkgmgrinfo_pkginfo_filter_prop_range;
-
-
-pkgmgrinfo_pkginfo_filter_prop_str _pminfo_pkginfo_convert_to_prop_str(const char *property);
-pkgmgrinfo_pkginfo_filter_prop_int _pminfo_pkginfo_convert_to_prop_int(const char *property);
-pkgmgrinfo_pkginfo_filter_prop_bool _pminfo_pkginfo_convert_to_prop_bool(const char *property);
-
-pkgmgrinfo_appinfo_filter_prop_str _pminfo_appinfo_convert_to_prop_str(const char *property);
-pkgmgrinfo_appinfo_filter_prop_int _pminfo_appinfo_convert_to_prop_int(const char *property);
-pkgmgrinfo_appinfo_filter_prop_bool _pminfo_appinfo_convert_to_prop_bool(const char *property);
-
-pkgmgrinfo_pkginfo_filter_prop_range _pminfo_pkginfo_convert_to_prop_range(const char *property);
-
-int _pkgmgrinfo_validate_cb(void *data, int ncols, char **coltxt, char **colname);
-
-#endif  /* __PKGMGR_INFO_INTERNAL_H__ */
index 8e233d1..71a78bf 100755 (executable)
 #include <errno.h>
 #include <stdbool.h>
 
+#include "pkgmgrinfo_type.h"
+#include "pkgmgrinfo_feature.h"
+
 #ifdef __cplusplus
 extern "C" {
 #endif
 
-
 /**
  * @mainpage
  *
@@ -74,44 +76,6 @@ extern "C" {
 
 
 /**
- * @brief A handle to insert certificate information
- */
-typedef void* pkgmgrinfo_instcertinfo_h;
-
-/**
- * @brief Certificate Types to be used for setting information
- */
-typedef enum {
-       PMINFO_SET_AUTHOR_ROOT_CERT = 0,                /**< Author Root Certificate*/
-       PMINFO_SET_AUTHOR_INTERMEDIATE_CERT = 1,                /**< Author Intermediate Certificate*/
-       PMINFO_SET_AUTHOR_SIGNER_CERT = 2,              /**< Author Signer Certificate*/
-       PMINFO_SET_DISTRIBUTOR_ROOT_CERT = 3,           /**< Distributor Root Certificate*/
-       PMINFO_SET_DISTRIBUTOR_INTERMEDIATE_CERT = 4,           /**< Distributor Intermediate Certificate*/
-       PMINFO_SET_DISTRIBUTOR_SIGNER_CERT = 5,         /**< Distributor Signer Certificate*/
-       PMINFO_SET_DISTRIBUTOR2_ROOT_CERT = 6,          /**< End Entity Root Certificate*/
-       PMINFO_SET_DISTRIBUTOR2_INTERMEDIATE_CERT = 7,          /**< End Entity Intermediate Certificate*/
-       PMINFO_SET_DISTRIBUTOR2_SIGNER_CERT = 8,                /**< End Entity Signer Certificate*/
-}pkgmgrinfo_instcert_type;
-
-typedef enum {
-       PMINFO_CERT_COMPARE_MATCH,
-       PMINFO_CERT_COMPARE_MISMATCH,
-       PMINFO_CERT_COMPARE_LHS_NO_CERT,
-       PMINFO_CERT_COMPARE_RHS_NO_CERT,
-       PMINFO_CERT_COMPARE_BOTH_NO_CERT,
-       PMINFO_CERT_COMPARE_ERROR,
-} pkgmgrinfo_cert_compare_result_type_e;
-
-/**
- * @brief API return values
- */
-enum {
-       PMINFO_R_EINVAL = -2,           /**< Invalid argument */
-       PMINFO_R_ERROR = -1,            /**< General error */
-       PMINFO_R_OK = 0                 /**< General success */
-};
-
-/**
  * @brief Value to be used when filtering based on install location
  */
 #define        PMINFO_PKGINFO_INSTALL_LOCATION_AUTO            "LOCATION_AUTO"
@@ -126,242 +90,6 @@ enum {
  */
 #define        PMINFO_PKGINFO_INSTALL_LOCATION_EXTERNAL        "LOCATION_EXTERNAL"
 
-/**
- * @brief Value to be used when filtering based on app-component
- */
-#define        PMINFO_APPINFO_UI_APP                           "UI_APP"
-
-/**
- * @brief Value to be used when filtering based on app-component
- */
-#define        PMINFO_APPINFO_SVC_APP                          "SVC_APP"
-
-typedef enum {
-       PMINFO_HWACCELERATION_NOT_USE_GL = 0,           /**< Don't use hardware acceleration*/
-       PMINFO_HWACCELERATION_USE_GL = 1,               /**< Use hardware acceleration*/
-       PMINFO_HWACCELERATION_USE_SYSTEM_SETTING = 2            /**< Follow system setting for hardware acceleration */
-}pkgmgrinfo_app_hwacceleration;
-
-typedef enum {
-       PMINFO_SCREENREADER_OFF = 0,            /**< Don't use screen reader*/
-       PMINFO_SCREENREADER_ON = 1,             /**< Use screen reader*/
-       PMINFO_SCREENREADER_USE_SYSTEM_SETTING = 2              /**< Follow system setting for screen reader */
-}pkgmgrinfo_app_screenreader;
-
-typedef enum {
-       PMINFO_RECENTIMAGE_USE_ICON = 0,                /**<Use icon for recent image*/
-       PMINFO_RECENTIMAGE_USE_CAPTURE = 1,             /**< Use capture for recent image*/
-       PMINFO_RECENTIMAGE_USE_NOTHING = 2              /**< Don't use recent image */
-}pkgmgrinfo_app_recentimage;
-
-/**
- * @brief A handle to get package information
- */
-typedef void* pkgmgrinfo_pkginfo_h;
-
-/**
- * @brief A handle to get application information
- */
-typedef void* pkgmgrinfo_appinfo_h;
-
-/**
- * @brief A handle to get certificate information
- */
-typedef void* pkgmgrinfo_certinfo_h;
-
-/**
- * @brief A handle to insert package information
- */
-typedef void* pkgmgrinfo_pkgdbinfo_h;
-
-/**
- * @brief A handle to filter package information
- */
-typedef void* pkgmgrinfo_pkginfo_filter_h;
-
-/**
- * @brief A handle to filter application information
- */
-typedef void* pkgmgrinfo_appinfo_filter_h;
-
-/**
- * @brief A handle to filter application metadata  information
- */
-typedef void* pkgmgrinfo_appinfo_metadata_filter_h;
-
-/**
- * @brief A handle to get appcontrol information
- */
-typedef void* pkgmgrinfo_appcontrol_h;
-
-/**
- * @fn int (*pkgmgrinfo_pkg_list_cb ) (const pkgmgrinfo_pkginfo_h handle, void *user_data)
- *
- * @brief Specifies the type of function passed to pkgmgrinfo_pkginfo_get_list(), pkgmgrinfo_pkginfo_filter_foreach_pkginfo()
- *
- * @param[in] handle the pkginfo handle
- * @param[in] user_data user data passed to pkgmgrinfo_pkginfo_get_list(), pkgmgrinfo_pkginfo_filter_foreach_pkginfo()
- *
- * @return 0 if success, negative value(<0) if fail. Callback is not called if return value is negative.\n
- *
- * @see  pkgmgrinfo_pkginfo_get_list()
- * @see  pkgmgrinfo_pkginfo_filter_foreach_pkginfo()
- */
-typedef int (*pkgmgrinfo_pkg_list_cb ) (const pkgmgrinfo_pkginfo_h handle,
-                                                       void *user_data);
-
-/**
- * @fn int (*pkgmgrinfo_app_list_cb ) (const pkgmgrinfo_appinfo_h handle, void *user_data)
- *
- * @brief Specifies the type of function passed to pkgmgrinfo_appinfo_get_list(), pkgmgrinfo_appinfo_filter_foreach_appinfo(), pkgmgrinfo_appinfo_metadata_filter_foreach()
- *
- * @param[in] handle the appinfo handle
- * @param[in] user_data user data passed to pkgmgrinfo_appinfo_get_list(), pkgmgrinfo_appinfo_filter_foreach_appinfo(), pkgmgrinfo_appinfo_metadata_filter_foreach()
- *
- * @return 0 if success, negative value(<0) if fail. Callback is not called if return value is negative.\n
- *
- * @see  pkgmgrinfo_appinfo_get_list()
- * @see  pkgmgrinfo_appinfo_filter_foreach_appinfo()
- * @see  pkgmgrinfo_appinfo_metadata_filter_foreach()
- */
-typedef int (*pkgmgrinfo_app_list_cb ) (const pkgmgrinfo_appinfo_h handle,
-                                                       void *user_data);
-
-/**
- * @fn int (*pkgmgrinfo_app_category_list_cb ) (const char *category_name, void *user_data)
- *
- * @brief Specifies the type of function passed to pkgmgrinfo_appinfo_foreach_category()
- *
- * @param[in] category_name the name of the category
- * @param[in] user_data user data passed to pkgmgrinfo_appinfo_foreach_category()
- *
- * @return 0 if success, negative value(<0) if fail. Callback is not called if return value is negative.\n
- *
- * @see  pkgmgrinfo_appinfo_foreach_category()
- */
-typedef int (*pkgmgrinfo_app_category_list_cb ) (const char *category_name,
-                                                       void *user_data);
-
-/**
- * @fn int (*pkgmgrinfo_app_permission_list_cb ) (const char *permission_type, void *user_data)
- *
- * @brief Specifies the type of function passed to pkgmgrinfo_appinfo_foreach_category()
- *
- * @param[in] permission_name the name of the permission
- * @param[in] user_data user data passed to pkgmgrinfo_appinfo_foreach_category()
- *
- * @return 0 if success, negative value(<0) if fail. Callback is not called if return value is negative.\n
- *
- * @see  pkgmgrinfo_appinfo_foreach_category()
- */
-typedef int (*pkgmgrinfo_app_permission_list_cb ) (const char *permission_type,
-                                                       void *user_data);
-
-/**
- * @fn int (*pkgmgrinfo_pkg_privilege_list_cb ) (const char *privilege_name, void *user_data)
- *
- * @brief Specifies the type of function passed to pkgmgrinfo_pkginfo_foreach_privilege()
- *
- * @param[in] privilege_name the name of the privilege
- * @param[in] user_data user data passed to pkgmgrinfo_pkginfo_foreach_privilege()
- *
- * @return 0 if success, negative value(<0) if fail. Callback is not called if return value is negative.\n
- *
- * @see  pkgmgrinfo_pkginfo_foreach_privilege()
- */
-typedef int (*pkgmgrinfo_pkg_privilege_list_cb ) (const char *privilege_name,
-                                                       void *user_data);
-
-/**
- * @fn int (*pkgmgrinfo_app_metadata_list_cb ) (const char *metadata_key, const char *metadata_value, void *user_data)
- *
- * @brief Specifies the type of function passed to pkgmgrinfo_appinfo_foreach_metadata()
- *
- * @param[in] metadata_name the name of the metadata
- * @param[in] metadata_value the value of the metadata
- * @param[in] user_data user data passed to pkgmgrinfo_appinfo_foreach_metadata()
- *
- * @return 0 if success, negative value(<0) if fail. Callback is not called if return value is negative.\n
- *
- * @see  pkgmgrinfo_appinfo_foreach_metadata()
- */
-typedef int (*pkgmgrinfo_app_metadata_list_cb ) (const char *metadata_key,
-                                                       const char *metadata_value, void *user_data);
-
-/**
- * @fn int (*pkgmgrinfo_app_control_list_cb ) (pkgmgrinfo_appcontrol_h handle, void *user_data)
- *
- * @brief Specifies the type of function passed to pkgmgrinfo_appinfo_foreach_appcontrol()
- *
- * @param[in] handle the appcontrol handle to be used to get operation, uri and mime info
- * @param[in] user_data user data passed to pkgmgrinfo_appinfo_foreach_appcontrol()
- *
- * @return 0 if success, negative value(<0) if fail. Callback is not called if return value is negative.\n
- *
- * @see  pkgmgrinfo_appinfo_foreach_appcontrol()
- */
-typedef int (*pkgmgrinfo_app_control_list_cb ) (pkgmgrinfo_appcontrol_h handle,
-                                                       void *user_data);
-
-/**
- * @brief Install Location Types
- */
-typedef enum {
-       PMINFO_INSTALL_LOCATION_AUTO = 0,               /**< Auto*/
-       PMINFO_INSTALL_LOCATION_INTERNAL_ONLY,          /**< Internal Installation*/
-       PMINFO_INSTALL_LOCATION_PREFER_EXTERNAL,                /**< External Installation*/
-}pkgmgrinfo_install_location;
-
-/**
- * @brief Application Component Types
- */
-typedef enum {
-       PMINFO_ALL_APP = 0,     /**< All Application*/
-       PMINFO_UI_APP,          /**< UI Application*/
-       PMINFO_SVC_APP,         /**< Service Application*/
-}pkgmgrinfo_app_component;
-
-/**
- * @brief Application Storage Types
- */
-typedef enum {
-       PMINFO_INTERNAL_STORAGE = 0,            /**< Internal Storage*/
-       PMINFO_EXTERNAL_STORAGE = 1,            /**< External Storage*/
-}pkgmgrinfo_installed_storage;
-
-/**
- * @brief Certificate Types to be used for getting information
- */
-typedef enum {
-       PMINFO_AUTHOR_ROOT_CERT = 0,            /**< Author Root Certificate*/
-       PMINFO_AUTHOR_INTERMEDIATE_CERT = 1,            /**< Author Intermediate Certificate*/
-       PMINFO_AUTHOR_SIGNER_CERT = 2,          /**< Author Signer Certificate*/
-       PMINFO_DISTRIBUTOR_ROOT_CERT = 3,               /**< Distributor Root Certificate*/
-       PMINFO_DISTRIBUTOR_INTERMEDIATE_CERT = 4,               /**< Distributor Intermediate Certificate*/
-       PMINFO_DISTRIBUTOR_SIGNER_CERT = 5,             /**< Distributor Signer Certificate*/
-       PMINFO_DISTRIBUTOR2_ROOT_CERT = 6,              /**< End Entity Root Certificate*/
-       PMINFO_DISTRIBUTOR2_INTERMEDIATE_CERT = 7,              /**< End Entity Intermediate Certificate*/
-       PMINFO_DISTRIBUTOR2_SIGNER_CERT = 8,            /**< End Entity Signer Certificate*/
-}pkgmgrinfo_cert_type;
-
-/**
- * @brief Install Location Types to be used when setting data in DB
- */
-typedef enum {
-       INSTALL_INTERNAL = 0,           /**< Internal Installation*/
-       INSTALL_EXTERNAL,               /**< External Installation*/
-} INSTALL_LOCATION;
-
- /**
-  * @brief permission Types
-  */
- typedef enum {
-        PMINFO_PERMISSION_NORMAL = 0,           /**< permission normal*/
-        PMINFO_PERMISSION_SIGNATURE,    /**< permission type is signature*/
-        PMINFO_PERMISSION_PRIVILEGE,    /**< permission type is privilege*/
- }pkgmgrinfo_permission_type;
-
-
  /** String property for filtering based on package info*/
 #define        PMINFO_PKGINFO_PROP_PACKAGE_ID          "PMINFO_PKGINFO_PROP_PACKAGE_ID"
  /** String property for filtering based on package info*/
@@ -378,6 +106,8 @@ typedef enum {
 #define        PMINFO_PKGINFO_PROP_PACKAGE_AUTHOR_EMAIL                "PMINFO_PKGINFO_PROP_PACKAGE_AUTHOR_EMAIL"
  /** String property for filtering based on package info*/
 #define        PMINFO_PKGINFO_PROP_PACKAGE_AUTHOR_HREF         "PMINFO_PKGINFO_PROP_PACKAGE_AUTHOR_HREF"
+  /** String property for filtering based on package info*/
+#define        PMINFO_PKGINFO_PROP_PACKAGE_STORECLIENT_ID              "PMINFO_PKGINFO_PROP_PACKAGE_STORECLIENT_ID"
 
  /** Boolean property for filtering based on package info*/
 #define        PMINFO_PKGINFO_PROP_PACKAGE_REMOVABLE           "PMINFO_PKGINFO_PROP_PACKAGE_REMOVABLE"
@@ -391,9 +121,17 @@ typedef enum {
 #define        PMINFO_PKGINFO_PROP_PACKAGE_APPSETTING          "PMINFO_PKGINFO_PROP_PACKAGE_APPSETTING"
    /** Boolean property for filtering based on package info*/
 #define        PMINFO_PKGINFO_PROP_PACKAGE_NODISPLAY_SETTING           "PMINFO_PKGINFO_PROP_PACKAGE_NODISPLAY_SETTING"
+ /** Boolean property for filtering based on package info*/
+#define        PMINFO_PKGINFO_PROP_PACKAGE_SUPPORT_DISABLE             "PMINFO_PKGINFO_PROP_PACKAGE_SUPPORT_DISABLE"
+  /** Boolean property for filtering based on package info*/
+#define        PMINFO_PKGINFO_PROP_PACKAGE_DISABLE                             "PMINFO_PKGINFO_PROP_PACKAGE_DISABLE"
+ /** Boolean property for filtering based on package info*/
+#define        PMINFO_PKGINFO_PROP_PACKAGE_USE_RESET                           "PMINFO_PKGINFO_PROP_PACKAGE_USE_RESET"
 
  /** Integer property for filtering based on package info*/
 #define        PMINFO_PKGINFO_PROP_PACKAGE_SIZE                "PMINFO_PKGINFO_PROP_PACKAGE_SIZE"
+ /** Integer property for filtering based on package info*/
+#define        PMINFO_PKGINFO_PROP_PACKAGE_SUPPORT_MODE                "PMINFO_PKGINFO_PROP_PACKAGE_SUPPORT_MODE"
 
  /** String property for filtering based on app info*/
 #define        PMINFO_APPINFO_PROP_APP_ID              "PMINFO_APPINFO_PROP_APP_ID"
@@ -430,11 +168,27 @@ typedef enum {
 #define        PMINFO_APPINFO_PROP_APP_TASKMANAGE      "PMINFO_APPINFO_PROP_APP_TASKMANAGE"
  /** Boolean property for filtering based on app info*/
 #define        PMINFO_APPINFO_PROP_APP_LAUNCHCONDITION "PMINFO_APPINFO_PROP_APP_LAUNCHCONDITION"
+ /** Boolean property for filtering based on app info*/
+#define        PMINFO_APPINFO_PROP_APP_SUPPORT_DISABLE "PMINFO_APPINFO_PROP_APP_SUPPORT_DISABLE"
+ /** Boolean property for filtering based on app info*/
+#define        PMINFO_APPINFO_PROP_APP_DISABLE                 "PMINFO_APPINFO_PROP_APP_DISABLE"
+ /** Boolean property for filtering based on app info*/
+#define        PMINFO_APPINFO_PROP_APP_REMOVABLE               "PMINFO_APPINFO_PROP_APP_REMOVABLE"
+
+ /** Integer property for filtering based on app info*/
+#define        PMINFO_APPINFO_PROP_APP_SUPPORT_MODE            "PMINFO_APPINFO_PROP_APP_SUPPORT_MODE"
 
  /** will be updated*/
  /** string property for filtering based on pkg info*/
 #define        PMINFO_PKGINFO_PROP_RANGE_BASIC "PMINFO_PKGINFO_PROP_RANGE_BASIC"
 
+/** Integer property for mode*/
+#define        PMINFO_MODE_PROP_ULTRA_POWER_SAVING     0x00000001
+#define        PMINFO_MODE_PROP_COOL_DOWN                      0x00000002
+#define        PMINFO_MODE_PROP_SCREEN_READER          0x00000004
+
+
+
 /**
  * @fn int pkgmgrinfo_pkginfo_get_list(pkgmgrinfo_pkg_list_cb pkg_list_cb, void *user_data)
  * @brief      This API gets list of installed packages
@@ -556,45 +310,6 @@ static int unmounted_list_pkgs()
 int pkgmgrinfo_pkginfo_get_unmounted_list(pkgmgrinfo_pkg_list_cb pkg_list_cb, void *user_data);
 
 /**
- * @fn int pkgmgrinfo_pkginfo_get_disabled_list(pkgmgrinfo_pkg_list_cb pkg_list_cb, void *user_data);
- * @brief      This API gets list of disabled package
- *
- * @par                This API is for package-manager client application
- * @par Sync (or) Async : Synchronous API
- * @param[in]  pkg_list_cb             iteration function for list
- * @param[in] user_data        user data to be passed to callback function
- * @return     0 if success, error code(<0) if fail
- * @retval     PMINFO_R_OK     success
- * @retval     PMINFO_R_EINVAL invalid argument
- * @retval     PMINFO_R_ERROR  internal error
- * @pre                None
- * @post               None
- * @code
-int pkg_list_cb(pkgmgrinfo_pkginfo_h handle, void *user_data)
-{
-       char *pkgid2 = NULL;
-
-       pkgmgrinfo_pkginfo_get_pkgid(handle, &pkgid2);
-       printf("appid: %s\n", pkgid2);
-
-       return 0;
-}
-
-static int disabled_list_pkgs()
-{
-       int ret = 0;
-
-       ret = pkgmgrinfo_pkginfo_get_disabled_list(pkg_list_cb, NULL);
-       if (ret != PMINFO_R_OK) {
-               return -1;
-       }
-       return 0;
-}
- * @endcode
- */
-int pkgmgrinfo_pkginfo_get_disabled_list(pkgmgrinfo_pkg_list_cb pkg_list_cb, void *user_data);
-
-/**
  * @fn int pkgmgrinfo_pkginfo_get_unmounted_pkginfo(const char *pkgid, pkgmgrinfo_pkginfo_h *handle)
  * @brief      This API creates the package information handle from db
  *
@@ -633,46 +348,6 @@ static int get_pkg_type(const char *pkgid)
  */
 int pkgmgrinfo_pkginfo_get_unmounted_pkginfo(const char *pkgid, pkgmgrinfo_pkginfo_h *handle);
 
-
-/**
- * @fn int pkgmgrinfo_pkginfo_get_disabled_pkginfo(const char *pkgid, pkgmgrinfo_pkginfo_h *handle)
- * @brief      This API creates the package information handle from db
- *
- * @par                This API is for package-manager client application
- * @par Sync (or) Async : Synchronous API
- *
- * @param[in]  pkgid   pointer to package ID
- * @param[out] handle          pointer to the package info handle.
- * @return     0 if success, error code(<0) if fail
- * @retval     PMINFO_R_OK     success
- * @retval     PMINFO_R_EINVAL invalid argument
- * @retval     PMINFO_R_ERROR  internal error
- * @pre                None
- * @post               pkgmgrinfo_pkginfo_destroy_pkginfo()
- * @see                pkgmgrinfo_pkginfo_get_pkgid()
- * @see                pkgmgrinfo_pkginfo_is_removable()
- * @code
-static int get_pkg_type(const char *pkgid)
-{
-       int ret = 0;
-       char *type = NULL;
-       pkgmgrinfo_pkginfo_h handle;
-       ret = pkgmgrinfo_pkginfo_get_disabled_pkginfo(pkgid, &handle);
-       if (ret != PMINFO_R_OK)
-               return -1;
-       ret = pkgmgrinfo_pkginfo_get_type(handle, &type);
-       if (ret != PMINFO_R_OK) {
-               pkgmgrinfo_pkginfo_destroy_pkginfo(handle);
-               return -1;
-       }
-       printf("pkgtype: %s\n", type);
-       pkgmgrinfo_pkginfo_destroy_pkginfo(handle);
-       return 0;
-}
- * @endcode
- */
-int pkgmgrinfo_pkginfo_get_disabled_pkginfo(const char *pkgid, pkgmgrinfo_pkginfo_h *handle);
-
 /**
  * @fn int pkgmgrinfo_pkginfo_get_pkginfo(const char *pkgid, pkgmgrinfo_pkginfo_h *handle)
  * @brief      This API creates the package information handle from db
@@ -908,16 +583,14 @@ static int get_pkg_install_location(const char *pkgid)
 int pkgmgrinfo_pkginfo_get_install_location(pkgmgrinfo_pkginfo_h handle, pkgmgrinfo_install_location *location);
 
 /**
- * @fn int pkgmgrinfo_pkginfo_get_package_size(pkgmgrinfo_pkginfo_h handle, int *size)
- * @brief      This API gets the package size from the package ID. size will be 0 if package install location is internal-only.
- size will be 0 if package install location is prefer-external but size is not specified in manifest file.Application should check
- the return value of pkgmgrinfo_pkginfo_get_install_location() and use it to distinguish the above cases.
+ * @fn int pkgmgrinfo_pkginfo_get_icon(pkgmgrinfo_pkginfo_h handle, char **icon)
+ * @brief      This API gets the package icon from the package ID
  *
  * @par                This API is for package-manager client application
  * @par Sync (or) Async : Synchronous API
  *
  * @param[in]  handle  pointer to package info handle
- * @param[out] size            pointer to hold package size
+ * @param[out] icon            pointer to hold package icon
  * @return     0 if success, error code(<0) if fail
  * @retval     PMINFO_R_OK     success
  * @retval     PMINFO_R_EINVAL invalid argument
@@ -927,143 +600,153 @@ int pkgmgrinfo_pkginfo_get_install_location(pkgmgrinfo_pkginfo_h handle, pkgmgri
  * @see                pkgmgrinfo_pkginfo_get_pkgid()
  * @see                pkgmgrinfo_pkginfo_is_removable()
  * @code
-static int get_pkg_size(const char *pkgid)
+static int get_pkg_icon(const char *pkgid)
 {
        int ret = 0;
-       int size = 0;
+       char *icon = NULL;
        pkgmgrinfo_pkginfo_h handle;
        ret = pkgmgrinfo_pkginfo_get_pkginfo(pkgid, &handle);
        if (ret != PMINFO_R_OK)
                return -1;
-       ret = pkgmgrinfo_pkginfo_get_package_size(handle, &size);
+       ret = pkgmgrinfo_pkginfo_get_icon(handle, &icon);
        if (ret != PMINFO_R_OK) {
                pkgmgrinfo_pkginfo_destroy_pkginfo(handle);
                return -1;
        }
-       printf("pkgsize: %d\n", size);
+       printf("pkg icon: %s\n", icon);
        pkgmgrinfo_pkginfo_destroy_pkginfo(handle);
        return 0;
 }
  * @endcode
  */
-int pkgmgrinfo_pkginfo_get_package_size(pkgmgrinfo_pkginfo_h handle, int *size);
+int pkgmgrinfo_pkginfo_get_icon(pkgmgrinfo_pkginfo_h handle, char **icon);
 
 /**
- * @fn int pkgmgrinfo_pkginfo_get_total_size(pkgmgrinfo_pkginfo_h handle, int *size)
- * @brief      This API gets the installed package total size on the target.
+ * @fn int pkgmgrinfo_pkginfo_get_label(pkgmgrinfo_pkginfo_h handle, char **label)
+ * @brief      This API gets the package label from the package ID
  *
  * @par                This API is for package-manager client application
  * @par Sync (or) Async : Synchronous API
  *
  * @param[in]  handle  pointer to package info handle
- * @param[out] size            pointer to hold package total size
+ * @param[out] label           pointer to hold package label
  * @return     0 if success, error code(<0) if fail
  * @retval     PMINFO_R_OK     success
  * @retval     PMINFO_R_EINVAL invalid argument
  * @retval     PMINFO_R_ERROR  internal error
+ * @pre                pkgmgrinfo_pkginfo_get_pkginfo()
+ * @post               pkgmgrinfo_pkginfo_destroy_pkginfo()
+ * @see                pkgmgrinfo_pkginfo_get_pkgid()
+ * @see                pkgmgrinfo_pkginfo_is_removable()
  * @code
-static int get_pkg_total_size(const char *pkgid)
+static int get_pkg_label(const char *pkgid)
 {
        int ret = 0;
-       int size = 0;
+       char *label = NULL;
        pkgmgrinfo_pkginfo_h handle;
        ret = pkgmgrinfo_pkginfo_get_pkginfo(pkgid, &handle);
        if (ret != PMINFO_R_OK)
                return -1;
-       ret = pkgmgrinfo_pkginfo_get_total_size(handle, &size);
+       ret = pkgmgrinfo_pkginfo_get_label(handle, &label);
        if (ret != PMINFO_R_OK) {
                pkgmgrinfo_pkginfo_destroy_pkginfo(handle);
                return -1;
        }
-       printf("pkg total size: %d\n", size);
+       printf("pkg label: %s\n", label);
        pkgmgrinfo_pkginfo_destroy_pkginfo(handle);
        return 0;
 }
  * @endcode
  */
- int pkgmgrinfo_pkginfo_get_total_size(pkgmgrinfo_pkginfo_h handle, int *size);
+int pkgmgrinfo_pkginfo_get_label(pkgmgrinfo_pkginfo_h handle, char **label);
 
 /**
- * @fn int pkgmgrinfo_pkginfo_get_data_size(pkgmgrinfo_pkginfo_h handle, int *size)
- * @brief      This API gets the installed package data size on the target.
+ * @fn int pkgmgrinfo_pkginfo_get_description(pkgmgrinfo_pkginfo_h handle, char **description)
+ * @brief      This API gets the package description from the package ID
  *
  * @par                This API is for package-manager client application
  * @par Sync (or) Async : Synchronous API
  *
  * @param[in]  handle  pointer to package info handle
- * @param[out] size            pointer to hold package data size
+ * @param[out] description             pointer to hold package description
  * @return     0 if success, error code(<0) if fail
  * @retval     PMINFO_R_OK     success
  * @retval     PMINFO_R_EINVAL invalid argument
  * @retval     PMINFO_R_ERROR  internal error
+ * @pre                pkgmgrinfo_pkginfo_get_pkginfo()
+ * @post               pkgmgrinfo_pkginfo_destroy_pkginfo()
+ * @see                pkgmgrinfo_pkginfo_get_pkgid()
+ * @see                pkgmgrinfo_pkginfo_is_removable()
  * @code
-static int get_pkg_data_size(const char *pkgid)
+static int get_pkg_description(const char *pkgid)
 {
        int ret = 0;
-       int size = 0;
+       char *description = NULL;
        pkgmgrinfo_pkginfo_h handle;
        ret = pkgmgrinfo_pkginfo_get_pkginfo(pkgid, &handle);
        if (ret != PMINFO_R_OK)
                return -1;
-       ret = pkgmgrinfo_pkginfo_get_data_size(handle, &size);
+       ret = pkgmgrinfo_pkginfo_get_description(handle, &description);
        if (ret != PMINFO_R_OK) {
                pkgmgrinfo_pkginfo_destroy_pkginfo(handle);
                return -1;
        }
-       printf("pkg data size: %d\n", size);
+       printf("pkg description: %s\n", description);
        pkgmgrinfo_pkginfo_destroy_pkginfo(handle);
        return 0;
 }
  * @endcode
  */
- int pkgmgrinfo_pkginfo_get_data_size(pkgmgrinfo_pkginfo_h handle, int *size);
+int pkgmgrinfo_pkginfo_get_description(pkgmgrinfo_pkginfo_h handle, char **description);
 
 /**
- * @fn int pkgmgrinfo_pkginfo_get_size_info(pkgmgrinfo_pkginfo_h handle, int *total_size, int *data_size)
- * @brief      This API gets the size information for given package on the target.
+ * @fn int pkgmgrinfo_pkginfo_get_author_name(pkgmgrinfo_pkginfo_h handle, char **author_name)
+ * @brief      This API gets the package's author name from the package ID
  *
  * @par                This API is for package-manager client application
  * @par Sync (or) Async : Synchronous API
  *
  * @param[in]  handle  pointer to package info handle
- * @param[out] total_size              pointer to hold package total size
- * @param[out] data_size               pointer to hold package data size
+ * @param[out] author_name             pointer to hold package author name
  * @return     0 if success, error code(<0) if fail
  * @retval     PMINFO_R_OK     success
  * @retval     PMINFO_R_EINVAL invalid argument
  * @retval     PMINFO_R_ERROR  internal error
+ * @pre                pkgmgrinfo_pkginfo_get_pkginfo()
+ * @post               pkgmgrinfo_pkginfo_destroy_pkginfo()
+ * @see                pkgmgrinfo_pkginfo_get_pkgid()
+ * @see                pkgmgrinfo_pkginfo_is_removable()
  * @code
-static int get_pkg_data_size(const char *pkgid)
+static int get_pkg_author_name(const char *pkgid)
 {
        int ret = 0;
-       int total_size = 0;
-       int data_size = 0;
+       char *author_name = NULL;
        pkgmgrinfo_pkginfo_h handle;
        ret = pkgmgrinfo_pkginfo_get_pkginfo(pkgid, &handle);
        if (ret != PMINFO_R_OK)
                return -1;
-       ret = pkgmgrinfo_pkginfo_get_size_info(handle, &total_size, &data_size);
+       ret = pkgmgrinfo_pkginfo_get_author_name(handle, &author_name);
        if (ret != PMINFO_R_OK) {
                pkgmgrinfo_pkginfo_destroy_pkginfo(handle);
                return -1;
        }
-       printf("pkg size:  total=%d, data=%d\n", total_size, data_size);
+       printf("pkg author name: %s\n", author_name);
        pkgmgrinfo_pkginfo_destroy_pkginfo(handle);
        return 0;
 }
  * @endcode
  */
-int pkgmgrinfo_pkginfo_get_size_info(pkgmgrinfo_pkginfo_h handle, int *total_size, int *data_size);
+int pkgmgrinfo_pkginfo_get_author_name(pkgmgrinfo_pkginfo_h handle, char **author_name);
 
 /**
- * @fn int pkgmgrinfo_pkginfo_get_icon(pkgmgrinfo_pkginfo_h handle, char **icon)
- * @brief      This API gets the package icon from the package ID
+ * @fn int pkgmgrinfo_pkginfo_get_author_email(pkgmgrinfo_pkginfo_h handle, char **author_email)
+ * @brief      This API gets the package's author email from the package ID
  *
  * @par                This API is for package-manager client application
  * @par Sync (or) Async : Synchronous API
  *
  * @param[in]  handle  pointer to package info handle
- * @param[out] icon            pointer to hold package icon
+ * @param[out] author_email            pointer to hold package author email
  * @return     0 if success, error code(<0) if fail
  * @retval     PMINFO_R_OK     success
  * @retval     PMINFO_R_EINVAL invalid argument
@@ -1073,36 +756,36 @@ int pkgmgrinfo_pkginfo_get_size_info(pkgmgrinfo_pkginfo_h handle, int *total_siz
  * @see                pkgmgrinfo_pkginfo_get_pkgid()
  * @see                pkgmgrinfo_pkginfo_is_removable()
  * @code
-static int get_pkg_icon(const char *pkgid)
+static int get_pkg_author_email(const char *pkgid)
 {
        int ret = 0;
-       char *icon = NULL;
+       char *author_email = NULL;
        pkgmgrinfo_pkginfo_h handle;
        ret = pkgmgrinfo_pkginfo_get_pkginfo(pkgid, &handle);
        if (ret != PMINFO_R_OK)
                return -1;
-       ret = pkgmgrinfo_pkginfo_get_icon(handle, &icon);
+       ret = pkgmgrinfo_pkginfo_get_author_email(handle, &author_email);
        if (ret != PMINFO_R_OK) {
                pkgmgrinfo_pkginfo_destroy_pkginfo(handle);
                return -1;
        }
-       printf("pkg icon: %s\n", icon);
+       printf("pkg author email: %s\n", author_email);
        pkgmgrinfo_pkginfo_destroy_pkginfo(handle);
        return 0;
 }
  * @endcode
  */
-int pkgmgrinfo_pkginfo_get_icon(pkgmgrinfo_pkginfo_h handle, char **icon);
+int pkgmgrinfo_pkginfo_get_author_email(pkgmgrinfo_pkginfo_h handle, char **author_email);
 
 /**
- * @fn int pkgmgrinfo_pkginfo_get_label(pkgmgrinfo_pkginfo_h handle, char **label)
- * @brief      This API gets the package label from the package ID
+ * @fn int pkgmgrinfo_pkginfo_get_author_href(pkgmgrinfo_pkginfo_h handle, char **author_href)
+ * @brief      This API gets the package's author href from the package ID
  *
  * @par                This API is for package-manager client application
  * @par Sync (or) Async : Synchronous API
  *
  * @param[in]  handle  pointer to package info handle
- * @param[out] label           pointer to hold package label
+ * @param[out] author_href             pointer to hold package author href
  * @return     0 if success, error code(<0) if fail
  * @retval     PMINFO_R_OK     success
  * @retval     PMINFO_R_EINVAL invalid argument
@@ -1112,36 +795,36 @@ int pkgmgrinfo_pkginfo_get_icon(pkgmgrinfo_pkginfo_h handle, char **icon);
  * @see                pkgmgrinfo_pkginfo_get_pkgid()
  * @see                pkgmgrinfo_pkginfo_is_removable()
  * @code
-static int get_pkg_label(const char *pkgid)
+static int get_pkg_author_href(const char *pkgid)
 {
        int ret = 0;
-       char *label = NULL;
+       char *author_href = NULL;
        pkgmgrinfo_pkginfo_h handle;
        ret = pkgmgrinfo_pkginfo_get_pkginfo(pkgid, &handle);
        if (ret != PMINFO_R_OK)
                return -1;
-       ret = pkgmgrinfo_pkginfo_get_label(handle, &label);
+       ret = pkgmgrinfo_pkginfo_get_author_href(handle, &author_href);
        if (ret != PMINFO_R_OK) {
                pkgmgrinfo_pkginfo_destroy_pkginfo(handle);
                return -1;
        }
-       printf("pkg label: %s\n", label);
+       printf("pkg author href: %s\n", author_href);
        pkgmgrinfo_pkginfo_destroy_pkginfo(handle);
        return 0;
 }
  * @endcode
  */
-int pkgmgrinfo_pkginfo_get_label(pkgmgrinfo_pkginfo_h handle, char **label);
+int pkgmgrinfo_pkginfo_get_author_href(pkgmgrinfo_pkginfo_h handle, char **author_href);
 
 /**
- * @fn int pkgmgrinfo_pkginfo_get_description(pkgmgrinfo_pkginfo_h handle, char **description)
- * @brief      This API gets the package description from the package ID
+ * @fn int pkgmgrinfo_pkginfo_get_installed_storage(pkgmgrinfo_pkginfo_h handle, pkgmgrinfo_installed_storage *storage)
+ * @brief      This API gets the package installed storagae value from the package ID
  *
  * @par                This API is for package-manager client application
  * @par Sync (or) Async : Synchronous API
  *
  * @param[in]  handle  pointer to package info handle
- * @param[out] description             pointer to hold package description
+ * @param[out] storage         pointer to hold package installed storage
  * @return     0 if success, error code(<0) if fail
  * @retval     PMINFO_R_OK     success
  * @retval     PMINFO_R_EINVAL invalid argument
@@ -1151,36 +834,36 @@ int pkgmgrinfo_pkginfo_get_label(pkgmgrinfo_pkginfo_h handle, char **label);
  * @see                pkgmgrinfo_pkginfo_get_pkgid()
  * @see                pkgmgrinfo_pkginfo_is_removable()
  * @code
-static int get_pkg_description(const char *pkgid)
+static int get_pkg_installed_storage(const char *pkgid)
 {
        int ret = 0;
-       char *description = NULL;
+       pkgmgrinfo_installed_storage storage;
        pkgmgrinfo_pkginfo_h handle;
        ret = pkgmgrinfo_pkginfo_get_pkginfo(pkgid, &handle);
        if (ret != PMINFO_R_OK)
                return -1;
-       ret = pkgmgrinfo_pkginfo_get_description(handle, &description);
+       ret = pkgmgrinfo_pkginfo_get_installed_storage(handle, &storage);
        if (ret != PMINFO_R_OK) {
                pkgmgrinfo_pkginfo_destroy_pkginfo(handle);
                return -1;
        }
-       printf("pkg description: %s\n", description);
+       printf("pkg installed storage: %d\n", storage);
        pkgmgrinfo_pkginfo_destroy_pkginfo(handle);
        return 0;
 }
  * @endcode
  */
-int pkgmgrinfo_pkginfo_get_description(pkgmgrinfo_pkginfo_h handle, char **description);
+int pkgmgrinfo_pkginfo_get_installed_storage(pkgmgrinfo_pkginfo_h handle, pkgmgrinfo_installed_storage *storage);
 
 /**
- * @fn int pkgmgrinfo_pkginfo_get_author_name(pkgmgrinfo_pkginfo_h handle, char **author_name)
- * @brief      This API gets the package's author name from the package ID
+ * @fn int pkgmgrinfo_pkginfo_get_installed_time(pkgmgrinfo_pkginfo_h handle, int *installed_time)
+ * @brief      This API gets the installed time of package from the package ID
  *
  * @par                This API is for package-manager client application
  * @par Sync (or) Async : Synchronous API
  *
  * @param[in]  handle  pointer to package info handle
- * @param[out] author_name             pointer to hold package author name
+ * @param[out] installed_time          pointer to hold installed time of package
  * @return     0 if success, error code(<0) if fail
  * @retval     PMINFO_R_OK     success
  * @retval     PMINFO_R_EINVAL invalid argument
@@ -1190,36 +873,36 @@ int pkgmgrinfo_pkginfo_get_description(pkgmgrinfo_pkginfo_h handle, char **descr
  * @see                pkgmgrinfo_pkginfo_get_pkgid()
  * @see                pkgmgrinfo_pkginfo_is_removable()
  * @code
-static int get_pkg_author_name(const char *pkgid)
+static int get_pkg_installed_time(const char *pkgid)
 {
        int ret = 0;
-       char *author_name = NULL;
+       int installed_time = 0;
        pkgmgrinfo_pkginfo_h handle;
        ret = pkgmgrinfo_pkginfo_get_pkginfo(pkgid, &handle);
        if (ret != PMINFO_R_OK)
                return -1;
-       ret = pkgmgrinfo_pkginfo_get_author_name(handle, &author_name);
+       ret = pkgmgrinfo_pkginfo_get_installed_time(handle, &installed_time);
        if (ret != PMINFO_R_OK) {
                pkgmgrinfo_pkginfo_destroy_pkginfo(handle);
                return -1;
        }
-       printf("pkg author name: %s\n", author_name);
+       printf("installed_time: %d\n", installed_time);
        pkgmgrinfo_pkginfo_destroy_pkginfo(handle);
        return 0;
 }
  * @endcode
  */
-int pkgmgrinfo_pkginfo_get_author_name(pkgmgrinfo_pkginfo_h handle, char **author_name);
+int pkgmgrinfo_pkginfo_get_installed_time(pkgmgrinfo_pkginfo_h handle, int *installed_time);
 
 /**
- * @fn int pkgmgrinfo_pkginfo_get_author_email(pkgmgrinfo_pkginfo_h handle, char **author_email)
- * @brief      This API gets the package's author email from the package ID
+ * @fn int pkgmgrinfo_pkginfo_get_storeclientid(pkgmgrinfo_pkginfo_h handle, char **storeclientid)
+ * @brief      This API gets the store client id of package from the package ID
  *
  * @par                This API is for package-manager client application
  * @par Sync (or) Async : Synchronous API
  *
  * @param[in]  handle  pointer to package info handle
- * @param[out] author_email            pointer to hold package author email
+ * @param[out] storeclientid           pointer to hold store client id of package
  * @return     0 if success, error code(<0) if fail
  * @retval     PMINFO_R_OK     success
  * @retval     PMINFO_R_EINVAL invalid argument
@@ -1229,36 +912,36 @@ int pkgmgrinfo_pkginfo_get_author_name(pkgmgrinfo_pkginfo_h handle, char **autho
  * @see                pkgmgrinfo_pkginfo_get_pkgid()
  * @see                pkgmgrinfo_pkginfo_is_removable()
  * @code
-static int get_pkg_author_email(const char *pkgid)
+static int get_pkg_storeclientid(const char *pkgid)
 {
        int ret = 0;
-       char *author_email = NULL;
+       char *storeclientid = 0;
        pkgmgrinfo_pkginfo_h handle;
        ret = pkgmgrinfo_pkginfo_get_pkginfo(pkgid, &handle);
        if (ret != PMINFO_R_OK)
                return -1;
-       ret = pkgmgrinfo_pkginfo_get_author_email(handle, &author_email);
+       ret = pkgmgrinfo_pkginfo_get_storeclientid(handle, &storeclientid);
        if (ret != PMINFO_R_OK) {
                pkgmgrinfo_pkginfo_destroy_pkginfo(handle);
                return -1;
        }
-       printf("pkg author email: %s\n", author_email);
+       printf(store client id: %s\n", storeclientid);
        pkgmgrinfo_pkginfo_destroy_pkginfo(handle);
        return 0;
 }
  * @endcode
  */
-int pkgmgrinfo_pkginfo_get_author_email(pkgmgrinfo_pkginfo_h handle, char **author_email);
+int pkgmgrinfo_pkginfo_get_storeclientid(pkgmgrinfo_pkginfo_h handle, char **storeclientid);
 
 /**
- * @fn int pkgmgrinfo_pkginfo_get_author_href(pkgmgrinfo_pkginfo_h handle, char **author_href)
- * @brief      This API gets the package's author href from the package ID
+ * @fn int pkgmgrinfo_pkginfo_get_mainappid(pkgmgrinfo_pkginfo_h handle, char **mainappid)
+ * @brief      This API gets the main app id of package from the package ID
  *
  * @par                This API is for package-manager client application
  * @par Sync (or) Async : Synchronous API
  *
  * @param[in]  handle  pointer to package info handle
- * @param[out] author_href             pointer to hold package author href
+ * @param[out] mainappid               pointer to hold main app id of package
  * @return     0 if success, error code(<0) if fail
  * @retval     PMINFO_R_OK     success
  * @retval     PMINFO_R_EINVAL invalid argument
@@ -1268,36 +951,36 @@ int pkgmgrinfo_pkginfo_get_author_email(pkgmgrinfo_pkginfo_h handle, char **auth
  * @see                pkgmgrinfo_pkginfo_get_pkgid()
  * @see                pkgmgrinfo_pkginfo_is_removable()
  * @code
-static int get_pkg_author_href(const char *pkgid)
+static int get_pkg_mainappid(const char *pkgid)
 {
        int ret = 0;
-       char *author_href = NULL;
+       char *mainappid = 0;
        pkgmgrinfo_pkginfo_h handle;
        ret = pkgmgrinfo_pkginfo_get_pkginfo(pkgid, &handle);
        if (ret != PMINFO_R_OK)
                return -1;
-       ret = pkgmgrinfo_pkginfo_get_author_href(handle, &author_href);
+       ret = pkgmgrinfo_pkginfo_get_mainappid(handle, &mainappid);
        if (ret != PMINFO_R_OK) {
                pkgmgrinfo_pkginfo_destroy_pkginfo(handle);
                return -1;
        }
-       printf("pkg author href: %s\n", author_href);
+       printf(main app id: %s\n", mainappid);
        pkgmgrinfo_pkginfo_destroy_pkginfo(handle);
        return 0;
 }
  * @endcode
  */
-int pkgmgrinfo_pkginfo_get_author_href(pkgmgrinfo_pkginfo_h handle, char **author_href);
+int pkgmgrinfo_pkginfo_get_mainappid(pkgmgrinfo_pkginfo_h handle, char **mainappid);
 
 /**
- * @fn int pkgmgrinfo_pkginfo_get_installed_storage(pkgmgrinfo_pkginfo_h handle, pkgmgrinfo_installed_storage *storage)
- * @brief      This API gets the package installed storagae value from the package ID
+ * @fn int pkgmgrinfo_pkginfo_get_url(pkgmgrinfo_pkginfo_h handle, char **url)
+ * @brief      This API gets the url of package from the package ID
  *
  * @par                This API is for package-manager client application
  * @par Sync (or) Async : Synchronous API
  *
  * @param[in]  handle  pointer to package info handle
- * @param[out] storage         pointer to hold package installed storage
+ * @param[out] url             pointer to hold url of package
  * @return     0 if success, error code(<0) if fail
  * @retval     PMINFO_R_OK     success
  * @retval     PMINFO_R_EINVAL invalid argument
@@ -1307,256 +990,246 @@ int pkgmgrinfo_pkginfo_get_author_href(pkgmgrinfo_pkginfo_h handle, char **autho
  * @see                pkgmgrinfo_pkginfo_get_pkgid()
  * @see                pkgmgrinfo_pkginfo_is_removable()
  * @code
-static int get_pkg_installed_storage(const char *pkgid)
+static int get_pkg_url(const char *pkgid)
 {
        int ret = 0;
-       pkgmgrinfo_installed_storage storage;
+       char *url = 0;
        pkgmgrinfo_pkginfo_h handle;
        ret = pkgmgrinfo_pkginfo_get_pkginfo(pkgid, &handle);
        if (ret != PMINFO_R_OK)
                return -1;
-       ret = pkgmgrinfo_pkginfo_get_installed_storage(handle, &storage);
+       ret = pkgmgrinfo_pkginfo_get_url(handle, &url);
        if (ret != PMINFO_R_OK) {
                pkgmgrinfo_pkginfo_destroy_pkginfo(handle);
                return -1;
        }
-       printf("pkg installed storage: %d\n", storage);
+       printf("url : %s\n", url);
        pkgmgrinfo_pkginfo_destroy_pkginfo(handle);
        return 0;
 }
  * @endcode
  */
-int pkgmgrinfo_pkginfo_get_installed_storage(pkgmgrinfo_pkginfo_h handle, pkgmgrinfo_installed_storage *storage);
+int pkgmgrinfo_pkginfo_get_url(pkgmgrinfo_pkginfo_h handle, char **url);
+
 
 /**
- * @fn int pkgmgrinfo_pkginfo_get_installed_time(pkgmgrinfo_pkginfo_h handle, int *installed_time)
- * @brief      This API gets the installed time of package from the package ID
+ * @fn int pkgmgrinfo_pkginfo_get_root_path(pkgmgrinfo_pkginfo_h handle, char **path)
+ * @brief      This API gets the root path of package
  *
- * @par                This API is for package-manager client application
  * @par Sync (or) Async : Synchronous API
  *
- * @param[in]  handle  pointer to package info handle
- * @param[out] installed_time          pointer to hold installed time of package
+ * @param[in] handle           pointer to package info handle
+ * @param[out] path            pointer to hold root path of package
  * @return     0 if success, error code(<0) if fail
  * @retval     PMINFO_R_OK     success
  * @retval     PMINFO_R_EINVAL invalid argument
  * @retval     PMINFO_R_ERROR  internal error
- * @pre                pkgmgrinfo_pkginfo_get_pkginfo()
- * @post               pkgmgrinfo_pkginfo_destroy_pkginfo()
- * @see                pkgmgrinfo_pkginfo_get_pkgid()
- * @see                pkgmgrinfo_pkginfo_is_removable()
  * @code
-static int get_pkg_installed_time(const char *pkgid)
+static int get_root_path(const char *pkgid)
 {
        int ret = 0;
-       int installed_time = 0;
+       char *path = 0;
        pkgmgrinfo_pkginfo_h handle;
        ret = pkgmgrinfo_pkginfo_get_pkginfo(pkgid, &handle);
        if (ret != PMINFO_R_OK)
                return -1;
-       ret = pkgmgrinfo_pkginfo_get_installed_time(handle, &installed_time);
+
+       ret = pkgmgrinfo_pkginfo_get_root_path(handle, &path);
        if (ret != PMINFO_R_OK) {
                pkgmgrinfo_pkginfo_destroy_pkginfo(handle);
                return -1;
        }
-       printf("installed_time: %d\n", installed_time);
+       printf("path : %s\n", path);
        pkgmgrinfo_pkginfo_destroy_pkginfo(handle);
+
        return 0;
 }
  * @endcode
  */
-int pkgmgrinfo_pkginfo_get_installed_time(pkgmgrinfo_pkginfo_h handle, int *installed_time);
+int pkgmgrinfo_pkginfo_get_root_path(pkgmgrinfo_pkginfo_h handle, char **path);
+
 
 /**
- * @fn int pkgmgrinfo_pkginfo_get_storeclientid(pkgmgrinfo_pkginfo_h handle, char **storeclientid)
- * @brief      This API gets the store client id of package from the package ID
+ * @fn int pkgmgrinfo_pkginfo_get_csc_path(pkgmgrinfo_pkginfo_h handle, char **path)
+ * @brief      This API gets the csc path of package
  *
- * @par                This API is for package-manager client application
  * @par Sync (or) Async : Synchronous API
  *
- * @param[in]  handle  pointer to package info handle
- * @param[out] storeclientid           pointer to hold store client id of package
+ * @param[in] handle           pointer to package info handle
+ * @param[out] path            pointer to hold csc path of package
  * @return     0 if success, error code(<0) if fail
  * @retval     PMINFO_R_OK     success
  * @retval     PMINFO_R_EINVAL invalid argument
  * @retval     PMINFO_R_ERROR  internal error
- * @pre                pkgmgrinfo_pkginfo_get_pkginfo()
- * @post               pkgmgrinfo_pkginfo_destroy_pkginfo()
- * @see                pkgmgrinfo_pkginfo_get_pkgid()
- * @see                pkgmgrinfo_pkginfo_is_removable()
  * @code
-static int get_pkg_storeclientid(const char *pkgid)
+static int get_csc_path(const char *pkgid)
 {
        int ret = 0;
-       char *storeclientid = 0;
+       char *path = 0;
        pkgmgrinfo_pkginfo_h handle;
        ret = pkgmgrinfo_pkginfo_get_pkginfo(pkgid, &handle);
        if (ret != PMINFO_R_OK)
                return -1;
-       ret = pkgmgrinfo_pkginfo_get_storeclientid(handle, &storeclientid);
+
+       ret = pkgmgrinfo_pkginfo_get_csc_path(handle, &path);
        if (ret != PMINFO_R_OK) {
                pkgmgrinfo_pkginfo_destroy_pkginfo(handle);
                return -1;
        }
-       printf(store client id: %s\n", storeclientid);
+       printf("path : %s\n", path);
        pkgmgrinfo_pkginfo_destroy_pkginfo(handle);
+
        return 0;
 }
  * @endcode
  */
-int pkgmgrinfo_pkginfo_get_storeclientid(pkgmgrinfo_pkginfo_h handle, char **storeclientid);
+int pkgmgrinfo_pkginfo_get_csc_path(pkgmgrinfo_pkginfo_h handle, char **path);
 
 /**
- * @fn int pkgmgrinfo_pkginfo_get_mainappid(pkgmgrinfo_pkginfo_h handle, char **mainappid)
- * @brief      This API gets the main app id of package from the package ID
+ * @fn int pkgmgrinfo_pkginfo_get_support_mode(pkgmgrinfo_pkginfo_h handle, int *support_mode)
+ * @brief      This API gets the support_mode of package
  *
- * @par                This API is for package-manager client application
  * @par Sync (or) Async : Synchronous API
  *
- * @param[in]  handle  pointer to package info handle
- * @param[out] mainappid               pointer to hold main app id of package
+ * @param[in] handle           pointer to package info handle
+ * @param[out] support_mode            pointer to hold support_mode of package
  * @return     0 if success, error code(<0) if fail
  * @retval     PMINFO_R_OK     success
  * @retval     PMINFO_R_EINVAL invalid argument
  * @retval     PMINFO_R_ERROR  internal error
- * @pre                pkgmgrinfo_pkginfo_get_pkginfo()
- * @post               pkgmgrinfo_pkginfo_destroy_pkginfo()
- * @see                pkgmgrinfo_pkginfo_get_pkgid()
- * @see                pkgmgrinfo_pkginfo_is_removable()
  * @code
-static int get_pkg_mainappid(const char *pkgid)
+static int get_support_mode(const char *pkgid)
 {
        int ret = 0;
-       char *mainappid = 0;
-       pkgmgrinfo_pkginfo_h handle;
+       int *support_mode = 0;
+       pkgmgrinfo_pkginfo_h handle = NULL;
        ret = pkgmgrinfo_pkginfo_get_pkginfo(pkgid, &handle);
        if (ret != PMINFO_R_OK)
                return -1;
-       ret = pkgmgrinfo_pkginfo_get_mainappid(handle, &mainappid);
+
+       ret = pkgmgrinfo_pkginfo_get_support_mode(handle, &support_mode);
        if (ret != PMINFO_R_OK) {
                pkgmgrinfo_pkginfo_destroy_pkginfo(handle);
                return -1;
        }
-       printf(main app id: %s\n", mainappid);
+       printf("support_mode : %s\n", support_mode);
        pkgmgrinfo_pkginfo_destroy_pkginfo(handle);
+
        return 0;
 }
  * @endcode
  */
-int pkgmgrinfo_pkginfo_get_mainappid(pkgmgrinfo_pkginfo_h handle, char **mainappid);
+int pkgmgrinfo_pkginfo_get_support_mode(pkgmgrinfo_pkginfo_h handle, int *support_mode);
+
 
 /**
- * @fn int pkgmgrinfo_pkginfo_get_url(pkgmgrinfo_pkginfo_h handle, char **url)
- * @brief      This API gets the url of package from the package ID
+ * @fn int pkgmgrinfo_pkginfo_get_hash(pkgmgrinfo_pkginfo_h handle, char **hash)
+ * @brief      This API gets the package_hash of package
  *
- * @par                This API is for package-manager client application
  * @par Sync (or) Async : Synchronous API
  *
- * @param[in]  handle  pointer to package info handle
- * @param[out] url             pointer to hold url of package
+ * @param[in] handle           pointer to package info handle
+ * @param[out] hash            pointer to hold package_hash of package
  * @return     0 if success, error code(<0) if fail
  * @retval     PMINFO_R_OK     success
  * @retval     PMINFO_R_EINVAL invalid argument
  * @retval     PMINFO_R_ERROR  internal error
- * @pre                pkgmgrinfo_pkginfo_get_pkginfo()
- * @post               pkgmgrinfo_pkginfo_destroy_pkginfo()
- * @see                pkgmgrinfo_pkginfo_get_pkgid()
- * @see                pkgmgrinfo_pkginfo_is_removable()
  * @code
-static int get_pkg_url(const char *pkgid)
+static int get_package_hash(const char *pkgid)
 {
        int ret = 0;
-       char *url = 0;
-       pkgmgrinfo_pkginfo_h handle;
+       int *hash = NULL;;
+       pkgmgrinfo_pkginfo_h handle = NULL;
        ret = pkgmgrinfo_pkginfo_get_pkginfo(pkgid, &handle);
        if (ret != PMINFO_R_OK)
                return -1;
-       ret = pkgmgrinfo_pkginfo_get_url(handle, &url);
+
+       ret = pkgmgrinfo_pkginfo_get_hash(handle, &hash);
        if (ret != PMINFO_R_OK) {
                pkgmgrinfo_pkginfo_destroy_pkginfo(handle);
                return -1;
        }
-       printf("url : %s\n", url);
+       printf("package_hash : %s\n", hash);
        pkgmgrinfo_pkginfo_destroy_pkginfo(handle);
+
        return 0;
 }
  * @endcode
- */
-int pkgmgrinfo_pkginfo_get_url(pkgmgrinfo_pkginfo_h handle, char **url);
+*/
 
+int pkgmgrinfo_pkginfo_get_hash(pkgmgrinfo_pkginfo_h handle, char **hash);
 
 /**
- * @fn int pkgmgrinfo_pkginfo_get_root_path(pkgmgrinfo_pkginfo_h handle, char **path)
- * @brief      This API gets the root path of package
+ * @fn int pkgmgrinfo_pkginfo_get_support_reset(pkgmgrinfo_pkginfo_h handle, char **support_reset)
+ * @brief      This API gets the support reset of package
  *
  * @par Sync (or) Async : Synchronous API
  *
  * @param[in] handle           pointer to package info handle
- * @param[out] path            pointer to hold root path of package
+ * @param[out] support_reset           pointer to hold support reset of package
  * @return     0 if success, error code(<0) if fail
  * @retval     PMINFO_R_OK     success
  * @retval     PMINFO_R_EINVAL invalid argument
  * @retval     PMINFO_R_ERROR  internal error
  * @code
-static int get_root_path(const char *pkgid)
+static int get_support_reset(const char *pkgid)
 {
        int ret = 0;
-       char *path = 0;
-       pkgmgrinfo_pkginfo_h handle;
+       char *support_reset = 0;
+       pkgmgrinfo_pkginfo_h handle = NULL;
        ret = pkgmgrinfo_pkginfo_get_pkginfo(pkgid, &handle);
        if (ret != PMINFO_R_OK)
                return -1;
 
-       ret = pkgmgrinfo_pkginfo_get_root_path(handle, &path);
+       ret = pkgmgrinfo_pkginfo_get_support_reset(handle, &support_reset);
        if (ret != PMINFO_R_OK) {
                pkgmgrinfo_pkginfo_destroy_pkginfo(handle);
                return -1;
        }
-       printf("path : %s\n", path);
+       printf("support_reset : %s\n", support_reset);
        pkgmgrinfo_pkginfo_destroy_pkginfo(handle);
 
        return 0;
 }
  * @endcode
  */
-int pkgmgrinfo_pkginfo_get_root_path(pkgmgrinfo_pkginfo_h handle, char **path);
-
+int pkgmgrinfo_pkginfo_get_support_reset(pkgmgrinfo_pkginfo_h handle, char **support_reset);
 
 /**
- * @fn int pkgmgrinfo_pkginfo_get_csc_path(pkgmgrinfo_pkginfo_h handle, char **path)
- * @brief      This API gets the csc path of package
+ * @fn int pkgmgrinfo_pkginfo_get_groupid(pkgmgrinfo_pkginfo_h handle, char **groupid)
+ * @brief      This API gets the groupid of package
  *
  * @par Sync (or) Async : Synchronous API
  *
  * @param[in] handle           pointer to package info handle
- * @param[out] path            pointer to hold csc path of package
+ * @param[out] groupid         pointer to hold groupid of package
  * @return     0 if success, error code(<0) if fail
  * @retval     PMINFO_R_OK     success
  * @retval     PMINFO_R_EINVAL invalid argument
  * @retval     PMINFO_R_ERROR  internal error
  * @code
-static int get_csc_path(const char *pkgid)
+static int get_groupid(const char *pkgid)
 {
        int ret = 0;
-       char *path = 0;
-       pkgmgrinfo_pkginfo_h handle;
+       char *groupid = 0;
+       pkgmgrinfo_pkginfo_h handle = NULL;
        ret = pkgmgrinfo_pkginfo_get_pkginfo(pkgid, &handle);
        if (ret != PMINFO_R_OK)
                return -1;
 
-       ret = pkgmgrinfo_pkginfo_get_csc_path(handle, &path);
+       ret = pkgmgrinfo_pkginfo_get_groupid(handle, &groupid);
        if (ret != PMINFO_R_OK) {
                pkgmgrinfo_pkginfo_destroy_pkginfo(handle);
                return -1;
        }
-       printf("path : %s\n", path);
+       printf("groupid : %s\n", groupid);
        pkgmgrinfo_pkginfo_destroy_pkginfo(handle);
 
        return 0;
 }
  * @endcode
  */
-int pkgmgrinfo_pkginfo_get_csc_path(pkgmgrinfo_pkginfo_h handle, char **path);
+int pkgmgrinfo_pkginfo_get_groupid(pkgmgrinfo_pkginfo_h handle, char **groupid);
 
 /**
  * @fn int pkgmgrinfo_pkginfo_compare_pkg_cert_info(const char *lhs_package_id, const char *rhs_package_id, pkgmgrinfo_cert_compare_result_type_e *compare_result)
@@ -1862,14 +1535,14 @@ static int get_pkg_update(const char *pkgid)
 int pkgmgrinfo_pkginfo_is_update(pkgmgrinfo_pkginfo_h handle, bool *update);
 
 /**
- * @fn int pkgmgrinfo_pkginfo_is_accessible(pkgmgrinfo_pkginfo_h handle, bool *accessible)
- * @brief      This API gets the package 'accessible' value from the package ID
+ * @fn int pkgmgrinfo_pkginfo_is_support_disable(pkgmgrinfo_pkginfo_h handle, bool *support_disable)
+ * @brief      This API gets the package 'support_disable' value from the package ID
  *
  * @par                This API is for package-manager client application
  * @par Sync (or) Async : Synchronous API
  *
  * @param[in]  handle  pointer to package info handle
- * @param[out] accessible      pointer to hold package accessible value
+ * @param[out]         support_disable pointer to hold package support_disable value
  * @return     0 if success, error code(<0) if fail
  * @retval     PMINFO_R_OK     success
  * @retval     PMINFO_R_EINVAL invalid argument
@@ -1877,92 +1550,170 @@ int pkgmgrinfo_pkginfo_is_update(pkgmgrinfo_pkginfo_h handle, bool *update);
  * @pre                pkgmgrinfo_pkginfo_get_pkginfo()
  * @post               pkgmgrinfo_pkginfo_destroy_pkginfo()
  * @see                pkgmgrinfo_pkginfo_get_pkgid()
- * @see                pkgmgrinfo_pkginfo_is_readonly()
  * @code
-static int get_pkg_accessible(const char *pkgid)
+static int get_pkg_support_disable(const char *pkgid)
 {
        int ret = 0;
-       bool accessible;
+       bool support_disable;
        pkgmgrinfo_pkginfo_h handle;
        ret = pkgmgrinfo_pkginfo_get_pkginfo(pkgid, &handle);
        if (ret != PMINFO_R_OK)
                return -1;
-       ret = pkgmgrinfo_pkginfo_is_accessible(handle, &accessible);
+       ret = pkgmgrinfo_pkginfo_is_support_disable(handle, &support_disable);
        if (ret != PMINFO_R_OK) {
                pkgmgrinfo_pkginfo_destroy_pkginfo(handle);
                return -1;
        }
-       printf("pkg accessible: %d\n", accessible);
+       printf("pkg support_disable: %d\n", support_disable);
        pkgmgrinfo_pkginfo_destroy_pkginfo(handle);
        return 0;
 }
  * @endcode
  */
-int pkgmgrinfo_pkginfo_is_accessible(pkgmgrinfo_pkginfo_h handle, bool *accessible);
+int pkgmgrinfo_pkginfo_is_support_disable(pkgmgrinfo_pkginfo_h handle, bool *support_disable);
 
 /**
- * @fn int pkgmgrinfo_pkginfo_destroy_pkginfo(pkgmgrinfo_pkginfo_h handle)
- * @brief      This API destroys the package information handle freeing up all the resources
+ * @fn int pkgmgrinfo_pkginfo_is_accessible(pkgmgrinfo_pkginfo_h handle, bool *accessible)
+ * @brief      This API gets the package 'accessible' value from the package ID
  *
  * @par                This API is for package-manager client application
  * @par Sync (or) Async : Synchronous API
  *
- * @param[in]  handle  pointer to the package info handle
+ * @param[in]  handle  pointer to package info handle
+ * @param[out] accessible      pointer to hold package accessible value
  * @return     0 if success, error code(<0) if fail
  * @retval     PMINFO_R_OK     success
  * @retval     PMINFO_R_EINVAL invalid argument
  * @retval     PMINFO_R_ERROR  internal error
  * @pre                pkgmgrinfo_pkginfo_get_pkginfo()
- * @post               None
+ * @post               pkgmgrinfo_pkginfo_destroy_pkginfo()
  * @see                pkgmgrinfo_pkginfo_get_pkgid()
- * @see                pkgmgrinfo_pkginfo_is_removable()
+ * @see                pkgmgrinfo_pkginfo_is_readonly()
  * @code
-static int get_pkg_type(const char *pkgid)
+static int get_pkg_accessible(const char *pkgid)
 {
        int ret = 0;
-       char *type = NULL;
+       bool accessible;
        pkgmgrinfo_pkginfo_h handle;
        ret = pkgmgrinfo_pkginfo_get_pkginfo(pkgid, &handle);
        if (ret != PMINFO_R_OK)
                return -1;
-       ret = pkgmgrinfo_pkginfo_get_type(handle, &type);
+       ret = pkgmgrinfo_pkginfo_is_accessible(handle, &accessible);
        if (ret != PMINFO_R_OK) {
                pkgmgrinfo_pkginfo_destroy_pkginfo(handle);
                return -1;
        }
-       printf("pkgtype: %s\n", type);
+       printf("pkg accessible: %d\n", accessible);
        pkgmgrinfo_pkginfo_destroy_pkginfo(handle);
        return 0;
 }
  * @endcode
  */
-int pkgmgrinfo_pkginfo_destroy_pkginfo(pkgmgrinfo_pkginfo_h handle);
+int pkgmgrinfo_pkginfo_is_accessible(pkgmgrinfo_pkginfo_h handle, bool *accessible);
+
 
 /**
- * @fn int pkgmgrinfo_pkginfo_filter_create(pkgmgrinfo_pkginfo_filter_h *handle)
- * @brief      This API creates the package information filter handle from db.  All filter properties will be ANDed.
- The query will search the entire package information collected from the manifest file of all the installed packages
+ * @fn int pkgmgrinfo_pkginfo_is_mother_package(pkgmgrinfo_pkginfo_h handle, bool *mother_package)
+ * @brief      This API gets the package 'mother_package' value from the package ID
  *
  * @par                This API is for package-manager client application
  * @par Sync (or) Async : Synchronous API
  *
- * @param[out] handle          pointer to the package info filter handle.
+ * @param[in]  handle  pointer to package info handle
+ * @param[out] mother_package  pointer to hold package mother_package value
  * @return     0 if success, error code(<0) if fail
  * @retval     PMINFO_R_OK     success
  * @retval     PMINFO_R_EINVAL invalid argument
  * @retval     PMINFO_R_ERROR  internal error
- * @pre                None
- * @post               pkgmgrinfo_pkginfo_filter_destroy()
- * @see                pkgmgrinfo_pkginfo_filter_count()
- * @see                pkgmgrinfo_pkginfo_filter_foreach_pkginfo()
+ * @pre                pkgmgrinfo_pkginfo_get_pkginfo()
+ * @post               pkgmgrinfo_pkginfo_destroy_pkginfo()
+ * @see                pkgmgrinfo_pkginfo_get_pkgid()
+ * @see                pkgmgrinfo_pkginfo_is_readonly()
  * @code
-static int get_rpm_pkg_count()
+static int get_pkg_mother_package(const char *pkgid)
 {
        int ret = 0;
-       int count = 0;
-       pkgmgrinfo_pkginfo_filter_h handle;
-       ret = pkgmgrinfo_pkginfo_filter_create(&handle);
-       if (ret != PMINFO_R_OK)
+       bool mother_package = false;
+       pkgmgrinfo_pkginfo_h handle = NULL;
+       ret = pkgmgrinfo_pkginfo_get_pkginfo(pkgid, &handle);
+       if (ret != PMINFO_R_OK)
+               return -1;
+       ret = pkgmgrinfo_pkginfo_is_mother_package(handle, &mother_package);
+       if (ret != PMINFO_R_OK) {
+               pkgmgrinfo_pkginfo_destroy_pkginfo(handle);
+               return -1;
+       }
+       printf("pkg mother_package: %d\n", mother_package);
+       pkgmgrinfo_pkginfo_destroy_pkginfo(handle);
+       return 0;
+}
+ * @endcode
+ */
+int pkgmgrinfo_pkginfo_is_mother_package(pkgmgrinfo_pkginfo_h handle, bool *mother_package);
+
+/**
+ * @fn int pkgmgrinfo_pkginfo_destroy_pkginfo(pkgmgrinfo_pkginfo_h handle)
+ * @brief      This API destroys the package information handle freeing up all the resources
+ *
+ * @par                This API is for package-manager client application
+ * @par Sync (or) Async : Synchronous API
+ *
+ * @param[in]  handle  pointer to the package info handle
+ * @return     0 if success, error code(<0) if fail
+ * @retval     PMINFO_R_OK     success
+ * @retval     PMINFO_R_EINVAL invalid argument
+ * @retval     PMINFO_R_ERROR  internal error
+ * @pre                pkgmgrinfo_pkginfo_get_pkginfo()
+ * @post               None
+ * @see                pkgmgrinfo_pkginfo_get_pkgid()
+ * @see                pkgmgrinfo_pkginfo_is_removable()
+ * @code
+static int get_pkg_type(const char *pkgid)
+{
+       int ret = 0;
+       char *type = NULL;
+       pkgmgrinfo_pkginfo_h handle;
+       ret = pkgmgrinfo_pkginfo_get_pkginfo(pkgid, &handle);
+       if (ret != PMINFO_R_OK)
+               return -1;
+       ret = pkgmgrinfo_pkginfo_get_type(handle, &type);
+       if (ret != PMINFO_R_OK) {
+               pkgmgrinfo_pkginfo_destroy_pkginfo(handle);
+               return -1;
+       }
+       printf("pkgtype: %s\n", type);
+       pkgmgrinfo_pkginfo_destroy_pkginfo(handle);
+       return 0;
+}
+ * @endcode
+ */
+int pkgmgrinfo_pkginfo_destroy_pkginfo(pkgmgrinfo_pkginfo_h handle);
+
+/**
+ * @fn int pkgmgrinfo_pkginfo_filter_create(pkgmgrinfo_pkginfo_filter_h *handle)
+ * @brief      This API creates the package information filter handle from db.  All filter properties will be ANDed.
+ The query will search the entire package information collected from the manifest file of all the installed packages
+ *
+ * @par                This API is for package-manager client application
+ * @par Sync (or) Async : Synchronous API
+ *
+ * @param[out] handle          pointer to the package info filter handle.
+ * @return     0 if success, error code(<0) if fail
+ * @retval     PMINFO_R_OK     success
+ * @retval     PMINFO_R_EINVAL invalid argument
+ * @retval     PMINFO_R_ERROR  internal error
+ * @pre                None
+ * @post               pkgmgrinfo_pkginfo_filter_destroy()
+ * @see                pkgmgrinfo_pkginfo_filter_count()
+ * @see                pkgmgrinfo_pkginfo_filter_foreach_pkginfo()
+ * @code
+static int get_rpm_pkg_count()
+{
+       int ret = 0;
+       int count = 0;
+       pkgmgrinfo_pkginfo_filter_h handle;
+       ret = pkgmgrinfo_pkginfo_filter_create(&handle);
+       if (ret != PMINFO_R_OK)
                return -1;
        ret = pkgmgrinfo_pkginfo_filter_add_string(handle, PMINFO_PKGINFO_PROP_PACKAGE_TYPE, "rpm");
        if (ret != PMINFO_R_OK) {
@@ -2258,6 +2009,48 @@ static int get_rpm_pkg_count()
 int pkgmgrinfo_pkginfo_filter_count(pkgmgrinfo_pkginfo_filter_h handle, int *count);
 
 /**
+ * @fn int pkgmgrinfo_pkginfo_privilege_filter_foreach(const char *privilege,
+                       pkgmgrinfo_pkg_list_cb pkg_list_cb, void *user_data);
+ * @brief      This API gets the list of package id for a particular privilege
+ *
+ * @par                This API is for package-manager client application
+ * @par Sync (or) Async : Synchronous API
+ * @param[in]  privilege               privilege to find package id list.
+ * @param[in]  pkg_list_cb             iteration function for list
+ * @param[in] user_data        user data to be passed to callback function
+ * @return     0 if success, error code(<0) if fail
+ * @retval     PMINFO_R_OK     success
+ * @retval     PMINFO_R_EINVAL invalid argument
+ * @retval     PMINFO_R_ERROR  internal error
+ * @code
+int pkg_list_cb(const pkgmgrinfo_pkginfo_h handle, void *user_data)
+{
+       int ret = PMINFO_R_OK;
+       char *pkgid = NULL;
+       ret = pkgmgrinfo_pkginfo_get_pkgid(handle, &pkgid);
+       if (ret != PMINFO_R_OK) {
+               return -1;
+       } else {
+               printf("pkgid : %s\n", pkgid);
+       }
+
+       return 0;
+}
+
+static int list_pkgid_by_privilege(const char *privilege)
+{
+       int ret = PMINFO_R_OK;
+
+       ret = pkgmgrinfo_pkginfo_privilege_filter_foreach(privilege, pkg_list_cb, NULL);
+
+       return ret;
+}
+ * @endcode
+ */
+int pkgmgrinfo_pkginfo_privilege_filter_foreach(const char *privilege,
+                       pkgmgrinfo_pkg_list_cb pkg_list_cb, void *user_data);
+
+/**
  * @fn int pkgmgrinfo_pkginfo_foreach_privilege(pkgmgrinfo_pkginfo_h handle,
                        pkgmgrinfo_pkg_privilege_list_cb privilege_func, void *user_data);
  * @brief      This API gets the list of privilege for a particular package
@@ -2510,7 +2303,7 @@ static int unmounted_list_apps()
 int pkgmgrinfo_appinfo_get_unmounted_list(pkgmgrinfo_app_list_cb app_func, void *user_data);
 
 /**
- * @fn int pkgmgrinfo_appinfo_get_appinfo(const char *appid, pkgmgrinfo_appinfo_h *handle)
+ * @fn int pkgmgrinfo_appinfo_get_unmounted_appinfo(const char *appid, pkgmgrinfo_appinfo_h *handle)
  * @brief      This API creates the application information handle from db
  *
  * @par                This API is for package-manager client application
@@ -2532,7 +2325,7 @@ static int get_app_type(const char *appid)
        int ret = 0;
        char *type = NULL;
        pkgmgrinfo_appinfo_h handle;
-       ret = pkgmgrinfo_appinfo_get_appinfo(appid, &handle);
+       ret = pkgmgrinfo_appinfo_get_unmounted_appinfo(appid, &handle);
        if (ret != PMINFO_R_OK)
                return -1;
        ret = pkgmgrinfo_appinfo_get_apptype(handle, &type);
@@ -2546,58 +2339,11 @@ static int get_app_type(const char *appid)
 }
  * @endcode
  */
-int pkgmgrinfo_appinfo_get_appinfo(const char *appid, pkgmgrinfo_appinfo_h *handle);
-
-/**
- * @fn int pkgmgrinfo_appinfo_get_disabled_list(pkgmgrinfo_pkginfo_h handle, pkgmgrinfo_app_component component,
- pkgmgrinfo_app_list_cb app_func, void *user_data)
- * @brief      This API gets list of disabled applications for a particular package
- *
- * @par                This API is for package-manager client application
- * @par Sync (or) Async : Synchronous API
- * @param[in]  handle          package info handle
- * @param[in]  component       application component
- * @param[in]  app_func                iteration function for list
- * @param[in] user_data        user data to be passed to callback function
- * @return     0 if success, error code(<0) if fail
- * @retval     PMINFO_R_OK     success
- * @retval     PMINFO_R_EINVAL invalid argument
- * @retval     PMINFO_R_ERROR  internal error
- * @pre                pkgmgrinfo_pkginfo_get_pkginfo()
- * @post               pkgmgrinfo_pkginfo_destroy_pkginfo()
- * @code
-int app_func(pkgmgrinfo_appinfo_h handle, void *user_data)
-{
-       char *appid = NULL;
-       pkgmgrinfo_appinfo_get_appid(handle, &appid);
-       printf("appid : %s\n", appid);
-       return 0;
-}
-
-static int list_apps(const char *pkgid)
-{
-       int ret = 0;
-       pkgmgrinfo_pkginfo_h handle;
-       ret = pkgmgrinfo_pkginfo_get_disabled_pkginfo(pkgid, &handle);
-       if (ret != PMINFO_R_OK)
-               return -1;
-       ret = pkgmgrinfo_appinfo_get_disabled_list(handle, PMINFO_UI_APP, app_func, NULL);
-       if (ret != PMINFO_R_OK) {
-               pkgmgrinfo_pkginfo_destroy_pkginfo(handle);
-               return -1;
-       }
-       pkgmgrinfo_pkginfo_destroy_pkginfo(handle);
-       return 0;
-}
- * @endcode
- */
-
-int pkgmgrinfo_appinfo_get_disabled_list(pkgmgrinfo_pkginfo_h handle, pkgmgrinfo_app_component component,
-                                               pkgmgrinfo_app_list_cb app_func, void *user_data);
+int pkgmgrinfo_appinfo_get_unmounted_appinfo(const char *appid, pkgmgrinfo_appinfo_h *handle);
 
 /**
- * @fn int pkgmgrinfo_appinfo_get_disabled_appinfo(const char *appid, pkgmgrinfo_appinfo_h *handle)
- * @brief      This API creates the disabled application information handle from db
+ * @fn int pkgmgrinfo_appinfo_get_appinfo(const char *appid, pkgmgrinfo_appinfo_h *handle)
+ * @brief      This API creates the application information handle from db
  *
  * @par                This API is for package-manager client application
  * @par Sync (or) Async : Synchronous API
@@ -2611,13 +2357,14 @@ int pkgmgrinfo_appinfo_get_disabled_list(pkgmgrinfo_pkginfo_h handle, pkgmgrinfo
  * @pre                None
  * @post               pkgmgrinfo_appinfo_destroy_appinfo()
  * @see                pkgmgrinfo_appinfo_get_pkgid()
+ * @see                pkgmgrinfo_appinfo_is_multiple()
  * @code
 static int get_app_type(const char *appid)
 {
        int ret = 0;
        char *type = NULL;
        pkgmgrinfo_appinfo_h handle;
-       ret = pkgmgrinfo_appinfo_get_disabled_appinfo(appid, &handle);
+       ret = pkgmgrinfo_appinfo_get_appinfo(appid, &handle);
        if (ret != PMINFO_R_OK)
                return -1;
        ret = pkgmgrinfo_appinfo_get_apptype(handle, &type);
@@ -2631,7 +2378,7 @@ static int get_app_type(const char *appid)
 }
  * @endcode
  */
-int pkgmgrinfo_appinfo_get_disabled_appinfo(const char *appid, pkgmgrinfo_appinfo_h *handle);
+int pkgmgrinfo_appinfo_get_appinfo(const char *appid, pkgmgrinfo_appinfo_h *handle);
 
 /**
  * @fn int pkgmgrinfo_appinfo_get_appid(pkgmgrinfo_appinfo_h handle, char **appid)
@@ -2673,53 +2420,53 @@ static int get_app_id(const char *appid)
 int pkgmgrinfo_appinfo_get_appid(pkgmgrinfo_appinfo_h  handle, char **appid);
 
 /**
- * @fn int pkgmgrinfo_appinfo_get_unmounted_appinfo(const char *appid, pkgmgrinfo_appinfo_h *handle)
- * @brief      This API creates the application information handle from db
+ * @fn int pkgmgrinfo_appinfo_get_pkgname(pkgmgrinfo_appinfo_h handle, char **pkg_name)
+ * @brief      This API gets the package name of the application
  *
  * @par                This API is for package-manager client application
  * @par Sync (or) Async : Synchronous API
  *
- * @param[in]  appid   pointer to appid
- * @param[out] handle          pointer to the application info handle.
+ * @param[in] handle           pointer to the application info handle.
+ * @param[out] pkg_name                pointer to hold package name
  * @return     0 if success, error code(<0) if fail
  * @retval     PMINFO_R_OK     success
  * @retval     PMINFO_R_EINVAL invalid argument
  * @retval     PMINFO_R_ERROR  internal error
- * @pre                None
+ * @pre                pkgmgrinfo_appinfo_get_appinfo()
  * @post               pkgmgrinfo_appinfo_destroy_appinfo()
- * @see                pkgmgrinfo_appinfo_get_pkgid()
+ * @see                pkgmgrinfo_appinfo_get_appid()
  * @see                pkgmgrinfo_appinfo_is_multiple()
  * @code
-static int get_app_type(const char *appid)
+static int get_app_pkgname(const char *appid)
 {
        int ret = 0;
-       char *type = NULL;
+       char *pkgname = NULL;
        pkgmgrinfo_appinfo_h handle;
-       ret = pkgmgrinfo_appinfo_get_unmounted_appinfo(appid, &handle);
+       ret = pkgmgrinfo_appinfo_get_appinfo(appid, &handle);
        if (ret != PMINFO_R_OK)
                return -1;
-       ret = pkgmgrinfo_appinfo_get_apptype(handle, &type);
+       ret = pkgmgrinfo_appinfo_get_pkgname(handle, &pkgname);
        if (ret != PMINFO_R_OK) {
                pkgmgrinfo_appinfo_destroy_appinfo(handle);
                return -1;
        }
-       printf("apptype: %s\n", type);
+       printf("pkg name: %s\n", pkgname);
        pkgmgrinfo_appinfo_destroy_appinfo(handle);
        return 0;
 }
  * @endcode
  */
-int pkgmgrinfo_appinfo_get_unmounted_appinfo(const char *appid, pkgmgrinfo_appinfo_h *handle);
+int pkgmgrinfo_appinfo_get_pkgname(pkgmgrinfo_appinfo_h  handle, char **pkg_name);
 
 /**
- * @fn int pkgmgrinfo_appinfo_get_pkgname(pkgmgrinfo_appinfo_h handle, char **pkg_name)
- * @brief      This API gets the package name of the application
+ * @fn int pkgmgrinfo_appinfo_get_pkgid(pkgmgrinfo_appinfo_h handle, char **pkgid)
+ * @brief      This API gets the package id of the application
  *
  * @par                This API is for package-manager client application
  * @par Sync (or) Async : Synchronous API
  *
  * @param[in] handle           pointer to the application info handle.
- * @param[out] pkg_name                pointer to hold package name
+ * @param[out] pkgid           pointer to hold package id
  * @return     0 if success, error code(<0) if fail
  * @retval     PMINFO_R_OK     success
  * @retval     PMINFO_R_EINVAL invalid argument
@@ -2729,36 +2476,36 @@ int pkgmgrinfo_appinfo_get_unmounted_appinfo(const char *appid, pkgmgrinfo_appin
  * @see                pkgmgrinfo_appinfo_get_appid()
  * @see                pkgmgrinfo_appinfo_is_multiple()
  * @code
-static int get_app_pkgname(const char *appid)
+static int get_app_pkgid(const char *appid)
 {
        int ret = 0;
-       char *pkgname = NULL;
+       char *pkgid = NULL;
        pkgmgrinfo_appinfo_h handle;
        ret = pkgmgrinfo_appinfo_get_appinfo(appid, &handle);
        if (ret != PMINFO_R_OK)
                return -1;
-       ret = pkgmgrinfo_appinfo_get_pkgname(handle, &pkgname);
+       ret = pkgmgrinfo_appinfo_get_pkgid(handle, &pkgid);
        if (ret != PMINFO_R_OK) {
                pkgmgrinfo_appinfo_destroy_appinfo(handle);
                return -1;
        }
-       printf("pkg name: %s\n", pkgname);
+       printf("pkg id: %s\n", pkgid);
        pkgmgrinfo_appinfo_destroy_appinfo(handle);
        return 0;
 }
  * @endcode
  */
-int pkgmgrinfo_appinfo_get_pkgname(pkgmgrinfo_appinfo_h  handle, char **pkg_name);
+int pkgmgrinfo_appinfo_get_pkgid(pkgmgrinfo_appinfo_h  handle, char **pkgid);
 
 /**
- * @fn int pkgmgrinfo_appinfo_get_pkgid(pkgmgrinfo_appinfo_h handle, char **pkgid)
- * @brief      This API gets the package id of the application
+ * @fn int pkgmgrinfo_appinfo_get_pkgtype(pkgmgrinfo_appinfo_h handle, char **pkgtype)
+ * @brief      This API gets the package type of the application
  *
  * @par                This API is for package-manager client application
  * @par Sync (or) Async : Synchronous API
  *
  * @param[in] handle           pointer to the application info handle.
- * @param[out] pkgid           pointer to hold package id
+ * @param[out] pkgtype         pointer to hold package type
  * @return     0 if success, error code(<0) if fail
  * @retval     PMINFO_R_OK     success
  * @retval     PMINFO_R_EINVAL invalid argument
@@ -2768,26 +2515,26 @@ int pkgmgrinfo_appinfo_get_pkgname(pkgmgrinfo_appinfo_h  handle, char **pkg_name
  * @see                pkgmgrinfo_appinfo_get_appid()
  * @see                pkgmgrinfo_appinfo_is_multiple()
  * @code
-static int get_app_pkgid(const char *appid)
+static int get_app_pkgtype(const char *appid)
 {
        int ret = 0;
-       char *pkgid = NULL;
+       char *pkgtype = NULL;
        pkgmgrinfo_appinfo_h handle;
        ret = pkgmgrinfo_appinfo_get_appinfo(appid, &handle);
        if (ret != PMINFO_R_OK)
                return -1;
-       ret = pkgmgrinfo_appinfo_get_pkgid(handle, &pkgid);
+       ret = pkgmgrinfo_appinfo_get_pkgtype(handle, &pkgtype);
        if (ret != PMINFO_R_OK) {
                pkgmgrinfo_appinfo_destroy_appinfo(handle);
                return -1;
        }
-       printf("pkg id: %s\n", pkgid);
+       printf("pkgtype: %s\n", pkgtype);
        pkgmgrinfo_appinfo_destroy_appinfo(handle);
        return 0;
 }
  * @endcode
  */
-int pkgmgrinfo_appinfo_get_pkgid(pkgmgrinfo_appinfo_h  handle, char **pkgid);
+int pkgmgrinfo_appinfo_get_pkgtype(pkgmgrinfo_appinfo_h  handle, char **pkgtype);
 
 /**
  * @fn int pkgmgrinfo_appinfo_get_exec(pkgmgrinfo_appinfo_h handle, char **exec)
@@ -3593,6 +3340,45 @@ static int get_app_effectimages(const char *appid)
 int pkgmgrinfo_appinfo_get_effectimage(pkgmgrinfo_appinfo_h  handle, char **portrait_img, char **landscape_img);
 
 /**
+ * @fn int pkgmgrinfo_appinfo_get_effectimage_type(pkgmgrinfo_appinfo_h  handle, char **effectimg_type)
+ * @brief      This API gets the application's effect image type
+ *
+ * @par                This API is for package-manager client application
+ * @par Sync (or) Async : Synchronous API
+ *
+ * @param[in]  handle  pointer to application info handle
+ * @param[out]  effectimg_type contains effect image type
+ * @return     0 if success, error code(<0) if fail
+ * @retval     PMINFO_R_OK     success
+ * @retval     PMINFO_R_EINVAL invalid argument
+ * @retval     PMINFO_R_ERROR  internal error
+ * @pre                pkgmgrinfo_appinfo_get_appinfo()
+ * @post               pkgmgrinfo_appinfo_destroy_appinfo()
+ * @see                pkgmgrinfo_appinfo_get_appid()
+ * @see                pkgmgrinfo_appinfo_is_nodisplay()
+ * @code
+static int get_app_effectimage_type(const char *appid)
+{
+       int ret = 0;
+       char *effectimg_type = NULL;
+       pkgmgrinfo_appinfo_h handle;
+       ret = pkgmgrinfo_appinfo_get_appinfo(appid, &handle);
+       if (ret != PMINFO_R_OK)
+               return -1;
+       ret = pkgmgrinfo_appinfo_get_effectimage_type(handle, &effectimg_type);
+       if (ret != PMINFO_R_OK) {
+               pkgmgrinfo_appinfo_destroy_appinfo(handle);
+               return -1;
+       }
+       printf("app effect image type: %s\n", effectimg_type);
+       pkgmgrinfo_appinfo_destroy_appinfo(handle);
+       return 0;
+}
+ * @endcode
+ */
+int pkgmgrinfo_appinfo_get_effectimage_type(pkgmgrinfo_appinfo_h  handle, char **effectimg_type);
+
+/**
  * @fn int pkgmgrinfo_appinfo_get_submode_mainid(pkgmgrinfo_appinfo_h handle, char **submode_mainid)
  * @brief      This API gets the submode_mainid of the application
  *
@@ -3666,31 +3452,31 @@ static int get_localed_label(const char *appid, const char *locale)
 int pkgmgrinfo_appinfo_get_localed_label(const char *appid, const char *locale, char **label);
 
 /**
- * @fn int pkgmgrinfo_appinfo_is_category_exist(pkgmgrinfo_appinfo_h handle, const char *category, bool *exist)
- * @brief      This API checks if the application has the given category
+ * @fn int pkgmgrinfo_appinfo_get_metadata_value(pkgmgrinfo_appinfo_h handle, const char *metadata_key, char **metadata_value)
+ * @brief      This API gets metadata value by given metadata key
  *
  * @par                This API is for package-manager client application
  * @par Sync (or) Async : Synchronous API
  *
  * @param[in]  handle  pointer to the application info handle
- * @param[in]  category        category
- * @param[out] exist           value Gets whether the application has the given category
+ * @param[in]  metadata_key    metadata key
+ * @param[out] metadata_value          pointer to hold metadata value
  * @return     0 if success, error code(<0) if fail
  * @retval     PMINFO_R_OK     success
  * @retval     PMINFO_R_EINVAL invalid argument
  * @retval     PMINFO_R_ERROR  internal error
  * @code
-static int is_category_exist(const char *appid, const char *category)
+static int get_metadata_value(const char *appid, const char *metadata_key)
 {
        int ret = 0;
        pkgmgrinfo_appinfo_h handle;
-       bool exist = false;
+       char *metadata_value = NULL;
 
        ret = pkgmgrinfo_appinfo_get_appinfo(appid, &handle);
        if (ret != PMINFO_R_OK)
                return -1;
 
-       ret = pkgmgrinfo_appinfo_is_category_exist(handle, category, &exist);
+       ret = pkgmgrinfo_appinfo_get_metadata_value(handle, metadata_key, &metadata_value);
        if (ret != PMINFO_R_OK) {
                pkgmgrinfo_appinfo_destroy_appinfo(handle);
                return -1;
@@ -3701,45 +3487,274 @@ static int is_category_exist(const char *appid, const char *category)
 }
  * @endcode
  */
-int pkgmgrinfo_appinfo_is_category_exist(pkgmgrinfo_appinfo_h handle, const char *category, bool *exist);
+int pkgmgrinfo_appinfo_get_metadata_value(pkgmgrinfo_appinfo_h handle, const char *metadata_key, char **metadata_value);
 
 /**
- * @fn int pkgmgrinfo_appinfo_get_metadata_value(pkgmgrinfo_appinfo_h handle, const char *metadata_key, char **metadata_value)
- * @brief      This API gets metadata value by given metadata key
+ * @fn int pkgmgrinfo_appinfo_get_multi_instance_mainid(pkgmgrinfo_appinfo_h  handle, char **multi_instance_mainid)
+ * @brief      This API gets the multi_instance_mainid of the application
  *
  * @par                This API is for package-manager client application
  * @par Sync (or) Async : Synchronous API
  *
- * @param[in]  handle  pointer to the application info handle
- * @param[in]  metadata_key    metadata key
- * @param[out] metadata_value          pointer to hold metadata value
+ * @param[in] handle           pointer to the application info handle.
+ * @param[out] multi_instance_mainid           pointer to hold app multi_instance_mainid
  * @return     0 if success, error code(<0) if fail
  * @retval     PMINFO_R_OK     success
  * @retval     PMINFO_R_EINVAL invalid argument
  * @retval     PMINFO_R_ERROR  internal error
+ * @pre                pkgmgrinfo_appinfo_get_appinfo()
+ * @post               pkgmgrinfo_appinfo_destroy_appinfo()
+ * @see                pkgmgrinfo_appinfo_get_appid()
+ * @see                pkgmgrinfo_appinfo_is_multiple()
  * @code
-static int get_metadata_value(const char *appid, const char *metadata_key)
+static int get_app_multi_instance_mainid(const char *appid)
 {
        int ret = 0;
+       char *multi_instance_mainid = NULL;
        pkgmgrinfo_appinfo_h handle;
-       char *metadata_value = NULL;
+       ret = pkgmgrinfo_appinfo_get_appinfo(appid, &handle);
+       if (ret != PMINFO_R_OK)
+               return -1;
+       ret = pkgmgrinfo_appinfo_get_multi_instance_mainid(handle, &multi_instance_mainid);
+       if (ret != PMINFO_R_OK) {
+               pkgmgrinfo_appinfo_destroy_appinfo(handle);
+               return -1;
+       }
+       printf("multi_instance_mainid: %s\n", multi_instance_mainid);
+       pkgmgrinfo_appinfo_destroy_appinfo(handle);
+       return 0;
+}
+ * @endcode
+ */
+int pkgmgrinfo_appinfo_get_multi_instance_mainid(pkgmgrinfo_appinfo_h  handle, char **multi_instance_mainid);
+
+/**
+ * @fn int pkgmgrinfo_appinfo_get_datacontrol_info(const char *providerid, const char *type, char **appid, char **access);
+ * @brief      This API gets the datacontrol info
+ *
+ * @par                This API is for package-manager client application
+ * @par Sync (or) Async : Synchronous API
+ *
+ * @param[in] providerid               pointer to the providerid of dataconltrol.
+ * @param[in] type                     pointer to the type of dataconltrol.
+ * @param[out] appid                   pointer to hold appid, need to free after using
+ * @param[out] access                  pointer to hold access, need to free after using
+ * @return     0 if success, error code(<0) if fail
+ * @retval     PMINFO_R_OK     success
+ * @retval     PMINFO_R_EINVAL invalid argument
+ * @retval     PMINFO_R_ERROR  internal error
+ * @endcode
+ */
+int pkgmgrinfo_appinfo_get_datacontrol_info(const char *providerid, const char *type, char **appid, char **access);
+
+/**
+ * @fn int pkgmgrinfo_appinfo_get_datacontrol_appid(const char *providerid, char **appid);
+ * @brief      This API gets the appid of datacontrol
+ *
+ * @par                This API is for package-manager client application
+ * @par Sync (or) Async : Synchronous API
+ *
+ * @param[in] providerid               pointer to the providerid of dataconltrol.
+ * @param[out] appid                   pointer to hold appid, need to free after using
+ * @return     0 if success, error code(<0) if fail
+ * @retval     PMINFO_R_OK     success
+ * @retval     PMINFO_R_EINVAL invalid argument
+ * @retval     PMINFO_R_ERROR  internal error
+ * @endcode
+ */
+int pkgmgrinfo_appinfo_get_datacontrol_appid(const char *providerid, char **appid);
+
+/**
+ * @fn int pkgmgrinfo_appinfo_get_support_mode(pkgmgrinfo_appinfo_h  handle, int *support_mode)
+ * @brief      This API gets the support_mode of the application
+ *
+ * @par                This API is for package-manager client application
+ * @par Sync (or) Async : Synchronous API
+ *
+ * @param[in] handle           pointer to the application info handle.
+ * @param[out] support_mode            pointer to hold app support_mode
+ * @return     0 if success, error code(<0) if fail
+ * @retval     PMINFO_R_OK     success
+ * @retval     PMINFO_R_EINVAL invalid argument
+ * @retval     PMINFO_R_ERROR  internal error
+ * @pre                pkgmgrinfo_appinfo_get_appinfo()
+ * @post               pkgmgrinfo_appinfo_destroy_appinfo()
+ * @see                pkgmgrinfo_appinfo_get_appid()
+ * @code
+static int get_app_support_mode(const char *appid)
+{
+       int ret = 0;
+       int support_mode = 0;
+       pkgmgrinfo_appinfo_h handle;
+       ret = pkgmgrinfo_appinfo_get_appinfo(appid, &handle);
+       if (ret != PMINFO_R_OK)
+               return -1;
+       ret = pkgmgrinfo_appinfo_get_support_mode(handle, &support_mode);
+       if (ret != PMINFO_R_OK) {
+               pkgmgrinfo_appinfo_destroy_appinfo(handle);
+               return -1;
+       }
+       printf("support_mode: %s\n", support_mode);
+       pkgmgrinfo_appinfo_destroy_appinfo(handle);
+       return 0;
+}
+ * @endcode
+ */
+int pkgmgrinfo_appinfo_get_support_mode(pkgmgrinfo_appinfo_h handle, int *support_mode);
+
 
+/**
+ * @fn int pkgmgrinfo_appinfo_get_support_feature(pkgmgrinfo_appinfo_h  handle, int *support_feature)
+ * @brief      This API gets the support_funtion of the application
+ *
+ * @par                This API is for package-manager client application
+ * @par Sync (or) Async : Synchronous API
+ *
+ * @param[in] handle           pointer to the application info handle.
+ * @param[out] support_feature         pointer to hold app support_feature
+ * @return     0 if success, error code(<0) if fail
+ * @retval     PMINFO_R_OK     success
+ * @retval     PMINFO_R_EINVAL invalid argument
+ * @retval     PMINFO_R_ERROR  internal error
+ * @pre                pkgmgrinfo_appinfo_get_appinfo()
+ * @post               pkgmgrinfo_appinfo_destroy_appinfo()
+ * @see                pkgmgrinfo_appinfo_get_appid()
+ * @code
+static int get_app_support_feature(const char *appid)
+{
+       int ret = 0;
+       int support_feature = 0;
+       pkgmgrinfo_appinfo_h handle = NULL;
        ret = pkgmgrinfo_appinfo_get_appinfo(appid, &handle);
        if (ret != PMINFO_R_OK)
                return -1;
+       ret = pkgmgrinfo_appinfo_get_support_feature(handle, &support_feature);
+       if (ret != PMINFO_R_OK) {
+               pkgmgrinfo_appinfo_destroy_appinfo(handle);
+               return -1;
+       }
+       printf("support_feature: %d\n", support_feature);
+       pkgmgrinfo_appinfo_destroy_appinfo(handle);
+       return 0;
+}
+ * @endcode
+ */
+int pkgmgrinfo_appinfo_get_support_feature(pkgmgrinfo_appinfo_h handle, int *support_feature);
 
-       ret = pkgmgrinfo_appinfo_get_metadata_value(handle, metadata_key, &metadata_value);
+/**
+ * @fn int pkgmgrinfo_appinfo_get_uginfo(const char *ug_name, pkgmgrinfo_appinfo_h *handle)
+ * @brief      This API creates the application information handle from ug_name
+ *
+ * @par                This API is for package-manager client application
+ * @par Sync (or) Async : Synchronous API
+ *
+ * @param[in]  ug_name pointer to ug_name
+ * @param[out] handle          pointer to the application info handle.
+ * @return     0 if success, error code(<0) if fail
+ * @retval     PMINFO_R_OK     success
+ * @retval     PMINFO_R_EINVAL invalid argument
+ * @retval     PMINFO_R_ERROR  internal error
+ * @pre                None
+ * @post               pkgmgrinfo_appinfo_destroy_appinfo()
+ * @code
+static int get_app_uginfo(const char *ug_name)
+{
+       int ret = 0;
+       char *appid = NULL;
+       pkgmgrinfo_appinfo_h handle;
+       ret = pkgmgrinfo_appinfo_get_uginfo(ug_name, &handle);
+       if (ret != PMINFO_R_OK)
+               return -1;
+       ret = pkgmgrinfo_appinfo_get_appid(handle, &appid);
        if (ret != PMINFO_R_OK) {
                pkgmgrinfo_appinfo_destroy_appinfo(handle);
                return -1;
        }
+       printf("appid: %s\n", appid);
+       pkgmgrinfo_appinfo_destroy_appinfo(handle);
+       return 0;
+}
+ * @endcode
+ */
+int pkgmgrinfo_appinfo_get_uginfo(const char *ug_name, pkgmgrinfo_appinfo_h *handle);
+
+
+/**
+ * @fn int pkgmgrinfo_appinfo_get_aliasid(const char *app_id, char** alias_id)
+ * @brief      This API get alias_id for an appid from pkgmgr DB.
+ *
+ * @par                This API is for package-manager client application
+ * @par Sync (or) Async : Synchronous API
+ *
+ * @param[in]  appid   pointer to application id
+ * @param[out] alias_id        pointer to pointer of alias id.
+ * @return     0 if success, error code(<0) if fail
+ * @retval     PMINFO_R_OK     success
+ * @retval     PMINFO_R_EINVAL invalid argument
+ * @retval     PMINFO_R_ERROR  internal error
+ * @pre                None
+ * @post               None
+ * @code
+static int get_app_aliasid(const char *appid)
+{
+       int ret = 0;
+       char *alias_id = NULL;
+       ret = pkgmgrinfo_appinfo_get_aliasid(appid, &alias_id);
+       if (ret != PMINFO_R_OK){
+               printf("Failed to get the aliasid for [%s]\n",appid);
+               return -1;
+       }
+       if(alias_id)
+               printf("aliasid: %s\n", alias_id);
+       else
+               printf("No alias_id found for %s\n",appid);
+
+       if(alias_id)
+               free(alias_id);
+       return ret;
+}
+ * @endcode
+ */
+int pkgmgrinfo_appinfo_get_aliasid(const char* appid, char** alias_id);
 
+/**
+ * @fn int pkgmgrinfo_appinfo_get_installed_time(pkgmgrinfo_appinfo_h handle, int *installed_time)
+ * @brief      This API gets the installed_time of the application
+ *
+ * @par                This API is for package-manager client application
+ * @par Sync (or) Async : Synchronous API
+ *
+ * @param[in] handle           pointer to the application info handle.
+ * @param[out] installed_time          pointer to hold installed_time
+ * @return     0 if success, error code(<0) if fail
+ * @retval     PMINFO_R_OK     success
+ * @retval     PMINFO_R_EINVAL invalid argument
+ * @retval     PMINFO_R_ERROR  internal error
+ * @pre                pkgmgrinfo_appinfo_get_appinfo()
+ * @post               pkgmgrinfo_appinfo_destroy_appinfo()
+ * @see                pkgmgrinfo_appinfo_get_appid()
+ * @see                pkgmgrinfo_appinfo_is_multiple()
+ * @code
+static int get_app_installed_time(const char *appid)
+{
+       int ret = 0;
+       int installed_time = 0;
+       pkgmgrinfo_appinfo_h handle;
+       ret = pkgmgrinfo_appinfo_get_appinfo(appid, &handle);
+       if (ret != PMINFO_R_OK)
+               return -1;
+       ret = pkgmgrinfo_appinfo_get_installed_time(handle, &installed_time);
+       if (ret != PMINFO_R_OK) {
+               pkgmgrinfo_appinfo_destroy_appinfo(handle);
+               return -1;
+       }
+       printf("installed_time: %d\n", installed_time);
        pkgmgrinfo_appinfo_destroy_appinfo(handle);
        return 0;
 }
  * @endcode
  */
-int pkgmgrinfo_appinfo_get_metadata_value(pkgmgrinfo_appinfo_h handle, const char *metadata_key, char **metadata_value);
+int pkgmgrinfo_appinfo_get_installed_time(pkgmgrinfo_appinfo_h handle, int *installed_time);
 
 /**
  * @fn int pkgmgrinfo_appinfo_foreach_permission(pkgmgrinfo_appinfo_h handle,
@@ -4361,108 +4376,377 @@ static int get_app_process_pool(const char *appid)
 int pkgmgrinfo_appinfo_is_process_pool(pkgmgrinfo_appinfo_h handle, bool *process_pool);
 
 /**
- * @fn int pkgmgrinfo_appinfo_destroy_appinfo(pkgmgrinfo_appinfo_h handle)
- * @brief      This API destroys the application information handle freeing up all the resources
+ * @fn int pkgmgrinfo_appinfo_is_category_exist(pkgmgrinfo_appinfo_h handle, const char *category, bool *exist)
+ * @brief      This API checks if the application has the given category
  *
  * @par                This API is for package-manager client application
  * @par Sync (or) Async : Synchronous API
  *
- * @param[in] handle           pointer to the application info handle.
+ * @param[in]  handle  pointer to the application info handle
+ * @param[in]  category        category
+ * @param[out] exist           value Gets whether the application has the given category
  * @return     0 if success, error code(<0) if fail
  * @retval     PMINFO_R_OK     success
  * @retval     PMINFO_R_EINVAL invalid argument
  * @retval     PMINFO_R_ERROR  internal error
- * @pre                pkgmgrinfo_appinfo_get_appinfo()
- * @post               None
- * @see                pkgmgrinfo_appinfo_get_pkgid()
- * @see                pkgmgrinfo_appinfo_is_multiple()
  * @code
-static int get_app_type(const char *appid)
+static int is_category_exist(const char *appid, const char *category)
 {
        int ret = 0;
-       char *type = NULL;
        pkgmgrinfo_appinfo_h handle;
+       bool exist = false;
+
        ret = pkgmgrinfo_appinfo_get_appinfo(appid, &handle);
        if (ret != PMINFO_R_OK)
                return -1;
-       ret = pkgmgrinfo_appinfo_get_apptype(handle, &type);
+
+       ret = pkgmgrinfo_appinfo_is_category_exist(handle, category, &exist);
        if (ret != PMINFO_R_OK) {
                pkgmgrinfo_appinfo_destroy_appinfo(handle);
                return -1;
        }
-       printf("apptype: %s\n", type);
+
        pkgmgrinfo_appinfo_destroy_appinfo(handle);
        return 0;
 }
  * @endcode
  */
-int pkgmgrinfo_appinfo_destroy_appinfo(pkgmgrinfo_appinfo_h  handle);
+int pkgmgrinfo_appinfo_is_category_exist(pkgmgrinfo_appinfo_h handle, const char *category, bool *exist);
+
 
 /**
- * @fn int pkgmgrinfo_appinfo_filter_create(pkgmgrinfo_appinfo_filter_h *handle)
- * @brief      This API creates the application information filter handle from db.  All filter properties will be ANDed.
- The query will search the entire application information collected from the manifest file of all the installed packages
+ * @fn int pkgmgrinfo_appinfo_is_multi_instance(pkgmgrinfo_appinfo_h handle, bool *multi_instance)
+ * @brief      This API gets the application 'multi_instance' value from the app ID
  *
  * @par                This API is for package-manager client application
  * @par Sync (or) Async : Synchronous API
  *
- * @param[out] handle          pointer to the application info filter handle.
+ * @param[in]  handle  pointer to application info handle
+ * @param[out] multi_instance          pointer to hold package multi_instance value
  * @return     0 if success, error code(<0) if fail
  * @retval     PMINFO_R_OK     success
  * @retval     PMINFO_R_EINVAL invalid argument
  * @retval     PMINFO_R_ERROR  internal error
- * @pre                None
- * @post               pkgmgrinfo_appinfo_filter_destroy()
- * @see                pkgmgrinfo_appinfo_filter_count()
- * @see                pkgmgrinfo_appinfo_filter_foreach_appinfo()
+ * @pre                pkgmgrinfo_appinfo_get_appinfo()
+ * @post               pkgmgrinfo_appinfo_destroy_appinfo()
+ * @see                pkgmgrinfo_appinfo_get_appid()
+ * @see                pkgmgrinfo_appinfo_is_multiple()
  * @code
-static int get_capp_count()
+static int get_app_multi_instance(const char *appid)
 {
        int ret = 0;
-       int count = 0;
-       pkgmgrinfo_appinfo_filter_h handle;
-       ret = pkgmgrinfo_appinfo_filter_create(&handle);
+       bool multi_instance;
+       pkgmgrinfo_appinfo_h handle;
+       ret = pkgmgrinfo_appinfo_get_appinfo(appid, &handle);
        if (ret != PMINFO_R_OK)
                return -1;
-       ret = pkgmgrinfo_appinfo_filter_add_string(handle, PMINFO_APPINFO_PROP_APP_TYPE, "capp");
-       if (ret != PMINFO_R_OK) {
-               pkgmgrinfo_appinfo_filter_destroy(handle);
-               return -1;
-       }
-       ret = pkgmgrinfo_appinfo_filter_count(handle, &count);
+       ret = pkgmgrinfo_appinfo_is_multi_instance(handle, &multi_instance);
        if (ret != PMINFO_R_OK) {
-               pkgmgrinfo_appinfo_filter_destroy(handle);
+               pkgmgrinfo_appinfo_destroy_appinfo(handle);
                return -1;
        }
-       printf("No of capp: %d\n", count);
-       pkgmgrinfo_appinfo_filter_destroy(handle);
+       printf("app multi_instance: %d\n", multi_instance);
+       pkgmgrinfo_appinfo_destroy_appinfo(handle);
        return 0;
 }
  * @endcode
  */
-int pkgmgrinfo_appinfo_filter_create(pkgmgrinfo_appinfo_filter_h *handle);
+int pkgmgrinfo_appinfo_is_multi_instance(pkgmgrinfo_appinfo_h handle, bool *multi_instance);
 
 /**
- * @fn int pkgmgrinfo_appinfo_filter_destroy(pkgmgrinfo_appinfo_filter_h handle)
- * @brief      This API destroys the application information filter handle freeing up all the resources
+ * @fn int pkgmgrinfo_appinfo_is_multi_window(pkgmgrinfo_appinfo_h handle, bool *multi_window)
+ * @brief      This API gets the application 'multi_window' value from the app ID
  *
  * @par                This API is for package-manager client application
  * @par Sync (or) Async : Synchronous API
  *
- * @param[in] handle           pointer to the application info filter handle.
+ * @param[in]  handle  pointer to application info handle
+ * @param[out] multi_window            pointer to hold package multi_window value
  * @return     0 if success, error code(<0) if fail
  * @retval     PMINFO_R_OK     success
  * @retval     PMINFO_R_EINVAL invalid argument
  * @retval     PMINFO_R_ERROR  internal error
- * @pre                pkgmgrinfo_appinfo_filter_create()
- * @post               None
- * @see                pkgmgrinfo_appinfo_filter_count()
- * @see                pkgmgrinfo_appinfo_filter_foreach_appinfo()
+ * @pre                pkgmgrinfo_appinfo_get_appinfo()
+ * @post               pkgmgrinfo_appinfo_destroy_appinfo()
+ * @see                pkgmgrinfo_appinfo_get_appid()
+ * @see                pkgmgrinfo_appinfo_is_multiple()
  * @code
-static int get_capp_count()
+static int get_app_multi_window(const char *appid)
 {
        int ret = 0;
-       int count = 0;
+       bool multi_window;
+       pkgmgrinfo_appinfo_h handle;
+       ret = pkgmgrinfo_appinfo_get_appinfo(appid, &handle);
+       if (ret != PMINFO_R_OK)
+               return -1;
+       ret = pkgmgrinfo_appinfo_is_multi_window(handle, &multi_window);
+       if (ret != PMINFO_R_OK) {
+               pkgmgrinfo_appinfo_destroy_appinfo(handle);
+               return -1;
+       }
+       printf("app multi_window: %d\n", multi_window);
+       pkgmgrinfo_appinfo_destroy_appinfo(handle);
+       return 0;
+}
+ * @endcode
+ */
+int pkgmgrinfo_appinfo_is_multi_window(pkgmgrinfo_appinfo_h handle, bool *multi_window);
+
+/**
+ * @fn int pkgmgrinfo_appinfo_is_support_disable(pkgmgrinfo_appinfo_h handle, bool *support_disable)
+ * @brief      This API gets the application 'support_disable' value from the app ID
+ *
+ * @par                This API is for package-manager client application
+ * @par Sync (or) Async : Synchronous API
+ *
+ * @param[in]  handle  pointer to application info handle
+ * @param[out]         support_disable pointer to hold package support_disable value
+ * @return     0 if success, error code(<0) if fail
+ * @retval     PMINFO_R_OK     success
+ * @retval     PMINFO_R_EINVAL invalid argument
+ * @retval     PMINFO_R_ERROR  internal error
+ * @pre                pkgmgrinfo_appinfo_get_appinfo()
+ * @post               pkgmgrinfo_appinfo_destroy_appinfo()
+ * @see                pkgmgrinfo_appinfo_get_appid()
+ * @code
+static int get_app_support_disable(const char *appid)
+{
+       int ret = 0;
+       bool support_disable;
+       pkgmgrinfo_appinfo_h handle;
+       ret = pkgmgrinfo_appinfo_get_appinfo(appid, &handle);
+       if (ret != PMINFO_R_OK)
+               return -1;
+       ret = pkgmgrinfo_appinfo_is_support_disable(handle, &support_disable);
+       if (ret != PMINFO_R_OK) {
+               pkgmgrinfo_appinfo_destroy_appinfo(handle);
+               return -1;
+       }
+       printf("app support_disable: %d\n", support_disable);
+       pkgmgrinfo_appinfo_destroy_appinfo(handle);
+       return 0;
+}
+ * @endcode
+ */
+int pkgmgrinfo_appinfo_is_support_disable(pkgmgrinfo_appinfo_h handle, bool *support_disable);
+
+/**
+ * @fn int pkgmgrinfo_appinfo_is_ui_gadget(pkgmgrinfo_appinfo_h handle, bool *ui_gadget)
+ * @brief      This API gets the application 'ui_gadget' value from the app ID
+ *
+ * @par                This API is for package-manager client application
+ * @par Sync (or) Async : Synchronous API
+ *
+ * @param[in]  handle  pointer to application info handle
+ * @param[out]         ui_gadget       pointer to hold package ui_gadget value
+ * @return     0 if success, error code(<0) if fail
+ * @retval     PMINFO_R_OK     success
+ * @retval     PMINFO_R_EINVAL invalid argument
+ * @retval     PMINFO_R_ERROR  internal error
+ * @pre                pkgmgrinfo_appinfo_get_appinfo()
+ * @post               pkgmgrinfo_appinfo_destroy_appinfo()
+ * @see                pkgmgrinfo_appinfo_get_appid()
+ * @code
+static int get_app_ui_gadget(const char *appid)
+{
+       int ret = 0;
+       bool ui_gadget;
+       pkgmgrinfo_appinfo_h handle = NULL;
+       ret = pkgmgrinfo_appinfo_get_appinfo(appid, &handle);
+       if (ret != PMINFO_R_OK)
+               return -1;
+       ret = pkgmgrinfo_appinfo_is_ui_gadget(handle, &ui_gadget);
+       if (ret != PMINFO_R_OK) {
+               pkgmgrinfo_appinfo_destroy_appinfo(handle);
+               return -1;
+       }
+       printf("app ui_gadget: %d\n", ui_gadget);
+       pkgmgrinfo_appinfo_destroy_appinfo(handle);
+       return 0;
+}
+ * @endcode
+ */
+int pkgmgrinfo_appinfo_is_ui_gadget(pkgmgrinfo_appinfo_h handle, bool *ui_gadget);
+
+/**
+ * @fn int pkgmgrinfo_appinfo_is_removable(pkgmgrinfo_appinfo_h handle, bool *removable)
+ * @brief      This API gets the application 'removable' value from the app ID
+ *
+ * @par                This API is for package-manager client application
+ * @par Sync (or) Async : Synchronous API
+ *
+ * @param[in]  handle  pointer to application info handle
+ * @param[out]         removable       pointer to hold package removable value
+ * @return     0 if success, error code(<0) if fail
+ * @retval     PMINFO_R_OK     success
+ * @retval     PMINFO_R_EINVAL invalid argument
+ * @retval     PMINFO_R_ERROR  internal error
+ * @pre                pkgmgrinfo_appinfo_get_appinfo()
+ * @post               pkgmgrinfo_appinfo_destroy_appinfo()
+ * @see                pkgmgrinfo_appinfo_get_appid()
+ * @code
+static int get_app_removable(const char *appid)
+{
+       int ret = 0;
+       bool removable;
+       pkgmgrinfo_appinfo_h handle = NULL;
+       ret = pkgmgrinfo_appinfo_get_appinfo(appid, &handle);
+       if (ret != PMINFO_R_OK)
+               return -1;
+       ret = pkgmgrinfo_appinfo_is_removable(handle, &removable);
+       if (ret != PMINFO_R_OK) {
+               pkgmgrinfo_appinfo_destroy_appinfo(handle);
+               return -1;
+       }
+       printf("app removable: %d\n", removable);
+       pkgmgrinfo_appinfo_destroy_appinfo(handle);
+       return 0;
+}
+ * @endcode
+ */
+int pkgmgrinfo_appinfo_is_removable(pkgmgrinfo_appinfo_h handle, bool *removable);
+
+/**
+ * @fn int pkgmgrinfo_appinfo_is_system(pkgmgrinfo_appinfo_h handle, bool *system)
+ * @brief      This API gets the application 'system' value from the app ID
+ *
+ * @par                This API is for package-manager client application
+ * @par Sync (or) Async : Synchronous API
+ *
+ * @param[in]  handle  pointer to application info handle
+ * @param[out]         system  pointer to hold package system value
+ * @return     0 if success, error code(<0) if fail
+ * @retval     PMINFO_R_OK     success
+ * @retval     PMINFO_R_EINVAL invalid argument
+ * @retval     PMINFO_R_ERROR  internal error
+ * @pre                pkgmgrinfo_appinfo_get_appinfo()
+ * @post               pkgmgrinfo_appinfo_destroy_appinfo()
+ * @see                pkgmgrinfo_appinfo_get_appid()
+ * @code
+static int get_app_system(const char *appid)
+{
+       int ret = 0;
+       bool system = false;
+       pkgmgrinfo_appinfo_h handle = NULL;
+       ret = pkgmgrinfo_appinfo_get_appinfo(appid, &handle);
+       if (ret != PMINFO_R_OK)
+               return -1;
+       ret = pkgmgrinfo_appinfo_is_system(handle, &system);
+       if (ret != PMINFO_R_OK) {
+               pkgmgrinfo_appinfo_destroy_appinfo(handle);
+               return -1;
+       }
+       printf("app system: %d\n", system);
+       pkgmgrinfo_appinfo_destroy_appinfo(handle);
+       return 0;
+}
+ * @endcode
+ */
+int pkgmgrinfo_appinfo_is_system(pkgmgrinfo_appinfo_h handle, bool *system);
+
+/**
+ * @fn int pkgmgrinfo_appinfo_destroy_appinfo(pkgmgrinfo_appinfo_h handle)
+ * @brief      This API destroys the application information handle freeing up all the resources
+ *
+ * @par                This API is for package-manager client application
+ * @par Sync (or) Async : Synchronous API
+ *
+ * @param[in] handle           pointer to the application info handle.
+ * @return     0 if success, error code(<0) if fail
+ * @retval     PMINFO_R_OK     success
+ * @retval     PMINFO_R_EINVAL invalid argument
+ * @retval     PMINFO_R_ERROR  internal error
+ * @pre                pkgmgrinfo_appinfo_get_appinfo()
+ * @post               None
+ * @see                pkgmgrinfo_appinfo_get_pkgid()
+ * @see                pkgmgrinfo_appinfo_is_multiple()
+ * @code
+static int get_app_type(const char *appid)
+{
+       int ret = 0;
+       char *type = NULL;
+       pkgmgrinfo_appinfo_h handle;
+       ret = pkgmgrinfo_appinfo_get_appinfo(appid, &handle);
+       if (ret != PMINFO_R_OK)
+               return -1;
+       ret = pkgmgrinfo_appinfo_get_apptype(handle, &type);
+       if (ret != PMINFO_R_OK) {
+               pkgmgrinfo_appinfo_destroy_appinfo(handle);
+               return -1;
+       }
+       printf("apptype: %s\n", type);
+       pkgmgrinfo_appinfo_destroy_appinfo(handle);
+       return 0;
+}
+ * @endcode
+ */
+int pkgmgrinfo_appinfo_destroy_appinfo(pkgmgrinfo_appinfo_h  handle);
+
+/**
+ * @fn int pkgmgrinfo_appinfo_filter_create(pkgmgrinfo_appinfo_filter_h *handle)
+ * @brief      This API creates the application information filter handle from db.  All filter properties will be ANDed.
+ The query will search the entire application information collected from the manifest file of all the installed packages
+ *
+ * @par                This API is for package-manager client application
+ * @par Sync (or) Async : Synchronous API
+ *
+ * @param[out] handle          pointer to the application info filter handle.
+ * @return     0 if success, error code(<0) if fail
+ * @retval     PMINFO_R_OK     success
+ * @retval     PMINFO_R_EINVAL invalid argument
+ * @retval     PMINFO_R_ERROR  internal error
+ * @pre                None
+ * @post               pkgmgrinfo_appinfo_filter_destroy()
+ * @see                pkgmgrinfo_appinfo_filter_count()
+ * @see                pkgmgrinfo_appinfo_filter_foreach_appinfo()
+ * @code
+static int get_capp_count()
+{
+       int ret = 0;
+       int count = 0;
+       pkgmgrinfo_appinfo_filter_h handle;
+       ret = pkgmgrinfo_appinfo_filter_create(&handle);
+       if (ret != PMINFO_R_OK)
+               return -1;
+       ret = pkgmgrinfo_appinfo_filter_add_string(handle, PMINFO_APPINFO_PROP_APP_TYPE, "capp");
+       if (ret != PMINFO_R_OK) {
+               pkgmgrinfo_appinfo_filter_destroy(handle);
+               return -1;
+       }
+       ret = pkgmgrinfo_appinfo_filter_count(handle, &count);
+       if (ret != PMINFO_R_OK) {
+               pkgmgrinfo_appinfo_filter_destroy(handle);
+               return -1;
+       }
+       printf("No of capp: %d\n", count);
+       pkgmgrinfo_appinfo_filter_destroy(handle);
+       return 0;
+}
+ * @endcode
+ */
+int pkgmgrinfo_appinfo_filter_create(pkgmgrinfo_appinfo_filter_h *handle);
+
+/**
+ * @fn int pkgmgrinfo_appinfo_filter_destroy(pkgmgrinfo_appinfo_filter_h handle)
+ * @brief      This API destroys the application information filter handle freeing up all the resources
+ *
+ * @par                This API is for package-manager client application
+ * @par Sync (or) Async : Synchronous API
+ *
+ * @param[in] handle           pointer to the application info filter handle.
+ * @return     0 if success, error code(<0) if fail
+ * @retval     PMINFO_R_OK     success
+ * @retval     PMINFO_R_EINVAL invalid argument
+ * @retval     PMINFO_R_ERROR  internal error
+ * @pre                pkgmgrinfo_appinfo_filter_create()
+ * @post               None
+ * @see                pkgmgrinfo_appinfo_filter_count()
+ * @see                pkgmgrinfo_appinfo_filter_foreach_appinfo()
+ * @code
+static int get_capp_count()
+{
+       int ret = 0;
+       int count = 0;
        pkgmgrinfo_appinfo_filter_h handle;
        ret = pkgmgrinfo_appinfo_filter_create(&handle);
        if (ret != PMINFO_R_OK)
@@ -5116,639 +5400,47 @@ static int delete_cert_info(const char *pkgid)
  */
  int pkgmgrinfo_delete_certinfo(const char *pkgid);
 
+
 /**
- * @fn int pkgmgrinfo_create_pkgdbinfo(const char *pkgid, pkgmgrinfo_pkgdbinfo_h *handle)
- * @brief      This API creates the package db information handle to set data in db.
+ * @fn int pkgmgrinfo_create_certinfo_set_handle(pkgmgrinfo_instcertinfo_h *handle)
+ * @brief      This API creates the package cert information handle to set data in db.
  *
  * @par                This API is for package-manager client application
  * @par Sync (or) Async : Synchronous API
  *
- * @param[in] pkgid    pointer to the package ID.
- * @param[out] handle          pointer to the package db info handle.
+ * @param[out] handle          pointer to the package cert handle.
  * @return     0 if success, error code(<0) if fail
  * @retval     PMINFO_R_OK     success
  * @retval     PMINFO_R_EINVAL invalid argument
  * @retval     PMINFO_R_ERROR  internal error
  * @pre                None
- * @post               pkgmgrinfo_destroy_pkgdbinfo()
- * @see                pkgmgrinfo_save_pkgdbinfo()
- * @see                pkgmgrinfo_set_type_to_pkgdbinfo()
+ * @post               pkgmgrinfo_destroy_certinfo_set_handle()
+ * @see                pkgmgrinfo_set_cert_value()
+ * @see                pkgmgrinfo_save_certinfo()
  * @code
-static int set_pkg_in_db(const char *pkgid)
+static int set_cert_in_db(const char *pkgid)
 {
        int ret = 0;
-       pkgmgrinfo_pkgdbinfo_h handle;
-       ret = pkgmgrinfo_create_pkgdbinfo(pkgid, &handle);
+       pkgmgrinfo_instcertinfo_h handle;
+       ret = pkgmgrinfo_create_certinfo_set_handle(&handle);
        if (ret != PMINFO_R_OK)
                return -1;
-       ret = pkgmgrinfo_set_version_to_pkgdbinfo(handle, "0.0.1");
+       ret = pkgmgrinfo_set_cert_value(handle, PMINFO_SET_AUTHOR_ROOT_CERT, "author root certificate");
        if (ret != PMINFO_R_OK) {
-               pkgmgrinfo_destroy_pkgdbinfo(handle);
+               pkgmgrinfo_destroy_certinfo_set_handle(handle);
                return -1;
        }
-       ret = pkgmgrinfo_save_pkgdbinfo(handle);
+       ret = pkgmgrinfo_save_pkgdbinfo(pkgid, handle);
        if (ret != PMINFO_R_OK) {
-               pkgmgrinfo_destroy_pkgdbinfo(handle);
+               pkgmgrinfo_destroy_certinfo_set_handle(handle);
                return -1;
        }
-       pkgmgrinfo_destroy_pkgdbinfo(handle);
+       pkgmgrinfo_destroy_certinfo_set_handle(handle);
        return 0;
 }
  * @endcode
  */
-int pkgmgrinfo_create_pkgdbinfo(const char *pkgid, pkgmgrinfo_pkgdbinfo_h *handle);
-
-/**
- * @fn int pkgmgrinfo_set_type_to_pkgdbinfo(pkgmgrinfo_pkgdbinfo_h handle, const char *type)
- * @brief      This API sets the package type in db handle
- *
- * @par                This API is for package-manager client application
- * @par Sync (or) Async : Synchronous API
- *
- * @param[in] handle   pointer to the pkgdbinfo handle.
- * @param[in] type             pointer to the package type.
- * @return     0 if success, error code(<0) if fail
- * @retval     PMINFO_R_OK     success
- * @retval     PMINFO_R_EINVAL invalid argument
- * @retval     PMINFO_R_ERROR  internal error
- * @pre                pkgmgrinfo_create_pkgdbinfo()
- * @post               pkgmgrinfo_destroy_pkgdbinfo()
- * @see                pkgmgrinfo_save_pkgdbinfo()
- * @see                pkgmgrinfo_set_version_to_pkgdbinfo()
- * @code
-static int set_pkg_type_in_db(const char *pkgid)
-{
-       int ret = 0;
-       pkgmgrinfo_pkgdbinfo_h handle;
-       ret = pkgmgrinfo_create_pkgdbinfo(pkgid, &handle);
-       if (ret != PMINFO_R_OK)
-               return -1;
-       ret = pkgmgrinfo_set_type_to_pkgdbinfo(handle, "wgt");
-       if (ret != PMINFO_R_OK) {
-               pkgmgrinfo_destroy_pkgdbinfo(handle);
-               return -1;
-       }
-       ret = pkgmgrinfo_save_pkgdbinfo(handle);
-       if (ret != PMINFO_R_OK) {
-               pkgmgrinfo_destroy_pkgdbinfo(handle);
-               return -1;
-       }
-       pkgmgrinfo_destroy_pkgdbinfo(handle);
-       return 0;
-}
- * @endcode
- */
-int pkgmgrinfo_set_type_to_pkgdbinfo(pkgmgrinfo_pkgdbinfo_h handle, const char *type);
-
-/**
- * @fn int pkgmgrinfo_set_version_to_pkgdbinfo(pkgmgrinfo_pkgdbinfo_h handle, const char *version)
- * @brief      This API sets the package version in db handle
- *
- * @par                This API is for package-manager client application
- * @par Sync (or) Async : Synchronous API
- *
- * @param[in] handle   pointer to the pkgdbinfo handle.
- * @param[in] version          pointer to the package version
- * @return     0 if success, error code(<0) if fail
- * @retval     PMINFO_R_OK     success
- * @retval     PMINFO_R_EINVAL invalid argument
- * @retval     PMINFO_R_ERROR  internal error
- * @pre                pkgmgrinfo_create_pkgdbinfo()
- * @post               pkgmgrinfo_destroy_pkgdbinfo()
- * @see                pkgmgrinfo_save_pkgdbinfo()
- * @see                pkgmgrinfo_set_type_to_pkgdbinfo()
- * @code
-static int set_pkg_version_in_db(const char *pkgid)
-{
-       int ret = 0;
-       pkgmgrinfo_pkgdbinfo_h handle;
-       ret = pkgmgrinfo_create_pkgdbinfo(pkgid, &handle);
-       if (ret != PMINFO_R_OK)
-               return -1;
-       ret = pkgmgrinfo_set_version_to_pkgdbinfo(handle, "0.0.1");
-       if (ret != PMINFO_R_OK) {
-               pkgmgrinfo_destroy_pkgdbinfo(handle);
-               return -1;
-       }
-       ret = pkgmgrinfo_save_pkgdbinfo(handle);
-       if (ret != PMINFO_R_OK) {
-               pkgmgrinfo_destroy_pkgdbinfo(handle);
-               return -1;
-       }
-       pkgmgrinfo_destroy_pkgdbinfo(handle);
-       return 0;
-}
- * @endcode
- */
-int pkgmgrinfo_set_version_to_pkgdbinfo(pkgmgrinfo_pkgdbinfo_h handle, const char *version);
-
-/**
- * @fn int pkgmgrinfo_set_install_location_to_pkgdbinfo(pkgmgrinfo_pkgdbinfo_h handle, INSTALL_LOCATION location)
- * @brief      This API sets the package install location in db handle
- *
- * @par                This API is for package-manager client application
- * @par Sync (or) Async : Synchronous API
- *
- * @param[in] handle   pointer to the pkgdbinfo handle.
- * @param[in] location package install location
- * @return     0 if success, error code(<0) if fail
- * @retval     PMINFO_R_OK     success
- * @retval     PMINFO_R_EINVAL invalid argument
- * @retval     PMINFO_R_ERROR  internal error
- * @pre                pkgmgrinfo_create_pkgdbinfo()
- * @post               pkgmgrinfo_destroy_pkgdbinfo()
- * @see                pkgmgrinfo_save_pkgdbinfo()
- * @see                pkgmgrinfo_set_type_to_pkgdbinfo()
- * @code
-static int set_pkg_install_location_in_db(const char *pkgid)
-{
-       int ret = 0;
-       pkgmgrinfo_pkgdbinfo_h handle;
-       ret = pkgmgrinfo_create_pkgdbinfo(pkgid, &handle);
-       if (ret != PMINFO_R_OK)
-               return -1;
-       ret = pkgmgrinfo_set_install_location_to_pkgdbinfo(handle, INSTALL_INTERNAL);
-       if (ret != PMINFO_R_OK) {
-               pkgmgrinfo_destroy_pkgdbinfo(handle);
-               return -1;
-       }
-       ret = pkgmgrinfo_save_pkgdbinfo(handle);
-       if (ret != PMINFO_R_OK) {
-               pkgmgrinfo_destroy_pkgdbinfo(handle);
-               return -1;
-       }
-       pkgmgrinfo_destroy_pkgdbinfo(handle);
-       return 0;
-}
- * @endcode
- */
-int pkgmgrinfo_set_install_location_to_pkgdbinfo(pkgmgrinfo_pkgdbinfo_h handle, INSTALL_LOCATION location);
-
-/**
- * @fn int pkgmgrinfo_set_size_to_pkgdbinfo(pkgmgrinfo_pkgdbinfo_h handle, const char *size)
- * @brief      This API sets the package size in db handle
- *
- * @par                This API is for package-manager client application
- * @par Sync (or) Async : Synchronous API
- *
- * @param[in] handle   pointer to the pkgdbinfo handle.
- * @param[in] size             pointer to the package size
- * @return     0 if success, error code(<0) if fail
- * @retval     PMINFO_R_OK     success
- * @retval     PMINFO_R_EINVAL invalid argument
- * @retval     PMINFO_R_ERROR  internal error
- * @pre                pkgmgrinfo_create_pkgdbinfo()
- * @post               pkgmgrinfo_destroy_pkgdbinfo()
- * @see                pkgmgrinfo_save_pkgdbinfo()
- * @see                pkgmgrinfo_set_type_to_pkgdbinfo()
- * @code
-static int set_pkg_size_in_db(const char *pkgid)
-{
-       int ret = 0;
-       pkgmgrinfo_pkgdbinfo_h handle;
-       ret = pkgmgrinfo_create_pkgdbinfo(pkgid, &handle);
-       if (ret != PMINFO_R_OK)
-               return -1;
-       ret = pkgmgrinfo_set_size_to_pkgdbinfo(handle, "15");
-       if (ret != PMINFO_R_OK) {
-               pkgmgrinfo_destroy_pkgdbinfo(handle);
-               return -1;
-       }
-       ret = pkgmgrinfo_save_pkgdbinfo(handle);
-       if (ret != PMINFO_R_OK) {
-               pkgmgrinfo_destroy_pkgdbinfo(handle);
-               return -1;
-       }
-       pkgmgrinfo_destroy_pkgdbinfo(handle);
-       return 0;
-}
- * @endcode
- */
-int pkgmgrinfo_set_size_to_pkgdbinfo(pkgmgrinfo_pkgdbinfo_h handle, const char *size);
-
-/**
- * @fn int pkgmgrinfo_set_label_to_pkgdbinfo(pkgmgrinfo_pkgdbinfo_h handle, const char *label, const char *locale)
- * @brief      This API sets the package label in db handle
- *
- * @par                This API is for package-manager client application
- * @par Sync (or) Async : Synchronous API
- *
- * @param[in] handle   pointer to the pkgdbinfo handle.
- * @param[in] label            pointer to the package label
- * @param[in] locale   pointer to the locale
- * @return     0 if success, error code(<0) if fail
- * @retval     PMINFO_R_OK     success
- * @retval     PMINFO_R_EINVAL invalid argument
- * @retval     PMINFO_R_ERROR  internal error
- * @pre                pkgmgrinfo_create_pkgdbinfo()
- * @post               pkgmgrinfo_destroy_pkgdbinfo()
- * @see                pkgmgrinfo_save_pkgdbinfo()
- * @see                pkgmgrinfo_set_type_to_pkgdbinfo()
- * @code
-static int set_pkg_label_in_db(const char *pkgid)
-{
-       int ret = 0;
-       pkgmgrinfo_pkgdbinfo_h handle;
-       ret = pkgmgrinfo_create_pkgdbinfo(pkgid, &handle);
-       if (ret != PMINFO_R_OK)
-               return -1;
-       ret = pkgmgrinfo_set_label_to_pkgdbinfo(handle, "helloworld", "en-us");
-       if (ret != PMINFO_R_OK) {
-               pkgmgrinfo_destroy_pkgdbinfo(handle);
-               return -1;
-       }
-       ret = pkgmgrinfo_save_pkgdbinfo(handle);
-       if (ret != PMINFO_R_OK) {
-               pkgmgrinfo_destroy_pkgdbinfo(handle);
-               return -1;
-       }
-       pkgmgrinfo_destroy_pkgdbinfo(handle);
-       return 0;
-}
- * @endcode
- */
-int pkgmgrinfo_set_label_to_pkgdbinfo(pkgmgrinfo_pkgdbinfo_h handle, const char *label, const char *locale);
-
-/**
- * @fn int pkgmgrinfo_set_icon_to_pkgdbinfo(pkgmgrinfo_pkgdbinfo_h handle, const char *icon, const char *locale)
- * @brief      This API sets the package icon in db handle
- *
- * @par                This API is for package-manager client application
- * @par Sync (or) Async : Synchronous API
- *
- * @param[in] handle   pointer to the pkgdbinfo handle.
- * @param[in] icon             pointer to the package icon
- * @param[in] locale   pointer to the locale
- * @return     0 if success, error code(<0) if fail
- * @retval     PMINFO_R_OK     success
- * @retval     PMINFO_R_EINVAL invalid argument
- * @retval     PMINFO_R_ERROR  internal error
- * @pre                pkgmgrinfo_create_pkgdbinfo()
- * @post               pkgmgrinfo_destroy_pkgdbinfo()
- * @see                pkgmgrinfo_save_pkgdbinfo()
- * @see                pkgmgrinfo_set_type_to_pkgdbinfo()
- * @code
-static int set_pkg_icon_in_db(const char *pkgid)
-{
-       int ret = 0;
-       pkgmgrinfo_pkgdbinfo_h handle;
-       ret = pkgmgrinfo_create_pkgdbinfo(pkgid, &handle);
-       if (ret != PMINFO_R_OK)
-               return -1;
-       ret = pkgmgrinfo_set_icon_to_pkgdbinfo(handle, "helloworld.png", "en-us");
-       if (ret != PMINFO_R_OK) {
-               pkgmgrinfo_destroy_pkgdbinfo(handle);
-               return -1;
-       }
-       ret = pkgmgrinfo_save_pkgdbinfo(handle);
-       if (ret != PMINFO_R_OK) {
-               pkgmgrinfo_destroy_pkgdbinfo(handle);
-               return -1;
-       }
-       pkgmgrinfo_destroy_pkgdbinfo(handle);
-       return 0;
-}
- * @endcode
- */
-int pkgmgrinfo_set_icon_to_pkgdbinfo(pkgmgrinfo_pkgdbinfo_h handle, const char *icon, const char *locale);
-
-/**
- * @fn int pkgmgrinfo_set_description_to_pkgdbinfo(pkgmgrinfo_pkgdbinfo_h handle, const char *description, const char *locale)
- * @brief      This API sets the package description in db handle
- *
- * @par                This API is for package-manager client application
- * @par Sync (or) Async : Synchronous API
- *
- * @param[in] handle   pointer to the pkgdbinfo handle.
- * @param[in] description              pointer to the package description
- * @param[in] locale   pointer to the locale
- * @return     0 if success, error code(<0) if fail
- * @retval     PMINFO_R_OK     success
- * @retval     PMINFO_R_EINVAL invalid argument
- * @retval     PMINFO_R_ERROR  internal error
- * @pre                pkgmgrinfo_create_pkgdbinfo()
- * @post               pkgmgrinfo_destroy_pkgdbinfo()
- * @see                pkgmgrinfo_save_pkgdbinfo()
- * @see                pkgmgrinfo_set_type_to_pkgdbinfo()
- * @code
-static int set_pkg_description_in_db(const char *pkgid)
-{
-       int ret = 0;
-       pkgmgrinfo_pkgdbinfo_h handle;
-       ret = pkgmgrinfo_create_pkgdbinfo(pkgid, &handle);
-       if (ret != PMINFO_R_OK)
-               return -1;
-       ret = pkgmgrinfo_set_description_to_pkgdbinfo(handle, "helloworld application", "en-us");
-       if (ret != PMINFO_R_OK) {
-               pkgmgrinfo_destroy_pkgdbinfo(handle);
-               return -1;
-       }
-       ret = pkgmgrinfo_save_pkgdbinfo(handle);
-       if (ret != PMINFO_R_OK) {
-               pkgmgrinfo_destroy_pkgdbinfo(handle);
-               return -1;
-       }
-       pkgmgrinfo_destroy_pkgdbinfo(handle);
-       return 0;
-}
- * @endcode
- */
-int pkgmgrinfo_set_description_to_pkgdbinfo(pkgmgrinfo_pkgdbinfo_h handle, const char *description, const char *locale);
-
-/**
- * @fn int pkgmgrinfo_set_author_to_pkgdbinfo(pkgmgrinfo_pkgdbinfo_h handle, const char *author_name,
- const char *author_email, const char *author_href, const char *locale)
- * @brief      This API sets the package author info in db handle
- *
- * @par                This API is for package-manager client application
- * @par Sync (or) Async : Synchronous API
- *
- * @param[in] handle   pointer to the pkgdbinfo handle.
- * @param[in] author_name              pointer to the package author name
- * @param[in] author_email             pointer to the package author email
- * @param[in] author_href              pointer to the package author href
- * @param[in] locale   pointer to the locale
- * @return     0 if success, error code(<0) if fail
- * @retval     PMINFO_R_OK     success
- * @retval     PMINFO_R_EINVAL invalid argument
- * @retval     PMINFO_R_ERROR  internal error
- * @pre                pkgmgrinfo_create_pkgdbinfo()
- * @post               pkgmgrinfo_destroy_pkgdbinfo()
- * @see                pkgmgrinfo_save_pkgdbinfo()
- * @see                pkgmgrinfo_set_type_to_pkgdbinfo()
- * @code
-static int set_pkg_author_in_db(const char *pkgid)
-{
-       int ret = 0;
-       pkgmgrinfo_pkgdbinfo_h handle;
-       ret = pkgmgrinfo_create_pkgdbinfo(pkgid, &handle);
-       if (ret != PMINFO_R_OK)
-               return -1;
-       ret = pkgmgrinfo_set_author_to_pkgdbinfo(handle, "John", "john@samsung.com", "www.samsung.com", "en-us");
-       if (ret != PMINFO_R_OK) {
-               pkgmgrinfo_destroy_pkgdbinfo(handle);
-               return -1;
-       }
-       ret = pkgmgrinfo_save_pkgdbinfo(handle);
-       if (ret != PMINFO_R_OK) {
-               pkgmgrinfo_destroy_pkgdbinfo(handle);
-               return -1;
-       }
-       pkgmgrinfo_destroy_pkgdbinfo(handle);
-       return 0;
-}
- * @endcode
- */
-int pkgmgrinfo_set_author_to_pkgdbinfo(pkgmgrinfo_pkgdbinfo_h handle, const char *author_name,
-                       const char *author_email, const char *author_href, const char *locale);
-
-/**
- * @fn int pkgmgrinfo_set_removable_to_pkgdbinfo(pkgmgrinfo_pkgdbinfo_h handle, int removable)
- * @brief      This API sets the package 'removable' value in db handle
- *
- * @par                This API is for package-manager client application
- * @par Sync (or) Async : Synchronous API
- *
- * @param[in] handle   pointer to the pkgdbinfo handle.
- * @param[in] removable                package removable value
- * @return     0 if success, error code(<0) if fail
- * @retval     PMINFO_R_OK     success
- * @retval     PMINFO_R_EINVAL invalid argument
- * @retval     PMINFO_R_ERROR  internal error
- * @pre                pkgmgrinfo_create_pkgdbinfo()
- * @post               pkgmgrinfo_destroy_pkgdbinfo()
- * @see                pkgmgrinfo_save_pkgdbinfo()
- * @see                pkgmgrinfo_set_type_to_pkgdbinfo()
- * @code
-static int set_pkg_removable_in_db(const char *pkgid)
-{
-       int ret = 0;
-       pkgmgrinfo_pkgdbinfo_h handle;
-       ret = pkgmgrinfo_create_pkgdbinfo(pkgid, &handle);
-       if (ret != PMINFO_R_OK)
-               return -1;
-       ret = pkgmgrinfo_set_removable_to_pkgdbinfo(handle, 1);
-       if (ret != PMINFO_R_OK) {
-               pkgmgrinfo_destroy_pkgdbinfo(handle);
-               return -1;
-       }
-       ret = pkgmgrinfo_save_pkgdbinfo(handle);
-       if (ret != PMINFO_R_OK) {
-               pkgmgrinfo_destroy_pkgdbinfo(handle);
-               return -1;
-       }
-       pkgmgrinfo_destroy_pkgdbinfo(handle);
-       return 0;
-}
- * @endcode
- */
-int pkgmgrinfo_set_removable_to_pkgdbinfo(pkgmgrinfo_pkgdbinfo_h handle, int removable);
-
-/**
- * @fn int pkgmgrinfo_set_preload_to_pkgdbinfo(pkgmgrinfo_pkgdbinfo_h handle, int preload)
- * @brief      This API sets the package 'preload' value in db handle
- *
- * @par                This API is for package-manager client application
- * @par Sync (or) Async : Synchronous API
- *
- * @param[in] handle   pointer to the pkgdbinfo handle.
- * @param[in] preload          package preload value
- * @return     0 if success, error code(<0) if fail
- * @retval     PMINFO_R_OK     success
- * @retval     PMINFO_R_EINVAL invalid argument
- * @retval     PMINFO_R_ERROR  internal error
- * @pre                pkgmgrinfo_create_pkgdbinfo()
- * @post               pkgmgrinfo_destroy_pkgdbinfo()
- * @see                pkgmgrinfo_save_pkgdbinfo()
- * @see                pkgmgrinfo_set_type_to_pkgdbinfo()
- * @code
-static int set_pkg_preload_in_db(const char *pkgid)
-{
-       int ret = 0;
-       pkgmgrinfo_pkgdbinfo_h handle;
-       ret = pkgmgrinfo_create_pkgdbinfo(pkgid, &handle);
-       if (ret != PMINFO_R_OK)
-               return -1;
-       ret = pkgmgrinfo_set_preload_to_pkgdbinfo(handle, 1);
-       if (ret != PMINFO_R_OK) {
-               pkgmgrinfo_destroy_pkgdbinfo(handle);
-               return -1;
-       }
-       ret = pkgmgrinfo_save_pkgdbinfo(handle);
-       if (ret != PMINFO_R_OK) {
-               pkgmgrinfo_destroy_pkgdbinfo(handle);
-               return -1;
-       }
-       pkgmgrinfo_destroy_pkgdbinfo(handle);
-       return 0;
-}
- * @endcode
- */
-int pkgmgrinfo_set_preload_to_pkgdbinfo(pkgmgrinfo_pkgdbinfo_h handle, int preload);
-
-/**
- * @fn int pkgmgrinfo_set_installed_storage_to_pkgdbinfo(pkgmgrinfo_pkgdbinfo_h handle, INSTALL_LOCATION location)
- * @brief      This API sets the package 'installed_storage' value in db handle
- *
- * @par                This API is for package-manager client application
- * @par Sync (or) Async : Synchronous API
- *
- * @param[in] handle   pointer to the pkgdbinfo handle.
- * @param[in] location         installed_storage value
- * @return     0 if success, error code(<0) if fail
- * @retval     PMINFO_R_OK     success
- * @retval     PMINFO_R_EINVAL invalid argument
- * @retval     PMINFO_R_ERROR  internal error
- * @pre                pkgmgrinfo_create_pkgdbinfo()
- * @post               pkgmgrinfo_destroy_pkgdbinfo()
- * @see                pkgmgrinfo_save_pkgdbinfo()
- * @code
-static int set_pkg_installed_storage_in_db(const char *pkgid)
-{
-       int ret = 0;
-       pkgmgrinfo_pkgdbinfo_h handle;
-       ret = pkgmgrinfo_create_pkgdbinfo(pkgid, &handle);
-       if (ret != PMINFO_R_OK)
-               return -1;
-       ret = pkgmgrinfo_set_installed_storage_to_pkgdbinfo(handle, INSTALL_INTERNAL);
-       if (ret != PMINFO_R_OK) {
-               pkgmgrinfo_destroy_pkgdbinfo(handle);
-               return -1;
-       }
-       ret = pkgmgrinfo_save_pkgdbinfo(handle);
-       if (ret != PMINFO_R_OK) {
-               pkgmgrinfo_destroy_pkgdbinfo(handle);
-               return -1;
-       }
-       pkgmgrinfo_destroy_pkgdbinfo(handle);
-       return 0;
-}
- * @endcode
- */
-int pkgmgrinfo_set_installed_storage_to_pkgdbinfo(pkgmgrinfo_pkgdbinfo_h handle, INSTALL_LOCATION location);
-
-/**
- * @fn int pkgmgrinfo_save_pkgdbinfo(pkgmgrinfo_pkgdbinfo_h handle)
- * @brief      This API saves all the information from the handle to the DB.
- *
- * @par                This API is for package-manager client application
- * @par Sync (or) Async : Synchronous API
- *
- * @param[in] handle           pointer to the package db info handle.
- * @return     0 if success, error code(<0) if fail
- * @retval     PMINFO_R_OK     success
- * @retval     PMINFO_R_EINVAL invalid argument
- * @retval     PMINFO_R_ERROR  internal error
- * @pre                pkgmgrinfo_create_pkgdbinfo()
- * @post               pkgmgrinfo_destroy_pkgdbinfo()
- * @see                pkgmgrinfo_set_type_to_pkgdbinfo()
- * @code
-static int set_pkg_in_db(const char *pkgid)
-{
-       int ret = 0;
-       pkgmgrinfo_pkgdbinfo_h handle;
-       ret = pkgmgrinfo_create_pkgdbinfo(pkgid, &handle);
-       if (ret != PMINFO_R_OK)
-               return -1;
-       ret = pkgmgrinfo_set_version_to_pkgdbinfo(handle, "0.0.1");
-       if (ret != PMINFO_R_OK) {
-               pkgmgrinfo_destroy_pkgdbinfo(handle);
-               return -1;
-       }
-       ret = pkgmgrinfo_save_pkgdbinfo(handle);
-       if (ret != PMINFO_R_OK) {
-               pkgmgrinfo_destroy_pkgdbinfo(handle);
-               return -1;
-       }
-       pkgmgrinfo_destroy_pkgdbinfo(handle);
-       return 0;
-}
- * @endcode
- */
-int pkgmgrinfo_save_pkgdbinfo(pkgmgrinfo_pkgdbinfo_h handle);
-
-/**
- * @fn int pkgmgrinfo_destroy_pkgdbinfo(pkgmgrinfo_pkgdbinfo_h handle)
- * @brief      This API destroys the package db information handle freeing up all the resources
- *
- * @par                This API is for package-manager client application
- * @par Sync (or) Async : Synchronous API
- *
- * @param[in] handle           pointer to the package db info handle.
- * @return     0 if success, error code(<0) if fail
- * @retval     PMINFO_R_OK     success
- * @retval     PMINFO_R_EINVAL invalid argument
- * @retval     PMINFO_R_ERROR  internal error
- * @pre                pkgmgrinfo_create_pkgdbinfo()
- * @post               None
- * @see                pkgmgrinfo_save_pkgdbinfo()
- * @see                pkgmgrinfo_set_type_to_pkgdbinfo()
- * @code
-static int set_pkg_in_db(const char *pkgid)
-{
-       int ret = 0;
-       pkgmgrinfo_pkgdbinfo_h handle;
-       ret = pkgmgrinfo_create_pkgdbinfo(pkgid, &handle);
-       if (ret != PMINFO_R_OK)
-               return -1;
-       ret = pkgmgrinfo_set_version_to_pkgdbinfo(handle, "0.0.1");
-       if (ret != PMINFO_R_OK) {
-               pkgmgrinfo_destroy_pkgdbinfo(handle);
-               return -1;
-       }
-       ret = pkgmgrinfo_save_pkgdbinfo(handle);
-       if (ret != PMINFO_R_OK) {
-               pkgmgrinfo_destroy_pkgdbinfo(handle);
-               return -1;
-       }
-       pkgmgrinfo_destroy_pkgdbinfo(handle);
-       return 0;
-}
- * @endcode
- */
-int pkgmgrinfo_destroy_pkgdbinfo(pkgmgrinfo_pkgdbinfo_h handle);
-
-
-/**
- * @fn int pkgmgrinfo_create_certinfo_set_handle(pkgmgrinfo_instcertinfo_h *handle)
- * @brief      This API creates the package cert information handle to set data in db.
- *
- * @par                This API is for package-manager client application
- * @par Sync (or) Async : Synchronous API
- *
- * @param[out] handle          pointer to the package cert handle.
- * @return     0 if success, error code(<0) if fail
- * @retval     PMINFO_R_OK     success
- * @retval     PMINFO_R_EINVAL invalid argument
- * @retval     PMINFO_R_ERROR  internal error
- * @pre                None
- * @post               pkgmgrinfo_destroy_certinfo_set_handle()
- * @see                pkgmgrinfo_set_cert_value()
- * @see                pkgmgrinfo_save_certinfo()
- * @code
-static int set_cert_in_db(const char *pkgid)
-{
-       int ret = 0;
-       pkgmgrinfo_instcertinfo_h handle;
-       ret = pkgmgrinfo_create_certinfo_set_handle(&handle);
-       if (ret != PMINFO_R_OK)
-               return -1;
-       ret = pkgmgrinfo_set_cert_value(handle, PMINFO_SET_AUTHOR_ROOT_CERT, "author root certificate");
-       if (ret != PMINFO_R_OK) {
-               pkgmgrinfo_destroy_certinfo_set_handle(handle);
-               return -1;
-       }
-       ret = pkgmgrinfo_save_pkgdbinfo(pkgid, handle);
-       if (ret != PMINFO_R_OK) {
-               pkgmgrinfo_destroy_certinfo_set_handle(handle);
-               return -1;
-       }
-       pkgmgrinfo_destroy_certinfo_set_handle(handle);
-       return 0;
-}
- * @endcode
- */
-int pkgmgrinfo_create_certinfo_set_handle(pkgmgrinfo_instcertinfo_h *handle);
+int pkgmgrinfo_create_certinfo_set_handle(pkgmgrinfo_instcertinfo_h *handle);
 
 /**
  * @fn int pkgmgrinfo_set_cert_value(pkgmgrinfo_instcertinfo_h handle, pkgmgrinfo_instcert_type cert_type, char *cert_value)
@@ -5874,23 +5566,36 @@ static int set_cert_in_db(const char *pkgid)
 int pkgmgrinfo_destroy_certinfo_set_handle(pkgmgrinfo_instcertinfo_h handle);
 
 /**
- * @fn int pkgmgrinfo_datacontrol_get_info(const char *providerid, const char * type, char **appid, char **access)
- * @brief      This API gets the datacontrol info
+ * @fn int pkgmgrinfo_pkginfo_set_preload(const char *pkgid, int preload)
+ * @brief      This API sets the package 'preload' value in db
  *
  * @par                This API is for package-manager client application
  * @par Sync (or) Async : Synchronous API
  *
- * @param[in] providerid               pointer to the providerid of dataconltrol.
- * @param[in] type                     pointer to the type of dataconltrol.
- * @param[out] appid                   pointer to hold appid, need to free after using
- * @param[out] access                  pointer to hold access, need to free after using
+ * @param[in] pkgid                    pointer to the package ID.
+ * @param[in] preload          package preload value
+ * @return     0 if success, error code(<0) if fail
+ * @retval     PMINFO_R_OK     success
+ * @retval     PMINFO_R_EINVAL invalid argument
+ * @retval     PMINFO_R_ERROR  internal error
+ */
+int pkgmgrinfo_pkginfo_set_preload(const char *pkgid, int preload);
+
+/**
+ * @fn int pkgmgrinfo_pkginfo_set_installed_storage(const char *pkgid, INSTALL_LOCATION location)
+ * @brief      This API sets the package 'installed_storage' value in db
+ *
+ * @par                This API is for package-manager client application
+ * @par Sync (or) Async : Synchronous API
+ *
+ * @param[in] pkgid            pointer to the package ID.
+ * @param[in] location package install location
  * @return     0 if success, error code(<0) if fail
  * @retval     PMINFO_R_OK     success
  * @retval     PMINFO_R_EINVAL invalid argument
  * @retval     PMINFO_R_ERROR  internal error
- * @endcode
  */
-int pkgmgrinfo_datacontrol_get_info(const char *providerid, const char * type, char **appid, char **access);
+int pkgmgrinfo_pkginfo_set_installed_storage(const char *pkgid, INSTALL_LOCATION location);
 
 /**
  * @pkgmgrinfo client API
@@ -5908,20 +5613,6 @@ int pkgmgrinfo_datacontrol_get_info(const char *providerid, const char * type, c
 #define PMINFO_CLIENT_STATUS_INSTALL_PROGRESS                  0x20
 
 /**
- * @brief type definition.
- */
-typedef void pkgmgrinfo_client;
-typedef int (*pkgmgrinfo_handler)(int req_id, const char *pkg_type,
-                               const char *pkgid, const char *key,
-                               const char *val, const void *pmsg, void *data);
-
-typedef enum {
-       PMINFO_REQUEST = 0,
-       PMINFO_LISTENING,
-       PMINFO_BROADCAST,
-}pkgmgrinfo_client_type;
-
-/**
  * @brief      This APIs provides pkgmgrinfo client listener
  */
 pkgmgrinfo_client *pkgmgrinfo_client_new(pkgmgrinfo_client_type ctype);
diff --git a/include/pkgmgrinfo_basic.h b/include/pkgmgrinfo_basic.h
new file mode 100644 (file)
index 0000000..92925e0
--- /dev/null
@@ -0,0 +1,503 @@
+/*
+ * pkgmgrinfo-basic
+ *
+ * Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved.
+ *
+ * Contact: Jayoun Lee <airjany@samsung.com>, Sewook Park <sewook7.park@samsung.com>,
+ * Jaeho Lee <jaeho81.lee@samsung.com>, Shobhit Srivastava <shobhit.s@samsung.com>
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+
+#ifndef __PKGMGRINFO_BASIC_H__
+#define __PKGMGRINFO_BASIC_H__
+
+#define DEFAULT_LOCALE         "No Locale"
+#define PKG_STRING_LEN_MAX 1024
+#define PKGMGR_PARSER_EMPTY_STR                ""
+
+typedef struct metadata_x {
+       const char *key;
+       const char *value;
+       struct metadata_x *prev;
+       struct metadata_x *next;
+} metadata_x;
+
+typedef struct privilege_x {
+       const char *text;
+       struct privilege_x *prev;
+       struct privilege_x *next;
+} privilege_x;
+
+typedef struct privileges_x {
+       struct privilege_x *privilege;
+       struct privileges_x *prev;
+       struct privileges_x *next;
+} privileges_x;
+
+typedef struct permission_x {
+       const char *type;
+       const char *value;
+       struct permission_x *prev;
+       struct permission_x *next;
+} permission_x;
+
+typedef struct icon_x {
+       const char *name;
+       const char *text;
+       const char *lang;
+       const char *section;
+       const char *size;
+       const char *resolution;
+       struct icon_x *prev;
+       struct icon_x *next;
+} icon_x;
+
+typedef struct image_x {
+       const char *name;
+       const char *text;
+       const char *lang;
+       const char *section;
+       struct image_x *prev;
+       struct image_x *next;
+} image_x;
+
+typedef struct allowed_x {
+       const char *name;
+       const char *text;
+       struct allowed_x *prev;
+       struct allowed_x *next;
+} allowed_x;
+
+typedef struct request_x {
+       const char *text;
+       struct request_x *prev;
+       struct request_x *next;
+} request_x;
+
+typedef struct define_x {
+       const char *path;
+       struct allowed_x *allowed;
+       struct request_x *request;
+       struct define_x *prev;
+       struct define_x *next;
+} define_x;
+
+typedef struct datashare_x {
+       struct define_x *define;
+       struct request_x *request;
+       struct datashare_x *prev;
+       struct datashare_x *next;
+} datashare_x;
+
+typedef struct description_x {
+       const char *name;
+       const char *text;
+       const char *lang;
+       struct description_x *prev;
+       struct description_x *next;
+} description_x;
+
+typedef struct registry_x {
+       const char *name;
+       const char *text;
+       struct registry_x *prev;
+       struct registry_x *next;
+} registry_x;
+
+typedef struct database_x {
+       const char *name;
+       const char *text;
+       struct database_x *prev;
+       struct database_x *next;
+} database_x;
+
+typedef struct layout_x {
+       const char *name;
+       const char *text;
+       struct layout_x *prev;
+       struct layout_x *next;
+} layout_x;
+
+typedef struct label_x {
+       const char *name;
+       const char *text;
+       const char *lang;
+       struct label_x *prev;
+       struct label_x *next;
+} label_x;
+
+typedef struct author_x {
+       const char *email;
+       const char *href;
+       const char *text;
+       const char *lang;
+       struct author_x *prev;
+       struct author_x *next;
+} author_x;
+
+typedef struct license_x {
+       const char *text;
+       const char *lang;
+       struct license_x *prev;
+       struct license_x *next;
+} license_x;
+
+typedef struct operation_x {
+       const char *name;
+       const char *text;
+       struct operation_x *prev;
+       struct operation_x *next;
+} operation_x;
+
+typedef struct uri_x {
+       const char *name;
+       const char *text;
+       struct uri_x *prev;
+       struct uri_x *next;
+} uri_x;
+
+typedef struct mime_x {
+       const char *name;
+       const char *text;
+       struct mime_x *prev;
+       struct mime_x *next;
+} mime_x;
+
+typedef struct subapp_x {
+       const char *name;
+       const char *text;
+       struct subapp_x *prev;
+       struct subapp_x *next;
+} subapp_x;
+
+typedef struct condition_x {
+       const char *name;
+       const char *text;
+       struct condition_x *prev;
+       struct condition_x *next;
+} condition_x;
+
+typedef struct notification_x {
+       const char *name;
+       const char *text;
+       struct notification_x *prev;
+       struct notification_x *next;
+} notification_x;
+
+typedef struct appsvc_x {
+       const char *text;
+       struct operation_x *operation;
+       struct uri_x *uri;
+       struct mime_x *mime;
+       struct subapp_x *subapp;
+       struct appsvc_x *prev;
+       struct appsvc_x *next;
+} appsvc_x;
+
+typedef struct category_x{
+       const char *name;
+       struct category_x *prev;
+       struct category_x *next;
+} category_x;
+
+typedef struct launchconditions_x {
+       const char *text;
+       struct condition_x *condition;
+       struct launchconditions_x *prev;
+       struct launchconditions_x *next;
+} launchconditions_x;
+
+typedef struct compatibility_x {
+       const char *name;
+       const char *text;
+       struct compatibility_x *prev;
+       struct compatibility_x *next;
+}compatibility_x;
+
+typedef struct deviceprofile_x {
+       const char *name;
+       const char *text;
+       struct deviceprofile_x *prev;
+       struct deviceprofile_x *next;
+}deviceprofile_x;
+
+typedef struct resolution_x {
+       const char *mimetype;
+       const char *urischeme;
+       struct resolution_x *prev;
+       struct resolution_x *next;
+} resolution_x;
+
+typedef struct capability_x {
+       const char *operationid;
+       const char *access;
+       struct resolution_x *resolution;
+       struct capability_x *prev;
+       struct capability_x *next;
+} capability_x;
+
+typedef struct datacontrol_x {
+       const char *providerid;
+       const char *access;
+       const char *type;
+       struct datacontrol_x *prev;
+       struct datacontrol_x *next;
+} datacontrol_x;
+
+typedef struct uiapplication_x {
+       const char *appid;
+       const char *exec;
+       const char *nodisplay;
+       const char *multiple;
+       const char *taskmanage;
+       const char *enabled;
+       const char *type;
+       const char *categories;
+       const char *extraid;
+       const char *hwacceleration;
+       const char *screenreader;
+       const char *mainapp;
+       const char *package;
+       const char *recentimage;
+       const char *launchcondition;
+       const char *indicatordisplay;
+       const char *portraitimg;
+       const char *landscapeimg;
+       const char *effectimage_type;
+       const char *guestmode_visibility;
+       const char *app_component;
+       const char *permission_type;
+       const char *component_type;
+       const char *preload;
+       const char *submode;
+       const char *submode_mainid;
+       const char *installed_storage;
+       const char *process_pool;
+       const char *autorestart;
+       const char *onboot;
+       const char *multi_instance;
+       const char *multi_instance_mainid;
+       const char *multi_window;
+       const char *support_disable;
+       const char *ui_gadget;
+       const char *removable;
+       const char *support_mode;
+       const char *support_feature;
+       const char *satui_label;
+       const char *package_type;
+       const char *package_system;
+       const char *package_installed_time;
+       struct label_x *label;
+       struct icon_x *icon;
+       struct image_x *image;
+       struct appsvc_x *appsvc;
+       struct category_x *category;
+       struct metadata_x *metadata;
+       struct permission_x *permission;
+       struct launchconditions_x *launchconditions;
+       struct notification_x *notification;
+       struct datashare_x *datashare;
+       struct datacontrol_x *datacontrol;
+       struct uiapplication_x *prev;
+       struct uiapplication_x *next;
+} uiapplication_x;
+
+typedef struct serviceapplication_x {
+       const char *appid;
+       const char *exec;
+       const char *onboot;
+       const char *autorestart;
+       const char *enabled;
+       const char *type;
+       const char *package;
+       const char *permission_type;
+       struct label_x *label;
+       struct icon_x *icon;
+       struct appsvc_x *appsvc;
+       struct category_x *category;
+       struct metadata_x *metadata;
+       struct permission_x *permission;
+       struct datacontrol_x *datacontrol;
+       struct launchconditions_x *launchconditions;
+       struct notification_x *notification;
+       struct datashare_x *datashare;
+       struct serviceapplication_x *prev;
+       struct serviceapplication_x *next;
+} serviceapplication_x;
+
+typedef struct daemon_x {
+       const char *name;
+       const char *text;
+       struct daemon_x *prev;
+       struct daemon_x *next;
+} daemon_x;
+
+typedef struct theme_x {
+       const char *name;
+       const char *text;
+       struct theme_x *prev;
+       struct theme_x *next;
+} theme_x;
+
+typedef struct font_x {
+       const char *name;
+       const char *text;
+       struct font_x *prev;
+       struct font_x *next;
+} font_x;
+
+typedef struct ime_x {
+       const char *name;
+       const char *text;
+       struct ime_x *prev;
+       struct ime_x *next;
+} ime_x;
+
+typedef struct manifest_x {
+       const char *package;            /**< package name*/
+       const char *version;            /**< package version*/
+       const char *installlocation;            /**< package install location*/
+       const char *ns;         /**<name space*/
+       const char *removable;          /**< package removable flag*/
+       const char *preload;            /**< package preload flag*/
+       const char *readonly;           /**< package readonly flag*/
+       const char *update;                     /**< package update flag*/
+       const char *appsetting;         /**< package app setting flag*/
+       const char *system;             /**< package system flag*/
+       const char *type;               /**< package type*/
+       const char *package_size;               /**< package size for external installation*/
+       const char *package_total_size;         /**< package size for total*/
+       const char *package_data_size;          /**< package size for data*/
+       const char *installed_time;             /**< installed time after finishing of installation*/
+       const char *installed_storage;          /**< package currently installed storage*/
+       const char *storeclient_id;             /**< id of store client for installed package*/
+       const char *mainapp_id;         /**< app id of main application*/
+       const char *package_url;                /**< app id of main application*/
+       const char *root_path;          /**< package root path*/
+       const char *csc_path;           /**< package csc path*/
+       const char *nodisplay_setting;          /**< package no display setting menu*/
+       const char *support_disable;            /**< package support disable flag*/
+       const char *mother_package;             /**< package is mother package*/
+       const char *support_mode;               /**< package support mode*/
+       const char *support_reset;              /**< package support reset*/
+       const char *use_reset;          /**< package use reset*/
+       const char *groupid;            /**< package groupid*/
+       const char *hash;                       /**<manifest file's hash */
+       struct icon_x *icon;            /**< package icon*/
+       struct label_x *label;          /**< package label*/
+       struct author_x *author;                /**< package author*/
+       struct description_x *description;              /**< package description*/
+       struct license_x *license;              /**< package license*/
+       struct privileges_x *privileges;        /**< package privileges*/
+       struct uiapplication_x *uiapplication;          /**< package's ui application*/
+       struct serviceapplication_x *serviceapplication;                /**< package's service application*/
+       struct daemon_x *daemon;                /**< package daemon*/
+       struct theme_x *theme;          /**< package theme*/
+       struct font_x *font;            /**< package font*/
+       struct ime_x *ime;              /**< package ime*/
+       struct compatibility_x *compatibility;          /**< package compatibility*/
+       struct deviceprofile_x *deviceprofile;          /**< package device profile*/
+} manifest_x;
+
+/**
+ * @brief List definitions.
+ * All lists are doubly-linked, the last element is stored to list pointer,
+ * which means that lists must be looped using the prev pointer, or by
+ * calling LISTHEAD first to go to start in order to use the next pointer.
+ */
+
+ /**
+ * @brief Convinience Macro to add node in list
+ */
+
+#define LISTADD(list, node)                    \
+    do {                                       \
+       (node)->prev = (list);                  \
+       if (list) (node)->next = (list)->next;  \
+       else (node)->next = NULL;               \
+       if (list) (list)->next = (node);        \
+       (list) = (node);                        \
+    } while (0);
+
+ /**
+ * @brief Convinience Macro to add one node to another node
+ */
+#define NODEADD(node1, node2)                                  \
+    do {                                                       \
+       (node2)->prev = (node1);                                \
+       (node2)->next = (node1)->next;                          \
+       if ((node1)->next) (node1)->next->prev = (node2);       \
+       (node1)->next = (node2);                                \
+    } while (0);
+
+ /**
+ * @brief Convinience Macro to concatenate two lists
+ */
+#define LISTCAT(list, first, last)             \
+    if ((first) && (last)) {                   \
+       (first)->prev = (list);                 \
+       (list) = (last);                        \
+    }
+
+ /**
+ * @brief Convinience Macro to delete node from list
+ */
+#define LISTDEL(list, node)                                    \
+    do {                                                       \
+       if ((node)->prev) (node)->prev->next = (node)->next;    \
+       if ((node)->next) (node)->next->prev = (node)->prev;    \
+       if (!((node)->prev) && !((node)->next)) (list) = NULL;  \
+    } while (0);
+
+ /**
+ * @brief Convinience Macro to get list head
+ */
+#define LISTHEAD(list, node)                                   \
+    for ((node) = (list); (node)->prev; (node) = (node)->prev)
+
+#define SAFE_LISTHEAD(list, node)       do { \
+       if (list) { \
+               for ((node) = (list); (node)->prev; (node) = (node)->prev); \
+               list = node; \
+       } \
+} while (0)
+
+ /**
+ * @brief Convinience Macro to get list tail
+ */
+#define LISTTAIL(list, node)                                   \
+    for ((node) = (list); (node)->next; (node) = (node)->next)
+
+#define FREE_AND_STRDUP(from, to) do { \
+               if (to) free((void *)to); \
+               if (from) to = strdup(from); \
+       } while (0)
+
+ /**
+ * @brief Convinience Macro to free pointer
+ */
+#define FREE_AND_NULL(ptr) do { \
+               if (ptr) { \
+                       free((void *)ptr); \
+                       ptr = NULL; \
+               } \
+       } while (0)
+
+void _pkgmgrinfo_basic_free_manifest_x(manifest_x *mfx);
+
+char* pkgmgrinfo_basic_generate_hash_for_file(const char* file);
+
+#endif  /* __PKGMGRINFO_BASIC_H__ */
diff --git a/include/pkgmgrinfo_feature.h b/include/pkgmgrinfo_feature.h
new file mode 100755 (executable)
index 0000000..72661d0
--- /dev/null
@@ -0,0 +1,39 @@
+/*
+ * pkgmgrinfo_feature
+ *
+ * Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved.
+ *
+ * Contact: Jayoun Lee <airjany@samsung.com>, Sewook Park <sewook7.park@samsung.com>,
+ * Jaeho Lee <jaeho81.lee@samsung.com>, Shobhit Srivastava <shobhit.s@samsung.com>
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+#ifndef __PKGMGRINFO_FEATURE_H__
+#define __PKGMGRINFO_FEATURE_H__
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+int pkgmgrinfo_appinfo_get_disabled_list(pkgmgrinfo_pkginfo_h handle, pkgmgrinfo_app_component component,
+               pkgmgrinfo_app_list_cb app_func, void *user_data);
+int pkgmgrinfo_appinfo_get_disabled_appinfo(const char *appid, pkgmgrinfo_appinfo_h *handle);
+int pkgmgrinfo_pkginfo_get_disabled_list(pkgmgrinfo_pkg_list_cb pkg_list_cb, void *user_data);
+int pkgmgrinfo_pkginfo_get_disabled_pkginfo(const char *pkgid, pkgmgrinfo_pkginfo_h *handle);
+
+#ifdef __cplusplus
+}
+#endif
+#endif  /* __PKGPMGRINFO_FEATURE_H__ */
index faccc61..14856c1 100644 (file)
 #include <dirent.h>
 #include <sys/stat.h>
 
-#include "pkgmgr_parser.h"
-#include "pkgmgr-info-internal.h"
-#include "pkgmgr-info-debug.h"
+#include "pkgmgrinfo_basic.h"
+#include "pkgmgrinfo_debug.h"
 #include "pkgmgr-info.h"
 
+#ifndef DEPRECATED
+#define DEPRECATED     __attribute__ ((__deprecated__))
+#endif
+
+#ifndef API
+#define API __attribute__ ((visibility("default")))
+#endif
+
+#define MMC_PATH "/opt/storage/sdcard"
+#define PKG_SD_PATH MMC_PATH"/app2sd/"
+
+#define PKG_RW_PATH "/opt/usr/apps/"
+#define PKG_RO_PATH "/usr/apps/"
+#define BLOCK_SIZE      4096 /*in bytes*/
+
+#define PKG_TYPE_STRING_LEN_MAX                        128
+#define PKG_VERSION_STRING_LEN_MAX             128
+#define PKG_VALUE_STRING_LEN_MAX               512
+#define PKG_LOCALE_STRING_LEN_MAX              8
+
+#define MAX_QUERY_LEN  4096
+#define MAX_CERT_TYPE  9
+
+#define MANIFEST_DB            "/opt/dbspace/.pkgmgr_parser.db"
+#define CERT_DB                        "/opt/dbspace/.pkgmgr_cert.db"
+#define DATACONTROL_DB "/opt/usr/dbspace/.app-package.db"
+
+/*String properties for filtering based on package info*/
+typedef enum _pkgmgrinfo_pkginfo_filter_prop_str {
+       E_PMINFO_PKGINFO_PROP_PACKAGE_MIN_STR = 101,
+       E_PMINFO_PKGINFO_PROP_PACKAGE_ID = E_PMINFO_PKGINFO_PROP_PACKAGE_MIN_STR,
+       E_PMINFO_PKGINFO_PROP_PACKAGE_TYPE,
+       E_PMINFO_PKGINFO_PROP_PACKAGE_VERSION,
+       E_PMINFO_PKGINFO_PROP_PACKAGE_INSTALL_LOCATION,
+       E_PMINFO_PKGINFO_PROP_PACKAGE_INSTALLED_STORAGE,
+       E_PMINFO_PKGINFO_PROP_PACKAGE_AUTHOR_NAME,
+       E_PMINFO_PKGINFO_PROP_PACKAGE_AUTHOR_EMAIL,
+       E_PMINFO_PKGINFO_PROP_PACKAGE_AUTHOR_HREF,
+       E_PMINFO_PKGINFO_PROP_PACKAGE_STORECLIENT_ID,
+       E_PMINFO_PKGINFO_PROP_PACKAGE_MAX_STR = E_PMINFO_PKGINFO_PROP_PACKAGE_STORECLIENT_ID
+} pkgmgrinfo_pkginfo_filter_prop_str;
+
+/*Boolean properties for filtering based on package info*/
+typedef enum _pkgmgrinfo_pkginfo_filter_prop_bool {
+       E_PMINFO_PKGINFO_PROP_PACKAGE_MIN_BOOL = 201,
+       E_PMINFO_PKGINFO_PROP_PACKAGE_REMOVABLE = E_PMINFO_PKGINFO_PROP_PACKAGE_MIN_BOOL,
+       E_PMINFO_PKGINFO_PROP_PACKAGE_PRELOAD,
+       E_PMINFO_PKGINFO_PROP_PACKAGE_READONLY,
+       E_PMINFO_PKGINFO_PROP_PACKAGE_UPDATE,
+       E_PMINFO_PKGINFO_PROP_PACKAGE_APPSETTING,
+       E_PMINFO_PKGINFO_PROP_PACKAGE_NODISPLAY_SETTING,
+       E_PMINFO_PKGINFO_PROP_PACKAGE_SUPPORT_DISABLE,
+       E_PMINFO_PKGINFO_PROP_PACKAGE_DISABLE,
+       E_PMINFO_PKGINFO_PROP_PACKAGE_USE_RESET,
+       E_PMINFO_PKGINFO_PROP_PACKAGE_MAX_BOOL = E_PMINFO_PKGINFO_PROP_PACKAGE_USE_RESET
+} pkgmgrinfo_pkginfo_filter_prop_bool;
+
+/*Integer properties for filtering based on package info*/
+typedef enum _pkgmgrinfo_pkginfo_filter_prop_int {
+       E_PMINFO_PKGINFO_PROP_PACKAGE_MIN_INT = 301,
+       E_PMINFO_PKGINFO_PROP_PACKAGE_SIZE = E_PMINFO_PKGINFO_PROP_PACKAGE_MIN_INT,
+       E_PMINFO_PKGINFO_PROP_PACKAGE_SUPPORT_MODE,
+       E_PMINFO_PKGINFO_PROP_PACKAGE_MAX_INT = E_PMINFO_PKGINFO_PROP_PACKAGE_SUPPORT_MODE
+} pkgmgrinfo_pkginfo_filter_prop_int;
+
+/*String properties for filtering based on app info*/
+typedef enum _pkgmgrinfo_appinfo_filter_prop_str {
+       E_PMINFO_APPINFO_PROP_APP_MIN_STR = 401,
+       E_PMINFO_APPINFO_PROP_APP_ID = E_PMINFO_APPINFO_PROP_APP_MIN_STR,
+       E_PMINFO_APPINFO_PROP_APP_COMPONENT,
+       E_PMINFO_APPINFO_PROP_APP_EXEC,
+       E_PMINFO_APPINFO_PROP_APP_ICON,
+       E_PMINFO_APPINFO_PROP_APP_TYPE,
+       E_PMINFO_APPINFO_PROP_APP_OPERATION,
+       E_PMINFO_APPINFO_PROP_APP_URI,
+       E_PMINFO_APPINFO_PROP_APP_MIME,
+       E_PMINFO_APPINFO_PROP_APP_HWACCELERATION,
+       E_PMINFO_APPINFO_PROP_APP_CATEGORY,
+       E_PMINFO_APPINFO_PROP_APP_SCREENREADER,
+       E_PMINFO_APPINFO_PROP_APP_MAX_STR = E_PMINFO_APPINFO_PROP_APP_CATEGORY
+} pkgmgrinfo_appinfo_filter_prop_str;
+
+/*Boolean properties for filtering based on app info*/
+typedef enum _pkgmgrinfo_appinfo_filter_prop_bool {
+       E_PMINFO_APPINFO_PROP_APP_MIN_BOOL = 501,
+       E_PMINFO_APPINFO_PROP_APP_NODISPLAY = E_PMINFO_APPINFO_PROP_APP_MIN_BOOL,
+       E_PMINFO_APPINFO_PROP_APP_MULTIPLE,
+       E_PMINFO_APPINFO_PROP_APP_ONBOOT,
+       E_PMINFO_APPINFO_PROP_APP_AUTORESTART,
+       E_PMINFO_APPINFO_PROP_APP_TASKMANAGE,
+       E_PMINFO_APPINFO_PROP_APP_LAUNCHCONDITION,
+       E_PMINFO_APPINFO_PROP_APP_SUPPORT_DISABLE,
+       E_PMINFO_APPINFO_PROP_APP_DISABLE,
+       E_PMINFO_APPINFO_PROP_APP_REMOVABLE,
+       E_PMINFO_APPINFO_PROP_APP_MAX_BOOL = E_PMINFO_APPINFO_PROP_APP_REMOVABLE
+} pkgmgrinfo_appinfo_filter_prop_bool;
+
+/*Integer properties for filtering based on app info*/
+typedef enum _pkgmgrinfo_appinfo_filter_prop_int {
+       /*Currently No Fields*/
+       E_PMINFO_APPINFO_PROP_APP_MIN_INT = 601,
+       E_PMINFO_APPINFO_PROP_APP_SUPPORT_MODE = E_PMINFO_APPINFO_PROP_APP_MIN_INT,
+       E_PMINFO_APPINFO_PROP_APP_MAX_INT = E_PMINFO_APPINFO_PROP_APP_SUPPORT_MODE
+} pkgmgrinfo_appinfo_filter_prop_int;
+
+/*Integer properties for filtering based on app info*/
+typedef enum _pkgmgrinfo_pkginfo_filter_prop_range {
+       /*Currently No Fields*/
+       E_PMINFO_PKGINFO_PROP_RANGE_MIN_INT = 701,
+       E_PMINFO_PKGINFO_PROP_RANGE_BASIC,
+       E_PMINFO_PKGINFO_PROP_RANGE_MAX_INT = E_PMINFO_PKGINFO_PROP_RANGE_BASIC
+} pkgmgrinfo_pkginfo_filter_prop_range;
+
 typedef struct _pkgmgr_pkginfo_x {
        manifest_x *manifest_info;
        char *locale;
@@ -51,9 +163,7 @@ typedef struct _pkgmgr_pkginfo_x {
 } pkgmgr_pkginfo_x;
 
 typedef struct _pkgmgr_appinfo_x {
-       const char *package;
        char *locale;
-       pkgmgrinfo_app_component app_component;
        union {
                uiapplication_x *uiapp_info;
                serviceapplication_x *svcapp_info;
@@ -80,8 +190,25 @@ void __get_filter_condition(gpointer data, char **condition);
 
 void __cleanup_pkginfo(pkgmgr_pkginfo_x *data);
 void __cleanup_appinfo(pkgmgr_appinfo_x *data);
+void __cleanup_list_pkginfo(pkgmgr_pkginfo_x *list_pkginfo, pkgmgr_pkginfo_x *node);
 
 int __pkginfo_check_installed_storage(pkgmgr_pkginfo_x *pkginfo);
 int __appinfo_check_installed_storage(pkgmgr_appinfo_x *appinfo);
 
+int _pkgmgrinfo_validate_cb(void *data, int ncols, char **coltxt, char **colname);
+
+int __pkginfo_cb(void *data, int ncols, char **coltxt, char **colname);
+int __appinfo_cb(void *data, int ncols, char **coltxt, char **colname);
+int __uiapp_list_cb(void *data, int ncols, char **coltxt, char **colname);
+char* __get_app_locale_by_fallback(sqlite3 *db, const char *appid);
+
+pkgmgrinfo_pkginfo_filter_prop_str _pminfo_pkginfo_convert_to_prop_str(const char *property);
+pkgmgrinfo_pkginfo_filter_prop_int _pminfo_pkginfo_convert_to_prop_int(const char *property);
+pkgmgrinfo_pkginfo_filter_prop_bool _pminfo_pkginfo_convert_to_prop_bool(const char *property);
+
+pkgmgrinfo_appinfo_filter_prop_str _pminfo_appinfo_convert_to_prop_str(const char *property);
+pkgmgrinfo_appinfo_filter_prop_int _pminfo_appinfo_convert_to_prop_int(const char *property);
+pkgmgrinfo_appinfo_filter_prop_bool _pminfo_appinfo_convert_to_prop_bool(const char *property);
+pkgmgrinfo_pkginfo_filter_prop_range _pminfo_pkginfo_convert_to_prop_range(const char *property);
+
 #endif  /* __PKGMGRINFO_PRIVATE_H__ */
diff --git a/include/pkgmgrinfo_type.h b/include/pkgmgrinfo_type.h
new file mode 100755 (executable)
index 0000000..0b7bd90
--- /dev/null
@@ -0,0 +1,305 @@
+/*
+ * pkgmgrinfo_type
+ *
+ * Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved.
+ *
+ * Contact: Jayoun Lee <airjany@samsung.com>, Sewook Park <sewook7.park@samsung.com>,
+ * Jaeho Lee <jaeho81.lee@samsung.com>, Shobhit Srivastava <shobhit.s@samsung.com>
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+#ifndef __PKGMGRINFO_TYPE_H__
+#define __PKGMGRINFO_TYPE_H__
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/**
+ * @brief A handle to insert certificate information
+ */
+typedef void* pkgmgrinfo_instcertinfo_h;
+
+/**
+ * @brief A handle to get package information
+ */
+typedef void* pkgmgrinfo_pkginfo_h;
+
+/**
+ * @brief A handle to get application information
+ */
+typedef void* pkgmgrinfo_appinfo_h;
+
+/**
+ * @brief A handle to get certificate information
+ */
+typedef void* pkgmgrinfo_certinfo_h;
+
+/**
+ * @brief A handle to insert package information
+ */
+typedef void* pkgmgrinfo_pkgdbinfo_h;
+
+/**
+ * @brief A handle to filter package information
+ */
+typedef void* pkgmgrinfo_pkginfo_filter_h;
+
+/**
+ * @brief A handle to filter application information
+ */
+typedef void* pkgmgrinfo_appinfo_filter_h;
+
+/**
+ * @brief A handle to filter application metadata  information
+ */
+typedef void* pkgmgrinfo_appinfo_metadata_filter_h;
+
+/**
+ * @brief A handle to get appcontrol information
+ */
+typedef void* pkgmgrinfo_appcontrol_h;
+
+typedef void pkgmgrinfo_client;
+
+/**
+ * @brief Certificate Types to be used for setting information
+ */
+typedef enum {
+       PMINFO_SET_AUTHOR_ROOT_CERT = 0,                /**< Author Root Certificate*/
+       PMINFO_SET_AUTHOR_INTERMEDIATE_CERT = 1,                /**< Author Intermediate Certificate*/
+       PMINFO_SET_AUTHOR_SIGNER_CERT = 2,              /**< Author Signer Certificate*/
+       PMINFO_SET_DISTRIBUTOR_ROOT_CERT = 3,           /**< Distributor Root Certificate*/
+       PMINFO_SET_DISTRIBUTOR_INTERMEDIATE_CERT = 4,           /**< Distributor Intermediate Certificate*/
+       PMINFO_SET_DISTRIBUTOR_SIGNER_CERT = 5,         /**< Distributor Signer Certificate*/
+       PMINFO_SET_DISTRIBUTOR2_ROOT_CERT = 6,          /**< End Entity Root Certificate*/
+       PMINFO_SET_DISTRIBUTOR2_INTERMEDIATE_CERT = 7,          /**< End Entity Intermediate Certificate*/
+       PMINFO_SET_DISTRIBUTOR2_SIGNER_CERT = 8,                /**< End Entity Signer Certificate*/
+}pkgmgrinfo_instcert_type;
+
+typedef enum {
+       PMINFO_CERT_COMPARE_MATCH,
+       PMINFO_CERT_COMPARE_MISMATCH,
+       PMINFO_CERT_COMPARE_LHS_NO_CERT,
+       PMINFO_CERT_COMPARE_RHS_NO_CERT,
+       PMINFO_CERT_COMPARE_BOTH_NO_CERT,
+       PMINFO_CERT_COMPARE_ERROR,
+} pkgmgrinfo_cert_compare_result_type_e;
+
+/**
+ * @brief API return values
+ */
+enum {
+       PMINFO_R_EINVAL = -2,           /**< Invalid argument */
+       PMINFO_R_ERROR = -1,            /**< General error */
+       PMINFO_R_OK = 0                 /**< General success */
+};
+
+typedef enum {
+       PMINFO_HWACCELERATION_NOT_USE_GL = 0,           /**< Don't use hardware acceleration*/
+       PMINFO_HWACCELERATION_USE_GL = 1,               /**< Use hardware acceleration*/
+       PMINFO_HWACCELERATION_USE_SYSTEM_SETTING = 2            /**< Follow system setting for hardware acceleration */
+}pkgmgrinfo_app_hwacceleration;
+
+typedef enum {
+       PMINFO_SCREENREADER_OFF = 0,            /**< Don't use screen reader*/
+       PMINFO_SCREENREADER_ON = 1,             /**< Use screen reader*/
+       PMINFO_SCREENREADER_USE_SYSTEM_SETTING = 2              /**< Follow system setting for screen reader */
+}pkgmgrinfo_app_screenreader;
+
+typedef enum {
+       PMINFO_RECENTIMAGE_USE_ICON = 0,                /**<Use icon for recent image*/
+       PMINFO_RECENTIMAGE_USE_CAPTURE = 1,             /**< Use capture for recent image*/
+       PMINFO_RECENTIMAGE_USE_NOTHING = 2              /**< Don't use recent image */
+}pkgmgrinfo_app_recentimage;
+
+/**
+ * @brief Install Location Types
+ */
+typedef enum {
+       PMINFO_INSTALL_LOCATION_AUTO = 0,               /**< Auto*/
+       PMINFO_INSTALL_LOCATION_INTERNAL_ONLY,          /**< Internal Installation*/
+       PMINFO_INSTALL_LOCATION_PREFER_EXTERNAL,                /**< External Installation*/
+}pkgmgrinfo_install_location;
+
+/**
+ * @brief Application Component Types
+ */
+typedef enum {
+       PMINFO_ALL_APP = 0,     /**< All Application*/
+       PMINFO_UI_APP,          /**< UI Application*/
+       PMINFO_SVC_APP,         /**< Service Application*/
+}pkgmgrinfo_app_component;
+
+/**
+ * @brief Application Storage Types
+ */
+typedef enum {
+       PMINFO_INTERNAL_STORAGE = 0,            /**< Internal Storage*/
+       PMINFO_EXTERNAL_STORAGE = 1,            /**< External Storage*/
+}pkgmgrinfo_installed_storage;
+
+/**
+ * @brief Certificate Types to be used for getting information
+ */
+typedef enum {
+       PMINFO_AUTHOR_ROOT_CERT = 0,            /**< Author Root Certificate*/
+       PMINFO_AUTHOR_INTERMEDIATE_CERT = 1,            /**< Author Intermediate Certificate*/
+       PMINFO_AUTHOR_SIGNER_CERT = 2,          /**< Author Signer Certificate*/
+       PMINFO_DISTRIBUTOR_ROOT_CERT = 3,               /**< Distributor Root Certificate*/
+       PMINFO_DISTRIBUTOR_INTERMEDIATE_CERT = 4,               /**< Distributor Intermediate Certificate*/
+       PMINFO_DISTRIBUTOR_SIGNER_CERT = 5,             /**< Distributor Signer Certificate*/
+       PMINFO_DISTRIBUTOR2_ROOT_CERT = 6,              /**< End Entity Root Certificate*/
+       PMINFO_DISTRIBUTOR2_INTERMEDIATE_CERT = 7,              /**< End Entity Intermediate Certificate*/
+       PMINFO_DISTRIBUTOR2_SIGNER_CERT = 8,            /**< End Entity Signer Certificate*/
+}pkgmgrinfo_cert_type;
+
+/**
+ * @brief Install Location Types to be used when setting data in DB
+ */
+typedef enum {
+       INSTALL_INTERNAL = 0,           /**< Internal Installation*/
+       INSTALL_EXTERNAL,               /**< External Installation*/
+} INSTALL_LOCATION;
+
+/**
+ * @brief permission Types
+ */
+typedef enum {
+       PMINFO_PERMISSION_NORMAL = 0,            /**< permission normal*/
+       PMINFO_PERMISSION_SIGNATURE,     /**< permission type is signature*/
+       PMINFO_PERMISSION_PRIVILEGE,     /**< permission type is privilege*/
+}pkgmgrinfo_permission_type;
+
+
+typedef enum {
+       PMINFO_REQUEST = 0,
+       PMINFO_LISTENING,
+       PMINFO_BROADCAST,
+}pkgmgrinfo_client_type;
+
+/**
+ * @fn int (*pkgmgrinfo_pkg_list_cb ) (const pkgmgrinfo_pkginfo_h handle, void *user_data)
+ *
+ * @brief Specifies the type of function passed to pkgmgrinfo_pkginfo_get_list(), pkgmgrinfo_pkginfo_filter_foreach_pkginfo()
+ *
+ * @param[in] handle the pkginfo handle
+ * @param[in] user_data user data passed to pkgmgrinfo_pkginfo_get_list(), pkgmgrinfo_pkginfo_filter_foreach_pkginfo()
+ *
+ * @return 0 if success, negative value(<0) if fail. Callback is not called if return value is negative.\n
+ *
+ * @see  pkgmgrinfo_pkginfo_get_list()
+ * @see  pkgmgrinfo_pkginfo_filter_foreach_pkginfo()
+ */
+typedef int (*pkgmgrinfo_pkg_list_cb ) (const pkgmgrinfo_pkginfo_h handle, void *user_data);
+
+/**
+ * @fn int (*pkgmgrinfo_app_list_cb ) (const pkgmgrinfo_appinfo_h handle, void *user_data)
+ *
+ * @brief Specifies the type of function passed to pkgmgrinfo_appinfo_get_list(), pkgmgrinfo_appinfo_filter_foreach_appinfo(), pkgmgrinfo_appinfo_metadata_filter_foreach()
+ *
+ * @param[in] handle the appinfo handle
+ * @param[in] user_data user data passed to pkgmgrinfo_appinfo_get_list(), pkgmgrinfo_appinfo_filter_foreach_appinfo(), pkgmgrinfo_appinfo_metadata_filter_foreach()
+ *
+ * @return 0 if success, negative value(<0) if fail. Callback is not called if return value is negative.\n
+ *
+ * @see  pkgmgrinfo_appinfo_get_list()
+ * @see  pkgmgrinfo_appinfo_filter_foreach_appinfo()
+ * @see  pkgmgrinfo_appinfo_metadata_filter_foreach()
+ */
+typedef int (*pkgmgrinfo_app_list_cb ) (const pkgmgrinfo_appinfo_h handle, void *user_data);
+
+/**
+ * @fn int (*pkgmgrinfo_app_category_list_cb ) (const char *category_name, void *user_data)
+ *
+ * @brief Specifies the type of function passed to pkgmgrinfo_appinfo_foreach_category()
+ *
+ * @param[in] category_name the name of the category
+ * @param[in] user_data user data passed to pkgmgrinfo_appinfo_foreach_category()
+ *
+ * @return 0 if success, negative value(<0) if fail. Callback is not called if return value is negative.\n
+ *
+ * @see  pkgmgrinfo_appinfo_foreach_category()
+ */
+typedef int (*pkgmgrinfo_app_category_list_cb ) (const char *category_name, void *user_data);
+
+/**
+ * @fn int (*pkgmgrinfo_app_permission_list_cb ) (const char *permission_type, void *user_data)
+ *
+ * @brief Specifies the type of function passed to pkgmgrinfo_appinfo_foreach_category()
+ *
+ * @param[in] permission_name the name of the permission
+ * @param[in] user_data user data passed to pkgmgrinfo_appinfo_foreach_category()
+ *
+ * @return 0 if success, negative value(<0) if fail. Callback is not called if return value is negative.\n
+ *
+ * @see  pkgmgrinfo_appinfo_foreach_category()
+ */
+typedef int (*pkgmgrinfo_app_permission_list_cb ) (const char *permission_type, void *user_data);
+
+/**
+ * @fn int (*pkgmgrinfo_pkg_privilege_list_cb ) (const char *privilege_name, void *user_data)
+ *
+ * @brief Specifies the type of function passed to pkgmgrinfo_pkginfo_foreach_privilege()
+ *
+ * @param[in] privilege_name the name of the privilege
+ * @param[in] user_data user data passed to pkgmgrinfo_pkginfo_foreach_privilege()
+ *
+ * @return 0 if success, negative value(<0) if fail. Callback is not called if return value is negative.\n
+ *
+ * @see  pkgmgrinfo_pkginfo_foreach_privilege()
+ */
+typedef int (*pkgmgrinfo_pkg_privilege_list_cb ) (const char *privilege_name, void *user_data);
+
+/**
+ * @fn int (*pkgmgrinfo_app_metadata_list_cb ) (const char *metadata_key, const char *metadata_value, void *user_data)
+ *
+ * @brief Specifies the type of function passed to pkgmgrinfo_appinfo_foreach_metadata()
+ *
+ * @param[in] metadata_name the name of the metadata
+ * @param[in] metadata_value the value of the metadata
+ * @param[in] user_data user data passed to pkgmgrinfo_appinfo_foreach_metadata()
+ *
+ * @return 0 if success, negative value(<0) if fail. Callback is not called if return value is negative.\n
+ *
+ * @see  pkgmgrinfo_appinfo_foreach_metadata()
+ */
+typedef int (*pkgmgrinfo_app_metadata_list_cb ) (const char *metadata_key, const char *metadata_value, void *user_data);
+
+/**
+ * @fn int (*pkgmgrinfo_app_control_list_cb ) (pkgmgrinfo_appcontrol_h handle, void *user_data)
+ *
+ * @brief Specifies the type of function passed to pkgmgrinfo_appinfo_foreach_appcontrol()
+ *
+ * @param[in] handle the appcontrol handle to be used to get operation, uri and mime info
+ * @param[in] user_data user data passed to pkgmgrinfo_appinfo_foreach_appcontrol()
+ *
+ * @return 0 if success, negative value(<0) if fail. Callback is not called if return value is negative.\n
+ *
+ * @see  pkgmgrinfo_appinfo_foreach_appcontrol()
+ */
+typedef int (*pkgmgrinfo_app_control_list_cb ) (pkgmgrinfo_appcontrol_h handle, void *user_data);
+
+/**
+ * @brief type definition.
+ */
+typedef int (*pkgmgrinfo_handler)(int req_id, const char *pkg_type,
+                               const char *pkgid, const char *key,
+                               const char *val, const void *pmsg, void *data);
+
+#ifdef __cplusplus
+}
+#endif
+#endif /* __PKGPMGRINFO_TYPE_H__ */
index 306a565..ce4928a 100755 (executable)
@@ -1,6 +1,6 @@
 Name:       pkgmgr-info
 Summary:    Packager Manager infomation api for package
-Version:    0.0.172
+Version:    0.0.230
 Release:    1
 Group:      Application Framework/Package Management
 License:    Apache-2.0
@@ -10,9 +10,11 @@ BuildRequires:       pkgconfig(dlog)
 BuildRequires: pkgconfig(vconf)
 BuildRequires: pkgconfig(sqlite3)
 BuildRequires: pkgconfig(db-util)
-BuildRequires:pkgconfig(libxml-2.0)
+BuildRequires: pkgconfig(libxml-2.0)
 BuildRequires: pkgconfig(dbus-1)
 BuildRequires: pkgconfig(dbus-glib-1)
+BuildRequires: pkgconfig(journal)
+BuildRequires: pkgconfig(openssl)
 
 %description
 Packager Manager infomation api for packaging
@@ -48,10 +50,14 @@ Dev package for libpkgmgr-parser
 
 %if 0%{?tizen_build_binary_release_type_eng}
 export CFLAGS="$CFLAGS -DTIZEN_ENGINEER_MODE"
-export CXXFLAGS="$CXXFLAGS ?DTIZEN_ENGINEER_MODE"
+export CXXFLAGS="$CXXFLAGS -DTIZEN_ENGINEER_MODE"
 export FFLAGS="$FFLAGS -DTIZEN_ENGINEER_MODE"
 %endif
 
+%if "%{?tizen_profile_name}" == "wearable"
+export CFLAGS="$CFLAGS -D_APPFW_FEATURE_PROFILE_WEARABLE"
+%endif
+
 %cmake .
 make %{?jobs:-j%jobs}
 
@@ -85,10 +91,14 @@ chsmack -a '_' /usr/etc/package-manager
 %defattr(-,root,root,-)
 %{_libdir}/libpkgmgr-info.so.*
 /usr/share/license/%{name}
+%attr(0755,root,root) /opt/etc/dump.d/module.d/dump_pkgmgr.sh
 
 %files devel
 %defattr(-,root,root,-)
 %{_includedir}/pkgmgr-info.h
+%{_includedir}/pkgmgrinfo_basic.h
+%{_includedir}/pkgmgrinfo_feature.h
+%{_includedir}/pkgmgrinfo_type.h
 %{_libdir}/pkgconfig/pkgmgr-info.pc
 %{_libdir}/libpkgmgr-info.so
 
@@ -96,7 +106,6 @@ chsmack -a '_' /usr/etc/package-manager
 %manifest pkgmgr-parser.manifest
 %defattr(-,root,root,-)
 %{_libdir}/libpkgmgr_parser.so.*
-%{_prefix}/etc/package-manager/preload/preload_list.txt
 %{_prefix}/etc/package-manager/preload/manifest.xsd
 %{_prefix}/etc/package-manager/preload/xml.xsd
 %{_prefix}/etc/package-manager/parser_path.conf
@@ -106,6 +115,7 @@ chsmack -a '_' /usr/etc/package-manager
 %files parser-devel
 %defattr(-,root,root,-)
 %{_includedir}/pkgmgr/pkgmgr_parser.h
+%{_includedir}/pkgmgr/pkgmgr_parser_feature.h
 %{_includedir}/pkgmgr/pkgmgr_parser_db.h
 %{_libdir}/pkgconfig/pkgmgr-parser.pc
 %{_libdir}/libpkgmgr_parser.so
index c82f883..7b33b0a 100755 (executable)
@@ -25,7 +25,7 @@ message(STATUS "version/major : ${VERSION} / ${VERSION_MAJOR}")
 ### Get required CFLAGS, LDFLAGS from pkg-config
 
 include(FindPkgConfig)
-pkg_check_modules(parser_pkgs REQUIRED dlog libxml-2.0 glib-2.0 sqlite3 db-util vconf)
+pkg_check_modules(parser_pkgs REQUIRED dlog libxml-2.0 glib-2.0 sqlite3 db-util vconf journal)
 
 foreach(flag ${parser_pkgs_CFLAGS})
        set(parser_pkgs_CFLAGS_str "${parser_pkgs_CFLAGS_str} ${flag}")
@@ -43,8 +43,8 @@ include_directories(${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_BINARY_DIR})
 
 ## pkgmgr_parser object (by sewook.park)
 # This library is for installer backend
-add_library(pkgmgr_parser SHARED pkgmgr_parser.c pkgmgr_parser_db.c pkgmgr_parser_signature.c pkgmgr_parser_plugin.c)
-#add_library(pkgmgr_parser SHARED pkgmgr_parser.c)
+add_library(pkgmgr_parser SHARED pkgmgr_parser.c pkgmgr_parser_feature.c pkgmgr_parser_db.c pkgmgr_parser_db_util.c pkgmgr_parser_signature.c pkgmgr_parser_plugin.c)
+
 set_target_properties(pkgmgr_parser PROPERTIES SOVERSION ${VERSION_MAJOR})
 set_target_properties(pkgmgr_parser PROPERTIES VERSION ${VERSION})
 set_target_properties(pkgmgr_parser PROPERTIES COMPILE_FLAGS "${parser_pkgs_CFLAGS_str}")
@@ -52,7 +52,6 @@ target_link_libraries(pkgmgr_parser ${parser_pkgs_LDFLAGS})
 
 ### Create pc file
 configure_file(pkgmgr-parser.pc.in ${CMAKE_CURRENT_BINARY_DIR}/pkgmgr-parser.pc @ONLY)
-configure_file(preload_list.txt.in preload_list.txt @ONLY)
 configure_file(manifest.xsd.in manifest.xsd @ONLY)
 configure_file(xml.xsd.in xml.xsd @ONLY)
 configure_file(pkgmgr_parser_plugin_list.txt.in pkgmgr_parser_plugin_list.txt @ONLY)
@@ -68,12 +67,14 @@ INSTALL(FILES
 INSTALL(FILES
                        pkgmgr_parser_db.h
                DESTINATION include/pkgmgr)
+INSTALL(FILES
+                       pkgmgr_parser_feature.h
+               DESTINATION include/pkgmgr)
 
 INSTALL(FILES
                ${CMAKE_CURRENT_BINARY_DIR}/pkgmgr-parser.pc
                DESTINATION ${LIB_INSTALL_DIR}/pkgconfig)
 
-INSTALL(FILES ${CMAKE_CURRENT_BINARY_DIR}/preload_list.txt DESTINATION ${PREFIX}/etc/package-manager/preload/)
 INSTALL(FILES ${CMAKE_CURRENT_BINARY_DIR}/manifest.xsd DESTINATION ${PREFIX}/etc/package-manager/preload/)
 INSTALL(FILES ${CMAKE_CURRENT_BINARY_DIR}/xml.xsd DESTINATION ${PREFIX}/etc/package-manager/preload/)
 INSTALL(FILES ${CMAKE_CURRENT_BINARY_DIR}/pkgmgr_parser_plugin_list.txt DESTINATION ${PREFIX}/etc/package-manager/parserlib/)
index a1161a9..bfe3a50 100755 (executable)
           <xs:element ref="packages:author"/>
           <xs:element ref="packages:description"/>
           <xs:element ref="packages:compatibility"/>
-          <xs:element ref="packages:device-profile"/>
+          <xs:element ref="packages:profile"/>
           <xs:element ref="packages:service-application"/>
           <xs:element ref="packages:ui-application"/>
           <xs:element ref="packages:ime-application"/>
           <xs:element ref="packages:shortcut-list"/>
           <xs:element ref="packages:livebox"/>
+                 <xs:element ref="packages:dynamicbox"/>
           <xs:element ref="packages:account"/>
                  <xs:element ref="packages:notifications"/>
                  <xs:element ref="packages:privileges"/>
          <xs:attribute name="appsetting" type="xs:boolean"/>
          <xs:attribute name="nodisplay-setting" type="xs:boolean"/>
          <xs:attribute name="url" type="xs:string"/>
+         <xs:attribute name="support-disable" type="xs:boolean"/>
+         <xs:attribute name="mother-package" type="xs:boolean"/>
+         <xs:attribute name="api-version" type="xs:string"/>
+         <xs:attribute name="support-mode" type="xs:string"/>
+         <xs:attribute name="support-reset" type="xs:string"/>
     </xs:complexType>
   </xs:element>
 
         <xs:enumeration value="tpk"/>
         <xs:enumeration value="wgt"/>
         <xs:enumeration value="apk"/>
+        <xs:enumeration value="coretpk"/>
       </xs:restriction>
     </xs:simpleType>
+    <xs:simpleType name="ProfileType">
+      <xs:restriction base="xs:string">
+        <xs:enumeration value="mobile"/>
+        <xs:enumeration value="wearable"/>
+        <xs:enumeration value="TV"/>
+       </xs:restriction>
+    </xs:simpleType>
     <xs:simpleType name="TypeType">
       <xs:restriction base="xs:string">
         <xs:enumeration value="capp"/>
   <xs:element name="compatibility">
     <xs:complexType/>
   </xs:element>
-  <xs:element name="device-profile">
-    <xs:complexType/>
-  </xs:element>
-  <xs:element name="service-application">
+  <xs:element name="profile">
     <xs:complexType>
-      <xs:sequence>
-        <xs:choice maxOccurs="unbounded" minOccurs="0">
-          <xs:element ref="packages:label"/>
-          <xs:element ref="packages:icon"/>
-          <xs:element ref="packages:application-service"/>
-          <xs:element ref="packages:app-control"/>
-          <xs:element ref="packages:category"/>
-          <xs:element ref="packages:metadata"/>
-                 <xs:element ref="packages:permission"/>
-        </xs:choice>
-      </xs:sequence>
-      <xs:attribute name="appid" use="required" type="xs:string"/>
-      <xs:attribute name="auto-restart" use="required" type="xs:boolean"/>
-      <xs:attribute name="exec" use="required"/>
-      <xs:attribute name="on-boot" use="required" type="xs:boolean"/>
-      <xs:attribute name="type" use="required" type="packages:TypeType"/>
-         <xs:attribute name="permission-type" type="xs:string"/>
+      <xs:attribute name="name" use="required" type="packages:ProfileType"/>
     </xs:complexType>
   </xs:element>
+  <xs:element name="service-application">
+  </xs:element>
   <xs:element name="ui-application">
     <xs:complexType>
       <xs:sequence>
           <xs:element ref="packages:icon"/>
                  <xs:element ref="packages:image"/>
           <xs:element ref="packages:application-service"/>
-          <xs:element ref="packages:app-control"/>
+                 <xs:element ref="packages:app-control"/>
           <xs:element ref="packages:category"/>
           <xs:element ref="packages:metadata"/>
                  <xs:element ref="packages:permission"/>
+                 <xs:element ref="packages:datacontrol"/>
         </xs:choice>
       </xs:sequence>
       <xs:attribute name="appid" use="required" type="xs:string"/>
       <xs:attribute name="indicatordisplay" type="xs:boolean"/>
       <xs:attribute name="portrait-effectimage" type="xs:string"/>
       <xs:attribute name="landscape-effectimage" type="xs:string"/>
+      <xs:attribute name="effectimage-type" type="xs:string"/>
       <xs:attribute name="guestmode-visibility" type="xs:string"/>
          <xs:attribute name="launchcondition" type="xs:boolean"/>
          <xs:attribute name="permission-type" type="xs:string"/>
          <xs:attribute name="process-pool" type="xs:boolean"/>
          <xs:attribute name="auto-restart" type="xs:boolean"/>
          <xs:attribute name="on-boot" type="xs:boolean"/>
+         <xs:attribute name="multi-instance" type="xs:boolean"/>
+         <xs:attribute name="multi-instance-mainid" type="xs:string"/>
+         <xs:attribute name="ui-gadget" type="xs:boolean"/>
     </xs:complexType>
   </xs:element>
   <xs:element name="ime-application">
   </xs:element>
   <xs:element name="livebox">
   </xs:element>
+  <xs:element name="dynamicbox">
+  </xs:element>
   <xs:element name="account">
   </xs:element>
   <xs:element name="notifications">
          <xs:attribute name="type" type="xs:string"/>
        </xs:complexType>
   </xs:element>
+  <xs:element name="datacontrol">
+    <xs:complexType>
+      <xs:attribute name="providerid" type="xs:string"/>
+      <xs:attribute name="access" type="xs:string"/>
+      <xs:attribute name="type" type="xs:string"/>
+    </xs:complexType>
+  </xs:element>
   <xs:element name="operation">
     <xs:complexType>
       <xs:attribute name="name" use="required"/>
index ff5eea6..3f7abec 100755 (executable)
 #include <vconf.h>
 #include <glib.h>
 #include <db-util.h>
+#include <journal/appcore.h>
 
 #include "pkgmgr_parser.h"
 #include "pkgmgr_parser_internal.h"
 #include "pkgmgr_parser_db.h"
-#include "pkgmgr-info.h"
+#include "pkgmgr_parser_db_util.h"
 #include "pkgmgr_parser_signature.h"
-#include "pkgmgr-info-debug.h"
 #include "pkgmgr_parser_plugin.h"
 
+#include "pkgmgrinfo_debug.h"
+
 #ifdef LOG_TAG
 #undef LOG_TAG
 #endif
@@ -52,7 +54,7 @@
 #define MANIFEST_RO_DIRECTORY "/usr/share/packages"
 #define ASCII(s) (const char *)s
 #define XMLCHAR(s) (const xmlChar *)s
-#define BUFMAX 1024*128
+
 
 const char *package;
 
@@ -82,139 +84,121 @@ static int __ps_process_author(xmlTextReaderPtr reader, author_x *author);
 static int __ps_process_description(xmlTextReaderPtr reader, description_x *description);
 static int __ps_process_capability(xmlTextReaderPtr reader, capability_x *capability);
 static int __ps_process_license(xmlTextReaderPtr reader, license_x *license);
-static int __ps_process_appcontrol(xmlTextReaderPtr reader, appcontrol_x *appcontrol);
 static int __ps_process_datacontrol(xmlTextReaderPtr reader, datacontrol_x *datacontrol);
 static int __ps_process_uiapplication(xmlTextReaderPtr reader, uiapplication_x *uiapplication);
-static int __ps_process_serviceapplication(xmlTextReaderPtr reader, serviceapplication_x *serviceapplication);
 static int __ps_process_font(xmlTextReaderPtr reader, font_x *font);
 static int __ps_process_theme(xmlTextReaderPtr reader, theme_x *theme);
 static int __ps_process_daemon(xmlTextReaderPtr reader, daemon_x *daemon);
 static int __ps_process_ime(xmlTextReaderPtr reader, ime_x *ime);
-static void __ps_free_label(label_x *label);
-static void __ps_free_privilege(privilege_x *privilege);
-static void __ps_free_privileges(privileges_x *privileges);
-static void __ps_free_deviceprofile(deviceprofile_x * deviceprofile);
-static void __ps_free_allowed(allowed_x *allowed);
-static void __ps_free_operation(operation_x *operation);
-static void __ps_free_uri(uri_x *uri);
-static void __ps_free_mime(mime_x *mime);
-static void __ps_free_subapp(subapp_x *subapp);
-static void __ps_free_condition(condition_x *condition);
-static void __ps_free_notification(notification_x *notifiation);
-static void __ps_free_category(category_x *category);
-static void __ps_free_metadata(metadata_x *metadata);
-static void __ps_free_permission(permission_x *permission);
-static void __ps_free_compatibility(compatibility_x *compatibility);
-static void __ps_free_resolution(resolution_x *resolution);
-static void __ps_free_request(request_x *request);
-static void __ps_free_define(define_x *define);
-static void __ps_free_appsvc(appsvc_x *appsvc);
-static void __ps_free_launchconditions(launchconditions_x *launchconditions);
-static void __ps_free_datashare(datashare_x *datashare);
-static void __ps_free_icon(icon_x *icon);
-static void __ps_free_author(author_x *author);
-static void __ps_free_description(description_x *description);
-static void __ps_free_capability(capability_x *capability);
-static void __ps_free_license(license_x *license);
-static void __ps_free_appcontrol(appcontrol_x *appcontrol);
-static void __ps_free_datacontrol(datacontrol_x *datacontrol);
-static void __ps_free_uiapplication(uiapplication_x *uiapplication);
-static void __ps_free_serviceapplication(serviceapplication_x *serviceapplication);
-static void __ps_free_font(font_x *font);
-static void __ps_free_theme(theme_x *theme);
-static void __ps_free_daemon(daemon_x *daemon);
-static void __ps_free_ime(ime_x *ime);
 static char *__pkgid_to_manifest(const char *pkgid);
 static int __next_child_element(xmlTextReaderPtr reader, int depth);
 static int __start_process(xmlTextReaderPtr reader, manifest_x * mfx);
 static int __process_manifest(xmlTextReaderPtr reader, manifest_x * mfx);
-static void __str_trim(char *input);
-static int __validate_appid(const char *pkgid, const char *appid, char **newappid);
 
-static void __str_trim(char *input)
-{
-       char *trim_str = input;
 
-       if (input == NULL)
-               return;
 
-       while (*input != 0) {
-               if (!isspace(*input)) {
-                       *trim_str = *input;
-                       trim_str++;
+static void __save_xml_attribute(xmlTextReaderPtr reader, char *attribute, const char **xml_attribute, char *default_value)
+{
+       xmlChar *attrib_val = xmlTextReaderGetAttribute(reader, XMLCHAR(attribute));
+       if (attrib_val) {
+               *xml_attribute = ASCII(attrib_val);
+       } else {
+               if (default_value != NULL) {
+                       *xml_attribute = strdup(default_value);
                }
-               input++;
        }
+}
 
-       *trim_str = 0;
-       return;
+static void __save_xml_lang(xmlTextReaderPtr reader, const char **xml_attribute)
+{
+       const xmlChar *attrib_val = xmlTextReaderConstXmlLang(reader);
+       if (attrib_val != NULL) {
+               *xml_attribute = strdup(ASCII(attrib_val));
+       } else {
+               *xml_attribute = strdup(DEFAULT_LOCALE);
+       }
 }
 
-static int __validate_appid(const char *pkgid, const char *appid, char **newappid)
+static void __save_xml_value(xmlTextReaderPtr reader, const char **xml_attribute)
 {
-       if (!pkgid || !appid || !newappid) {
-               _LOGD("Arg supplied is NULL\n");
-               return -1;
+       xmlTextReaderRead(reader);
+       xmlChar *attrib_val = xmlTextReaderValue(reader);
+
+       if (attrib_val) {
+               *xml_attribute = ASCII(attrib_val);
        }
-       int pkglen = strlen(pkgid);
-       int applen = strlen(appid);
-       char *ptr = NULL;
-       char *newapp = NULL;
-       int len = 0;
-       if (strncmp(appid, ".", 1) == 0) {
-               len = pkglen + applen + 1;
-               newapp = calloc(1,len);
-               if (newapp == NULL) {
-                       _LOGD("Malloc failed\n");
-                       return -1;
+}
+
+static void __save_xml_supportmode(xmlTextReaderPtr reader, manifest_x * mfx)
+{
+       xmlChar *attrib_val = xmlTextReaderGetAttribute(reader, XMLCHAR("support-mode"));
+       if (attrib_val) {
+               int temp_mode = 0;
+               char buffer[10] = {'\0'};
+
+               if (strstr(ASCII(attrib_val), "ultra-power-saving")) {
+                       temp_mode |= PMINFO_SUPPORT_MODE_ULTRA_POWER_SAVING;    // PMINFO_MODE_PROP_ULTRA_POWER_SAVING  0x00000001
                }
-               strncpy(newapp, pkgid, pkglen);
-               strncat(newapp, appid, applen);
-               _LOGD("new appid is %s\n", newapp);
-               *newappid = newapp;
-               return 0;
-       }
-       if (applen < pkglen) {
-               _LOGD("app id is not proper\n");
-               *newappid = NULL;
-#ifdef _VALIDATE_APPID_
-               return -1;
-#else
-               return 0;
-#endif
-       }
-       if (!strcmp(appid, pkgid)) {
-               _LOGD("appid is proper\n");
-               *newappid = NULL;
-               return 0;
+               if (strstr(ASCII(attrib_val), "cool-down")) {
+                       temp_mode |= PMINFO_SUPPORT_MODE_COOL_DOWN;     // PMINFO_MODE_PROP_COOL_DOWN                   0x00000002
+               }
+               if (strstr(ASCII(attrib_val), "screen-reader")) {
+                       temp_mode |= PMINFO_SUPPORT_MODE_SCREEN_READER; // PMINFO_MODE_PROP_SCREEN_READER               0x00000004
+               }
+               sprintf(buffer, "%d", temp_mode);
+               mfx->support_mode = strdup(buffer);
+               xmlFree(attrib_val);
+       } else {
+               mfx->support_mode = strdup("0");
        }
-       else if (strncmp(appid, pkgid, pkglen) == 0) {
-               ptr = strstr(appid, pkgid);
-               ptr = ptr + pkglen;
-               if (strncmp(ptr, ".", 1) == 0) {
-                       _LOGD("appid is proper\n");
-                       *newappid = NULL;
-                       return 0;
+}
+
+static void __save_xml_supportfeature(const char *metadata_key, uiapplication_x *uiapplication)
+{
+       if (metadata_key) {
+               int temp_mode = 0;
+               char buffer[PKG_STRING_LEN_MAX] = {'\0'};
+
+               if (uiapplication->support_feature) {
+                       temp_mode = atoi(uiapplication->support_feature);
+                       FREE_AND_NULL(uiapplication->support_feature);
                }
-               else {
-                       _LOGD("appid is not proper\n");
-                       *newappid = NULL;
-#ifdef _VALIDATE_APPID_
-                       return -1;
-#else
-                       return 0;
-#endif
+
+               if (strcmp(metadata_key, "http://developer.samsung.com/tizen/metadata/multiwindow") == 0) {
+                       temp_mode |= PMINFO_SUPPORT_FEATURE_MULTI_WINDOW;
+               } else if (strcmp(metadata_key, "http://developer.samsung.com/tizen/metadata/oomtermination") == 0) {
+                       temp_mode |= PMINFO_SUPPORT_FEATURE_OOM_TERMINATION;
+               } else if (strcmp(metadata_key, "http://developer.samsung.com/tizen/metadata/largememory") == 0) {
+                       temp_mode |= PMINFO_SUPPORT_FEATURE_LARGE_MEMORY;
                }
+
+               sprintf(buffer, "%d", temp_mode);
+               uiapplication->support_feature = strdup(buffer);
        } else {
-               _LOGD("appid is not proper\n");
-               *newappid = NULL;
-#ifdef _VALIDATE_APPID_
-               return -1;
-#else
-               return 0;
-#endif
+               uiapplication->support_feature = strdup("0");
        }
-       return 0;
+}
+
+static void __save_xml_installedtime(manifest_x * mfx)
+{
+       char buf[PKG_STRING_LEN_MAX] = {'\0'};
+       char *val = NULL;
+       time_t current_time;
+       time(&current_time);
+       snprintf(buf, PKG_STRING_LEN_MAX - 1, "%d", (int)current_time);
+       val = strndup(buf, PKG_STRING_LEN_MAX - 1);
+       mfx->installed_time = val;
+}
+
+static void __save_xml_defaultvalue(manifest_x * mfx)
+{
+       mfx->preload = strdup("False");
+       mfx->removable = strdup("True");
+       mfx->readonly = strdup("False");
+       mfx->update = strdup("False");
+       mfx->system = strdup("False");
+       mfx->installed_storage= strdup("installed_internal");
+       package = mfx->package;
 }
 
 static char *__pkgid_to_manifest(const char *pkgid)
@@ -274,13 +258,13 @@ static int __next_child_element(xmlTextReaderPtr reader, int depth)
        return ret;
 }
 
-static bool __check_action_fota(char *const tagv[])
+static int __check_action_fota(char *const tagv[])
 {
        int i = 0;
        char delims[] = "=";
        char *ret_result = NULL;
        char *tag = NULL;
-       int ret = false;
+       int ret = PM_PARSER_R_ERROR;
 
        if (tagv == NULL)
                return ret;
@@ -292,12 +276,12 @@ static bool __check_action_fota(char *const tagv[])
                if (strcmp(ret_result, "fota") == 0) {
                        ret_result = strtok(NULL, delims);
                        if (strcmp(ret_result, "true") == 0) {
-                               ret = true;
+                               ret = PM_PARSER_R_OK;
                        }
                } else
                        _LOGD("tag process [%s]is not defined\n", ret_result);
 
-               free(tag);
+               FREE_AND_NULL(tag);
 
                /*check next value*/
                if (tagv[++i] != NULL)
@@ -311,1341 +295,185 @@ static bool __check_action_fota(char *const tagv[])
        return ret;
 }
 
-static void __ps_free_category(category_x *category)
+static int __ps_process_allowed(xmlTextReaderPtr reader, allowed_x *allowed)
 {
-       if (category == NULL)
-               return;
-       if (category->name) {
-               free((void *)category->name);
-               category->name = NULL;
-       }
-       free((void*)category);
-       category = NULL;
+       __save_xml_value(reader, &allowed->text);
+       return 0;
 }
 
-static void __ps_free_privilege(privilege_x *privilege)
+static int __ps_process_operation(xmlTextReaderPtr reader, operation_x *operation)
 {
-       if (privilege == NULL)
-               return;
-       if (privilege->text) {
-               free((void *)privilege->text);
-               privilege->text = NULL;
-       }
-       free((void*)privilege);
-       privilege = NULL;
+       __save_xml_attribute(reader, "name", &operation->name, NULL);
+/* Text does not exist. Only attribute exists
+       xmlTextReaderRead(reader);
+       if (xmlTextReaderValue(reader))
+               operation->text = ASCII(xmlTextReaderValue(reader));
+*/
+       return 0;
 }
 
-static void __ps_free_privileges(privileges_x *privileges)
+static int __ps_process_uri(xmlTextReaderPtr reader, uri_x *uri)
 {
-       if (privileges == NULL)
-               return;
-       /*Free Privilege*/
-       if (privileges->privilege) {
-               privilege_x *privilege = privileges->privilege;
-               privilege_x *tmp = NULL;
-               while(privilege != NULL) {
-                       tmp = privilege->next;
-                       __ps_free_privilege(privilege);
-                       privilege = tmp;
-               }
-       }
-       free((void*)privileges);
-       privileges = NULL;
+       __save_xml_attribute(reader, "name", &uri->name, NULL);
+/* Text does not exist. Only attribute exists
+       xmlTextReaderRead(reader);
+       if (xmlTextReaderValue(reader))
+               uri->text = ASCII(xmlTextReaderValue(reader));
+*/
+       return 0;
 }
 
-static void __ps_free_metadata(metadata_x *metadata)
+static int __ps_process_mime(xmlTextReaderPtr reader, mime_x *mime)
 {
-       if (metadata == NULL)
-               return;
-       if (metadata->key) {
-               free((void *)metadata->key);
-               metadata->key = NULL;
-       }
-       if (metadata->value) {
-               free((void *)metadata->value);
-               metadata->value = NULL;
-       }
-       free((void*)metadata);
-       metadata = NULL;
+       __save_xml_attribute(reader, "name", &mime->name, NULL);
+/* Text does not exist. Only attribute exists
+       xmlTextReaderRead(reader);
+       if (xmlTextReaderValue(reader))
+               mime->text = ASCII(xmlTextReaderValue(reader));
+*/
+       return 0;
 }
 
-static void __ps_free_permission(permission_x *permission)
+static int __ps_process_subapp(xmlTextReaderPtr reader, subapp_x *subapp)
 {
-       if (permission == NULL)
-               return;
-       if (permission->type) {
-               free((void *)permission->type);
-               permission->type = NULL;
-       }
-       if (permission->value) {
-               free((void *)permission->value);
-               permission->value = NULL;
-       }
-       free((void*)permission);
-       permission = NULL;
+       __save_xml_attribute(reader, "name", &subapp->name, NULL);
+/* Text does not exist. Only attribute exists
+       xmlTextReaderRead(reader);
+       if (xmlTextReaderValue(reader))
+               mime->text = ASCII(xmlTextReaderValue(reader));
+*/
+       return 0;
 }
 
-static void __ps_free_icon(icon_x *icon)
+static int __ps_process_condition(xmlTextReaderPtr reader, condition_x *condition)
 {
-       if (icon == NULL)
-               return;
-       if (icon->text) {
-               free((void *)icon->text);
-               icon->text = NULL;
-       }
-       if (icon->lang) {
-               free((void *)icon->lang);
-               icon->lang = NULL;
-       }
-       if (icon->name) {
-               free((void *)icon->name);
-               icon->name= NULL;
-       }
-       if (icon->section) {
-               free((void *)icon->section);
-               icon->section = NULL;
-       }
-       if (icon->size) {
-               free((void *)icon->size);
-               icon->size = NULL;
-       }
-       if (icon->resolution) {
-               free((void *)icon->resolution);
-               icon->resolution = NULL;
-       }
-       free((void*)icon);
-       icon = NULL;
+       __save_xml_attribute(reader, "name", &condition->name, NULL);
+       __save_xml_value(reader, &condition->text);
+       return 0;
 }
 
-static void __ps_free_image(image_x *image)
+static int __ps_process_notification(xmlTextReaderPtr reader, notification_x *notification)
 {
-       if (image == NULL)
-               return;
-       if (image->text) {
-               free((void *)image->text);
-               image->text = NULL;
-       }
-       if (image->lang) {
-               free((void *)image->lang);
-               image->lang = NULL;
-       }
-       if (image->name) {
-               free((void *)image->name);
-               image->name= NULL;
-       }
-       if (image->section) {
-               free((void *)image->section);
-               image->section = NULL;
-       }
-       free((void*)image);
-       image = NULL;
+       __save_xml_attribute(reader, "name", &notification->name, NULL);
+       __save_xml_value(reader, &notification->text);
+       return 0;
 }
 
-static void __ps_free_operation(operation_x *operation)
+static int __ps_process_category(xmlTextReaderPtr reader, category_x *category)
 {
-       if (operation == NULL)
-               return;
-       if (operation->text) {
-               free((void *)operation->text);
-               operation->text = NULL;
-       }
-       free((void*)operation);
-       operation = NULL;
+       __save_xml_attribute(reader, "name", &category->name, NULL);
+       return 0;
 }
 
-static void __ps_free_uri(uri_x *uri)
+static int __ps_process_privilege(xmlTextReaderPtr reader, privilege_x *privilege)
 {
-       if (uri == NULL)
-               return;
-       if (uri->text) {
-               free((void *)uri->text);
-               uri->text = NULL;
-       }
-       free((void*)uri);
-       uri = NULL;
+       __save_xml_value(reader, &privilege->text);
+       return 0;
 }
 
-static void __ps_free_mime(mime_x *mime)
+static int __ps_process_metadata(xmlTextReaderPtr reader, metadata_x *metadata)
 {
-       if (mime == NULL)
-               return;
-       if (mime->text) {
-               free((void *)mime->text);
-               mime->text = NULL;
-       }
-       free((void*)mime);
-       mime = NULL;
+       __save_xml_attribute(reader, "key", &metadata->key, NULL);
+       __save_xml_attribute(reader, "value", &metadata->value, NULL);
+       return 0;
 }
 
-static void __ps_free_subapp(subapp_x *subapp)
+static int __ps_process_permission(xmlTextReaderPtr reader, permission_x *permission)
 {
-       if (subapp == NULL)
-               return;
-       if (subapp->text) {
-               free((void *)subapp->text);
-               subapp->text = NULL;
-       }
-       free((void*)subapp);
-       subapp = NULL;
-}
+       __save_xml_attribute(reader, "type", &permission->type, NULL);
+       __save_xml_value(reader, &permission->value);
 
-static void __ps_free_condition(condition_x *condition)
-{
-       if (condition == NULL)
-               return;
-       if (condition->text) {
-               free((void *)condition->text);
-               condition->text = NULL;
-       }
-       if (condition->name) {
-               free((void *)condition->name);
-               condition->name = NULL;
-       }
-       free((void*)condition);
-       condition = NULL;
+       return 0;
 }
 
-static void __ps_free_notification(notification_x *notification)
+static int __ps_process_compatibility(xmlTextReaderPtr reader, compatibility_x *compatibility)
 {
-       if (notification == NULL)
-               return;
-       if (notification->text) {
-               free((void *)notification->text);
-               notification->text = NULL;
-       }
-       if (notification->name) {
-               free((void *)notification->name);
-               notification->name = NULL;
-       }
-       free((void*)notification);
-       notification = NULL;
-}
+       __save_xml_attribute(reader, "name", &compatibility->name, NULL);
+       __save_xml_value(reader, &compatibility->text);
 
-static void __ps_free_compatibility(compatibility_x *compatibility)
-{
-       if (compatibility == NULL)
-               return;
-       if (compatibility->text) {
-               free((void *)compatibility->text);
-               compatibility->text = NULL;
-       }
-       if (compatibility->name) {
-               free((void *)compatibility->name);
-               compatibility->name = NULL;
-       }
-       free((void*)compatibility);
-       compatibility = NULL;
+       return 0;
 }
 
-static void __ps_free_resolution(resolution_x *resolution)
+static int __ps_process_resolution(xmlTextReaderPtr reader, resolution_x *resolution)
 {
-       if (resolution == NULL)
-               return;
-       if (resolution->mimetype) {
-               free((void *)resolution->mimetype);
-               resolution->mimetype = NULL;
-       }
-       if (resolution->urischeme) {
-               free((void *)resolution->urischeme);
-               resolution->urischeme = NULL;
-       }
-       free((void*)resolution);
-       resolution = NULL;
+       __save_xml_attribute(reader, "mime-type", &resolution->mimetype, NULL);
+       __save_xml_attribute(reader, "uri-scheme", &resolution->urischeme, NULL);
+       return 0;
 }
 
-static void __ps_free_capability(capability_x *capability)
+static int __ps_process_request(xmlTextReaderPtr reader, request_x *request)
 {
-       if (capability == NULL)
-               return;
-       if (capability->operationid) {
-               free((void *)capability->operationid);
-               capability->operationid = NULL;
-       }
-       /*Free Resolution*/
-       if (capability->resolution) {
-               resolution_x *resolution = capability->resolution;
-               resolution_x *tmp = NULL;
-               while(resolution != NULL) {
-                       tmp = resolution->next;
-                       __ps_free_resolution(resolution);
-                       resolution = tmp;
-               }
-       }
-       free((void*)capability);
-       capability = NULL;
-}
+       __save_xml_value(reader, &request->text);
 
-static void __ps_free_allowed(allowed_x *allowed)
-{
-       if (allowed == NULL)
-               return;
-       if (allowed->name) {
-               free((void *)allowed->name);
-               allowed->name = NULL;
-       }
-       if (allowed->text) {
-               free((void *)allowed->text);
-               allowed->text = NULL;
-       }
-       free((void*)allowed);
-       allowed = NULL;
+       return 0;
 }
 
-static void __ps_free_request(request_x *request)
+static int __ps_process_define(xmlTextReaderPtr reader, define_x *define)
 {
-       if (request == NULL)
-               return;
-       if (request->text) {
-               free((void *)request->text);
-               request->text = NULL;
-       }
-       free((void*)request);
-       request = NULL;
-}
+       const xmlChar *node;
+       int ret = -1;
+       int depth = -1;
+       allowed_x *tmp1 = NULL;
+       request_x *tmp2 = NULL;
 
-static void __ps_free_datacontrol(datacontrol_x *datacontrol)
-{
-       if (datacontrol == NULL)
-               return;
-       if (datacontrol->providerid) {
-               free((void *)datacontrol->providerid);
-               datacontrol->providerid = NULL;
-       }
-       /*Free Capability*/
-       if (datacontrol->capability) {
-               capability_x *capability = datacontrol->capability;
-               capability_x *tmp = NULL;
-               while(capability != NULL) {
-                       tmp = capability->next;
-                       __ps_free_capability(capability);
-                       capability = tmp;
-               }
-       }
-       free((void*)datacontrol);
-       datacontrol = NULL;
-}
+       __save_xml_attribute(reader, "path", &define->path, NULL);
 
-static void __ps_free_launchconditions(launchconditions_x *launchconditions)
-{
-       if (launchconditions == NULL)
-               return;
-       if (launchconditions->text) {
-               free((void *)launchconditions->text);
-               launchconditions->text = NULL;
-       }
-       /*Free Condition*/
-       if (launchconditions->condition) {
-               condition_x *condition = launchconditions->condition;
-               condition_x *tmp = NULL;
-               while(condition != NULL) {
-                       tmp = condition->next;
-                       __ps_free_condition(condition);
-                       condition = tmp;
+       depth = xmlTextReaderDepth(reader);
+       while ((ret = __next_child_element(reader, depth))) {
+               node = xmlTextReaderConstName(reader);
+               if (!node) {
+                       _LOGD("xmlTextReaderConstName value is NULL\n");
+                       return -1;
                }
-       }
-       free((void*)launchconditions);
-       launchconditions = NULL;
-}
 
-static void __ps_free_appcontrol(appcontrol_x *appcontrol)
-{
-       if (appcontrol == NULL)
-               return;
-       if (appcontrol->text) {
-               free((void *)appcontrol->text);
-               appcontrol->text = NULL;
-       }
-       /*Free Operation*/
-       if (appcontrol->operation) {
-               operation_x *operation = appcontrol->operation;
-               operation_x *tmp = NULL;
-               while(operation != NULL) {
-                       tmp = operation->next;
-                       __ps_free_operation(operation);
-                       operation = tmp;
-               }
-       }
-       /*Free Uri*/
-       if (appcontrol->uri) {
-               uri_x *uri = appcontrol->uri;
-               uri_x *tmp = NULL;
-               while(uri != NULL) {
-                       tmp = uri->next;
-                       __ps_free_uri(uri);
-                       uri = tmp;
-               }
-       }
-       /*Free Mime*/
-       if (appcontrol->mime) {
-               mime_x *mime = appcontrol->mime;
-               mime_x *tmp = NULL;
-               while(mime != NULL) {
-                       tmp = mime->next;
-                       __ps_free_mime(mime);
-                       mime = tmp;
-               }
-       }
-       /*Free subapp*/
-       if (appcontrol->subapp) {
-               subapp_x *subapp = appcontrol->subapp;
-               subapp_x *tmp = NULL;
-               while(subapp != NULL) {
-                       tmp = subapp->next;
-                       __ps_free_subapp(subapp);
-                       subapp = tmp;
+               if (!strcmp(ASCII(node), "allowed")) {
+                       allowed_x *allowed= malloc(sizeof(allowed_x));
+                       if (allowed == NULL) {
+                               _LOGD("Malloc Failed\n");
+                               return -1;
+                       }
+                       memset(allowed, '\0', sizeof(allowed_x));
+                       LISTADD(define->allowed, allowed);
+                       ret = __ps_process_allowed(reader, allowed);
+               } else if (!strcmp(ASCII(node), "request")) {
+                       request_x *request = malloc(sizeof(request_x));
+                       if (request == NULL) {
+                               _LOGD("Malloc Failed\n");
+                               return -1;
+                       }
+                       memset(request, '\0', sizeof(request_x));
+                       LISTADD(define->request, request);
+                       ret = __ps_process_request(reader, request);
+               } else
+                       return -1;
+               if (ret < 0) {
+                       _LOGD("Processing define failed\n");
+                       return ret;
                }
        }
-       free((void*)appcontrol);
-       appcontrol = NULL;
-}
 
-static void __ps_free_appsvc(appsvc_x *appsvc)
-{
-       if (appsvc == NULL)
-               return;
-       if (appsvc->text) {
-               free((void *)appsvc->text);
-               appsvc->text = NULL;
-       }
-       /*Free Operation*/
-       if (appsvc->operation) {
-               operation_x *operation = appsvc->operation;
-               operation_x *tmp = NULL;
-               while(operation != NULL) {
-                       tmp = operation->next;
-                       __ps_free_operation(operation);
-                       operation = tmp;
-               }
-       }
-       /*Free Uri*/
-       if (appsvc->uri) {
-               uri_x *uri = appsvc->uri;
-               uri_x *tmp = NULL;
-               while(uri != NULL) {
-                       tmp = uri->next;
-                       __ps_free_uri(uri);
-                       uri = tmp;
-               }
-       }
-       /*Free Mime*/
-       if (appsvc->mime) {
-               mime_x *mime = appsvc->mime;
-               mime_x *tmp = NULL;
-               while(mime != NULL) {
-                       tmp = mime->next;
-                       __ps_free_mime(mime);
-                       mime = tmp;
-               }
-       }
-       /*Free subapp*/
-       if (appsvc->subapp) {
-               subapp_x *subapp = appsvc->subapp;
-               subapp_x *tmp = NULL;
-               while(subapp != NULL) {
-                       tmp = subapp->next;
-                       __ps_free_subapp(subapp);
-                       subapp = tmp;
-               }
-       }
-       free((void*)appsvc);
-       appsvc = NULL;
-}
+       SAFE_LISTHEAD(define->allowed, tmp1);
+       SAFE_LISTHEAD(define->request, tmp2);
 
-static void __ps_free_deviceprofile(deviceprofile_x *deviceprofile)
-{
-       return;
+       return ret;
 }
 
-static void __ps_free_define(define_x *define)
+static int __ps_process_appsvc(xmlTextReaderPtr reader, appsvc_x *appsvc)
 {
-       if (define == NULL)
-               return;
-       if (define->path) {
-               free((void *)define->path);
-               define->path = NULL;
-       }
-       /*Free Request*/
-       if (define->request) {
-               request_x *request = define->request;
-               request_x *tmp = NULL;
-               while(request != NULL) {
-                       tmp = request->next;
-                       __ps_free_request(request);
-                       request = tmp;
-               }
-       }
-       /*Free Allowed*/
-       if (define->allowed) {
-               allowed_x *allowed = define->allowed;
-               allowed_x *tmp = NULL;
-               while(allowed != NULL) {
-                       tmp = allowed->next;
-                       __ps_free_allowed(allowed);
-                       allowed = tmp;
-               }
-       }
-       free((void*)define);
-       define = NULL;
-}
+       const xmlChar *node;
+       int ret = -1;
+       int depth = -1;
+       operation_x *tmp1 = NULL;
+       uri_x *tmp2 = NULL;
+       mime_x *tmp3 = NULL;
+       subapp_x *tmp4 = NULL;
 
-static void __ps_free_datashare(datashare_x *datashare)
-{
-       if (datashare == NULL)
-               return;
-       /*Free Define*/
-       if (datashare->define) {
-               define_x *define =  datashare->define;
-               define_x *tmp = NULL;
-               while(define != NULL) {
-                       tmp = define->next;
-                       __ps_free_define(define);
-                       define = tmp;
-               }
-       }
-       /*Free Request*/
-       if (datashare->request) {
-               request_x *request = datashare->request;
-               request_x *tmp = NULL;
-               while(request != NULL) {
-                       tmp = request->next;
-                       __ps_free_request(request);
-                       request = tmp;
-               }
-       }
-       free((void*)datashare);
-       datashare = NULL;
-}
-
-static void __ps_free_label(label_x *label)
-{
-       if (label == NULL)
-               return;
-       if (label->name) {
-               free((void *)label->name);
-               label->name = NULL;
-       }
-       if (label->text) {
-               free((void *)label->text);
-               label->text = NULL;
-       }
-       if (label->lang) {
-               free((void *)label->lang);
-               label->lang= NULL;
-       }
-       free((void*)label);
-       label = NULL;
-}
-
-static void __ps_free_author(author_x *author)
-{
-       if (author == NULL)
-               return;
-       if (author->email) {
-               free((void *)author->email);
-               author->email = NULL;
-       }
-       if (author->text) {
-               free((void *)author->text);
-               author->text = NULL;
-       }
-       if (author->href) {
-               free((void *)author->href);
-               author->href = NULL;
-       }
-       if (author->lang) {
-               free((void *)author->lang);
-               author->lang = NULL;
-       }
-       free((void*)author);
-       author = NULL;
-}
-
-static void __ps_free_description(description_x *description)
-{
-       if (description == NULL)
-               return;
-       if (description->name) {
-               free((void *)description->name);
-               description->name = NULL;
-       }
-       if (description->text) {
-               free((void *)description->text);
-               description->text = NULL;
-       }
-       if (description->lang) {
-               free((void *)description->lang);
-               description->lang = NULL;
-       }
-       free((void*)description);
-       description = NULL;
-}
-
-static void __ps_free_license(license_x *license)
-{
-       if (license == NULL)
-               return;
-       if (license->text) {
-               free((void *)license->text);
-               license->text = NULL;
-       }
-       if (license->lang) {
-               free((void *)license->lang);
-               license->lang = NULL;
-       }
-       free((void*)license);
-       license = NULL;
-}
-
-static void __ps_free_uiapplication(uiapplication_x *uiapplication)
-{
-       if (uiapplication == NULL)
-               return;
-       if (uiapplication->exec) {
-               free((void *)uiapplication->exec);
-               uiapplication->exec = NULL;
-       }
-       if (uiapplication->appid) {
-               free((void *)uiapplication->appid);
-               uiapplication->appid = NULL;
-       }
-       if (uiapplication->nodisplay) {
-               free((void *)uiapplication->nodisplay);
-               uiapplication->nodisplay = NULL;
-       }
-       if (uiapplication->multiple) {
-               free((void *)uiapplication->multiple);
-               uiapplication->multiple = NULL;
-       }
-       if (uiapplication->type) {
-               free((void *)uiapplication->type);
-               uiapplication->type = NULL;
-       }
-       if (uiapplication->categories) {
-               free((void *)uiapplication->categories);
-               uiapplication->categories = NULL;
-       }
-       if (uiapplication->extraid) {
-               free((void *)uiapplication->extraid);
-               uiapplication->extraid = NULL;
-       }
-       if (uiapplication->taskmanage) {
-               free((void *)uiapplication->taskmanage);
-               uiapplication->taskmanage = NULL;
-       }
-       if (uiapplication->enabled) {
-               free((void *)uiapplication->enabled);
-               uiapplication->enabled = NULL;
-       }
-       if (uiapplication->hwacceleration) {
-               free((void *)uiapplication->hwacceleration);
-               uiapplication->hwacceleration = NULL;
-       }
-       if (uiapplication->screenreader) {
-               free((void *)uiapplication->screenreader);
-               uiapplication->screenreader = NULL;
-       }
-       if (uiapplication->mainapp) {
-               free((void *)uiapplication->mainapp);
-               uiapplication->mainapp = NULL;
-       }
-       if (uiapplication->recentimage) {
-               free((void *)uiapplication->recentimage);
-               uiapplication->recentimage = NULL;
-       }
-       if (uiapplication->package) {
-               free((void *)uiapplication->package);
-               uiapplication->package = NULL;
-       }
-       if (uiapplication->launchcondition) {
-               free((void *)uiapplication->launchcondition);
-               uiapplication->launchcondition = NULL;
-       }
-       /*Free Label*/
-       if (uiapplication->label) {
-               label_x *label = uiapplication->label;
-               label_x *tmp = NULL;
-               while(label != NULL) {
-                       tmp = label->next;
-                       __ps_free_label(label);
-                       label = tmp;
-               }
-       }
-       /*Free Icon*/
-       if (uiapplication->icon) {
-               icon_x *icon = uiapplication->icon;
-               icon_x *tmp = NULL;
-               while(icon != NULL) {
-                       tmp = icon->next;
-                       __ps_free_icon(icon);
-                       icon = tmp;
-               }
-       }
-       /*Free image*/
-       if (uiapplication->image) {
-               image_x *image = uiapplication->image;
-               image_x *tmp = NULL;
-               while(image != NULL) {
-                       tmp = image->next;
-                       __ps_free_image(image);
-                       image = tmp;
-               }
-       }
-       /*Free AppControl*/
-       if (uiapplication->appcontrol) {
-               appcontrol_x *appcontrol = uiapplication->appcontrol;
-               appcontrol_x *tmp = NULL;
-               while(appcontrol != NULL) {
-                       tmp = appcontrol->next;
-                       __ps_free_appcontrol(appcontrol);
-                       appcontrol = tmp;
-               }
-       }
-       /*Free LaunchConditions*/
-       if (uiapplication->launchconditions) {
-               launchconditions_x *launchconditions = uiapplication->launchconditions;
-               launchconditions_x *tmp = NULL;
-               while(launchconditions != NULL) {
-                       tmp = launchconditions->next;
-                       __ps_free_launchconditions(launchconditions);
-                       launchconditions = tmp;
-               }
-       }
-       /*Free Notification*/
-       if (uiapplication->notification) {
-               notification_x *notification = uiapplication->notification;
-               notification_x *tmp = NULL;
-               while(notification != NULL) {
-                       tmp = notification->next;
-                       __ps_free_notification(notification);
-                       notification = tmp;
-               }
-       }
-       /*Free DataShare*/
-       if (uiapplication->datashare) {
-               datashare_x *datashare = uiapplication->datashare;
-               datashare_x *tmp = NULL;
-               while(datashare != NULL) {
-                       tmp = datashare->next;
-                       __ps_free_datashare(datashare);
-                       datashare = tmp;
-               }
-       }
-       /*Free AppSvc*/
-       if (uiapplication->appsvc) {
-               appsvc_x *appsvc = uiapplication->appsvc;
-               appsvc_x *tmp = NULL;
-               while(appsvc != NULL) {
-                       tmp = appsvc->next;
-                       __ps_free_appsvc(appsvc);
-                       appsvc = tmp;
-               }
-       }
-       /*Free Category*/
-       if (uiapplication->category) {
-               category_x *category = uiapplication->category;
-               category_x *tmp = NULL;
-               while(category != NULL) {
-                       tmp = category->next;
-                       __ps_free_category(category);
-                       category = tmp;
-               }
-       }
-       /*Free Metadata*/
-       if (uiapplication->metadata) {
-               metadata_x *metadata = uiapplication->metadata;
-               metadata_x *tmp = NULL;
-               while(metadata != NULL) {
-                       tmp = metadata->next;
-                       __ps_free_metadata(metadata);
-                       metadata = tmp;
-               }
-       }
-       /*Free permission*/
-       if (uiapplication->permission) {
-               permission_x *permission = uiapplication->permission;
-               permission_x *tmp = NULL;
-               while(permission != NULL) {
-                       tmp = permission->next;
-                       __ps_free_permission(permission);
-                       permission = tmp;
-               }
-       }
-       /* _PRODUCT_LAUNCHING_ENHANCED_ START */
-       if (uiapplication->indicatordisplay) {
-               free((void *)uiapplication->indicatordisplay);
-               uiapplication->indicatordisplay = NULL;
-       }
-       if (uiapplication->portraitimg) {
-               free((void *)uiapplication->portraitimg);
-               uiapplication->portraitimg = NULL;
-       }
-       if (uiapplication->landscapeimg) {
-               free((void *)uiapplication->landscapeimg);
-               uiapplication->landscapeimg = NULL;
-       }
-       /* _PRODUCT_LAUNCHING_ENHANCED_ END */
-       if (uiapplication->guestmode_visibility) {
-               free((void *)uiapplication->guestmode_visibility);
-               uiapplication->guestmode_visibility = NULL;
-       }
-       if (uiapplication->app_component) {
-               free((void *)uiapplication->app_component);
-               uiapplication->app_component = NULL;
-       }
-       if (uiapplication->permission_type) {
-               free((void *)uiapplication->permission_type);
-               uiapplication->permission_type = NULL;
-       }
-       if (uiapplication->component_type) {
-               free((void *)uiapplication->component_type);
-               uiapplication->component_type = NULL;
-       }
-       if (uiapplication->preload) {
-               free((void *)uiapplication->preload);
-               uiapplication->preload = NULL;
-       }
-       if (uiapplication->submode) {
-               free((void *)uiapplication->submode);
-               uiapplication->submode = NULL;
-       }
-       if (uiapplication->submode_mainid) {
-               free((void *)uiapplication->submode_mainid);
-               uiapplication->submode_mainid = NULL;
-       }
-       if (uiapplication->installed_storage) {
-               free((void *)uiapplication->installed_storage);
-               uiapplication->installed_storage = NULL;
-       }
-       if (uiapplication->process_pool) {
-               free((void *)uiapplication->process_pool);
-               uiapplication->process_pool = NULL;
-       }
-       if (uiapplication->autorestart) {
-               free((void *)uiapplication->autorestart);
-               uiapplication->autorestart = NULL;
-       }
-       if (uiapplication->onboot) {
-               free((void *)uiapplication->onboot);
-               uiapplication->onboot = NULL;
-       }
-
-       free((void*)uiapplication);
-       uiapplication = NULL;
-}
-
-static void __ps_free_serviceapplication(serviceapplication_x *serviceapplication)
-{
-       if (serviceapplication == NULL)
-               return;
-       if (serviceapplication->exec) {
-               free((void *)serviceapplication->exec);
-               serviceapplication->exec = NULL;
-       }
-       if (serviceapplication->appid) {
-               free((void *)serviceapplication->appid);
-               serviceapplication->appid = NULL;
-       }
-       if (serviceapplication->onboot) {
-               free((void *)serviceapplication->onboot);
-               serviceapplication->onboot = NULL;
-       }
-       if (serviceapplication->autorestart) {
-               free((void *)serviceapplication->autorestart);
-               serviceapplication->autorestart = NULL;
-       }
-       if (serviceapplication->type) {
-               free((void *)serviceapplication->type);
-               serviceapplication->type = NULL;
-       }
-       if (serviceapplication->enabled) {
-               free((void *)serviceapplication->enabled);
-               serviceapplication->enabled = NULL;
-       }
-       if (serviceapplication->package) {
-               free((void *)serviceapplication->package);
-               serviceapplication->package = NULL;
-       }
-       if (serviceapplication->permission_type) {
-               free((void *)serviceapplication->permission_type);
-               serviceapplication->permission_type = NULL;
-       }
-       /*Free Label*/
-       if (serviceapplication->label) {
-               label_x *label = serviceapplication->label;
-               label_x *tmp = NULL;
-               while(label != NULL) {
-                       tmp = label->next;
-                       __ps_free_label(label);
-                       label = tmp;
-               }
-       }
-       /*Free Icon*/
-       if (serviceapplication->icon) {
-               icon_x *icon = serviceapplication->icon;
-               icon_x *tmp = NULL;
-               while(icon != NULL) {
-                       tmp = icon->next;
-                       __ps_free_icon(icon);
-                       icon = tmp;
-               }
-       }
-       /*Free AppControl*/
-       if (serviceapplication->appcontrol) {
-               appcontrol_x *appcontrol = serviceapplication->appcontrol;
-               appcontrol_x *tmp = NULL;
-               while(appcontrol != NULL) {
-                       tmp = appcontrol->next;
-                       __ps_free_appcontrol(appcontrol);
-                       appcontrol = tmp;
-               }
-       }
-       /*Free DataControl*/
-       if (serviceapplication->datacontrol) {
-               datacontrol_x *datacontrol = serviceapplication->datacontrol;
-               datacontrol_x *tmp = NULL;
-               while(datacontrol != NULL) {
-                       tmp = datacontrol->next;
-                       __ps_free_datacontrol(datacontrol);
-                       datacontrol = tmp;
-               }
-       }
-       /*Free LaunchConditions*/
-       if (serviceapplication->launchconditions) {
-               launchconditions_x *launchconditions = serviceapplication->launchconditions;
-               launchconditions_x *tmp = NULL;
-               while(launchconditions != NULL) {
-                       tmp = launchconditions->next;
-                       __ps_free_launchconditions(launchconditions);
-                       launchconditions = tmp;
-               }
-       }
-       /*Free Notification*/
-       if (serviceapplication->notification) {
-               notification_x *notification = serviceapplication->notification;
-               notification_x *tmp = NULL;
-               while(notification != NULL) {
-                       tmp = notification->next;
-                       __ps_free_notification(notification);
-                       notification = tmp;
-               }
-       }
-       /*Free DataShare*/
-       if (serviceapplication->datashare) {
-               datashare_x *datashare = serviceapplication->datashare;
-               datashare_x *tmp = NULL;
-               while(datashare != NULL) {
-                       tmp = datashare->next;
-                       __ps_free_datashare(datashare);
-                       datashare = tmp;
-               }
-       }
-       /*Free AppSvc*/
-       if (serviceapplication->appsvc) {
-               appsvc_x *appsvc = serviceapplication->appsvc;
-               appsvc_x *tmp = NULL;
-               while(appsvc != NULL) {
-                       tmp = appsvc->next;
-                       __ps_free_appsvc(appsvc);
-                       appsvc = tmp;
-               }
-       }
-       /*Free Category*/
-       if (serviceapplication->category) {
-               category_x *category = serviceapplication->category;
-               category_x *tmp = NULL;
-               while(category != NULL) {
-                       tmp = category->next;
-                       __ps_free_category(category);
-                       category = tmp;
-               }
-       }
-       /*Free Metadata*/
-       if (serviceapplication->metadata) {
-               metadata_x *metadata = serviceapplication->metadata;
-               metadata_x *tmp = NULL;
-               while(metadata != NULL) {
-                       tmp = metadata->next;
-                       __ps_free_metadata(metadata);
-                       metadata = tmp;
-               }
-       }
-       /*Free permission*/
-       if (serviceapplication->permission) {
-               permission_x *permission = serviceapplication->permission;
-               permission_x *tmp = NULL;
-               while(permission != NULL) {
-                       tmp = permission->next;
-                       __ps_free_permission(permission);
-                       permission = tmp;
-               }
-       }
-       free((void*)serviceapplication);
-       serviceapplication = NULL;
-}
-
-static void __ps_free_font(font_x *font)
-{
-       if (font == NULL)
-               return;
-       if (font->name) {
-               free((void *)font->name);
-               font->name = NULL;
-       }
-       if (font->text) {
-               free((void *)font->text);
-               font->text = NULL;
-       }
-       free((void*)font);
-       font = NULL;
-}
-
-static void __ps_free_theme(theme_x *theme)
-{
-       if (theme == NULL)
-               return;
-       if (theme->name) {
-               free((void *)theme->name);
-               theme->name = NULL;
-       }
-       if (theme->text) {
-               free((void *)theme->text);
-               theme->text = NULL;
-       }
-       free((void*)theme);
-       theme = NULL;
-}
-
-static void __ps_free_daemon(daemon_x *daemon)
-{
-       if (daemon == NULL)
-               return;
-       if (daemon->name) {
-               free((void *)daemon->name);
-               daemon->name = NULL;
-       }
-       if (daemon->text) {
-               free((void *)daemon->text);
-               daemon->text = NULL;
-       }
-       free((void*)daemon);
-       daemon = NULL;
-}
-
-static void __ps_free_ime(ime_x *ime)
-{
-       if (ime == NULL)
-               return;
-       if (ime->name) {
-               free((void *)ime->name);
-               ime->name = NULL;
-       }
-       if (ime->text) {
-               free((void *)ime->text);
-               ime->text = NULL;
-       }
-       free((void*)ime);
-       ime = NULL;
-}
-
-static int __ps_process_allowed(xmlTextReaderPtr reader, allowed_x *allowed)
-{
-       xmlTextReaderRead(reader);
-       if (xmlTextReaderValue(reader))
-               allowed->text = ASCII(xmlTextReaderValue(reader));
-       return 0;
-}
-
-static int __ps_process_operation(xmlTextReaderPtr reader, operation_x *operation)
-{
-       if (xmlTextReaderGetAttribute(reader, XMLCHAR("name")))
-               operation->name = ASCII(xmlTextReaderGetAttribute(reader, XMLCHAR("name")));
-/* Text does not exist. Only attribute exists
-       xmlTextReaderRead(reader);
-       if (xmlTextReaderValue(reader))
-               operation->text = ASCII(xmlTextReaderValue(reader));
-*/
-       return 0;
-}
-
-static int __ps_process_uri(xmlTextReaderPtr reader, uri_x *uri)
-{
-       if (xmlTextReaderGetAttribute(reader, XMLCHAR("name")))
-               uri->name = ASCII(xmlTextReaderGetAttribute(reader, XMLCHAR("name")));
-/* Text does not exist. Only attribute exists
-       xmlTextReaderRead(reader);
-       if (xmlTextReaderValue(reader))
-               uri->text = ASCII(xmlTextReaderValue(reader));
-*/
-       return 0;
-}
-
-static int __ps_process_mime(xmlTextReaderPtr reader, mime_x *mime)
-{
-       if (xmlTextReaderGetAttribute(reader, XMLCHAR("name")))
-               mime->name = ASCII(xmlTextReaderGetAttribute(reader, XMLCHAR("name")));
-/* Text does not exist. Only attribute exists
-       xmlTextReaderRead(reader);
-       if (xmlTextReaderValue(reader))
-               mime->text = ASCII(xmlTextReaderValue(reader));
-*/
-       return 0;
-}
-
-static int __ps_process_subapp(xmlTextReaderPtr reader, subapp_x *subapp)
-{
-       if (xmlTextReaderGetAttribute(reader, XMLCHAR("name")))
-               subapp->name = ASCII(xmlTextReaderGetAttribute(reader, XMLCHAR("name")));
-/* Text does not exist. Only attribute exists
-       xmlTextReaderRead(reader);
-       if (xmlTextReaderValue(reader))
-               mime->text = ASCII(xmlTextReaderValue(reader));
-*/
-       return 0;
-}
-
-static int __ps_process_condition(xmlTextReaderPtr reader, condition_x *condition)
-{
-       if (xmlTextReaderGetAttribute(reader, XMLCHAR("name")))
-               condition->name = ASCII(xmlTextReaderGetAttribute(reader, XMLCHAR("name")));
-       xmlTextReaderRead(reader);
-       if (xmlTextReaderValue(reader))
-               condition->text = ASCII(xmlTextReaderValue(reader));
-       return 0;
-}
-
-static int __ps_process_notification(xmlTextReaderPtr reader, notification_x *notification)
-{
-       if (xmlTextReaderGetAttribute(reader, XMLCHAR("name")))
-               notification->name = ASCII(xmlTextReaderGetAttribute(reader, XMLCHAR("name")));
-       xmlTextReaderRead(reader);
-       if (xmlTextReaderValue(reader))
-               notification->text = ASCII(xmlTextReaderValue(reader));
-       return 0;
-}
-
-static int __ps_process_category(xmlTextReaderPtr reader, category_x *category)
-{
-       if (xmlTextReaderGetAttribute(reader, XMLCHAR("name")))
-               category->name = ASCII(xmlTextReaderGetAttribute(reader, XMLCHAR("name")));
-       return 0;
-}
-
-static int __ps_process_privilege(xmlTextReaderPtr reader, privilege_x *privilege)
-{
-       xmlTextReaderRead(reader);
-       if (xmlTextReaderValue(reader)) {
-               privilege->text = ASCII(xmlTextReaderValue(reader));
-       }
-       return 0;
-}
-
-static int __ps_process_metadata(xmlTextReaderPtr reader, metadata_x *metadata)
-{
-       if (xmlTextReaderGetAttribute(reader, XMLCHAR("key")))
-               metadata->key = ASCII(xmlTextReaderGetAttribute(reader, XMLCHAR("key")));
-       if (xmlTextReaderGetAttribute(reader, XMLCHAR("value")))
-               metadata->value = ASCII(xmlTextReaderGetAttribute(reader, XMLCHAR("value")));
-       return 0;
-}
-
-static int __ps_process_permission(xmlTextReaderPtr reader, permission_x *permission)
-{
-       if (xmlTextReaderGetAttribute(reader, XMLCHAR("type")))
-               permission->type = ASCII(xmlTextReaderGetAttribute(reader, XMLCHAR("type")));
-
-       xmlTextReaderRead(reader);
-       if (xmlTextReaderValue(reader))
-               permission->value = ASCII(xmlTextReaderValue(reader));
-       return 0;
-}
-
-static int __ps_process_compatibility(xmlTextReaderPtr reader, compatibility_x *compatibility)
-{
-       if (xmlTextReaderGetAttribute(reader, XMLCHAR("name")))
-               compatibility->name = ASCII(xmlTextReaderGetAttribute(reader, XMLCHAR("name")));
-       xmlTextReaderRead(reader);
-       if (xmlTextReaderValue(reader))
-               compatibility->text = ASCII(xmlTextReaderValue(reader));
-       return 0;
-}
-
-static int __ps_process_resolution(xmlTextReaderPtr reader, resolution_x *resolution)
-{
-       if (xmlTextReaderGetAttribute(reader, XMLCHAR("mime-type")))
-               resolution->mimetype = ASCII(xmlTextReaderGetAttribute(reader, XMLCHAR("mime-type")));
-       if (xmlTextReaderGetAttribute(reader, XMLCHAR("uri-scheme")))
-               resolution->urischeme = ASCII(xmlTextReaderGetAttribute(reader, XMLCHAR("uri-scheme")));
-       return 0;
-}
-
-static int __ps_process_request(xmlTextReaderPtr reader, request_x *request)
-{
-       xmlTextReaderRead(reader);
-       if (xmlTextReaderValue(reader))
-               request->text = ASCII(xmlTextReaderValue(reader));
-       return 0;
-}
-
-static int __ps_process_define(xmlTextReaderPtr reader, define_x *define)
-{
-       const xmlChar *node;
-       int ret = -1;
-       int depth = -1;
-       allowed_x *tmp1 = NULL;
-       request_x *tmp2 = NULL;
-
-       if (xmlTextReaderGetAttribute(reader, XMLCHAR("path")))
-               define->path = ASCII(xmlTextReaderGetAttribute(reader, XMLCHAR("path")));
-
-       depth = xmlTextReaderDepth(reader);
-       while ((ret = __next_child_element(reader, depth))) {
-               node = xmlTextReaderConstName(reader);
-               if (!node) {
-                       _LOGD("xmlTextReaderConstName value is NULL\n");
-                       return -1;
-               }
-
-               if (!strcmp(ASCII(node), "allowed")) {
-                       allowed_x *allowed= malloc(sizeof(allowed_x));
-                       if (allowed == NULL) {
-                               _LOGD("Malloc Failed\n");
-                               return -1;
-                       }
-                       memset(allowed, '\0', sizeof(allowed_x));
-                       LISTADD(define->allowed, allowed);
-                       ret = __ps_process_allowed(reader, allowed);
-               } else if (!strcmp(ASCII(node), "request")) {
-                       request_x *request = malloc(sizeof(request_x));
-                       if (request == NULL) {
-                               _LOGD("Malloc Failed\n");
-                               return -1;
-                       }
-                       memset(request, '\0', sizeof(request_x));
-                       LISTADD(define->request, request);
-                       ret = __ps_process_request(reader, request);
-               } else
-                       return -1;
-               if (ret < 0) {
-                       _LOGD("Processing define failed\n");
-                       return ret;
-               }
-       }
-       if (define->allowed) {
-               LISTHEAD(define->allowed, tmp1);
-               define->allowed = tmp1;
-       }
-       if (define->request) {
-               LISTHEAD(define->request, tmp2);
-               define->request = tmp2;
-       }
-       return ret;
-}
-
-static int __ps_process_appcontrol(xmlTextReaderPtr reader, appcontrol_x *appcontrol)
-{
-       const xmlChar *node;
-       int ret = -1;
-       int depth = -1;
-       operation_x *tmp1 = NULL;
-       uri_x *tmp2 = NULL;
-       mime_x *tmp3 = NULL;
-       subapp_x *tmp4 = NULL;
-
-       depth = xmlTextReaderDepth(reader);
-       while ((ret = __next_child_element(reader, depth))) {
-               node = xmlTextReaderConstName(reader);
-               if (!node) {
-                       _LOGD("xmlTextReaderConstName value is NULL\n");
-                       return -1;
-               }
-
-               if (!strcmp(ASCII(node), "operation")) {
-                       operation_x *operation = malloc(sizeof(operation_x));
-                       if (operation == NULL) {
-                               _LOGD("Malloc Failed\n");
-                               return -1;
-                       }
-                       memset(operation, '\0', sizeof(operation_x));
-                       LISTADD(appcontrol->operation, operation);
-                       ret = __ps_process_operation(reader, operation);
-                       _LOGD("operation processing\n");
-               } else if (!strcmp(ASCII(node), "uri")) {
-                       uri_x *uri= malloc(sizeof(uri_x));
-                       if (uri == NULL) {
-                               _LOGD("Malloc Failed\n");
-                               return -1;
-                       }
-                       memset(uri, '\0', sizeof(uri_x));
-                       LISTADD(appcontrol->uri, uri);
-                       ret = __ps_process_uri(reader, uri);
-                       _LOGD("uri processing\n");
-               } else if (!strcmp(ASCII(node), "mime")) {
-                       mime_x *mime = malloc(sizeof(mime_x));
-                       if (mime == NULL) {
-                               _LOGD("Malloc Failed\n");
-                               return -1;
-                       }
-                       memset(mime, '\0', sizeof(mime_x));
-                       LISTADD(appcontrol->mime, mime);
-                       ret = __ps_process_mime(reader, mime);
-                       _LOGD("mime processing\n");
-               } else if (!strcmp(ASCII(node), "subapp")) {
-                       subapp_x *subapp = malloc(sizeof(subapp_x));
-                       if (subapp == NULL) {
-                               _LOGD("Malloc Failed\n");
-                               return -1;
-                       }
-                       memset(subapp, '\0', sizeof(subapp_x));
-                       LISTADD(appcontrol->subapp, subapp);
-                       ret = __ps_process_subapp(reader, subapp);
-                       _LOGD("subapp processing\n");
-               } else
-                       return -1;
-               if (ret < 0) {
-                       _LOGD("Processing appcontrol failed\n");
-                       return ret;
-               }
-       }
-       if (appcontrol->operation) {
-               LISTHEAD(appcontrol->operation, tmp1);
-               appcontrol->operation = tmp1;
-       }
-       if (appcontrol->uri) {
-               LISTHEAD(appcontrol->uri, tmp2);
-               appcontrol->uri = tmp2;
-       }
-       if (appcontrol->mime) {
-               LISTHEAD(appcontrol->mime, tmp3);
-               appcontrol->mime = tmp3;
-       }
-       if (appcontrol->subapp) {
-               LISTHEAD(appcontrol->subapp, tmp4);
-               appcontrol->subapp = tmp4;
-       }
-
-       xmlTextReaderRead(reader);
-       if (xmlTextReaderValue(reader))
-               appcontrol->text = ASCII(xmlTextReaderValue(reader));
-
-       return ret;
-}
-
-static int __ps_process_appsvc(xmlTextReaderPtr reader, appsvc_x *appsvc)
-{
-       const xmlChar *node;
-       int ret = -1;
-       int depth = -1;
-       operation_x *tmp1 = NULL;
-       uri_x *tmp2 = NULL;
-       mime_x *tmp3 = NULL;
-       subapp_x *tmp4 = NULL;
-
-       depth = xmlTextReaderDepth(reader);
-       while ((ret = __next_child_element(reader, depth))) {
-               node = xmlTextReaderConstName(reader);
-               if (!node) {
-                       _LOGD("xmlTextReaderConstName value is NULL\n");
-                       return -1;
+       depth = xmlTextReaderDepth(reader);
+       while ((ret = __next_child_element(reader, depth))) {
+               node = xmlTextReaderConstName(reader);
+               if (!node) {
+                       _LOGD("xmlTextReaderConstName value is NULL\n");
+                       return -1;
                }
 
                if (!strcmp(ASCII(node), "operation")) {
@@ -1695,26 +523,13 @@ static int __ps_process_appsvc(xmlTextReaderPtr reader, appsvc_x *appsvc)
                        return ret;
                }
        }
-       if (appsvc->operation) {
-               LISTHEAD(appsvc->operation, tmp1);
-               appsvc->operation = tmp1;
-       }
-       if (appsvc->uri) {
-               LISTHEAD(appsvc->uri, tmp2);
-               appsvc->uri = tmp2;
-       }
-       if (appsvc->mime) {
-               LISTHEAD(appsvc->mime, tmp3);
-               appsvc->mime = tmp3;
-       }
-       if (appsvc->subapp) {
-               LISTHEAD(appsvc->subapp, tmp4);
-               appsvc->subapp = tmp4;
-       }
 
-       xmlTextReaderRead(reader);
-       if (xmlTextReaderValue(reader))
-               appsvc->text = ASCII(xmlTextReaderValue(reader));
+       SAFE_LISTHEAD(appsvc->operation, tmp1);
+       SAFE_LISTHEAD(appsvc->uri, tmp2);
+       SAFE_LISTHEAD(appsvc->mime, tmp3);
+       SAFE_LISTHEAD(appsvc->subapp, tmp4);
+
+       __save_xml_value(reader, &appsvc->text);
 
        return ret;
 }
@@ -1751,10 +566,7 @@ static int __ps_process_privileges(xmlTextReaderPtr reader, privileges_x *privil
                        return ret;
                }
        }
-       if (privileges->privilege) {
-               LISTHEAD(privileges->privilege, tmp1);
-               privileges->privilege = tmp1;
-       }
+       SAFE_LISTHEAD(privileges->privilege, tmp1);
        return ret;
 }
 
@@ -1789,14 +601,10 @@ static int __ps_process_launchconditions(xmlTextReaderPtr reader, launchconditio
                        return ret;
                }
        }
-       if (launchconditions->condition) {
-               LISTHEAD(launchconditions->condition, tmp1);
-               launchconditions->condition = tmp1;
-       }
 
-       xmlTextReaderRead(reader);
-       if (xmlTextReaderValue(reader))
-               launchconditions->text = ASCII(xmlTextReaderValue(reader));
+       SAFE_LISTHEAD(launchconditions->condition, tmp1);
+
+       __save_xml_value(reader, &launchconditions->text);
 
        return ret;
 }
@@ -1841,14 +649,10 @@ static int __ps_process_datashare(xmlTextReaderPtr reader, datashare_x *datashar
                        return ret;
                }
        }
-       if (datashare->define) {
-               LISTHEAD(datashare->define, tmp1);
-               datashare->define = tmp1;
-       }
-       if (datashare->request) {
-               LISTHEAD(datashare->request, tmp2);
-               datashare->request = tmp2;
-       }
+
+       SAFE_LISTHEAD(datashare->define, tmp1);
+       SAFE_LISTHEAD(datashare->request, tmp2);
+
        return ret;
 }
 
@@ -1866,24 +670,17 @@ __get_icon_with_path(const char* icon)
                if (!package)
                        return NULL;
 
-/* "db/setting/theme" is not exist */
-#if 0
-               theme = vconf_get_str("db/setting/theme");
-               if (!theme) {
-                       theme = strdup("default");
-                       if(!theme) {
-                               return NULL;
-                       }
-               }
-#else
                theme = strdup("default");
-#endif
+               if(theme == NULL){
+                       _LOGE("@malloc failed!!!");
+                       return NULL;
+               }
 
                len = (0x01 << 7) + strlen(icon) + strlen(package) + strlen(theme);
                icon_with_path = malloc(len);
                if(icon_with_path == NULL) {
                        _LOGD("(icon_with_path == NULL) return\n");
-                       free(theme);
+                       FREE_AND_NULL(theme);
                        return NULL;
                }
 
@@ -1895,7 +692,6 @@ __get_icon_with_path(const char* icon)
                        if (access(icon_with_path, R_OK) == 0) break;
                        snprintf(icon_with_path, len, "/usr/share/icons/%s/small/%s", theme, icon);
                        if (access(icon_with_path, R_OK) == 0) break;
-                       _LOGD("cannot find icon %s", icon_with_path);
                        snprintf(icon_with_path, len,"/opt/share/icons/default/small/%s", icon);
                        if (access(icon_with_path, R_OK) == 0) break;
                        snprintf(icon_with_path, len, "/usr/share/icons/default/small/%s", icon);
@@ -1908,7 +704,6 @@ __get_icon_with_path(const char* icon)
                        if (access(icon_with_path, R_OK) == 0) break;
                        snprintf(icon_with_path, len, "/usr/apps/%s/res/icons/%s/small/%s", package, theme, icon);
                        if (access(icon_with_path, R_OK) == 0) break;
-                       _LOGD("cannot find icon %s", icon_with_path);
                        snprintf(icon_with_path, len, "/opt/apps/%s/res/icons/default/small/%s", package, icon);
                        if (access(icon_with_path, R_OK) == 0) break;
                        snprintf(icon_with_path, len, "/usr/apps/%s/res/icons/default/small/%s", package, icon);
@@ -1917,11 +712,17 @@ __get_icon_with_path(const char* icon)
                        if (access(icon_with_path, R_OK) == 0) break;
                } while (0);
 
-               free(theme);
-
-               _LOGD("Icon path : %s ---> %s", icon, icon_with_path);
+               FREE_AND_NULL(theme);
 
-               return icon_with_path;
+               /* If icon is not exist, return NULL */
+               if (access(icon_with_path, R_OK) != 0) {
+                       _LOGE("Icon is not exist");
+                       FREE_AND_NULL(icon_with_path);
+                       return NULL;
+               } else {
+                       _LOGD("Icon path : %s ---> %s", icon, icon_with_path);
+                       return icon_with_path;
+               }
        } else {
                char* confirmed_icon = NULL;
 
@@ -1949,20 +750,20 @@ static void __ps_process_tag(manifest_x * mfx, char *const tagv[])
                if (strcmp(ret_result, "preload") == 0) {
                        ret_result = strtok(NULL, delims);
                        if (strcmp(ret_result, "true") == 0) {
-                               free((void *)mfx->preload);
+                               FREE_AND_NULL(mfx->preload);
                                mfx->preload = strdup("true");
                        } else if (strcmp(ret_result, "false") == 0) {
-                               free((void *)mfx->preload);
+                               FREE_AND_NULL(mfx->preload);
                                mfx->preload = strdup("false");
                        }
                /*check tag :  removable*/
                } else if (strcmp(ret_result, "removable") == 0) {
                        ret_result = strtok(NULL, delims);
                        if (strcmp(ret_result, "true") == 0){
-                               free((void *)mfx->removable);
+                               FREE_AND_NULL(mfx->removable);
                                mfx->removable = strdup("true");
                        } else if (strcmp(ret_result, "false") == 0) {
-                               free((void *)mfx->removable);
+                               FREE_AND_NULL(mfx->removable);
                                mfx->removable = strdup("false");
                        }
                /*check tag :  not matched*/
@@ -1977,7 +778,7 @@ static void __ps_process_tag(manifest_x * mfx, char *const tagv[])
                else {
                        /*update tag :  system*/
                        if ((strcmp(mfx->preload,"true")==0) && (strcmp(mfx->removable,"false")==0)){
-                               free((void *)mfx->system);
+                               FREE_AND_NULL(mfx->system);
                                mfx->system = strdup("true");
                        }
                        _LOGD("tag process success...\n");
@@ -1988,28 +789,17 @@ static void __ps_process_tag(manifest_x * mfx, char *const tagv[])
 
 static int __ps_process_icon(xmlTextReaderPtr reader, icon_x *icon)
 {
-       if (xmlTextReaderGetAttribute(reader, XMLCHAR("name")))
-               icon->name = ASCII(xmlTextReaderGetAttribute(reader, XMLCHAR("name")));
-       if (xmlTextReaderConstXmlLang(reader)) {
-               icon->lang = strdup(ASCII(xmlTextReaderConstXmlLang(reader)));
-               if (icon->lang == NULL)
-                       icon->lang = strdup(DEFAULT_LOCALE);
-       } else {
-               icon->lang = strdup(DEFAULT_LOCALE);
-       }
-       if (xmlTextReaderGetAttribute(reader, XMLCHAR("section")))
-               icon->section = ASCII(xmlTextReaderGetAttribute(reader, XMLCHAR("section")));
-       if (xmlTextReaderGetAttribute(reader, XMLCHAR("size")))
-               icon->size = ASCII(xmlTextReaderGetAttribute(reader, XMLCHAR("size")));
-       if (xmlTextReaderGetAttribute(reader, XMLCHAR("resolution")))
-               icon->resolution = ASCII(xmlTextReaderGetAttribute(reader, XMLCHAR("resolution")));
+       __save_xml_attribute(reader, "name", &icon->name, NULL);
+       __save_xml_attribute(reader, "section", &icon->section, NULL);
+       __save_xml_attribute(reader, "size", &icon->size, NULL);
+       __save_xml_attribute(reader, "resolution", &icon->resolution, NULL);
+       __save_xml_lang(reader, &icon->lang);
+
        xmlTextReaderRead(reader);
-       if (xmlTextReaderValue(reader)) {
-               const char *text  = ASCII(xmlTextReaderValue(reader));
-               if(text) {
-                       icon->text = (const char *)__get_icon_with_path(text);
-                       free((void *)text);
-               }
+       const char *text  = ASCII(xmlTextReaderValue(reader));
+       if(text) {
+               icon->text = (const char *)__get_icon_with_path(text);
+               FREE_AND_NULL(text);
        }
 
        return 0;
@@ -2017,38 +807,19 @@ static int __ps_process_icon(xmlTextReaderPtr reader, icon_x *icon)
 
 static int __ps_process_image(xmlTextReaderPtr reader, image_x *image)
 {
-       if (xmlTextReaderGetAttribute(reader, XMLCHAR("name")))
-               image->name = ASCII(xmlTextReaderGetAttribute(reader, XMLCHAR("name")));
-       if (xmlTextReaderConstXmlLang(reader)) {
-               image->lang = strdup(ASCII(xmlTextReaderConstXmlLang(reader)));
-               if (image->lang == NULL)
-                       image->lang = strdup(DEFAULT_LOCALE);
-       } else {
-               image->lang = strdup(DEFAULT_LOCALE);
-       }
-       if (xmlTextReaderGetAttribute(reader, XMLCHAR("section")))
-               image->section = ASCII(xmlTextReaderGetAttribute(reader, XMLCHAR("section")));
-       xmlTextReaderRead(reader);
-       if (xmlTextReaderValue(reader))
-               image->text = ASCII(xmlTextReaderValue(reader));
+       __save_xml_attribute(reader, "name", &image->name, NULL);
+       __save_xml_attribute(reader, "section", &image->section, NULL);
+       __save_xml_lang(reader, &image->lang);
+       __save_xml_value(reader, &image->text);
 
        return 0;
 }
 
 static int __ps_process_label(xmlTextReaderPtr reader, label_x *label)
 {
-       if (xmlTextReaderGetAttribute(reader, XMLCHAR("name")))
-               label->name = ASCII(xmlTextReaderGetAttribute(reader, XMLCHAR("name")));
-       if (xmlTextReaderConstXmlLang(reader)) {
-               label->lang = strdup(ASCII(xmlTextReaderConstXmlLang(reader)));
-               if (label->lang == NULL)
-                       label->lang = strdup(DEFAULT_LOCALE);
-       } else {
-               label->lang = strdup(DEFAULT_LOCALE);
-       }
-       xmlTextReaderRead(reader);
-       if (xmlTextReaderValue(reader))
-               label->text = ASCII(xmlTextReaderValue(reader));
+       __save_xml_attribute(reader, "name", &label->name, NULL);
+       __save_xml_lang(reader, &label->lang);
+       __save_xml_value(reader, &label->text);
 
 /*     _LOGD("lable name %s\n", label->name);
        _LOGD("lable lang %s\n", label->lang);
@@ -2060,564 +831,129 @@ static int __ps_process_label(xmlTextReaderPtr reader, label_x *label)
 
 static int __ps_process_author(xmlTextReaderPtr reader, author_x *author)
 {
-       if (xmlTextReaderGetAttribute(reader, XMLCHAR("email")))
-               author->email = ASCII(xmlTextReaderGetAttribute(reader, XMLCHAR("email")));
-       if (xmlTextReaderGetAttribute(reader, XMLCHAR("href")))
-               author->href = ASCII(xmlTextReaderGetAttribute(reader, XMLCHAR("href")));
-       if (xmlTextReaderConstXmlLang(reader)) {
-               author->lang = strdup(ASCII(xmlTextReaderConstXmlLang(reader)));
-               if (author->lang == NULL)
-                       author->lang = strdup(DEFAULT_LOCALE);
-       } else {
-               author->lang = strdup(DEFAULT_LOCALE);
-       }
-       xmlTextReaderRead(reader);
-       if (xmlTextReaderValue(reader)) {
-               const char *text  = ASCII(xmlTextReaderValue(reader));
-               if (*text == '\n') {
-                       author->text = NULL;
-                       free((void *)text);
-                       return 0;
-               }
-               author->text = ASCII(xmlTextReaderValue(reader));
-       }
-       return 0;
-}
-
-static int __ps_process_description(xmlTextReaderPtr reader, description_x *description)
-{
-       if (xmlTextReaderConstXmlLang(reader)) {
-               description->lang = strdup(ASCII(xmlTextReaderConstXmlLang(reader)));
-               if (description->lang == NULL)
-                       description->lang = strdup(DEFAULT_LOCALE);
-       } else {
-               description->lang = strdup(DEFAULT_LOCALE);
-       }
-       xmlTextReaderRead(reader);
-       if (xmlTextReaderValue(reader)) {
-               const char *text  = ASCII(xmlTextReaderValue(reader));
-               if (*text == '\n') {
-                       description->text = NULL;
-                       free((void *)text);
-                       return 0;
-               }
-               description->text = ASCII(xmlTextReaderValue(reader));
-       }
-       return 0;
-}
+       __save_xml_attribute(reader, "email", &author->email, NULL);
+       __save_xml_attribute(reader, "href", &author->href, NULL);
+       __save_xml_lang(reader, &author->lang);
+       __save_xml_value(reader, &author->text);
 
-static int __ps_process_license(xmlTextReaderPtr reader, license_x *license)
-{
-       if (xmlTextReaderConstXmlLang(reader)) {
-               license->lang = strdup(ASCII(xmlTextReaderConstXmlLang(reader)));
-               if (license->lang == NULL)
-                       license->lang = strdup(DEFAULT_LOCALE);
-       } else {
-               license->lang = strdup(DEFAULT_LOCALE);
-       }
-       xmlTextReaderRead(reader);
-       if (xmlTextReaderValue(reader))
-               license->text = ASCII(xmlTextReaderValue(reader));
        return 0;
 }
 
-static int __ps_process_capability(xmlTextReaderPtr reader, capability_x *capability)
-{
-       const xmlChar *node;
-       int ret = -1;
-       int depth = -1;
-       resolution_x *tmp1 = NULL;
-
-       if (xmlTextReaderGetAttribute(reader, XMLCHAR("operation-id")))
-               capability->operationid = ASCII(xmlTextReaderGetAttribute(reader, XMLCHAR("operation-id")));
-
-       depth = xmlTextReaderDepth(reader);
-       while ((ret = __next_child_element(reader, depth))) {
-               node = xmlTextReaderConstName(reader);
-               if (!node) {
-                       _LOGD("xmlTextReaderConstName value is NULL\n");
-                       return -1;
-               }
-
-               if (!strcmp(ASCII(node), "resolution")) {
-                       resolution_x *resolution = malloc(sizeof(resolution_x));
-                       if (resolution == NULL) {
-                               _LOGD("Malloc Failed\n");
-                               return -1;
-                       }
-                       memset(resolution, '\0', sizeof(resolution_x));
-                       LISTADD(capability->resolution, resolution);
-                       ret = __ps_process_resolution(reader, resolution);
-               } else
-                       return -1;
-               if (ret < 0) {
-                       _LOGD("Processing capability failed\n");
-                       return ret;
-               }
-       }
-
-       if (capability->resolution) {
-               LISTHEAD(capability->resolution, tmp1);
-               capability->resolution = tmp1;
-       }
-
-       return ret;
-}
-
-static int __ps_process_datacontrol(xmlTextReaderPtr reader, datacontrol_x *datacontrol)
-{
-       const xmlChar *node;
-       int ret = -1;
-       int depth = -1;
-       capability_x *tmp1 = NULL;
-
-       if (xmlTextReaderGetAttribute(reader, XMLCHAR("provider-id")))
-               datacontrol->providerid = ASCII(xmlTextReaderGetAttribute(reader, XMLCHAR("provider-id")));
-
-       depth = xmlTextReaderDepth(reader);
-       while ((ret = __next_child_element(reader, depth))) {
-               node = xmlTextReaderConstName(reader);
-               if (!node) {
-                       _LOGD("xmlTextReaderConstName value is NULL\n");
-                       return -1;
-               }
-
-               if (!strcmp(ASCII(node), "capability")) {
-                       capability_x *capability = malloc(sizeof(capability_x));
-                       if (capability == NULL) {
-                               _LOGD("Malloc Failed\n");
-                               return -1;
-                       }
-                       memset(capability, '\0', sizeof(capability_x));
-                       LISTADD(datacontrol->capability, capability);
-                       ret = __ps_process_capability(reader, capability);
-               } else
-                       return -1;
-               if (ret < 0) {
-                       _LOGD("Processing datacontrol failed\n");
-                       return ret;
-               }
-       }
-
-       if (datacontrol->capability) {
-               LISTHEAD(datacontrol->capability, tmp1);
-               datacontrol->capability = tmp1;
-       }
-
-       return ret;
-}
-
-static int __ps_process_uiapplication(xmlTextReaderPtr reader, uiapplication_x *uiapplication)
+static int __ps_process_description(xmlTextReaderPtr reader, description_x *description)
 {
-       const xmlChar *node;
-       int ret = -1;
-       int depth = -1;
-       char *newappid = NULL;
-       label_x *tmp1 = NULL;
-       icon_x *tmp2 = NULL;
-       appsvc_x *tmp3 = NULL;
-       appcontrol_x *tmp4 = NULL;
-       launchconditions_x *tmp5 = NULL;
-       notification_x *tmp6 = NULL;
-       datashare_x *tmp7 = NULL;
-       category_x *tmp8 = NULL;
-       metadata_x *tmp9 = NULL;
-       image_x *tmp10 = NULL;
-       permission_x *tmp11 = NULL;
-
-       if (xmlTextReaderGetAttribute(reader, XMLCHAR("appid"))) {
-               uiapplication->appid = ASCII(xmlTextReaderGetAttribute(reader, XMLCHAR("appid")));
-               if (uiapplication->appid == NULL) {
-                       _LOGD("appid cant be NULL\n");
-                       return -1;
-               }
-       } else {
-               _LOGD("appid is mandatory\n");
-               return -1;
-       }
-       /*check appid*/
-       ret = __validate_appid(package, uiapplication->appid, &newappid);
-       if (ret == -1) {
-               _LOGD("appid is not proper\n");
-               return -1;
-       } else {
-               if (newappid) {
-                       if (uiapplication->appid)
-                               free((void *)uiapplication->appid);
-                       uiapplication->appid = newappid;
-               }
-               uiapplication->package= strdup(package);
-       }
-       if (xmlTextReaderGetAttribute(reader, XMLCHAR("exec")))
-               uiapplication->exec = ASCII(xmlTextReaderGetAttribute(reader, XMLCHAR("exec")));
-       if (xmlTextReaderGetAttribute(reader, XMLCHAR("nodisplay"))) {
-               uiapplication->nodisplay = ASCII(xmlTextReaderGetAttribute(reader, XMLCHAR("nodisplay")));
-               if (uiapplication->nodisplay == NULL)
-                       uiapplication->nodisplay = strdup("false");
-       } else {
-               uiapplication->nodisplay = strdup("false");
-       }
-       if (xmlTextReaderGetAttribute(reader, XMLCHAR("multiple"))) {
-               uiapplication->multiple = ASCII(xmlTextReaderGetAttribute(reader, XMLCHAR("multiple")));
-               if (uiapplication->multiple == NULL)
-                       uiapplication->multiple = strdup("false");
-       } else {
-               uiapplication->multiple = strdup("false");
-       }
-       if (xmlTextReaderGetAttribute(reader, XMLCHAR("type")))
-               uiapplication->type = ASCII(xmlTextReaderGetAttribute(reader, XMLCHAR("type")));
-       if (xmlTextReaderGetAttribute(reader, XMLCHAR("categories")))
-               uiapplication->categories = ASCII(xmlTextReaderGetAttribute(reader, XMLCHAR("categories")));
-       if (xmlTextReaderGetAttribute(reader, XMLCHAR("extraid")))
-               uiapplication->extraid = ASCII(xmlTextReaderGetAttribute(reader, XMLCHAR("extraid")));
-       if (xmlTextReaderGetAttribute(reader, XMLCHAR("taskmanage"))) {
-               uiapplication->taskmanage = ASCII(xmlTextReaderGetAttribute(reader, XMLCHAR("taskmanage")));
-               if (uiapplication->taskmanage == NULL)
-                       uiapplication->taskmanage = strdup("true");
-       } else {
-               uiapplication->taskmanage = strdup("true");
-       }
-       if (xmlTextReaderGetAttribute(reader, XMLCHAR("enabled"))) {
-               uiapplication->enabled = ASCII(xmlTextReaderGetAttribute(reader, XMLCHAR("enabled")));
-               if (uiapplication->enabled == NULL)
-                       uiapplication->enabled = strdup("true");
-       } else {
-               uiapplication->enabled = strdup("true");
-       }
-       if (xmlTextReaderGetAttribute(reader, XMLCHAR("hw-acceleration"))) {
-               uiapplication->hwacceleration = ASCII(xmlTextReaderGetAttribute(reader, XMLCHAR("hw-acceleration")));
-               if (uiapplication->hwacceleration == NULL)
-                       uiapplication->hwacceleration = strdup("use-system-setting");
-       } else {
-               uiapplication->hwacceleration = strdup("use-system-setting");
-       }
-       if (xmlTextReaderGetAttribute(reader, XMLCHAR("screen-reader"))) {
-               uiapplication->screenreader = ASCII(xmlTextReaderGetAttribute(reader, XMLCHAR("screen-reader")));
-               if (uiapplication->screenreader == NULL)
-                       uiapplication->screenreader = strdup("use-system-setting");
-       } else {
-               uiapplication->screenreader = strdup("use-system-setting");
-       }
-       if (xmlTextReaderGetAttribute(reader, XMLCHAR("recentimage")))
-               uiapplication->recentimage = ASCII(xmlTextReaderGetAttribute(reader, XMLCHAR("recentimage")));
-       if (xmlTextReaderGetAttribute(reader, XMLCHAR("mainapp"))) {
-               uiapplication->mainapp = ASCII(xmlTextReaderGetAttribute(reader, XMLCHAR("mainapp")));
-               if (uiapplication->mainapp == NULL)
-                       uiapplication->mainapp = strdup("false");
-       } else {
-               uiapplication->mainapp = strdup("false");
-       }
-       if (xmlTextReaderGetAttribute(reader, XMLCHAR("launchcondition"))) {
-               uiapplication->launchcondition = ASCII(xmlTextReaderGetAttribute(reader, XMLCHAR("launchcondition")));
-               if (uiapplication->launchcondition == NULL)
-                       uiapplication->launchcondition = strdup("false");
-       } else {
-               uiapplication->launchcondition = strdup("false");
-       }
-
-       if (xmlTextReaderGetAttribute(reader, XMLCHAR("indicatordisplay"))) {
-               uiapplication->indicatordisplay = ASCII(xmlTextReaderGetAttribute(reader, XMLCHAR("indicatordisplay")));
-               if (uiapplication->indicatordisplay == NULL)
-                       uiapplication->indicatordisplay = strdup("true");
-       } else {
-               uiapplication->indicatordisplay = strdup("true");
-       }
-       if (xmlTextReaderGetAttribute(reader, XMLCHAR("portrait-effectimage")))
-               uiapplication->portraitimg = ASCII(xmlTextReaderGetAttribute(reader, XMLCHAR("portrait-effectimage")));
-       else
-               uiapplication->portraitimg = NULL;
-       if (xmlTextReaderGetAttribute(reader, XMLCHAR("landscape-effectimage")))
-               uiapplication->landscapeimg = ASCII(xmlTextReaderGetAttribute(reader, XMLCHAR("landscape-effectimage")));
-       else
-               uiapplication->landscapeimg = NULL;
-       if (xmlTextReaderGetAttribute(reader, XMLCHAR("guestmode-visibility"))) {
-               uiapplication->guestmode_visibility = ASCII(xmlTextReaderGetAttribute(reader, XMLCHAR("guestmode-visibility")));
-               if (uiapplication->guestmode_visibility == NULL)
-                       uiapplication->guestmode_visibility = strdup("true");
-       } else {
-               uiapplication->guestmode_visibility = strdup("true");
-       }
-       if (xmlTextReaderGetAttribute(reader, XMLCHAR("permission-type"))) {
-               uiapplication->permission_type = ASCII(xmlTextReaderGetAttribute(reader, XMLCHAR("permission-type")));
-               if (uiapplication->permission_type == NULL)
-                       uiapplication->permission_type = strdup("normal");
-       } else {
-               uiapplication->permission_type = strdup("normal");
-       }
-       if (xmlTextReaderGetAttribute(reader, XMLCHAR("component-type"))) {
-               uiapplication->component_type = ASCII(xmlTextReaderGetAttribute(reader, XMLCHAR("component-type")));
-               if (uiapplication->component_type == NULL) {
-                       uiapplication->component_type = strdup("uiapp");
-               } else {
-                       /*component_type has "svcapp" or "uiapp", if it is not, parsing manifest is fail*/
-                       if (strcmp(uiapplication->component_type, "svcapp") != 0) {
-                               if (strcmp(uiapplication->component_type, "uiapp") != 0) {
-                                       _LOGD("invalid component_type[%s]\n", uiapplication->component_type);
-                                       return -1;
-                               }
-                       }
-               }
-       } else {
-               uiapplication->component_type = strdup("uiapp");
-       }
-       if (xmlTextReaderGetAttribute(reader, XMLCHAR("submode"))) {
-               uiapplication->submode = ASCII(xmlTextReaderGetAttribute(reader, XMLCHAR("submode")));
-               if (uiapplication->submode == NULL)
-                       uiapplication->submode = strdup("false");
-       } else {
-               uiapplication->submode = strdup("false");
-       }
-       if (xmlTextReaderGetAttribute(reader, XMLCHAR("submode-mainid")))
-               uiapplication->submode_mainid = ASCII(xmlTextReaderGetAttribute(reader, XMLCHAR("submode-mainid")));
-       if (xmlTextReaderGetAttribute(reader, XMLCHAR("process-pool"))) {
-               uiapplication->process_pool= ASCII(xmlTextReaderGetAttribute(reader, XMLCHAR("process-pool")));
-               if (uiapplication->process_pool == NULL)
-                       uiapplication->process_pool = strdup("false");
-       } else {
-               uiapplication->process_pool = strdup("false");
-       }
-       if (xmlTextReaderGetAttribute(reader, XMLCHAR("auto-restart"))) {
-               uiapplication->autorestart= ASCII(xmlTextReaderGetAttribute(reader, XMLCHAR("auto-restart")));
-               if (uiapplication->autorestart == NULL)
-                       uiapplication->autorestart = strdup("false");
-       } else {
-               uiapplication->autorestart = strdup("false");
-       }
-       if (xmlTextReaderGetAttribute(reader, XMLCHAR("on-boot"))) {
-               uiapplication->onboot= ASCII(xmlTextReaderGetAttribute(reader, XMLCHAR("on-boot")));
-               if (uiapplication->onboot == NULL)
-                       uiapplication->onboot = strdup("false");
-       } else {
-               uiapplication->onboot = strdup("false");
-       }
-
-       depth = xmlTextReaderDepth(reader);
-       while ((ret = __next_child_element(reader, depth))) {
-               node = xmlTextReaderConstName(reader);
-               if (!node) {
-                       _LOGD("xmlTextReaderConstName value is NULL\n");
-                       return -1;
-               }
-               if (!strcmp(ASCII(node), "label")) {
-                       label_x *label = malloc(sizeof(label_x));
-                       if (label == NULL) {
-                               _LOGD("Malloc Failed\n");
-                               return -1;
-                       }
-                       memset(label, '\0', sizeof(label_x));
-                       LISTADD(uiapplication->label, label);
-                       ret = __ps_process_label(reader, label);
-               } else if (!strcmp(ASCII(node), "icon")) {
-                       icon_x *icon = malloc(sizeof(icon_x));
-                       if (icon == NULL) {
-                               _LOGD("Malloc Failed\n");
-                               return -1;
-                       }
-                       memset(icon, '\0', sizeof(icon_x));
-                       LISTADD(uiapplication->icon, icon);
-                       ret = __ps_process_icon(reader, icon);
-               } else if (!strcmp(ASCII(node), "image")) {
-                       image_x *image = malloc(sizeof(image_x));
-                       if (image == NULL) {
-                               _LOGD("Malloc Failed\n");
-                               return -1;
-                       }
-                       memset(image, '\0', sizeof(image_x));
-                       LISTADD(uiapplication->image, image);
-                       ret = __ps_process_image(reader, image);
-               } else if (!strcmp(ASCII(node), "category")) {
-                       category_x *category = malloc(sizeof(category_x));
-                       if (category == NULL) {
-                               _LOGD("Malloc Failed\n");
-                               return -1;
-                       }
-                       memset(category, '\0', sizeof(category_x));
-                       LISTADD(uiapplication->category, category);
-                       ret = __ps_process_category(reader, category);
-               } else if (!strcmp(ASCII(node), "metadata")) {
-                       metadata_x *metadata = malloc(sizeof(metadata_x));
-                       if (metadata == NULL) {
-                               _LOGD("Malloc Failed\n");
-                               return -1;
-                       }
-                       memset(metadata, '\0', sizeof(metadata_x));
-                       LISTADD(uiapplication->metadata, metadata);
-                       ret = __ps_process_metadata(reader, metadata);
-               } else if (!strcmp(ASCII(node), "permission")) {
-                       permission_x *permission = malloc(sizeof(permission_x));
-                       if (permission == NULL) {
-                               _LOGD("Malloc Failed\n");
-                               return -1;
-                       }
-                       memset(permission, '\0', sizeof(permission_x));
-                       LISTADD(uiapplication->permission, permission);
-                       ret = __ps_process_permission(reader, permission);
-               } else if (!strcmp(ASCII(node), "app-control")) {
-                       appcontrol_x *appcontrol = malloc(sizeof(appcontrol_x));
-                       if (appcontrol == NULL) {
-                               _LOGD("Malloc Failed\n");
-                               return -1;
-                       }
-                       memset(appcontrol, '\0', sizeof(appcontrol_x));
-                       LISTADD(uiapplication->appcontrol, appcontrol);
-                       ret = __ps_process_appcontrol(reader, appcontrol);
-               } else if (!strcmp(ASCII(node), "application-service")) {
-                       appsvc_x *appsvc = malloc(sizeof(appsvc_x));
-                       if (appsvc == NULL) {
-                               _LOGD("Malloc Failed\n");
-                               return -1;
-                       }
-                       memset(appsvc, '\0', sizeof(appsvc_x));
-                       LISTADD(uiapplication->appsvc, appsvc);
-                       ret = __ps_process_appsvc(reader, appsvc);
-               } else if (!strcmp(ASCII(node), "data-share")) {
-                       datashare_x *datashare = malloc(sizeof(datashare_x));
-                       if (datashare == NULL) {
-                               _LOGD("Malloc Failed\n");
-                               return -1;
-                       }
-                       memset(datashare, '\0', sizeof(datashare_x));
-                       LISTADD(uiapplication->datashare, datashare);
-                       ret = __ps_process_datashare(reader, datashare);
-               } else if (!strcmp(ASCII(node), "launch-conditions")) {
-                       launchconditions_x *launchconditions = malloc(sizeof(launchconditions_x));
-                       if (launchconditions == NULL) {
-                               _LOGD("Malloc Failed\n");
-                               return -1;
-                       }
-                       memset(launchconditions, '\0', sizeof(launchconditions_x));
-                       LISTADD(uiapplication->launchconditions, launchconditions);
-                       ret = __ps_process_launchconditions(reader, launchconditions);
-               } else if (!strcmp(ASCII(node), "notification")) {
-                       notification_x *notification = malloc(sizeof(notification_x));
-                       if (notification == NULL) {
+       __save_xml_lang(reader, &description->lang);
+       __save_xml_value(reader, &description->text);
+
+       return 0;
+}
+
+static int __ps_process_license(xmlTextReaderPtr reader, license_x *license)
+{
+       __save_xml_lang(reader, &license->lang);
+       __save_xml_value(reader, &license->text);
+
+       return 0;
+}
+
+static int __ps_process_capability(xmlTextReaderPtr reader, capability_x *capability)
+{
+       const xmlChar *node;
+       int ret = -1;
+       int depth = -1;
+       resolution_x *tmp1 = NULL;
+
+       __save_xml_attribute(reader, "operation-id", &capability->operationid, NULL);
+
+       depth = xmlTextReaderDepth(reader);
+       while ((ret = __next_child_element(reader, depth))) {
+               node = xmlTextReaderConstName(reader);
+               if (!node) {
+                       _LOGD("xmlTextReaderConstName value is NULL\n");
+                       return -1;
+               }
+
+               if (!strcmp(ASCII(node), "resolution")) {
+                       resolution_x *resolution = malloc(sizeof(resolution_x));
+                       if (resolution == NULL) {
                                _LOGD("Malloc Failed\n");
                                return -1;
                        }
-                       memset(notification, '\0', sizeof(notification_x));
-                       LISTADD(uiapplication->notification, notification);
-                       ret = __ps_process_notification(reader, notification);
+                       memset(resolution, '\0', sizeof(resolution_x));
+                       LISTADD(capability->resolution, resolution);
+                       ret = __ps_process_resolution(reader, resolution);
                } else
                        return -1;
                if (ret < 0) {
-                       _LOGD("Processing uiapplication failed\n");
+                       _LOGD("Processing capability failed\n");
                        return ret;
                }
        }
 
-       if (uiapplication->label) {
-               LISTHEAD(uiapplication->label, tmp1);
-               uiapplication->label = tmp1;
-       }
-       if (uiapplication->icon) {
-               LISTHEAD(uiapplication->icon, tmp2);
-               uiapplication->icon = tmp2;
-       }
-       if (uiapplication->appsvc) {
-               LISTHEAD(uiapplication->appsvc, tmp3);
-               uiapplication->appsvc = tmp3;
-       }
-       if (uiapplication->appcontrol) {
-               LISTHEAD(uiapplication->appcontrol, tmp4);
-               uiapplication->appcontrol = tmp4;
-       }
-       if (uiapplication->launchconditions) {
-               LISTHEAD(uiapplication->launchconditions, tmp5);
-               uiapplication->launchconditions = tmp5;
-       }
-       if (uiapplication->notification) {
-               LISTHEAD(uiapplication->notification, tmp6);
-               uiapplication->notification = tmp6;
-       }
-       if (uiapplication->datashare) {
-               LISTHEAD(uiapplication->datashare, tmp7);
-               uiapplication->datashare = tmp7;
-       }
-       if (uiapplication->category) {
-               LISTHEAD(uiapplication->category, tmp8);
-               uiapplication->category = tmp8;
-       }
-       if (uiapplication->metadata) {
-               LISTHEAD(uiapplication->metadata, tmp9);
-               uiapplication->metadata = tmp9;
-       }
-       if (uiapplication->image) {
-               LISTHEAD(uiapplication->image, tmp10);
-               uiapplication->image = tmp10;
-       }
-       if (uiapplication->permission) {
-               LISTHEAD(uiapplication->permission, tmp11);
-               uiapplication->permission = tmp11;
-       }
+       SAFE_LISTHEAD(capability->resolution, tmp1);
 
        return ret;
 }
 
-static int __ps_process_serviceapplication(xmlTextReaderPtr reader, serviceapplication_x *serviceapplication)
+static int __ps_process_datacontrol(xmlTextReaderPtr reader, datacontrol_x *datacontrol)
+{
+       __save_xml_attribute(reader, "providerid", &datacontrol->providerid, NULL);
+       __save_xml_attribute(reader, "access", &datacontrol->access, NULL);
+       __save_xml_attribute(reader, "type", &datacontrol->type, NULL);
+
+       return 0;
+}
+
+static int __ps_process_uiapplication(xmlTextReaderPtr reader, uiapplication_x *uiapplication)
 {
        const xmlChar *node;
        int ret = -1;
        int depth = -1;
-       char *newappid = NULL;
        label_x *tmp1 = NULL;
        icon_x *tmp2 = NULL;
        appsvc_x *tmp3 = NULL;
-       appcontrol_x *tmp4 = NULL;
-       datacontrol_x *tmp5 = NULL;
-       launchconditions_x *tmp6 = NULL;
-       notification_x *tmp7 = NULL;
-       datashare_x *tmp8 = NULL;
-       category_x *tmp9 = NULL;
-       metadata_x *tmp10 = NULL;
-       permission_x *tmp11 = NULL;
-
-       if (xmlTextReaderGetAttribute(reader, XMLCHAR("appid"))) {
-               serviceapplication->appid = ASCII(xmlTextReaderGetAttribute(reader, XMLCHAR("appid")));
-               if (serviceapplication->appid == NULL) {
-                       _LOGD("appid cant be NULL\n");
-                       return -1;
-               }
-       } else {
-               _LOGD("appid is mandatory\n");
-               return -1;
-       }
-       /*check appid*/
-       ret = __validate_appid(package, serviceapplication->appid, &newappid);
-       if (ret == -1) {
-               _LOGD("appid is not proper\n");
-               return -1;
-       } else {
-               if (newappid) {
-                       if (serviceapplication->appid)
-                               free((void *)serviceapplication->appid);
-                       serviceapplication->appid = newappid;
-               }
-       }
-       if (xmlTextReaderGetAttribute(reader, XMLCHAR("exec")))
-               serviceapplication->exec = ASCII(xmlTextReaderGetAttribute(reader, XMLCHAR("exec")));
-       if (xmlTextReaderGetAttribute(reader, XMLCHAR("type")))
-               serviceapplication->type = ASCII(xmlTextReaderGetAttribute(reader, XMLCHAR("type")));
-       if (xmlTextReaderGetAttribute(reader, XMLCHAR("on-boot"))) {
-               serviceapplication->onboot = ASCII(xmlTextReaderGetAttribute(reader, XMLCHAR("on-boot")));
-               if (serviceapplication->onboot == NULL)
-                       serviceapplication->onboot = strdup("false");
-       } else {
-               serviceapplication->onboot = strdup("false");
-       }
-       if (xmlTextReaderGetAttribute(reader, XMLCHAR("auto-restart"))) {
-               serviceapplication->autorestart = ASCII(xmlTextReaderGetAttribute(reader, XMLCHAR("auto-restart")));
-               if (serviceapplication->autorestart == NULL)
-                       serviceapplication->autorestart = strdup("false");
-       } else {
-               serviceapplication->autorestart = strdup("false");
-       }
-       if (xmlTextReaderGetAttribute(reader, XMLCHAR("permission-type"))) {
-               serviceapplication->permission_type = ASCII(xmlTextReaderGetAttribute(reader, XMLCHAR("permission-type")));
-               if (serviceapplication->permission_type == NULL)
-                       serviceapplication->permission_type = strdup("normal");
-       } else {
-               serviceapplication->permission_type = strdup("normal");
-       }
+       launchconditions_x *tmp4 = NULL;
+       notification_x *tmp5 = NULL;
+       datashare_x *tmp6 = NULL;
+       category_x *tmp7 = NULL;
+       metadata_x *tmp8 = NULL;
+       image_x *tmp9 = NULL;
+       permission_x *tmp10 = NULL;
+       datacontrol_x *tmp11 = NULL;
+
+       __save_xml_attribute(reader, "appid", &uiapplication->appid, NULL);
+       retvm_if(uiapplication->appid == NULL, PM_PARSER_R_ERROR, "appid cant be NULL, appid field is mandatory\n");
+       __save_xml_attribute(reader, "exec", &uiapplication->exec, NULL);
+       __save_xml_attribute(reader, "nodisplay", &uiapplication->nodisplay, "false");
+       __save_xml_attribute(reader, "multiple", &uiapplication->multiple, "false");
+       __save_xml_attribute(reader, "type", &uiapplication->type, NULL);
+       __save_xml_attribute(reader, "categories", &uiapplication->categories, NULL);
+       __save_xml_attribute(reader, "extraid", &uiapplication->extraid, NULL);
+       __save_xml_attribute(reader, "taskmanage", &uiapplication->taskmanage, "true");
+       __save_xml_attribute(reader, "enabled", &uiapplication->enabled, "true");
+       __save_xml_attribute(reader, "hw-acceleration", &uiapplication->hwacceleration, "use-system-setting");
+       __save_xml_attribute(reader, "screen-reader", &uiapplication->screenreader, "use-system-setting");
+       __save_xml_attribute(reader, "mainapp", &uiapplication->mainapp, "false");
+       __save_xml_attribute(reader, "recentimage", &uiapplication->recentimage, "false");
+       __save_xml_attribute(reader, "launchcondition", &uiapplication->launchcondition, "false");
+       __save_xml_attribute(reader, "indicatordisplay", &uiapplication->indicatordisplay, "true");
+       __save_xml_attribute(reader, "portrait-effectimage", &uiapplication->portraitimg, NULL);
+       __save_xml_attribute(reader, "landscape-effectimage", &uiapplication->landscapeimg, NULL);
+       __save_xml_attribute(reader, "effectimage-type", &uiapplication->effectimage_type, "image");
+       __save_xml_attribute(reader, "guestmode-visibility", &uiapplication->guestmode_visibility, "true");
+       __save_xml_attribute(reader, "permission-type", &uiapplication->permission_type, "normal");
+       __save_xml_attribute(reader, "component-type", &uiapplication->component_type, "uiapp");
+       /*component_type has "svcapp" or "uiapp", if it is not, parsing manifest is fail*/
+       retvm_if(((strcmp(uiapplication->component_type, "svcapp") != 0) && (strcmp(uiapplication->component_type, "uiapp") != 0)), PM_PARSER_R_ERROR, "invalid component_type[%s]\n", uiapplication->component_type);
+       __save_xml_attribute(reader, "submode", &uiapplication->submode, "false");
+       __save_xml_attribute(reader, "submode-mainid", &uiapplication->submode_mainid, NULL);
+       __save_xml_attribute(reader, "process-pool", &uiapplication->process_pool, "false");
+       __save_xml_attribute(reader, "auto-restart", &uiapplication->autorestart, "false");
+       __save_xml_attribute(reader, "on-boot", &uiapplication->onboot, "false");
+       __save_xml_attribute(reader, "multi-instance", &uiapplication->multi_instance, "false");
+       __save_xml_attribute(reader, "multi-instance-mainid", &uiapplication->multi_instance_mainid, NULL);
+       __save_xml_attribute(reader, "ui-gadget", &uiapplication->ui_gadget, "false");
+       uiapplication->multi_window = strdup("false");
+       uiapplication->package= strdup(package);
 
        depth = xmlTextReaderDepth(reader);
        while ((ret = __next_child_element(reader, depth))) {
@@ -2626,7 +962,6 @@ static int __ps_process_serviceapplication(xmlTextReaderPtr reader, serviceappli
                        _LOGD("xmlTextReaderConstName value is NULL\n");
                        return -1;
                }
-
                if (!strcmp(ASCII(node), "label")) {
                        label_x *label = malloc(sizeof(label_x));
                        if (label == NULL) {
@@ -2634,7 +969,7 @@ static int __ps_process_serviceapplication(xmlTextReaderPtr reader, serviceappli
                                return -1;
                        }
                        memset(label, '\0', sizeof(label_x));
-                       LISTADD(serviceapplication->label, label);
+                       LISTADD(uiapplication->label, label);
                        ret = __ps_process_label(reader, label);
                } else if (!strcmp(ASCII(node), "icon")) {
                        icon_x *icon = malloc(sizeof(icon_x));
@@ -2643,8 +978,17 @@ static int __ps_process_serviceapplication(xmlTextReaderPtr reader, serviceappli
                                return -1;
                        }
                        memset(icon, '\0', sizeof(icon_x));
-                       LISTADD(serviceapplication->icon, icon);
+                       LISTADD(uiapplication->icon, icon);
                        ret = __ps_process_icon(reader, icon);
+               } else if (!strcmp(ASCII(node), "image")) {
+                       image_x *image = malloc(sizeof(image_x));
+                       if (image == NULL) {
+                               _LOGD("Malloc Failed\n");
+                               return -1;
+                       }
+                       memset(image, '\0', sizeof(image_x));
+                       LISTADD(uiapplication->image, image);
+                       ret = __ps_process_image(reader, image);
                } else if (!strcmp(ASCII(node), "category")) {
                        category_x *category = malloc(sizeof(category_x));
                        if (category == NULL) {
@@ -2652,7 +996,7 @@ static int __ps_process_serviceapplication(xmlTextReaderPtr reader, serviceappli
                                return -1;
                        }
                        memset(category, '\0', sizeof(category_x));
-                       LISTADD(serviceapplication->category, category);
+                       LISTADD(uiapplication->category, category);
                        ret = __ps_process_category(reader, category);
                } else if (!strcmp(ASCII(node), "metadata")) {
                        metadata_x *metadata = malloc(sizeof(metadata_x));
@@ -2661,8 +1005,13 @@ static int __ps_process_serviceapplication(xmlTextReaderPtr reader, serviceappli
                                return -1;
                        }
                        memset(metadata, '\0', sizeof(metadata_x));
-                       LISTADD(serviceapplication->metadata, metadata);
+                       LISTADD(uiapplication->metadata, metadata);
                        ret = __ps_process_metadata(reader, metadata);
+                       // multiwindow check
+                       if (strcmp(metadata->key, "http://developer.samsung.com/tizen/metadata/multiwindow") == 0)
+                               FREE_AND_STRDUP("true", uiapplication->multi_window);
+
+                       __save_xml_supportfeature(metadata->key, uiapplication);
                } else if (!strcmp(ASCII(node), "permission")) {
                        permission_x *permission = malloc(sizeof(permission_x));
                        if (permission == NULL) {
@@ -2670,25 +1019,25 @@ static int __ps_process_serviceapplication(xmlTextReaderPtr reader, serviceappli
                                return -1;
                        }
                        memset(permission, '\0', sizeof(permission_x));
-                       LISTADD(serviceapplication->permission, permission);
+                       LISTADD(uiapplication->permission, permission);
                        ret = __ps_process_permission(reader, permission);
-               } else if (!strcmp(ASCII(node), "app-control")) {
-                       appcontrol_x *appcontrol = malloc(sizeof(appcontrol_x));
-                       if (appcontrol == NULL) {
+               } else if (!strcmp(ASCII(node), "application-service")) {
+                       appsvc_x *appsvc = malloc(sizeof(appsvc_x));
+                       if (appsvc == NULL) {
                                _LOGD("Malloc Failed\n");
                                return -1;
                        }
-                       memset(appcontrol, '\0', sizeof(appcontrol_x));
-                       LISTADD(serviceapplication->appcontrol, appcontrol);
-                       ret = __ps_process_appcontrol(reader, appcontrol);
-               } else if (!strcmp(ASCII(node), "application-service")) {
+                       memset(appsvc, '\0', sizeof(appsvc_x));
+                       LISTADD(uiapplication->appsvc, appsvc);
+                       ret = __ps_process_appsvc(reader, appsvc);
+               } else if (!strcmp(ASCII(node), "app-control")) {
                        appsvc_x *appsvc = malloc(sizeof(appsvc_x));
                        if (appsvc == NULL) {
                                _LOGD("Malloc Failed\n");
                                return -1;
                        }
                        memset(appsvc, '\0', sizeof(appsvc_x));
-                       LISTADD(serviceapplication->appsvc, appsvc);
+                       LISTADD(uiapplication->appsvc, appsvc);
                        ret = __ps_process_appsvc(reader, appsvc);
                } else if (!strcmp(ASCII(node), "data-share")) {
                        datashare_x *datashare = malloc(sizeof(datashare_x));
@@ -2697,7 +1046,7 @@ static int __ps_process_serviceapplication(xmlTextReaderPtr reader, serviceappli
                                return -1;
                        }
                        memset(datashare, '\0', sizeof(datashare_x));
-                       LISTADD(serviceapplication->datashare, datashare);
+                       LISTADD(uiapplication->datashare, datashare);
                        ret = __ps_process_datashare(reader, datashare);
                } else if (!strcmp(ASCII(node), "launch-conditions")) {
                        launchconditions_x *launchconditions = malloc(sizeof(launchconditions_x));
@@ -2706,7 +1055,7 @@ static int __ps_process_serviceapplication(xmlTextReaderPtr reader, serviceappli
                                return -1;
                        }
                        memset(launchconditions, '\0', sizeof(launchconditions_x));
-                       LISTADD(serviceapplication->launchconditions, launchconditions);
+                       LISTADD(uiapplication->launchconditions, launchconditions);
                        ret = __ps_process_launchconditions(reader, launchconditions);
                } else if (!strcmp(ASCII(node), "notification")) {
                        notification_x *notification = malloc(sizeof(notification_x));
@@ -2715,69 +1064,36 @@ static int __ps_process_serviceapplication(xmlTextReaderPtr reader, serviceappli
                                return -1;
                        }
                        memset(notification, '\0', sizeof(notification_x));
-                       LISTADD(serviceapplication->notification, notification);
+                       LISTADD(uiapplication->notification, notification);
                        ret = __ps_process_notification(reader, notification);
-               } else if (!strcmp(ASCII(node), "data-control")) {
+               } else if (!strcmp(ASCII(node), "datacontrol")) {
                        datacontrol_x *datacontrol = malloc(sizeof(datacontrol_x));
                        if (datacontrol == NULL) {
                                _LOGD("Malloc Failed\n");
                                return -1;
                        }
                        memset(datacontrol, '\0', sizeof(datacontrol_x));
-                       LISTADD(serviceapplication->datacontrol, datacontrol);
+                       LISTADD(uiapplication->datacontrol, datacontrol);
                        ret = __ps_process_datacontrol(reader, datacontrol);
                } else
                        return -1;
                if (ret < 0) {
-                       _LOGD("Processing serviceapplication failed\n");
+                       _LOGD("Processing uiapplication failed\n");
                        return ret;
                }
        }
 
-       if (serviceapplication->label) {
-               LISTHEAD(serviceapplication->label, tmp1);
-               serviceapplication->label = tmp1;
-       }
-       if (serviceapplication->icon) {
-               LISTHEAD(serviceapplication->icon, tmp2);
-               serviceapplication->icon = tmp2;
-       }
-       if (serviceapplication->appsvc) {
-               LISTHEAD(serviceapplication->appsvc, tmp3);
-               serviceapplication->appsvc = tmp3;
-       }
-       if (serviceapplication->appcontrol) {
-               LISTHEAD(serviceapplication->appcontrol, tmp4);
-               serviceapplication->appcontrol = tmp4;
-       }
-       if (serviceapplication->datacontrol) {
-               LISTHEAD(serviceapplication->datacontrol, tmp5);
-               serviceapplication->datacontrol = tmp5;
-       }
-       if (serviceapplication->launchconditions) {
-               LISTHEAD(serviceapplication->launchconditions, tmp6);
-               serviceapplication->launchconditions = tmp6;
-       }
-       if (serviceapplication->notification) {
-               LISTHEAD(serviceapplication->notification, tmp7);
-               serviceapplication->notification = tmp7;
-       }
-       if (serviceapplication->datashare) {
-               LISTHEAD(serviceapplication->datashare, tmp8);
-               serviceapplication->datashare = tmp8;
-       }
-       if (serviceapplication->category) {
-               LISTHEAD(serviceapplication->category, tmp9);
-               serviceapplication->category = tmp9;
-       }
-       if (serviceapplication->metadata) {
-               LISTHEAD(serviceapplication->metadata, tmp10);
-               serviceapplication->metadata = tmp10;
-       }
-       if (serviceapplication->permission) {
-               LISTHEAD(serviceapplication->permission, tmp11);
-               serviceapplication->permission = tmp11;
-       }
+       SAFE_LISTHEAD(uiapplication->label, tmp1);
+       SAFE_LISTHEAD(uiapplication->icon, tmp2);
+       SAFE_LISTHEAD(uiapplication->appsvc, tmp3);
+       SAFE_LISTHEAD(uiapplication->launchconditions, tmp4);
+       SAFE_LISTHEAD(uiapplication->notification, tmp5);
+       SAFE_LISTHEAD(uiapplication->datashare, tmp6);
+       SAFE_LISTHEAD(uiapplication->category, tmp7);
+       SAFE_LISTHEAD(uiapplication->metadata, tmp8);
+       SAFE_LISTHEAD(uiapplication->image, tmp9);
+       SAFE_LISTHEAD(uiapplication->permission, tmp10);
+       SAFE_LISTHEAD(uiapplication->datacontrol, tmp11);
 
        return ret;
 }
@@ -2785,6 +1101,7 @@ static int __ps_process_serviceapplication(xmlTextReaderPtr reader, serviceappli
 static int __ps_process_deviceprofile(xmlTextReaderPtr reader, deviceprofile_x *deviceprofile)
 {
        /*TODO: once policy is set*/
+       __save_xml_attribute(reader, "name", &deviceprofile->name, NULL);
        return 0;
 }
 
@@ -2823,15 +1140,14 @@ static int __start_process(xmlTextReaderPtr reader, manifest_x * mfx)
        description_x *tmp3 = NULL;
        license_x *tmp4 = NULL;
        uiapplication_x *tmp5 = NULL;
-       serviceapplication_x *tmp6 = NULL;
-       daemon_x *tmp7 = NULL;
-       theme_x *tmp8 = NULL;
-       font_x *tmp9 = NULL;
-       ime_x *tmp10 = NULL;
-       icon_x *tmp11 = NULL;
-       compatibility_x *tmp12 = NULL;
-       deviceprofile_x *tmp13 = NULL;
-       privileges_x *tmp14 = NULL;
+       daemon_x *tmp6 = NULL;
+       theme_x *tmp7 = NULL;
+       font_x *tmp8 = NULL;
+       ime_x *tmp9 = NULL;
+       icon_x *tmp10 = NULL;
+       compatibility_x *tmp11 = NULL;
+       deviceprofile_x *tmp12 = NULL;
+       privileges_x *tmp13 = NULL;
 
        depth = xmlTextReaderDepth(reader);
        while ((ret = __next_child_element(reader, depth))) {
@@ -2896,14 +1212,15 @@ static int __start_process(xmlTextReaderPtr reader, manifest_x * mfx)
                        LISTADD(mfx->uiapplication, uiapplication);
                        ret = __ps_process_uiapplication(reader, uiapplication);
                } else if (!strcmp(ASCII(node), "service-application")) {
-                       serviceapplication_x *serviceapplication = malloc(sizeof(serviceapplication_x));
-                       if (serviceapplication == NULL) {
+                       uiapplication_x *uiapplication = malloc(sizeof(uiapplication_x));
+                       if (uiapplication == NULL) {
                                _LOGD("Malloc Failed\n");
                                return -1;
                        }
-                       memset(serviceapplication, '\0', sizeof(serviceapplication_x));
-                       LISTADD(mfx->serviceapplication, serviceapplication);
-                       ret = __ps_process_serviceapplication(reader, serviceapplication);
+                       memset(uiapplication, '\0', sizeof(uiapplication_x));
+                       LISTADD(mfx->uiapplication, uiapplication);
+                       ret = __ps_process_uiapplication(reader, uiapplication);
+                       FREE_AND_STRDUP("svcapp", uiapplication->component_type);
                } else if (!strcmp(ASCII(node), "daemon")) {
                        daemon_x *daemon = malloc(sizeof(daemon_x));
                        if (daemon == NULL) {
@@ -2949,7 +1266,7 @@ static int __start_process(xmlTextReaderPtr reader, manifest_x * mfx)
                        memset(icon, '\0', sizeof(icon_x));
                        LISTADD(mfx->icon, icon);
                        ret = __ps_process_icon(reader, icon);
-               } else if (!strcmp(ASCII(node), "device-profile")) {
+               } else if (!strcmp(ASCII(node), "profile")) {
                        deviceprofile_x *deviceprofile = malloc(sizeof(deviceprofile_x));
                        if (deviceprofile == NULL) {
                                _LOGD("Malloc Failed\n");
@@ -2969,7 +1286,9 @@ static int __start_process(xmlTextReaderPtr reader, manifest_x * mfx)
                        ret = __ps_process_compatibility(reader, compatibility);
                } else if (!strcmp(ASCII(node), "shortcut-list")) {
                        continue;
-               } else if (!strcmp(ASCII(node), "livebox")) {
+               } else if (!strcmp(ASCII(node), "livebox")) {   /**< @todo will be deprecated soon */
+                       continue;
+               } else if (!strcmp(ASCII(node), "dynamicbox")) {
                        continue;
                } else if (!strcmp(ASCII(node), "account")) {
                        continue;
@@ -2985,62 +1304,21 @@ static int __start_process(xmlTextReaderPtr reader, manifest_x * mfx)
                        return ret;
                }
        }
-       if (mfx->label) {
-               LISTHEAD(mfx->label, tmp1);
-               mfx->label = tmp1;
-       }
-       if (mfx->author) {
-               LISTHEAD(mfx->author, tmp2);
-               mfx->author = tmp2;
-       }
-       if (mfx->description) {
-               LISTHEAD(mfx->description, tmp3);
-               mfx->description= tmp3;
-       }
-       if (mfx->license) {
-               LISTHEAD(mfx->license, tmp4);
-               mfx->license= tmp4;
-       }
-       if (mfx->uiapplication) {
-               LISTHEAD(mfx->uiapplication, tmp5);
-               mfx->uiapplication = tmp5;
-       }
-       if (mfx->serviceapplication) {
-               LISTHEAD(mfx->serviceapplication, tmp6);
-               mfx->serviceapplication = tmp6;
-       }
-       if (mfx->daemon) {
-               LISTHEAD(mfx->daemon, tmp7);
-               mfx->daemon= tmp7;
-       }
-       if (mfx->theme) {
-               LISTHEAD(mfx->theme, tmp8);
-               mfx->theme= tmp8;
-       }
-       if (mfx->font) {
-               LISTHEAD(mfx->font, tmp9);
-               mfx->font= tmp9;
-       }
-       if (mfx->ime) {
-               LISTHEAD(mfx->ime, tmp10);
-               mfx->ime= tmp10;
-       }
-       if (mfx->icon) {
-               LISTHEAD(mfx->icon, tmp11);
-               mfx->icon= tmp11;
-       }
-       if (mfx->compatibility) {
-               LISTHEAD(mfx->compatibility, tmp12);
-               mfx->compatibility= tmp12;
-       }
-       if (mfx->deviceprofile) {
-               LISTHEAD(mfx->deviceprofile, tmp13);
-               mfx->deviceprofile= tmp13;
-       }
-       if (mfx->privileges) {
-               LISTHEAD(mfx->privileges, tmp14);
-               mfx->privileges = tmp14;
-       }
+
+       SAFE_LISTHEAD(mfx->label, tmp1);
+       SAFE_LISTHEAD(mfx->author, tmp2);
+       SAFE_LISTHEAD(mfx->description, tmp3);
+       SAFE_LISTHEAD(mfx->license, tmp4);
+       SAFE_LISTHEAD(mfx->uiapplication, tmp5);
+       SAFE_LISTHEAD(mfx->daemon, tmp6);
+       SAFE_LISTHEAD(mfx->theme, tmp7);
+       SAFE_LISTHEAD(mfx->font, tmp8);
+       SAFE_LISTHEAD(mfx->ime, tmp9);
+       SAFE_LISTHEAD(mfx->icon, tmp10);
+       SAFE_LISTHEAD(mfx->compatibility, tmp11);
+       SAFE_LISTHEAD(mfx->deviceprofile, tmp12);
+       SAFE_LISTHEAD(mfx->privileges, tmp13);
+
        return ret;
 }
 
@@ -3051,77 +1329,36 @@ static int __process_manifest(xmlTextReaderPtr reader, manifest_x * mfx)
 
        if ((ret = __next_child_element(reader, -1))) {
                node = xmlTextReaderConstName(reader);
-               if (!node) {
-                       _LOGD("xmlTextReaderConstName value is NULL\n");
-                       return -1;
-               }
+               retvm_if(!node, PM_PARSER_R_ERROR, "xmlTextReaderConstName value is NULL\n");
 
                if (!strcmp(ASCII(node), "manifest")) {
-                       if (xmlTextReaderGetAttribute(reader, XMLCHAR("xmlns")))
-                               mfx->ns = ASCII(xmlTextReaderGetAttribute(reader, XMLCHAR("xmlns")));
-                       if (xmlTextReaderGetAttribute(reader, XMLCHAR("package"))) {
-                               mfx->package= ASCII(xmlTextReaderGetAttribute(reader, XMLCHAR("package")));
-                               if (mfx->package == NULL) {
-                                       _LOGD("package cant be NULL\n");
-                                       return -1;
-                               }
-                       } else {
-                               _LOGD("package field is mandatory\n");
-                               return -1;
-                       }
-                       package = mfx->package;
-                       if (xmlTextReaderGetAttribute(reader, XMLCHAR("version")))
-                               mfx->version= ASCII(xmlTextReaderGetAttribute(reader, XMLCHAR("version")));
-                       /*app2ext needs package size for external installation*/
-                       if (xmlTextReaderGetAttribute(reader, XMLCHAR("size")))
-                               mfx->package_size = ASCII(xmlTextReaderGetAttribute(reader, XMLCHAR("size")));
-                       if (xmlTextReaderGetAttribute(reader, XMLCHAR("install-location"))) {
-                               mfx->installlocation = ASCII(xmlTextReaderGetAttribute(reader, XMLCHAR("install-location")));
-                               if (mfx->installlocation == NULL)
-                                       mfx->installlocation = strdup("internal-only");
-                       } else {
-                               mfx->installlocation = strdup("internal-only");
-                       }
-                       if (xmlTextReaderGetAttribute(reader, XMLCHAR("type")))
-                               mfx->type = ASCII(xmlTextReaderGetAttribute(reader, XMLCHAR("type")));
-                       if (xmlTextReaderGetAttribute(reader, XMLCHAR("root_path")))
-                               mfx->root_path = ASCII(xmlTextReaderGetAttribute(reader, XMLCHAR("root_path")));
-                       if (xmlTextReaderGetAttribute(reader, XMLCHAR("csc_path")))
-                               mfx->csc_path = ASCII(xmlTextReaderGetAttribute(reader, XMLCHAR("csc_path")));
-                       if (xmlTextReaderGetAttribute(reader, XMLCHAR("appsetting"))) {
-                               mfx->appsetting = ASCII(xmlTextReaderGetAttribute(reader, XMLCHAR("appsetting")));
-                               if (mfx->appsetting == NULL)
-                                       mfx->appsetting = strdup("false");
+                       __save_xml_attribute(reader, "xmlns", &mfx->ns, NULL);
+                       __save_xml_attribute(reader, "package", &mfx->package, NULL);
+                       retvm_if(mfx->package == NULL, PM_PARSER_R_ERROR, "package cant be NULL, package field is mandatory\n");
+                       __save_xml_attribute(reader, "version", &mfx->version, NULL);
+                       __save_xml_attribute(reader, "size", &mfx->package_size, NULL);
+                       __save_xml_attribute(reader, "install-location", &mfx->installlocation, "internal-only");
+                       __save_xml_attribute(reader, "type", &mfx->type, NULL);
+                       __save_xml_attribute(reader, "root_path", &mfx->root_path, NULL);
+                       __save_xml_attribute(reader, "csc_path", &mfx->csc_path, NULL);
+                       __save_xml_attribute(reader, "appsetting", &mfx->appsetting, "false");
+                       __save_xml_attribute(reader, "storeclient-id", &mfx->storeclient_id, NULL);
+                       __save_xml_attribute(reader, "nodisplay-setting", &mfx->nodisplay_setting, "false");
+                       __save_xml_attribute(reader, "url", &mfx->package_url, NULL);
+                       __save_xml_attribute(reader, "support-disable", &mfx->support_disable, "false");
+                       __save_xml_attribute(reader, "mother-package", &mfx->mother_package, "false");
+
+                       /* need to check */
+                       if (xmlTextReaderGetAttribute(reader, XMLCHAR("support-reset"))) {
+                               mfx->support_reset = ASCII(xmlTextReaderGetAttribute(reader, XMLCHAR("support-reset")));
+                               mfx->use_reset = strdup("false");
                        } else {
-                               mfx->appsetting = strdup("false");
+                               mfx->use_reset = strdup("true");
                        }
-                       if (xmlTextReaderGetAttribute(reader, XMLCHAR("storeclient-id")))
-                               mfx->storeclient_id= ASCII(xmlTextReaderGetAttribute(reader, XMLCHAR("storeclient-id")));
-                       if (xmlTextReaderGetAttribute(reader, XMLCHAR("nodisplay-setting"))) {
-                               mfx->nodisplay_setting = ASCII(xmlTextReaderGetAttribute(reader, XMLCHAR("nodisplay-setting")));
-                               if (mfx->nodisplay_setting == NULL)
-                                       mfx->nodisplay_setting = strdup("false");
-                       } else {
-                               mfx->nodisplay_setting = strdup("false");
-                       }
-                       if (xmlTextReaderGetAttribute(reader, XMLCHAR("url")))
-                               mfx->package_url= ASCII(xmlTextReaderGetAttribute(reader, XMLCHAR("url")));
-
-                       /*Assign default values. If required it will be overwritten in __add_preload_info()*/
-                       mfx->preload = strdup("False");
-                       mfx->removable = strdup("True");
-                       mfx->readonly = strdup("False");
-                       mfx->update = strdup("False");
-                       mfx->system = strdup("False");
-                       char buf[PKG_STRING_LEN_MAX] = {'\0'};
-                       char *val = NULL;
-                       time_t current_time;
-                       time(&current_time);
-                       snprintf(buf, PKG_STRING_LEN_MAX - 1, "%d", (int)current_time);
-                       val = strndup(buf, PKG_STRING_LEN_MAX - 1);
-                       mfx->installed_time = val;
-
-                       mfx->installed_storage= strdup("installed_internal");
+
+                       __save_xml_supportmode(reader, mfx);
+                       __save_xml_installedtime(mfx);
+                       __save_xml_defaultvalue(mfx);
 
                        ret = __start_process(reader, mfx);
                } else {
@@ -3221,7 +1458,7 @@ static int __ps_make_nativeapp_desktop(manifest_x * mfx, const char *manifest, A
        buftemp = (char *)calloc(1, BUFMAX);
        if (!buftemp) {
                _LOGE("Malloc Failed\n");
-               free(buf);
+               FREE_AND_NULL(buf);
                return -1;
        }
 
@@ -3253,8 +1490,8 @@ static int __ps_make_nativeapp_desktop(manifest_x * mfx, const char *manifest, A
                if(file == NULL)
                {
                    _LOGS("Can't open %s", filepath);
-                   free(buf);
-                   free(buftemp);
+                   FREE_AND_NULL(buf);
+                   FREE_AND_NULL(buftemp);
                    return -1;
                }
 
@@ -3268,7 +1505,7 @@ static int __ps_make_nativeapp_desktop(manifest_x * mfx, const char *manifest, A
                                locale = __convert_to_system_locale(mfx->uiapplication->label->lang);
                                snprintf(buf, BUFMAX, "Name[%s]=%s\n", locale,
                                        mfx->uiapplication->label->text);
-                               free(locale);
+                               FREE_AND_NULL(locale);
                        }
                        fwrite(buf, 1, strlen(buf), file);
                }
@@ -3363,130 +1600,53 @@ static int __ps_make_nativeapp_desktop(manifest_x * mfx, const char *manifest, A
                if(mfx->uiapplication->hwacceleration) {
                        snprintf(buf, BUFMAX, "Hw-Acceleration=%s\n", mfx->uiapplication->hwacceleration);
                        fwrite(buf, 1, strlen(buf), file);
-               }
-
-               if(mfx->uiapplication->multiple && !strcasecmp(mfx->uiapplication->multiple, "True")) {
-                       snprintf(buf, BUFMAX, "X-TIZEN-Multiple=True\n");
-                       fwrite(buf, 1, strlen(buf), file);
-               }
-
-               if(mfx->uiapplication->extraid) {
-                       snprintf(buf, BUFMAX, "X-TIZEN-PackageID=%s\n", mfx->uiapplication->extraid);
-                       fwrite(buf, 1, strlen(buf), file);
-               }
-
-               if(mfx->removable && !strcasecmp(mfx->removable, "False")) {
-                       snprintf(buf, BUFMAX, "X-TIZEN-Removable=False\n");
-                       fwrite(buf, 1, strlen(buf), file);
-               }
-
-               if(mfx->type) {
-                       snprintf(buf, BUFMAX, "X-TIZEN-PackageType=%s\n", mfx->type);
-                       fwrite(buf, 1, strlen(buf), file);
-               }
-
-               if(mfx->uiapplication->submode && !strcasecmp(mfx->uiapplication->submode, "True")) {
-                       snprintf(buf, BUFMAX, "X-TIZEN-Submode=%s\n", mfx->uiapplication->submode);
-                       fwrite(buf, 1, strlen(buf), file);
-                       snprintf(buf, BUFMAX, "X-TIZEN-SubmodeMainid=%s\n", mfx->uiapplication->submode_mainid);
-                       fwrite(buf, 1, strlen(buf), file);
-               }
-
-               snprintf(buf, BUFMAX, "X-TIZEN-PkgID=%s\n", mfx->package);
-               fwrite(buf, 1, strlen(buf), file);
-
-
-               snprintf(buf, BUFMAX, "X-TIZEN-InstalledStorage=%s\n", mfx->installed_storage);
-               fwrite(buf, 1, strlen(buf), file);
-
-//             snprintf(buf, BUFMAX, "X-TIZEN-PackageType=rpm\n");
-//             fwrite(buf, 1, strlen(buf), file);
-
-
-               if(mfx->uiapplication->appsvc) {
-                       snprintf(buf, BUFMAX, "X-TIZEN-Svc=");
-                       _LOGD("buf[%s]\n", buf);
-
-
-                       uiapplication_x *up = mfx->uiapplication;
-                       appsvc_x *asvc = NULL;
-                       operation_x *op = NULL;
-                       mime_x *mi = NULL;
-                       uri_x *ui = NULL;
-                       subapp_x *sub = NULL;
-                       const char *operation = NULL;
-                       const char *mime = NULL;
-                       const char *uri = NULL;
-                       const char *subapp = NULL;
-                       int i = 0;
-
-
-                       asvc = up->appsvc;
-                       while(asvc != NULL) {
-                               op = asvc->operation;
-                               while(op != NULL) {
-                                       if (op)
-                                               operation = op->name;
-                                       mi = asvc->mime;
-
-                                       do
-                                       {
-                                               if (mi)
-                                                       mime = mi->name;
-                                               sub = asvc->subapp;
-                                               do
-                                               {
-                                                       if (sub)
-                                                               subapp = sub->name;
-                                                       ui = asvc->uri;
-                                                       do
-                                                       {
-                                                               if (ui)
-                                                                       uri = ui->name;
-
-                                                               if(i++ > 0) {
-                                                                       strncpy(buftemp, buf, BUFMAX);
-                                                                       snprintf(buf, BUFMAX, "%s;", buftemp);
-                                                               }
-
-
-                                                               strncpy(buftemp, buf, BUFMAX);
-                                                               snprintf(buf, BUFMAX, "%s%s|%s|%s|%s", buftemp, operation?operation:"NULL", uri?uri:"NULL", mime?mime:"NULL", subapp?subapp:"NULL");
-                                                               _LOGD("buf[%s]\n", buf);
-
-                                                               if (ui)
-                                                                       ui = ui->next;
-                                                               uri = NULL;
-                                                       } while(ui != NULL);
-                                               if (sub)
-                                                               sub = sub->next;
-                                                       subapp = NULL;
-                                               }while(sub != NULL);
-                                               if (mi)
-                                                       mi = mi->next;
-                                               mime = NULL;
-                                       }while(mi != NULL);
-                                       if (op)
-                                               op = op->next;
-                                       operation = NULL;
-                               }
-                               asvc = asvc->next;
-                       }
+               }
+
+               if(mfx->uiapplication->multiple && !strcasecmp(mfx->uiapplication->multiple, "True")) {
+                       snprintf(buf, BUFMAX, "X-TIZEN-Multiple=True\n");
+                       fwrite(buf, 1, strlen(buf), file);
+               }
 
+               if(mfx->uiapplication->extraid) {
+                       snprintf(buf, BUFMAX, "X-TIZEN-PackageID=%s\n", mfx->uiapplication->extraid);
+                       fwrite(buf, 1, strlen(buf), file);
+               }
 
+               if(mfx->removable && !strcasecmp(mfx->removable, "False")) {
+                       snprintf(buf, BUFMAX, "X-TIZEN-Removable=False\n");
                        fwrite(buf, 1, strlen(buf), file);
+               }
 
-//                     strncpy(buftemp, buf, BUFMAX);
-//                     snprintf(buf, BUFMAX, "%s\n", buftemp);
-//                     fwrite(buf, 1, strlen(buf), file);
+               if(mfx->type) {
+                       snprintf(buf, BUFMAX, "X-TIZEN-PackageType=%s\n", mfx->type);
+                       fwrite(buf, 1, strlen(buf), file);
+               }
+
+               if(mfx->uiapplication->submode && !strcasecmp(mfx->uiapplication->submode, "True")) {
+                       snprintf(buf, BUFMAX, "X-TIZEN-Submode=%s\n", mfx->uiapplication->submode);
+                       fwrite(buf, 1, strlen(buf), file);
+                       snprintf(buf, BUFMAX, "X-TIZEN-SubmodeMainid=%s\n", mfx->uiapplication->submode_mainid);
+                       fwrite(buf, 1, strlen(buf), file);
                }
 
-               if(mfx->uiapplication->appcontrol) {
+               snprintf(buf, BUFMAX, "X-TIZEN-PkgID=%s\n", mfx->package);
+               fwrite(buf, 1, strlen(buf), file);
+
+
+               snprintf(buf, BUFMAX, "X-TIZEN-InstalledStorage=%s\n", mfx->installed_storage);
+               fwrite(buf, 1, strlen(buf), file);
+
+//             snprintf(buf, BUFMAX, "X-TIZEN-PackageType=rpm\n");
+//             fwrite(buf, 1, strlen(buf), file);
+
+
+               if(mfx->uiapplication->appsvc) {
                        snprintf(buf, BUFMAX, "X-TIZEN-Svc=");
                        _LOGD("buf[%s]\n", buf);
 
+
                        uiapplication_x *up = mfx->uiapplication;
-                       appcontrol_x *acontrol = NULL;
+                       appsvc_x *asvc = NULL;
                        operation_x *op = NULL;
                        mime_x *mi = NULL;
                        uri_x *ui = NULL;
@@ -3497,24 +1657,25 @@ static int __ps_make_nativeapp_desktop(manifest_x * mfx, const char *manifest, A
                        const char *subapp = NULL;
                        int i = 0;
 
-                       acontrol = up->appcontrol;
-                       while(acontrol != NULL) {
-                               op = acontrol->operation;
+
+                       asvc = up->appsvc;
+                       while(asvc != NULL) {
+                               op = asvc->operation;
                                while(op != NULL) {
                                        if (op)
                                                operation = op->name;
-                                       mi = acontrol->mime;
+                                       mi = asvc->mime;
 
                                        do
                                        {
                                                if (mi)
                                                        mime = mi->name;
-                                               sub = acontrol->subapp;
+                                               sub = asvc->subapp;
                                                do
                                                {
                                                        if (sub)
                                                                subapp = sub->name;
-                                                       ui = acontrol->uri;
+                                                       ui = asvc->uri;
                                                        do
                                                        {
                                                                if (ui)
@@ -3525,6 +1686,7 @@ static int __ps_make_nativeapp_desktop(manifest_x * mfx, const char *manifest, A
                                                                        snprintf(buf, BUFMAX, "%s;", buftemp);
                                                                }
 
+
                                                                strncpy(buftemp, buf, BUFMAX);
                                                                snprintf(buf, BUFMAX, "%s%s|%s|%s|%s", buftemp, operation?operation:"NULL", uri?uri:"NULL", mime?mime:"NULL", subapp?subapp:"NULL");
                                                                _LOGD("buf[%s]\n", buf);
@@ -3545,7 +1707,7 @@ static int __ps_make_nativeapp_desktop(manifest_x * mfx, const char *manifest, A
                                                op = op->next;
                                        operation = NULL;
                                }
-                               acontrol = acontrol->next;
+                               asvc = asvc->next;
                        }
 
 
@@ -3566,10 +1728,10 @@ static int __ps_make_nativeapp_desktop(manifest_x * mfx, const char *manifest, A
                        __ail_change_info(AIL_INSTALL, mfx->uiapplication->appid);
        }
 
-       free(buf);
-       free(buftemp);
+       FREE_AND_NULL(buf);
+       FREE_AND_NULL(buftemp);
 
-        return 0;
+       return 0;
 }
 
 static int __ps_remove_nativeapp_desktop(manifest_x *mfx)
@@ -3591,69 +1753,21 @@ static int __ps_remove_nativeapp_desktop(manifest_x *mfx)
         return 0;
 }
 
-static int __add_preload_info(manifest_x * mfx, const char *manifest)
+void __add_preload_info(manifest_x * mfx, const char *manifest)
 {
-       FILE *fp = NULL;
-       char buffer[1024] = { 0 };
-       int state = 0;
-
        if(strstr(manifest, MANIFEST_RO_PREFIX)) {
-               free((void *)mfx->readonly);
+               FREE_AND_NULL(mfx->readonly);
                mfx->readonly = strdup("True");
 
-               free((void *)mfx->preload);
+               FREE_AND_NULL(mfx->preload);
                mfx->preload = strdup("True");
 
-               free((void *)mfx->removable);
+               FREE_AND_NULL(mfx->removable);
                mfx->removable = strdup("False");
 
-               free((void *)mfx->system);
+               FREE_AND_NULL(mfx->system);
                mfx->system = strdup("True");
-
-               return 0;
-       }
-
-       fp = fopen(PRELOAD_PACKAGE_LIST, "r");
-       if (fp == NULL) {
-               _LOGE("no preload list\n");
-               return -1;
-       }
-
-       while (fgets(buffer, sizeof(buffer), fp) != NULL) {
-               if (buffer[0] == '#') {
-                       if(strcasestr(buffer, "RW_NORM"))
-                               state = 2;
-                       else if(strcasestr(buffer, "RW_RM"))
-                               state = 3;
-                       else
-                               continue;
-               }
-
-               __str_trim(buffer);
-
-               if(!strcmp(mfx->package, buffer)) {
-                       free((void *)mfx->preload);
-                       mfx->preload = strdup("True");
-                       if(state == 2){
-                               free((void *)mfx->readonly);
-                               mfx->readonly = strdup("False");
-                               free((void *)mfx->removable);
-                               mfx->removable = strdup("False");
-                       } else if(state == 3){
-                               free((void *)mfx->readonly);
-                               mfx->readonly = strdup("False");
-                               free((void *)mfx->removable);
-                               mfx->removable = strdup("True");
-                       }
-               }
-
-               memset(buffer, 0x00, sizeof(buffer));
        }
-
-       if (fp != NULL)
-               fclose(fp);
-
-       return 0;
 }
 
 static int __check_preload_updated(manifest_x * mfx, const char *manifest)
@@ -3672,7 +1786,7 @@ static int __check_preload_updated(manifest_x * mfx, const char *manifest)
                }
        } else {
                /* if downloaded app is updated, then update tag set true*/
-               free((void *)mfx->update);
+               FREE_AND_NULL(mfx->update);
                mfx->update = strdup("true");
        }
 
@@ -3691,7 +1805,7 @@ static int __get_appid_list(const char *pkgid, void *user_data)
 
        char *query = sqlite3_mprintf("select app_id from package_app_info where package=%Q", pkgid);
 
-       ret = sqlite3_open("/opt/dbspace/.pkgmgr_parser.db", &pkgmgr_parser_db);
+       ret = db_util_open(PKGMGR_PARSER_DB_FILE, &pkgmgr_parser_db, 0);
        if (ret != SQLITE_OK) {
                _LOGE("open fail\n");
                sqlite3_free(query);
@@ -3756,18 +1870,19 @@ void __call_uninstall_plugin(const char *pkgid, GList *appid_list)
 
 static int __delete_pkgid_info_for_uninstallation(const char *pkgid)
 {
-       retvm_if(pkgid == NULL, PMINFO_R_ERROR, "argument supplied is NULL");
+       retvm_if(pkgid == NULL, PM_PARSER_R_ERROR, "argument supplied is NULL");
 
        int ret = -1;
        char *appid = NULL;
        GList *appid_list = NULL;
+       GList *tmp = NULL;
        char filepath[PKG_STRING_LEN_MAX] = "";
 
        _LOGD("Start uninstall for pkgid : delete pkgid[%s]\n", pkgid);
 
        /*get appid list*/
        ret = __get_appid_list(pkgid, &appid_list);
-       retvm_if(ret < 0, PMINFO_R_ERROR, "Fail to get app_list");
+       retvm_if(ret < 0, PM_PARSER_R_ERROR, "Fail to get app_list");
 
        _LOGD("call plugin uninstall\n");
 
@@ -3782,8 +1897,9 @@ static int __delete_pkgid_info_for_uninstallation(const char *pkgid)
                _LOGD("DB pkgid info Delete Success\n");
 
        /* delete desktop file*/
-       while (appid_list) {
-               appid = (char *)appid_list->data;
+       tmp = appid_list;
+       while (tmp) {
+               appid = (char *)tmp->data;
                if (appid) {
                        _LOGD("Delete appid[%s] info from db\n", appid);
 
@@ -3803,24 +1919,161 @@ static int __delete_pkgid_info_for_uninstallation(const char *pkgid)
                                if (ret < 0)
                                        _LOGD("remove failed\n");
                        }
+                       g_free(tmp->data);
                }
-               appid_list = g_list_next(appid_list);
+               tmp  = g_list_next(tmp);
        }
 
        g_list_free(appid_list);
 
        _LOGD("Finish : uninstall for pkgid\n");
 
-       return PMINFO_R_OK;
+       return PM_PARSER_R_OK;
+}
+
+static int __pkgmgr_db_check_update_condition(manifest_x *mfx)
+{
+       int ret = -1;
+       char *preload = NULL;
+       char *system = NULL;
+       char *csc_path = NULL;
+       char *installed_storage = NULL;
+       sqlite3_stmt *stmt = NULL;
+       sqlite3 *pkgmgr_parser_db;
+       char *query = NULL;
+
+       ret = _pkgmgr_db_open(PKGMGR_PARSER_DB_FILE, &pkgmgr_parser_db);
+       retvm_if(ret != PM_PARSER_R_OK, PM_PARSER_R_ERROR, "_pkgmgr_db_open failed\n");
+
+       query = sqlite3_mprintf("select package_preload from package_info where package=%Q", mfx->package);
+
+       ret = _pkgmgr_db_prepare(pkgmgr_parser_db, query, &stmt);
+       tryvm_if(ret != PM_PARSER_R_OK, ret = PM_PARSER_R_ERROR, "_pkgmgr_db_prepare failed[%s]\n", query);
+
+       ret = _pkgmgr_db_step(stmt);
+       tryvm_if(ret != PM_PARSER_R_OK, ret = PM_PARSER_R_ERROR, "_pkgmgr_db_step failed\n");
+
+       ret = _pkgmgr_db_get_str(stmt, 0, &preload);
+       tryvm_if(ret != PM_PARSER_R_OK, ret = PM_PARSER_R_ERROR, "_pkgmgr_db_get_str failed\n");
+
+       if (strcasecmp(preload, "true") == 0) {
+               FREE_AND_NULL(mfx->preload);
+               mfx->preload = strdup("true");
+       }
+
+       _pkgmgr_db_finalize(stmt);
+       sqlite3_free(query);
+
+       query = sqlite3_mprintf("select package_system from package_info where package=%Q", mfx->package);
+
+       ret = _pkgmgr_db_prepare(pkgmgr_parser_db, query, &stmt);
+       tryvm_if(ret != PM_PARSER_R_OK, ret = PM_PARSER_R_ERROR, "_pkgmgr_db_prepare failed[%s]\n", query);
+
+       ret = _pkgmgr_db_step(stmt);
+       tryvm_if(ret != PM_PARSER_R_OK, ret = PM_PARSER_R_ERROR, "_pkgmgr_db_step failed\n");
+
+       ret = _pkgmgr_db_get_str(stmt, 0, &system);
+       tryvm_if(ret != PM_PARSER_R_OK, ret = PM_PARSER_R_ERROR, "_pkgmgr_db_get_str failed\n");
+
+       if (strcasecmp(system, "true") == 0) {
+               FREE_AND_NULL(mfx->system);
+               mfx->system = strdup("true");
+       }
+
+       _pkgmgr_db_finalize(stmt);
+       sqlite3_free(query);
+
+       query = sqlite3_mprintf("select csc_path from package_info where package=%Q", mfx->package);
+
+       ret = _pkgmgr_db_prepare(pkgmgr_parser_db, query, &stmt);
+       tryvm_if(ret != PM_PARSER_R_OK, ret = PM_PARSER_R_ERROR, "_pkgmgr_db_prepare failed[%s]\n", query);
+
+       ret = _pkgmgr_db_step(stmt);
+       tryvm_if(ret != PM_PARSER_R_OK, ret = PM_PARSER_R_ERROR, "_pkgmgr_db_step failed\n");
+
+       ret = _pkgmgr_db_get_str(stmt, 0, &csc_path);
+       tryvm_if(ret != PM_PARSER_R_OK, ret = PM_PARSER_R_ERROR, "_pkgmgr_db_get_str failed\n");
+
+       if (csc_path != NULL) {
+               if (mfx->csc_path)
+                       FREE_AND_NULL(mfx->csc_path);
+               mfx->csc_path = strdup(csc_path);
+       }
+
+       _pkgmgr_db_finalize(stmt);
+       sqlite3_free(query);
+
+       query = sqlite3_mprintf("select installed_storage from package_info where package=%Q", mfx->package);
+
+       ret = _pkgmgr_db_prepare(pkgmgr_parser_db, query, &stmt);
+       tryvm_if(ret != PM_PARSER_R_OK, ret = PM_PARSER_R_ERROR, "_pkgmgr_db_prepare failed[%s]\n", query);
+
+       ret = _pkgmgr_db_step(stmt);
+       tryvm_if(ret != PM_PARSER_R_OK, ret = PM_PARSER_R_ERROR, "_pkgmgr_db_step failed\n");
+
+       ret = _pkgmgr_db_get_str(stmt, 0, &installed_storage);
+       tryvm_if(ret != PM_PARSER_R_OK, ret = PM_PARSER_R_ERROR, "_pkgmgr_db_get_str failed\n");
+
+       if (strcasecmp(installed_storage, "installed_external") == 0) {
+               FREE_AND_NULL(mfx->installed_storage);
+               mfx->installed_storage = strdup("installed_external");
+       }
+
+       ret = PM_PARSER_R_OK;
+
+catch:
+
+       sqlite3_free(query);
+       _pkgmgr_db_finalize(stmt);
+       _pkgmgr_db_close(pkgmgr_parser_db);
+
+       return ret;
+}
+
+static int __pkgmgr_db_check_disable_condition(manifest_x *mfx)
+{
+       int ret = -1;
+       char *package_disable = NULL;
+       sqlite3_stmt *stmt = NULL;
+       sqlite3 *pkgmgr_parser_db;
+       char *query = NULL;
+
+       ret = _pkgmgr_db_open(PKGMGR_PARSER_DB_FILE, &pkgmgr_parser_db);
+       retvm_if(ret != PM_PARSER_R_OK, PM_PARSER_R_ERROR, "_pkgmgr_db_open failed\n");
+
+       query = sqlite3_mprintf("select package_disable from package_info where package=%Q", mfx->package);
+
+       ret = _pkgmgr_db_prepare(pkgmgr_parser_db, query, &stmt);
+       tryvm_if(ret != PM_PARSER_R_OK, ret = PM_PARSER_R_ERROR, "_pkgmgr_db_prepare failed[%s]\n", query);
+
+       ret = _pkgmgr_db_step(stmt);
+       tryvm_if(ret != PM_PARSER_R_OK, ret = PM_PARSER_R_ERROR, "_pkgmgr_db_step failed\n");
+
+       ret = _pkgmgr_db_get_str(stmt, 0, &package_disable);
+       tryvm_if(ret != PM_PARSER_R_OK, ret = PM_PARSER_R_ERROR, "_pkgmgr_db_get_str failed\n");
+
+       if (strcasecmp(package_disable, "true") == 0) {
+               ret = 1;
+       } else {
+               ret = -1;
+       }
+
+catch:
+
+       sqlite3_free(query);
+       _pkgmgr_db_finalize(stmt);
+       _pkgmgr_db_close(pkgmgr_parser_db);
+
+       return ret;
 }
 
 API int pkgmgr_parser_check_mdm_policy_for_uninstallation(const char *manifest)
 {
-       int ret = PMINFO_R_OK;
+       int ret = PM_PARSER_R_OK;
        manifest_x *mfx = NULL;
 
        mfx = pkgmgr_parser_process_manifest_xml(manifest);
-       retvm_if(mfx == NULL, PMINFO_R_OK, "argument supplied is NULL");
+       retvm_if(mfx == NULL, PM_PARSER_R_OK, "argument supplied is NULL");
 
        ret = __ps_check_mdm_policy(mfx, ACTION_UNINSTALL);
        if (ret < 0)
@@ -3848,240 +2101,7 @@ API int pkgmgr_parser_create_desktop_file(manifest_x *mfx)
 
 API void pkgmgr_parser_free_manifest_xml(manifest_x *mfx)
 {
-       if (mfx == NULL)
-               return;
-       if (mfx->ns) {
-               free((void *)mfx->ns);
-               mfx->ns = NULL;
-       }
-       if (mfx->package) {
-               free((void *)mfx->package);
-               mfx->package = NULL;
-       }
-       if (mfx->version) {
-               free((void *)mfx->version);
-               mfx->version = NULL;
-       }
-       if (mfx->installlocation) {
-               free((void *)mfx->installlocation);
-               mfx->installlocation = NULL;
-       }
-       if (mfx->preload) {
-               free((void *)mfx->preload);
-               mfx->preload = NULL;
-       }
-       if (mfx->readonly) {
-               free((void *)mfx->readonly);
-               mfx->readonly = NULL;
-       }
-       if (mfx->removable) {
-               free((void *)mfx->removable);
-               mfx->removable = NULL;
-       }
-       if (mfx->update) {
-               free((void *)mfx->update);
-               mfx->update = NULL;
-       }
-       if (mfx->system) {
-               free((void *)mfx->system);
-               mfx->system = NULL;
-       }
-       if (mfx->type) {
-               free((void *)mfx->type);
-               mfx->type = NULL;
-       }
-       if (mfx->package_size) {
-               free((void *)mfx->package_size);
-               mfx->package_size = NULL;
-       }
-       if (mfx->package_total_size) {
-               free((void *)mfx->package_total_size);
-               mfx->package_total_size = NULL;
-       }
-       if (mfx->package_data_size) {
-               free((void *)mfx->package_data_size);
-               mfx->package_data_size = NULL;
-       }
-       if (mfx->installed_time) {
-               free((void *)mfx->installed_time);
-               mfx->installed_time = NULL;
-       }
-       if (mfx->installed_storage) {
-               free((void *)mfx->installed_storage);
-               mfx->installed_storage = NULL;
-       }
-       if (mfx->storeclient_id) {
-               free((void *)mfx->storeclient_id);
-               mfx->storeclient_id = NULL;
-       }
-       if (mfx->mainapp_id) {
-               free((void *)mfx->mainapp_id);
-               mfx->mainapp_id = NULL;
-       }
-       if (mfx->package_url) {
-               free((void *)mfx->package_url);
-               mfx->package_url = NULL;
-       }
-       if (mfx->root_path) {
-               free((void *)mfx->root_path);
-               mfx->root_path = NULL;
-       }
-       if (mfx->csc_path) {
-               free((void *)mfx->csc_path);
-               mfx->csc_path = NULL;
-       }
-       if (mfx->appsetting) {
-               free((void *)mfx->appsetting);
-               mfx->appsetting = NULL;
-       }
-       if (mfx->nodisplay_setting) {
-               free((void *)mfx->nodisplay_setting);
-               mfx->nodisplay_setting = NULL;
-       }
-
-       /*Free Icon*/
-       if (mfx->icon) {
-               icon_x *icon = mfx->icon;
-               icon_x *tmp = NULL;
-               while(icon != NULL) {
-                       tmp = icon->next;
-                       __ps_free_icon(icon);
-                       icon = tmp;
-               }
-       }
-       /*Free Label*/
-       if (mfx->label) {
-               label_x *label = mfx->label;
-               label_x *tmp = NULL;
-               while(label != NULL) {
-                       tmp = label->next;
-                       __ps_free_label(label);
-                       label = tmp;
-               }
-       }
-       /*Free Author*/
-       if (mfx->author) {
-               author_x *author = mfx->author;
-               author_x *tmp = NULL;
-               while(author != NULL) {
-                       tmp = author->next;
-                       __ps_free_author(author);
-                       author = tmp;
-               }
-       }
-       /*Free Description*/
-       if (mfx->description) {
-               description_x *description = mfx->description;
-               description_x *tmp = NULL;
-               while(description != NULL) {
-                       tmp = description->next;
-                       __ps_free_description(description);
-                       description = tmp;
-               }
-       }
-       /*Free License*/
-       if (mfx->license) {
-               license_x *license = mfx->license;
-               license_x *tmp = NULL;
-               while(license != NULL) {
-                       tmp = license->next;
-                       __ps_free_license(license);
-                       license = tmp;
-               }
-       }
-       /*Free Privileges*/
-       if (mfx->privileges) {
-               privileges_x *privileges = mfx->privileges;
-               privileges_x *tmp = NULL;
-               while(privileges != NULL) {
-                       tmp = privileges->next;
-                       __ps_free_privileges(privileges);
-                       privileges = tmp;
-               }
-       }
-       /*Free UiApplication*/
-       if (mfx->uiapplication) {
-               uiapplication_x *uiapplication = mfx->uiapplication;
-               uiapplication_x *tmp = NULL;
-               while(uiapplication != NULL) {
-                       tmp = uiapplication->next;
-                       __ps_free_uiapplication(uiapplication);
-                       uiapplication = tmp;
-               }
-       }
-       /*Free ServiceApplication*/
-       if (mfx->serviceapplication) {
-               serviceapplication_x *serviceapplication = mfx->serviceapplication;
-               serviceapplication_x *tmp = NULL;
-               while(serviceapplication != NULL) {
-                       tmp = serviceapplication->next;
-                       __ps_free_serviceapplication(serviceapplication);
-                       serviceapplication = tmp;
-               }
-       }
-       /*Free Daemon*/
-       if (mfx->daemon) {
-               daemon_x *daemon = mfx->daemon;
-               daemon_x *tmp = NULL;
-               while(daemon != NULL) {
-                       tmp = daemon->next;
-                       __ps_free_daemon(daemon);
-                       daemon = tmp;
-               }
-       }
-       /*Free Theme*/
-       if (mfx->theme) {
-               theme_x *theme = mfx->theme;
-               theme_x *tmp = NULL;
-               while(theme != NULL) {
-                       tmp = theme->next;
-                       __ps_free_theme(theme);
-                       theme = tmp;
-               }
-       }
-       /*Free Font*/
-       if (mfx->font) {
-               font_x *font = mfx->font;
-               font_x *tmp = NULL;
-               while(font != NULL) {
-                       tmp = font->next;
-                       __ps_free_font(font);
-                       font = tmp;
-               }
-       }
-       /*Free Ime*/
-       if (mfx->ime) {
-               ime_x *ime = mfx->ime;
-               ime_x *tmp = NULL;
-               while(ime != NULL) {
-                       tmp = ime->next;
-                       __ps_free_ime(ime);
-                       ime = tmp;
-               }
-       }
-       /*Free Compatibility*/
-       if (mfx->compatibility) {
-               compatibility_x *compatibility = mfx->compatibility;
-               compatibility_x *tmp = NULL;
-               while(compatibility != NULL) {
-                       tmp = compatibility->next;
-                       __ps_free_compatibility(compatibility);
-                       compatibility = tmp;
-               }
-       }
-       /*Free DeviceProfile*/
-       if (mfx->deviceprofile) {
-               deviceprofile_x *deviceprofile = mfx->deviceprofile;
-               deviceprofile_x *tmp = NULL;
-               while(deviceprofile != NULL) {
-                       tmp = deviceprofile->next;
-                       __ps_free_deviceprofile(deviceprofile);
-                       deviceprofile = tmp;
-               }
-       }
-       free((void*)mfx);
-       mfx = NULL;
-       return;
+       _pkgmgrinfo_basic_free_manifest_x(mfx);
 }
 
 API manifest_x *pkgmgr_parser_process_manifest_xml(const char *manifest)
@@ -4115,20 +2135,28 @@ API manifest_x *pkgmgr_parser_process_manifest_xml(const char *manifest)
 
 API int pkgmgr_parser_parse_manifest_for_installation(const char *manifest, char *const tagv[])
 {
-       retvm_if(manifest == NULL, PMINFO_R_ERROR, "argument supplied is NULL");
+       retvm_if(manifest == NULL, PM_PARSER_R_ERROR, "argument supplied is NULL");
        _LOGD("parsing manifest for installation: %s\n", manifest);
 
        manifest_x *mfx = NULL;
        int ret = -1;
+       char *hash = NULL;
 
        xmlInitParser();
        mfx = pkgmgr_parser_process_manifest_xml(manifest);
-       retvm_if(mfx == NULL, PMINFO_R_ERROR, "argument supplied is NULL");
+       retvm_if(mfx == NULL, PM_PARSER_R_ERROR, "argument supplied is NULL");
 
        _LOGD("Parsing Finished\n");
 
+       _LOGD("Generating the hash for manifest");
+       hash = pkgmgrinfo_basic_generate_hash_for_file(manifest);
+       if(hash != NULL){
+               mfx->hash = hash;
+               _LOGD("Hash for [%s] file is [%s]\n",manifest,hash);
+       }
+
        ret = __ps_check_mdm_policy(mfx, ACTION_INSTALL);
-       retvm_if(ret == PMINFO_R_ERROR, PMINFO_R_ERROR, "pkg[%s] violate mdm policy.", mfx->package);
+       tryvm_if(ret == PM_PARSER_R_ERROR, ret = PM_PARSER_R_ERROR, "pkg[%s] violate mdm policy.", mfx->package);
 
        __add_preload_info(mfx, manifest);
 
@@ -4140,107 +2168,101 @@ API int pkgmgr_parser_parse_manifest_for_installation(const char *manifest, char
        if (ret < 0) {
                ret = __delete_pkgid_info_for_uninstallation(mfx->package);
                ret = pkgmgr_parser_insert_manifest_info_in_db(mfx);
-               retvm_if(ret == PMINFO_R_ERROR, PMINFO_R_ERROR, "DB Insert failed");
+               retvm_if(ret == PM_PARSER_R_ERROR, PM_PARSER_R_ERROR, "DB Insert failed");
        }
 
        _LOGD("DB Insert Success\n");
 
        _pkgmgr_parser_plugin_process_plugin(mfx, manifest, ACTION_INSTALL);
 
-       if (__check_action_fota(tagv))
-               ret = __ps_make_nativeapp_desktop(mfx, NULL, ACTION_FOTA);
-       else
-               ret = __ps_make_nativeapp_desktop(mfx, NULL, ACTION_INSTALL);
+       ret = __check_action_fota(tagv);
+       tryvm_if(ret == PM_PARSER_R_OK, ret = PM_PARSER_R_OK, "fota install called, dont need desktop generation\n");
+
+       ret = __ps_make_nativeapp_desktop(mfx, NULL, ACTION_INSTALL);
 
        if (ret == -1)
                _LOGD("Creating desktop file failed\n");
        else
                _LOGD("Creating desktop file Success\n");
 
+
+catch:
        pkgmgr_parser_free_manifest_xml(mfx);
        _LOGD("Free Done\n");
        xmlCleanupParser();
 
-       return PMINFO_R_OK;
+       return PM_PARSER_R_OK;
 }
 
 API int pkgmgr_parser_parse_manifest_for_upgrade(const char *manifest, char *const tagv[])
 {
-       retvm_if(manifest == NULL, PMINFO_R_ERROR, "argument supplied is NULL");
+       retvm_if(manifest == NULL, PM_PARSER_R_ERROR, "argument supplied is NULL");
        _LOGD("parsing manifest for upgradation: %s\n", manifest);
 
        manifest_x *mfx = NULL;
        int ret = -1;
-       bool preload = false;
-       bool system = false;
-       char *csc_path = NULL;
-       pkgmgrinfo_pkginfo_h handle = NULL;
+       int package_disabled = 0;
+       char *hash = NULL;
 
        xmlInitParser();
        mfx = pkgmgr_parser_process_manifest_xml(manifest);
-       retvm_if(mfx == NULL, PMINFO_R_ERROR, "argument supplied is NULL");
+       retvm_if(mfx == NULL, PM_PARSER_R_ERROR, "argument supplied is NULL");
 
        _LOGD("Parsing Finished\n");
-       
-       __add_preload_info(mfx, manifest);
-       _LOGD("Added preload infomation\n");
-       __check_preload_updated(mfx, manifest);
-
-       ret = pkgmgrinfo_pkginfo_get_pkginfo(mfx->package, &handle);
-       if (ret != PMINFO_R_OK)
-               _LOGD("pkgmgrinfo_pkginfo_get_pkginfo failed\n");
 
-       ret = pkgmgrinfo_pkginfo_is_preload(handle, &preload);
-       if (ret != PMINFO_R_OK)
-               _LOGD("pkgmgrinfo_pkginfo_is_preload failed\n");
-
-       if (preload) {
-               free((void *)mfx->preload);
-               mfx->preload = strdup("true");
+       _LOGD("Generating the hash for manifest");
+       hash = pkgmgrinfo_basic_generate_hash_for_file(manifest);
+       if(hash != NULL){
+               mfx->hash = hash;
+               _LOGD("Hash for [%s] file is [%s]\n",manifest,hash);
        }
 
-       ret = pkgmgrinfo_pkginfo_is_system(handle, &system);
-       if (ret != PMINFO_R_OK)
-               _LOGD("pkgmgrinfo_pkginfo_is_system failed\n");
+       __add_preload_info(mfx, manifest);
+       _LOGD("Added preload infomation\n");
+       __check_preload_updated(mfx, manifest);
 
-       if (system) {
-               free((void *)mfx->system);
-               mfx->system = strdup("true");
+       if (__pkgmgr_db_check_disable_condition(mfx) == 1) {
+               _LOGD("pkgid[%s] is disabed\n", mfx->package);
+               package_disabled = 1;
        }
 
-       ret = pkgmgrinfo_pkginfo_get_csc_path(handle, &csc_path);
-       if (ret != PMINFO_R_OK)
-               _LOGD("pkgmgrinfo_pkginfo_get_csc_path failed\n");
-
-       if (csc_path != NULL) {
-               if (mfx->csc_path)
-                       free((void *)mfx->csc_path);
-               mfx->csc_path = strdup(csc_path);
-       }
+       ret = __pkgmgr_db_check_update_condition(mfx);
+       if (ret < 0)
+               _LOGD("__pkgmgr_db_check_update_condition failed\n");
 
        ret = pkgmgr_parser_update_manifest_info_in_db(mfx);
-       retvm_if(ret == PMINFO_R_ERROR, PMINFO_R_ERROR, "DB Insert failed");
+       retvm_if(ret == PM_PARSER_R_ERROR, PM_PARSER_R_ERROR, "DB Insert failed");
        _LOGD("DB Update Success\n");
 
+       if (package_disabled == 1) {
+               ret = pkgmgr_parser_disable_pkg(mfx->package, NULL);
+               tryvm_if(ret != PM_PARSER_R_OK, ret = PM_PARSER_R_ERROR, "disable_pkg failed[%s]\n", mfx->package);
+       }
+
        _pkgmgr_parser_plugin_process_plugin(mfx, manifest, ACTION_UPGRADE);
 
+       ret = __check_action_fota(tagv);
+       tryvm_if(ret == PM_PARSER_R_OK, ret = PM_PARSER_R_OK, "fota install called, dont need desktop generation\n");
+
        ret = __ps_make_nativeapp_desktop(mfx, manifest, ACTION_UPGRADE);
        if (ret == -1)
                _LOGD("Creating desktop file failed\n");
        else
                _LOGD("Creating desktop file Success\n");
 
-       pkgmgrinfo_pkginfo_destroy_pkginfo(handle);
+catch:
+       journal_appcore_app_updated(mfx->package);
+
        pkgmgr_parser_free_manifest_xml(mfx);
        _LOGD("Free Done\n");
        xmlCleanupParser();
 
-       return PMINFO_R_OK;
+       return PM_PARSER_R_OK;
 }
 
 API int pkgmgr_parser_parse_manifest_for_uninstallation(const char *manifest, char *const tagv[])
 {
-       retvm_if(manifest == NULL, PMINFO_R_ERROR, "argument supplied is NULL");
+       retvm_if(manifest == NULL, PM_PARSER_R_ERROR, "argument supplied is NULL");
        int ret = -1;
        manifest_x *mfx = NULL;
 
@@ -4250,19 +2272,19 @@ API int pkgmgr_parser_parse_manifest_for_uninstallation(const char *manifest, ch
                if (ret <0)
                        _LOGD("__delete_manifest_for_fota failed\n");
 
-               return PMINFO_R_OK;
+               return PM_PARSER_R_OK;
        }
 
        _LOGD("parsing manifest for uninstallation: %s\n", manifest);
 
        xmlInitParser();
        mfx = pkgmgr_parser_process_manifest_xml(manifest);
-       retvm_if(mfx == NULL, PMINFO_R_ERROR, "argument supplied is NULL");
+       retvm_if(mfx == NULL, PM_PARSER_R_ERROR, "argument supplied is NULL");
 
        _LOGD("Parsing Finished\n");
 
        ret = __ps_check_mdm_policy(mfx, ACTION_UNINSTALL);
-       retvm_if(ret == PMINFO_R_ERROR, PMINFO_R_ERROR, "pkg[%s] violate mdm policy.", mfx->package);
+       retvm_if(ret == PM_PARSER_R_ERROR, PM_PARSER_R_ERROR, "pkg[%s] violate mdm policy.", mfx->package);
 
        __add_preload_info(mfx, manifest);
        _LOGD("Added preload infomation\n");
@@ -4285,7 +2307,7 @@ API int pkgmgr_parser_parse_manifest_for_uninstallation(const char *manifest, ch
        _LOGD("Free Done\n");
        xmlCleanupParser();
 
-       return PMINFO_R_OK;
+       return PM_PARSER_R_OK;
 }
 
 API int pkgmgr_parser_parse_manifest_for_preload()
@@ -4317,97 +2339,129 @@ API int pkgmgr_parser_check_manifest_validation(const char *manifest)
 {
        if (manifest == NULL) {
                _LOGE("manifest file is NULL\n");
-               return PMINFO_R_EINVAL;
+               return PM_PARSER_R_EINVAL;
        }
-       int ret = -1;
-       xmlSchemaParserCtxtPtr ctx;
-       xmlSchemaValidCtxtPtr vctx;
-       xmlSchemaPtr xschema;
+       int ret = PM_PARSER_R_OK;
+       xmlSchemaParserCtxtPtr ctx = NULL;
+       xmlSchemaValidCtxtPtr vctx = NULL;
+       xmlSchemaPtr xschema = NULL;
        ctx = xmlSchemaNewParserCtxt(SCHEMA_FILE);
        if (ctx == NULL) {
                _LOGE("xmlSchemaNewParserCtxt() Failed\n");
-               return PMINFO_R_ERROR;
+               return PM_PARSER_R_ERROR;
        }
        xschema = xmlSchemaParse(ctx);
        if (xschema == NULL) {
                _LOGE("xmlSchemaParse() Failed\n");
-               return PMINFO_R_ERROR;
+               ret = PM_PARSER_R_ERROR;
+               goto cleanup;
        }
        vctx = xmlSchemaNewValidCtxt(xschema);
        if (vctx == NULL) {
                _LOGE("xmlSchemaNewValidCtxt() Failed\n");
-               return PMINFO_R_ERROR;
+               return PM_PARSER_R_ERROR;
        }
        xmlSchemaSetValidErrors(vctx, (xmlSchemaValidityErrorFunc) fprintf, (xmlSchemaValidityWarningFunc) fprintf, stderr);
        ret = xmlSchemaValidateFile(vctx, manifest, 0);
        if (ret == -1) {
                _LOGE("xmlSchemaValidateFile() failed\n");
-               return PMINFO_R_ERROR;
+               ret = PM_PARSER_R_ERROR;
+               goto cleanup;
        } else if (ret == 0) {
                _LOGE("Manifest is Valid\n");
-               return PMINFO_R_OK;
+               ret = PM_PARSER_R_OK;
+               goto cleanup;
        } else {
                _LOGE("Manifest Validation Failed with error code %d\n", ret);
-               return PMINFO_R_ERROR;
+               ret = PM_PARSER_R_ERROR;
+               goto cleanup;
        }
-       return PMINFO_R_OK;
+
+cleanup:
+       if(vctx != NULL)
+               xmlSchemaFreeValidCtxt(vctx);
+
+       if(ctx != NULL)
+               xmlSchemaFreeParserCtxt(ctx);
+
+       if(xschema != NULL)
+               xmlSchemaFree(xschema);
+
+       return ret;
 }
 
-API int pkgmgr_parser_insert_disabled_pkg(const char *pkgid, char *const tagv[])
+API int pkgmgr_parser_enable_pkg(const char *pkgid, char *const tagv[])
 {
-       retvm_if(pkgid == NULL, PMINFO_R_ERROR, "argument supplied is NULL");
+       retvm_if(pkgid == NULL, PM_PARSER_R_ERROR, "pkgid is NULL.");
 
+       int ret = -1;
        char *manifest = NULL;
        manifest_x *mfx = NULL;
-       int ret = -1;
 
-       _LOGD("parsing manifest for installation: %s\n", pkgid);
+       ret = pkgmgr_parser_update_enabled_pkg_info_in_db(pkgid);
+       if (ret == -1)
+               _LOGD("pkgmgr_parser_update_enabled_pkg_info_in_db(%s) failed.\n", pkgid);
+       else
+               _LOGD("pkgmgr_parser_update_enabled_pkg_info_in_db(%s) succeed.\n", pkgid);
 
-       manifest = pkgmgr_parser_get_manifest_file(pkgid);
-       if (manifest == NULL) {
-               _LOGE("can not get the manifest.xml\n");
-               return -1;
-       }
+       manifest = __pkgid_to_manifest(pkgid);
+       retvm_if(manifest == NULL, PM_PARSER_R_ERROR, "manifest of pkgid(%s) is NULL.", pkgid);
 
        xmlInitParser();
        mfx = pkgmgr_parser_process_manifest_xml(manifest);
-       retvm_if(mfx == NULL, PMINFO_R_ERROR, "argument supplied is NULL");
-
-       _LOGD("Parsing Finished\n");
+       tryvm_if(mfx == NULL, ret = PM_PARSER_R_ERROR, "process_manifest_xml(%s) failed\n", pkgid);
 
-       __add_preload_info(mfx, manifest);
+       _pkgmgr_parser_plugin_process_plugin(mfx, manifest, ACTION_INSTALL);
 
-       _LOGD("Added preload infomation\n");
+       ret = PM_PARSER_R_OK;
 
-       ret = pkgmgr_parser_insert_disabled_pkg_info_in_db(mfx);
-       retvm_if(ret == PMINFO_R_ERROR, PMINFO_R_ERROR, "DB Insert failed");
+catch:
+       if (mfx)
+               pkgmgr_parser_free_manifest_xml(mfx);
 
-       _LOGD("DB Insert Success\n");
+       if (manifest)
+               free(manifest);
 
-       pkgmgr_parser_free_manifest_xml(mfx);
-       _LOGD("Free Done\n");
        xmlCleanupParser();
 
-       return PMINFO_R_OK;
+       return ret;
 }
 
-API int pkgmgr_parser_delete_disabled_pkg(const char *pkgid, char *const tagv[])
+API int pkgmgr_parser_disable_pkg(const char *pkgid, char *const tagv[])
 {
-       retvm_if(pkgid == NULL, PMINFO_R_ERROR, "argument supplied is NULL");
+       retvm_if(pkgid == NULL, PM_PARSER_R_ERROR, "pkgid is NULL.");
 
        int ret = -1;
+       GList *appid_list = NULL;
 
-       _LOGD("Start uninstall for pkgid : delete pkgid[%s]\n", pkgid);
+       /*get appid list*/
+       ret = __get_appid_list(pkgid, &appid_list);
+       retvm_if(ret < 0, PM_PARSER_R_ERROR, "Fail to get app_list");
 
-       /* delete pkgmgr db */
-       ret = pkgmgr_parser_delete_disabled_pkgid_info_from_db(pkgid);
+       _LOGD("call plugin uninstall\n");
+
+       /*call plugin uninstall*/
+       __call_uninstall_plugin(pkgid, appid_list);
+
+       ret = pkgmgr_parser_update_disabled_pkg_info_in_db(pkgid);
        if (ret == -1)
-               _LOGD("DB pkgid info Delete failed\n");
+               _LOGD("pkgmgr_parser_update_disabled_pkg_info_in_db(%s) failed.\n", pkgid);
        else
-               _LOGD("DB pkgid info Delete Success\n");
+               _LOGD("pkgmgr_parser_update_disabled_pkg_info_in_db(%s) succeed.\n", pkgid);
 
-       _LOGD("Finish : uninstall for pkgid\n");
+       g_list_free(appid_list);
+
+       return PM_PARSER_R_OK;
+}
 
-       return PMINFO_R_OK;
+/* update aliasid entry in package-app-aliasid */
+API int pkgmgr_parser_insert_app_aliasid(void )
+{
+       return pkgmgr_parser_insert_app_aliasid_info_in_db();
+}
+
+API int pkgmgr_parser_update_app_aliasid(void )
+{
+       return pkgmgr_parser_update_app_aliasid_info_in_db();
 }
 
index a650122..5dbe377 100755 (executable)
  */
 
 #include <libxml/xmlreader.h>
+#include "pkgmgrinfo_basic.h"
+#include "pkgmgr_parser_feature.h"
 
 #ifdef __cplusplus
 extern "C" {
 #endif
-#define DEFAULT_LOCALE         "No Locale"
-
-#define PKG_STRING_LEN_MAX 1024
-
-#define PKGMGR_PARSER_EMPTY_STR                ""
 
 /* defined path and file*/
-#define PRELOAD_PACKAGE_LIST "/usr/etc/package-manager/preload/preload_list.txt"
-
 #define DESKTOP_RW_PATH "/opt/share/applications/"
 #define DESKTOP_RO_PATH "/usr/share/applications/"
 #define MANIFEST_RO_PREFIX "/usr/share/packages/"
@@ -62,10 +57,21 @@ extern "C" {
 
 #define SCHEMA_FILE "/usr/etc/package-manager/preload/manifest.xsd"
 
+#define BUFMAX 1024*128
+
 /* so path */
 #define LIBAPPSVC_PATH "/usr/lib/libappsvc.so.0"
 #define LIBAIL_PATH "/usr/lib/libail.so.0"
 
+/** Integer property for mode*/
+#define        PMINFO_SUPPORT_MODE_ULTRA_POWER_SAVING  0x00000001
+#define        PMINFO_SUPPORT_MODE_COOL_DOWN                   0x00000002
+#define        PMINFO_SUPPORT_MODE_SCREEN_READER               0x00000004
+
+#define        PMINFO_SUPPORT_FEATURE_MULTI_WINDOW                     0x00000001
+#define        PMINFO_SUPPORT_FEATURE_OOM_TERMINATION          0x00000002
+#define        PMINFO_SUPPORT_FEATURE_LARGE_MEMORY                     0x00000004
+
 /* operation_type */
 typedef enum {
        ACTION_INSTALL = 0,
@@ -84,442 +90,14 @@ typedef enum {
        AIL_MAX
 } AIL_TYPE;
 
-
 /**
- * @brief List definitions.
- * All lists are doubly-linked, the last element is stored to list pointer,
- * which means that lists must be looped using the prev pointer, or by
- * calling LISTHEAD first to go to start in order to use the next pointer.
- */
-
- /**
- * @brief Convinience Macro to add node in list
- */
-
-#define LISTADD(list, node)                    \
-    do {                                       \
-       (node)->prev = (list);                  \
-       if (list) (node)->next = (list)->next;  \
-       else (node)->next = NULL;               \
-       if (list) (list)->next = (node);        \
-       (list) = (node);                        \
-    } while (0);
-
- /**
- * @brief Convinience Macro to add one node to another node
- */
-#define NODEADD(node1, node2)                                  \
-    do {                                                       \
-       (node2)->prev = (node1);                                \
-       (node2)->next = (node1)->next;                          \
-       if ((node1)->next) (node1)->next->prev = (node2);       \
-       (node1)->next = (node2);                                \
-    } while (0);
-
- /**
- * @brief Convinience Macro to concatenate two lists
- */
-#define LISTCAT(list, first, last)             \
-    if ((first) && (last)) {                   \
-       (first)->prev = (list);                 \
-       (list) = (last);                        \
-    }
-
- /**
- * @brief Convinience Macro to delete node from list
- */
-#define LISTDEL(list, node)                                    \
-    do {                                                       \
-       if ((node)->prev) (node)->prev->next = (node)->next;    \
-       if ((node)->next) (node)->next->prev = (node)->prev;    \
-       if (!((node)->prev) && !((node)->next)) (list) = NULL;  \
-    } while (0);
-
- /**
- * @brief Convinience Macro to get list head
+ * @brief API return values
  */
-#define LISTHEAD(list, node)                                   \
-    for ((node) = (list); (node)->prev; (node) = (node)->prev)
-
- /**
- * @brief Convinience Macro to get list tail
- */
-#define LISTTAIL(list, node)                                   \
-    for ((node) = (list); (node)->next; (node) = (node)->next)
-
-typedef struct metadata_x {
-       const char *key;
-       const char *value;
-       struct metadata_x *prev;
-       struct metadata_x *next;
-} metadata_x;
-
-typedef struct privilege_x {
-       const char *text;
-       struct privilege_x *prev;
-       struct privilege_x *next;
-} privilege_x;
-
-typedef struct privileges_x {
-       struct privilege_x *privilege;
-       struct privileges_x *prev;
-       struct privileges_x *next;
-} privileges_x;
-
-typedef struct permission_x {
-       const char *type;
-       const char *value;
-       struct permission_x *prev;
-       struct permission_x *next;
-} permission_x;
-
-typedef struct icon_x {
-       const char *name;
-       const char *text;
-       const char *lang;
-       const char *section;
-       const char *size;
-       const char *resolution;
-       struct icon_x *prev;
-       struct icon_x *next;
-} icon_x;
-
-typedef struct image_x {
-       const char *name;
-       const char *text;
-       const char *lang;
-       const char *section;
-       struct image_x *prev;
-       struct image_x *next;
-} image_x;
-
-typedef struct allowed_x {
-       const char *name;
-       const char *text;
-       struct allowed_x *prev;
-       struct allowed_x *next;
-} allowed_x;
-
-typedef struct request_x {
-       const char *text;
-       struct request_x *prev;
-       struct request_x *next;
-} request_x;
-
-typedef struct define_x {
-       const char *path;
-       struct allowed_x *allowed;
-       struct request_x *request;
-       struct define_x *prev;
-       struct define_x *next;
-} define_x;
-
-typedef struct datashare_x {
-       struct define_x *define;
-       struct request_x *request;
-       struct datashare_x *prev;
-       struct datashare_x *next;
-} datashare_x;
-
-typedef struct description_x {
-       const char *name;
-       const char *text;
-       const char *lang;
-       struct description_x *prev;
-       struct description_x *next;
-} description_x;
-
-typedef struct registry_x {
-       const char *name;
-       const char *text;
-       struct registry_x *prev;
-       struct registry_x *next;
-} registry_x;
-
-typedef struct database_x {
-       const char *name;
-       const char *text;
-       struct database_x *prev;
-       struct database_x *next;
-} database_x;
-
-typedef struct layout_x {
-       const char *name;
-       const char *text;
-       struct layout_x *prev;
-       struct layout_x *next;
-} layout_x;
-
-typedef struct label_x {
-       const char *name;
-       const char *text;
-       const char *lang;
-       struct label_x *prev;
-       struct label_x *next;
-} label_x;
-
-typedef struct author_x {
-       const char *email;
-       const char *href;
-       const char *text;
-       const char *lang;
-       struct author_x *prev;
-       struct author_x *next;
-} author_x;
-
-typedef struct license_x {
-       const char *text;
-       const char *lang;
-       struct license_x *prev;
-       struct license_x *next;
-} license_x;
-
-typedef struct operation_x {
-       const char *name;
-       const char *text;
-       struct operation_x *prev;
-       struct operation_x *next;
-} operation_x;
-
-typedef struct uri_x {
-       const char *name;
-       const char *text;
-       struct uri_x *prev;
-       struct uri_x *next;
-} uri_x;
-
-typedef struct mime_x {
-       const char *name;
-       const char *text;
-       struct mime_x *prev;
-       struct mime_x *next;
-} mime_x;
-
-typedef struct subapp_x {
-       const char *name;
-       const char *text;
-       struct subapp_x *prev;
-       struct subapp_x *next;
-} subapp_x;
-
-typedef struct condition_x {
-       const char *name;
-       const char *text;
-       struct condition_x *prev;
-       struct condition_x *next;
-} condition_x;
-
-typedef struct notification_x {
-       const char *name;
-       const char *text;
-       struct notification_x *prev;
-       struct notification_x *next;
-} notification_x;
-
-typedef struct appsvc_x {
-       const char *text;
-       struct operation_x *operation;
-       struct uri_x *uri;
-       struct mime_x *mime;
-       struct subapp_x *subapp;
-       struct appsvc_x *prev;
-       struct appsvc_x *next;
-} appsvc_x;
-
-typedef struct appcontrol_x {
-       const char *text;
-       struct operation_x *operation;
-       struct uri_x *uri;
-       struct mime_x *mime;
-       struct subapp_x *subapp;
-       struct appcontrol_x *prev;
-       struct appcontrol_x *next;
-} appcontrol_x;
-
-typedef struct category_x{
-       const char *name;
-       struct category_x *prev;
-       struct category_x *next;
-} category_x;
-
-typedef struct launchconditions_x {
-       const char *text;
-       struct condition_x *condition;
-       struct launchconditions_x *prev;
-       struct launchconditions_x *next;
-} launchconditions_x;
-
-typedef struct compatibility_x {
-       const char *name;
-       const char *text;
-       struct compatibility_x *prev;
-       struct compatibility_x *next;
-}compatibility_x;
-
-typedef struct deviceprofile_x {
-       const char *name;
-       const char *text;
-       struct deviceprofile_x *prev;
-       struct deviceprofile_x *next;
-}deviceprofile_x;
-
-typedef struct resolution_x {
-       const char *mimetype;
-       const char *urischeme;
-       struct resolution_x *prev;
-       struct resolution_x *next;
-} resolution_x;
-
-typedef struct capability_x {
-       const char *operationid;
-       const char *access;
-       struct resolution_x *resolution;
-       struct capability_x *prev;
-       struct capability_x *next;
-} capability_x;
-
-typedef struct datacontrol_x {
-       const char *providerid;
-       struct capability_x *capability;
-       struct datacontrol_x *prev;
-       struct datacontrol_x *next;
-} datacontrol_x;
-
-typedef struct uiapplication_x {
-       const char *appid;
-       const char *exec;
-       const char *nodisplay;
-       const char *multiple;
-       const char *taskmanage;
-       const char *enabled;
-       const char *type;
-       const char *categories;
-       const char *extraid;
-       const char *hwacceleration;
-       const char *screenreader;
-       const char *mainapp;
-       const char *package;
-       const char *recentimage;
-       const char *launchcondition;
-       const char *indicatordisplay;
-       const char *portraitimg;
-       const char *landscapeimg;
-       const char *guestmode_visibility;
-       const char *app_component;
-       const char *permission_type;
-       const char *component_type;
-       const char *preload;
-       const char *submode;
-       const char *submode_mainid;
-       const char *installed_storage;
-       const char *process_pool;
-       const char *autorestart;
-       const char *onboot;
-       struct label_x *label;
-       struct icon_x *icon;
-       struct image_x *image;
-       struct appsvc_x *appsvc;
-       struct appcontrol_x *appcontrol;
-       struct category_x *category;
-       struct metadata_x *metadata;
-       struct permission_x *permission;
-       struct launchconditions_x *launchconditions;
-       struct notification_x *notification;
-       struct datashare_x *datashare;
-       struct uiapplication_x *prev;
-       struct uiapplication_x *next;
-} uiapplication_x;
-
-typedef struct serviceapplication_x {
-       const char *appid;
-       const char *exec;
-       const char *onboot;
-       const char *autorestart;
-       const char *enabled;
-       const char *type;
-       const char *package;
-       const char *permission_type;
-       struct label_x *label;
-       struct icon_x *icon;
-       struct appsvc_x *appsvc;
-       struct appcontrol_x *appcontrol;
-       struct category_x *category;
-       struct metadata_x *metadata;
-       struct permission_x *permission;
-       struct datacontrol_x *datacontrol;
-       struct launchconditions_x *launchconditions;
-       struct notification_x *notification;
-       struct datashare_x *datashare;
-       struct serviceapplication_x *prev;
-       struct serviceapplication_x *next;
-} serviceapplication_x;
-
-typedef struct daemon_x {
-       const char *name;
-       const char *text;
-       struct daemon_x *prev;
-       struct daemon_x *next;
-} daemon_x;
-
-typedef struct theme_x {
-       const char *name;
-       const char *text;
-       struct theme_x *prev;
-       struct theme_x *next;
-} theme_x;
-
-typedef struct font_x {
-       const char *name;
-       const char *text;
-       struct font_x *prev;
-       struct font_x *next;
-} font_x;
-
-typedef struct ime_x {
-       const char *name;
-       const char *text;
-       struct ime_x *prev;
-       struct ime_x *next;
-} ime_x;
-
-typedef struct manifest_x {
-       const char *package;            /**< package name*/
-       const char *version;            /**< package version*/
-       const char *installlocation;            /**< package install location*/
-       const char *ns;         /**<name space*/
-       const char *removable;          /**< package removable flag*/
-       const char *preload;            /**< package preload flag*/
-       const char *readonly;           /**< package readonly flag*/
-       const char *update;                     /**< package update flag*/
-       const char *appsetting;         /**< package app setting flag*/
-       const char *system;             /**< package system flag*/
-       const char *type;               /**< package type*/
-       const char *package_size;               /**< package size for external installation*/
-       const char *package_total_size;         /**< package size for total*/
-       const char *package_data_size;          /**< package size for data*/
-       const char *installed_time;             /**< installed time after finishing of installation*/
-       const char *installed_storage;          /**< package currently installed storage*/
-       const char *storeclient_id;             /**< id of store client for installed package*/
-       const char *mainapp_id;         /**< app id of main application*/
-       const char *package_url;                /**< app id of main application*/
-       const char *root_path;          /**< package root path*/
-       const char *csc_path;           /**< package csc path*/
-       const char *nodisplay_setting;          /**< package no display setting menu*/
-       struct icon_x *icon;            /**< package icon*/
-       struct label_x *label;          /**< package label*/
-       struct author_x *author;                /**< package author*/
-       struct description_x *description;              /**< package description*/
-       struct license_x *license;              /**< package license*/
-       struct privileges_x *privileges;        /**< package privileges*/
-       struct uiapplication_x *uiapplication;          /**< package's ui application*/
-       struct serviceapplication_x *serviceapplication;                /**< package's service application*/
-       struct daemon_x *daemon;                /**< package daemon*/
-       struct theme_x *theme;          /**< package theme*/
-       struct font_x *font;            /**< package font*/
-       struct ime_x *ime;              /**< package ime*/
-       struct compatibility_x *compatibility;          /**< package compatibility*/
-       struct deviceprofile_x *deviceprofile;          /**< package device profile*/
-} manifest_x;
+enum {
+       PM_PARSER_R_EINVAL = -2,                /**< Invalid argument */
+       PM_PARSER_R_ERROR = -1,         /**< General error */
+       PM_PARSER_R_OK = 0                      /**< General success */
+};
 
 /**
  * @fn char    int pkgmgr_parser_check_mdm_policy_for_uninstallation(manifest_x * mfx)
@@ -893,10 +471,10 @@ static int create_desktop_file(char *manifest)
 int pkgmgr_parser_create_desktop_file(manifest_x *mfx);
 
 /**
- * @fn int pkgmgr_parser_insert_disabled_pkg(const char *pkgid, char *const tagv[])
- * @brief      This API parses the manifest file of the disabled package and stores the data in DB.
+ * @fn int pkgmgr_parser_enable_pkg(const char *pkgid, char *const tagv[])
+ * @brief      This API updates the data of the enabled package in DB.
  *
- * @par                This API is for package-manager installer backends.
+ * @par                This API is for package-manager.
  * @par Sync (or) Async : Synchronous API
  *
  * @param[in]  pkgid   pointer to pkgid
@@ -911,20 +489,20 @@ int pkgmgr_parser_create_desktop_file(manifest_x *mfx);
 static int parser_disabled_pkg_for_installation(const char *pkgid)
 {
        int ret = 0;
-       ret = pkgmgr_parser_insert_disabled_pkg(pkgid, NULL);
+       ret = pkgmgr_parser_enable_pkg(pkgid, NULL);
        if (ret)
                return -1;
        return 0;
 }
  * @endcode
  */
-int pkgmgr_parser_insert_disabled_pkg(const char *pkgid, char *const tagv[]);
+int pkgmgr_parser_enable_pkg(const char *pkgid, char *const tagv[]);
 
 /**
- * @fn int pkgmgr_parser_delete_disabled_pkg(const char *pkgid, char *const tagv[])
- * @brief      This API deletes the data of the disabled package from DB.
+ * @fn int pkgmgr_parser_disable_pkg(const char *pkgid, char *const tagv[])
+ * @brief      This API updates the data of the disabled package in DB.
  *
- * @par                This API is for package-manager installer backends.
+ * @par                This API is for package-manager.
  * @par Sync (or) Async : Synchronous API
  *
  * @param[in]  pkgid   pointer to pkgid
@@ -939,15 +517,64 @@ int pkgmgr_parser_insert_disabled_pkg(const char *pkgid, char *const tagv[]);
 static int parse_disabled_pkg_file_for_uninstallation(const char *pkgid)
 {
        int ret = 0;
-       ret = pkgmgr_parser_delete_disabled_pkg(pkgid, NULL);
+       ret = pkgmgr_parser_disable_pkg(pkgid, NULL);
        if (ret)
                return -1;
        return 0;
 }
  * @endcode
  */
-int pkgmgr_parser_delete_disabled_pkg(const char *pkgid, char *const tagv[]);
+int pkgmgr_parser_disable_pkg(const char *pkgid, char *const tagv[]);
 
+/**
+ * @fn int pkgmgr_parser_insert_app_aliasid(void)
+ * @brief      This API updates the app aliasid table.
+ *
+ * @par                This API is for pkg_initdb and pkg_fota.
+ * @par Sync (or) Async : Synchronous API
+ *
+ * @return     0 if success, error code(<0) if fail
+ * @retval     PMINFO_R_OK     success
+ * @retval     PMINFO_R_ERROR  internal error
+ * @pre                None
+ * @post               None
+ * @code
+static int parse_insert_app_aliasid(void)
+{
+       int ret = 0;
+       ret = pkgmgr_parser_insert_app_aliasid();
+       if (ret)
+               return -1;
+       return 0;
+}
+ * @endcode
+ */
+int pkgmgr_parser_insert_app_aliasid(void );
+
+/**
+ * @fn int pkgmgr_parser_update_app_aliasid(void)
+ * @brief      This API updates the app aliasid table.
+ *
+ * @par                This API is for csc.
+ * @par Sync (or) Async : Synchronous API
+ *
+ * @return     0 if success, error code(<0) if fail
+ * @retval     PMINFO_R_OK     success
+ * @retval     PMINFO_R_ERROR  internal error
+ * @pre                None
+ * @post               None
+ * @code
+static int parse_update_app_aliasid(void)
+{
+       int ret = 0;
+       ret = pkgmgr_parser_update_app_aliasid();
+       if (ret)
+               return -1;
+       return 0;
+}
+ * @endcode
+ */
+int pkgmgr_parser_update_app_aliasid(void );
 
 /** @} */
 #ifdef __cplusplus
index 63d9cb2..2a70124 100755 (executable)
 #include <glib.h>
 #include <dlfcn.h>
 
-#include "pkgmgr-info.h"
 #include "pkgmgr_parser_internal.h"
 #include "pkgmgr_parser_db.h"
 
-#include "pkgmgr-info-debug.h"
+#include "pkgmgrinfo_debug.h"
+#include "pkgmgrinfo_type.h"
 
 #ifdef LOG_TAG
 #undef LOG_TAG
 #endif
 #define LOG_TAG "PKGMGR_PARSER"
 
-#define PKGMGR_PARSER_DB_FILE "/opt/dbspace/.pkgmgr_parser.db"
-#define PKGMGR_CERT_DB_FILE "/opt/dbspace/.pkgmgr_cert.db"
-
 #define MAX_QUERY_LEN          4096
+#define MAX_PACKAGE_STR_SIZE 512
+#define MAX_ALIAS_INI_ENTRY    (2 * MAX_PACKAGE_STR_SIZE) + 1
+#define USR_APPSVC_ALIAS_INI "/usr/share/appsvc/alias.ini"
+#define OPT_APPSVC_ALIAS_INI "/opt/usr/share/appsvc/alias.ini"
+#define MANIFEST_DB "/opt/dbspace/.pkgmgr_parser.db"
+typedef int (*sqlite_query_callback)(void *data, int ncols, char **coltxt, char **colname);
 
 sqlite3 *pkgmgr_parser_db;
 sqlite3 *pkgmgr_cert_db;
@@ -73,6 +76,11 @@ sqlite3 *pkgmgr_cert_db;
                                                "package_url text," \
                                                "root_path text," \
                                                "csc_path text," \
+                                               "package_support_disable text DEFAULT 'false', " \
+                                               "package_mother_package text DEFAULT 'false', " \
+                                               "package_disable text DEFAULT 'false', " \
+                                               "package_support_mode text, " \
+                                               "package_hash text, " \
                                                "package_reserve1 text," \
                                                "package_reserve2 text," \
                                                "package_reserve3 text," \
@@ -119,6 +127,7 @@ sqlite3 *pkgmgr_cert_db;
                                                "app_indicatordisplay text DEFAULT 'true', " \
                                                "app_portraitimg text, " \
                                                "app_landscapeimg text, " \
+                                               "app_effectimage_type text, " \
                                                "app_guestmodevisibility text DEFAULT 'true', " \
                                                "app_permissiontype text DEFAULT 'normal', " \
                                                "app_preload text DEFAULT 'false', " \
@@ -126,8 +135,20 @@ sqlite3 *pkgmgr_cert_db;
                                                "app_submode_mainid text, " \
                                                "app_installed_storage text, " \
                                                "app_process_pool text DEFAULT 'false', " \
+                                               "app_multi_instance text DEFAULT 'false', " \
+                                               "app_multi_instance_mainid text, " \
+                                               "app_multi_window text DEFAULT 'false', " \
+                                               "app_support_disable text DEFAULT 'false', " \
+                                               "app_disable text DEFAULT 'false', " \
+                                               "app_ui_gadget text DEFAULT 'false', " \
+                                               "app_removable text DEFAULT 'false', " \
+                                               "app_support_mode text, " \
+                                               "app_support_feature text, " \
                                                "component_type text, " \
                                                "package text not null, " \
+                                               "app_package_type text DEFAULT 'rpm', " \
+                                               "app_package_system text, " \
+                                               "app_package_installed_time text, " \
                                                "app_reserve1 text, " \
                                                "app_reserve2 text, " \
                                                "app_reserve3 text, " \
@@ -169,11 +190,8 @@ sqlite3 *pkgmgr_cert_db;
 
 #define QUERY_CREATE_TABLE_PACKAGE_APP_APP_CONTROL "create table if not exists package_app_app_control " \
                                                "(app_id text not null, " \
-                                               "operation text not null, " \
-                                               "uri_scheme text, " \
-                                               "mime_type text, " \
-                                               "subapp_name text, " \
-                                               "PRIMARY KEY(app_id,operation,uri_scheme,mime_type,subapp_name) " \
+                                               "app_control text not null, " \
+                                               "PRIMARY KEY(app_id,app_control) " \
                                                "FOREIGN KEY(app_id) " \
                                                "REFERENCES package_app_info(app_id) " \
                                                "ON DELETE CASCADE)"
@@ -270,146 +288,61 @@ sqlite3 *pkgmgr_cert_db;
                                                "PRIMARY KEY(app_id)) "
 
 #define QUERY_CREATE_TABLE_PACKAGE_PLUGIN_INFO "create table if not exists package_plugin_info " \
-       "(pkgid text primary key not null, " \
-       "enabled_plugin INTEGER DEFAULT 0)"
-
-#define QUERY_CREATE_TABLE_DISABLED_PACKAGE_INFO "create table if not exists disabled_package_info " \
-                                               "(package text primary key not null, " \
-                                               "package_type text DEFAULT 'rpm', " \
-                                               "package_version text, " \
-                                               "install_location text, " \
-                                               "package_size text, " \
-                                               "package_removable text DEFAULT 'true', " \
-                                               "package_preload text DEFAULT 'false', " \
-                                               "package_readonly text DEFAULT 'false', " \
-                                               "package_update text DEFAULT 'false', " \
-                                               "package_appsetting text DEFAULT 'false', " \
-                                               "package_nodisplay text DEFAULT 'false', " \
-                                               "package_system text DEFAULT 'false', " \
-                                               "author_name text, " \
-                                               "author_email text, " \
-                                               "author_href text," \
-                                               "installed_time text," \
-                                               "installed_storage text," \
-                                               "storeclient_id text," \
-                                               "mainapp_id text," \
-                                               "package_url text," \
-                                               "root_path text," \
-                                               "csc_path text)"
-
-#define QUERY_CREATE_TABLE_DISABLED_PACKAGE_APP_INFO "create table if not exists disabled_package_app_info " \
-                                               "(app_id text primary key not null, " \
-                                               "app_component text, " \
-                                               "app_exec text, " \
-                                               "app_nodisplay text DEFAULT 'false', " \
-                                               "app_type text, " \
-                                               "app_onboot text DEFAULT 'false', " \
-                                               "app_multiple text DEFAULT 'false', " \
-                                               "app_autorestart text DEFAULT 'false', " \
-                                               "app_taskmanage text DEFAULT 'false', " \
-                                               "app_enabled text DEFAULT 'true', " \
-                                               "app_hwacceleration text DEFAULT 'use-system-setting', " \
-                                               "app_screenreader text DEFAULT 'use-system-setting', " \
-                                               "app_mainapp text, " \
-                                               "app_recentimage text, " \
-                                               "app_launchcondition text, " \
-                                               "app_indicatordisplay text DEFAULT 'true', " \
-                                               "app_portraitimg text, " \
-                                               "app_landscapeimg text, " \
-                                               "app_guestmodevisibility text DEFAULT 'true', " \
-                                               "app_permissiontype text DEFAULT 'normal', " \
-                                               "app_preload text DEFAULT 'false', " \
-                                               "app_submode text DEFAULT 'false', " \
-                                               "app_submode_mainid text, " \
-                                               "app_installed_storage text, " \
-                                               "component_type text, " \
-                                               "package text not null, " \
-                                               "FOREIGN KEY(package) " \
-                                               "REFERENCES package_info(package) " \
-                                               "ON DELETE CASCADE)"
-
-#define QUERY_CREATE_TABLE_DISABLED_PACKAGE_LOCALIZED_INFO "create table if not exists disabled_package_localized_info " \
-                                                       "(package text not null, " \
-                                                       "package_locale text DEFAULT 'No Locale', " \
-                                                       "package_label text, " \
-                                                       "package_icon text, " \
-                                                       "package_description text, " \
-                                                       "package_license text, " \
-                                                       "package_author, " \
-                                                       "PRIMARY KEY(package, package_locale), " \
-                                                       "FOREIGN KEY(package) " \
-                                                       "REFERENCES package_info(package) " \
-                                                       "ON DELETE CASCADE)"
-
-#define QUERY_CREATE_TABLE_DISABLED_PACKAGE_APP_LOCALIZED_INFO "create table if not exists disabled_package_app_localized_info " \
-                                               "(app_id text not null, " \
-                                               "app_locale text DEFAULT 'No Locale', " \
-                                               "app_label text, " \
-                                               "app_icon text, " \
-                                               "package text not null, " \
-                                               "PRIMARY KEY(app_id,app_locale) " \
-                                               "FOREIGN KEY(app_id) " \
-                                               "REFERENCES package_app_info(app_id) " \
-                                               "ON DELETE CASCADE)"
+                                               "(pkgid text primary key not null, " \
+                                               "enabled_plugin INTEGER DEFAULT 0)"
 
-#define QUERY_CREATE_TABLE_DISABLED_PACKAGE_APP_APP_CATEGORY "create table if not exists disabled_package_app_app_category " \
+#define QUERY_CREATE_TABLE_PACKAGE_APP_DATA_CONTROL "create table if not exists package_app_data_control " \
                                                "(app_id text not null, " \
-                                               "category text not null, " \
-                                               "package text not null, " \
-                                               "PRIMARY KEY(app_id,category) " \
+                                               "providerid text not null, " \
+                                               "access text not null, " \
+                                               "type text not null, " \
+                                               "PRIMARY KEY(app_id, providerid, access, type) " \
                                                "FOREIGN KEY(app_id) " \
                                                "REFERENCES package_app_info(app_id) " \
                                                "ON DELETE CASCADE)"
 
-
-#define QUERY_CREATE_TABLE_DISABLED_PACKAGE_APP_APP_METADATA "create table if not exists disabled_package_app_app_metadata " \
-                                               "(app_id text not null, " \
-                                               "md_key text not null, " \
-                                               "md_value text not null, " \
-                                               "package text not null, " \
-                                               "PRIMARY KEY(app_id, md_key, md_value) " \
-                                               "FOREIGN KEY(app_id) " \
-                                               "REFERENCES package_app_info(app_id) " \
-                                               "ON DELETE CASCADE)"
+#define QUERY_CREATE_TABLE_PACKAGE_APP_ALIASID "create table if not exists package_app_aliasid" \
+                                               "(app_id text primary key not null, "\
+                                               "alias_id text not null)"
 
 static int __insert_uiapplication_info(manifest_x *mfx);
-static int __insert_serviceapplication_info(manifest_x *mfx);
 static int __insert_uiapplication_appsvc_info(manifest_x *mfx);
-static int __insert_serviceapplication_appsvc_info(manifest_x *mfx);
 static int __insert_uiapplication_appcategory_info(manifest_x *mfx);
-static int __insert_serviceapplication_appcategory_info(manifest_x *mfx);
 static int __insert_uiapplication_appcontrol_info(manifest_x *mfx);
-static int __insert_serviceapplication_appmetadata_info(manifest_x *mfx);
 static int __insert_uiapplication_appmetadata_info(manifest_x *mfx);
-static int __insert_serviceapplication_appcontrol_info(manifest_x *mfx);
 static int __insert_uiapplication_share_allowed_info(manifest_x *mfx);
-static int __insert_serviceapplication_share_allowed_info(manifest_x *mfx);
 static int __insert_uiapplication_share_request_info(manifest_x *mfx);
-static int __insert_serviceapplication_share_request_info(manifest_x *mfx);
-static void __insert_serviceapplication_locale_info(gpointer data, gpointer userdata);
 static void __insert_uiapplication_locale_info(gpointer data, gpointer userdata);
+static int __insert_uiapplication_datacontrol_info(manifest_x *mfx);
 static void __insert_pkglocale_info(gpointer data, gpointer userdata);
+static int __delete_manifest_info_from_pkgid(const char *pkgid);
+static int __delete_manifest_info_from_appid(const char *appid);
 static int __insert_manifest_info_in_db(manifest_x *mfx);
 static int __delete_manifest_info_from_db(manifest_x *mfx);
-static int __delete_subpkg_info_from_db(char *appid);
 static int __delete_appinfo_from_db(char *db_table, const char *appid);
-static int __initialize_db(sqlite3 *db_handle, const char *db_query);
-static int __exec_query(char *query);
-static void __extract_data(gpointer data, label_x *lbl, license_x *lcn, icon_x *icn, description_x *dcn, author_x *ath,
-               char **label, char **license, char **icon, char **description, char **author);
 static gint __comparefunc(gconstpointer a, gconstpointer b, gpointer userdata);
-static GList *__create_locale_list(GList *locale, label_x *lbl, license_x *lcn, icon_x *icn, description_x *dcn, author_x *ath);
 static int __pkgmgr_parser_create_db(sqlite3 **db_handle, const char *db_path);
 
-static int __delete_subpkg_list_cb(void *data, int ncols, char **coltxt, char **colname)
+static void __str_trim(char *input)
 {
-       if (coltxt[0])
-               __delete_subpkg_info_from_db(coltxt[0]);
+       char *trim_str = input;
 
-       return 0;
+       if (input == NULL)
+               return;
+
+       while (*input != 0) {
+               if (!isspace(*input)) {
+                       *trim_str = *input;
+                       trim_str++;
+               }
+               input++;
+       }
+
+       *trim_str = 0;
+       return;
 }
 
-static const char *__get_str(const char *str)
+const char *__get_str(const char *str)
 {
        if (str == NULL)
        {
@@ -449,7 +382,7 @@ static int __pkgmgr_parser_create_db(sqlite3 **db_handle, const char *db_path)
        return 0;
 }
 
-static int __evaluate_query(sqlite3 *db_handle, const char *query)
+int __evaluate_query(sqlite3 *db_handle, char *query)
 {
        sqlite3_stmt* p_statement;
        int result;
@@ -473,17 +406,17 @@ static int __evaluate_query(sqlite3 *db_handle, const char *query)
        return 0;
 }
 
-static int __initialize_db(sqlite3 *db_handle, const char *db_query)
+int __initialize_db(sqlite3 *db_handle, char *db_query)
 {
        return (__evaluate_query(db_handle, db_query));
 }
 
-static int __exec_query(char *query)
+int __exec_query(char *query)
 {
        return (__evaluate_query(pkgmgr_parser_db, query));
 }
 
-static int __exec_query_no_msg(char *query)
+int __exec_query_no_msg(char *query)
 {
        char *error_message = NULL;
        if (SQLITE_OK !=
@@ -495,7 +428,21 @@ static int __exec_query_no_msg(char *query)
        return 0;
 }
 
-static GList *__create_locale_list(GList *locale, label_x *lbl, license_x *lcn, icon_x *icn, description_x *dcn, author_x *ath)
+static int __exec_db_query(sqlite3 *db, char *query, sqlite_query_callback callback, void *data)
+{
+       char *error_message = NULL;
+       if (SQLITE_OK !=
+           sqlite3_exec(db, query, callback, data, &error_message)) {
+               _LOGE("Don't execute query = %s error message = %s\n", query,
+                      error_message);
+               sqlite3_free(error_message);
+               return -1;
+       }
+       sqlite3_free(error_message);
+       return 0;
+}
+
+GList *__create_locale_list(GList *locale, label_x *lbl, license_x *lcn, icon_x *icn, description_x *dcn, author_x *ath)
 {
 
        while(lbl != NULL)
@@ -554,12 +501,7 @@ static GList *__create_image_list(GList *locale, image_x *image)
        return locale;
 }
 
-static void __printfunc(gpointer data, gpointer userdata)
-{
-       _LOGD("%s  ", (char*)data);
-}
-
-static void __trimfunc(GList* trim_list)
+void __trimfunc(GList* trim_list)
 {
        char *trim_data = NULL;
        char *prev = NULL;
@@ -599,7 +541,7 @@ static gint __comparefunc(gconstpointer a, gconstpointer b, gpointer userdata)
        return 0;
 }
 
-static void __extract_data(gpointer data, label_x *lbl, license_x *lcn, icon_x *icn, description_x *dcn, author_x *ath,
+void __extract_data(gpointer data, label_x *lbl, license_x *lcn, icon_x *icn, description_x *dcn, author_x *ath,
                char **label, char **license, char **icon, char **description, char **author)
 {
        while(lbl != NULL)
@@ -695,7 +637,7 @@ static void __insert_pkglocale_info(gpointer data, gpointer userdata)
        char *description = NULL;
        char *license = NULL;
        char *author = NULL;
-       char query[MAX_QUERY_LEN] = {'\0'};
+       char *query = NULL;
 
        manifest_x *mfx = (manifest_x *)userdata;
        label_x *lbl = mfx->label;
@@ -708,13 +650,13 @@ static void __insert_pkglocale_info(gpointer data, gpointer userdata)
        if (!label && !description && !icon && !license && !author)
                return;
 
-       sqlite3_snprintf(MAX_QUERY_LEN, query, "insert into package_localized_info(package, package_locale, " \
+       query = sqlite3_mprintf("insert into package_localized_info(package, package_locale, " \
                "package_label, package_icon, package_description, package_license, package_author) values " \
-               "('%q', '%q', '%q', '%q', '%s', '%s', '%s')",
+               "(%Q, %Q, %Q, %Q, %Q, %Q, %Q)",
                mfx->package,
                (char*)data,
-               label,
-               icon,
+               __get_str(label),
+               __get_str(icon),
                __get_str(description),
                __get_str(license),
                __get_str(author));
@@ -722,6 +664,39 @@ static void __insert_pkglocale_info(gpointer data, gpointer userdata)
        ret = __exec_query(query);
        if (ret == -1)
                _LOGD("Package Localized Info DB Insert failed\n");
+
+       sqlite3_free(query);
+}
+
+static int __insert_uiapplication_datacontrol_info(manifest_x *mfx)
+{
+       uiapplication_x *up = mfx->uiapplication;
+       datacontrol_x *dc = NULL;
+       int ret = -1;
+       char *query = NULL;
+
+       while (up != NULL)
+       {
+               dc = up->datacontrol;
+               while (dc != NULL) {
+                       query = sqlite3_mprintf("insert into package_app_data_control(app_id, providerid, access, type) " \
+                               "values(%Q, %Q, %Q, %Q)", \
+                               up->appid,
+                               dc->providerid,
+                               dc->access,
+                               dc->type);
+
+                       ret = __exec_query(query);
+                       sqlite3_free(query);
+                       if (ret == -1) {
+                               _LOGD("Package UiApp Data Control DB Insert Failed\n");
+                               return -1;
+                       }
+                       dc = dc->next;
+               }
+               up = up->next;
+       }
+       return 0;
 }
 
 static void __insert_uiapplication_locale_info(gpointer data, gpointer userdata)
@@ -729,7 +704,7 @@ static void __insert_uiapplication_locale_info(gpointer data, gpointer userdata)
        int ret = -1;
        char *label = NULL;
        char *icon = NULL;
-       char query[MAX_QUERY_LEN] = {'\0'};
+       char *query = NULL;
 
        uiapplication_x *up = (uiapplication_x*)userdata;
        label_x *lbl = up->label;
@@ -738,14 +713,17 @@ static void __insert_uiapplication_locale_info(gpointer data, gpointer userdata)
        __extract_data(data, lbl, NULL, icn, NULL, NULL, &label, NULL, &icon, NULL, NULL);
        if (!label && !icon)
                return;
-       sqlite3_snprintf(MAX_QUERY_LEN, query, "insert into package_app_localized_info(app_id, app_locale, " \
+
+       query = sqlite3_mprintf("insert into package_app_localized_info(app_id, app_locale, " \
                "app_label, app_icon) values " \
-               "('%q', '%q', '%q', '%q')", up->appid, (char*)data,
-               label, icon);
+               "(%Q, %Q, %Q, %Q)", up->appid, (char*)data,
+               __get_str(label), __get_str(icon));
        ret = __exec_query(query);
        if (ret == -1)
                _LOGD("Package UiApp Localized Info DB Insert failed\n");
 
+       sqlite3_free(query);
+
        /*insert ui app locale info to pkg locale to get mainapp data */
        if (strcasecmp(up->mainapp, "true")==0) {
                char *update_query = NULL;
@@ -754,8 +732,8 @@ static void __insert_uiapplication_locale_info(gpointer data, gpointer userdata)
                        "(%Q, %Q, %Q, %Q, %Q, %Q, %Q)",
                        up->package,
                        (char*)data,
-                       label,
-                       icon,
+                       __get_str(label),
+                       __get_str(icon),
                        PKGMGR_PARSER_EMPTY_STR,
                        PKGMGR_PARSER_EMPTY_STR,
                        PKGMGR_PARSER_EMPTY_STR);
@@ -777,7 +755,7 @@ static void __insert_uiapplication_icon_section_info(gpointer data, gpointer use
        int ret = -1;
        char *icon = NULL;
        char *resolution = NULL;
-       char query[MAX_QUERY_LEN] = {'\0'};
+       char * query = NULL;
 
        uiapplication_x *up = (uiapplication_x*)userdata;
        icon_x *icn = up->icon;
@@ -785,15 +763,17 @@ static void __insert_uiapplication_icon_section_info(gpointer data, gpointer use
        __extract_icon_data(data, icn, &icon, &resolution);
        if (!icon && !resolution)
                return;
-       sqlite3_snprintf(MAX_QUERY_LEN, query, "insert into package_app_icon_section_info(app_id, " \
+
+       query = sqlite3_mprintf("insert into package_app_icon_section_info(app_id, " \
                "app_icon, app_icon_section, app_icon_resolution) values " \
-               "('%q', '%q', '%q', '%q')", up->appid,
+               "(%Q, %Q, %Q, %Q)", up->appid,
                icon, (char*)data, resolution);
 
        ret = __exec_query(query);
        if (ret == -1)
                _LOGD("Package UiApp Localized Info DB Insert failed\n");
 
+       sqlite3_free(query);
 }
 
 static void __insert_uiapplication_image_info(gpointer data, gpointer userdata)
@@ -801,7 +781,7 @@ static void __insert_uiapplication_image_info(gpointer data, gpointer userdata)
        int ret = -1;
        char *lang = NULL;
        char *img = NULL;
-       char query[MAX_QUERY_LEN] = {'\0'};
+       char *query = NULL;
 
        uiapplication_x *up = (uiapplication_x*)userdata;
        image_x *image = up->image;
@@ -809,51 +789,29 @@ static void __insert_uiapplication_image_info(gpointer data, gpointer userdata)
        __extract_image_data(data, image, &lang, &img);
        if (!lang && !img)
                return;
-       sqlite3_snprintf(MAX_QUERY_LEN, query, "insert into package_app_image_info(app_id, app_locale, " \
+
+       query = sqlite3_mprintf("insert into package_app_image_info(app_id, app_locale, " \
                "app_image_section, app_image) values " \
-               "('%q', '%q', '%q', '%q')", up->appid, lang, (char*)data, img);
+               "(%Q, %Q, %Q, %Q)", up->appid, lang, (char*)data, img);
 
        ret = __exec_query(query);
        if (ret == -1)
                _LOGD("Package UiApp image Info DB Insert failed\n");
 
-}
-
-
-static void __insert_serviceapplication_locale_info(gpointer data, gpointer userdata)
-{
-       int ret = -1;
-       char *icon = NULL;
-       char *label = NULL;
-       char query[MAX_QUERY_LEN] = {'\0'};
-
-       serviceapplication_x *sp = (serviceapplication_x*)userdata;
-       label_x *lbl = sp->label;
-       icon_x *icn = sp->icon;
-
-       __extract_data(data, lbl, NULL, icn, NULL, NULL, &label, NULL, &icon, NULL, NULL);
-       if (!icon && !label)
-               return;
-       sqlite3_snprintf(MAX_QUERY_LEN, query, "insert into package_app_localized_info(app_id, app_locale, " \
-               "app_label, app_icon) values " \
-               "('%q', '%q', '%q', '%q')", sp->appid, (char*)data,
-               label, icon);
-       ret = __exec_query(query);
-       if (ret == -1)
-               _LOGD("Package ServiceApp Localized Info DB Insert failed\n");
+       sqlite3_free(query);
 }
 
 static int __insert_ui_mainapp_info(manifest_x *mfx)
 {
        uiapplication_x *up = mfx->uiapplication;
        int ret = -1;
-       char query[MAX_QUERY_LEN] = {'\0'};
+       char *query = NULL;
        while(up != NULL)
        {
-               snprintf(query, MAX_QUERY_LEN,
-                       "update package_app_info set app_mainapp='%s' where app_id='%s'", up->mainapp, up->appid);
+               query = sqlite3_mprintf("update package_app_info set app_mainapp=%Q where app_id=%Q", up->mainapp, up->appid);
 
                ret = __exec_query(query);
+               sqlite3_free(query);
                if (ret == -1) {
                        _LOGD("Package UiApp Info DB Insert Failed\n");
                        return -1;
@@ -862,32 +820,31 @@ static int __insert_ui_mainapp_info(manifest_x *mfx)
                        mfx->mainapp_id = strdup(up->appid);
 
                up = up->next;
-               memset(query, '\0', MAX_QUERY_LEN);
        }
 
        if (mfx->mainapp_id == NULL){
                if (mfx->uiapplication && mfx->uiapplication->appid) {
-                       snprintf(query, MAX_QUERY_LEN, "update package_app_info set app_mainapp='true' where app_id='%s'", mfx->uiapplication->appid);
+                       query = sqlite3_mprintf("update package_app_info set app_mainapp='true' where app_id=%Q", mfx->uiapplication->appid);
                } else {
                        _LOGD("Not valid appid\n");
                        return -1;
                }
 
                ret = __exec_query(query);
+               sqlite3_free(query);
                if (ret == -1) {
                        _LOGD("Package UiApp Info DB Insert Failed\n");
                        return -1;
                }
 
-               free((void *)mfx->uiapplication->mainapp);
+               FREE_AND_NULL(mfx->uiapplication->mainapp);
                mfx->uiapplication->mainapp= strdup("true");
                mfx->mainapp_id = strdup(mfx->uiapplication->appid);
        }
 
-       memset(query, '\0', MAX_QUERY_LEN);
-       snprintf(query, MAX_QUERY_LEN,
-               "update package_info set mainapp_id='%s' where package='%s'", mfx->mainapp_id, mfx->package);
+       query = sqlite3_mprintf("update package_info set mainapp_id=%Q where package=%Q", mfx->mainapp_id, mfx->package);
        ret = __exec_query(query);
+       sqlite3_free(query);
        if (ret == -1) {
                _LOGD("Package Info DB update Failed\n");
                return -1;
@@ -902,15 +859,24 @@ static int __insert_uiapplication_info(manifest_x *mfx)
 {
        uiapplication_x *up = mfx->uiapplication;
        int ret = -1;
-       char query[MAX_QUERY_LEN] = {'\0'};
+       char *query = NULL;
+       char *type = NULL;
+
+       if (mfx->type)
+               type = strdup(mfx->type);
+       else
+               type = strdup("rpm");
+
        while(up != NULL)
        {
-               snprintf(query, MAX_QUERY_LEN,
-                        "insert into package_app_info(app_id, app_component, app_exec, app_nodisplay, app_type, app_onboot, " \
+               query = sqlite3_mprintf("insert into package_app_info(app_id, app_component, app_exec, app_nodisplay, app_type, app_onboot, " \
                        "app_multiple, app_autorestart, app_taskmanage, app_enabled, app_hwacceleration, app_screenreader, app_mainapp , app_recentimage, " \
-                       "app_launchcondition, app_indicatordisplay, app_portraitimg, app_landscapeimg, app_guestmodevisibility, app_permissiontype, "\
-                       "app_preload, app_submode, app_submode_mainid, app_installed_storage, app_process_pool, component_type, package) " \
-                       "values('%s', '%s', '%s', '%s', '%s', '%s','%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s','%s', '%s')",\
+                       "app_launchcondition, app_indicatordisplay, app_portraitimg, app_landscapeimg, app_effectimage_type, app_guestmodevisibility, app_permissiontype, "\
+                       "app_preload, app_submode, app_submode_mainid, app_installed_storage, app_process_pool, app_multi_instance, app_multi_instance_mainid, app_multi_window, app_support_disable, "\
+                       "app_ui_gadget, app_removable, app_support_mode, app_support_feature, component_type, package, "\
+                       "app_package_type, app_package_system, app_package_installed_time"\
+                       ") " \
+                       "values(%Q, %Q, %Q, %Q, %Q, %Q, %Q, %Q, %Q, %Q, %Q, %Q, %Q, %Q, %Q, %Q, %Q, %Q, %Q, %Q, %Q, %Q, %Q, %Q, %Q, %Q, %Q, %Q, %Q, %Q, %Q, %Q, %Q, %Q, %Q, %Q, %Q, %Q, %Q)",\
                        up->appid,
                        "uiapp",
                        up->exec,
@@ -929,6 +895,7 @@ static int __insert_uiapplication_info(manifest_x *mfx)
                        up->indicatordisplay,
                        __get_str(up->portraitimg),
                        __get_str(up->landscapeimg),
+                       __get_str(up->effectimage_type),
                        up->guestmode_visibility,
                        up->permission_type,
                        mfx->preload,
@@ -936,17 +903,31 @@ static int __insert_uiapplication_info(manifest_x *mfx)
                        __get_str(up->submode_mainid),
                        mfx->installed_storage,
                        up->process_pool,
+                       up->multi_instance,
+                       __get_str(up->multi_instance_mainid),
+                       up->multi_window,
+                       mfx->support_disable,
+                       up->ui_gadget,
+                       mfx->removable,
+                       mfx->support_mode,
+                       up->support_feature,
                        up->component_type,
-                       mfx->package);
+                       mfx->package,
+                       type,
+                       mfx->system,
+                       mfx->installed_time
+                       );
 
                ret = __exec_query(query);
+               sqlite3_free(query);
                if (ret == -1) {
                        _LOGD("Package UiApp Info DB Insert Failed\n");
+                       FREE_AND_NULL(type);
                        return -1;
                }
                up = up->next;
-               memset(query, '\0', MAX_QUERY_LEN);
        }
+       FREE_AND_NULL(type);
        return 0;
 }
 
@@ -955,23 +936,22 @@ static int __insert_uiapplication_appcategory_info(manifest_x *mfx)
        uiapplication_x *up = mfx->uiapplication;
        category_x *ct = NULL;
        int ret = -1;
-       char query[MAX_QUERY_LEN] = {'\0'};
+       char *query = NULL;
        while(up != NULL)
        {
                ct = up->category;
                while (ct != NULL)
                {
-                       snprintf(query, MAX_QUERY_LEN,
-                               "insert into package_app_app_category(app_id, category) " \
-                               "values('%s','%s')",\
+                       query = sqlite3_mprintf("insert into package_app_app_category(app_id, category) " \
+                               "values(%Q, %Q)",\
                                 up->appid, ct->name);
                        ret = __exec_query(query);
+                       sqlite3_free(query);
                        if (ret == -1) {
                                _LOGD("Package UiApp Category Info DB Insert Failed\n");
                                return -1;
                        }
                        ct = ct->next;
-                       memset(query, '\0', MAX_QUERY_LEN);
                }
                up = up->next;
        }
@@ -983,25 +963,24 @@ static int __insert_uiapplication_appmetadata_info(manifest_x *mfx)
        uiapplication_x *up = mfx->uiapplication;
        metadata_x *md = NULL;
        int ret = -1;
-       char query[MAX_QUERY_LEN] = {'\0'};
+       char *query = NULL;
        while(up != NULL)
        {
                md = up->metadata;
                while (md != NULL)
                {
                        if (md->key) {
-                               snprintf(query, MAX_QUERY_LEN,
-                                       "insert into package_app_app_metadata(app_id, md_key, md_value) " \
-                                       "values('%s','%s', '%s')",\
-                                        up->appid, md->key, md->value);
+                               query = sqlite3_mprintf("insert into package_app_app_metadata(app_id, md_key, md_value) " \
+                                       "values(%Q, %Q, %Q)",\
+                                        up->appid, md->key, __get_str(md->value));
                                ret = __exec_query(query);
+                               sqlite3_free(query);
                                if (ret == -1) {
                                        _LOGD("Package UiApp Metadata Info DB Insert Failed\n");
                                        return -1;
                                }
                        }
                        md = md->next;
-                       memset(query, '\0', MAX_QUERY_LEN);
                }
                up = up->next;
        }
@@ -1013,23 +992,22 @@ static int __insert_uiapplication_apppermission_info(manifest_x *mfx)
        uiapplication_x *up = mfx->uiapplication;
        permission_x *pm = NULL;
        int ret = -1;
-       char query[MAX_QUERY_LEN] = {'\0'};
+       char *query = NULL;
        while(up != NULL)
        {
                pm = up->permission;
                while (pm != NULL)
                {
-                       snprintf(query, MAX_QUERY_LEN,
-                               "insert into package_app_app_permission(app_id, pm_type, pm_value) " \
-                               "values('%s','%s', '%s')",\
+                       query = sqlite3_mprintf("insert into package_app_app_permission(app_id, pm_type, pm_value) " \
+                               "values(%Q, %Q, %Q)",\
                                 up->appid, pm->type, pm->value);
                        ret = __exec_query(query);
+                       sqlite3_free(query);
                        if (ret == -1) {
                                _LOGD("Package UiApp permission Info DB Insert Failed\n");
                                return -1;
                        }
                        pm = pm->next;
-                       memset(query, '\0', MAX_QUERY_LEN);
                }
                up = up->next;
        }
@@ -1038,75 +1016,97 @@ static int __insert_uiapplication_apppermission_info(manifest_x *mfx)
 
 static int __insert_uiapplication_appcontrol_info(manifest_x *mfx)
 {
+       int ret = 0;
+       char *buf = NULL;
+       char *buftemp = NULL;
+       char *query = NULL;
        uiapplication_x *up = mfx->uiapplication;
-       appcontrol_x *acontrol = NULL;
-       operation_x *op = NULL;
-       mime_x *mi = NULL;
-       uri_x *ui = NULL;
-       subapp_x *sub = NULL;
-       int ret = -1;
-       char query[MAX_QUERY_LEN] = {'\0'};
-       const char *operation = NULL;
-       const char *mime = NULL;
-       const char *uri = NULL;
-       const char *subapp = NULL;
-       while(up != NULL)
-       {
-               acontrol = up->appcontrol;
-               while(acontrol != NULL)
-               {
-                       op = acontrol->operation;
-                       while(op != NULL)
-                       {
-                               if (op)
-                                       operation = op->name;
-                               mi = acontrol->mime;
 
-                               do
-                               {
-                                       if (mi)
-                                               mime = mi->name;
-                                       sub = acontrol->subapp;
+       buf = (char *)calloc(1, BUFMAX);
+       retvm_if(!buf, PMINFO_R_ERROR, "Malloc Failed\n");
+
+       buftemp = (char *)calloc(1, BUFMAX);
+       tryvm_if(!buftemp, ret = PMINFO_R_ERROR, "Malloc Failed\n");
+
+       for(; up; up=up->next) {
+               if (up->appsvc) {
+                       appsvc_x *asvc = NULL;
+                       operation_x *op = NULL;
+                       mime_x *mi = NULL;
+                       uri_x *ui = NULL;
+                       subapp_x *sub = NULL;
+                       const char *operation = NULL;
+                       const char *mime = NULL;
+                       const char *uri = NULL;
+                       const char *subapp = NULL;
+                       int i = 0;
+                       memset(buf, '\0', BUFMAX);
+                       memset(buftemp, '\0', BUFMAX);
+
+                       asvc = up->appsvc;
+                       while(asvc != NULL) {
+                               op = asvc->operation;
+                               while(op != NULL) {
+                                       if (op)
+                                               operation = op->name;
+                                       mi = asvc->mime;
+
                                        do
                                        {
-                                               if (sub)
-                                                       subapp = sub->name;
-                                               ui = acontrol->uri;
+                                               if (mi)
+                                                       mime = mi->name;
+                                               sub = asvc->subapp;
                                                do
                                                {
-                                                       if (ui)
-                                                               uri = ui->name;
-                                                       snprintf(query, MAX_QUERY_LEN,
-                                                                "insert into package_app_app_control(app_id, operation, uri_scheme, mime_type, subapp_name) " \
-                                                               "values('%s', '%s', '%s', '%s', '%s')",\
-                                                                up->appid, operation, uri, mime, subapp);
+                                                       if (sub)
+                                                               subapp = sub->name;
+                                                       ui = asvc->uri;
+                                                       do
+                                                       {
+                                                               if (ui)
+                                                                       uri = ui->name;
 
-                                                       ret = __exec_query(query);
-                                                       if (ret == -1) {
-                                                               _LOGD("Package UiApp AppSvc DB Insert Failed\n");
-                                                               return -1;
-                                                       }
-                                                       memset(query, '\0', MAX_QUERY_LEN);
-                                                       if (ui)
-                                                               ui = ui->next;
-                                                       uri = NULL;
-                                               } while(ui != NULL);
-                                               if (sub)
-                                                       sub = sub->next;
-                                               subapp = NULL;
-                                       }while(sub != NULL);
-                                       if (mi)
-                                               mi = mi->next;
-                                       mime = NULL;
-                               }while(mi != NULL);
-                               if (op)
-                                       op = op->next;
-                               operation = NULL;
+                                                               if(i++ > 0) {
+                                                                       strncpy(buftemp, buf, BUFMAX);
+                                                                       snprintf(buf, BUFMAX, "%s;", buftemp);
+                                                               }
+
+                                                               strncpy(buftemp, buf, BUFMAX);
+                                                               snprintf(buf, BUFMAX, "%s%s|%s|%s|%s", buftemp, operation?operation:"NULL", uri?uri:"NULL", mime?mime:"NULL", subapp?subapp:"NULL");
+//                                                             _LOGD("buf[%s]\n", buf);
+
+                                                               if (ui)
+                                                                       ui = ui->next;
+                                                               uri = NULL;
+                                                       } while(ui != NULL);
+                                                       if (sub)
+                                                               sub = sub->next;
+                                                       subapp = NULL;
+                                               }while(sub != NULL);
+                                               if (mi)
+                                                       mi = mi->next;
+                                               mime = NULL;
+                                       }while(mi != NULL);
+                                       if (op)
+                                               op = op->next;
+                                       operation = NULL;
+                               }
+                               asvc = asvc->next;
                        }
-                       acontrol = acontrol->next;
+
+                       query= sqlite3_mprintf("insert into package_app_app_control(app_id, app_control) values(%Q, %Q)", up->appid,  buf);
+                       ret = __exec_query(query);
+                       if (ret < 0) {
+                               _LOGD("Package UiApp app_control DB Insert Failed\n");
+                       }
+                       sqlite3_free(query);
                }
-               up = up->next;
        }
+
+catch:
+       FREE_AND_NULL(buf);
+       FREE_AND_NULL(buftemp);
+
        return 0;
 }
 
@@ -1119,7 +1119,7 @@ static int __insert_uiapplication_appsvc_info(manifest_x *mfx)
        uri_x *ui = NULL;
        subapp_x *sub = NULL;
        int ret = -1;
-       char query[MAX_QUERY_LEN] = {'\0'};
+       char *query = NULL;
        const char *operation = NULL;
        const char *mime = NULL;
        const char *uri = NULL;
@@ -1150,9 +1150,8 @@ static int __insert_uiapplication_appsvc_info(manifest_x *mfx)
                                                {
                                                        if (ui)
                                                                uri = ui->name;
-                                                       snprintf(query, MAX_QUERY_LEN,
-                                                                "insert into package_app_app_svc(app_id, operation, uri_scheme, mime_type, subapp_name) " \
-                                                               "values('%s', '%s', '%s', '%s', '%s')",\
+                                                       query = sqlite3_mprintf("insert into package_app_app_svc(app_id, operation, uri_scheme, mime_type, subapp_name) " \
+                                                               "values(%Q, %Q, %Q, %Q, %Q)",\
                                                                 up->appid,
                                                                 operation,
                                                                 __get_str(uri),
@@ -1160,11 +1159,11 @@ static int __insert_uiapplication_appsvc_info(manifest_x *mfx)
                                                                 __get_str(subapp));
 
                                                        ret = __exec_query(query);
+                                                       sqlite3_free(query);
                                                        if (ret == -1) {
                                                                _LOGD("Package UiApp AppSvc DB Insert Failed\n");
                                                                return -1;
                                                        }
-                                                       memset(query, '\0', MAX_QUERY_LEN);
                                                        if (ui)
                                                                ui = ui->next;
                                                        uri = NULL;
@@ -1194,7 +1193,7 @@ static int __insert_uiapplication_share_request_info(manifest_x *mfx)
        datashare_x *ds = NULL;
        request_x *rq = NULL;
        int ret = -1;
-       char query[MAX_QUERY_LEN] = {'\0'};
+       char *query = NULL;
        while(up != NULL)
        {
                ds = up->datashare;
@@ -1203,16 +1202,15 @@ static int __insert_uiapplication_share_request_info(manifest_x *mfx)
                        rq = ds->request;
                        while(rq != NULL)
                        {
-                               snprintf(query, MAX_QUERY_LEN,
-                                        "insert into package_app_share_request(app_id, data_share_request) " \
-                                       "values('%s', '%s')",\
+                               query = sqlite3_mprintf("insert into package_app_share_request(app_id, data_share_request) " \
+                                       "values(%Q, %Q)",\
                                         up->appid, rq->text);
                                ret = __exec_query(query);
+                               sqlite3_free(query);
                                if (ret == -1) {
                                        _LOGD("Package UiApp Share Request DB Insert Failed\n");
                                        return -1;
                                }
-                               memset(query, '\0', MAX_QUERY_LEN);
                                rq = rq->next;
                        }
                        ds = ds->next;
@@ -1229,7 +1227,7 @@ static int __insert_uiapplication_share_allowed_info(manifest_x *mfx)
        define_x *df = NULL;
        allowed_x *al = NULL;
        int ret = -1;
-       char query[MAX_QUERY_LEN] = {'\0'};
+       char *query = NULL;
        while(up != NULL)
        {
                ds = up->datashare;
@@ -1241,16 +1239,15 @@ static int __insert_uiapplication_share_allowed_info(manifest_x *mfx)
                                al = df->allowed;
                                while(al != NULL)
                                {
-                                       snprintf(query, MAX_QUERY_LEN,
-                                                "insert into package_app_share_allowed(app_id, data_share_path, data_share_allowed) " \
-                                               "values('%s', '%s', '%s')",\
+                                       query = sqlite3_mprintf("insert into package_app_share_allowed(app_id, data_share_path, data_share_allowed) " \
+                                               "values(%Q, %Q, %Q)",\
                                                 up->appid, df->path, al->text);
                                        ret = __exec_query(query);
+                                       sqlite3_free(query);
                                        if (ret == -1) {
                                                _LOGD("Package UiApp Share Allowed DB Insert Failed\n");
                                                return -1;
                                        }
-                                       memset(query, '\0', MAX_QUERY_LEN);
                                        al = al->next;
                                }
                                df = df->next;
@@ -1262,363 +1259,26 @@ static int __insert_uiapplication_share_allowed_info(manifest_x *mfx)
        return 0;
 }
 
-static int __insert_serviceapplication_info(manifest_x *mfx)
+static int __insert_manifest_info_in_db(manifest_x *mfx)
 {
-       serviceapplication_x *sp = mfx->serviceapplication;
+       label_x *lbl = mfx->label;
+       license_x *lcn = mfx->license;
+       icon_x *icn = mfx->icon;
+       description_x *dcn = mfx->description;
+       author_x *ath = mfx->author;
+       uiapplication_x *up = mfx->uiapplication;
+       uiapplication_x *up_icn = mfx->uiapplication;
+       uiapplication_x *up_image = mfx->uiapplication;
+       privileges_x *pvs = NULL;
+       privilege_x *pv = NULL;
+       char *query = NULL;
+       char root[MAX_QUERY_LEN] = { '\0' };
        int ret = -1;
-       char query[MAX_QUERY_LEN] = {'\0'};
-       while(sp != NULL)
-       {
-               snprintf(query, MAX_QUERY_LEN,
-                        "insert into package_app_info(app_id, app_component, app_exec, app_type, app_onboot, " \
-                       "app_multiple, app_autorestart, app_enabled, app_permissiontype, package) " \
-                       "values('%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s')",\
-                        sp->appid, "svcapp", sp->exec, sp->type, sp->onboot, "\0",
-                        sp->autorestart, sp->enabled, sp->permission_type, mfx->package);
-               ret = __exec_query(query);
-               if (ret == -1) {
-                       _LOGD("Package ServiceApp Info DB Insert Failed\n");
-                       return -1;
-               }
-               sp = sp->next;
-               memset(query, '\0', MAX_QUERY_LEN);
-       }
-       return 0;
-}
-
-static int __insert_serviceapplication_appcategory_info(manifest_x *mfx)
-{
-       serviceapplication_x *sp = mfx->serviceapplication;
-       category_x *ct = NULL;
-       int ret = -1;
-       char query[MAX_QUERY_LEN] = {'\0'};
-       while(sp != NULL)
-       {
-               ct = sp->category;
-               while (ct != NULL)
-               {
-                       snprintf(query, MAX_QUERY_LEN,
-                               "insert into package_app_app_category(app_id, category) " \
-                               "values('%s','%s')",\
-                                sp->appid, ct->name);
-                       ret = __exec_query(query);
-                       if (ret == -1) {
-                               _LOGD("Package ServiceApp Category Info DB Insert Failed\n");
-                               return -1;
-                       }
-                       ct = ct->next;
-                       memset(query, '\0', MAX_QUERY_LEN);
-               }
-               sp = sp->next;
-       }
-       return 0;
-}
-
-static int __insert_serviceapplication_appmetadata_info(manifest_x *mfx)
-{
-       serviceapplication_x *sp = mfx->serviceapplication;
-       metadata_x *md = NULL;
-       int ret = -1;
-       char query[MAX_QUERY_LEN] = {'\0'};
-       while(sp != NULL)
-       {
-               md = sp->metadata;
-               while (md != NULL)
-               {
-                       if (md->key) {
-                               snprintf(query, MAX_QUERY_LEN,
-                                       "insert into package_app_app_metadata(app_id, md_key, md_value) " \
-                                       "values('%s','%s', '%s')",\
-                                        sp->appid, md->key, md->value);
-                               ret = __exec_query(query);
-                               if (ret == -1) {
-                                       _LOGD("Package ServiceApp Metadata Info DB Insert Failed\n");
-                                       return -1;
-                               }
-                       }
-                       md = md->next;
-                       memset(query, '\0', MAX_QUERY_LEN);
-               }
-               sp = sp->next;
-       }
-       return 0;
-}
-
-static int __insert_serviceapplication_apppermission_info(manifest_x *mfx)
-{
-       serviceapplication_x *sp = mfx->serviceapplication;
-       permission_x *pm = NULL;
-       int ret = -1;
-       char query[MAX_QUERY_LEN] = {'\0'};
-       while(sp != NULL)
-       {
-               pm = sp->permission;
-               while (pm != NULL)
-               {
-                       snprintf(query, MAX_QUERY_LEN,
-                               "insert into package_app_app_permission(app_id, pm_type, pm_value) " \
-                               "values('%s','%s', '%s')",\
-                                sp->appid, pm->type, pm->value);
-                       ret = __exec_query(query);
-                       if (ret == -1) {
-                               _LOGD("Package ServiceApp permission Info DB Insert Failed\n");
-                               return -1;
-                       }
-                       pm = pm->next;
-                       memset(query, '\0', MAX_QUERY_LEN);
-               }
-               sp = sp->next;
-       }
-       return 0;
-}
-
-static int __insert_serviceapplication_appcontrol_info(manifest_x *mfx)
-{
-       serviceapplication_x *sp = mfx->serviceapplication;
-       appcontrol_x *acontrol = NULL;
-       int ret = -1;
-       char query[MAX_QUERY_LEN] = {'\0'};
-       operation_x *op = NULL;
-       mime_x *mi = NULL;
-       uri_x *ui = NULL;
-       subapp_x *sub = NULL;
-       const char *operation = NULL;
-       const char *mime = NULL;
-       const char *uri = NULL;
-       const char *subapp = NULL;
-       while(sp != NULL)
-       {
-               acontrol = sp->appcontrol;
-               while(acontrol != NULL)
-               {
-                       op = acontrol->operation;
-                       while(op != NULL)
-                       {
-                       if (op)
-                               operation = op->name;
-                       mi = acontrol->mime;
-                               do
-                               {
-                               if (mi)
-                                       mime = mi->name;
-                               sub = acontrol->subapp;
-                                       do
-                                       {
-                                       if (sub)
-                                               subapp = sub->name;
-                                       ui = acontrol->uri;
-                                               do
-                                               {
-                                                       if (ui)
-                                                               uri = ui->name;
-                                                       snprintf(query, MAX_QUERY_LEN,
-                                                                "insert into package_app_app_control(app_id, operation, uri_scheme, mime_type,subapp_name) " \
-                                                               "values('%s', '%s', '%s', '%s', '%s')",\
-                                                                sp->appid, operation, uri, mime, subapp);
-                                                       ret = __exec_query(query);
-                                                       if (ret == -1) {
-                                                               _LOGD("Package UiApp AppSvc DB Insert Failed\n");
-                                                               return -1;
-                                                       }
-                                                       memset(query, '\0', MAX_QUERY_LEN);
-                                                       if (ui)
-                                                               ui = ui->next;
-                                                       uri = NULL;
-                                               } while(ui != NULL);
-                                               if (sub)
-                                                       sub = sub->next;
-                                               subapp = NULL;
-                                               }while(sub != NULL);
-                                       if (mi)
-                                               mi = mi->next;
-                                       mime = NULL;
-                               }while(mi != NULL);
-                               if (op)
-                                       op = op->next;
-                               operation = NULL;
-                       }
-                       acontrol = acontrol->next;
-               }
-               sp = sp->next;
-       }
-       return 0;
-}
-
-static int __insert_serviceapplication_appsvc_info(manifest_x *mfx)
-{
-       serviceapplication_x *sp = mfx->serviceapplication;
-       appsvc_x *asvc = NULL;
-       int ret = -1;
-       char query[MAX_QUERY_LEN] = {'\0'};
-       operation_x *op = NULL;
-       mime_x *mi = NULL;
-       uri_x *ui = NULL;
-       subapp_x *sub = NULL;
-       const char *operation = NULL;
-       const char *mime = NULL;
-       const char *uri = NULL;
-       const char *subapp = NULL;
-       while(sp != NULL)
-       {
-               asvc = sp->appsvc;
-               while(asvc != NULL)
-               {
-                       op = asvc->operation;
-                       while(op != NULL)
-                       {
-                       if (op)
-                               operation = op->name;
-                       mi = asvc->mime;
-                               do
-                               {
-                               if (mi)
-                                       mime = mi->name;
-                               sub = asvc->subapp;
-                                       do
-                                       {
-                                       if (sub)
-                                               subapp = sub->name;
-                                       ui = asvc->uri;
-                                                       do
-                                                       {
-                                                               if (ui)
-                                                                       uri = ui->name;
-                                                               snprintf(query, MAX_QUERY_LEN,
-                                                                        "insert into package_app_app_svc(app_id, operation, uri_scheme, mime_type, subapp_name) " \
-                                                                       "values('%s', '%s', '%s', '%s', '%s')",\
-                                                                        sp->appid,
-                                                                        operation,
-                                                                       __get_str(uri),
-                                                                       __get_str(mime),
-                                                                       __get_str(subapp));
-                                                               ret = __exec_query(query);
-                                                               if (ret == -1) {
-                                                                       _LOGD("Package UiApp AppSvc DB Insert Failed\n");
-                                                                       return -1;
-                                                               }
-                                                               memset(query, '\0', MAX_QUERY_LEN);
-                                                               if (ui)
-                                                                       ui = ui->next;
-                                                               uri = NULL;
-                                                       } while(ui != NULL);
-                                               if (sub)
-                                                       sub     = sub->next;
-                                               subapp = NULL;
-                                       }while(sub != NULL);
-                                       if (mi)
-                                               mi = mi->next;
-                                       mime = NULL;
-                               }while(mi != NULL);
-                               if (op)
-                                       op = op->next;
-                               operation = NULL;
-                       }
-                       asvc = asvc->next;
-               }
-               sp = sp->next;
-       }
-       return 0;
-}
-
-
-
-static int __insert_serviceapplication_share_request_info(manifest_x *mfx)
-{
-       serviceapplication_x *sp = mfx->serviceapplication;
-       datashare_x *ds = NULL;
-       request_x *rq = NULL;
-       int ret = -1;
-       char query[MAX_QUERY_LEN] = {'\0'};
-       while(sp != NULL)
-       {
-               ds = sp->datashare;
-               while(ds != NULL)
-               {
-                       rq = ds->request;
-                       while(rq != NULL)
-                       {
-                               snprintf(query, MAX_QUERY_LEN,
-                                        "insert into package_app_share_request(app_id, data_share_request) " \
-                                       "values('%s', '%s')",\
-                                        sp->appid, rq->text);
-                               ret = __exec_query(query);
-                               if (ret == -1) {
-                                       _LOGD("Package ServiceApp Share Request DB Insert Failed\n");
-                                       return -1;
-                               }
-                               memset(query, '\0', MAX_QUERY_LEN);
-                               rq = rq->next;
-                       }
-                       ds = ds->next;
-               }
-               sp = sp->next;
-       }
-       return 0;
-}
-
-
-
-static int __insert_serviceapplication_share_allowed_info(manifest_x *mfx)
-{
-       serviceapplication_x *sp = mfx->serviceapplication;
-       datashare_x *ds = NULL;
-       define_x *df = NULL;
-       allowed_x *al = NULL;
-       int ret = -1;
-       char query[MAX_QUERY_LEN] = {'\0'};
-       while(sp != NULL)
-       {
-               ds = sp->datashare;
-               while(ds != NULL)
-               {
-                       df = ds->define;
-                       while(df != NULL)
-                       {
-                               al = df->allowed;
-                               while(al != NULL)
-                               {
-                                       snprintf(query, MAX_QUERY_LEN,
-                                                "insert into package_app_share_allowed(app_id, data_share_path, data_share_allowed) " \
-                                               "values('%s', '%s', '%s')",\
-                                                sp->appid, df->path, al->text);
-                                       ret = __exec_query(query);
-                                       if (ret == -1) {
-                                               _LOGD("Package App Share Allowed DB Insert Failed\n");
-                                               return -1;
-                                       }
-                                       memset(query, '\0', MAX_QUERY_LEN);
-                                       al = al->next;
-                               }
-                               df = df->next;
-                       }
-                       ds = ds->next;
-               }
-               sp = sp->next;
-       }
-       return 0;
-}
-
-static int __insert_manifest_info_in_db(manifest_x *mfx)
-{
-       label_x *lbl = mfx->label;
-       license_x *lcn = mfx->license;
-       icon_x *icn = mfx->icon;
-       description_x *dcn = mfx->description;
-       author_x *ath = mfx->author;
-       uiapplication_x *up = mfx->uiapplication;
-       uiapplication_x *up_icn = mfx->uiapplication;
-       uiapplication_x *up_image = mfx->uiapplication;
-       serviceapplication_x *sp = mfx->serviceapplication;
-       privileges_x *pvs = NULL;
-       privilege_x *pv = NULL;
-       char query[MAX_QUERY_LEN] = { '\0' };
-       char root[MAX_QUERY_LEN] = { '\0' };
-       int ret = -1;
-       char *type = NULL;
-       char *path = NULL;
-       const char *auth_name = NULL;
-       const char *auth_email = NULL;
-       const char *auth_href = NULL;
+       char *type = NULL;
+       char *path = NULL;
+       const char *auth_name = NULL;
+       const char *auth_email = NULL;
+       const char *auth_href = NULL;
 
        GList *pkglocale = NULL;
        GList *applocale = NULL;
@@ -1659,11 +1319,11 @@ static int __insert_manifest_info_in_db(manifest_x *mfx)
                path = strdup(root);
        }
 
-       snprintf(query, MAX_QUERY_LEN,
-                "insert into package_info(package, package_type, package_version, install_location, package_size, " \
+       query = sqlite3_mprintf("insert into package_info(package, package_type, package_version, install_location, package_size, " \
                "package_removable, package_preload, package_readonly, package_update, package_appsetting, package_nodisplay, package_system," \
-               "author_name, author_email, author_href, installed_time, installed_storage, storeclient_id, mainapp_id, package_url, root_path, csc_path) " \
-               "values('%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s')",\
+               "author_name, author_email, author_href, installed_time, installed_storage, storeclient_id, mainapp_id, package_url, root_path, csc_path, package_support_disable, " \
+               "package_mother_package, package_support_mode, package_reserve1, package_reserve2, package_hash) " \
+               "values(%Q, %Q, %Q, %Q, %Q, %Q, %Q, %Q, %Q, %Q, %Q, %Q, %Q, %Q, %Q, %Q, %Q, %Q, %Q, %Q, %Q, %Q, %Q, %Q, %Q, %Q, %Q, %Q)",\
                 mfx->package,
                 type,
                 mfx->version,
@@ -1685,42 +1345,37 @@ static int __insert_manifest_info_in_db(manifest_x *mfx)
                 mfx->mainapp_id,
                 __get_str(mfx->package_url),
                 path,
-                __get_str(mfx->csc_path));
+                __get_str(mfx->csc_path),
+                mfx->support_disable,
+                mfx->mother_package,
+                mfx->support_mode,
+                __get_str(mfx->support_reset),
+                mfx->use_reset,
+                mfx->hash
+                );
 
        ret = __exec_query(query);
+       sqlite3_free(query);
        if (ret == -1) {
                _LOGD("Package Info DB Insert Failed\n");
-               if (type) {
-                       free(type);
-                       type = NULL;
-               }
-               if (path) {
-                       free(path);
-                       path = NULL;
-               }
+               FREE_AND_NULL(type);
+               FREE_AND_NULL(path);
                return -1;
        }
 
-       if (type) {
-               free(type);
-               type = NULL;
-       }
-       if (path) {
-               free(path);
-               path = NULL;
-       }
+       FREE_AND_NULL(type);
+       FREE_AND_NULL(path);
 
        /*Insert in the package_privilege_info DB*/
        pvs = mfx->privileges;
        while (pvs != NULL) {
                pv = pvs->privilege;
                while (pv != NULL) {
-                       memset(query, '\0', MAX_QUERY_LEN);
-                       snprintf(query, MAX_QUERY_LEN,
-                               "insert into package_privilege_info(package, privilege) " \
-                               "values('%s','%s')",\
+                       query = sqlite3_mprintf("insert into package_privilege_info(package, privilege) " \
+                               "values(%Q, %Q)",\
                                 mfx->package, pv->text);
                        ret = __exec_query(query);
+                       sqlite3_free(query);
                        if (ret == -1) {
                                _LOGD("Package Privilege Info DB Insert Failed\n");
                                return -1;
@@ -1745,11 +1400,6 @@ static int __insert_manifest_info_in_db(manifest_x *mfx)
                applocale = __create_locale_list(applocale, up->label, NULL, up->icon, NULL, NULL);
                up = up->next;
        }
-       while(sp != NULL)
-       {
-               applocale = __create_locale_list(applocale, sp->label, NULL, sp->icon, NULL, NULL);
-               sp = sp->next;
-       }
        /*remove duplicated data in applocale*/
        __trimfunc(applocale);
 
@@ -1784,13 +1434,6 @@ static int __insert_manifest_info_in_db(manifest_x *mfx)
                g_list_foreach(applocale, __insert_uiapplication_locale_info, (gpointer)up);
                up = up->next;
        }
-       /*agent app locale info*/
-       sp = mfx->serviceapplication;
-       while(sp != NULL)
-       {
-               g_list_foreach(applocale, __insert_serviceapplication_locale_info, (gpointer)sp);
-               sp = sp->next;
-       }
 
        /*app icon locale info*/
        up_icn = mfx->uiapplication;
@@ -1819,516 +1462,72 @@ static int __insert_manifest_info_in_db(manifest_x *mfx)
 
 
        /*Insert in the package_app_info DB*/
-       ret = __insert_uiapplication_info(mfx);
-       if (ret == -1)
-               return -1;
-       ret = __insert_serviceapplication_info(mfx);
-       if (ret == -1)
-               return -1;
-
-       /*Insert in the package_app_app_control DB*/
-       ret = __insert_uiapplication_appcontrol_info(mfx);
-       if (ret == -1)
-               return -1;
-       ret = __insert_serviceapplication_appcontrol_info(mfx);
-       if (ret == -1)
-               return -1;
-
-       /*Insert in the package_app_app_category DB*/
-       ret = __insert_uiapplication_appcategory_info(mfx);
-       if (ret == -1)
-               return -1;
-       ret = __insert_serviceapplication_appcategory_info(mfx);
-       if (ret == -1)
-               return -1;
-
-       /*Insert in the package_app_app_metadata DB*/
-       ret = __insert_uiapplication_appmetadata_info(mfx);
-       if (ret == -1)
-               return -1;
-       ret = __insert_serviceapplication_appmetadata_info(mfx);
-       if (ret == -1)
-               return -1;
-
-       /*Insert in the package_app_app_permission DB*/
-       ret = __insert_uiapplication_apppermission_info(mfx);
-       if (ret == -1)
-               return -1;
-       ret = __insert_serviceapplication_apppermission_info(mfx);
-       if (ret == -1)
-               return -1;
-
-       /*Insert in the package_app_app_svc DB*/
-       ret = __insert_uiapplication_appsvc_info(mfx);
-       if (ret == -1)
-               return -1;
-       ret = __insert_serviceapplication_appsvc_info(mfx);
-       if (ret == -1)
-               return -1;
-
-       /*Insert in the package_app_share_allowed DB*/
-       ret = __insert_uiapplication_share_allowed_info(mfx);
-       if (ret == -1)
-               return -1;
-       ret = __insert_serviceapplication_share_allowed_info(mfx);
-       if (ret == -1)
-               return -1;
-
-       /*Insert in the package_app_share_request DB*/
-       ret = __insert_uiapplication_share_request_info(mfx);
-       if (ret == -1)
-               return -1;
-       ret = __insert_serviceapplication_share_request_info(mfx);
-       if (ret == -1)
-               return -1;
-
-       return 0;
-
-}
-
-static int __insert_disabled_ui_mainapp_info(manifest_x *mfx)
-{
-       uiapplication_x *up = mfx->uiapplication;
-       int ret = -1;
-       char query[MAX_QUERY_LEN] = {'\0'};
-       while(up != NULL)
-       {
-               snprintf(query, MAX_QUERY_LEN,
-                       "update disabled_package_app_info set app_mainapp='%s' where app_id='%s'", up->mainapp, up->appid);
-
-               ret = __exec_query(query);
-               if (ret == -1) {
-                       _LOGD("Package UiApp Info DB Insert Failed\n");
-                       return -1;
-               }
-               if (strcasecmp(up->mainapp, "True")==0)
-                       mfx->mainapp_id = strdup(up->appid);
-
-               up = up->next;
-               memset(query, '\0', MAX_QUERY_LEN);
-       }
-
-       if (mfx->mainapp_id == NULL){
-               if (mfx->uiapplication && mfx->uiapplication->appid) {
-                       snprintf(query, MAX_QUERY_LEN, "update disabled_package_app_info set app_mainapp='true' where app_id='%s'", mfx->uiapplication->appid);
-               } else {
-                       _LOGD("Not valid appid\n");
-                       return -1;
-               }
-
-               ret = __exec_query(query);
-               if (ret == -1) {
-                       _LOGD("Package UiApp Info DB Insert Failed\n");
-                       return -1;
-               }
-
-               free((void *)mfx->uiapplication->mainapp);
-               mfx->uiapplication->mainapp= strdup("true");
-               mfx->mainapp_id = strdup(mfx->uiapplication->appid);
-       }
-
-       memset(query, '\0', MAX_QUERY_LEN);
-       snprintf(query, MAX_QUERY_LEN,
-               "update disabled_package_info set mainapp_id='%s' where package='%s'", mfx->mainapp_id, mfx->package);
-       ret = __exec_query(query);
-       if (ret == -1) {
-               _LOGD("Package Info DB update Failed\n");
-               return -1;
-       }
-
-       return 0;
-}
-
-static int __insert_disabled_uiapplication_info(manifest_x *mfx)
-{
-       uiapplication_x *up = mfx->uiapplication;
-       int ret = -1;
-       char query[MAX_QUERY_LEN] = {'\0'};
-       while(up != NULL)
-       {
-               snprintf(query, MAX_QUERY_LEN,
-                        "insert into disabled_package_app_info(app_id, app_component, app_exec, app_nodisplay, app_type, app_onboot, " \
-                       "app_multiple, app_autorestart, app_taskmanage, app_enabled, app_hwacceleration, app_screenreader, app_mainapp , app_recentimage, " \
-                       "app_launchcondition, app_indicatordisplay, app_portraitimg, app_landscapeimg, app_guestmodevisibility, app_permissiontype, "\
-                       "app_preload, app_submode, app_submode_mainid, app_installed_storage, component_type, package) " \
-                       "values('%s', '%s', '%s', '%s', '%s', '%s','%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s')",\
-                        up->appid,
-                        "uiapp",
-                        up->exec,
-                        up->nodisplay,
-                        up->type,
-                        PKGMGR_PARSER_EMPTY_STR,
-                        up->multiple,
-                        PKGMGR_PARSER_EMPTY_STR,
-                        up->taskmanage,
-                        up->enabled,
-                        up->hwacceleration,
-                        up->screenreader,
-                        up->mainapp,
-                        __get_str(up->recentimage),
-                        up->launchcondition,
-                        up->indicatordisplay,
-                        __get_str(up->portraitimg),
-                        __get_str(up->landscapeimg),
-                        up->guestmode_visibility,
-                        up->permission_type,
-                        mfx->preload,
-                        up->submode,
-                        __get_str(up->submode_mainid),
-                        mfx->installed_storage,
-                        up->component_type,
-                        mfx->package);
-
-               ret = __exec_query(query);
-               if (ret == -1) {
-                       _LOGD("Package UiApp Info DB Insert Failed\n");
-                       return -1;
-               }
-               up = up->next;
-               memset(query, '\0', MAX_QUERY_LEN);
-       }
-       return 0;
-}
-
-static void __insert_disabled_uiapplication_locale_info(gpointer data, gpointer userdata)
-{
-       int ret = -1;
-       char *label = NULL;
-       char *icon = NULL;
-       char query[MAX_QUERY_LEN] = {'\0'};
-
-       uiapplication_x *up = (uiapplication_x*)userdata;
-       label_x *lbl = up->label;
-       icon_x *icn = up->icon;
-
-       __extract_data(data, lbl, NULL, icn, NULL, NULL, &label, NULL, &icon, NULL, NULL);
-       if (!label && !icon)
-               return;
-       sqlite3_snprintf(MAX_QUERY_LEN, query, "insert into disabled_package_app_localized_info(app_id, app_locale, " \
-               "app_label, app_icon, package) values " \
-               "('%q', '%q', '%q', '%q', '%q')", up->appid, (char*)data,
-               label, icon, up->package);
-       ret = __exec_query(query);
-       if (ret == -1)
-               _LOGD("Package UiApp Localized Info DB Insert failed\n");
-
-       /*insert ui app locale info to pkg locale to get mainapp data */
-       if (strcasecmp(up->mainapp, "true")==0) {
-               char *update_query = NULL;
-               update_query = sqlite3_mprintf("insert into disabled_package_localized_info(package, package_locale, " \
-                       "package_label, package_icon, package_description, package_license, package_author) values " \
-                       "(%Q, %Q, %Q, %Q, %Q, %Q, %Q)",
-                       up->package,
-                       (char*)data,
-                       label,
-                       icon,
-                       PKGMGR_PARSER_EMPTY_STR,
-                       PKGMGR_PARSER_EMPTY_STR,
-                       PKGMGR_PARSER_EMPTY_STR);
-
-               ret = __exec_query_no_msg(update_query);
-               sqlite3_free(update_query);
-
-               if (icon != NULL) {
-                       update_query = sqlite3_mprintf("update package_localized_info set package_icon=%Q " \
-                               "where package=%Q and package_locale=%Q", icon, up->package, (char*)data);
-                       ret = __exec_query_no_msg(update_query);
-                       sqlite3_free(update_query);
-               }
-       }
-}
-
-static int __insert_disabled_uiapplication_appcategory_info(manifest_x *mfx)
-{
-       uiapplication_x *up = mfx->uiapplication;
-       category_x *ct = NULL;
-       int ret = -1;
-       char query[MAX_QUERY_LEN] = {'\0'};
-       while(up != NULL)
-       {
-               ct = up->category;
-               while (ct != NULL)
-               {
-                       snprintf(query, MAX_QUERY_LEN,
-                               "insert into disabled_package_app_app_category(app_id, category, package) " \
-                               "values('%s','%s','%s')",\
-                                up->appid, ct->name, up->package);
-                       ret = __exec_query(query);
-                       if (ret == -1) {
-                               _LOGD("Package UiApp Category Info DB Insert Failed\n");
-                               return -1;
-                       }
-                       ct = ct->next;
-                       memset(query, '\0', MAX_QUERY_LEN);
-               }
-               up = up->next;
-       }
-       return 0;
-}
-
-static int __insert_disabled_uiapplication_appmetadata_info(manifest_x *mfx)
-{
-       uiapplication_x *up = mfx->uiapplication;
-       metadata_x *md = NULL;
-       int ret = -1;
-       char query[MAX_QUERY_LEN] = {'\0'};
-       while(up != NULL)
-       {
-               md = up->metadata;
-               while (md != NULL)
-               {
-                       if (md->key) {
-                               snprintf(query, MAX_QUERY_LEN,
-                                       "insert into disabled_package_app_app_metadata(app_id, md_key, md_value, package) " \
-                                       "values('%s','%s', '%s', '%s')",\
-                                        up->appid, md->key, md->value, up->package);
-                               ret = __exec_query(query);
-                               if (ret == -1) {
-                                       _LOGD("Package UiApp Metadata Info DB Insert Failed\n");
-                                       return -1;
-                               }
-                       }
-                       md = md->next;
-                       memset(query, '\0', MAX_QUERY_LEN);
-               }
-               up = up->next;
-       }
-       return 0;
-}
-
-static void __insert_disabled_pkglocale_info(gpointer data, gpointer userdata)
-{
-       int ret = -1;
-       char *label = NULL;
-       char *icon = NULL;
-       char *description = NULL;
-       char *license = NULL;
-       char *author = NULL;
-       char query[MAX_QUERY_LEN] = {'\0'};
-
-       manifest_x *mfx = (manifest_x *)userdata;
-       label_x *lbl = mfx->label;
-       license_x *lcn = mfx->license;
-       icon_x *icn = mfx->icon;
-       description_x *dcn = mfx->description;
-       author_x *ath = mfx->author;
-
-       __extract_data(data, lbl, lcn, icn, dcn, ath, &label, &license, &icon, &description, &author);
-       if (!label && !description && !icon && !license && !author)
-               return;
-
-       sqlite3_snprintf(MAX_QUERY_LEN, query, "insert into disabled_package_localized_info(package, package_locale, " \
-               "package_label, package_icon, package_description, package_license, package_author) values " \
-               "('%q', '%q', '%q', '%q', '%s', '%s', '%s')",
-               mfx->package,
-               (char*)data,
-               label,
-               icon,
-               __get_str(description),
-               __get_str(license),
-               __get_str(author));
-
-       ret = __exec_query(query);
-       if (ret == -1)
-               _LOGD("Package Localized Info DB Insert failed\n");
-}
-
-static int __insert_disabled_pkg_info_in_db(manifest_x *mfx)
-{
-       label_x *lbl = mfx->label;
-       license_x *lcn = mfx->license;
-       icon_x *icn = mfx->icon;
-       description_x *dcn = mfx->description;
-       author_x *ath = mfx->author;
-       uiapplication_x *up = mfx->uiapplication;
-
-       char query[MAX_QUERY_LEN] = { '\0' };
-       char root[MAX_QUERY_LEN] = { '\0' };
-       int ret = -1;
-       char *type = NULL;
-       char *path = NULL;
-       const char *auth_name = NULL;
-       const char *auth_email = NULL;
-       const char *auth_href = NULL;
-
-       GList *pkglocale = NULL;
-       GList *applocale = NULL;
-
-       if (ath) {
-               if (ath->text)
-                       auth_name = ath->text;
-               if (ath->email)
-                       auth_email = ath->email;
-               if (ath->href)
-                       auth_href = ath->href;
-       }
-
-       /*Insert in the package_info DB*/
-       if (mfx->type)
-               type = strdup(mfx->type);
-       else
-               type = strdup("rpm");
-       /*Insert in the package_info DB*/
-       if (mfx->root_path)
-               path = strdup(mfx->root_path);
-       else{
-               if (strcmp(type,"rpm")==0)
-                       snprintf(root, MAX_QUERY_LEN - 1, "/usr/apps/%s", mfx->package);
-               else
-                       snprintf(root, MAX_QUERY_LEN - 1, "/opt/usr/apps/%s", mfx->package);
-
-               path = strdup(root);
-       }
-       snprintf(query, MAX_QUERY_LEN,
-                "insert into disabled_package_info(package, package_type, package_version, install_location, package_size, " \
-               "package_removable, package_preload, package_readonly, package_update, package_appsetting, package_nodisplay, package_system," \
-               "author_name, author_email, author_href, installed_time, installed_storage, storeclient_id, mainapp_id, package_url, root_path, csc_path) " \
-               "values('%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s')",\
-                mfx->package,
-                type,
-                mfx->version,
-                __get_str(mfx->installlocation),
-                __get_str(mfx->package_size),
-                mfx->removable,
-                mfx->preload,
-                mfx->readonly,
-                mfx->update,
-                mfx->appsetting,
-                mfx->nodisplay_setting,
-                mfx->system,
-                __get_str(auth_name),
-                __get_str(auth_email),
-                __get_str(auth_href),
-                mfx->installed_time,
-                mfx->installed_storage,
-                __get_str(mfx->storeclient_id),
-                mfx->mainapp_id,
-                __get_str(mfx->package_url),
-                path,
-                __get_str(mfx->csc_path));
-
-       ret = __exec_query(query);
-       if (ret == -1) {
-               _LOGD("Package Info DB Insert Failed\n");
-               if (type) {
-                       free(type);
-                       type = NULL;
-               }
-               if (path) {
-                       free(path);
-                       path = NULL;
-               }
-               return -1;
-       }
-
-       if (type) {
-               free(type);
-               type = NULL;
-       }
-       if (path) {
-               free(path);
-               path = NULL;
-       }
-
-       ret = __insert_disabled_ui_mainapp_info(mfx);
-       if (ret == -1)
-               return -1;
-
-       /*Insert the package locale*/
-       pkglocale = __create_locale_list(pkglocale, lbl, lcn, icn, dcn, ath);
-       /*remove duplicated data in pkglocale*/
-       __trimfunc(pkglocale);
-
-       /*Insert the app locale info */
-       while(up != NULL)
-       {
-               applocale = __create_locale_list(applocale, up->label, NULL, up->icon, NULL, NULL);
-               up = up->next;
-       }
-
-       /*remove duplicated data in applocale*/
-       __trimfunc(applocale);
-
-       /*g_list_foreach(pkglocale, __printfunc, NULL);*/
-       /*_LOGD("\n");*/
-       /*g_list_foreach(applocale, __printfunc, NULL);*/
-
-       g_list_foreach(pkglocale, __insert_disabled_pkglocale_info, (gpointer)mfx);
-
-       /*native app locale info*/
-       up = mfx->uiapplication;
-       while(up != NULL)
-       {
-               g_list_foreach(applocale, __insert_disabled_uiapplication_locale_info, (gpointer)up);
-               up = up->next;
-       }
-
-       g_list_free(pkglocale);
-       pkglocale = NULL;
-       g_list_free(applocale);
-       applocale = NULL;
-
-       /*Insert in the package_app_info DB*/
-       ret = __insert_disabled_uiapplication_info(mfx);
+       ret = __insert_uiapplication_info(mfx);
+       if (ret == -1)
+               return -1;
+
+       /*Insert in the package_app_app_control DB*/
+       ret = __insert_uiapplication_appcontrol_info(mfx);
        if (ret == -1)
                return -1;
 
        /*Insert in the package_app_app_category DB*/
-       ret = __insert_disabled_uiapplication_appcategory_info(mfx);
+       ret = __insert_uiapplication_appcategory_info(mfx);
        if (ret == -1)
                return -1;
 
        /*Insert in the package_app_app_metadata DB*/
-       ret = __insert_disabled_uiapplication_appmetadata_info(mfx);
+       ret = __insert_uiapplication_appmetadata_info(mfx);
+       if (ret == -1)
+               return -1;
+
+       /*Insert in the package_app_app_permission DB*/
+       ret = __insert_uiapplication_apppermission_info(mfx);
+       if (ret == -1)
+               return -1;
+
+       /*Insert in the package_app_app_svc DB*/
+       ret = __insert_uiapplication_appsvc_info(mfx);
+       if (ret == -1)
+               return -1;
+
+       /*Insert in the package_app_share_allowed DB*/
+       ret = __insert_uiapplication_share_allowed_info(mfx);
+       if (ret == -1)
+               return -1;
+
+       /*Insert in the package_app_share_request DB*/
+       ret = __insert_uiapplication_share_request_info(mfx);
+       if (ret == -1)
+               return -1;
+
+       /*Insert in the package_app_data_control DB*/
+       ret = __insert_uiapplication_datacontrol_info(mfx);
        if (ret == -1)
                return -1;
 
        return 0;
+
 }
 
-static int __delete_disabled_pkg_info_from_pkgid(const char *pkgid)
+static int __update_pkg_info_for_disable(const char *pkgid, bool disable)
 {
        char *query = NULL;
        int ret = -1;
 
-       /*Delete from Package Info DB*/
-       query = sqlite3_mprintf("delete from disabled_package_info where package=%Q", pkgid);
-       ret = __exec_query(query);
-       tryvm_if(ret < 0, ret = PMINFO_R_ERROR, "Package Info DB Delete Failed\n");
-
-       /*Delete from Package Localized Info*/
-       sqlite3_free(query);
-       query = sqlite3_mprintf("delete from disabled_package_localized_info where package=%Q", pkgid);
-       ret = __exec_query(query);
-       tryvm_if(ret < 0, ret = PMINFO_R_ERROR, "Package Localized Info DB Delete Failed\n");
-
-       /*Delete from app Info*/
-       sqlite3_free(query);
-       query = sqlite3_mprintf("delete from disabled_package_app_info where package=%Q", pkgid);
+       /*Update from package info*/
+       query = sqlite3_mprintf("update package_info set package_disable=%Q where package=%Q", disable?"true":"false", pkgid);
        ret = __exec_query(query);
-       tryvm_if(ret < 0, ret = PMINFO_R_ERROR, "app Info DB Delete Failed\n");
-
-       /*Delete from app Localized Info*/
        sqlite3_free(query);
-       query = sqlite3_mprintf("delete from disabled_package_app_localized_info where package=%Q", pkgid);
-       ret = __exec_query(query);
-       tryvm_if(ret < 0, ret = PMINFO_R_ERROR, "app Localized Info DB Delete Failed\n");
+       retvm_if(ret < 0, PMINFO_R_ERROR, "__exec_query() failed.\n");
 
-       /*Delete from app category Info*/
-       sqlite3_free(query);
-       query = sqlite3_mprintf("delete from disabled_package_app_app_category where package=%Q", pkgid);
+       /*Update from app info*/
+       query = sqlite3_mprintf("update package_app_info set app_disable=%Q where package=%Q", disable?"true":"false", pkgid);
        ret = __exec_query(query);
-       tryvm_if(ret < 0, ret = PMINFO_R_ERROR, "app category Info DB Delete Failed\n");
-
-       /*Delete from app metadata Info*/
        sqlite3_free(query);
-       query = sqlite3_mprintf("delete from disabled_package_app_app_metadata where package=%Q", pkgid);
-       ret = __exec_query(query);
-       tryvm_if(ret < 0, ret = PMINFO_R_ERROR, "app metadata Info DB Delete Failed\n");
+       retvm_if(ret < 0, PMINFO_R_ERROR, "__exec_query() failed.\n");
 
-catch:
-       sqlite3_free(query);
-       return 0;
+       return PMINFO_R_OK;
 }
 
 static int __delete_appinfo_from_db(char *db_table, const char *appid)
@@ -2336,193 +1535,31 @@ static int __delete_appinfo_from_db(char *db_table, const char *appid)
        int ret = 0;
        char *query = sqlite3_mprintf("delete from %Q where app_id=%Q", db_table, appid);
        ret = __exec_query(query);
+       sqlite3_free(query);
        if (ret == -1) {
                _LOGD("DB Deletion from table (%s) Failed\n", db_table);
                ret = -1;
        }
 
-       sqlite3_free(query);
        return ret;
 }
 
-static int __delete_subpkg_info_from_db(char *appid)
-{
-       int ret = -1;
-
-       ret = __delete_appinfo_from_db("package_app_info", appid);
-       if (ret < 0)
-               return ret;
-       ret = __delete_appinfo_from_db("package_app_localized_info", appid);
-       if (ret < 0)
-               return ret;
-       ret = __delete_appinfo_from_db("package_app_icon_section_info", appid);
-       if (ret < 0)
-               return ret;
-       ret = __delete_appinfo_from_db("package_app_image_info", appid);
-       if (ret < 0)
-               return ret;
-       ret = __delete_appinfo_from_db("package_app_app_svc", appid);
-       if (ret < 0)
-               return ret;
-       ret = __delete_appinfo_from_db("package_app_app_control", appid);
-       if (ret < 0)
-               return ret;
-       ret = __delete_appinfo_from_db("package_app_app_category", appid);
-       if (ret < 0)
-               return ret;
-       ret = __delete_appinfo_from_db("package_app_app_metadata", appid);
-       if (ret < 0)
-               return ret;
-       ret = __delete_appinfo_from_db("package_app_app_permission", appid);
-       if (ret < 0)
-               return ret;
-       ret = __delete_appinfo_from_db("package_app_share_allowed", appid);
-       if (ret < 0)
-               return ret;
-       ret = __delete_appinfo_from_db("package_app_share_request", appid);
-       if (ret < 0)
-               return ret;
-
-       return 0;
-}
-
-static int __delete_subpkg_from_db(const char *pkgid)
-{
-       char *error_message = NULL;
-
-       char *query = sqlite3_mprintf("select app_id from package_app_info where package=%Q", pkgid);
-       if (SQLITE_OK !=
-           sqlite3_exec(pkgmgr_parser_db, query, __delete_subpkg_list_cb, NULL, &error_message)) {
-               _LOGE("Don't execute query = %s error message = %s\n", query,
-                      error_message);
-               sqlite3_free(error_message);
-               sqlite3_free(query);
-               return -1;
-       }
-       sqlite3_free(error_message);
-       sqlite3_free(query);
-
-       return 0;
-}
-
 static int __delete_manifest_info_from_db(manifest_x *mfx)
 {
-       char query[MAX_QUERY_LEN] = { '\0' };
        int ret = -1;
        uiapplication_x *up = mfx->uiapplication;
-       serviceapplication_x *sp = mfx->serviceapplication;
-       /*Delete from cert table*/
-       ret = pkgmgrinfo_delete_certinfo(mfx->package);
-       if (ret) {
-               _LOGD("Cert Info  DB Delete Failed\n");
-               return -1;
-       }
-
-       /*Delete from Package Info DB*/
-       snprintf(query, MAX_QUERY_LEN,
-                "delete from package_info where package='%s'", mfx->package);
-       ret = __exec_query(query);
-       if (ret == -1) {
-               _LOGD("Package Info DB Delete Failed\n");
-               return -1;
-       }
-       memset(query, '\0', MAX_QUERY_LEN);
-
-       /*Delete from Package Localized Info*/
-       snprintf(query, MAX_QUERY_LEN,
-                "delete from package_localized_info where package='%s'", mfx->package);
-       ret = __exec_query(query);
-       if (ret == -1) {
-               _LOGD("Package Localized Info DB Delete Failed\n");
-               return -1;
-       }
 
-       /*Delete from Package Privilege Info*/
-       snprintf(query, MAX_QUERY_LEN,
-                "delete from package_privilege_info where package='%s'", mfx->package);
-       ret = __exec_query(query);
-       if (ret == -1) {
-               _LOGD("Package Privilege Info DB Delete Failed\n");
-               return -1;
-       }
+       /* Delete package info DB */
+       ret = __delete_manifest_info_from_pkgid(mfx->package);
+       retvm_if(ret < 0, PMINFO_R_ERROR, "Package Info DB Delete Failed\n");
 
        while (up != NULL) {
-               ret = __delete_appinfo_from_db("package_app_info", up->appid);
-               if (ret < 0)
-                       return ret;
-               ret = __delete_appinfo_from_db("package_app_localized_info", up->appid);
-               if (ret < 0)
-                       return ret;
-               ret = __delete_appinfo_from_db("package_app_icon_section_info", up->appid);
-               if (ret < 0)
-                       return ret;
-               ret = __delete_appinfo_from_db("package_app_image_info", up->appid);
-               if (ret < 0)
-                       return ret;
-               ret = __delete_appinfo_from_db("package_app_app_svc", up->appid);
-               if (ret < 0)
-                       return ret;
-               ret = __delete_appinfo_from_db("package_app_app_control", up->appid);
-               if (ret < 0)
-                       return ret;
-               ret = __delete_appinfo_from_db("package_app_app_category", up->appid);
-               if (ret < 0)
-                       return ret;
-               ret = __delete_appinfo_from_db("package_app_app_metadata", up->appid);
-               if (ret < 0)
-                       return ret;
-               ret = __delete_appinfo_from_db("package_app_app_permission", up->appid);
-               if (ret < 0)
-                       return ret;
-               ret = __delete_appinfo_from_db("package_app_share_allowed", up->appid);
-               if (ret < 0)
-                       return ret;
-               ret = __delete_appinfo_from_db("package_app_share_request", up->appid);
-               if (ret < 0)
-                       return ret;
+               ret = __delete_manifest_info_from_appid(up->appid);
+               retvm_if(ret < 0, PMINFO_R_ERROR, "App Info DB Delete Failed\n");
+
                up = up->next;
        }
 
-       while (sp != NULL) {
-               ret = __delete_appinfo_from_db("package_app_info", sp->appid);
-               if (ret < 0)
-                       return ret;
-               ret = __delete_appinfo_from_db("package_app_localized_info", sp->appid);
-               if (ret < 0)
-                       return ret;
-               ret = __delete_appinfo_from_db("package_app_icon_section_info", sp->appid);
-               if (ret < 0)
-                       return ret;
-               ret = __delete_appinfo_from_db("package_app_image_info", sp->appid);
-               if (ret < 0)
-                       return ret;
-               ret = __delete_appinfo_from_db("package_app_app_svc", sp->appid);
-               if (ret < 0)
-                       return ret;
-               ret = __delete_appinfo_from_db("package_app_app_control", sp->appid);
-               if (ret < 0)
-                       return ret;
-               ret = __delete_appinfo_from_db("package_app_app_category", sp->appid);
-               if (ret < 0)
-                       return ret;
-               ret = __delete_appinfo_from_db("package_app_app_metadata", sp->appid);
-               if (ret < 0)
-                       return ret;
-               ret = __delete_appinfo_from_db("package_app_app_permission", sp->appid);
-               if (ret < 0)
-                       return ret;
-               ret = __delete_appinfo_from_db("package_app_share_allowed", sp->appid);
-               if (ret < 0)
-                       return ret;
-               ret = __delete_appinfo_from_db("package_app_share_request", sp->appid);
-               if (ret < 0)
-                       return ret;
-               sp = sp->next;
-       }
-
-       /* if main package has sub pkg, delete sub pkg data*/
-       __delete_subpkg_from_db(mfx->package);
-
        return 0;
 }
 
@@ -2591,9 +1628,6 @@ static int __delete_manifest_info_from_pkgid(const char *pkgid)
        ret = __exec_query(query);
        tryvm_if(ret < 0, ret = PMINFO_R_ERROR, "Package Privilege Info DB Delete Failed\n");
 
-       /* if main package has sub pkg, delete sub pkg data*/
-       __delete_subpkg_from_db(pkgid);
-
 catch:
        sqlite3_free(query);
        return 0;
@@ -2637,6 +1671,9 @@ static  int __delete_manifest_info_from_appid(const char *appid)
        ret = __delete_appinfo_from_db("package_app_share_request", appid);
        retvm_if(ret < 0, PMINFO_R_ERROR, "Fail to get handle");
 
+       ret = __delete_appinfo_from_db("package_app_data_control", appid);
+       retvm_if(ret < 0, PMINFO_R_ERROR, "Fail to get handle");
+
        return 0;
 }
 
@@ -2644,11 +1681,12 @@ static  int __delete_manifest_info_from_appid(const char *appid)
 static int __update_preload_condition_in_db()
 {
        int ret = -1;
-       char query[MAX_QUERY_LEN] = {'\0'};
+       char *query = NULL;
 
-       snprintf(query, MAX_QUERY_LEN, "update package_info set package_preload='true'");
+       query = sqlite3_mprintf("update package_info set package_preload='true'");
 
        ret = __exec_query(query);
+       sqlite3_free(query);
        if (ret == -1)
                _LOGD("Package preload_condition update failed\n");
 
@@ -2729,6 +1767,11 @@ int pkgmgr_parser_initialize_db()
                _LOGD("package app share request DB initialization failed\n");
                return ret;
        }
+       ret = __initialize_db(pkgmgr_parser_db, QUERY_CREATE_TABLE_PACKAGE_APP_DATA_CONTROL);
+       if (ret == -1) {
+               _LOGD("package app data control DB initialization failed\n");
+               return ret;
+       }
        /*Cert DB*/
        ret = __initialize_db(pkgmgr_cert_db, QUERY_CREATE_TABLE_PACKAGE_CERT_INFO);
        if (ret == -1) {
@@ -2757,42 +1800,18 @@ int pkgmgr_parser_initialize_db()
                _LOGD("package pkg reserve info DB initialization failed\n");
                return ret;
        }
-
-       ret = __initialize_db(pkgmgr_parser_db, QUERY_CREATE_TABLE_DISABLED_PACKAGE_INFO);
-       if (ret == -1) {
-               _LOGD("package pkg reserve info DB initialization failed\n");
-               return ret;
-       }
-
-       ret = __initialize_db(pkgmgr_parser_db, QUERY_CREATE_TABLE_DISABLED_PACKAGE_APP_INFO);
-       if (ret == -1) {
-               _LOGD("package pkg reserve info DB initialization failed\n");
-               return ret;
-       }
-
-       ret = __initialize_db(pkgmgr_parser_db, QUERY_CREATE_TABLE_DISABLED_PACKAGE_LOCALIZED_INFO);
-       if (ret == -1) {
-               _LOGD("package pkg reserve info DB initialization failed\n");
-               return ret;
-       }
-
-       ret = __initialize_db(pkgmgr_parser_db, QUERY_CREATE_TABLE_DISABLED_PACKAGE_APP_LOCALIZED_INFO);
-       if (ret == -1) {
-               _LOGD("package pkg reserve info DB initialization failed\n");
-               return ret;
-       }
-
-       ret = __initialize_db(pkgmgr_parser_db, QUERY_CREATE_TABLE_DISABLED_PACKAGE_APP_APP_CATEGORY);
+       ret = __initialize_db(pkgmgr_parser_db, QUERY_CREATE_TABLE_PACKAGE_APP_ALIASID);
        if (ret == -1) {
-               _LOGD("package pkg reserve info DB initialization failed\n");
+               _LOGD("package app aliasId DB initialization failed\n");
                return ret;
        }
-
-       ret = __initialize_db(pkgmgr_parser_db, QUERY_CREATE_TABLE_DISABLED_PACKAGE_APP_APP_METADATA);
+#ifdef _APPFW_FEATURE_PROFILE_WEARABLE
+       ret = __init_tables_for_wearable();
        if (ret == -1) {
                _LOGD("package pkg reserve info DB initialization failed\n");
                return ret;
        }
+#endif
 
        return 0;
 }
@@ -3118,93 +2137,90 @@ err:
        return ret;
 }
 
-API int pkgmgr_parser_insert_disabled_pkg_info_in_db(manifest_x *mfx)
+API int pkgmgr_parser_update_enabled_pkg_info_in_db(const char *pkgid)
 {
-       if (mfx == NULL) {
-               _LOGD("manifest pointer is NULL\n");
-               return -1;
-       }
+       retvm_if(pkgid == NULL, PMINFO_R_ERROR, "pkgid is NULL.");
+
        int ret = 0;
+
+       _LOGD("pkgmgr_parser_update_enabled_pkg_info_in_db(%s)\n", pkgid);
+
+       /*open db*/
        ret = pkgmgr_parser_check_and_create_db();
-       if (ret == -1) {
-               _LOGD("Failed to open DB\n");
-               return ret;
-       }
-       ret = pkgmgr_parser_initialize_db();
-       if (ret == -1)
-               goto err;
+       retvm_if(ret < 0, PMINFO_R_ERROR, "pkgmgr_parser_check_and_create_db(%s) failed.\n", pkgid);
+
        /*Begin transaction*/
        ret = sqlite3_exec(pkgmgr_parser_db, "BEGIN EXCLUSIVE", NULL, NULL, NULL);
        if (ret != SQLITE_OK) {
-               _LOGD("Failed to begin transaction[%d]\n", ret);
+               _LOGE("sqlite3_exec(BEGIN EXCLUSIVE) failed.\n");
                ret = -1;
                goto err;
        }
-       _LOGD("Transaction Begin\n");
-       ret = __insert_disabled_pkg_info_in_db(mfx);
+
+       /*update pkg info*/
+       ret = __update_pkg_info_for_disable(pkgid, false);
        if (ret == -1) {
-               _LOGE("Insert into DB failed. Rollback now\n");
+               _LOGD("__update_pkg_info_for_disable(%s) failed.\n", pkgid);
                ret = sqlite3_exec(pkgmgr_parser_db, "ROLLBACK", NULL, NULL, NULL);
                if (ret != SQLITE_OK)
-                       _LOGE("ROLLBACK is fail after insert_disabled_pkg_info_in_db\n");
-
-               ret = -1;
+                       _LOGE("sqlite3_exec(ROLLBACK) failed.\n");
                goto err;
        }
+
        /*Commit transaction*/
        ret = sqlite3_exec(pkgmgr_parser_db, "COMMIT", NULL, NULL, NULL);
        if (ret != SQLITE_OK) {
-               _LOGE("Failed to commit transaction. Rollback now\n");
+               _LOGD("sqlite3_exec(COMMIT) failed.\n");
                ret = sqlite3_exec(pkgmgr_parser_db, "ROLLBACK", NULL, NULL, NULL);
                if (ret != SQLITE_OK)
-               _LOGE("Failed to commit transaction. Rollback now\n");
+                       _LOGE("sqlite3_exec(ROLLBACK) failed.\n");
 
                ret = -1;
                goto err;
        }
-       _LOGD("Transaction Commit and End\n");
+
 err:
        pkgmgr_parser_close_db();
        return ret;
 }
 
-API int pkgmgr_parser_delete_disabled_pkgid_info_from_db(const char *pkgid)
+API int pkgmgr_parser_update_disabled_pkg_info_in_db(const char *pkgid)
 {
-       retvm_if(pkgid == NULL, PMINFO_R_ERROR, "argument supplied is NULL");
+       retvm_if(pkgid == NULL, PMINFO_R_ERROR, "pkgid is NULL.");
 
        int ret = 0;
 
+       _LOGD("pkgmgr_parser_update_disabled_pkg_info_in_db(%s)\n", pkgid);
+
        /*open db*/
        ret = pkgmgr_parser_check_and_create_db();
-       retvm_if(ret < 0, PMINFO_R_ERROR, "Failed to open DB\n");
+       retvm_if(ret < 0, PMINFO_R_ERROR, "pkgmgr_parser_check_and_create_db(%s) failed.\n", pkgid);
 
        /*Begin transaction*/
        ret = sqlite3_exec(pkgmgr_parser_db, "BEGIN EXCLUSIVE", NULL, NULL, NULL);
        if (ret != SQLITE_OK) {
-               _LOGE("Failed to begin transaction\n");
+               _LOGE("sqlite3_exec(BEGIN EXCLUSIVE) failed.\n");
                ret = -1;
                goto err;
        }
 
-       _LOGD("Start to Delete pkgid[%s] info from db\n", pkgid);
-
-       /*delete pkg info*/
-       ret = __delete_disabled_pkg_info_from_pkgid(pkgid);
+       /*update pkg info*/
+       ret = __update_pkg_info_for_disable(pkgid, true);
        if (ret == -1) {
-               _LOGD("Delete from DB failed. Rollback now\n");
+               _LOGD("__update_pkg_info_for_disable(%s) failed.\n", pkgid);
                ret = sqlite3_exec(pkgmgr_parser_db, "ROLLBACK", NULL, NULL, NULL);
                if (ret != SQLITE_OK)
-                       _LOGE("Failed to begin transaction\n");
+                       _LOGE("sqlite3_exec(ROLLBACK) failed.\n");
                goto err;
        }
 
        /*Commit transaction*/
        ret = sqlite3_exec(pkgmgr_parser_db, "COMMIT", NULL, NULL, NULL);
        if (ret != SQLITE_OK) {
-               _LOGD("Failed to commit transaction, Rollback now\n");
+               _LOGD("sqlite3_exec(COMMIT) failed.\n");
                ret = sqlite3_exec(pkgmgr_parser_db, "ROLLBACK", NULL, NULL, NULL);
                if (ret != SQLITE_OK)
-                       _LOGE("Failed to commit transaction, Rollback now\n");
+                       _LOGE("sqlite3_exec(ROLLBACK) failed.\n");
 
                ret = -1;
                goto err;
@@ -3215,3 +2231,197 @@ err:
        return ret;
 }
 
+int pkgmgr_parser_insert_app_aliasid_info_in_db(void)
+{
+       FILE *ini_file = NULL;
+       char *match = NULL;
+       char *tizen_id = NULL;
+       char *app_id = NULL;
+       int len = 0;
+       char buf[ MAX_ALIAS_INI_ENTRY ] = {0};
+       int ret = PM_PARSER_R_OK;
+       sqlite3 *pkgmgr_db = NULL;
+       char *query = NULL;
+
+       /*Open the alias.ini file*/
+       ini_file  = fopen(USR_APPSVC_ALIAS_INI,"r");
+       if(ini_file){
+               /*Open the pkgmgr DB*/
+               ret = db_util_open_with_options(MANIFEST_DB, &pkgmgr_db, SQLITE_OPEN_READWRITE, NULL);
+               if (ret != SQLITE_OK) {
+                       _LOGE("connect db [%s] failed!\n", MANIFEST_DB);
+                       fclose(ini_file);
+                       return PM_PARSER_R_ERROR;
+
+               }
+               /*Begin Transaction*/
+               ret = sqlite3_exec(pkgmgr_db, "BEGIN EXCLUSIVE", NULL, NULL, NULL);
+               tryvm_if(ret != SQLITE_OK, ret = PM_PARSER_R_ERROR, "Failed to begin transaction");
+
+               _LOGD("Transaction Begin\n");
+
+               /*delete all the previous entries from package_app_aliasid tables*/
+               query = sqlite3_mprintf("delete from package_app_aliasid");
+               ret = __exec_db_query(pkgmgr_db, query, NULL, NULL);
+               sqlite3_free(query);
+               tryvm_if(ret != SQLITE_OK,ret = PM_PARSER_R_ERROR,"sqlite exec failed to delete entries from package_app_aliasid!!");
+
+               while ( fgets ( buf, sizeof(buf), ini_file ) != NULL ) /* read a line */
+               {
+                       match = strstr(buf,"=");
+                       if(match == NULL)
+                               continue;
+                       /*format of alias.ini entry is 'tizen_app_id=alias_id'*/
+                       /*get the tizen appid id*/
+                       len = strlen(buf)-strlen(match);
+                       tizen_id = malloc(len + 1);
+                       tryvm_if(tizen_id == NULL, ret = PM_PARSER_R_ERROR,"Malloc failed!!");
+                       memset(tizen_id,'\0',len +1);
+                       strncpy(tizen_id,buf,len);
+                       tizen_id[len]='\0';
+                       __str_trim(tizen_id);
+
+                       /*get the corresponding alias id*/
+                       len = strlen(match)-1;
+                       app_id = malloc(len + 1);
+                       tryvm_if(app_id == NULL, ret = PM_PARSER_R_ERROR,"Malloc failed!!");
+                       memset(app_id,'\0',len + 1);
+                       strncpy(app_id, match + 1, len);
+                       app_id[len]='\0';
+                       __str_trim(app_id);
+
+                       /* Insert the data into DB*/
+                       query = sqlite3_mprintf("insert into package_app_aliasid(app_id, alias_id) values(%Q ,%Q)",tizen_id,app_id);
+                       ret = __exec_db_query(pkgmgr_db, query, NULL, NULL);
+                       sqlite3_free(query);
+                       tryvm_if(ret != SQLITE_OK,ret = PM_PARSER_R_ERROR, "sqlite exec failed to insert entries into package_app_aliasid table!!");
+
+                       FREE_AND_NULL(tizen_id);
+                       FREE_AND_NULL(app_id);
+                       memset(buf,'\0',MAX_ALIAS_INI_ENTRY);
+               }
+
+               /*Commit transaction*/
+               ret = sqlite3_exec(pkgmgr_db, "COMMIT", NULL, NULL, NULL);
+               if (ret != SQLITE_OK) {
+                       _LOGE("Failed to commit transaction, Rollback now\n");
+                       ret = sqlite3_exec(pkgmgr_db, "ROLLBACK", NULL, NULL, NULL);
+                       if (ret != SQLITE_OK)
+                               _LOGE("Failed to Rollback\n");
+
+                       ret = PM_PARSER_R_ERROR;
+                       goto catch;
+               }
+               _LOGE("Transaction Commit and End\n");
+               ret =  PM_PARSER_R_OK;
+       }else{
+               perror(USR_APPSVC_ALIAS_INI);
+               ret = -1;
+       }
+
+catch:
+       if(ini_file)
+               fclose ( ini_file);
+
+       FREE_AND_NULL(tizen_id);
+       FREE_AND_NULL(app_id);
+       sqlite3_close(pkgmgr_db);
+       return ret;
+
+
+}
+
+int pkgmgr_parser_update_app_aliasid_info_in_db(void)
+{
+       FILE *ini_file = NULL;
+       char *match = NULL;
+       char *tizen_id = NULL;
+       char *app_id = NULL;
+       int len = 0;
+       char buf[ MAX_ALIAS_INI_ENTRY ] = {0};
+       int ret = PM_PARSER_R_OK;
+       sqlite3 *pkgmgr_db = NULL;
+       char *query = NULL;
+
+       /*Open the alias.ini file*/
+       ini_file  = fopen(OPT_APPSVC_ALIAS_INI,"r");
+       if(ini_file){
+               /*Open the pkgmgr DB*/
+               ret = db_util_open_with_options(MANIFEST_DB, &pkgmgr_db, SQLITE_OPEN_READWRITE, NULL);
+               if (ret != SQLITE_OK) {
+                       _LOGE("connect db [%s] failed!\n", MANIFEST_DB);
+                       fclose(ini_file);
+                       return PM_PARSER_R_ERROR;
+
+               }
+               /*Begin Transaction*/
+               ret = sqlite3_exec(pkgmgr_db, "BEGIN EXCLUSIVE", NULL, NULL, NULL);
+               tryvm_if(ret != SQLITE_OK, ret = PM_PARSER_R_ERROR, "Failed to begin transaction");
+
+               _LOGD("Transaction Begin\n");
+
+               while ( fgets ( buf, sizeof(buf), ini_file ) != NULL ) /* read a line */
+               {
+                       match = strstr(buf,"=");
+                       if(match == NULL)
+                               continue;
+                       /*format of alias.ini entry is 'tizen_app_id=alias_id'*/
+                       /*get the tizen appid id*/
+                       len = strlen(buf)-strlen(match);
+                       tizen_id = malloc(len + 1);
+                       tryvm_if(tizen_id == NULL, ret = PM_PARSER_R_ERROR,"Malloc failed!!");
+                       memset(tizen_id,'\0',len +1);
+                       strncpy(tizen_id,buf,len);
+                       tizen_id[len]='\0';
+                       __str_trim(tizen_id);
+
+                       /*get the corresponding alias id*/
+                       len = strlen(match)-1;
+                       app_id = malloc(len + 1);
+                       tryvm_if(app_id == NULL, ret = PM_PARSER_R_ERROR,"Malloc failed!!");
+                       memset(app_id,'\0',len + 1);
+                       strncpy(app_id, match + 1, len);
+                       app_id[len]='\0';
+                       __str_trim(app_id);
+
+                       /* Insert the data into DB*/
+                       query = sqlite3_mprintf("insert or replace into package_app_aliasid(app_id, alias_id) values(%Q ,%Q)",tizen_id,app_id);
+                       ret = __exec_db_query(pkgmgr_db, query, NULL, NULL);
+                       sqlite3_free(query);
+                       tryvm_if(ret != SQLITE_OK,ret = PM_PARSER_R_ERROR, "sqlite exec failed to insert entries into package_app_aliasid table!!");
+
+                       FREE_AND_NULL(tizen_id);
+                       FREE_AND_NULL(app_id);
+                       memset(buf,'\0',MAX_ALIAS_INI_ENTRY);
+               }
+
+               /*Commit transaction*/
+               ret = sqlite3_exec(pkgmgr_db, "COMMIT", NULL, NULL, NULL);
+               if (ret != SQLITE_OK) {
+                       _LOGE("Failed to commit transaction, Rollback now\n");
+                       ret = sqlite3_exec(pkgmgr_db, "ROLLBACK", NULL, NULL, NULL);
+                       if (ret != SQLITE_OK)
+                               _LOGE("Failed to Rollback\n");
+
+                       ret = PM_PARSER_R_ERROR;
+                       goto catch;
+               }
+               _LOGE("Transaction Commit and End\n");
+               ret =  PM_PARSER_R_OK;
+       }else{
+               perror(OPT_APPSVC_ALIAS_INI);
+               ret = -1;
+       }
+
+catch:
+       if(ini_file)
+               fclose ( ini_file);
+
+       FREE_AND_NULL(tizen_id);
+       FREE_AND_NULL(app_id);
+       sqlite3_close(pkgmgr_db);
+       return ret;
+
+
+}
+
index 4f8609f..91a8f31 100755 (executable)
 extern "C" {
 #endif
 #include "pkgmgr_parser.h"
+#include "pkgmgr_parser_feature.h"
+
+#define PKGMGR_PARSER_DB_FILE "/opt/dbspace/.pkgmgr_parser.db"
+#define PKGMGR_CERT_DB_FILE "/opt/dbspace/.pkgmgr_cert.db"
 
 /**
  * @fn int pkgmgr_parser_insert_manifest_info_in_db(manifest_x *mfx)
@@ -131,8 +135,10 @@ int pkgmgr_parser_initialize_db();
 int pkgmgr_parser_delete_pkgid_info_from_db(const char *pkgid);
 int pkgmgr_parser_delete_appid_info_from_db(const char *appid);
 
-int pkgmgr_parser_insert_disabled_pkg_info_in_db(manifest_x *mfx);
-int pkgmgr_parser_delete_disabled_pkgid_info_from_db(const char *pkgid);
+int pkgmgr_parser_update_enabled_pkg_info_in_db(const char *pkgid);
+int pkgmgr_parser_update_disabled_pkg_info_in_db(const char *pkgid);
+int pkgmgr_parser_insert_app_aliasid_info_in_db(void);
+int pkgmgr_parser_update_app_aliasid_info_in_db(void);
 
 /** @} */
 #ifdef __cplusplus
diff --git a/parser/pkgmgr_parser_db_util.c b/parser/pkgmgr_parser_db_util.c
new file mode 100644 (file)
index 0000000..4f6f26c
--- /dev/null
@@ -0,0 +1,97 @@
+/*
+ * pkgmgr_parser_db_util
+ *
+ * Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved.
+ *
+ * Contact: Jayoun Lee <airjany@samsung.com>, Sewook Park <sewook7.park@samsung.com>,
+ * Jaeho Lee <jaeho81.lee@samsung.com>, Shobhit Srivastava <shobhit.s@samsung.com>
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+#include <db-util.h>
+#include "pkgmgr_parser.h"
+#include "pkgmgrinfo_debug.h"
+
+#ifdef LOG_TAG
+#undef LOG_TAG
+#endif
+#define LOG_TAG "PKGMGR_PARSER"
+
+int _pkgmgr_db_open(const char *dbfile, sqlite3 **database)
+{
+       int ret = 0;
+       retvm_if(dbfile == NULL, PM_PARSER_R_ERROR, "dbfile is NULL");
+       retvm_if(database == NULL, PM_PARSER_R_ERROR, "database is NULL");
+
+       ret = db_util_open(dbfile, database, 0);
+       retvm_if(ret != SQLITE_OK, PM_PARSER_R_ERROR, "db_open fail[ret = %d]\n", ret);
+
+       return 0;
+}
+
+int _pkgmgr_db_prepare(sqlite3 *database, const char *query, sqlite3_stmt **stmt)
+{
+       int ret = 0;
+       retvm_if(database == NULL, PM_PARSER_R_ERROR, "database is NULL");
+       retvm_if(query == NULL, PM_PARSER_R_ERROR, "query is NULL");
+       retvm_if(stmt == NULL, PM_PARSER_R_ERROR, "stmt is NULL");
+
+       ret = sqlite3_prepare_v2(database, query, strlen(query), stmt, NULL);
+       retvm_if(ret != SQLITE_OK, PM_PARSER_R_ERROR, "db_prepare fail[ret = %d]\n", ret);
+
+       return 0;
+}
+
+int _pkgmgr_db_step(sqlite3_stmt *stmt)
+{
+       int ret = 0;
+       retvm_if(stmt == NULL, PM_PARSER_R_ERROR, "stmt is NULL");
+
+       ret = sqlite3_step(stmt);
+       retvm_if(ret != SQLITE_ROW, PM_PARSER_R_ERROR, "db_step fail[ret = %d]\n", ret);
+
+       return 0;
+}
+
+int _pkgmgr_db_get_str(sqlite3_stmt *stmt, int index, char **str)
+{
+       retvm_if(stmt == NULL, PM_PARSER_R_ERROR, "stmt is NULL");
+       retvm_if(str == NULL, PM_PARSER_R_ERROR, "str is NULL");
+
+       *str = (char *)sqlite3_column_text(stmt, index);
+
+       return 0;
+}
+
+int _pkgmgr_db_finalize(sqlite3_stmt *stmt)
+{
+       int ret = 0;
+       retvm_if(stmt == NULL, PM_PARSER_R_ERROR, "stmt is NULL");
+
+       ret = sqlite3_finalize(stmt);
+       retvm_if(ret != SQLITE_OK, PM_PARSER_R_ERROR, "db_finalize fail[ret = %d]\n", ret);
+
+       return 0;
+}
+
+int _pkgmgr_db_close(sqlite3 *database)
+{
+       int ret = 0;
+       ret = sqlite3_close(database);
+       retvm_if(ret != SQLITE_OK, PM_PARSER_R_ERROR, "db_close fail[ret = %d]\n", ret);
+
+       return 0;
+}
+
diff --git a/parser/pkgmgr_parser_db_util.h b/parser/pkgmgr_parser_db_util.h
new file mode 100644 (file)
index 0000000..e64cff3
--- /dev/null
@@ -0,0 +1,37 @@
+/*
+ * pkgmgr-info
+ *
+ * Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved.
+ *
+ * Contact: Jayoun Lee <airjany@samsung.com>, Sewook Park <sewook7.park@samsung.com>,
+ * Jaeho Lee <jaeho81.lee@samsung.com>, Shobhit Srivastava <shobhit.s@samsung.com>
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+
+
+
+
+#ifndef __PKGMGR_PARSER_DB_UTIL_H__
+#define __PKGMGR_PARSER_DB_UTIL_H__
+
+int _pkgmgr_db_open(const char *dbfile, sqlite3 **database);
+int _pkgmgr_db_prepare(sqlite3 *database, const char *query, sqlite3_stmt **stmt);
+int _pkgmgr_db_step(sqlite3_stmt *stmt);
+int _pkgmgr_db_get_str(sqlite3_stmt *stmt, int index, char **str);
+int _pkgmgr_db_finalize(sqlite3_stmt *stmt);
+int _pkgmgr_db_close(sqlite3 *database);
+
+#endif                         /* __PKGMGR_PARSER_DB_UTIL_H__ */
diff --git a/parser/pkgmgr_parser_feature.c b/parser/pkgmgr_parser_feature.c
new file mode 100755 (executable)
index 0000000..7353d81
--- /dev/null
@@ -0,0 +1,805 @@
+/*
+ * pkgmgr-info
+ *
+ * Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved.
+ *
+ * Contact: Jayoun Lee <airjany@samsung.com>, Sewook Park <sewook7.park@samsung.com>,
+ * Jaeho Lee <jaeho81.lee@samsung.com>, Shobhit Srivastava <shobhit.s@samsung.com>
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+#define _GNU_SOURCE
+#include <dlfcn.h>
+#include <string.h>
+#include <errno.h>
+#include <fcntl.h>
+#include <unistd.h>
+#include <ctype.h>
+#include <time.h>
+#include <libxml/parser.h>
+#include <libxml/xmlreader.h>
+#include <libxml/xmlschemas.h>
+#include <vconf.h>
+#include <glib.h>
+#include <db-util.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <unistd.h>
+#include <dlfcn.h>
+
+#include "pkgmgr-info.h"
+#include "pkgmgr_parser.h"
+#include "pkgmgr_parser_internal.h"
+#include "pkgmgr_parser_db.h"
+#include "pkgmgr_parser_db_util.h"
+#include "pkgmgr_parser_signature.h"
+#include "pkgmgr_parser_plugin.h"
+
+#include "pkgmgrinfo_debug.h"
+#include "pkgmgr_parser_feature.h"
+
+#ifdef LOG_TAG
+#undef LOG_TAG
+#endif
+#define LOG_TAG "PKGMGR_PARSER"
+
+#define MAX_QUERY_LEN          4096
+
+sqlite3 *pkgmgr_parser_db;
+sqlite3 *pkgmgr_cert_db;
+
+#define QUERY_CREATE_TABLE_DISABLED_PACKAGE_INFO "create table if not exists disabled_package_info " \
+                                               "(package text primary key not null, " \
+                                               "package_type text DEFAULT 'rpm', " \
+                                               "package_version text, " \
+                                               "install_location text, " \
+                                               "package_size text, " \
+                                               "package_removable text DEFAULT 'true', " \
+                                               "package_preload text DEFAULT 'false', " \
+                                               "package_readonly text DEFAULT 'false', " \
+                                               "package_update text DEFAULT 'false', " \
+                                               "package_appsetting text DEFAULT 'false', " \
+                                               "package_nodisplay text DEFAULT 'false', " \
+                                               "package_system text DEFAULT 'false', " \
+                                               "author_name text, " \
+                                               "author_email text, " \
+                                               "author_href text," \
+                                               "installed_time text," \
+                                               "installed_storage text," \
+                                               "storeclient_id text," \
+                                               "mainapp_id text," \
+                                               "package_url text," \
+                                               "root_path text," \
+                                               "csc_path text)"
+
+#define QUERY_CREATE_TABLE_DISABLED_PACKAGE_APP_INFO "create table if not exists disabled_package_app_info " \
+                                               "(app_id text primary key not null, " \
+                                               "app_component text, " \
+                                               "app_exec text, " \
+                                               "app_nodisplay text DEFAULT 'false', " \
+                                               "app_type text, " \
+                                               "app_onboot text DEFAULT 'false', " \
+                                               "app_multiple text DEFAULT 'false', " \
+                                               "app_autorestart text DEFAULT 'false', " \
+                                               "app_taskmanage text DEFAULT 'false', " \
+                                               "app_enabled text DEFAULT 'true', " \
+                                               "app_hwacceleration text DEFAULT 'use-system-setting', " \
+                                               "app_screenreader text DEFAULT 'use-system-setting', " \
+                                               "app_mainapp text, " \
+                                               "app_recentimage text, " \
+                                               "app_launchcondition text, " \
+                                               "app_indicatordisplay text DEFAULT 'true', " \
+                                               "app_portraitimg text, " \
+                                               "app_landscapeimg text, " \
+                                               "app_guestmodevisibility text DEFAULT 'true', " \
+                                               "app_permissiontype text DEFAULT 'normal', " \
+                                               "app_preload text DEFAULT 'false', " \
+                                               "app_submode text DEFAULT 'false', " \
+                                               "app_submode_mainid text, " \
+                                               "app_installed_storage text, " \
+                                               "component_type text, " \
+                                               "package text not null, " \
+                                               "FOREIGN KEY(package) " \
+                                               "REFERENCES package_info(package) " \
+                                               "ON DELETE CASCADE)"
+
+#define QUERY_CREATE_TABLE_DISABLED_PACKAGE_LOCALIZED_INFO "create table if not exists disabled_package_localized_info " \
+                                                       "(package text not null, " \
+                                                       "package_locale text DEFAULT 'No Locale', " \
+                                                       "package_label text, " \
+                                                       "package_icon text, " \
+                                                       "package_description text, " \
+                                                       "package_license text, " \
+                                                       "package_author, " \
+                                                       "PRIMARY KEY(package, package_locale), " \
+                                                       "FOREIGN KEY(package) " \
+                                                       "REFERENCES package_info(package) " \
+                                                       "ON DELETE CASCADE)"
+
+#define QUERY_CREATE_TABLE_DISABLED_PACKAGE_APP_LOCALIZED_INFO "create table if not exists disabled_package_app_localized_info " \
+                                               "(app_id text not null, " \
+                                               "app_locale text DEFAULT 'No Locale', " \
+                                               "app_label text, " \
+                                               "app_icon text, " \
+                                               "package text not null, " \
+                                               "PRIMARY KEY(app_id,app_locale) " \
+                                               "FOREIGN KEY(app_id) " \
+                                               "REFERENCES package_app_info(app_id) " \
+                                               "ON DELETE CASCADE)"
+
+#define QUERY_CREATE_TABLE_DISABLED_PACKAGE_APP_APP_CATEGORY "create table if not exists disabled_package_app_app_category " \
+                                               "(app_id text not null, " \
+                                               "category text not null, " \
+                                               "package text not null, " \
+                                               "PRIMARY KEY(app_id,category) " \
+                                               "FOREIGN KEY(app_id) " \
+                                               "REFERENCES package_app_info(app_id) " \
+                                               "ON DELETE CASCADE)"
+
+
+#define QUERY_CREATE_TABLE_DISABLED_PACKAGE_APP_APP_METADATA "create table if not exists disabled_package_app_app_metadata " \
+                                               "(app_id text not null, " \
+                                               "md_key text not null, " \
+                                               "md_value text not null, " \
+                                               "package text not null, " \
+                                               "PRIMARY KEY(app_id, md_key, md_value) " \
+                                               "FOREIGN KEY(app_id) " \
+                                               "REFERENCES package_app_info(app_id) " \
+                                               "ON DELETE CASCADE)"
+
+int __init_tables_for_wearable(void)
+{
+       int ret = 0;
+
+       ret = __initialize_db(pkgmgr_parser_db, QUERY_CREATE_TABLE_DISABLED_PACKAGE_INFO);
+       if (ret == -1) {
+               _LOGD("package pkg reserve info DB initialization failed\n");
+               return ret;
+       }
+
+       ret = __initialize_db(pkgmgr_parser_db, QUERY_CREATE_TABLE_DISABLED_PACKAGE_APP_INFO);
+       if (ret == -1) {
+               _LOGD("package pkg reserve info DB initialization failed\n");
+               return ret;
+       }
+
+       ret = __initialize_db(pkgmgr_parser_db, QUERY_CREATE_TABLE_DISABLED_PACKAGE_LOCALIZED_INFO);
+       if (ret == -1) {
+               _LOGD("package pkg reserve info DB initialization failed\n");
+               return ret;
+       }
+
+       ret = __initialize_db(pkgmgr_parser_db, QUERY_CREATE_TABLE_DISABLED_PACKAGE_APP_LOCALIZED_INFO);
+       if (ret == -1) {
+               _LOGD("package pkg reserve info DB initialization failed\n");
+               return ret;
+       }
+
+       ret = __initialize_db(pkgmgr_parser_db, QUERY_CREATE_TABLE_DISABLED_PACKAGE_APP_APP_CATEGORY);
+       if (ret == -1) {
+               _LOGD("package pkg reserve info DB initialization failed\n");
+               return ret;
+       }
+
+       ret = __initialize_db(pkgmgr_parser_db, QUERY_CREATE_TABLE_DISABLED_PACKAGE_APP_APP_METADATA);
+
+       if (ret == -1) {
+               _LOGD("package pkg reserve info DB initialization failed\n");
+               return ret;
+       }
+
+       return ret;
+}
+
+static int __insert_disabled_ui_mainapp_info(manifest_x *mfx)
+{
+       uiapplication_x *up = mfx->uiapplication;
+       int ret = -1;
+       char *query = NULL;
+       while(up != NULL)
+       {
+               query = sqlite3_mprintf("update disabled_package_app_info set app_mainapp=%Q where app_id=%Q", up->mainapp, up->appid);
+
+               ret = __exec_query(query);
+               sqlite3_free(query);
+               if (ret == -1) {
+                       _LOGD("Package UiApp Info DB Insert Failed\n");
+                       return -1;
+               }
+               if (strcasecmp(up->mainapp, "True")==0)
+                       mfx->mainapp_id = strdup(up->appid);
+
+               up = up->next;
+       }
+
+       if (mfx->mainapp_id == NULL){
+               if (mfx->uiapplication && mfx->uiapplication->appid) {
+                       query = sqlite3_mprintf("update disabled_package_app_info set app_mainapp='true' where app_id=%Q", mfx->uiapplication->appid);
+               } else {
+                       _LOGD("Not valid appid\n");
+                       return -1;
+               }
+
+               ret = __exec_query(query);
+               sqlite3_free(query);
+               if (ret == -1) {
+                       _LOGD("Package UiApp Info DB Insert Failed\n");
+                       return -1;
+               }
+
+               free((void *)mfx->uiapplication->mainapp);
+               mfx->uiapplication->mainapp= strdup("true");
+               mfx->mainapp_id = strdup(mfx->uiapplication->appid);
+       }
+
+       query = sqlite3_mprintf("update disabled_package_info set mainapp_id=%Q where package=%Q", mfx->mainapp_id, mfx->package);
+       ret = __exec_query(query);
+       sqlite3_free(query);
+       if (ret == -1) {
+               _LOGD("Package Info DB update Failed\n");
+               return -1;
+       }
+
+       return 0;
+}
+
+static int __insert_disabled_uiapplication_info(manifest_x *mfx)
+{
+       uiapplication_x *up = mfx->uiapplication;
+       int ret = -1;
+       char *query = NULL;
+       while(up != NULL)
+       {
+               query = sqlite3_mprintf("insert into disabled_package_app_info(app_id, app_component, app_exec, app_nodisplay, app_type, app_onboot, " \
+                       "app_multiple, app_autorestart, app_taskmanage, app_enabled, app_hwacceleration, app_screenreader, app_mainapp , app_recentimage, " \
+                       "app_launchcondition, app_indicatordisplay, app_portraitimg, app_landscapeimg, app_guestmodevisibility, app_permissiontype, "\
+                       "app_preload, app_submode, app_submode_mainid, app_installed_storage, component_type, package) " \
+                       "values(%Q, %Q, %Q, %Q, %Q, %Q, %Q, %Q, %Q, %Q, %Q, %Q, %Q, %Q, %Q, %Q, %Q, %Q, %Q, %Q, %Q, %Q, %Q, %Q, %Q, %Q)",\
+                        up->appid,
+                        "uiapp",
+                        up->exec,
+                        up->nodisplay,
+                        up->type,
+                        PKGMGR_PARSER_EMPTY_STR,
+                        up->multiple,
+                        PKGMGR_PARSER_EMPTY_STR,
+                        up->taskmanage,
+                        up->enabled,
+                        up->hwacceleration,
+                        up->screenreader,
+                        up->mainapp,
+                        __get_str(up->recentimage),
+                        up->launchcondition,
+                        up->indicatordisplay,
+                        __get_str(up->portraitimg),
+                        __get_str(up->landscapeimg),
+                        up->guestmode_visibility,
+                        up->permission_type,
+                        mfx->preload,
+                        up->submode,
+                        __get_str(up->submode_mainid),
+                        mfx->installed_storage,
+                        up->component_type,
+                        mfx->package);
+
+               ret = __exec_query(query);
+               sqlite3_free(query);
+               if (ret == -1) {
+                       _LOGD("Package UiApp Info DB Insert Failed\n");
+                       return -1;
+               }
+               up = up->next;
+       }
+       return 0;
+}
+
+static void __insert_disabled_uiapplication_locale_info(gpointer data, gpointer userdata)
+{
+       int ret = -1;
+       char *label = NULL;
+       char *icon = NULL;
+       char *query = NULL;
+
+       uiapplication_x *up = (uiapplication_x*)userdata;
+       label_x *lbl = up->label;
+       icon_x *icn = up->icon;
+
+       __extract_data(data, lbl, NULL, icn, NULL, NULL, &label, NULL, &icon, NULL, NULL);
+       if (!label && !icon)
+               return;
+       query = sqlite3_mprintf("insert into disabled_package_app_localized_info(app_id, app_locale, " \
+               "app_label, app_icon, package) values " \
+               "(%Q, %Q, %Q, %Q, %Q)", up->appid, (char*)data,
+               label, icon, up->package);
+       ret = __exec_query(query);
+       sqlite3_free(query);
+       if (ret == -1)
+               _LOGD("Package UiApp Localized Info DB Insert failed\n");
+
+       /*insert ui app locale info to pkg locale to get mainapp data */
+       if (strcasecmp(up->mainapp, "true")==0) {
+               char *update_query = NULL;
+               update_query = sqlite3_mprintf("insert into disabled_package_localized_info(package, package_locale, " \
+                       "package_label, package_icon, package_description, package_license, package_author) values " \
+                       "(%Q, %Q, %Q, %Q, %Q, %Q, %Q)",
+                       up->package,
+                       (char*)data,
+                       label,
+                       icon,
+                       PKGMGR_PARSER_EMPTY_STR,
+                       PKGMGR_PARSER_EMPTY_STR,
+                       PKGMGR_PARSER_EMPTY_STR);
+
+               ret = __exec_query_no_msg(update_query);
+               sqlite3_free(update_query);
+
+               if (icon != NULL) {
+                       update_query = sqlite3_mprintf("update package_localized_info set package_icon=%Q " \
+                               "where package=%Q and package_locale=%Q", icon, up->package, (char*)data);
+                       ret = __exec_query_no_msg(update_query);
+                       sqlite3_free(update_query);
+               }
+       }
+}
+
+static int __insert_disabled_uiapplication_appcategory_info(manifest_x *mfx)
+{
+       uiapplication_x *up = mfx->uiapplication;
+       category_x *ct = NULL;
+       int ret = -1;
+       char *query = NULL;
+       while(up != NULL)
+       {
+               ct = up->category;
+               while (ct != NULL)
+               {
+                       query = sqlite3_mprintf("insert into disabled_package_app_app_category(app_id, category, package) " \
+                               "values(%Q, %Q, %Q)",\
+                                up->appid, ct->name, up->package);
+                       ret = __exec_query(query);
+                       sqlite3_free(query);
+                       if (ret == -1) {
+                               _LOGD("Package UiApp Category Info DB Insert Failed\n");
+                               return -1;
+                       }
+                       ct = ct->next;
+               }
+               up = up->next;
+       }
+       return 0;
+}
+
+static int __insert_disabled_uiapplication_appmetadata_info(manifest_x *mfx)
+{
+       uiapplication_x *up = mfx->uiapplication;
+       metadata_x *md = NULL;
+       int ret = -1;
+       char *query = NULL;
+       while(up != NULL)
+       {
+               md = up->metadata;
+               while (md != NULL)
+               {
+                       if (md->key) {
+                               query = sqlite3_mprintf("insert into disabled_package_app_app_metadata(app_id, md_key, md_value, package) " \
+                                       "values(%Q, %Q, %Q, %Q)",\
+                                        up->appid, md->key, md->value, up->package);
+                               ret = __exec_query(query);
+                               sqlite3_free(query);
+                               if (ret == -1) {
+                                       _LOGD("Package UiApp Metadata Info DB Insert Failed\n");
+                                       return -1;
+                               }
+                       }
+                       md = md->next;
+               }
+               up = up->next;
+       }
+       return 0;
+}
+
+static void __insert_disabled_pkglocale_info(gpointer data, gpointer userdata)
+{
+       int ret = -1;
+       char *label = NULL;
+       char *icon = NULL;
+       char *description = NULL;
+       char *license = NULL;
+       char *author = NULL;
+       char *query = NULL;
+
+       manifest_x *mfx = (manifest_x *)userdata;
+       label_x *lbl = mfx->label;
+       license_x *lcn = mfx->license;
+       icon_x *icn = mfx->icon;
+       description_x *dcn = mfx->description;
+       author_x *ath = mfx->author;
+
+       __extract_data(data, lbl, lcn, icn, dcn, ath, &label, &license, &icon, &description, &author);
+       if (!label && !description && !icon && !license && !author)
+               return;
+
+       query = sqlite3_mprintf("insert into disabled_package_localized_info(package, package_locale, " \
+               "package_label, package_icon, package_description, package_license, package_author) values " \
+               "(%Q, %Q, %Q, %Q, %Q, %Q, %Q)",
+               mfx->package,
+               (char*)data,
+               label,
+               icon,
+               __get_str(description),
+               __get_str(license),
+               __get_str(author));
+
+       ret = __exec_query(query);
+       sqlite3_free(query);
+       if (ret == -1)
+               _LOGD("Package Localized Info DB Insert failed\n");
+}
+
+static int __insert_disabled_pkg_info_in_db(manifest_x *mfx)
+{
+       label_x *lbl = mfx->label;
+       license_x *lcn = mfx->license;
+       icon_x *icn = mfx->icon;
+       description_x *dcn = mfx->description;
+       author_x *ath = mfx->author;
+       uiapplication_x *up = mfx->uiapplication;
+
+       char *query = NULL;
+       char root[MAX_QUERY_LEN] = { '\0' };
+       int ret = -1;
+       char *type = NULL;
+       char *path = NULL;
+       const char *auth_name = NULL;
+       const char *auth_email = NULL;
+       const char *auth_href = NULL;
+
+       GList *pkglocale = NULL;
+       GList *applocale = NULL;
+
+       if (ath) {
+               if (ath->text)
+                       auth_name = ath->text;
+               if (ath->email)
+                       auth_email = ath->email;
+               if (ath->href)
+                       auth_href = ath->href;
+       }
+
+       /*Insert in the package_info DB*/
+       if (mfx->type)
+               type = strdup(mfx->type);
+       else
+               type = strdup("rpm");
+       /*Insert in the package_info DB*/
+       if (mfx->root_path)
+               path = strdup(mfx->root_path);
+       else{
+               if (strcmp(type,"rpm")==0)
+                       snprintf(root, MAX_QUERY_LEN - 1, "/usr/apps/%s", mfx->package);
+               else
+                       snprintf(root, MAX_QUERY_LEN - 1, "/opt/usr/apps/%s", mfx->package);
+
+               path = strdup(root);
+       }
+       query = sqlite3_mprintf("insert into disabled_package_info(package, package_type, package_version, install_location, package_size, " \
+               "package_removable, package_preload, package_readonly, package_update, package_appsetting, package_nodisplay, package_system," \
+               "author_name, author_email, author_href, installed_time, installed_storage, storeclient_id, mainapp_id, package_url, root_path, csc_path) " \
+               "values(%Q, %Q, %Q, %Q, %Q, %Q, %Q, %Q, %Q, %Q, %Q, %Q, %Q, %Q, %Q, %Q, %Q, %Q, %Q, %Q, %Q, %Q)",\
+                mfx->package,
+                type,
+                mfx->version,
+                __get_str(mfx->installlocation),
+                __get_str(mfx->package_size),
+                mfx->removable,
+                mfx->preload,
+                mfx->readonly,
+                mfx->update,
+                mfx->appsetting,
+                mfx->nodisplay_setting,
+                mfx->system,
+                __get_str(auth_name),
+                __get_str(auth_email),
+                __get_str(auth_href),
+                mfx->installed_time,
+                mfx->installed_storage,
+                __get_str(mfx->storeclient_id),
+                mfx->mainapp_id,
+                __get_str(mfx->package_url),
+                path,
+                __get_str(mfx->csc_path));
+
+       ret = __exec_query(query);
+       sqlite3_free(query);
+       if (ret == -1) {
+               _LOGD("Package Info DB Insert Failed\n");
+               if (type) {
+                       free(type);
+                       type = NULL;
+               }
+               if (path) {
+                       free(path);
+                       path = NULL;
+               }
+               return -1;
+       }
+
+       if (type) {
+               free(type);
+               type = NULL;
+       }
+       if (path) {
+               free(path);
+               path = NULL;
+       }
+
+       ret = __insert_disabled_ui_mainapp_info(mfx);
+       if (ret == -1)
+               return -1;
+
+       /*Insert the package locale*/
+       pkglocale = __create_locale_list(pkglocale, lbl, lcn, icn, dcn, ath);
+       /*remove duplicated data in pkglocale*/
+       __trimfunc(pkglocale);
+
+       /*Insert the app locale info */
+       while(up != NULL)
+       {
+               applocale = __create_locale_list(applocale, up->label, NULL, up->icon, NULL, NULL);
+               up = up->next;
+       }
+
+       /*remove duplicated data in applocale*/
+       __trimfunc(applocale);
+
+       /*g_list_foreach(pkglocale, __printfunc, NULL);*/
+       /*_LOGD("\n");*/
+       /*g_list_foreach(applocale, __printfunc, NULL);*/
+
+       g_list_foreach(pkglocale, __insert_disabled_pkglocale_info, (gpointer)mfx);
+
+       /*native app locale info*/
+       up = mfx->uiapplication;
+       while(up != NULL)
+       {
+               g_list_foreach(applocale, __insert_disabled_uiapplication_locale_info, (gpointer)up);
+               up = up->next;
+       }
+
+       g_list_free(pkglocale);
+       pkglocale = NULL;
+       g_list_free(applocale);
+       applocale = NULL;
+
+       /*Insert in the package_app_info DB*/
+       ret = __insert_disabled_uiapplication_info(mfx);
+       if (ret == -1)
+               return -1;
+
+       /*Insert in the package_app_app_category DB*/
+       ret = __insert_disabled_uiapplication_appcategory_info(mfx);
+       if (ret == -1)
+               return -1;
+
+       /*Insert in the package_app_app_metadata DB*/
+       ret = __insert_disabled_uiapplication_appmetadata_info(mfx);
+       if (ret == -1)
+               return -1;
+
+       return 0;
+}
+
+static int __delete_disabled_pkg_info_from_pkgid(const char *pkgid)
+{
+       char *query = NULL;
+       int ret = -1;
+
+       /*Delete from Package Info DB*/
+       query = sqlite3_mprintf("delete from disabled_package_info where package=%Q", pkgid);
+       ret = __exec_query(query);
+       tryvm_if(ret < 0, ret = PMINFO_R_ERROR, "Package Info DB Delete Failed\n");
+
+       /*Delete from Package Localized Info*/
+       sqlite3_free(query);
+       query = sqlite3_mprintf("delete from disabled_package_localized_info where package=%Q", pkgid);
+       ret = __exec_query(query);
+       tryvm_if(ret < 0, ret = PMINFO_R_ERROR, "Package Localized Info DB Delete Failed\n");
+
+       /*Delete from app Info*/
+       sqlite3_free(query);
+       query = sqlite3_mprintf("delete from disabled_package_app_info where package=%Q", pkgid);
+       ret = __exec_query(query);
+       tryvm_if(ret < 0, ret = PMINFO_R_ERROR, "app Info DB Delete Failed\n");
+
+       /*Delete from app Localized Info*/
+       sqlite3_free(query);
+       query = sqlite3_mprintf("delete from disabled_package_app_localized_info where package=%Q", pkgid);
+       ret = __exec_query(query);
+       tryvm_if(ret < 0, ret = PMINFO_R_ERROR, "app Localized Info DB Delete Failed\n");
+
+       /*Delete from app category Info*/
+       sqlite3_free(query);
+       query = sqlite3_mprintf("delete from disabled_package_app_app_category where package=%Q", pkgid);
+       ret = __exec_query(query);
+       tryvm_if(ret < 0, ret = PMINFO_R_ERROR, "app category Info DB Delete Failed\n");
+
+       /*Delete from app metadata Info*/
+       sqlite3_free(query);
+       query = sqlite3_mprintf("delete from disabled_package_app_app_metadata where package=%Q", pkgid);
+       ret = __exec_query(query);
+       tryvm_if(ret < 0, ret = PMINFO_R_ERROR, "app metadata Info DB Delete Failed\n");
+
+catch:
+       sqlite3_free(query);
+       return 0;
+}
+
+API int pkgmgr_parser_insert_disabled_pkg_info_in_db(manifest_x *mfx)
+{
+       if (mfx == NULL) {
+               _LOGD("manifest pointer is NULL\n");
+               return -1;
+       }
+       int ret = 0;
+       ret = pkgmgr_parser_check_and_create_db();
+       if (ret == -1) {
+               _LOGD("Failed to open DB\n");
+               return ret;
+       }
+       ret = pkgmgr_parser_initialize_db();
+       if (ret == -1)
+               goto err;
+       /*Begin transaction*/
+       ret = sqlite3_exec(pkgmgr_parser_db, "BEGIN EXCLUSIVE", NULL, NULL, NULL);
+       if (ret != SQLITE_OK) {
+               _LOGD("Failed to begin transaction[%d]\n", ret);
+               ret = -1;
+               goto err;
+       }
+       _LOGD("Transaction Begin\n");
+       ret = __insert_disabled_pkg_info_in_db(mfx);
+       if (ret == -1) {
+               _LOGE("Insert into DB failed. Rollback now\n");
+               ret = sqlite3_exec(pkgmgr_parser_db, "ROLLBACK", NULL, NULL, NULL);
+               if (ret != SQLITE_OK)
+                       _LOGE("ROLLBACK is fail after insert_disabled_pkg_info_in_db\n");
+
+               ret = -1;
+               goto err;
+       }
+       /*Commit transaction*/
+       ret = sqlite3_exec(pkgmgr_parser_db, "COMMIT", NULL, NULL, NULL);
+       if (ret != SQLITE_OK) {
+               _LOGE("Failed to commit transaction. Rollback now\n");
+               ret = sqlite3_exec(pkgmgr_parser_db, "ROLLBACK", NULL, NULL, NULL);
+               if (ret != SQLITE_OK)
+               _LOGE("Failed to commit transaction. Rollback now\n");
+
+               ret = -1;
+               goto err;
+       }
+       _LOGD("Transaction Commit and End\n");
+err:
+       pkgmgr_parser_close_db();
+       return ret;
+}
+
+API int pkgmgr_parser_delete_disabled_pkgid_info_from_db(const char *pkgid)
+{
+       retvm_if(pkgid == NULL, PMINFO_R_ERROR, "argument supplied is NULL");
+
+       int ret = 0;
+
+       /*open db*/
+       ret = pkgmgr_parser_check_and_create_db();
+       retvm_if(ret < 0, PMINFO_R_ERROR, "Failed to open DB\n");
+
+       /*Begin transaction*/
+       ret = sqlite3_exec(pkgmgr_parser_db, "BEGIN EXCLUSIVE", NULL, NULL, NULL);
+       if (ret != SQLITE_OK) {
+               _LOGE("Failed to begin transaction\n");
+               ret = -1;
+               goto err;
+       }
+
+       _LOGD("Start to Delete pkgid[%s] info from db\n", pkgid);
+
+       /*delete pkg info*/
+       ret = __delete_disabled_pkg_info_from_pkgid(pkgid);
+       if (ret == -1) {
+               _LOGD("Delete from DB failed. Rollback now\n");
+               ret = sqlite3_exec(pkgmgr_parser_db, "ROLLBACK", NULL, NULL, NULL);
+               if (ret != SQLITE_OK)
+                       _LOGE("Failed to begin transaction\n");
+               goto err;
+       }
+
+       /*Commit transaction*/
+       ret = sqlite3_exec(pkgmgr_parser_db, "COMMIT", NULL, NULL, NULL);
+       if (ret != SQLITE_OK) {
+               _LOGD("Failed to commit transaction, Rollback now\n");
+               ret = sqlite3_exec(pkgmgr_parser_db, "ROLLBACK", NULL, NULL, NULL);
+               if (ret != SQLITE_OK)
+                       _LOGE("Failed to commit transaction, Rollback now\n");
+
+               ret = -1;
+               goto err;
+       }
+
+err:
+       pkgmgr_parser_close_db();
+       return ret;
+}
+
+API int pkgmgr_parser_insert_disabled_pkg(const char *pkgid, char *const tagv[])
+{
+       retvm_if(pkgid == NULL, PM_PARSER_R_ERROR, "argument supplied is NULL");
+
+       char *manifest = NULL;
+       manifest_x *mfx = NULL;
+       int ret = -1;
+
+       _LOGD("parsing manifest for installation: %s\n", pkgid);
+
+       manifest = pkgmgr_parser_get_manifest_file(pkgid);
+       if (manifest == NULL) {
+               _LOGE("can not get the manifest.xml\n");
+               return -1;
+       }
+
+       xmlInitParser();
+       mfx = pkgmgr_parser_process_manifest_xml(manifest);
+       retvm_if(mfx == NULL, PM_PARSER_R_ERROR, "argument supplied is NULL");
+
+       _LOGD("Parsing Finished\n");
+
+       __add_preload_info(mfx, manifest);
+
+       _LOGD("Added preload infomation\n");
+
+       FREE_AND_NULL(manifest);
+
+       ret = pkgmgr_parser_insert_disabled_pkg_info_in_db(mfx);
+       retvm_if(ret == PM_PARSER_R_ERROR, PM_PARSER_R_ERROR, "DB Insert failed");
+
+       _LOGD("DB Insert Success\n");
+
+       pkgmgr_parser_free_manifest_xml(mfx);
+       _LOGD("Free Done\n");
+       xmlCleanupParser();
+
+       return PM_PARSER_R_OK;
+}
+
+API int pkgmgr_parser_delete_disabled_pkg(const char *pkgid, char *const tagv[])
+{
+       retvm_if(pkgid == NULL, PM_PARSER_R_ERROR, "argument supplied is NULL");
+
+       int ret = -1;
+
+       _LOGD("Start uninstall for pkgid : delete pkgid[%s]\n", pkgid);
+
+       /* delete pkgmgr db */
+       ret = pkgmgr_parser_delete_disabled_pkgid_info_from_db(pkgid);
+       if (ret == -1)
+               _LOGD("DB pkgid info Delete failed\n");
+       else
+               _LOGD("DB pkgid info Delete Success\n");
+
+       _LOGD("Finish : uninstall for pkgid\n");
+
+       return PM_PARSER_R_OK;
+}
diff --git a/parser/pkgmgr_parser_feature.h b/parser/pkgmgr_parser_feature.h
new file mode 100755 (executable)
index 0000000..bba6cee
--- /dev/null
@@ -0,0 +1,40 @@
+/*
+ * pkgmgr-info
+ *
+ * Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved.
+ *
+ * Contact: Jayoun Lee <airjany@samsung.com>, Sewook Park <sewook7.park@samsung.com>,
+ * Jaeho Lee <jaeho81.lee@samsung.com>, Shobhit Srivastava <shobhit.s@samsung.com>
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+
+#ifndef __PKGMGR_PARSER_FEATURE_H__
+#define __PKGMGR_PARSER_FEATURE_H__
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+int __init_tables_for_wearable(void);
+int pkgmgr_parser_insert_disabled_pkg(const char *pkgid, char *const tagv[]);
+int pkgmgr_parser_delete_disabled_pkg(const char *pkgid, char *const tagv[]);
+int pkgmgr_parser_insert_disabled_pkg_info_in_db(manifest_x *mfx);
+int pkgmgr_parser_delete_disabled_pkgid_info_from_db(const char *pkgid);
+
+#ifdef __cplusplus
+}
+#endif
+#endif /* __PKGPMGR_PARSER_FEATURE_H__ */
index a891b0b..69d1b9b 100755 (executable)
 #ifndef __PKGMGR_PARSER_INTERNAL_H__
 #define __PKGMGR_PARSER_INTERNAL_H__
 
+#include "pkgmgrinfo_basic.h"
+
 #ifndef API
 #define API __attribute__ ((visibility("default")))
 #endif
 
+void pkgmgr_parser_close_db();
+void __add_preload_info(manifest_x * mfx, const char *manifest);
+void __extract_data(gpointer data, label_x *lbl, license_x *lcn, icon_x *icn, description_x *dcn, author_x *ath,
+               char **label, char **license, char **icon, char **description, char **author);
+GList *__create_locale_list(GList *locale, label_x *lbl, license_x *lcn, icon_x *icn, description_x *dcn, author_x *ath);
+int __exec_query_no_msg(char *query);
+void __trimfunc(GList* trim_list);
+const char *__get_str(const char *str);
+int __initialize_db(sqlite3 *db_handle, char *db_query);
+int __exec_query(char *query);
+int __evaluate_query(sqlite3 *db_handle, char *query);
 
 #endif                         /* __PKGMGR_PARSER_INTERNAL_H__ */
index 905da9e..475f3ad 100644 (file)
@@ -38,7 +38,7 @@
 
 #include "pkgmgr_parser_plugin.h"
 #include "pkgmgr-info.h"
-#include "pkgmgr-info-debug.h"
+#include "pkgmgrinfo_debug.h"
 
 #ifdef LOG_TAG
 #undef LOG_TAG
@@ -168,11 +168,9 @@ static void __metadata_parser_clear_dir_list(GList* dir_list)
                while (list) {
                        detail = (__metadata_t *)list->data;
                        if (detail) {
-                               if (detail->key)
-                                       free(detail->key);
-                               if (detail->value)
-                                       free(detail->value);
-                               free(detail);
+                               FREE_AND_NULL(detail->key);
+                               FREE_AND_NULL(detail->value);
+                               FREE_AND_NULL(detail);
                        }
                        list = g_list_next(list);
                }
@@ -190,10 +188,8 @@ static void __category_parser_clear_dir_list(GList* dir_list)
                while (list) {
                        detail = (__category_t *)list->data;
                        if (detail) {
-                               if (detail->name)
-                                       free(detail->name);
-
-                               free(detail);
+                               FREE_AND_NULL(detail->name);
+                               FREE_AND_NULL(detail);
                        }
                        list = g_list_next(list);
                }
@@ -296,8 +292,7 @@ int __ps_run_parser(xmlDocPtr docPtr, const char *tag,
                _LOGD("[pkgid = %s, libpath = %s plugin success\n", pkgid, lib_path);
 
 END:
-       if (lib_path)
-               free(lib_path);
+       FREE_AND_NULL(lib_path);
        if (lib_handle)
                dlclose(lib_handle);
        return ret;
@@ -305,16 +300,17 @@ END:
 
 static int __ps_get_enabled_plugin(const char *pkgid)
 {
-       char query[PKG_STRING_LEN_MAX] = { 0 };
+       char *query = NULL;
        sqlite3_stmt *stmt = NULL;
        const char *tail = NULL;
        int rc = 0;
        int enabled_plugin = 0;
 
-       sqlite3_snprintf(PKG_STRING_LEN_MAX, query, "select * from package_plugin_info where pkgid LIKE '%s'", pkgid);
+       query = sqlite3_mprintf("select * from package_plugin_info where pkgid LIKE %Q", pkgid);
 
        if (SQLITE_OK != sqlite3_prepare(pkgmgr_parser_db, query, strlen(query), &stmt, &tail)) {
                _LOGE("sqlite3_prepare error\n");
+               sqlite3_free(query);
                return E_PKGMGR_PARSER_PLUGIN_MAX;
        }
 
@@ -333,6 +329,7 @@ static int __ps_get_enabled_plugin(const char *pkgid)
                goto FINISH_OFF;
        }
 
+       sqlite3_free(query);
        return enabled_plugin;
 
 FINISH_OFF:
@@ -340,7 +337,7 @@ FINISH_OFF:
        if (rc != SQLITE_OK) {
                _LOGE(" sqlite3_finalize failed - %d", rc);
        }
-
+       sqlite3_free(query);
        return E_PKGMGR_PARSER_PLUGIN_MAX;
 }
 
@@ -364,6 +361,9 @@ static char *__getvalue(const char* pBuf, const char* pKey)
                return NULL;
 
        char *pRes = (char*)malloc(len + 1);
+       if(pRes == NULL)
+               return NULL;
+
        strncpy(pRes, pStart, len);
        pRes[len] = 0;
 
@@ -374,14 +374,14 @@ static int __get_plugin_info_x(const char*buf, pkgmgr_parser_plugin_info_x *plug
 {
        if (buf[0] == '#')
                return -1;
-       
+
        if (strstr(buf, TOKEN_TYPE_STR) == NULL)
                return -1;
-       
+
        plugin_info->type = __getvalue(buf, TOKEN_TYPE_STR);
        if (plugin_info->type == NULL)
                return -1;
-       
+
        plugin_info->name = __getvalue(buf, TOKEN_NAME_STR);
        plugin_info->flag = __getvalue(buf, TOKEN_FLAG_STR);
        plugin_info->path = __getvalue(buf, TOKEN_PATH_STR);
@@ -394,23 +394,10 @@ void __clean_plugin_info(pkgmgr_parser_plugin_info_x *plugin_info)
        if(plugin_info == NULL)
                return;
 
-       if (plugin_info->filename){
-               free((void *)plugin_info->filename);
-               plugin_info->filename = NULL;
-       }
-
-       if (plugin_info->pkgid){
-               free((void *)plugin_info->pkgid);
-               plugin_info->pkgid = NULL;
-       }
-
-       if (plugin_info->appid){
-               free((void *)plugin_info->appid);
-               plugin_info->appid = NULL;
-       }
-
-       free((void *)plugin_info);
-       plugin_info = NULL;
+       FREE_AND_NULL(plugin_info->filename);
+       FREE_AND_NULL(plugin_info->pkgid);
+       FREE_AND_NULL(plugin_info->appid);
+       FREE_AND_NULL(plugin_info);
        return;
 }
 
@@ -629,7 +616,10 @@ __process_tag_xml(pkgmgr_parser_plugin_info_x *plugin_info, xmlTextReaderPtr rea
 
                        if (strcmp(plugin_info->name, ASCII(elementName)) == 0) {
                                __run_tag_parser_prestep(plugin_info, reader);
-                               break;
+                       }
+                       if(elementName != NULL){
+                               xmlFree((void*)elementName);
+                               elementName = NULL;
                        }
                        break;
                }
@@ -642,7 +632,7 @@ __process_tag_xml(pkgmgr_parser_plugin_info_x *plugin_info, xmlTextReaderPtr rea
 static void __process_tag_parser(pkgmgr_parser_plugin_info_x *plugin_info)
 {
        xmlTextReaderPtr reader;
-       xmlDocPtr docPtr;
+       xmlDocPtr docPtr = NULL;
        int ret = -1;
 
        if (access(plugin_info->filename, R_OK) != 0) {
@@ -665,6 +655,11 @@ static void __process_tag_parser(pkgmgr_parser_plugin_info_x *plugin_info)
                        _LOGS("%s : failed to read", plugin_info->filename);
                }
        }
+
+       if(docPtr != NULL){
+               xmlFreeDoc(docPtr);
+               docPtr = NULL;
+       }
 }
 
 static void __process_category_parser(pkgmgr_parser_plugin_info_x *plugin_info)
@@ -699,7 +694,7 @@ static void __process_category_parser(pkgmgr_parser_plugin_info_x *plugin_info)
                                category_detail->name = (char*) calloc(1, sizeof(char)*(strlen(category->name)+2));
                                if (category_detail->name == NULL) {
                                        _LOGD("Memory allocation failed\n");
-                                       free(category_detail);
+                                       FREE_AND_NULL(category_detail);
                                        goto END;
                                }
                                snprintf(category_detail->name, (strlen(category->name)+1), "%s", category->name);
@@ -759,7 +754,7 @@ static void __process_metadata_parser(pkgmgr_parser_plugin_info_x *plugin_info)
                                md_detail->key = (char*) calloc(1, sizeof(char)*(strlen(md->key)+2));
                                if (md_detail->key == NULL) {
                                        _LOGD("Memory allocation failed\n");
-                                       free(md_detail);
+                                       FREE_AND_NULL(md_detail);
                                        goto END;
                                }
                                snprintf(md_detail->key, (strlen(md->key)+1), "%s", md->key);
@@ -767,8 +762,8 @@ static void __process_metadata_parser(pkgmgr_parser_plugin_info_x *plugin_info)
                                md_detail->value = (char*) calloc(1, sizeof(char)*(strlen(md->value)+2));
                                if (md_detail->value == NULL) {
                                        _LOGD("Memory allocation failed\n");
-                                       free(md_detail->key);
-                                       free(md_detail);
+                                       FREE_AND_NULL(md_detail->key);
+                                       FREE_AND_NULL(md_detail);
                                        goto END;
                                }
                                snprintf(md_detail->value, (strlen(md->value)+1), "%s", md->value);
@@ -867,10 +862,10 @@ void __process_all_plugins(pkgmgr_parser_plugin_info_x *plugin_info)
                __process_each_plugin(plugin_info);
 
                memset(buf, 0x00, PKG_STRING_LEN_MAX);
-               free(plugin_info->type);
-               free(plugin_info->name);
-               free(plugin_info->flag);
-               free(plugin_info->path);
+               FREE_AND_NULL(plugin_info->type);
+               FREE_AND_NULL(plugin_info->name);
+               FREE_AND_NULL(plugin_info->flag);
+               FREE_AND_NULL(plugin_info->path);
        }
 
        if (fp != NULL)
@@ -1011,10 +1006,10 @@ void _pkgmgr_parser_plugin_uninstall_plugin(const char *plugin_type, const char
                }
 
                memset(buf, 0x00, PKG_STRING_LEN_MAX);
-               free(plugin_info->type);
-               free(plugin_info->name);
-               free(plugin_info->flag);
-               free(plugin_info->path);
+               FREE_AND_NULL(plugin_info->type);
+               FREE_AND_NULL(plugin_info->name);
+               FREE_AND_NULL(plugin_info->flag);
+               FREE_AND_NULL(plugin_info->path);
        }
 
        if (fp != NULL)
index 3f60761..15c2871 100644 (file)
@@ -5,15 +5,17 @@
 # path : directory path for plugin library
 
 flag="0x00000001":type="tag":name="shortcut-list":path="/usr/etc/package-manager/parserlib/libshortcut-list.so"
-flag="0x00000002":type="tag":name="livebox":path="/usr/etc/package-manager/parserlib/liblivebox.so"
+flag="0x00000002":type="tag":name="dynamicbox":path="/usr/etc/package-manager/parserlib/libdynamicbox.so"
 flag="0x00000004":type="tag":name="account":path="/usr/etc/package-manager/parserlib/libaccount.so"
 flag="0x00000008":type="tag":name="notifications":path="/usr/etc/package-manager/parserlib/libnotifications.so"
 flag="0x00000010":type="tag":name="privileges":path="/usr/etc/package-manager/parserlib/libprivileges.so"
 flag="0x00000020":type="tag":name="ime":path="/usr/etc/package-manager/parserlib/libime.so"
-flag="0x00000040":type="metadata":name="http://developer.samsung.com/tizen/metadata/font":path="/usr/etc/package-manager/parserlib/metadata/libfont.so"
+flag="0x00000040":type="category":name="http://tizen.org/category/downloadable_font":path="/usr/etc/package-manager/parserlib/category/libdownloadable_font.so"
 flag="0x00000080":type="metadata":name="http://developer.samsung.com/tizen/metadata/sticker":path="/usr/etc/package-manager/parserlib/metadata/libsticker.so"
 flag="0x00000100":type="metadata":name="http://developer.samsung.com/tizen/metadata/ttsengine":path="/usr/etc/package-manager/parserlib/metadata/libttsengine.so"
 flag="0x00000200":type="metadata":name="http://developer.samsung.com/tizen/metadata/downloadable_filters":path="/usr/etc/package-manager/parserlib/metadata/libdownloadable_filters.so"
 flag="0x00000400":type="metadata":name="http://developer.samsung.com/tizen/metadata/dictionary":path="/usr/etc/package-manager/parserlib/metadata/libdictionary.so"
 flag="0x00000800":type="category":name="http://tizen.org/category/antivirus":path="/usr/etc/package-manager/parserlib/category/libantivirus.so"
-flag="0x00001000":type="metadata":name="http://developer.samsung.com/tizen/metadata/profile":path="/usr/etc/package-manager/parserlib/metadata/libtheme.so"
\ No newline at end of file
+flag="0x00001000":type="metadata":name="http://developer.samsung.com/tizen/metadata/profile":path="/usr/etc/package-manager/parserlib/metadata/libtheme.so"
+flag="0x00002000":type="category":name="http://tizen.org/category/tts":path="/usr/etc/package-manager/parserlib/category/libsamsung_tts.so"
+flag="0x00004000":type="tag":name="livebox":path="/usr/etc/package-manager/parserlib/liblivebox.so"
\ No newline at end of file
index 4eb0dfe..9f97869 100644 (file)
@@ -27,7 +27,7 @@
 
 #include <pkgmgr_parser.h>
 #include "pkgmgr_parser_signature.h"
-#include "pkgmgr-info-debug.h"
+#include "pkgmgrinfo_debug.h"
 
 #ifdef LOG_TAG
 #undef LOG_TAG
@@ -76,11 +76,36 @@ typedef struct _mdm_data {
 } mdm_data_t;
 
 #define LIBMDM_PATH "libmdm.so.1"
-#define BUFMAX 1024*128
 
 #define ASCII(s) (const char *)s
 #define XMLCHAR(s) (const xmlChar *)s
 
+static int __get_attribute(xmlTextReaderPtr reader, char *attribute, const char **xml_attribute)
+{
+       if(xml_attribute == NULL){
+               _LOGE("@xml_attribute argument is NULL!!");
+               return -1;
+       }
+       xmlChar *attrib_val = xmlTextReaderGetAttribute(reader,XMLCHAR(attribute));
+       if(attrib_val)
+               *xml_attribute = ASCII(attrib_val);
+
+       return 0;
+}
+
+static int  __get_value(xmlTextReaderPtr reader, const char **xml_value)
+{
+       if(xml_value == NULL){
+               _LOGE("@xml_value is NULL!!");
+               return -1;
+       }
+       xmlChar *value = xmlTextReaderValue(reader);
+       if(value)
+               *xml_value = ASCII(value);
+
+       return 0;
+}
+
 static int _ri_next_child_element(xmlTextReaderPtr reader, int depth)
 {
        int ret = xmlTextReaderRead(reader);
@@ -115,84 +140,56 @@ static void _ri_free_transform(transform_x *transform)
 {
        if (transform == NULL)
                return;
-       if (transform->algorithm) {
-               free((void *)transform->algorithm);
-               transform->algorithm = NULL;
-       }
-       free((void*)transform);
-       transform = NULL;
+       FREE_AND_NULL(transform->algorithm);
+       FREE_AND_NULL(transform);
 }
 
 static void _ri_free_cannonicalizationmethod(cannonicalizationmethod_x *cannonicalizationmethod)
 {
        if (cannonicalizationmethod == NULL)
                return;
-       if (cannonicalizationmethod->algorithm) {
-               free((void *)cannonicalizationmethod->algorithm);
-               cannonicalizationmethod->algorithm = NULL;
-       }
-       free((void*)cannonicalizationmethod);
-       cannonicalizationmethod = NULL;
+       FREE_AND_NULL(cannonicalizationmethod->algorithm);
+       FREE_AND_NULL(cannonicalizationmethod);
 }
 
 static void _ri_free_signaturemethod(signaturemethod_x *signaturemethod)
 {
        if (signaturemethod == NULL)
                return;
-       if (signaturemethod->algorithm) {
-               free((void *)signaturemethod->algorithm);
-               signaturemethod->algorithm = NULL;
-       }
-       free((void*)signaturemethod);
-       signaturemethod = NULL;
+       FREE_AND_NULL(signaturemethod->algorithm);
+       FREE_AND_NULL(signaturemethod);
 }
 
 static void _ri_free_digestmethod(digestmethod_x *digestmethod)
 {
        if (digestmethod == NULL)
                return;
-       if (digestmethod->algorithm) {
-               free((void *)digestmethod->algorithm);
-               digestmethod->algorithm = NULL;
-       }
-       free((void*)digestmethod);
-       digestmethod = NULL;
+       FREE_AND_NULL(digestmethod->algorithm);
+       FREE_AND_NULL(digestmethod);
 }
 
 static void _ri_free_digestvalue(digestvalue_x *digestvalue)
 {
        if (digestvalue == NULL)
                return;
-       if (digestvalue->text) {
-               free((void *)digestvalue->text);
-               digestvalue->text = NULL;
-       }
-       free((void*)digestvalue);
-       digestvalue = NULL;
+       FREE_AND_NULL(digestvalue->text);
+       FREE_AND_NULL(digestvalue);
 }
 
 static void _ri_free_signaturevalue(signaturevalue_x *signaturevalue)
 {
        if (signaturevalue == NULL)
                return;
-       if (signaturevalue->text) {
-               free((void *)signaturevalue->text);
-               signaturevalue->text = NULL;
-       }
-       free((void*)signaturevalue);
-       signaturevalue = NULL;
+       FREE_AND_NULL(signaturevalue->text);
+       FREE_AND_NULL(signaturevalue);
 }
 
 static void _ri_free_x509certificate(x509certificate_x *x509certificate)
 {
        if (x509certificate == NULL)
                return;
-       if (x509certificate->text) {
-               free((void *)x509certificate->text);
-               x509certificate->text = NULL;
-       }
-       free((void*)x509certificate);
-       x509certificate = NULL;
+       FREE_AND_NULL(x509certificate->text);
+       FREE_AND_NULL(x509certificate);
 }
 
 static void _ri_free_x509data(x509data_x *x509data)
@@ -208,8 +205,7 @@ static void _ri_free_x509data(x509data_x *x509data)
                        x509certificate = tmp;
                }
        }
-       free((void*)x509data);
-       x509data = NULL;
+       FREE_AND_NULL(x509data);
 }
 
 static void _ri_free_keyinfo(keyinfo_x *keyinfo)
@@ -225,8 +221,7 @@ static void _ri_free_keyinfo(keyinfo_x *keyinfo)
                        x509data = tmp;
                }
        }
-       free((void*)keyinfo);
-       keyinfo = NULL;
+       FREE_AND_NULL(keyinfo);
 }
 
 static void _ri_free_transforms(transforms_x *transforms)
@@ -242,8 +237,7 @@ static void _ri_free_transforms(transforms_x *transforms)
                        transform = tmp;
                }
        }
-       free((void*)transforms);
-       transforms = NULL;
+       FREE_AND_NULL(transforms);
 }
 
 static void _ri_free_reference(reference_x *reference)
@@ -277,8 +271,7 @@ static void _ri_free_reference(reference_x *reference)
                        transforms = tmp;
                }
        }
-       free((void*)reference);
-       reference = NULL;
+       FREE_AND_NULL(reference);
 }
 
 static void _ri_free_signedinfo(signedinfo_x *signedinfo)
@@ -312,22 +305,15 @@ static void _ri_free_signedinfo(signedinfo_x *signedinfo)
                        reference = tmp;
                }
        }
-       free((void*)signedinfo);
-       signedinfo = NULL;
+       FREE_AND_NULL(signedinfo);
 }
 
 void _ri_free_signature_xml(signature_x *sigx)
 {
        if (sigx == NULL)
                return;
-       if (sigx->id) {
-               free((void *)sigx->id);
-               sigx->id = NULL;
-       }
-       if (sigx->xmlns) {
-               free((void *)sigx->xmlns);
-               sigx->xmlns = NULL;
-       }
+       FREE_AND_NULL(sigx->id);
+       FREE_AND_NULL(sigx->xmlns);
        if (sigx->signedinfo) {
                signedinfo_x *signedinfo = sigx->signedinfo;
                signedinfo_x *tmp = NULL;
@@ -356,30 +342,44 @@ void _ri_free_signature_xml(signature_x *sigx)
                }
        }
        /*Object will be freed when it will be parsed in future*/
-       free((void*)sigx);
-       sigx = NULL;
+       FREE_AND_NULL(sigx);
 }
 
 static int _ri_process_digestmethod(xmlTextReaderPtr reader, digestmethod_x *digestmethod)
 {
-       if (xmlTextReaderGetAttribute(reader, XMLCHAR("Algorithm")))
-               digestmethod->algorithm = ASCII(xmlTextReaderGetAttribute(reader, XMLCHAR("Algorithm")));
-       return 0;
+       int ret = 0;
+       ret = __get_attribute(reader,"Algorithm",&digestmethod->algorithm);
+       if(ret != 0){
+               _LOGE("@Error in getting the attribute value");
+       }else{
+               _LOGD("DigestMethod Algo is %s\n",digestmethod->algorithm);
+       }
+       return ret;
+
 }
 
 static int _ri_process_digestvalue(xmlTextReaderPtr reader, digestvalue_x *digestvalue)
 {
+       int ret = -1;
        xmlTextReaderRead(reader);
-       if (xmlTextReaderValue(reader))
-               digestvalue->text = ASCII(xmlTextReaderValue(reader));
-       return 0;
+
+       ret = __get_value(reader,&digestvalue->text);
+       if(ret != 0){
+               _LOGE("@Error in getting the value");
+       }
+       return ret;
 }
 
 static int _ri_process_transform(xmlTextReaderPtr reader, transform_x *transform)
 {
-       if (xmlTextReaderGetAttribute(reader, XMLCHAR("Algorithm")))
-               transform->algorithm = ASCII(xmlTextReaderGetAttribute(reader, XMLCHAR("Algorithm")));
-       return 0;
+       int ret = 0;
+       ret = __get_attribute(reader,"Algorithm",&transform->algorithm);
+       if(ret != 0){
+               _LOGE("@Error in getting the attribute value");
+       }else{
+               _LOGD("Transform Algo is %s\n",transform->algorithm);
+       }
+       return ret;
 }
 
 static int _ri_process_transforms(xmlTextReaderPtr reader, transforms_x *transforms)
@@ -411,25 +411,34 @@ static int _ri_process_transforms(xmlTextReaderPtr reader, transforms_x *transfo
                if (ret < 0)
                        return ret;
        }
-       if (transforms->transform) {
-               LISTHEAD(transforms->transform, tmp1);
-               transforms->transform = tmp1;
-       }
+
+       SAFE_LISTHEAD(transforms->transform, tmp1);
+
        return ret;
 }
 
 static int _ri_process_cannonicalizationmethod(xmlTextReaderPtr reader, cannonicalizationmethod_x *cannonicalizationmethod)
 {
-       if (xmlTextReaderGetAttribute(reader, XMLCHAR("Algorithm")))
-               cannonicalizationmethod->algorithm = ASCII(xmlTextReaderGetAttribute(reader, XMLCHAR("Algorithm")));
-       return 0;
+       int ret = 0;
+       ret = __get_attribute(reader,"Algorithm",&cannonicalizationmethod->algorithm);
+       if(ret != 0){
+               _LOGE("@Error in getting the attribute value");
+       }else{
+               _LOGD("Cannonicalization-method Algo is %s\n",cannonicalizationmethod->algorithm);
+       }
+       return ret;
 }
 
 static int _ri_process_signaturemethod(xmlTextReaderPtr reader, signaturemethod_x *signaturemethod)
 {
-       if (xmlTextReaderGetAttribute(reader, XMLCHAR("Algorithm")))
-               signaturemethod->algorithm = ASCII(xmlTextReaderGetAttribute(reader, XMLCHAR("Algorithm")));
-       return 0;
+       int ret = 0;
+       ret = __get_attribute(reader,"Algorithm",&signaturemethod->algorithm);
+       if(ret != 0){
+               _LOGE("@Error in getting the attribute value");
+       }else{
+               _LOGD("Signature-method Algo is %s\n",signaturemethod->algorithm);
+       }
+       return ret;
 }
 
 static int _ri_process_reference(xmlTextReaderPtr reader, reference_x *reference)
@@ -441,8 +450,12 @@ static int _ri_process_reference(xmlTextReaderPtr reader, reference_x *reference
        digestvalue_x *tmp2 = NULL;
        transforms_x *tmp3 = NULL;
 
-       if (xmlTextReaderGetAttribute(reader, XMLCHAR("URI")))
-               reference->uri = ASCII(xmlTextReaderGetAttribute(reader, XMLCHAR("URI")));
+       ret = __get_attribute(reader,"URI",&reference->uri);
+       if(ret != 0){
+               _LOGE("@Error in getting the attribute value");
+               return ret;
+       }
+       _LOGD("Refrence-uri is %s\n",reference->uri);
 
        depth = xmlTextReaderDepth(reader);
        while ((ret = _ri_next_child_element(reader, depth))) {
@@ -482,29 +495,23 @@ static int _ri_process_reference(xmlTextReaderPtr reader, reference_x *reference
                if (ret < 0)
                        return ret;
        }
-       if (reference->digestmethod) {
-               LISTHEAD(reference->digestmethod, tmp1);
-               reference->digestmethod = tmp1;
-       }
-       if (reference->digestvalue) {
-               LISTHEAD(reference->digestvalue, tmp2);
-               reference->digestvalue = tmp2;
-       }
-       if (reference->transforms) {
-               LISTHEAD(reference->transforms, tmp3);
-               reference->transforms = tmp3;
-       }
+
+       SAFE_LISTHEAD(reference->digestmethod, tmp1);
+       SAFE_LISTHEAD(reference->digestvalue, tmp2);
+       SAFE_LISTHEAD(reference->transforms, tmp3);
+
        return ret;
 }
 
 static int _ri_process_x509certificate(xmlTextReaderPtr reader, x509certificate_x *x509certificate)
 {
+       int ret = -1;
        xmlTextReaderRead(reader);
-       if (xmlTextReaderValue(reader)) {
-               x509certificate->text = ASCII(xmlTextReaderValue(reader));
-               // _d_msg(DEBUG_INFO, "certlen=%d, x509certificate : %s", strlen(x509certificate->text), x509certificate->text);
+       ret = __get_value(reader,&x509certificate->text);
+       if(ret != 0){
+               _LOGE("@Error in getting the value");
        }
-       return 0;
+       return ret;
 }
 
 static int _ri_process_x509data(xmlTextReaderPtr reader, x509data_x *x509data)
@@ -536,20 +543,11 @@ static int _ri_process_x509data(xmlTextReaderPtr reader, x509data_x *x509data)
                if (ret < 0)
                        return ret;
        }
-       if (x509data->x509certificate) {
-               LISTHEAD(x509data->x509certificate, tmp1);
-               x509data->x509certificate = tmp1;
-       }
-       return ret;
-}
 
-#if 0
-static int _ri_process_object(xmlTextReaderPtr reader, object_x *object)
-{
-       /*To be parsed later*/
-       return 0;
+       SAFE_LISTHEAD(x509data->x509certificate, tmp1);
+
+       return ret;
 }
-#endif
 
 static int _ri_process_keyinfo(xmlTextReaderPtr reader, keyinfo_x *keyinfo)
 {
@@ -580,21 +578,21 @@ static int _ri_process_keyinfo(xmlTextReaderPtr reader, keyinfo_x *keyinfo)
                if (ret < 0)
                        return ret;
        }
-       if (keyinfo->x509data) {
-               LISTHEAD(keyinfo->x509data, tmp1);
-               keyinfo->x509data = tmp1;
-       }
+
+       SAFE_LISTHEAD(keyinfo->x509data, tmp1);
+
        return ret;
 }
 
 static int _ri_process_signaturevalue(xmlTextReaderPtr reader, signaturevalue_x *signaturevalue)
 {
+       int ret = 0;
        xmlTextReaderRead(reader);
-       if (xmlTextReaderValue(reader)) {
-               signaturevalue->text = ASCII(xmlTextReaderValue(reader));
-               // _d_msg(DEBUG_INFO, "siglen=%d SignatureValue %s", strlen(signaturevalue->text), signaturevalue->text);
+       ret = __get_value(reader,&signaturevalue->text);
+       if(ret != 0){
+               _LOGE("@Error in getting the value");
        }
-       return 0;
+       return ret;
 }
 
 static int _ri_process_signedinfo(xmlTextReaderPtr reader, signedinfo_x *signedinfo)
@@ -644,18 +642,11 @@ static int _ri_process_signedinfo(xmlTextReaderPtr reader, signedinfo_x *signedi
                if (ret < 0)
                        return ret;
        }
-       if (signedinfo->cannonicalizationmethod) {
-               LISTHEAD(signedinfo->cannonicalizationmethod, tmp1);
-               signedinfo->cannonicalizationmethod = tmp1;
-       }
-       if (signedinfo->signaturemethod) {
-               LISTHEAD(signedinfo->signaturemethod, tmp2);
-               signedinfo->signaturemethod = tmp2;
-       }
-       if (signedinfo->reference) {
-               LISTHEAD(signedinfo->reference, tmp3);
-               signedinfo->reference = tmp3;
-       }
+
+       SAFE_LISTHEAD(signedinfo->cannonicalizationmethod, tmp1);
+       SAFE_LISTHEAD(signedinfo->signaturemethod, tmp2);
+       SAFE_LISTHEAD(signedinfo->reference, tmp3);
+
        return ret;
 }
 
@@ -718,22 +709,12 @@ static int _ri_process_sign(xmlTextReaderPtr reader, signature_x *sigx)
                if (ret < 0)
                        return ret;
        }
-       if (sigx->signedinfo) {
-               LISTHEAD(sigx->signedinfo, tmp1);
-               sigx->signedinfo = tmp1;
-       }
-       if (sigx->signaturevalue) {
-               LISTHEAD(sigx->signaturevalue, tmp2);
-               sigx->signaturevalue = tmp2;
-       }
-       if (sigx->keyinfo) {
-               LISTHEAD(sigx->keyinfo, tmp3);
-               sigx->keyinfo = tmp3;
-       }
-       if (sigx->object) {
-               LISTHEAD(sigx->object, tmp4);
-               sigx->object = tmp4;
-       }
+
+       SAFE_LISTHEAD(sigx->signedinfo, tmp1);
+       SAFE_LISTHEAD(sigx->signaturevalue, tmp2);
+       SAFE_LISTHEAD(sigx->keyinfo, tmp3);
+       SAFE_LISTHEAD(sigx->object, tmp4);
+
        return ret;
 }
 
@@ -749,10 +730,20 @@ static int _ri_process_signature(xmlTextReaderPtr reader, signature_x *sigx)
                        return -1;
                }
                if (!strcmp(ASCII(node), "Signature")) {
-                       if (xmlTextReaderGetAttribute(reader, XMLCHAR("Id")))
-                               sigx->id = ASCII(xmlTextReaderGetAttribute(reader, XMLCHAR("Id")));
-                       if (xmlTextReaderGetAttribute(reader, XMLCHAR("xmlns")))
-                               sigx->xmlns = ASCII(xmlTextReaderGetAttribute(reader, XMLCHAR("xmlns")));
+                       ret = __get_attribute(reader,"Id",&sigx->id);
+                       if(ret != 0){
+                               _LOGE("@Error in getting the attribute value");
+                               return ret;
+                       }
+                       _LOGD("sigx-id is %s\n",sigx->id);
+
+                       ret = __get_attribute(reader,"xmlns",&sigx->xmlns);
+                       if(ret != 0){
+                               _LOGE("@Error in getting the attribute value");
+                               return ret;
+                       }
+                       _LOGD("sigx-xmlns is %s\n",sigx->xmlns);
+
                        ret = _ri_process_sign(reader, sigx);
                } else {
                        // _d_msg(DEBUG_ERR, "No Signature element found\n");
@@ -954,6 +945,8 @@ catch:
 int __ps_check_mdm_policy(manifest_x * mfx, MDM_ACTION_TYPE action)
 {
        int ret = PM_MDM_R_OK;
+
+#ifdef TIZEN_MDM_ENABLE
        retvm_if(mfx == NULL, PM_MDM_R_OK, "Manifest pointer is NULL");
 
        char *errmsg = NULL;
@@ -1020,6 +1013,7 @@ int __ps_check_mdm_policy(manifest_x * mfx, MDM_ACTION_TYPE action)
 catch:
 
        dlclose(handle);
+#endif
 
        return ret;
 }
diff --git a/parser/preload_list.txt.in b/parser/preload_list.txt.in
deleted file mode 100755 (executable)
index 0f7d6ce..0000000
+++ /dev/null
@@ -1,87 +0,0 @@
-#RW_NORM
-com.samsung.ag-hello
-com.samsung.app-tray
-com.samsung.bluetooth-share-ui
-com.samsung.bluetooth
-com.samsung.browser
-com.samsung.bt-appsvc
-com.samsung.bt-syspopup
-com.samsung.calculator
-com.samsung.calendar-viewer
-com.samsung.calendar
-com.samsung.call-eq-analyzer
-com.samsung.call
-com.samsung.camera-app
-com.samsung.ciss
-com.samsung.clock
-com.samsung.cluster-home
-com.samsung.contacts-viewer
-com.samsung.contacts
-com.samsung.dailybriefing-accuweather
-com.samsung.dailybriefing-agent
-com.samsung.dailybriefing-ynews
-com.samsung.dailybriefing-yfinance
-com.samsung.data-provider-slave
-com.samsung.download-provider
-com.samsung.draglock
-com.samsung.eas-appsvc
-com.samsung.email
-com.samsung.ereader
-com.samsung.facebook-service
-com.samsung.facebook
-com.samsung.fileshare-service
-com.samsung.fm-radio
-com.samsung.gallery
-com.samsung.idle-lock
-com.samsung.image-editor
-com.samsung.image-viewer
-com.samsung.keystrings
-com.samsung.kies-via-wifi
-com.samsung.livebox-3d-lock
-com.samsung.lowbat-syspopup
-com.samsung.lowmem-syspopup
-com.samsung.mdm-app
-com.samsung.mdm-syspopup
-com.samsung.memo
-com.samsung.menu-screen
-com.samsung.message
-com.samsung.mobileprint
-com.samsung.msg-ui-class0
-com.samsung.music-player
-com.samsung.myfile
-com.samsung.nfc-app
-com.samsung.phone-lock
-com.samsung.phone
-com.samsung.picasa
-com.samsung.poweroff-syspopup
-com.samsung.pwlock
-com.samsung.ring
-com.samsung.setting
-com.samsung.smartsearch
-com.samsung.sound-player
-com.samsung.system-panel
-com.samsung.taskmgr
-com.samsung.tethering
-com.samsung.tickernoti-syspopup
-com.samsung.usb-printer-detector
-com.samsung.usbotg-syspopup
-com.samsung.voicerecorder
-com.samsung.volume
-com.samsung.vtmain
-com.samsung.wifi-direct-popup
-com.samsung.wifi-direct-ugapp
-com.samsung.youtube
-activesync-ui
-com.samsung.rcs-im
-com.samsung.ims-syspopup
-aospd00043
-cp7ipabg4k
-57r43275q7
-q7097a278m
-800ij447xl
-70lsyzhkse
-nas9xepmna
-
-#RW_RM
-com.samsung.video-player
-com.samsung.spotify
index 07736f2..eacbba9 100755 (executable)
@@ -1,13 +1,18 @@
 <manifest>
-       <define>
-               <domain name="pkgmgr-parser"/>
-       </define>
+        <define>
+                <domain name="pkgmgr-parser"/>
+                               <request>
+                                       <smack request="mdm-server" type="w"/>
+                                       <smack request="mdm-server::app" type="r"/>
+                                       <smack request="mdm-server::admin" type="r"/>
+                               </request>
+        </define>
        <request>
                <domain name="pkgmgr-parser"/>
        </request>
        <assign>
-               <filesystem path="@LIB_INSTALL_DIR@/libpkgmgr_parser.so.0" label="_"/>
-               <filesystem path="@LIB_INSTALL_DIR@/libpkgmgr_parser.so.0.1.0" label="_"/>
-               <filesystem path="@LIB_INSTALL_DIR@/libpkgmgr_parser_lib_sample.so" label="_"/>
-       </assign>
+                <filesystem path="@LIB_INSTALL_DIR@/libpkgmgr_parser.so.0" label="_" exec_label="none"/>
+                <filesystem path="@LIB_INSTALL_DIR@/libpkgmgr_parser.so.0.1.0" label="_" exec_label="none"/>
+                <filesystem path="@LIB_INSTALL_DIR@/libpkgmgr_parser_lib_sample.so" label="_" exec_label="none"/>
+        </assign>
 </manifest>
diff --git a/src/pkgmgr-info-internal.c b/src/pkgmgr-info-internal.c
deleted file mode 100755 (executable)
index 717a85f..0000000
+++ /dev/null
@@ -1,223 +0,0 @@
-/*
- * pkgmgr-info
- *
- * Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved.
- *
- * Contact: Jayoun Lee <airjany@samsung.com>, Sewook Park <sewook7.park@samsung.com>,
- * Jaeho Lee <jaeho81.lee@samsung.com>, Shobhit Srivastava <shobhit.s@samsung.com>
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- */
-
-#include <stdlib.h>
-#include <string.h>
-#include <stdio.h>
-#include "pkgmgr-info.h"
-#include "pkgmgr-info-internal.h"
-
-struct _pkginfo_str_map_t {
-       pkgmgrinfo_pkginfo_filter_prop_str prop;
-       const char *property;
-};
-
-static struct _pkginfo_str_map_t pkginfo_str_prop_map[] = {
-       {E_PMINFO_PKGINFO_PROP_PACKAGE_ID,              PMINFO_PKGINFO_PROP_PACKAGE_ID},
-       {E_PMINFO_PKGINFO_PROP_PACKAGE_TYPE,            PMINFO_PKGINFO_PROP_PACKAGE_TYPE},
-       {E_PMINFO_PKGINFO_PROP_PACKAGE_VERSION,         PMINFO_PKGINFO_PROP_PACKAGE_VERSION},
-       {E_PMINFO_PKGINFO_PROP_PACKAGE_INSTALL_LOCATION,PMINFO_PKGINFO_PROP_PACKAGE_INSTALL_LOCATION},
-       {E_PMINFO_PKGINFO_PROP_PACKAGE_INSTALLED_STORAGE,PMINFO_PKGINFO_PROP_PACKAGE_INSTALLED_STORAGE},
-       {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}
-};
-
-struct _pkginfo_int_map_t {
-       pkgmgrinfo_pkginfo_filter_prop_int prop;
-       const char *property;
-};
-
-static struct _pkginfo_int_map_t pkginfo_int_prop_map[] = {
-       {E_PMINFO_PKGINFO_PROP_PACKAGE_SIZE,    PMINFO_PKGINFO_PROP_PACKAGE_SIZE}
-};
-
-struct _pkginfo_bool_map_t {
-       pkgmgrinfo_pkginfo_filter_prop_bool prop;
-       const char *property;
-};
-
-static struct _pkginfo_bool_map_t pkginfo_bool_prop_map[] = {
-       {E_PMINFO_PKGINFO_PROP_PACKAGE_REMOVABLE,       PMINFO_PKGINFO_PROP_PACKAGE_REMOVABLE},
-       {E_PMINFO_PKGINFO_PROP_PACKAGE_PRELOAD,         PMINFO_PKGINFO_PROP_PACKAGE_PRELOAD},
-       {E_PMINFO_PKGINFO_PROP_PACKAGE_READONLY,        PMINFO_PKGINFO_PROP_PACKAGE_READONLY},
-       {E_PMINFO_PKGINFO_PROP_PACKAGE_UPDATE,          PMINFO_PKGINFO_PROP_PACKAGE_UPDATE},
-       {E_PMINFO_PKGINFO_PROP_PACKAGE_APPSETTING,      PMINFO_PKGINFO_PROP_PACKAGE_APPSETTING},
-       {E_PMINFO_PKGINFO_PROP_PACKAGE_NODISPLAY_SETTING,       PMINFO_PKGINFO_PROP_PACKAGE_NODISPLAY_SETTING}
-};
-
-struct _appinfo_str_map_t {
-       pkgmgrinfo_appinfo_filter_prop_str prop;
-       const char *property;
-};
-
-static struct _appinfo_str_map_t appinfo_str_prop_map[] = {
-       {E_PMINFO_APPINFO_PROP_APP_ID,          PMINFO_APPINFO_PROP_APP_ID},
-       {E_PMINFO_APPINFO_PROP_APP_COMPONENT,   PMINFO_APPINFO_PROP_APP_COMPONENT},
-       {E_PMINFO_APPINFO_PROP_APP_EXEC,        PMINFO_APPINFO_PROP_APP_EXEC},
-       {E_PMINFO_APPINFO_PROP_APP_ICON,        PMINFO_APPINFO_PROP_APP_ICON},
-       {E_PMINFO_APPINFO_PROP_APP_TYPE,        PMINFO_APPINFO_PROP_APP_TYPE},
-       {E_PMINFO_APPINFO_PROP_APP_OPERATION,   PMINFO_APPINFO_PROP_APP_OPERATION},
-       {E_PMINFO_APPINFO_PROP_APP_URI,         PMINFO_APPINFO_PROP_APP_URI},
-       {E_PMINFO_APPINFO_PROP_APP_MIME,        PMINFO_APPINFO_PROP_APP_MIME},
-       {E_PMINFO_APPINFO_PROP_APP_CATEGORY,    PMINFO_APPINFO_PROP_APP_CATEGORY},
-       {E_PMINFO_APPINFO_PROP_APP_HWACCELERATION,      PMINFO_APPINFO_PROP_APP_HWACCELERATION},
-       {E_PMINFO_APPINFO_PROP_APP_SCREENREADER,        PMINFO_APPINFO_PROP_APP_SCREENREADER}
-};
-
-struct _appinfo_int_map_t {
-       pkgmgrinfo_appinfo_filter_prop_int prop;
-       const char *property;
-};
-
-static struct _appinfo_int_map_t appinfo_int_prop_map[] = {
-       /*Currently No Fields*/
-};
-
-struct _appinfo_bool_map_t {
-       pkgmgrinfo_appinfo_filter_prop_bool prop;
-       const char *property;
-};
-
-static struct _appinfo_bool_map_t appinfo_bool_prop_map[] = {
-       {E_PMINFO_APPINFO_PROP_APP_NODISPLAY,           PMINFO_APPINFO_PROP_APP_NODISPLAY},
-       {E_PMINFO_APPINFO_PROP_APP_MULTIPLE,            PMINFO_APPINFO_PROP_APP_MULTIPLE},
-       {E_PMINFO_APPINFO_PROP_APP_ONBOOT,              PMINFO_APPINFO_PROP_APP_ONBOOT},
-       {E_PMINFO_APPINFO_PROP_APP_AUTORESTART,         PMINFO_APPINFO_PROP_APP_AUTORESTART},
-       {E_PMINFO_APPINFO_PROP_APP_TASKMANAGE,          PMINFO_APPINFO_PROP_APP_TASKMANAGE},
-       {E_PMINFO_APPINFO_PROP_APP_LAUNCHCONDITION,             PMINFO_APPINFO_PROP_APP_LAUNCHCONDITION}
-};
-
-inline int _pkgmgrinfo_validate_cb(void *data, int ncols, char **coltxt, char **colname)
-{
-       int *p = (int*)data;
-       *p = atoi(coltxt[0]);
-       return 0;
-}
-
-inline pkgmgrinfo_pkginfo_filter_prop_str _pminfo_pkginfo_convert_to_prop_str(const char *property)
-{
-       int i = 0;
-       int max = 0;
-       pkgmgrinfo_pkginfo_filter_prop_str prop = -1;
-
-       if (property == NULL)
-               return -1;
-       max = E_PMINFO_PKGINFO_PROP_PACKAGE_MAX_STR - E_PMINFO_PKGINFO_PROP_PACKAGE_MIN_STR + 1;
-       for (i = 0 ; i < max; i++) {
-               if (strcmp(property, pkginfo_str_prop_map[i].property) == 0) {
-                       prop =  pkginfo_str_prop_map[i].prop;
-                       break;
-               }
-       }
-       return prop;
-}
-
-inline pkgmgrinfo_pkginfo_filter_prop_int _pminfo_pkginfo_convert_to_prop_int(const char *property)
-{
-       int i = 0;
-       int max = 0;
-       pkgmgrinfo_pkginfo_filter_prop_int prop = -1;
-
-       if (property == NULL)
-               return -1;
-       max = E_PMINFO_PKGINFO_PROP_PACKAGE_MAX_INT - E_PMINFO_PKGINFO_PROP_PACKAGE_MIN_INT + 1;
-       for (i = 0 ; i < max; i++) {
-               if (strcmp(property, pkginfo_int_prop_map[i].property) == 0) {
-                       prop =  pkginfo_int_prop_map[i].prop;
-                       break;
-               }
-       }
-       return prop;
-}
-
-inline pkgmgrinfo_pkginfo_filter_prop_bool _pminfo_pkginfo_convert_to_prop_bool(const char *property)
-{
-       int i = 0;
-       int max = 0;
-       pkgmgrinfo_pkginfo_filter_prop_bool prop = -1;
-
-       if (property == NULL)
-               return -1;
-       max = E_PMINFO_PKGINFO_PROP_PACKAGE_MAX_BOOL - E_PMINFO_PKGINFO_PROP_PACKAGE_MIN_BOOL + 1;
-       for (i = 0 ; i < max; i++) {
-               if (strcmp(property, pkginfo_bool_prop_map[i].property) == 0) {
-                       prop =  pkginfo_bool_prop_map[i].prop;
-                       break;
-               }
-       }
-       return prop;
-}
-
-inline pkgmgrinfo_appinfo_filter_prop_str _pminfo_appinfo_convert_to_prop_str(const char *property)
-{
-       int i = 0;
-       int max = 0;
-       pkgmgrinfo_appinfo_filter_prop_str prop = -1;
-
-       if (property == NULL)
-               return -1;
-       max = E_PMINFO_APPINFO_PROP_APP_MAX_STR - E_PMINFO_APPINFO_PROP_APP_MIN_STR + 1;
-       for (i = 0 ; i < max; i++) {
-               if (strcmp(property, appinfo_str_prop_map[i].property) == 0) {
-                       prop =  appinfo_str_prop_map[i].prop;
-                       break;
-               }
-       }
-       return prop;
-}
-
-inline pkgmgrinfo_appinfo_filter_prop_int _pminfo_appinfo_convert_to_prop_int(const char *property)
-{
-       int i = 0;
-       int max = 0;
-       pkgmgrinfo_appinfo_filter_prop_int prop = -1;
-
-       if (property == NULL)
-               return -1;
-       max = E_PMINFO_APPINFO_PROP_APP_MAX_INT - E_PMINFO_APPINFO_PROP_APP_MIN_INT + 1;
-       for (i = 0 ; i < max; i++) {
-               if (strcmp(property, appinfo_int_prop_map[i].property) == 0) {
-                       prop =  appinfo_int_prop_map[i].prop;
-                       break;
-               }
-       }
-       return prop;
-}
-
-inline pkgmgrinfo_appinfo_filter_prop_bool _pminfo_appinfo_convert_to_prop_bool(const char *property)
-{
-       int i = 0;
-       int max = 0;
-       pkgmgrinfo_appinfo_filter_prop_bool prop = -1;
-
-       if (property == NULL)
-               return -1;
-       max = E_PMINFO_APPINFO_PROP_APP_MAX_BOOL - E_PMINFO_APPINFO_PROP_APP_MIN_BOOL + 1;
-       for (i = 0 ; i < max; i++) {
-               if (strcmp(property, appinfo_bool_prop_map[i].property) == 0) {
-                       prop =  appinfo_bool_prop_map[i].prop;
-                       break;
-               }
-       }
-       return prop;
-}
index 90b06a2..9bb2ccd 100644 (file)
@@ -20,6 +20,7 @@
  */
 
 #include "pkgmgrinfo_private.h"
+#include "pkgmgr_parser.h"
 
 #ifdef LOG_TAG
 #undef LOG_TAG
 #define LOG_TAG "PKGMGR_INFO"
 
 #define LANGUAGE_LENGTH 2
+#define MAX_PACKAGE_STR_SIZE 512
 
-#define FILTER_QUERY_LIST_APP  "select DISTINCT package_app_info.app_id, package_app_info.app_component " \
+#define SAT_UI_APPID_1         "org.tizen.sat-ui"
+#define SAT_UI_APPID_2         "org.tizen.sat-ui-2"
+#define PKG_DATA_PATH  "/opt/usr/data/pkgmgr"
+
+
+#define FILTER_QUERY_COUNT_APP "select DISTINCT package_app_info.app_id, package_app_info.app_component, package_app_info.app_installed_storage " \
                                "from package_app_info LEFT OUTER JOIN package_app_localized_info " \
                                "ON package_app_info.app_id=package_app_localized_info.app_id " \
                                "and package_app_localized_info.app_locale='%s' " \
                                "LEFT OUTER JOIN package_app_app_category " \
                                "ON package_app_info.app_id=package_app_app_category.app_id where "
 
-#define METADATA_FILTER_QUERY_SELECT_CLAUSE    "select DISTINCT package_app_info.app_id, package_app_info.app_component " \
+#define FILTER_QUERY_LIST_APP  "select DISTINCT package_app_info.*, package_app_localized_info.app_locale, package_app_localized_info.app_label, package_app_localized_info.app_icon " \
+                               "from package_app_info LEFT OUTER JOIN package_app_localized_info " \
+                               "ON package_app_info.app_id=package_app_localized_info.app_id " \
+                               "and package_app_localized_info.app_locale IN ('%s', '%s') " \
+                               "LEFT OUTER JOIN package_app_app_svc " \
+                               "ON package_app_info.app_id=package_app_app_svc.app_id " \
+                               "LEFT OUTER JOIN package_app_app_category " \
+                               "ON package_app_info.app_id=package_app_app_category.app_id where "
+
+#define METADATA_FILTER_QUERY_SELECT_CLAUSE    "select DISTINCT package_app_info.* " \
                                "from package_app_info LEFT OUTER JOIN package_app_app_metadata " \
                                "ON package_app_info.app_id=package_app_app_metadata.app_id where "
 
@@ -58,6 +74,338 @@ typedef struct _pkgmgrinfo_appcontrol_x {
        char **subapp;
 } pkgmgrinfo_appcontrol_x;
 
+static char* __get_aliasid_from_db(sqlite3 *appinfo_db, const char *appid)
+{
+       int ret = PMINFO_R_OK;
+       char *alias_id = NULL;
+       char *query = NULL;
+       sqlite3_stmt *stmt = NULL;
+
+       query = sqlite3_mprintf("select alias_id from package_app_aliasid where app_id=%Q", appid);
+       tryvm_if(query == NULL, ret = PMINFO_R_ERROR,"Malloc failed!!");
+
+       /*Prepare query*/
+       ret = sqlite3_prepare_v2(appinfo_db, query, strlen(query), &stmt, NULL);
+       tryvm_if(ret != PMINFO_R_OK, ret = PMINFO_R_ERROR, "sqlite3_prepare_v2 failed[%s]\n", query);
+
+       alias_id = (char*)malloc(MAX_PACKAGE_STR_SIZE);
+       tryvm_if(alias_id == NULL, ret = PMINFO_R_ERROR,"Malloc failed!!");
+       memset(alias_id,'\0',MAX_PACKAGE_STR_SIZE);
+
+       /*Step query*/
+       ret = sqlite3_step(stmt);
+       if(ret == SQLITE_ROW){
+               /*Get the alias id*/
+               snprintf(alias_id, MAX_PACKAGE_STR_SIZE, "%s", (const char *)sqlite3_column_text(stmt, 0));
+               _LOGD("alias id [%s] id found for [%s] in DB",alias_id,appid);
+       }
+
+catch:
+       if (query)
+               sqlite3_free(query);
+       if (stmt)
+               sqlite3_finalize(stmt);
+
+       /*If alias id is not found then set the appid as alias id*/
+       if ( alias_id == NULL || strlen(alias_id) == 0 ) {
+               FREE_AND_NULL(alias_id);
+               alias_id = strdup(appid);
+       }
+
+       return alias_id;
+
+}
+
+static void __get_appinfo_from_db(char *colname, char *coltxt, uiapplication_x *uiapp)
+{
+       if (strcmp(colname, "app_id") == 0) {
+               if (uiapp->appid)
+                       return;
+
+               if (coltxt)
+                       uiapp->appid = strdup(coltxt);
+
+       } else if (strcmp(colname, "app_component") == 0) {
+               if (coltxt)
+                       uiapp->app_component = strdup(coltxt);
+               else
+                       uiapp->app_component = NULL;
+       } else if (strcmp(colname, "app_exec") == 0) {
+               if (coltxt)
+                       uiapp->exec = strdup(coltxt);
+               else
+                       uiapp->exec = NULL;
+       } else if (strcmp(colname, "app_nodisplay") == 0) {
+               if (coltxt)
+                       uiapp->nodisplay = strdup(coltxt);
+               else
+                       uiapp->nodisplay = NULL;
+       } else if (strcmp(colname, "app_type") == 0 ) {
+               if (coltxt)
+                       uiapp->type = strdup(coltxt);
+               else
+                       uiapp->type = NULL;
+       } else if (strcmp(colname, "app_onboot") == 0 ) {
+               if (coltxt)
+                       uiapp->onboot= strdup(coltxt);
+               else
+                       uiapp->onboot = NULL;
+       } else if (strcmp(colname, "app_multiple") == 0 ) {
+               if (coltxt)
+                       uiapp->multiple = strdup(coltxt);
+               else
+                       uiapp->multiple = NULL;
+       } else if (strcmp(colname, "app_autorestart") == 0 ) {
+               if (coltxt)
+                       uiapp->autorestart= strdup(coltxt);
+               else
+                       uiapp->autorestart = NULL;
+       } else if (strcmp(colname, "app_taskmanage") == 0 ) {
+               if (coltxt)
+                       uiapp->taskmanage = strdup(coltxt);
+               else
+                       uiapp->taskmanage = NULL;
+       } else if (strcmp(colname, "app_enabled") == 0 ) {
+               if (coltxt)
+                       uiapp->enabled= strdup(coltxt);
+               else
+                       uiapp->enabled = NULL;
+       } else if (strcmp(colname, "app_hwacceleration") == 0 ) {
+               if (coltxt)
+                       uiapp->hwacceleration = strdup(coltxt);
+               else
+                       uiapp->hwacceleration = NULL;
+       } else if (strcmp(colname, "app_screenreader") == 0 ) {
+               if (coltxt)
+                       uiapp->screenreader = strdup(coltxt);
+               else
+                       uiapp->screenreader = NULL;
+       } else if (strcmp(colname, "app_mainapp") == 0 ) {
+               if (coltxt)
+                       uiapp->mainapp = strdup(coltxt);
+               else
+                       uiapp->mainapp = NULL;
+       } else if (strcmp(colname, "app_recentimage") == 0 ) {
+               if (coltxt)
+                       uiapp->recentimage = strdup(coltxt);
+               else
+                       uiapp->recentimage = NULL;
+       } else if (strcmp(colname, "app_launchcondition") == 0 ) {
+               if (coltxt)
+                       uiapp->launchcondition = strdup(coltxt);
+               else
+                       uiapp->launchcondition = NULL;
+       } else if (strcmp(colname, "app_indicatordisplay") == 0){
+               if (coltxt)
+                       uiapp->indicatordisplay = strdup(coltxt);
+               else
+                       uiapp->indicatordisplay = NULL;
+       } else if (strcmp(colname, "app_portraitimg") == 0){
+               if (coltxt)
+                       uiapp->portraitimg = strdup(coltxt);
+               else
+                       uiapp->portraitimg = NULL;
+       } else if (strcmp(colname, "app_landscapeimg") == 0){
+               if (coltxt)
+                       uiapp->landscapeimg = strdup(coltxt);
+               else
+                       uiapp->landscapeimg = NULL;
+       } else if (strcmp(colname, "app_effectimage_type") == 0){
+               if (coltxt)
+                       uiapp->effectimage_type = strdup(coltxt);
+               else
+                       uiapp->effectimage_type = NULL;
+       } else if (strcmp(colname, "app_guestmodevisibility") == 0){
+               if (coltxt)
+                       uiapp->guestmode_visibility = strdup(coltxt);
+               else
+                       uiapp->guestmode_visibility = NULL;
+       } else if (strcmp(colname, "app_permissiontype") == 0 ) {
+               if (coltxt)
+                       uiapp->permission_type = strdup(coltxt);
+               else
+                       uiapp->permission_type = NULL;
+       } else if (strcmp(colname, "app_preload") == 0 ) {
+               if (coltxt)
+                       uiapp->preload = strdup(coltxt);
+               else
+                       uiapp->preload = NULL;
+       } else if (strcmp(colname, "app_submode") == 0 ) {
+               if (coltxt)
+                       uiapp->submode = strdup(coltxt);
+               else
+                       uiapp->submode = NULL;
+       } else if (strcmp(colname, "app_submode_mainid") == 0 ) {
+               if (coltxt)
+                       uiapp->submode_mainid = strdup(coltxt);
+               else
+                       uiapp->submode_mainid = NULL;
+       } else if (strcmp(colname, "app_installed_storage") == 0 ) {
+               if (coltxt)
+                       uiapp->installed_storage = strdup(coltxt);
+               else
+                       uiapp->installed_storage = NULL;
+       } else if (strcmp(colname, "app_process_pool") == 0 ) {
+               if (coltxt)
+                       uiapp->process_pool = strdup(coltxt);
+               else
+                       uiapp->process_pool = NULL;
+       } else if (strcmp(colname, "app_multi_instance") == 0 ) {
+               if (coltxt)
+                       uiapp->multi_instance = strdup(coltxt);
+               else
+                       uiapp->multi_instance = NULL;
+       } else if (strcmp(colname, "app_multi_instance_mainid") == 0 ) {
+               if (coltxt)
+                       uiapp->multi_instance_mainid = strdup(coltxt);
+               else
+                       uiapp->multi_instance_mainid = NULL;
+       } else if (strcmp(colname, "app_multi_window") == 0 ) {
+               if (coltxt)
+                       uiapp->multi_window = strdup(coltxt);
+               else
+                       uiapp->multi_window = NULL;
+       } else if (strcmp(colname, "app_support_disable") == 0 ) {
+               if (coltxt)
+                       uiapp->support_disable= strdup(coltxt);
+               else
+                       uiapp->support_disable = NULL;
+       } else if (strcmp(colname, "app_ui_gadget") == 0 ) {
+               if (coltxt)
+                       uiapp->ui_gadget = strdup(coltxt);
+               else
+                       uiapp->ui_gadget = NULL;
+       } else if (strcmp(colname, "app_removable") == 0 ) {
+               if (coltxt)
+                       uiapp->removable = strdup(coltxt);
+               else
+                       uiapp->removable = NULL;
+       } else if (strcmp(colname, "app_support_mode") == 0 ) {
+               if (coltxt)
+                       uiapp->support_mode = strdup(coltxt);
+               else
+                       uiapp->support_mode = NULL;
+       } else if (strcmp(colname, "app_support_feature") == 0 ) {
+               if (coltxt)
+                       uiapp->support_feature = strdup(coltxt);
+               else
+                       uiapp->support_feature = NULL;
+       } else if (strcmp(colname, "component_type") == 0 ) {
+               if (coltxt)
+                       uiapp->component_type = strdup(coltxt);
+               else
+                       uiapp->component_type = NULL;
+       } else if (strcmp(colname, "package") == 0 ) {
+               if (coltxt)
+                       uiapp->package = strdup(coltxt);
+               else
+                       uiapp->package = NULL;
+       } else if (strcmp(colname, "app_package_type") == 0 ) {
+               if (coltxt)
+                       uiapp->package_type = strdup(coltxt);
+               else
+                       uiapp->package_type = NULL;
+       } else if (strcmp(colname, "app_package_system") == 0 ) {
+               if (coltxt)
+                       uiapp->package_system = strdup(coltxt);
+               else
+                       uiapp->package_system = NULL;
+       } else if (strcmp(colname, "app_package_installed_time") == 0 ) {
+               if (coltxt)
+                       uiapp->package_installed_time = strdup(coltxt);
+               else
+                       uiapp->package_installed_time = NULL;
+
+       /*end of package_app_info table*/
+
+       } else if (strcmp(colname, "app_locale") == 0 ) {
+               if (coltxt) {
+                       uiapp->icon->lang = strdup(coltxt);
+                       uiapp->label->lang = strdup(coltxt);
+               }
+               else {
+                       uiapp->icon->lang = NULL;
+                       uiapp->label->lang = NULL;
+               }
+       } else if (strcmp(colname, "app_label") == 0 ) {
+               if (coltxt)
+                       uiapp->label->text = strdup(coltxt);
+               else
+                       uiapp->label->text = NULL;
+       } else if (strcmp(colname, "app_icon") == 0) {
+               if (coltxt)
+                       uiapp->icon->text = strdup(coltxt);
+               else
+                       uiapp->icon->text = NULL;
+       /*end of package_app_localized_info table*/
+
+       } else if (strcmp(colname, "category") == 0 ) {
+               if (coltxt)
+                       uiapp->category->name = strdup(coltxt);
+               else
+                       uiapp->category->name = NULL;
+       /*end of package_app_category_info table*/
+
+       } else if (strcmp(colname, "md_key") == 0 ) {
+               if (coltxt)
+                       uiapp->metadata->key = strdup(coltxt);
+               else
+                       uiapp->metadata->key = NULL;
+       } else if (strcmp(colname, "md_value") == 0 ) {
+               if (coltxt)
+                       uiapp->metadata->value = strdup(coltxt);
+               else
+                       uiapp->metadata->value = NULL;
+       /*end of package_app_metadata_info table*/
+
+       } else if (strcmp(colname, "pm_type") == 0 ) {
+               if (coltxt)
+                       uiapp->permission->type= strdup(coltxt);
+               else
+                       uiapp->permission->type = NULL;
+       } else if (strcmp(colname, "pm_value") == 0 ) {
+               if (coltxt)
+                       uiapp->permission->value = strdup(coltxt);
+               else
+                       uiapp->permission->value = NULL;
+       /*end of package_app_permission_info table*/
+
+       } else if (strcmp(colname, "app_image") == 0) {
+               if (coltxt)
+                       uiapp->image->text= strdup(coltxt);
+               else
+                       uiapp->image->text = NULL;
+       } else if (strcmp(colname, "app_image_section") == 0) {
+               if (coltxt)
+                       uiapp->image->section= strdup(coltxt);
+               else
+                       uiapp->image->section = NULL;
+       /*end of package_app_image_info table*/
+       }
+}
+
+static void __update_localed_label_for_list(sqlite3_stmt *stmt, pkgmgr_pkginfo_x *info)
+{
+       int i = 0;
+       int ncols = 0;
+       char *colname = NULL;
+       char *coltxt = NULL;
+
+//     uiapplication_x *ptr1 = NULL;
+
+//     LISTHEAD(info->manifest_info->uiapplication, ptr1);
+
+       ncols = sqlite3_column_count(stmt);
+
+       for(i = 0; i < ncols; i++)
+       {
+               colname = (char *)sqlite3_column_name(stmt, i);
+               if (strcmp(colname, "app_label") == 0 ){
+                       coltxt = (char *)sqlite3_column_text(stmt, i);
+                       FREE_AND_STRDUP(coltxt, info->manifest_info->uiapplication->label->text);
+               }
+       }
+}
 
 /* get the first locale value*/
 static int __fallback_locale_cb(void *data, int ncols, char **coltxt, char **colname)
@@ -72,6 +420,86 @@ static int __fallback_locale_cb(void *data, int ncols, char **coltxt, char **col
        return 0;
 }
 
+int __appinfo_cb(void *data, int ncols, char **coltxt, char **colname)
+{
+       pkgmgr_appinfo_x *info = (pkgmgr_appinfo_x *)data;
+       int i = 0;
+       icon_x *icon = NULL;
+       label_x *label = NULL;
+       category_x *category = NULL;
+       metadata_x *metadata = NULL;
+       permission_x *permission = NULL;
+       image_x *image = NULL;
+
+       icon = calloc(1, sizeof(icon_x));
+       LISTADD(info->uiapp_info->icon, icon);
+       label = calloc(1, sizeof(label_x));
+       LISTADD(info->uiapp_info->label, label);
+       category = calloc(1, sizeof(category_x));
+       LISTADD(info->uiapp_info->category, category);
+       metadata = calloc(1, sizeof(metadata_x));
+       LISTADD(info->uiapp_info->metadata, metadata);
+       permission = calloc(1, sizeof(permission_x));
+       LISTADD(info->uiapp_info->permission, permission);
+       image = calloc(1, sizeof(image_x));
+       LISTADD(info->uiapp_info->image, image);
+
+       for(i = 0; i < ncols; i++)
+       {
+               __get_appinfo_from_db(colname[i], coltxt[i], info->uiapp_info);
+       }
+       return 0;
+}
+
+int __uiapp_list_cb(void *data, int ncols, char **coltxt, char **colname)
+{
+       pkgmgr_pkginfo_x *info = (pkgmgr_pkginfo_x *)data;
+       int i = 0;
+       uiapplication_x *uiapp = NULL;
+       icon_x *icon = NULL;
+       label_x *label = NULL;
+
+       uiapp = calloc(1, sizeof(uiapplication_x));
+       LISTADD(info->manifest_info->uiapplication, uiapp);
+       icon = calloc(1, sizeof(icon_x));
+       LISTADD(info->manifest_info->uiapplication->icon, icon);
+       label = calloc(1, sizeof(label_x));
+       LISTADD(info->manifest_info->uiapplication->label, label);
+
+       for(i = 0; i < ncols; i++)
+       {
+               __get_appinfo_from_db(colname[i], coltxt[i], info->manifest_info->uiapplication);
+       }
+       return 0;
+}
+
+static void __get_appinfo_for_list(sqlite3_stmt *stmt, pkgmgr_pkginfo_x *udata)
+{
+       int i = 0;
+       int ncols = 0;
+       char *colname = NULL;
+       char *coltxt = NULL;
+
+       uiapplication_x *uiapp = NULL;
+
+       uiapp = calloc(1, sizeof(uiapplication_x));
+       uiapp->icon= calloc(1, sizeof(icon_x));
+       uiapp->label= calloc(1, sizeof(label_x));
+
+       LISTADD(udata->manifest_info->uiapplication, uiapp);
+
+       ncols = sqlite3_column_count(stmt);
+
+       for(i = 0; i < ncols; i++)
+       {
+               colname = (char *)sqlite3_column_name(stmt, i);
+               coltxt = (char *)sqlite3_column_text(stmt, i);
+
+//             _LOGE("field value      :: %s = %s \n", colname, coltxt);
+               __get_appinfo_from_db(colname, coltxt, udata->manifest_info->uiapplication);
+       }
+}
+
 static int __check_app_locale_from_app_localized_info_by_exact(sqlite3 *db, const char *appid, const char *locale)
 {
        int result_query = -1;
@@ -123,17 +551,14 @@ static char* __get_app_locale_from_app_localized_info_by_fallback(sqlite3 *db, c
                goto catch;
 
        locale_new = info->locale;
-       free(info);
+       FREE_AND_NULL(info);
        return locale_new;
 catch:
-       if (info) {
-               free(info);
-               info = NULL;
-       }
+       FREE_AND_NULL(info);
        return NULL;
 }
 
-static char* __get_app_locale_by_fallback(sqlite3 *db, const char *appid)
+char* __get_app_locale_by_fallback(sqlite3 *db, const char *appid)
 {
        assert(appid);
 
@@ -156,14 +581,14 @@ static char* __get_app_locale_by_fallback(sqlite3 *db, const char *appid)
        check_result = __check_app_locale_from_app_localized_info_by_fallback(db, appid, locale);
        if(check_result == 1) {
                   locale_new = __get_app_locale_from_app_localized_info_by_fallback(db, appid, locale);
-                  free(locale);
+                  FREE_AND_NULL(locale);
                   if (locale_new == NULL)
                           locale_new =  strdup(DEFAULT_LOCALE);
                   return locale_new;
        }
 
        /* default locale */
-       free(locale);
+       FREE_AND_NULL(locale);
        return  strdup(DEFAULT_LOCALE);
 }
 
@@ -185,1069 +610,71 @@ static void __get_metadata_filter_condition(gpointer data, char **condition)
        return;
 }
 
-static int __mini_appinfo_cb(void *data, int ncols, char **coltxt, char **colname)
+static int __sat_ui_is_enabled(const char *appid, bool *enabled)
 {
-       pkgmgr_pkginfo_x *info = (pkgmgr_pkginfo_x *)data;
-       int i = 0;
-       int j = 0;
-       uiapplication_x *uiapp = NULL;
-       serviceapplication_x *svcapp = NULL;
-       for(i = 0; i < ncols; i++)
-       {
-               if (strcmp(colname[i], "app_component") == 0) {
-                       if (coltxt[i]) {
-                               if (strcmp(coltxt[i], "uiapp") == 0) {
-                                       uiapp = calloc(1, sizeof(uiapplication_x));
-                                       if (uiapp == NULL) {
-                                               _LOGE("Out of Memory!!!\n");
-                                               return -1;
-                                       }
-                                       LISTADD(info->manifest_info->uiapplication, uiapp);
-                                       for(j = 0; j < ncols; j++)
-                                       {
-                                               if (strcmp(colname[j], "app_id") == 0) {
-                                                       if (coltxt[j])
-                                                               info->manifest_info->uiapplication->appid = strdup(coltxt[j]);
-                                               } else if (strcmp(colname[j], "app_exec") == 0) {
-                                                       if (coltxt[j])
-                                                               info->manifest_info->uiapplication->exec = strdup(coltxt[j]);
-                                                       else
-                                                               info->manifest_info->uiapplication->exec = NULL;
-                                               } else if (strcmp(colname[j], "app_nodisplay") == 0) {
-                                                       if (coltxt[j])
-                                                               info->manifest_info->uiapplication->nodisplay = strdup(coltxt[j]);
-                                                       else
-                                                               info->manifest_info->uiapplication->nodisplay = NULL;
-                                               } else if (strcmp(colname[j], "app_type") == 0 ) {
-                                                       if (coltxt[j])
-                                                               info->manifest_info->uiapplication->type = strdup(coltxt[j]);
-                                                       else
-                                                               info->manifest_info->uiapplication->type = NULL;
-                                               } else if (strcmp(colname[j], "app_multiple") == 0 ) {
-                                                       if (coltxt[j])
-                                                               info->manifest_info->uiapplication->multiple = strdup(coltxt[j]);
-                                                       else
-                                                               info->manifest_info->uiapplication->multiple = NULL;
-                                               } else if (strcmp(colname[j], "app_taskmanage") == 0 ) {
-                                                       if (coltxt[j])
-                                                               info->manifest_info->uiapplication->taskmanage = strdup(coltxt[j]);
-                                                       else
-                                                               info->manifest_info->uiapplication->taskmanage = NULL;
-                                               } else if (strcmp(colname[j], "app_hwacceleration") == 0 ) {
-                                                       if (coltxt[j])
-                                                               info->manifest_info->uiapplication->hwacceleration = strdup(coltxt[j]);
-                                                       else
-                                                               info->manifest_info->uiapplication->hwacceleration = NULL;
-                                               } else if (strcmp(colname[j], "app_screenreader") == 0 ) {
-                                                       if (coltxt[j])
-                                                               info->manifest_info->uiapplication->screenreader = strdup(coltxt[j]);
-                                                       else
-                                                               info->manifest_info->uiapplication->screenreader = NULL;
-                                               } else if (strcmp(colname[j], "app_enabled") == 0 ) {
-                                                       if (coltxt[j])
-                                                               info->manifest_info->uiapplication->enabled= strdup(coltxt[j]);
-                                                       else
-                                                               info->manifest_info->uiapplication->enabled = NULL;
-                                               } else if (strcmp(colname[j], "app_indicatordisplay") == 0){
-                                                       if (coltxt[j])
-                                                               info->manifest_info->uiapplication->indicatordisplay = strdup(coltxt[j]);
-                                                       else
-                                                               info->manifest_info->uiapplication->indicatordisplay = NULL;
-                                               } else if (strcmp(colname[j], "app_portraitimg") == 0){
-                                                       if (coltxt[j])
-                                                               info->manifest_info->uiapplication->portraitimg = strdup(coltxt[j]);
-                                                       else
-                                                               info->manifest_info->uiapplication->portraitimg = NULL;
-                                               } else if (strcmp(colname[j], "app_landscapeimg") == 0){
-                                                       if (coltxt[j])
-                                                               info->manifest_info->uiapplication->landscapeimg = strdup(coltxt[j]);
-                                                       else
-                                                               info->manifest_info->uiapplication->landscapeimg = NULL;
-                                               } else if (strcmp(colname[j], "app_guestmodevisibility") == 0){
-                                                       if (coltxt[j])
-                                                               info->manifest_info->uiapplication->guestmode_visibility = strdup(coltxt[j]);
-                                                       else
-                                                               info->manifest_info->uiapplication->guestmode_visibility = NULL;
-                                               } else if (strcmp(colname[j], "app_recentimage") == 0 ) {
-                                                       if (coltxt[j])
-                                                               info->manifest_info->uiapplication->recentimage = strdup(coltxt[j]);
-                                                       else
-                                                               info->manifest_info->uiapplication->recentimage = NULL;
-                                               } else if (strcmp(colname[j], "app_mainapp") == 0 ) {
-                                                       if (coltxt[j])
-                                                               info->manifest_info->uiapplication->mainapp = strdup(coltxt[j]);
-                                                       else
-                                                               info->manifest_info->uiapplication->mainapp = NULL;
-                                               } else if (strcmp(colname[j], "package") == 0 ) {
-                                                       if (coltxt[j])
-                                                               info->manifest_info->uiapplication->package = strdup(coltxt[j]);
-                                                       else
-                                                               info->manifest_info->uiapplication->package = NULL;
-                                               } else if (strcmp(colname[j], "app_component") == 0) {
-                                                       if (coltxt[j])
-                                                               info->manifest_info->uiapplication->app_component = strdup(coltxt[j]);
-                                                       else
-                                                               info->manifest_info->uiapplication->app_component = NULL;
-                                               } else if (strcmp(colname[j], "app_permissiontype") == 0 ) {
-                                                       if (coltxt[j])
-                                                               info->manifest_info->uiapplication->permission_type = strdup(coltxt[j]);
-                                                       else
-                                                               info->manifest_info->uiapplication->permission_type = NULL;
-                                               } else if (strcmp(colname[j], "component_type") == 0 ) {
-                                                       if (coltxt[j])
-                                                               info->manifest_info->uiapplication->component_type = strdup(coltxt[j]);
-                                                       else
-                                                               info->manifest_info->uiapplication->component_type = NULL;
-                                               } else if (strcmp(colname[j], "app_preload") == 0 ) {
-                                                       if (coltxt[j])
-                                                               info->manifest_info->uiapplication->preload = strdup(coltxt[j]);
-                                                       else
-                                                               info->manifest_info->uiapplication->preload = NULL;
-                                               } else if (strcmp(colname[j], "app_submode") == 0 ) {
-                                                       if (coltxt[j])
-                                                               info->manifest_info->uiapplication->submode = strdup(coltxt[j]);
-                                                       else
-                                                               info->manifest_info->uiapplication->submode = NULL;
-                                               } else if (strcmp(colname[j], "app_submode_mainid") == 0 ) {
-                                                       if (coltxt[j])
-                                                               info->manifest_info->uiapplication->submode_mainid = strdup(coltxt[j]);
-                                                       else
-                                                               info->manifest_info->uiapplication->submode_mainid = NULL;
-                                               } else if (strcmp(colname[j], "app_installed_storage") == 0 ) {
-                                                       if (coltxt[j])
-                                                               info->manifest_info->uiapplication->installed_storage = strdup(coltxt[j]);
-                                                       else
-                                                               info->manifest_info->uiapplication->installed_storage = NULL;
-                                               } else if (strcmp(colname[j], "app_process_pool") == 0 ) {
-                                                       if (coltxt[j])
-                                                               info->manifest_info->uiapplication->process_pool = strdup(coltxt[j]);
-                                                       else
-                                                               info->manifest_info->uiapplication->process_pool = NULL;
-                                               } else if (strcmp(colname[j], "app_onboot") == 0 ) {
-                                                       if (coltxt[j])
-                                                               info->manifest_info->uiapplication->onboot= strdup(coltxt[j]);
-                                                       else
-                                                               info->manifest_info->uiapplication->onboot = NULL;
-                                               } else if (strcmp(colname[j], "app_autorestart") == 0 ) {
-                                                       if (coltxt[j])
-                                                               info->manifest_info->uiapplication->autorestart= strdup(coltxt[j]);
-                                                       else
-                                                               info->manifest_info->uiapplication->autorestart = NULL;
-
-                                               } else
-                                                       continue;
-                                       }
-                               } else {
-                                       svcapp = calloc(1, sizeof(serviceapplication_x));
-                                       if (svcapp == NULL) {
-                                               _LOGE("Out of Memory!!!\n");
-                                               return -1;
-                                       }
-                                       LISTADD(info->manifest_info->serviceapplication, svcapp);
-                                       for(j = 0; j < ncols; j++)
-                                       {
-                                               if (strcmp(colname[j], "app_id") == 0) {
-                                                       if (coltxt[j])
-                                                               info->manifest_info->serviceapplication->appid = strdup(coltxt[j]);
-                                               } else if (strcmp(colname[j], "app_exec") == 0) {
-                                                       if (coltxt[j])
-                                                               info->manifest_info->serviceapplication->exec = strdup(coltxt[j]);
-                                                       else
-                                                               info->manifest_info->serviceapplication->exec = NULL;
-                                               } else if (strcmp(colname[j], "app_type") == 0 ){
-                                                       if (coltxt[j])
-                                                               info->manifest_info->serviceapplication->type = strdup(coltxt[j]);
-                                                       else
-                                                               info->manifest_info->serviceapplication->type = NULL;
-                                               } else if (strcmp(colname[j], "app_onboot") == 0 ){
-                                                       if (coltxt[j])
-                                                               info->manifest_info->serviceapplication->onboot = strdup(coltxt[j]);
-                                                       else
-                                                               info->manifest_info->serviceapplication->onboot = NULL;
-                                               } else if (strcmp(colname[j], "app_autorestart") == 0 ){
-                                                       if (coltxt[j])
-                                                               info->manifest_info->serviceapplication->autorestart = strdup(coltxt[j]);
-                                                       else
-                                                               info->manifest_info->serviceapplication->autorestart = NULL;
-                                               } else if (strcmp(colname[j], "package") == 0 ){
-                                                       if (coltxt[j])
-                                                               info->manifest_info->serviceapplication->package = strdup(coltxt[j]);
-                                                       else
-                                                               info->manifest_info->serviceapplication->package = NULL;
-                                               } else if (strcmp(colname[j], "app_permissiontype") == 0 ) {
-                                                       if (coltxt[j])
-                                                               info->manifest_info->serviceapplication->permission_type = strdup(coltxt[j]);
-                                                       else
-                                                               info->manifest_info->serviceapplication->permission_type = NULL;
-                                               } else
-                                                       continue;
-                                       }
-                               }
-                       }
-               } else
-                       continue;
-       }
-
-       return 0;
-}
+       retvm_if(appid == NULL, PMINFO_R_EINVAL, "appid is NULL");
+       retvm_if(enabled == NULL, PMINFO_R_EINVAL, "Argument supplied to hold return value is NULL");
 
-static int __appinfo_cb(void *data, int ncols, char **coltxt, char **colname)
-{
-       pkgmgr_appinfo_x *info = (pkgmgr_appinfo_x *)data;
-       int i = 0;
-       icon_x *icon = NULL;
-       label_x *label = NULL;
-       category_x *category = NULL;
-       metadata_x *metadata = NULL;
-       permission_x *permission = NULL;
-       image_x *image = NULL;
+       if ((strncmp(appid, SAT_UI_APPID_1, strlen(SAT_UI_APPID_1)) == 0) || (strncmp(appid, SAT_UI_APPID_2, strlen(SAT_UI_APPID_2)) == 0)) {
+               char info_file[MAX_PACKAGE_STR_SIZE] = {'\0', };
 
-       switch (info->app_component) {
-       case PMINFO_UI_APP:
-               icon = calloc(1, sizeof(icon_x));
-               LISTADD(info->uiapp_info->icon, icon);
-               label = calloc(1, sizeof(label_x));
-               LISTADD(info->uiapp_info->label, label);
-               category = calloc(1, sizeof(category_x));
-               LISTADD(info->uiapp_info->category, category);
-               metadata = calloc(1, sizeof(metadata_x));
-               LISTADD(info->uiapp_info->metadata, metadata);
-               permission = calloc(1, sizeof(permission_x));
-               LISTADD(info->uiapp_info->permission, permission);
-               image = calloc(1, sizeof(image_x));
-               LISTADD(info->uiapp_info->image, image);
-
-               for(i = 0; i < ncols; i++)
-               {
-                       if (strcmp(colname[i], "app_id") == 0) {
-                               /*appid being foreign key, is column in every table
-                               Hence appid gets strduped every time leading to memory leak.
-                               If appid is already set, just continue.*/
-                               if (info->uiapp_info->appid)
-                                       continue;
-                               if (coltxt[i])
-                                       info->uiapp_info->appid = strdup(coltxt[i]);
-                               else
-                                       info->uiapp_info->appid = NULL;
-                       } else if (strcmp(colname[i], "app_exec") == 0) {
-                               if (coltxt[i])
-                                       info->uiapp_info->exec = strdup(coltxt[i]);
-                               else
-                                       info->uiapp_info->exec = NULL;
-                       } else if (strcmp(colname[i], "app_nodisplay") == 0) {
-                               if (coltxt[i])
-                                       info->uiapp_info->nodisplay = strdup(coltxt[i]);
-                               else
-                                       info->uiapp_info->nodisplay = NULL;
-                       } else if (strcmp(colname[i], "app_type") == 0 ) {
-                               if (coltxt[i])
-                                       info->uiapp_info->type = strdup(coltxt[i]);
-                               else
-                                       info->uiapp_info->type = NULL;
-                       } else if (strcmp(colname[i], "app_icon_section") == 0 ) {
-                               if (coltxt[i])
-                                       info->uiapp_info->icon->section= strdup(coltxt[i]);
-                               else
-                                       info->uiapp_info->icon->section = NULL;
-                       } else if (strcmp(colname[i], "app_icon") == 0) {
-                               if (coltxt[i])
-                                       info->uiapp_info->icon->text = strdup(coltxt[i]);
-                               else
-                                       info->uiapp_info->icon->text = NULL;
-                       } else if (strcmp(colname[i], "app_label") == 0 ) {
-                               if (coltxt[i])
-                                       info->uiapp_info->label->text = strdup(coltxt[i]);
-                               else
-                                       info->uiapp_info->label->text = NULL;
-                       } else if (strcmp(colname[i], "app_multiple") == 0 ) {
-                               if (coltxt[i])
-                                       info->uiapp_info->multiple = strdup(coltxt[i]);
-                               else
-                                       info->uiapp_info->multiple = NULL;
-                       } else if (strcmp(colname[i], "app_taskmanage") == 0 ) {
-                               if (coltxt[i])
-                                       info->uiapp_info->taskmanage = strdup(coltxt[i]);
-                               else
-                                       info->uiapp_info->taskmanage = NULL;
-                       } else if (strcmp(colname[i], "app_hwacceleration") == 0 ) {
-                               if (coltxt[i])
-                                       info->uiapp_info->hwacceleration = strdup(coltxt[i]);
-                               else
-                                       info->uiapp_info->hwacceleration = NULL;
-                       } else if (strcmp(colname[i], "app_screenreader") == 0 ) {
-                               if (coltxt[i])
-                                       info->uiapp_info->screenreader = strdup(coltxt[i]);
-                               else
-                                       info->uiapp_info->screenreader = NULL;
-                       } else if (strcmp(colname[i], "app_enabled") == 0 ) {
-                               if (coltxt[i])
-                                       info->uiapp_info->enabled= strdup(coltxt[i]);
-                               else
-                                       info->uiapp_info->enabled = NULL;
-                       } else if (strcmp(colname[i], "app_indicatordisplay") == 0){
-                               if (coltxt[i])
-                                       info->uiapp_info->indicatordisplay = strdup(coltxt[i]);
-                               else
-                                       info->uiapp_info->indicatordisplay = NULL;
-                       } else if (strcmp(colname[i], "app_portraitimg") == 0){
-                               if (coltxt[i])
-                                       info->uiapp_info->portraitimg = strdup(coltxt[i]);
-                               else
-                                       info->uiapp_info->portraitimg = NULL;
-                       } else if (strcmp(colname[i], "app_landscapeimg") == 0){
-                               if (coltxt[i])
-                                       info->uiapp_info->landscapeimg = strdup(coltxt[i]);
-                               else
-                                       info->uiapp_info->landscapeimg = NULL;
-                       } else if (strcmp(colname[i], "app_guestmodevisibility") == 0){
-                               if (coltxt[i])
-                                       info->uiapp_info->guestmode_visibility = strdup(coltxt[i]);
-                               else
-                                       info->uiapp_info->guestmode_visibility = NULL;
-                       } else if (strcmp(colname[i], "category") == 0 ) {
-                               if (coltxt[i])
-                                       info->uiapp_info->category->name = strdup(coltxt[i]);
-                               else
-                                       info->uiapp_info->category->name = NULL;
-                       } else if (strcmp(colname[i], "md_key") == 0 ) {
-                               if (coltxt[i])
-                                       info->uiapp_info->metadata->key = strdup(coltxt[i]);
-                               else
-                                       info->uiapp_info->metadata->key = NULL;
-                       } else if (strcmp(colname[i], "md_value") == 0 ) {
-                               if (coltxt[i])
-                                       info->uiapp_info->metadata->value = strdup(coltxt[i]);
-                               else
-                                       info->uiapp_info->metadata->value = NULL;
-                       } else if (strcmp(colname[i], "pm_type") == 0 ) {
-                               if (coltxt[i])
-                                       info->uiapp_info->permission->type= strdup(coltxt[i]);
-                               else
-                                       info->uiapp_info->permission->type = NULL;
-                       } else if (strcmp(colname[i], "pm_value") == 0 ) {
-                               if (coltxt[i])
-                                       info->uiapp_info->permission->value = strdup(coltxt[i]);
-                               else
-                                       info->uiapp_info->permission->value = NULL;
-                       } else if (strcmp(colname[i], "app_recentimage") == 0 ) {
-                               if (coltxt[i])
-                                       info->uiapp_info->recentimage = strdup(coltxt[i]);
-                               else
-                                       info->uiapp_info->recentimage = NULL;
-                       } else if (strcmp(colname[i], "app_mainapp") == 0 ) {
-                               if (coltxt[i])
-                                       info->uiapp_info->mainapp = strdup(coltxt[i]);
-                               else
-                                       info->uiapp_info->mainapp = NULL;
-                       } else if (strcmp(colname[i], "app_locale") == 0 ) {
-                               if (coltxt[i]) {
-                                       info->uiapp_info->icon->lang = strdup(coltxt[i]);
-                                       info->uiapp_info->label->lang = strdup(coltxt[i]);
-                               }
-                               else {
-                                       info->uiapp_info->icon->lang = NULL;
-                                       info->uiapp_info->label->lang = NULL;
-                               }
-                       } else if (strcmp(colname[i], "app_image") == 0) {
-                                       if (coltxt[i])
-                                               info->uiapp_info->image->text= strdup(coltxt[i]);
-                                       else
-                                               info->uiapp_info->image->text = NULL;
-                       } else if (strcmp(colname[i], "app_image_section") == 0) {
-                                       if (coltxt[i])
-                                               info->uiapp_info->image->section= strdup(coltxt[i]);
-                                       else
-                                               info->uiapp_info->image->section = NULL;
-                       } else if (strcmp(colname[i], "app_permissiontype") == 0 ) {
-                               if (coltxt[i])
-                                       info->uiapp_info->permission_type = strdup(coltxt[i]);
-                               else
-                                       info->uiapp_info->permission_type = NULL;
-                       } else if (strcmp(colname[i], "component_type") == 0 ) {
-                               if (coltxt[i])
-                                       info->uiapp_info->component_type = strdup(coltxt[i]);
-                               else
-                                       info->uiapp_info->component_type = NULL;
-                       } else if (strcmp(colname[i], "app_preload") == 0 ) {
-                               if (coltxt[i])
-                                       info->uiapp_info->preload = strdup(coltxt[i]);
-                               else
-                                       info->uiapp_info->preload = NULL;
-                       } else if (strcmp(colname[i], "app_submode") == 0 ) {
-                               if (coltxt[i])
-                                       info->uiapp_info->submode = strdup(coltxt[i]);
-                               else
-                                       info->uiapp_info->submode = NULL;
-                       } else if (strcmp(colname[i], "app_submode_mainid") == 0 ) {
-                               if (coltxt[i])
-                                       info->uiapp_info->submode_mainid = strdup(coltxt[i]);
-                               else
-                                       info->uiapp_info->submode_mainid = NULL;
-                       } else if (strcmp(colname[i], "app_installed_storage") == 0 ) {
-                               if (coltxt[i])
-                                       info->uiapp_info->installed_storage = strdup(coltxt[i]);
-                               else
-                                       info->uiapp_info->installed_storage = NULL;
-                       } else if (strcmp(colname[i], "app_process_pool") == 0 ) {
-                               if (coltxt[i])
-                                       info->uiapp_info->process_pool = strdup(coltxt[i]);
-                               else
-                                       info->uiapp_info->process_pool = NULL;
-                       } else if (strcmp(colname[i], "app_onboot") == 0 ) {
-                               if (coltxt[i])
-                                       info->uiapp_info->onboot= strdup(coltxt[i]);
-                               else
-                                       info->uiapp_info->onboot = NULL;
-                       } else if (strcmp(colname[i], "app_autorestart") == 0 ) {
-                               if (coltxt[i])
-                                       info->uiapp_info->autorestart = strdup(coltxt[i]);
-                               else
-                                       info->uiapp_info->autorestart = NULL;
-
-                       } else
-                               continue;
-               }
-               break;
-       case PMINFO_SVC_APP:
-               icon = calloc(1, sizeof(icon_x));
-               LISTADD(info->svcapp_info->icon, icon);
-               label = calloc(1, sizeof(label_x));
-               LISTADD(info->svcapp_info->label, label);
-               category = calloc(1, sizeof(category_x));
-               LISTADD(info->svcapp_info->category, category);
-               metadata = calloc(1, sizeof(metadata_x));
-               LISTADD(info->svcapp_info->metadata, metadata);
-               permission = calloc(1, sizeof(permission_x));
-               LISTADD(info->svcapp_info->permission, permission);
-               for(i = 0; i < ncols; i++)
-               {
-                       if (strcmp(colname[i], "app_id") == 0) {
-                               /*appid being foreign key, is column in every table
-                               Hence appid gets strduped every time leading to memory leak.
-                               If appid is already set, just continue.*/
-                               if (info->svcapp_info->appid)
-                                       continue;
-                               if (coltxt[i])
-                                       info->svcapp_info->appid = strdup(coltxt[i]);
-                               else
-                                       info->svcapp_info->appid = NULL;
-                       } else if (strcmp(colname[i], "app_exec") == 0) {
-                               if (coltxt[i])
-                                       info->svcapp_info->exec = strdup(coltxt[i]);
-                               else
-                                       info->svcapp_info->exec = NULL;
-                       } else if (strcmp(colname[i], "app_icon") == 0) {
-                               if (coltxt[i])
-                                       info->svcapp_info->icon->text = strdup(coltxt[i]);
-                               else
-                                       info->svcapp_info->icon->text = NULL;
-                       } else if (strcmp(colname[i], "app_label") == 0 ) {
-                               if (coltxt[i])
-                                       info->svcapp_info->label->text = strdup(coltxt[i]);
-                               else
-                                       info->svcapp_info->label->text = NULL;
-                       } else if (strcmp(colname[i], "app_type") == 0 ) {
-                               if (coltxt[i])
-                                       info->svcapp_info->type = strdup(coltxt[i]);
-                               else
-                                       info->svcapp_info->type = NULL;
-                       } else if (strcmp(colname[i], "app_onboot") == 0 ) {
-                               if (coltxt[i])
-                                       info->svcapp_info->onboot = strdup(coltxt[i]);
-                               else
-                                       info->svcapp_info->onboot = NULL;
-                       } else if (strcmp(colname[i], "app_autorestart") == 0 ) {
-                               if (coltxt[i])
-                                       info->svcapp_info->autorestart = strdup(coltxt[i]);
-                               else
-                                       info->svcapp_info->autorestart = NULL;
-                       } else if (strcmp(colname[i], "app_enabled") == 0 ) {
-                               if (coltxt[i])
-                                       info->svcapp_info->enabled= strdup(coltxt[i]);
-                               else
-                                       info->svcapp_info->enabled = NULL;
-                       } else if (strcmp(colname[i], "category") == 0 ) {
-                               if (coltxt[i])
-                                       info->svcapp_info->category->name = strdup(coltxt[i]);
-                               else
-                                       info->svcapp_info->category->name = NULL;
-                       } else if (strcmp(colname[i], "md_key") == 0 ) {
-                               if (coltxt[i])
-                                       info->svcapp_info->metadata->key = strdup(coltxt[i]);
-                               else
-                                       info->svcapp_info->metadata->key = NULL;
-                       } else if (strcmp(colname[i], "md_value") == 0 ) {
-                               if (coltxt[i])
-                                       info->svcapp_info->metadata->value = strdup(coltxt[i]);
-                               else
-                                       info->svcapp_info->metadata->value = NULL;
-                       } else if (strcmp(colname[i], "pm_type") == 0 ) {
-                               if (coltxt[i])
-                                       info->svcapp_info->permission->type= strdup(coltxt[i]);
-                               else
-                                       info->svcapp_info->permission->type = NULL;
-                       } else if (strcmp(colname[i], "pm_value") == 0 ) {
-                               if (coltxt[i])
-                                       info->svcapp_info->permission->value = strdup(coltxt[i]);
-                               else
-                                       info->svcapp_info->permission->value = NULL;
-                       } else if (strcmp(colname[i], "app_locale") == 0 ) {
-                               if (coltxt[i]) {
-                                       info->svcapp_info->icon->lang = strdup(coltxt[i]);
-                                       info->svcapp_info->label->lang = strdup(coltxt[i]);
-                               }
-                               else {
-                                       info->svcapp_info->icon->lang = NULL;
-                                       info->svcapp_info->label->lang = NULL;
-                               }
-                       } else if (strcmp(colname[i], "app_permissiontype") == 0 ) {
-                               if (coltxt[i])
-                                       info->svcapp_info->permission_type = strdup(coltxt[i]);
-                               else
-                                       info->svcapp_info->permission_type = NULL;
-                       } else
-                               continue;
+               snprintf(info_file, MAX_PACKAGE_STR_SIZE, "%s/%s", PKG_DATA_PATH, appid);
+               if (access(info_file, F_OK)==0) {
+                       *enabled = 1;
+               } else {
+                       *enabled = 0;
                }
-               break;
-       default:
-               break;
+               return PMINFO_R_OK;
        }
-
-       return 0;
-}
-
-static pkgmgrinfo_app_component __appcomponent_convert(const char *comp)
-{
-       if ( strcasecmp(comp, "uiapp") == 0)
-               return PMINFO_UI_APP;
-       else if ( strcasecmp(comp, "svcapp") == 0)
-               return PMINFO_SVC_APP;
-       else
-               return -1;
+       return PMINFO_R_EINVAL;
 }
 
-static int __appcomponent_cb(void *data, int ncols, char **coltxt, char **colname)
+static int __sat_ui_get_label(pkgmgrinfo_appinfo_h  handle, char **label)
 {
-       pkgmgr_appinfo_x *info = (pkgmgr_appinfo_x *)data;
-       int i = 0;
-       for(i = 0; i < ncols; i++)
-       {
-               if (strcmp(colname[i], "app_component") == 0) {
-                       info->app_component = __appcomponent_convert(coltxt[i]);
-               } else if (strcmp(colname[i], "package") == 0) {
-                       info->package = strdup(coltxt[i]);
-               }
-       }
+       retvm_if(handle == NULL, PMINFO_R_EINVAL, "appinfo handle is NULL");
+       retvm_if(label == NULL, PMINFO_R_EINVAL, "Argument supplied to hold return value is NULL");
 
-       return 0;
-}
+       pkgmgr_appinfo_x *info = (pkgmgr_appinfo_x *)handle;
+       retvm_if(info->uiapp_info->appid == NULL, PMINFO_R_EINVAL, "appid is NULL");
 
-static int __app_list_cb(void *data, int ncols, char **coltxt, char **colname)
-{
-       pkgmgr_pkginfo_x *info = (pkgmgr_pkginfo_x *)data;
-       int i = 0;
-       int j = 0;
-       uiapplication_x *uiapp = NULL;
-       serviceapplication_x *svcapp = NULL;
-       for(i = 0; i < ncols; i++)
-       {
-               if ((strcmp(colname[i], "app_component") == 0) ||
-                       (strcmp(colname[i], "package_app_info.app_component") == 0)) {
-                       if (coltxt[i]) {
-                               if (strcmp(coltxt[i], "uiapp") == 0) {
-                                       uiapp = calloc(1, sizeof(uiapplication_x));
-                                       if (uiapp == NULL) {
-                                               _LOGE("Out of Memory!!!\n");
-                                               return -1;
-                                       }
-                                       LISTADD(info->manifest_info->uiapplication, uiapp);
-                                       for(j = 0; j < ncols; j++)
-                                       {
-                                               if ((strcmp(colname[j], "app_id") == 0) ||
-                                                       (strcmp(colname[j], "package_app_info.app_id") == 0)) {
-                                                       if (coltxt[j])
-                                                               info->manifest_info->uiapplication->appid = strdup(coltxt[j]);
-                                               } else if (strcmp(colname[j], "package") == 0) {
-                                                       if (coltxt[j])
-                                                               info->manifest_info->uiapplication->package = strdup(coltxt[j]);
-                                               } else
-                                                       continue;
-                                       }
-                               } else {
-                                       svcapp = calloc(1, sizeof(serviceapplication_x));
-                                       if (svcapp == NULL) {
-                                               _LOGE("Out of Memory!!!\n");
-                                               return -1;
-                                       }
-                                       LISTADD(info->manifest_info->serviceapplication, svcapp);
-                                       for(j = 0; j < ncols; j++)
-                                       {
-                                               if ((strcmp(colname[j], "app_id") == 0) ||
-                                                       (strcmp(colname[j], "package_app_info.app_id") == 0)) {
-                                                       if (coltxt[j])
-                                                               info->manifest_info->serviceapplication->appid = strdup(coltxt[j]);
-                                               } else if (strcmp(colname[j], "package") == 0) {
-                                                       if (coltxt[j])
-                                                               info->manifest_info->serviceapplication->package = strdup(coltxt[j]);
-                                               } else
-                                                       continue;
-                                       }
-                               }
-                       }
-               } else
-                       continue;
-       }
+       if ((strncmp((char *)info->uiapp_info->appid, SAT_UI_APPID_1, strlen(SAT_UI_APPID_1)) == 0) || (strncmp((char *)info->uiapp_info->appid, SAT_UI_APPID_2, strlen(SAT_UI_APPID_2)) == 0)) {
+               char info_file[MAX_PACKAGE_STR_SIZE] = {'\0', };
 
-       return 0;
-}
+               snprintf(info_file, MAX_PACKAGE_STR_SIZE, "%s/%s", PKG_DATA_PATH, (char *)info->uiapp_info->appid);
+               if (access(info_file, F_OK)==0) {
+                       FILE *fp;
+                       char buf[MAX_PACKAGE_STR_SIZE] = {0};
 
+                       fp = fopen(info_file, "r");
+                       if (fp == NULL){
+                               _LOGE("fopen[%s] fail\n", info_file);
+                               return PMINFO_R_ERROR;
+                       }
 
-static int __uiapp_list_cb(void *data, int ncols, char **coltxt, char **colname)
-{
-       pkgmgr_pkginfo_x *info = (pkgmgr_pkginfo_x *)data;
-       int i = 0;
-       uiapplication_x *uiapp = NULL;
-       icon_x *icon = NULL;
-       label_x *label = NULL;
+                       fgets(buf, MAX_PACKAGE_STR_SIZE, fp);
+                       if (buf[0] == '\0') {
+                               _LOGE("[%s] use db info\n", (char *)info->uiapp_info->appid);
+                               fclose(fp);
+                               return PMINFO_R_ERROR;
+                       }
 
-       uiapp = calloc(1, sizeof(uiapplication_x));
-       LISTADD(info->manifest_info->uiapplication, uiapp);
-       icon = calloc(1, sizeof(icon_x));
-       LISTADD(info->manifest_info->uiapplication->icon, icon);
-       label = calloc(1, sizeof(label_x));
-       LISTADD(info->manifest_info->uiapplication->label, label);
+                       FREE_AND_STRDUP(buf, info->uiapp_info->satui_label);
+                       *label = info->uiapp_info->satui_label;
 
-       for(i = 0; i < ncols; i++)
-       {
-               if (strcmp(colname[i], "app_id") == 0) {
-                       if (coltxt[i])
-                               info->manifest_info->uiapplication->appid = strdup(coltxt[i]);
-                       else
-                               info->manifest_info->uiapplication->appid = NULL;
-               } else if (strcmp(colname[i], "app_exec") == 0) {
-                       if (coltxt[i])
-                               info->manifest_info->uiapplication->exec = strdup(coltxt[i]);
-                       else
-                               info->manifest_info->uiapplication->exec = NULL;
-               } else if (strcmp(colname[i], "app_type") == 0 ){
-                       if (coltxt[i])
-                               info->manifest_info->uiapplication->type = strdup(coltxt[i]);
-                       else
-                               info->manifest_info->uiapplication->type = NULL;
-               } else if (strcmp(colname[i], "app_nodisplay") == 0 ){
-                       if (coltxt[i])
-                               info->manifest_info->uiapplication->nodisplay = strdup(coltxt[i]);
-                       else
-                               info->manifest_info->uiapplication->nodisplay = NULL;
-               } else if (strcmp(colname[i], "app_multiple") == 0 ){
-                       if (coltxt[i])
-                               info->manifest_info->uiapplication->multiple = strdup(coltxt[i]);
-                       else
-                               info->manifest_info->uiapplication->multiple = NULL;
-               } else if (strcmp(colname[i], "app_taskmanage") == 0 ){
-                       if (coltxt[i])
-                               info->manifest_info->uiapplication->taskmanage = strdup(coltxt[i]);
-                       else
-                               info->manifest_info->uiapplication->taskmanage = NULL;
-               } else if (strcmp(colname[i], "app_hwacceleration") == 0 ){
-                       if (coltxt[i])
-                               info->manifest_info->uiapplication->hwacceleration = strdup(coltxt[i]);
-                       else
-                               info->manifest_info->uiapplication->hwacceleration = NULL;
-               } else if (strcmp(colname[i], "app_screenreader") == 0 ){
-                       if (coltxt[i])
-                               info->manifest_info->uiapplication->screenreader = strdup(coltxt[i]);
-                       else
-                               info->manifest_info->uiapplication->screenreader = NULL;
-               } else if (strcmp(colname[i], "app_indicatordisplay") == 0 ){
-                       if (coltxt[i])
-                               info->manifest_info->uiapplication->indicatordisplay = strdup(coltxt[i]);
-                       else
-                               info->manifest_info->uiapplication->indicatordisplay = NULL;
-               } else if (strcmp(colname[i], "app_portraitimg") == 0 ){
-                       if (coltxt[i])
-                               info->manifest_info->uiapplication->portraitimg = strdup(coltxt[i]);
-                       else
-                               info->manifest_info->uiapplication->portraitimg = NULL;
-               } else if (strcmp(colname[i], "app_landscapeimg") == 0 ){
-                       if (coltxt[i])
-                               info->manifest_info->uiapplication->landscapeimg = strdup(coltxt[i]);
-                       else
-                               info->manifest_info->uiapplication->landscapeimg = NULL;
-               } else if (strcmp(colname[i], "app_guestmodevisibility") == 0 ){
-                       if (coltxt[i])
-                               info->manifest_info->uiapplication->guestmode_visibility = strdup(coltxt[i]);
-                       else
-                               info->manifest_info->uiapplication->guestmode_visibility = NULL;
-               } else if (strcmp(colname[i], "package") == 0 ){
-                       if (coltxt[i])
-                               info->manifest_info->uiapplication->package = strdup(coltxt[i]);
-                       else
-                               info->manifest_info->uiapplication->package = NULL;
-               } else if (strcmp(colname[i], "app_icon") == 0) {
-                       if (coltxt[i])
-                               info->manifest_info->uiapplication->icon->text = strdup(coltxt[i]);
-                       else
-                               info->manifest_info->uiapplication->icon->text = NULL;
-               } else if (strcmp(colname[i], "app_enabled") == 0 ) {
-                       if (coltxt[i])
-                               info->manifest_info->uiapplication->enabled= strdup(coltxt[i]);
-                       else
-                               info->manifest_info->uiapplication->enabled = NULL;
-               } else if (strcmp(colname[i], "app_label") == 0 ) {
-                       if (coltxt[i])
-                               info->manifest_info->uiapplication->label->text = strdup(coltxt[i]);
-                       else
-                               info->manifest_info->uiapplication->label->text = NULL;
-               } else if (strcmp(colname[i], "app_recentimage") == 0 ) {
-                       if (coltxt[i])
-                               info->manifest_info->uiapplication->recentimage = strdup(coltxt[i]);
-                       else
-                               info->manifest_info->uiapplication->recentimage = NULL;
-               } else if (strcmp(colname[i], "app_mainapp") == 0 ) {
-                       if (coltxt[i])
-                               info->manifest_info->uiapplication->mainapp = strdup(coltxt[i]);
-                       else
-                               info->manifest_info->uiapplication->mainapp = NULL;
-               } else if (strcmp(colname[i], "app_locale") == 0 ) {
-                       if (coltxt[i]) {
-                               info->manifest_info->uiapplication->icon->lang = strdup(coltxt[i]);
-                               info->manifest_info->uiapplication->label->lang = strdup(coltxt[i]);
-                       }
-                       else {
-                               info->manifest_info->uiapplication->icon->lang = NULL;
-                               info->manifest_info->uiapplication->label->lang = NULL;
-                       }
-               } else if (strcmp(colname[i], "app_permissiontype") == 0 ) {
-                       if (coltxt[i])
-                               info->manifest_info->uiapplication->permission_type = strdup(coltxt[i]);
-                       else
-                               info->manifest_info->uiapplication->permission_type = NULL;
-               } else if (strcmp(colname[i], "component_type") == 0 ) {
-                       if (coltxt[i])
-                               info->manifest_info->uiapplication->component_type = strdup(coltxt[i]);
-                       else
-                               info->manifest_info->uiapplication->component_type = NULL;
-               } else if (strcmp(colname[i], "app_preload") == 0 ) {
-                       if (coltxt[i])
-                               info->manifest_info->uiapplication->preload = strdup(coltxt[i]);
-                       else
-                               info->manifest_info->uiapplication->preload = NULL;
-               } else if (strcmp(colname[i], "app_submode") == 0 ) {
-                       if (coltxt[i])
-                               info->manifest_info->uiapplication->submode = strdup(coltxt[i]);
-                       else
-                               info->manifest_info->uiapplication->submode = NULL;
-               } else if (strcmp(colname[i], "app_submode_mainid") == 0 ) {
-                       if (coltxt[i])
-                               info->manifest_info->uiapplication->submode_mainid = strdup(coltxt[i]);
-                       else
-                               info->manifest_info->uiapplication->submode_mainid = NULL;
-               } else if (strcmp(colname[i], "app_installed_storage") == 0 ) {
-                       if (coltxt[i])
-                               info->manifest_info->uiapplication->installed_storage = strdup(coltxt[i]);
-                       else
-                               info->manifest_info->uiapplication->installed_storage = NULL;
-               } else if (strcmp(colname[i], "app_process_pool") == 0 ) {
-                       if (coltxt[i])
-                               info->manifest_info->uiapplication->process_pool = strdup(coltxt[i]);
-                       else
-                               info->manifest_info->uiapplication->process_pool = NULL;
-               } else if (strcmp(colname[i], "app_onboot") == 0 ) {
-                       if (coltxt[i])
-                               info->manifest_info->uiapplication->onboot = strdup(coltxt[i]);
-                       else
-                               info->manifest_info->uiapplication->onboot = NULL;
-               } else if (strcmp(colname[i], "app_autorestart") == 0 ) {
-                       if (coltxt[i])
-                               info->manifest_info->uiapplication->autorestart = strdup(coltxt[i]);
-                       else
-                               info->manifest_info->uiapplication->autorestart = NULL;
-               } else
-                       continue;
+                       fclose(fp);
+                       return PMINFO_R_OK;
+               }
        }
-       return 0;
+       return PMINFO_R_ERROR;
 }
 
-static int __svcapp_list_cb(void *data, int ncols, char **coltxt, char **colname)
-{
-       pkgmgr_pkginfo_x *info = (pkgmgr_pkginfo_x *)data;
-       int i = 0;
-       serviceapplication_x *svcapp = NULL;
-       icon_x *icon = NULL;
-       label_x *label = NULL;
-
-       svcapp = calloc(1, sizeof(serviceapplication_x));
-       LISTADD(info->manifest_info->serviceapplication, svcapp);
-       icon = calloc(1, sizeof(icon_x));
-       LISTADD(info->manifest_info->serviceapplication->icon, icon);
-       label = calloc(1, sizeof(label_x));
-       LISTADD(info->manifest_info->serviceapplication->label, label);
-       for(i = 0; i < ncols; i++)
-       {
-               if (strcmp(colname[i], "app_id") == 0) {
-                       if (coltxt[i])
-                               info->manifest_info->serviceapplication->appid = strdup(coltxt[i]);
-                       else
-                               info->manifest_info->serviceapplication->appid = NULL;
-               } else if (strcmp(colname[i], "app_exec") == 0) {
-                       if (coltxt[i])
-                               info->manifest_info->serviceapplication->exec = strdup(coltxt[i]);
-                       else
-                               info->manifest_info->serviceapplication->exec = NULL;
-               } else if (strcmp(colname[i], "app_type") == 0 ){
-                       if (coltxt[i])
-                               info->manifest_info->serviceapplication->type = strdup(coltxt[i]);
-                       else
-                               info->manifest_info->serviceapplication->type = NULL;
-               } else if (strcmp(colname[i], "app_onboot") == 0 ){
-                       if (coltxt[i])
-                               info->manifest_info->serviceapplication->onboot = strdup(coltxt[i]);
-                       else
-                               info->manifest_info->serviceapplication->onboot = NULL;
-               } else if (strcmp(colname[i], "app_autorestart") == 0 ){
-                       if (coltxt[i])
-                               info->manifest_info->serviceapplication->autorestart = strdup(coltxt[i]);
-                       else
-                               info->manifest_info->serviceapplication->autorestart = NULL;
-               } else if (strcmp(colname[i], "package") == 0 ){
-                       if (coltxt[i])
-                               info->manifest_info->serviceapplication->package = strdup(coltxt[i]);
-                       else
-                               info->manifest_info->serviceapplication->package = NULL;
-               } else if (strcmp(colname[i], "app_icon") == 0) {
-                       if (coltxt[i])
-                               info->manifest_info->serviceapplication->icon->text = strdup(coltxt[i]);
-                       else
-                               info->manifest_info->serviceapplication->icon->text = NULL;
-               } else if (strcmp(colname[i], "app_label") == 0 ) {
-                       if (coltxt[i])
-                               info->manifest_info->serviceapplication->label->text = strdup(coltxt[i]);
-                       else
-                               info->manifest_info->serviceapplication->label->text = NULL;
-               } else if (strcmp(colname[i], "app_locale") == 0 ) {
-                       if (coltxt[i]) {
-                               info->manifest_info->serviceapplication->icon->lang = strdup(coltxt[i]);
-                               info->manifest_info->serviceapplication->label->lang = strdup(coltxt[i]);
-                       }
-                       else {
-                               info->manifest_info->serviceapplication->icon->lang = NULL;
-                               info->manifest_info->serviceapplication->label->lang = NULL;
-                       }
-               } else if (strcmp(colname[i], "app_permissiontype") == 0 ) {
-                       if (coltxt[i])
-                               info->manifest_info->serviceapplication->permission_type = strdup(coltxt[i]);
-                       else
-                               info->manifest_info->serviceapplication->permission_type = NULL;
-               } else
-                       continue;
-       }
-       return 0;
-}
-
-static int __allapp_list_cb(void *data, int ncols, char **coltxt, char **colname)
-{
-       pkgmgr_pkginfo_x *info = (pkgmgr_pkginfo_x *)data;
-       int i = 0;
-       int j = 0;
-       uiapplication_x *uiapp = NULL;
-       serviceapplication_x *svcapp = NULL;
-       for(j = 0; j < ncols; j++)
-       {
-               if (strcmp(colname[j], "app_component") == 0) {
-                       if (coltxt[j]) {
-                               if (strcmp(coltxt[j], "uiapp") == 0) {
-                                       uiapp = calloc(1, sizeof(uiapplication_x));
-                                       if (uiapp == NULL) {
-                                               _LOGE("Out of Memory!!!\n");
-                                               return -1;
-                                       }
-                                       LISTADD(info->manifest_info->uiapplication, uiapp);
-                                       for(i = 0; i < ncols; i++)
-                                       {
-                                               if (strcmp(colname[i], "app_id") == 0) {
-                                                       if (coltxt[i])
-                                                               info->manifest_info->uiapplication->appid = strdup(coltxt[i]);
-                                                       else
-                                                               info->manifest_info->uiapplication->appid = NULL;
-                                               } else if (strcmp(colname[i], "app_exec") == 0) {
-                                                       if (coltxt[i])
-                                                               info->manifest_info->uiapplication->exec = strdup(coltxt[i]);
-                                                       else
-                                                               info->manifest_info->uiapplication->exec = NULL;
-                                               } else if (strcmp(colname[i], "app_type") == 0 ){
-                                                       if (coltxt[i])
-                                                               info->manifest_info->uiapplication->type = strdup(coltxt[i]);
-                                                       else
-                                                               info->manifest_info->uiapplication->type = NULL;
-                                               } else if (strcmp(colname[i], "app_nodisplay") == 0 ){
-                                                       if (coltxt[i])
-                                                               info->manifest_info->uiapplication->nodisplay = strdup(coltxt[i]);
-                                                       else
-                                                               info->manifest_info->uiapplication->nodisplay = NULL;
-                                               } else if (strcmp(colname[i], "app_multiple") == 0 ){
-                                                       if (coltxt[i])
-                                                               info->manifest_info->uiapplication->multiple = strdup(coltxt[i]);
-                                                       else
-                                                               info->manifest_info->uiapplication->multiple = NULL;
-                                               } else if (strcmp(colname[i], "app_taskmanage") == 0 ){
-                                                       if (coltxt[i])
-                                                               info->manifest_info->uiapplication->taskmanage = strdup(coltxt[i]);
-                                                       else
-                                                               info->manifest_info->uiapplication->taskmanage = NULL;
-                                               } else if (strcmp(colname[i], "app_hwacceleration") == 0 ){
-                                                       if (coltxt[i])
-                                                               info->manifest_info->uiapplication->hwacceleration = strdup(coltxt[i]);
-                                                       else
-                                                               info->manifest_info->uiapplication->hwacceleration = NULL;
-                                               } else if (strcmp(colname[i], "app_screenreader") == 0 ){
-                                                       if (coltxt[i])
-                                                               info->manifest_info->uiapplication->screenreader = strdup(coltxt[i]);
-                                                       else
-                                                               info->manifest_info->uiapplication->screenreader = NULL;
-                                               } else if (strcmp(colname[i], "app_indicatordisplay") == 0 ){
-                                                       if (coltxt[i])
-                                                               info->manifest_info->uiapplication->indicatordisplay = strdup(coltxt[i]);
-                                                       else
-                                                               info->manifest_info->uiapplication->indicatordisplay = NULL;
-                                               } else if (strcmp(colname[i], "app_portraitimg") == 0 ){
-                                                       if (coltxt[i])
-                                                               info->manifest_info->uiapplication->portraitimg = strdup(coltxt[i]);
-                                                       else
-                                                               info->manifest_info->uiapplication->portraitimg = NULL;
-                                               } else if (strcmp(colname[i], "app_landscapeimg") == 0 ){
-                                                       if (coltxt[i])
-                                                               info->manifest_info->uiapplication->landscapeimg = strdup(coltxt[i]);
-                                                       else
-                                                               info->manifest_info->uiapplication->landscapeimg = NULL;
-                                               } else if (strcmp(colname[i], "app_guestmodevisibility") == 0 ){
-                                                       if (coltxt[i])
-                                                               info->manifest_info->uiapplication->guestmode_visibility = strdup(coltxt[i]);
-                                                       else
-                                                               info->manifest_info->uiapplication->guestmode_visibility = NULL;
-                                               } else if (strcmp(colname[i], "package") == 0 ){
-                                                       if (coltxt[i])
-                                                               info->manifest_info->uiapplication->package = strdup(coltxt[i]);
-                                                       else
-                                                               info->manifest_info->uiapplication->package = NULL;
-                                               } else if (strcmp(colname[i], "app_icon") == 0) {
-                                                       if (coltxt[i])
-                                                               info->manifest_info->uiapplication->icon->text = strdup(coltxt[i]);
-                                                       else
-                                                               info->manifest_info->uiapplication->icon->text = NULL;
-                                               } else if (strcmp(colname[i], "app_label") == 0 ) {
-                                                       if (coltxt[i])
-                                                               info->manifest_info->uiapplication->label->text = strdup(coltxt[i]);
-                                                       else
-                                                               info->manifest_info->uiapplication->label->text = NULL;
-                                               } else if (strcmp(colname[i], "app_recentimage") == 0 ) {
-                                                       if (coltxt[i])
-                                                               info->manifest_info->uiapplication->recentimage = strdup(coltxt[i]);
-                                                       else
-                                                               info->manifest_info->uiapplication->recentimage = NULL;
-                                               } else if (strcmp(colname[i], "app_mainapp") == 0 ) {
-                                                       if (coltxt[i])
-                                                               info->manifest_info->uiapplication->mainapp= strdup(coltxt[i]);
-                                                       else
-                                                               info->manifest_info->uiapplication->mainapp = NULL;
-                                               } else if (strcmp(colname[i], "app_locale") == 0 ) {
-                                                       if (coltxt[i]) {
-                                                               info->manifest_info->uiapplication->icon->lang = strdup(coltxt[i]);
-                                                               info->manifest_info->uiapplication->label->lang = strdup(coltxt[i]);
-                                                       }
-                                                       else {
-                                                               info->manifest_info->uiapplication->icon->lang = NULL;
-                                                               info->manifest_info->uiapplication->label->lang = NULL;
-                                                       }
-                                               } else if (strcmp(colname[i], "app_permissiontype") == 0 ) {
-                                                       if (coltxt[i])
-                                                               info->manifest_info->uiapplication->permission_type = strdup(coltxt[i]);
-                                                       else
-                                                               info->manifest_info->uiapplication->permission_type = NULL;
-                                               } else
-                                                       continue;
-                                       }
-                               } else {
-                                       svcapp = calloc(1, sizeof(serviceapplication_x));
-                                       if (svcapp == NULL) {
-                                               _LOGE("Out of Memory!!!\n");
-                                               return -1;
-                                       }
-                                       LISTADD(info->manifest_info->serviceapplication, svcapp);
-                                       for(i = 0; i < ncols; i++)
-                                       {
-                                               if (strcmp(colname[i], "app_id") == 0) {
-                                                       if (coltxt[i])
-                                                               info->manifest_info->serviceapplication->appid = strdup(coltxt[i]);
-                                                       else
-                                                               info->manifest_info->serviceapplication->appid = NULL;
-                                               } else if (strcmp(colname[i], "app_exec") == 0) {
-                                                       if (coltxt[i])
-                                                               info->manifest_info->serviceapplication->exec = strdup(coltxt[i]);
-                                                       else
-                                                               info->manifest_info->serviceapplication->exec = NULL;
-                                               } else if (strcmp(colname[i], "app_type") == 0 ){
-                                                       if (coltxt[i])
-                                                               info->manifest_info->serviceapplication->type = strdup(coltxt[i]);
-                                                       else
-                                                               info->manifest_info->serviceapplication->type = NULL;
-                                               } else if (strcmp(colname[i], "app_onboot") == 0 ){
-                                                       if (coltxt[i])
-                                                               info->manifest_info->serviceapplication->onboot = strdup(coltxt[i]);
-                                                       else
-                                                               info->manifest_info->serviceapplication->onboot = NULL;
-                                               } else if (strcmp(colname[i], "app_autorestart") == 0 ){
-                                                       if (coltxt[i])
-                                                               info->manifest_info->serviceapplication->autorestart = strdup(coltxt[i]);
-                                                       else
-                                                               info->manifest_info->serviceapplication->autorestart = NULL;
-                                               } else if (strcmp(colname[i], "package") == 0 ){
-                                                       if (coltxt[i])
-                                                               info->manifest_info->serviceapplication->package = strdup(coltxt[i]);
-                                                       else
-                                                               info->manifest_info->serviceapplication->package = NULL;
-                                               } else if (strcmp(colname[i], "app_icon") == 0) {
-                                                       if (coltxt[i])
-                                                               info->manifest_info->serviceapplication->icon->text = strdup(coltxt[i]);
-                                                       else
-                                                               info->manifest_info->serviceapplication->icon->text = NULL;
-                                               } else if (strcmp(colname[i], "app_label") == 0 ) {
-                                                       if (coltxt[i])
-                                                               info->manifest_info->serviceapplication->label->text = strdup(coltxt[i]);
-                                                       else
-                                                               info->manifest_info->serviceapplication->label->text = NULL;
-                                               } else if (strcmp(colname[i], "app_locale") == 0 ) {
-                                                       if (coltxt[i]) {
-                                                               info->manifest_info->serviceapplication->icon->lang = strdup(coltxt[i]);
-                                                               info->manifest_info->serviceapplication->label->lang = strdup(coltxt[i]);
-                                                       }
-                                                       else {
-                                                               info->manifest_info->serviceapplication->icon->lang = NULL;
-                                                               info->manifest_info->serviceapplication->label->lang = NULL;
-                                                       }
-                                               } else if (strcmp(colname[i], "app_permissiontype") == 0 ) {
-                                                       if (coltxt[i])
-                                                               info->manifest_info->serviceapplication->permission_type = strdup(coltxt[i]);
-                                                       else
-                                                               info->manifest_info->serviceapplication->permission_type = NULL;
-                                               } else
-                                                       continue;
-                                       }
-                               }
-                       }
-               } else
-                       continue;
-       }
-
-       return 0;
-}
-
-API int pkgmgrinfo_appinfo_get_list(pkgmgrinfo_pkginfo_h handle, pkgmgrinfo_app_component component,
-                                               pkgmgrinfo_app_list_cb app_func, void *user_data)
+API int pkgmgrinfo_appinfo_get_list(pkgmgrinfo_pkginfo_h handle, pkgmgrinfo_app_component component,
+                                               pkgmgrinfo_app_list_cb app_func, void *user_data)
 {
        retvm_if(handle == NULL, PMINFO_R_EINVAL, "pkginfo handle is NULL");
        retvm_if(app_func == NULL, PMINFO_R_EINVAL, "callback pointer is NULL");
        retvm_if((component != PMINFO_UI_APP) && (component != PMINFO_SVC_APP) && (component != PMINFO_ALL_APP), PMINFO_R_EINVAL, "Invalid App Component Type");
+       retvm_if(component == PMINFO_SVC_APP, PMINFO_R_OK, "PMINFO_SVC_APP is done" );
 
        char *locale = NULL;
        int ret = -1;
@@ -1283,307 +710,90 @@ API int pkgmgrinfo_appinfo_get_list(pkgmgrinfo_pkginfo_h handle, pkgmgrinfo_app_
        appinfo = (pkgmgr_appinfo_x *)calloc(1, sizeof(pkgmgr_appinfo_x));
        tryvm_if(appinfo == NULL, ret = PMINFO_R_ERROR, "Failed to allocate memory for appinfo");
 
-       /*set component type*/
-       if (component == PMINFO_UI_APP)
-               appinfo->app_component = PMINFO_UI_APP;
-       if (component == PMINFO_SVC_APP)
-               appinfo->app_component = PMINFO_SVC_APP;
-       if (component == PMINFO_ALL_APP)
-               appinfo->app_component = PMINFO_ALL_APP;
-
        /*open db */
        ret = db_util_open(MANIFEST_DB, &appinfo_db, 0);
        tryvm_if(ret != SQLITE_OK, ret = PMINFO_R_ERROR, "connect db [%s] failed!", MANIFEST_DB);
 
-       appinfo->package = strdup(info->manifest_info->package);
        snprintf(query, MAX_QUERY_LEN, "select DISTINCT * " \
                        "from package_app_info where " \
-                       "package='%s' and app_component='%s'",
-                       info->manifest_info->package,
-                       (appinfo->app_component==PMINFO_UI_APP ? "uiapp" : "svcapp"));
-
-       switch(component) {
-       case PMINFO_UI_APP:
-               /*Populate ui app info */
-               ret = __exec_db_query(appinfo_db, query, __uiapp_list_cb, (void *)info);
-               tryvm_if(ret == -1, ret = PMINFO_R_ERROR, "App Info list retrieval failed");
-
-               uiapplication_x *tmp = NULL;
-               if (info->manifest_info->uiapplication) {
-                       LISTHEAD(info->manifest_info->uiapplication, tmp);
-                       info->manifest_info->uiapplication = tmp;
-               }
-               /*Populate localized info for default locales and call callback*/
-               /*If the callback func return < 0 we break and no more call back is called*/
-               while(tmp != NULL)
-               {
-                       appinfo->locale = strdup(locale);
-                       appinfo->uiapp_info = tmp;
-                       if (strcmp(appinfo->uiapp_info->type,"c++app") == 0){
-                               if (locale) {
-                                       free(locale);
-                               }
-                               locale = __get_app_locale_by_fallback(appinfo_db, appinfo->uiapp_info->appid);
-                       }
+                       "package='%s' and app_component='%s' and app_disable='false'",
+                       info->manifest_info->package,"uiapp");
 
-                       memset(query, '\0', MAX_QUERY_LEN);
-                       snprintf(query, MAX_QUERY_LEN, "select * from package_app_localized_info where app_id='%s' and app_locale='%s'", appinfo->uiapp_info->appid, locale);
-                       ret = __exec_db_query(appinfo_db, query, __appinfo_cb, (void *)appinfo);
-                       tryvm_if(ret == -1, ret = PMINFO_R_ERROR, "App Localized Info DB Information retrieval failed");
-
-                       memset(query, '\0', MAX_QUERY_LEN);
-                       snprintf(query, MAX_QUERY_LEN, "select * from package_app_localized_info where app_id='%s' and app_locale='%s'", appinfo->uiapp_info->appid, DEFAULT_LOCALE);
-                       ret = __exec_db_query(appinfo_db, query, __appinfo_cb, (void *)appinfo);
-                       tryvm_if(ret == -1, ret = PMINFO_R_ERROR, "App Localized Info DB Information retrieval failed");
-
-                       /*store setting notification icon section*/
-                       memset(query, '\0', MAX_QUERY_LEN);
-                       snprintf(query, MAX_QUERY_LEN, "select * from package_app_icon_section_info where app_id='%s'", appinfo->uiapp_info->appid);
-                       ret = __exec_db_query(appinfo_db, query, __appinfo_cb, (void *)appinfo);
-                       tryvm_if(ret == -1, ret = PMINFO_R_ERROR, "App icon section Info DB Information retrieval failed");
-                       
-                       /*store app preview image info*/
-                       memset(query, '\0', MAX_QUERY_LEN);
-                       snprintf(query, MAX_QUERY_LEN, "select app_image_section, app_image from package_app_image_info where app_id='%s'", appinfo->uiapp_info->appid);
-                       ret = __exec_db_query(appinfo_db, query, __appinfo_cb, (void *)appinfo);
-                       tryvm_if(ret == -1, ret = PMINFO_R_ERROR, "App image Info DB Information retrieval failed");
-
-                       /*Populate app category*/
-                       memset(query, '\0', MAX_QUERY_LEN);
-                       snprintf(query, MAX_QUERY_LEN, "select * from package_app_app_category where app_id=='%s'%", appinfo->uiapp_info->appid);
-                       ret = __exec_db_query(appinfo_db, query, __appinfo_cb, (void *)appinfo);
-                       tryvm_if(ret == -1, ret = PMINFO_R_ERROR, "App Category Info DB Information retrieval failed");
-
-                       /*Populate app metadata*/
-                       memset(query, '\0', MAX_QUERY_LEN);
-                       snprintf(query, MAX_QUERY_LEN, "select * from package_app_app_metadata where app_id='%s'", appinfo->uiapp_info->appid);
-                       ret = __exec_db_query(appinfo_db, query, __appinfo_cb, (void *)appinfo);
-                       tryvm_if(ret == -1, ret = PMINFO_R_ERROR, "App Metadata Info DB Information retrieval failed");
-
-                       if (appinfo->uiapp_info->label) {
-                               LISTHEAD(appinfo->uiapp_info->label, ptr2);
-                               appinfo->uiapp_info->label = ptr2;
-                       }
-                       if (appinfo->uiapp_info->icon) {
-                               LISTHEAD(appinfo->uiapp_info->icon, ptr1);
-                               appinfo->uiapp_info->icon = ptr1;
-                       }
-                       if (appinfo->uiapp_info->category) {
-                               LISTHEAD(appinfo->uiapp_info->category, ptr3);
-                               appinfo->uiapp_info->category = ptr3;
-                       }
-                       if (appinfo->uiapp_info->metadata) {
-                               LISTHEAD(appinfo->uiapp_info->metadata, ptr4);
-                               appinfo->uiapp_info->metadata = ptr4;
-                       }
-                       if (appinfo->uiapp_info->permission) {
-                               LISTHEAD(appinfo->uiapp_info->permission, ptr5);
-                               appinfo->uiapp_info->permission = ptr5;
-                       }
-                       if (appinfo->uiapp_info->image) {
-                               LISTHEAD(appinfo->uiapp_info->image, ptr6);
-                               appinfo->uiapp_info->image = ptr6;
-                       }
-                       ret = app_func((void *)appinfo, user_data);
-                       if (ret < 0)
-                               break;
-                       tmp = tmp->next;
-               }
-               break;
-       case PMINFO_SVC_APP:
-               /*Populate svc app info */
-               ret = __exec_db_query(appinfo_db, query, __svcapp_list_cb, (void *)info);
-               tryvm_if(ret == -1, ret = PMINFO_R_ERROR, "App Info list retrieval failed");
-
-               serviceapplication_x *tmp1 = NULL;
-               if (info->manifest_info->serviceapplication) {
-                       LISTHEAD(info->manifest_info->serviceapplication, tmp1);
-                       info->manifest_info->serviceapplication = tmp1;
-               }
-               /*Populate localized info for default locales and call callback*/
-               /*If the callback func return < 0 we break and no more call back is called*/
-               while(tmp1 != NULL)
-               {
-                       appinfo->locale = strdup(locale);
-                       appinfo->svcapp_info = tmp1;
-                       memset(query, '\0', MAX_QUERY_LEN);
-                       snprintf(query, MAX_QUERY_LEN, "select * from package_app_localized_info where app_id='%s' and app_locale='%s'", appinfo->svcapp_info->appid, locale);
-                       ret = __exec_db_query(appinfo_db, query, __appinfo_cb, (void *)appinfo);
-                       tryvm_if(ret == -1, ret = PMINFO_R_ERROR, "App Localized Info DB Information retrieval failed");
-
-                       memset(query, '\0', MAX_QUERY_LEN);
-                       snprintf(query, MAX_QUERY_LEN, "select * from package_app_localized_info where app_id='%s' and app_locale='%s'", appinfo->svcapp_info->appid, DEFAULT_LOCALE);
-                       ret = __exec_db_query(appinfo_db, query, __appinfo_cb, (void *)appinfo);
-                       tryvm_if(ret == -1, ret = PMINFO_R_ERROR, "App Localized Info DB Information retrieval failed");
-
-                       if (appinfo->svcapp_info->label) {
-                               LISTHEAD(appinfo->svcapp_info->label, ptr2);
-                               appinfo->svcapp_info->label = ptr2;
-                       }
-                       if (appinfo->svcapp_info->icon) {
-                               LISTHEAD(appinfo->svcapp_info->icon, ptr1);
-                               appinfo->svcapp_info->icon = ptr1;
-                       }
-                       if (appinfo->svcapp_info->category) {
-                               LISTHEAD(appinfo->svcapp_info->category, ptr3);
-                               appinfo->svcapp_info->category = ptr3;
-                       }
-                       if (appinfo->svcapp_info->metadata) {
-                               LISTHEAD(appinfo->svcapp_info->metadata, ptr4);
-                               appinfo->svcapp_info->metadata = ptr4;
-                       }
-                       if (appinfo->svcapp_info->permission) {
-                               LISTHEAD(appinfo->svcapp_info->permission, ptr5);
-                               appinfo->svcapp_info->permission = ptr5;
-                       }
-                       ret = app_func((void *)appinfo, user_data);
-                       if (ret < 0)
-                               break;
-                       tmp1 = tmp1->next;
+       /*Populate ui app info */
+       ret = __exec_db_query(appinfo_db, query, __uiapp_list_cb, (void *)info);
+       tryvm_if(ret == -1, ret = PMINFO_R_ERROR, "App Info list retrieval failed");
+
+       uiapplication_x *tmp = NULL;
+       SAFE_LISTHEAD(info->manifest_info->uiapplication, tmp);
+
+       /*Populate localized info for default locales and call callback*/
+       /*If the callback func return < 0 we break and no more call back is called*/
+       while(tmp != NULL)
+       {
+               appinfo->locale = strdup(locale);
+               appinfo->uiapp_info = tmp;
+               if (strcmp(appinfo->uiapp_info->type,"c++app") == 0){
+                       FREE_AND_NULL(locale);
+                       locale = __get_app_locale_by_fallback(appinfo_db, appinfo->uiapp_info->appid);
                }
-               break;
-       case PMINFO_ALL_APP:
+
                memset(query, '\0', MAX_QUERY_LEN);
-               snprintf(query, MAX_QUERY_LEN, "select * from package_app_info where package='%s'", info->manifest_info->package);
-
-               /*Populate all app info */
-               ret = __exec_db_query(appinfo_db, query, __allapp_list_cb, (void *)allinfo);
-               tryvm_if(ret == -1, ret = PMINFO_R_ERROR, "App Info list retrieval failed");
-
-               /*UI Apps*/
-               appinfo->app_component = PMINFO_UI_APP;
-               uiapplication_x *tmp2 = NULL;
-               if (allinfo->manifest_info->uiapplication) {
-                       LISTHEAD(allinfo->manifest_info->uiapplication, tmp2);
-                       allinfo->manifest_info->uiapplication = tmp2;
-               }
-               /*Populate localized info for default locales and call callback*/
-               /*If the callback func return < 0 we break and no more call back is called*/
-               while(tmp2 != NULL)
-               {
-                       appinfo->locale = strdup(locale);
-                       appinfo->uiapp_info = tmp2;
-                       memset(query, '\0', MAX_QUERY_LEN);
-                       snprintf(query, MAX_QUERY_LEN, "select * from package_app_localized_info where app_id='%s' and app_locale='%s'", appinfo->uiapp_info->appid, locale);
-                       ret = __exec_db_query(appinfo_db, query, __appinfo_cb, (void *)appinfo);
-                       tryvm_if(ret == -1, ret = PMINFO_R_ERROR, "App Localized Info DB Information retrieval failed");
-
-                       memset(query, '\0', MAX_QUERY_LEN);
-                       snprintf(query, MAX_QUERY_LEN, "select * from package_app_localized_info where app_id='%s' and app_locale='%s'", appinfo->uiapp_info->appid, DEFAULT_LOCALE);
-                       ret = __exec_db_query(appinfo_db, query, __appinfo_cb, (void *)appinfo);
-                       tryvm_if(ret == -1, ret = PMINFO_R_ERROR, "App Localized Info DB Information retrieval failed");
-
-                       /*store setting notification icon section*/
-                       memset(query, '\0', MAX_QUERY_LEN);
-                       snprintf(query, MAX_QUERY_LEN, "select * from package_app_icon_section_info where app_id='%s'", appinfo->uiapp_info->appid);
-                       ret = __exec_db_query(appinfo_db, query, __appinfo_cb, (void *)appinfo);
-                       tryvm_if(ret == -1, ret = PMINFO_R_ERROR, "App icon section Info DB Information retrieval failed");
-                       
-                       /*store app preview image info*/
-                       memset(query, '\0', MAX_QUERY_LEN);
-                       snprintf(query, MAX_QUERY_LEN, "select app_image_section, app_image from package_app_image_info where app_id='%s'", appinfo->uiapp_info->appid);
-                       ret = __exec_db_query(appinfo_db, query, __appinfo_cb, (void *)appinfo);
-                       tryvm_if(ret == -1, ret = PMINFO_R_ERROR, "App image Info DB Information retrieval failed");
-
-                       if (appinfo->uiapp_info->label) {
-                               LISTHEAD(appinfo->uiapp_info->label, ptr2);
-                               appinfo->uiapp_info->label = ptr2;
-                       }
-                       if (appinfo->uiapp_info->icon) {
-                               LISTHEAD(appinfo->uiapp_info->icon, ptr1);
-                               appinfo->uiapp_info->icon = ptr1;
-                       }
-                       if (appinfo->uiapp_info->category) {
-                               LISTHEAD(appinfo->uiapp_info->category, ptr3);
-                               appinfo->uiapp_info->category = ptr3;
-                       }
-                       if (appinfo->uiapp_info->metadata) {
-                               LISTHEAD(appinfo->uiapp_info->metadata, ptr4);
-                               appinfo->uiapp_info->metadata = ptr4;
-                       }
-                       if (appinfo->uiapp_info->permission) {
-                               LISTHEAD(appinfo->uiapp_info->permission, ptr5);
-                               appinfo->uiapp_info->permission = ptr5;
-                       }
-                       if (appinfo->uiapp_info->image) {
-                               LISTHEAD(appinfo->uiapp_info->image, ptr6);
-                               appinfo->uiapp_info->image = ptr6;
-                       }
-                       ret = app_func((void *)appinfo, user_data);
-                       if (ret < 0)
-                               break;
-                       tmp2 = tmp2->next;
-               }
+               snprintf(query, MAX_QUERY_LEN, "select * from package_app_localized_info where app_id='%s' and app_locale='%s'", appinfo->uiapp_info->appid, locale);
+               ret = __exec_db_query(appinfo_db, query, __appinfo_cb, (void *)appinfo);
+               tryvm_if(ret == -1, ret = PMINFO_R_ERROR, "App Localized Info DB Information retrieval failed");
 
-               /*SVC Apps*/
-               appinfo->app_component = PMINFO_SVC_APP;
-               serviceapplication_x *tmp3 = NULL;
-               if (allinfo->manifest_info->serviceapplication) {
-                       LISTHEAD(allinfo->manifest_info->serviceapplication, tmp3);
-                       allinfo->manifest_info->serviceapplication = tmp3;
-               }
-               /*Populate localized info for default locales and call callback*/
-               /*If the callback func return < 0 we break and no more call back is called*/
-               while(tmp3 != NULL)
-               {
-                       appinfo->locale = strdup(locale);
-                       appinfo->svcapp_info = tmp3;
-                       memset(query, '\0', MAX_QUERY_LEN);
-                       snprintf(query, MAX_QUERY_LEN, "select * from package_app_localized_info where app_id='%s' and app_locale='%s'", appinfo->svcapp_info->appid, locale);
-                       ret = __exec_db_query(appinfo_db, query, __appinfo_cb, (void *)appinfo);
-                       tryvm_if(ret == -1, ret = PMINFO_R_ERROR, "App Localized Info DB Information retrieval failed");
-
-                       memset(query, '\0', MAX_QUERY_LEN);
-                       snprintf(query, MAX_QUERY_LEN, "select * from package_app_localized_info where app_id='%s' and app_locale='%s'", appinfo->svcapp_info->appid, DEFAULT_LOCALE);
-                       ret = __exec_db_query(appinfo_db, query, __appinfo_cb, (void *)appinfo);
-                       tryvm_if(ret == -1, ret = PMINFO_R_ERROR, "App Localized Info DB Information retrieval failed");
-
-                       if (appinfo->svcapp_info->label) {
-                               LISTHEAD(appinfo->svcapp_info->label, ptr2);
-                               appinfo->svcapp_info->label = ptr2;
-                       }
-                       if (appinfo->svcapp_info->icon) {
-                               LISTHEAD(appinfo->svcapp_info->icon, ptr1);
-                               appinfo->svcapp_info->icon = ptr1;
-                       }
-                       if (appinfo->svcapp_info->category) {
-                               LISTHEAD(appinfo->svcapp_info->category, ptr3);
-                               appinfo->svcapp_info->category = ptr3;
-                       }
-                       if (appinfo->svcapp_info->metadata) {
-                               LISTHEAD(appinfo->svcapp_info->metadata, ptr4);
-                               appinfo->svcapp_info->metadata = ptr4;
-                       }
-                       if (appinfo->svcapp_info->permission) {
-                               LISTHEAD(appinfo->svcapp_info->permission, ptr5);
-                               appinfo->svcapp_info->permission = ptr5;
-                       }
-                       ret = app_func((void *)appinfo, user_data);
-                       if (ret < 0)
-                               break;
-                       tmp3 = tmp3->next;
+               memset(query, '\0', MAX_QUERY_LEN);
+               snprintf(query, MAX_QUERY_LEN, "select * from package_app_localized_info where app_id='%s' and app_locale='%s'", appinfo->uiapp_info->appid, DEFAULT_LOCALE);
+               ret = __exec_db_query(appinfo_db, query, __appinfo_cb, (void *)appinfo);
+               tryvm_if(ret == -1, ret = PMINFO_R_ERROR, "App Localized Info DB Information retrieval failed");
+
+               /*store setting notification icon section*/
+               memset(query, '\0', MAX_QUERY_LEN);
+               snprintf(query, MAX_QUERY_LEN, "select * from package_app_icon_section_info where app_id='%s'", appinfo->uiapp_info->appid);
+               ret = __exec_db_query(appinfo_db, query, __appinfo_cb, (void *)appinfo);
+               tryvm_if(ret == -1, ret = PMINFO_R_ERROR, "App icon section Info DB Information retrieval failed");
+
+               /*store app preview image info*/
+               memset(query, '\0', MAX_QUERY_LEN);
+               snprintf(query, MAX_QUERY_LEN, "select app_image_section, app_image from package_app_image_info where app_id='%s'", appinfo->uiapp_info->appid);
+               ret = __exec_db_query(appinfo_db, query, __appinfo_cb, (void *)appinfo);
+               tryvm_if(ret == -1, ret = PMINFO_R_ERROR, "App image Info DB Information retrieval failed");
+
+               /*Populate app category*/
+               memset(query, '\0', MAX_QUERY_LEN);
+               snprintf(query, MAX_QUERY_LEN, "select * from package_app_app_category where app_id='%s'", appinfo->uiapp_info->appid);
+               ret = __exec_db_query(appinfo_db, query, __appinfo_cb, (void *)appinfo);
+               tryvm_if(ret == -1, ret = PMINFO_R_ERROR, "App Category Info DB Information retrieval failed");
+
+               /*Populate app metadata*/
+               memset(query, '\0', MAX_QUERY_LEN);
+               snprintf(query, MAX_QUERY_LEN, "select * from package_app_app_metadata where app_id='%s'", appinfo->uiapp_info->appid);
+               ret = __exec_db_query(appinfo_db, query, __appinfo_cb, (void *)appinfo);
+               tryvm_if(ret == -1, ret = PMINFO_R_ERROR, "App Metadata Info DB Information retrieval failed");
+
+               SAFE_LISTHEAD(appinfo->uiapp_info->icon, ptr1);
+               SAFE_LISTHEAD(appinfo->uiapp_info->label, ptr2);
+               SAFE_LISTHEAD(appinfo->uiapp_info->category, ptr3);
+               SAFE_LISTHEAD(appinfo->uiapp_info->metadata, ptr4);
+               SAFE_LISTHEAD(appinfo->uiapp_info->permission, ptr5);
+               SAFE_LISTHEAD(appinfo->uiapp_info->image, ptr6);
+
+               ret = app_func((void *)appinfo, user_data);
+               if (ret < 0){
+                       FREE_AND_NULL(appinfo->locale);
+                       break;
                }
-               appinfo->app_component = PMINFO_ALL_APP;
-               break;
 
+               FREE_AND_NULL(appinfo->locale);
+               tmp = tmp->next;
        }
 
        ret = PMINFO_R_OK;
+
 catch:
-       if (locale) {
-               free(locale);
-               locale = NULL;
-       }
-       if (appinfo) {
-               if (appinfo->package) {
-                       free((void *)appinfo->package);
-                       appinfo->package = NULL;
-               }
-               free(appinfo);
-               appinfo = NULL;
-       }
+       FREE_AND_NULL(locale);
+       FREE_AND_NULL(appinfo);
        __cleanup_pkginfo(allinfo);
-
        sqlite3_close(appinfo_db);
        return ret;
 }
@@ -1593,18 +803,18 @@ API int pkgmgrinfo_appinfo_get_install_list(pkgmgrinfo_app_list_cb app_func, voi
        retvm_if(app_func == NULL, PMINFO_R_EINVAL, "callback function is NULL");
 
        int ret = PMINFO_R_OK;
-       char query[MAX_QUERY_LEN] = {'\0'};
+       char *query = NULL;
+       pkgmgr_pkginfo_x *info = NULL;
        pkgmgr_appinfo_x *appinfo = NULL;
        uiapplication_x *ptr1 = NULL;
-       serviceapplication_x *ptr2 = NULL;
        sqlite3 *appinfo_db = NULL;
+       sqlite3_stmt *stmt = NULL;
 
        /*open db*/
        ret = db_util_open(MANIFEST_DB, &appinfo_db, 0);
        retvm_if(ret != SQLITE_OK, ret = PMINFO_R_ERROR, "connect db [%s] failed!", MANIFEST_DB);
 
        /*calloc pkginfo*/
-       pkgmgr_pkginfo_x *info = NULL;
        info = (pkgmgr_pkginfo_x *)calloc(1, sizeof(pkgmgr_pkginfo_x));
        tryvm_if(info == NULL, ret = PMINFO_R_ERROR, "Out of Memory!!!");
 
@@ -1616,262 +826,148 @@ API int pkgmgrinfo_appinfo_get_install_list(pkgmgrinfo_app_list_cb app_func, voi
        appinfo = (pkgmgr_appinfo_x *)calloc(1, sizeof(pkgmgr_appinfo_x));
        tryvm_if(appinfo == NULL, ret = PMINFO_R_ERROR, "Out of Memory!!!");
 
-       snprintf(query, MAX_QUERY_LEN, "select * from package_app_info");
-       ret = __exec_db_query(appinfo_db, query, __mini_appinfo_cb, (void *)info);
-       tryvm_if(ret == -1, ret = PMINFO_R_ERROR, "App Info DB Information retrieval failed");
+       /*Start constructing query*/
+       query = sqlite3_mprintf("select * from package_app_info where app_disable='false'");
 
-       if (info->manifest_info->uiapplication) {
-               LISTHEAD(info->manifest_info->uiapplication, ptr1);
-               info->manifest_info->uiapplication = ptr1;
-       }
-       if (info->manifest_info->serviceapplication) {
-               LISTHEAD(info->manifest_info->serviceapplication, ptr2);
-               info->manifest_info->serviceapplication = ptr2;
+       /*prepare query*/
+       ret = sqlite3_prepare_v2(appinfo_db, query, strlen(query), &stmt, NULL);
+       tryvm_if(ret != PMINFO_R_OK, ret = PMINFO_R_ERROR, "sqlite3_prepare_v2 failed[%s]\n", query);
+
+       /*step query*/
+       while(1) {
+               ret = sqlite3_step(stmt);
+               if(ret == SQLITE_ROW) {
+                       __get_appinfo_for_list(stmt, info);
+               } else {
+                       break;
+               }
        }
 
+       /*head up*/
+       SAFE_LISTHEAD(info->manifest_info->uiapplication, ptr1);
+
        /*UI Apps*/
        for(ptr1 = info->manifest_info->uiapplication; ptr1; ptr1 = ptr1->next)
        {
-               appinfo->app_component = PMINFO_UI_APP;
-               appinfo->package = strdup(ptr1->package);
                appinfo->uiapp_info = ptr1;
 
                ret = app_func((void *)appinfo, user_data);
-               if (ret < 0)
-                       break;
-               free((void *)appinfo->package);
-               appinfo->package = NULL;
-       }
-       /*Service Apps*/
-       for(ptr2 = info->manifest_info->serviceapplication; ptr2; ptr2 = ptr2->next)
-       {
-               appinfo->app_component = PMINFO_SVC_APP;
-               appinfo->package = strdup(ptr2->package);
-               appinfo->svcapp_info = ptr2;
-
-               ret = app_func((void *)appinfo, user_data);
-               if (ret < 0)
+               if (ret < 0) {
                        break;
-               free((void *)appinfo->package);
-               appinfo->package = NULL;
+               }
        }
        ret = PMINFO_R_OK;
 
 catch:
+       sqlite3_free(query);
+       sqlite3_finalize(stmt);
        sqlite3_close(appinfo_db);
-
-       if (appinfo) {
-               free(appinfo);
-               appinfo = NULL;
-       }
+       FREE_AND_NULL(appinfo);
        __cleanup_pkginfo(info);
        return ret;
 }
 
+
 API int pkgmgrinfo_appinfo_get_installed_list(pkgmgrinfo_app_list_cb app_func, void *user_data)
 {
        retvm_if(app_func == NULL, PMINFO_R_EINVAL, "callback function is NULL");
 
        int ret = PMINFO_R_OK;
-       char query[MAX_QUERY_LEN] = {'\0'};
+       char *query = NULL;
        char *locale = NULL;
+       char appid[MAX_QUERY_LEN] = {0,};
+       char pre_appid[MAX_QUERY_LEN] = {0,};
+
+       pkgmgr_pkginfo_x *info = NULL;
        pkgmgr_appinfo_x *appinfo = NULL;
        uiapplication_x *ptr1 = NULL;
-       serviceapplication_x *ptr2 = NULL;
-       label_x *tmp1 = NULL;
-       icon_x *tmp2 = NULL;
-       category_x *tmp3 = NULL;
-       metadata_x *tmp4 = NULL;
-       permission_x *tmp5 = NULL;
-       image_x *tmp6 = NULL;
-       sqlite3 *appinfo_db = NULL;
 
-       /*get system locale*/
-       locale = __convert_system_locale_to_manifest_locale();
-       tryvm_if(locale == NULL, ret = PMINFO_R_ERROR, "manifest locale is NULL");
+       sqlite3 *appinfo_db = NULL;
+       sqlite3_stmt *stmt = NULL;
 
-       /*open db*/
-       ret = db_util_open(MANIFEST_DB, &appinfo_db, 0);
-       retvm_if(ret != SQLITE_OK, ret = PMINFO_R_ERROR, "connect db [%s] failed!", MANIFEST_DB);
 
-       /*calloc pkginfo*/
-       pkgmgr_pkginfo_x *info = NULL;
+       /*calloc manifest_info*/
        info = (pkgmgr_pkginfo_x *)calloc(1, sizeof(pkgmgr_pkginfo_x));
-       tryvm_if(info == NULL, ret = PMINFO_R_ERROR, "Out of Memory!!!");
+       retvm_if(info == NULL, PMINFO_R_ERROR, "Out of Memory!!!");
 
-       /*calloc manifest_info*/
        info->manifest_info = (manifest_x *)calloc(1, sizeof(manifest_x));
        tryvm_if(info->manifest_info == NULL, ret = PMINFO_R_ERROR, "Out of Memory!!!");
 
-       /*calloc appinfo*/
        appinfo = (pkgmgr_appinfo_x *)calloc(1, sizeof(pkgmgr_appinfo_x));
        tryvm_if(appinfo == NULL, ret = PMINFO_R_ERROR, "Out of Memory!!!");
 
-       snprintf(query, MAX_QUERY_LEN, "select * from package_app_info");
-       ret = __exec_db_query(appinfo_db, query, __app_list_cb, (void *)info);
-       tryvm_if(ret == -1, ret = PMINFO_R_ERROR, "App Info DB Information retrieval failed");
+       /*open db*/
+       ret = db_util_open(MANIFEST_DB, &appinfo_db, 0);
+       tryvm_if(ret != SQLITE_OK, ret = PMINFO_R_ERROR, "db_util_open[%s] failed!", MANIFEST_DB);
 
-       if (info->manifest_info->uiapplication) {
-               LISTHEAD(info->manifest_info->uiapplication, ptr1);
-               info->manifest_info->uiapplication = ptr1;
-       }
-       if (info->manifest_info->serviceapplication) {
-               LISTHEAD(info->manifest_info->serviceapplication, ptr2);
-               info->manifest_info->serviceapplication = ptr2;
-       }
+       /*Start constructing query*/
+       locale = __convert_system_locale_to_manifest_locale();
+       query = sqlite3_mprintf("select * from package_app_info LEFT OUTER JOIN package_app_localized_info "\
+                                       "ON package_app_info.app_id=package_app_localized_info.app_id "\
+                                       "where package_app_info.app_disable='false' and package_app_localized_info.app_locale IN (%Q, %Q)", DEFAULT_LOCALE, locale);
 
-       /*UI Apps*/
-       for(ptr1 = info->manifest_info->uiapplication; ptr1; ptr1 = ptr1->next)
-       {
-               appinfo->locale = strdup(locale);
-               appinfo->app_component = PMINFO_UI_APP;
-               appinfo->package = strdup(ptr1->package);
-               appinfo->uiapp_info = ptr1;
-               snprintf(query, MAX_QUERY_LEN, "select DISTINCT * " \
-                               "from package_app_info where " \
-                               "app_id='%s'", ptr1->appid);
-               ret = __exec_db_query(appinfo_db, query, __appinfo_cb, (void *)appinfo);
-               tryvm_if(ret == -1, ret = PMINFO_R_ERROR, "App Info DB Information retrieval failed");
+       /*prepare query*/
+       ret = sqlite3_prepare_v2(appinfo_db, query, strlen(query), &stmt, NULL);
+       tryvm_if(ret != PMINFO_R_OK, ret = PMINFO_R_ERROR, "sqlite3_prepare_v2 failed[%s]\n", query);
 
-               if (strcmp(appinfo->uiapp_info->type,"c++app") == 0){
-                       if (locale) {
-                               free(locale);
-                       }
-                       locale = __get_app_locale_by_fallback(appinfo_db, ptr1->appid);
-               }
+       /*step query*/
+       while(1) {
+               ret = sqlite3_step(stmt);
+               if(ret == SQLITE_ROW) {
 
-               memset(query, '\0', MAX_QUERY_LEN);
-               snprintf(query, MAX_QUERY_LEN, "select DISTINCT * " \
-                               "from package_app_localized_info where " \
-                               "app_id='%s' and app_locale='%s'",
-                               ptr1->appid, locale);
-               ret = __exec_db_query(appinfo_db, query, __appinfo_cb, (void *)appinfo);
-               tryvm_if(ret == -1, ret = PMINFO_R_ERROR, "App Localized Info DB Information retrieval failed");
+                       memset(appid, 0, MAX_QUERY_LEN);
+                       strncpy(appid, (const char *)sqlite3_column_text(stmt, 0), MAX_QUERY_LEN - 1);
 
-               memset(query, '\0', MAX_QUERY_LEN);
-               snprintf(query, MAX_QUERY_LEN, "select DISTINCT * " \
-                               "from package_app_localized_info where " \
-                               "app_id='%s' and app_locale='%s'",
-                               ptr1->appid, DEFAULT_LOCALE);
+                       if (strlen(pre_appid) != 0) {
+                               if (strcmp(pre_appid, appid) == 0) {
+                                       /*if same appid is found, then it is about exact matched locale*/
+                                       __update_localed_label_for_list(stmt, info);
 
-               ret = __exec_db_query(appinfo_db, query, __appinfo_cb, (void *)appinfo);
-               tryvm_if(ret == -1, ret = PMINFO_R_ERROR, "App Localized Info DB Information retrieval failed");
+                                       memset(pre_appid, 0, MAX_QUERY_LEN);
+                                       strncpy(pre_appid, (const char *)sqlite3_column_text(stmt, 0), MAX_QUERY_LEN - 1);
 
-               /*store setting notification icon section*/
-               memset(query, '\0', MAX_QUERY_LEN);
-               snprintf(query, MAX_QUERY_LEN, "select * from package_app_icon_section_info where app_id='%s'", ptr1->appid);
-               ret = __exec_db_query(appinfo_db, query, __appinfo_cb, (void *)appinfo);
-               tryvm_if(ret == -1, ret = PMINFO_R_ERROR, "App icon section Info DB Information retrieval failed");
-               
-               /*store app preview image info*/
-               memset(query, '\0', MAX_QUERY_LEN);
-               snprintf(query, MAX_QUERY_LEN, "select app_image_section, app_image from package_app_image_info where app_id='%s'", ptr1->appid);
-               ret = __exec_db_query(appinfo_db, query, __appinfo_cb, (void *)appinfo);
-               tryvm_if(ret == -1, ret = PMINFO_R_ERROR, "App image Info DB Information retrieval failed");
+                                       continue;
+                               } else {
+                                       memset(pre_appid, 0, MAX_QUERY_LEN);
+                                       strncpy(pre_appid, (const char *)sqlite3_column_text(stmt, 0), MAX_QUERY_LEN - 1);
+                               }
+                       } else {
+                               strncpy(pre_appid, (const char *)sqlite3_column_text(stmt, 0), MAX_QUERY_LEN - 1);
+                       }
 
-               if (appinfo->uiapp_info->label) {
-                       LISTHEAD(appinfo->uiapp_info->label, tmp1);
-                       appinfo->uiapp_info->label = tmp1;
-               }
-               if (appinfo->uiapp_info->icon) {
-                       LISTHEAD(appinfo->uiapp_info->icon, tmp2);
-                       appinfo->uiapp_info->icon= tmp2;
-               }
-               if (appinfo->uiapp_info->category) {
-                       LISTHEAD(appinfo->uiapp_info->category, tmp3);
-                       appinfo->uiapp_info->category = tmp3;
-               }
-               if (appinfo->uiapp_info->metadata) {
-                       LISTHEAD(appinfo->uiapp_info->metadata, tmp4);
-                       appinfo->uiapp_info->metadata = tmp4;
-               }
-               if (appinfo->uiapp_info->permission) {
-                       LISTHEAD(appinfo->uiapp_info->permission, tmp5);
-                       appinfo->uiapp_info->permission = tmp5;
-               }
-               if (appinfo->uiapp_info->image) {
-                       LISTHEAD(appinfo->uiapp_info->image, tmp6);
-                       appinfo->uiapp_info->image = tmp6;
+                       __get_appinfo_for_list(stmt, info);
+               } else {
+                       break;
                }
+       }
 
-               ret = __appinfo_check_installed_storage(appinfo);
-               if(ret < 0)
-                       continue;
+       /*head up*/
+       SAFE_LISTHEAD(info->manifest_info->uiapplication, ptr1);
 
-               ret = app_func((void *)appinfo, user_data);
-               if (ret < 0)
-                       break;
-               free((void *)appinfo->package);
-               appinfo->package = NULL;
-       }
-       /*Service Apps*/
-       for(ptr2 = info->manifest_info->serviceapplication; ptr2; ptr2 = ptr2->next)
+       /*UI Apps*/
+       for(ptr1 = info->manifest_info->uiapplication; ptr1; ptr1 = ptr1->next)
        {
-               appinfo->locale = strdup(locale);
-               appinfo->app_component = PMINFO_SVC_APP;
-               appinfo->package = strdup(ptr2->package);
-               appinfo->svcapp_info = ptr2;
-               memset(query, '\0', MAX_QUERY_LEN);
-               snprintf(query, MAX_QUERY_LEN, "select DISTINCT * " \
-                               "from package_app_info where " \
-                               "app_id='%s'", ptr2->appid);
-               ret = __exec_db_query(appinfo_db, query, __appinfo_cb, (void *)appinfo);
-               tryvm_if(ret == -1, ret = PMINFO_R_ERROR, "App Info DB Information retrieval failed");
-
-               memset(query, '\0', MAX_QUERY_LEN);
-               snprintf(query, MAX_QUERY_LEN, "select DISTINCT * " \
-                               "from package_app_localized_info where " \
-                               "app_id='%s' and app_locale='%s'",
-                               ptr2->appid, locale);
-               ret = __exec_db_query(appinfo_db, query, __appinfo_cb, (void *)appinfo);
-               tryvm_if(ret == -1, ret = PMINFO_R_ERROR, "App Info DB Information retrieval failed");
+               if (appinfo->locale == NULL)
+                       appinfo->locale = strdup(locale);
+               appinfo->uiapp_info = ptr1;
 
-               memset(query, '\0', MAX_QUERY_LEN);
-               snprintf(query, MAX_QUERY_LEN, "select DISTINCT * " \
-                               "from package_app_localized_info where " \
-                               "app_id='%s' and app_locale='%s'",
-                               ptr2->appid, DEFAULT_LOCALE);
-               ret = __exec_db_query(appinfo_db, query, __appinfo_cb, (void *)appinfo);
-               tryvm_if(ret == -1, ret = PMINFO_R_ERROR, "App Info DB Information retrieval failed");
+               ret = __appinfo_check_installed_storage(appinfo);
+               if(ret < 0)
+                       continue;
 
-               if (appinfo->svcapp_info->label) {
-                       LISTHEAD(appinfo->svcapp_info->label, tmp1);
-                       appinfo->svcapp_info->label = tmp1;
-               }
-               if (appinfo->svcapp_info->icon) {
-                       LISTHEAD(appinfo->svcapp_info->icon, tmp2);
-                       appinfo->svcapp_info->icon= tmp2;
-               }
-               if (appinfo->svcapp_info->category) {
-                       LISTHEAD(appinfo->svcapp_info->category, tmp3);
-                       appinfo->svcapp_info->category = tmp3;
-               }
-               if (appinfo->svcapp_info->metadata) {
-                       LISTHEAD(appinfo->svcapp_info->metadata, tmp4);
-                       appinfo->svcapp_info->metadata = tmp4;
-               }
-               if (appinfo->svcapp_info->permission) {
-                       LISTHEAD(appinfo->svcapp_info->permission, tmp5);
-                       appinfo->svcapp_info->permission = tmp5;
-               }
                ret = app_func((void *)appinfo, user_data);
                if (ret < 0)
                        break;
-               free((void *)appinfo->package);
-               appinfo->package = NULL;
+               FREE_AND_NULL(appinfo->locale);
        }
        ret = PMINFO_R_OK;
 
 catch:
-       if (locale) {
-               free(locale);
-               locale = NULL;
-       }
+       FREE_AND_NULL(locale);
+       sqlite3_free(query);
+       sqlite3_finalize(stmt);
        sqlite3_close(appinfo_db);
-       if (appinfo) {
-               free(appinfo);
-               appinfo = NULL;
-       }
+       FREE_AND_NULL(appinfo);
        __cleanup_pkginfo(info);
        return ret;
 }
@@ -1881,12 +977,15 @@ API int pkgmgrinfo_appinfo_get_mounted_list(pkgmgrinfo_app_list_cb app_func, voi
        retvm_if(app_func == NULL, PMINFO_R_EINVAL, "callback function is NULL");
 
        int ret = PMINFO_R_OK;
-       char query[MAX_QUERY_LEN] = {'\0'};
+       char *query = NULL;
+       char appid[MAX_QUERY_LEN] = {0,};
+       char pre_appid[MAX_QUERY_LEN] = {0,};
        char *locale = NULL;
+       pkgmgr_pkginfo_x *info = NULL;
        pkgmgr_appinfo_x *appinfo = NULL;
        uiapplication_x *ptr1 = NULL;
-       label_x *tmp1 = NULL;
        sqlite3 *appinfo_db = NULL;
+       sqlite3_stmt *stmt = NULL;
 
        /*get system locale*/
        locale = __convert_system_locale_to_manifest_locale();
@@ -1894,10 +993,9 @@ API int pkgmgrinfo_appinfo_get_mounted_list(pkgmgrinfo_app_list_cb app_func, voi
 
        /*open db*/
        ret = db_util_open(MANIFEST_DB, &appinfo_db, 0);
-       retvm_if(ret != SQLITE_OK, ret = PMINFO_R_ERROR, "connect db [%s] failed!", MANIFEST_DB);
+       tryvm_if(ret != SQLITE_OK, ret = PMINFO_R_ERROR, "connect db [%s] failed!", MANIFEST_DB);
 
        /*calloc pkginfo*/
-       pkgmgr_pkginfo_x *info = NULL;
        info = (pkgmgr_pkginfo_x *)calloc(1, sizeof(pkgmgr_pkginfo_x));
        tryvm_if(info == NULL, ret = PMINFO_R_ERROR, "Out of Memory!!!");
 
@@ -1909,522 +1007,186 @@ API int pkgmgrinfo_appinfo_get_mounted_list(pkgmgrinfo_app_list_cb app_func, voi
        appinfo = (pkgmgr_appinfo_x *)calloc(1, sizeof(pkgmgr_appinfo_x));
        tryvm_if(appinfo == NULL, ret = PMINFO_R_ERROR, "Out of Memory!!!");
 
-       snprintf(query, MAX_QUERY_LEN, "select * from package_app_info where app_installed_storage='installed_external'");
-       ret = __exec_db_query(appinfo_db, query, __app_list_cb, (void *)info);
-       tryvm_if(ret == -1, ret = PMINFO_R_ERROR, "App Info DB Information retrieval failed");
-
-       if (info->manifest_info->uiapplication) {
-               LISTHEAD(info->manifest_info->uiapplication, ptr1);
-               info->manifest_info->uiapplication = ptr1;
-       }
-
-       /*UI Apps*/
-       for(ptr1 = info->manifest_info->uiapplication; ptr1; ptr1 = ptr1->next)
-       {
-               appinfo->locale = strdup(locale);
-               appinfo->app_component = PMINFO_UI_APP;
-               appinfo->package = strdup(ptr1->package);
-               appinfo->uiapp_info = ptr1;
-               snprintf(query, MAX_QUERY_LEN, "select DISTINCT * " \
-                               "from package_app_info where " \
-                               "app_id='%s'", ptr1->appid);
-               ret = __exec_db_query(appinfo_db, query, __appinfo_cb, (void *)appinfo);
-               tryvm_if(ret == -1, ret = PMINFO_R_ERROR, "App Info DB Information retrieval failed");
-
-               if (strcmp(appinfo->uiapp_info->type,"c++app") == 0){
-                       if (locale) {
-                               free(locale);
-                       }
-                       locale = __get_app_locale_by_fallback(appinfo_db, ptr1->appid);
-               }
+       /*Start constructing query*/
+       query = sqlite3_mprintf("select * from package_app_info LEFT OUTER JOIN package_app_localized_info " \
+                                                               "ON package_app_info.app_id=package_app_localized_info.app_id " \
+                                                               "where app_installed_storage='installed_external' and package_app_info.app_disable='false' and package_app_localized_info.app_locale IN (%Q, %Q)", DEFAULT_LOCALE, locale);
 
-               memset(query, '\0', MAX_QUERY_LEN);
-               snprintf(query, MAX_QUERY_LEN, "select DISTINCT * " \
-                               "from package_app_localized_info where " \
-                               "app_id='%s' and app_locale='%s'",
-                               ptr1->appid, locale);
-               ret = __exec_db_query(appinfo_db, query, __appinfo_cb, (void *)appinfo);
-               tryvm_if(ret == -1, ret = PMINFO_R_ERROR, "App Localized Info DB Information retrieval failed");
+       /*prepare query*/
+       ret = sqlite3_prepare_v2(appinfo_db, query, strlen(query), &stmt, NULL);
+       tryvm_if(ret != PMINFO_R_OK, ret = PMINFO_R_ERROR, "sqlite3_prepare_v2 failed[%s]\n", query);
 
-               memset(query, '\0', MAX_QUERY_LEN);
-               snprintf(query, MAX_QUERY_LEN, "select DISTINCT * " \
-                               "from package_app_localized_info where " \
-                               "app_id='%s' and app_locale='%s'",
-                               ptr1->appid, DEFAULT_LOCALE);
+       /*step query*/
+       while(1) {
+               ret = sqlite3_step(stmt);
+               if(ret == SQLITE_ROW) {
 
-               ret = __exec_db_query(appinfo_db, query, __appinfo_cb, (void *)appinfo);
-               tryvm_if(ret == -1, ret = PMINFO_R_ERROR, "App Localized Info DB Information retrieval failed");
+                       memset(appid, 0, MAX_QUERY_LEN);
+                       strncpy(appid, (const char *)sqlite3_column_text(stmt, 0), MAX_QUERY_LEN - 1);
 
+                       if (strlen(pre_appid) != 0) {
+                               if (strcmp(pre_appid, appid) == 0) {
+                                       /*if same appid is found, then it is about exact matched locale*/
+                                       __update_localed_label_for_list(stmt, info);
 
-               if (appinfo->uiapp_info->label) {
-                       LISTHEAD(appinfo->uiapp_info->label, tmp1);
-                       appinfo->uiapp_info->label = tmp1;
-               }
+                                       memset(pre_appid, 0, MAX_QUERY_LEN);
+                                       strncpy(pre_appid, (const char *)sqlite3_column_text(stmt, 0), MAX_QUERY_LEN - 1);
 
-               ret = __appinfo_check_installed_storage(appinfo);
-               if(ret < 0)
-                       continue;
+                                       continue;
+                               } else {
+                                       memset(pre_appid, 0, MAX_QUERY_LEN);
+                                       strncpy(pre_appid, (const char *)sqlite3_column_text(stmt, 0), MAX_QUERY_LEN - 1);
+                               }
+                       } else {
+                               strncpy(pre_appid, (const char *)sqlite3_column_text(stmt, 0), MAX_QUERY_LEN - 1);
+                       }
 
-               ret = app_func((void *)appinfo, user_data);
-               if (ret < 0)
+                       __get_appinfo_for_list(stmt, info);
+               } else {
                        break;
-               free((void *)appinfo->package);
-               appinfo->package = NULL;
-       }
-
-       ret = PMINFO_R_OK;
-
-catch:
-       if (locale) {
-               free(locale);
-               locale = NULL;
-       }
-       sqlite3_close(appinfo_db);
-       if (appinfo) {
-               free(appinfo);
-               appinfo = NULL;
+               }
        }
-       __cleanup_pkginfo(info);
-       return ret;
-}
 
-API int pkgmgrinfo_appinfo_get_unmounted_list(pkgmgrinfo_app_list_cb app_func, void *user_data)
-{
-       retvm_if(app_func == NULL, PMINFO_R_EINVAL, "callback function is NULL");
-
-       int ret = PMINFO_R_OK;
-       char query[MAX_QUERY_LEN] = {'\0'};
-       char *locale = NULL;
-       pkgmgr_appinfo_x *appinfo = NULL;
-       uiapplication_x *ptr1 = NULL;
-       label_x *tmp1 = NULL;
-       sqlite3 *appinfo_db = NULL;
-
-       /*get system locale*/
-       locale = __convert_system_locale_to_manifest_locale();
-       tryvm_if(locale == NULL, ret = PMINFO_R_ERROR, "manifest locale is NULL");
-
-       /*open db*/
-       ret = db_util_open(MANIFEST_DB, &appinfo_db, 0);
-       retvm_if(ret != SQLITE_OK, ret = PMINFO_R_ERROR, "connect db [%s] failed!", MANIFEST_DB);
-
-       /*calloc pkginfo*/
-       pkgmgr_pkginfo_x *info = NULL;
-       info = (pkgmgr_pkginfo_x *)calloc(1, sizeof(pkgmgr_pkginfo_x));
-       tryvm_if(info == NULL, ret = PMINFO_R_ERROR, "Out of Memory!!!");
-
-       /*calloc manifest_info*/
-       info->manifest_info = (manifest_x *)calloc(1, sizeof(manifest_x));
-       tryvm_if(info->manifest_info == NULL, ret = PMINFO_R_ERROR, "Out of Memory!!!");
-
-       /*calloc appinfo*/
-       appinfo = (pkgmgr_appinfo_x *)calloc(1, sizeof(pkgmgr_appinfo_x));
-       tryvm_if(appinfo == NULL, ret = PMINFO_R_ERROR, "Out of Memory!!!");
-
-       snprintf(query, MAX_QUERY_LEN, "select * from package_app_info where app_installed_storage='installed_external'");
-       ret = __exec_db_query(appinfo_db, query, __app_list_cb, (void *)info);
-       tryvm_if(ret == -1, ret = PMINFO_R_ERROR, "App Info DB Information retrieval failed");
-
-       if (info->manifest_info->uiapplication) {
-               LISTHEAD(info->manifest_info->uiapplication, ptr1);
-               info->manifest_info->uiapplication = ptr1;
-       }
+       /*head up*/
+       SAFE_LISTHEAD(info->manifest_info->uiapplication, ptr1);
 
        /*UI Apps*/
        for(ptr1 = info->manifest_info->uiapplication; ptr1; ptr1 = ptr1->next)
        {
                appinfo->locale = strdup(locale);
-               appinfo->app_component = PMINFO_UI_APP;
-               appinfo->package = strdup(ptr1->package);
                appinfo->uiapp_info = ptr1;
-               snprintf(query, MAX_QUERY_LEN, "select DISTINCT * " \
-                               "from package_app_info where " \
-                               "app_id='%s'", ptr1->appid);
-               ret = __exec_db_query(appinfo_db, query, __appinfo_cb, (void *)appinfo);
-               tryvm_if(ret == -1, ret = PMINFO_R_ERROR, "App Info DB Information retrieval failed");
-
-               if (strcmp(appinfo->uiapp_info->type,"c++app") == 0){
-                       if (locale) {
-                               free(locale);
-                       }
-                       locale = __get_app_locale_by_fallback(appinfo_db, ptr1->appid);
-               }
-
-               memset(query, '\0', MAX_QUERY_LEN);
-               snprintf(query, MAX_QUERY_LEN, "select DISTINCT * " \
-                               "from package_app_localized_info where " \
-                               "app_id='%s' and app_locale='%s'",
-                               ptr1->appid, locale);
-               ret = __exec_db_query(appinfo_db, query, __appinfo_cb, (void *)appinfo);
-               tryvm_if(ret == -1, ret = PMINFO_R_ERROR, "App Localized Info DB Information retrieval failed");
-
-               memset(query, '\0', MAX_QUERY_LEN);
-               snprintf(query, MAX_QUERY_LEN, "select DISTINCT * " \
-                               "from package_app_localized_info where " \
-                               "app_id='%s' and app_locale='%s'",
-                               ptr1->appid, DEFAULT_LOCALE);
 
-               ret = __exec_db_query(appinfo_db, query, __appinfo_cb, (void *)appinfo);
-               tryvm_if(ret == -1, ret = PMINFO_R_ERROR, "App Localized Info DB Information retrieval failed");
-
-               if (appinfo->uiapp_info->label) {
-                       LISTHEAD(appinfo->uiapp_info->label, tmp1);
-                       appinfo->uiapp_info->label = tmp1;
+               ret = __appinfo_check_installed_storage(appinfo);
+               if(ret < 0) {
+                       FREE_AND_NULL(appinfo->locale);
+                       continue;
                }
 
                ret = app_func((void *)appinfo, user_data);
-               if (ret < 0)
+               if(ret < 0) {
+                       FREE_AND_NULL(appinfo->locale);
                        break;
-               free((void *)appinfo->package);
-               appinfo->package = NULL;
-       }
+               }
 
+               FREE_AND_NULL(appinfo->locale);
+       }
        ret = PMINFO_R_OK;
 
 catch:
-       if (locale) {
-               free(locale);
-               locale = NULL;
-       }
+       FREE_AND_NULL(locale);
+       sqlite3_free(query);
+       sqlite3_finalize(stmt);
        sqlite3_close(appinfo_db);
-       if (appinfo) {
-               free(appinfo);
-               appinfo = NULL;
-       }
+       FREE_AND_NULL(appinfo);
        __cleanup_pkginfo(info);
        return ret;
 }
 
-API int pkgmgrinfo_appinfo_get_unmounted_appinfo(const char *appid, pkgmgrinfo_appinfo_h *handle)
+API int pkgmgrinfo_appinfo_get_unmounted_list(pkgmgrinfo_app_list_cb app_func, void *user_data)
 {
-       retvm_if(appid == NULL, PMINFO_R_EINVAL, "appid is NULL");
-       retvm_if(handle == NULL, PMINFO_R_EINVAL, "Argument supplied to hold return value is NULL");
+       retvm_if(app_func == NULL, PMINFO_R_EINVAL, "callback function is NULL");
 
-       pkgmgr_appinfo_x *appinfo = NULL;
-       char *locale = NULL;
-       int ret = -1;
-       int exist = 0;
-       label_x *tmp1 = NULL;
-       icon_x *tmp2 = NULL;
-       category_x *tmp3 = NULL;
-       metadata_x *tmp4 = NULL;
-       permission_x *tmp5 = NULL;
-       image_x *tmp6 = NULL;
+       int ret = PMINFO_R_OK;
        char *query = NULL;
-       sqlite3 *appinfo_db = NULL;
-
-       /*open db*/
-       ret = db_util_open(MANIFEST_DB, &appinfo_db, 0);
-       retvm_if(ret != SQLITE_OK, ret = PMINFO_R_ERROR, "connect db [%s] failed!", MANIFEST_DB);
-
-       /*check appid exist on db*/
-       query = sqlite3_mprintf("select exists(select * from package_app_info where app_id=%Q)", appid);
-       ret = __exec_db_query(appinfo_db, query, _pkgmgrinfo_validate_cb, (void *)&exist);
-       sqlite3_free(query);
-       tryvm_if(ret == -1, ret = PMINFO_R_ERROR, "sqlite3_exec fail");
-       tryvm_if(exist == 0, ret = PMINFO_R_ERROR, "Appid[%s] not found in DB", appid);
-
-       /*get system locale*/
-       locale = __convert_system_locale_to_manifest_locale();
-       tryvm_if(locale == NULL, ret = PMINFO_R_ERROR, "manifest locale is NULL");
-
-       /*calloc appinfo*/
-       appinfo = (pkgmgr_appinfo_x *)calloc(1, sizeof(pkgmgr_appinfo_x));
-       tryvm_if(appinfo == NULL, ret = PMINFO_R_ERROR, "Failed to allocate memory for appinfo");
-
-       /*check app_component from DB*/
-       query = sqlite3_mprintf("select app_component, package from package_app_info where app_id=%Q", appid);
-       ret = __exec_db_query(appinfo_db, query, __appcomponent_cb, (void *)appinfo);
-       sqlite3_free(query);
-       tryvm_if(ret == -1, ret = PMINFO_R_ERROR, "App Info DB Information retrieval failed");
-
-       /*calloc app_component*/
-       if (appinfo->app_component == PMINFO_UI_APP) {
-               appinfo->uiapp_info = (uiapplication_x *)calloc(1, sizeof(uiapplication_x));
-               tryvm_if(appinfo->uiapp_info == NULL, ret = PMINFO_R_ERROR, "Failed to allocate memory for uiapp info");
-       } else {
-               appinfo->svcapp_info = (serviceapplication_x *)calloc(1, sizeof(serviceapplication_x));
-               tryvm_if(appinfo->svcapp_info == NULL, ret = PMINFO_R_ERROR, "Failed to allocate memory for svcapp info");
-       }
-       appinfo->locale = strdup(locale);
-
-       /*populate app_info from DB*/
-       query = sqlite3_mprintf("select * from package_app_info where app_id=%Q ", appid);
-       ret = __exec_db_query(appinfo_db, query, __appinfo_cb, (void *)appinfo);
-       sqlite3_free(query);
-       tryvm_if(ret == -1, ret = PMINFO_R_ERROR, "App Info DB Information retrieval failed");
-
-       query = sqlite3_mprintf("select * from package_app_localized_info where app_id=%Q and app_locale=%Q", appid, locale);
-       ret = __exec_db_query(appinfo_db, query, __appinfo_cb, (void *)appinfo);
-       sqlite3_free(query);
-       tryvm_if(ret == -1, ret = PMINFO_R_ERROR, "App Info DB Information retrieval failed");
-
-       /*Also store the values corresponding to default locales*/
-       query = sqlite3_mprintf("select * from package_app_localized_info where app_id=%Q and app_locale=%Q", appid, DEFAULT_LOCALE);
-       ret = __exec_db_query(appinfo_db, query, __appinfo_cb, (void *)appinfo);
-       sqlite3_free(query);
-       tryvm_if(ret == -1, ret = PMINFO_R_ERROR, "App Localized Info DB Information retrieval failed");
-
-       /*Populate app category*/
-       query = sqlite3_mprintf("select * from package_app_app_category where app_id=%Q", appid);
-       ret = __exec_db_query(appinfo_db, query, __appinfo_cb, (void *)appinfo);
-       sqlite3_free(query);
-       tryvm_if(ret == -1, ret = PMINFO_R_ERROR, "App Category Info DB Information retrieval failed");
-
-       /*Populate app metadata*/
-       query = sqlite3_mprintf("select * from package_app_app_metadata where app_id=%Q", appid);
-       ret = __exec_db_query(appinfo_db, query, __appinfo_cb, (void *)appinfo);
-       sqlite3_free(query);
-       tryvm_if(ret == -1, ret = PMINFO_R_ERROR, "App Metadata Info DB Information retrieval failed");
-
-       /*Populate app permission*/
-       query = sqlite3_mprintf("select * from package_app_app_permission where app_id=%Q", appid);
-       ret = __exec_db_query(appinfo_db, query, __appinfo_cb, (void *)appinfo);
-       sqlite3_free(query);
-       tryvm_if(ret == -1, ret = PMINFO_R_ERROR, "App permission Info DB Information retrieval failed");
-
-       /*store setting notification icon section*/
-       query = sqlite3_mprintf("select * from package_app_icon_section_info where app_id=%Q", appid);
-       ret = __exec_db_query(appinfo_db, query, __appinfo_cb, (void *)appinfo);
-       sqlite3_free(query);
-       tryvm_if(ret == -1, ret = PMINFO_R_ERROR, "App icon section Info DB Information retrieval failed");
-
-       /*store app preview image info*/
-       query = sqlite3_mprintf("select app_image_section, app_image from package_app_image_info where app_id=%Q", appid);
-       ret = __exec_db_query(appinfo_db, query, __appinfo_cb, (void *)appinfo);
-       sqlite3_free(query);
-       tryvm_if(ret == -1, ret = PMINFO_R_ERROR, "App image Info DB Information retrieval failed");
-
-       switch (appinfo->app_component) {
-       case PMINFO_UI_APP:
-               if (appinfo->uiapp_info->label) {
-                       LISTHEAD(appinfo->uiapp_info->label, tmp1);
-                       appinfo->uiapp_info->label = tmp1;
-               }
-               if (appinfo->uiapp_info->icon) {
-                       LISTHEAD(appinfo->uiapp_info->icon, tmp2);
-                       appinfo->uiapp_info->icon = tmp2;
-               }
-               if (appinfo->uiapp_info->category) {
-                       LISTHEAD(appinfo->uiapp_info->category, tmp3);
-                       appinfo->uiapp_info->category = tmp3;
-               }
-               if (appinfo->uiapp_info->metadata) {
-                       LISTHEAD(appinfo->uiapp_info->metadata, tmp4);
-                       appinfo->uiapp_info->metadata = tmp4;
-               }
-               if (appinfo->uiapp_info->permission) {
-                       LISTHEAD(appinfo->uiapp_info->permission, tmp5);
-                       appinfo->uiapp_info->permission = tmp5;
-               }
-               if (appinfo->uiapp_info->image) {
-                       LISTHEAD(appinfo->uiapp_info->image, tmp6);
-                       appinfo->uiapp_info->image = tmp6;
-               }
-               break;
-       case PMINFO_SVC_APP:
-               if (appinfo->svcapp_info->label) {
-                       LISTHEAD(appinfo->svcapp_info->label, tmp1);
-                       appinfo->svcapp_info->label = tmp1;
-               }
-               if (appinfo->svcapp_info->icon) {
-                       LISTHEAD(appinfo->svcapp_info->icon, tmp2);
-                       appinfo->svcapp_info->icon = tmp2;
-               }
-               if (appinfo->svcapp_info->category) {
-                       LISTHEAD(appinfo->svcapp_info->category, tmp3);
-                       appinfo->svcapp_info->category = tmp3;
-               }
-               if (appinfo->svcapp_info->metadata) {
-                       LISTHEAD(appinfo->svcapp_info->metadata, tmp4);
-                       appinfo->svcapp_info->metadata = tmp4;
-               }
-               if (appinfo->svcapp_info->permission) {
-                       LISTHEAD(appinfo->svcapp_info->permission, tmp5);
-                       appinfo->svcapp_info->permission = tmp5;
-               }
-               break;
-       default:
-               break;
-       }
-
-       ret = PMINFO_R_OK;
-
-catch:
-       if (ret == PMINFO_R_OK)
-               *handle = (void*)appinfo;
-       else {
-               *handle = NULL;
-               __cleanup_appinfo(appinfo);
-       }
-
-       sqlite3_close(appinfo_db);
-       if (locale) {
-               free(locale);
-               locale = NULL;
-       }
-       return ret;
-}
-
-API int pkgmgrinfo_appinfo_get_disabled_list(pkgmgrinfo_pkginfo_h handle, pkgmgrinfo_app_component component,
-                                               pkgmgrinfo_app_list_cb app_func, void *user_data)
-{
-       retvm_if(handle == NULL, PMINFO_R_EINVAL, "pkginfo handle is NULL");
-       retvm_if(app_func == NULL, PMINFO_R_EINVAL, "callback pointer is NULL");
-       retvm_if((component != PMINFO_UI_APP) && (component != PMINFO_SVC_APP) && (component != PMINFO_ALL_APP), PMINFO_R_EINVAL, "Invalid App Component Type");
-
+       char appid[MAX_QUERY_LEN] = {0,};
+       char pre_appid[MAX_QUERY_LEN] = {0,};
        char *locale = NULL;
-       int ret = -1;
-       char query[MAX_QUERY_LEN] = {'\0'};
-       pkgmgr_pkginfo_x *info = (pkgmgr_pkginfo_x *)handle;
-       pkgmgr_pkginfo_x *allinfo = NULL;
+       pkgmgr_pkginfo_x *info = NULL;
        pkgmgr_appinfo_x *appinfo = NULL;
-       icon_x *ptr1 = NULL;
-       label_x *ptr2 = NULL;
-       category_x *ptr3 = NULL;
-       metadata_x *ptr4 = NULL;
-       permission_x *ptr5 = NULL;
-       image_x *ptr6 = NULL;
+       uiapplication_x *ptr1 = NULL;
        sqlite3 *appinfo_db = NULL;
-
-       /*check installed storage*/
-       ret = __pkginfo_check_installed_storage(info);
-       retvm_if(ret < 0, PMINFO_R_EINVAL, "[%s] is installed external, but is not in mmc", info->manifest_info->package);
+       sqlite3_stmt *stmt = NULL;
 
        /*get system locale*/
        locale = __convert_system_locale_to_manifest_locale();
-       tryvm_if(locale == NULL, ret = PMINFO_R_EINVAL, "manifest locale is NULL");
+       tryvm_if(locale == NULL, ret = PMINFO_R_ERROR, "manifest locale is NULL");
 
-       /*calloc allinfo*/
-       allinfo = (pkgmgr_pkginfo_x *)calloc(1, sizeof(pkgmgr_pkginfo_x));
-       tryvm_if(allinfo == NULL, ret = PMINFO_R_ERROR, "Failed to allocate memory for appinfo");
+       /*open db*/
+       ret = db_util_open(MANIFEST_DB, &appinfo_db, 0);
+       tryvm_if(ret != SQLITE_OK, ret = PMINFO_R_ERROR, "connect db [%s] failed!", MANIFEST_DB);
+
+       /*calloc pkginfo*/
+       info = (pkgmgr_pkginfo_x *)calloc(1, sizeof(pkgmgr_pkginfo_x));
+       tryvm_if(info == NULL, ret = PMINFO_R_ERROR, "Out of Memory!!!");
 
        /*calloc manifest_info*/
-       allinfo->manifest_info = (manifest_x *)calloc(1, sizeof(manifest_x));
-       tryvm_if(allinfo->manifest_info == NULL, ret = PMINFO_R_ERROR, "Out of Memory!!!");
+       info->manifest_info = (manifest_x *)calloc(1, sizeof(manifest_x));
+       tryvm_if(info->manifest_info == NULL, ret = PMINFO_R_ERROR, "Out of Memory!!!");
 
        /*calloc appinfo*/
        appinfo = (pkgmgr_appinfo_x *)calloc(1, sizeof(pkgmgr_appinfo_x));
-       tryvm_if(appinfo == NULL, ret = PMINFO_R_ERROR, "Failed to allocate memory for appinfo");
+       tryvm_if(appinfo == NULL, ret = PMINFO_R_ERROR, "Out of Memory!!!");
 
-       /*set component type*/
-       if (component == PMINFO_UI_APP)
-               appinfo->app_component = PMINFO_UI_APP;
-       if (component == PMINFO_SVC_APP)
-               appinfo->app_component = PMINFO_SVC_APP;
-       if (component == PMINFO_ALL_APP)
-               appinfo->app_component = PMINFO_ALL_APP;
+       /*Start constructing query*/
+       query = sqlite3_mprintf("select * from package_app_info LEFT OUTER JOIN package_app_localized_info " \
+                                                               "ON package_app_info.app_id=package_app_localized_info.app_id " \
+                                                               "where app_installed_storage='installed_external' and package_app_info.app_disable='false' and package_app_localized_info.app_locale IN (%Q, %Q)", DEFAULT_LOCALE, locale);
 
-       /*open db */
-       ret = db_util_open(MANIFEST_DB, &appinfo_db, 0);
-       tryvm_if(ret != SQLITE_OK, ret = PMINFO_R_ERROR, "connect db [%s] failed!", MANIFEST_DB);
+       /*prepare query*/
+       ret = sqlite3_prepare_v2(appinfo_db, query, strlen(query), &stmt, NULL);
+       tryvm_if(ret != PMINFO_R_OK, ret = PMINFO_R_ERROR, "sqlite3_prepare_v2 failed[%s]\n", query);
 
-       appinfo->package = strdup(info->manifest_info->package);
-       snprintf(query, MAX_QUERY_LEN, "select DISTINCT * " \
-                       "from disabled_package_app_info where " \
-                       "package='%s' and app_component='%s'",
-                       info->manifest_info->package,
-                       (appinfo->app_component==PMINFO_UI_APP ? "uiapp" : "svcapp"));
-
-       switch(component) {
-       case PMINFO_UI_APP:
-               /*Populate ui app info */
-               ret = __exec_db_query(appinfo_db, query, __uiapp_list_cb, (void *)info);
-               tryvm_if(ret == -1, ret = PMINFO_R_ERROR, "App Info list retrieval failed");
-
-               uiapplication_x *tmp = NULL;
-               if (info->manifest_info->uiapplication) {
-                       LISTHEAD(info->manifest_info->uiapplication, tmp);
-                       info->manifest_info->uiapplication = tmp;
-               }
-               /*Populate localized info for default locales and call callback*/
-               /*If the callback func return < 0 we break and no more call back is called*/
-               while(tmp != NULL)
-               {
-                       appinfo->locale = strdup(locale);
-                       appinfo->uiapp_info = tmp;
-                       if (strcmp(appinfo->uiapp_info->type,"c++app") == 0){
-                               if (locale) {
-                                       free(locale);
+       /*step query*/
+       while(1) {
+               ret = sqlite3_step(stmt);
+               if(ret == SQLITE_ROW) {
+
+                       memset(appid, 0, MAX_QUERY_LEN);
+                       strncpy(appid, (const char *)sqlite3_column_text(stmt, 0), MAX_QUERY_LEN - 1);
+
+                       if (strlen(pre_appid) != 0) {
+                               if (strcmp(pre_appid, appid) == 0) {
+                                       /*if same appid is found, then it is about exact matched locale*/
+                                       __update_localed_label_for_list(stmt, info);
+
+                                       memset(pre_appid, 0, MAX_QUERY_LEN);
+                                       strncpy(pre_appid, (const char *)sqlite3_column_text(stmt, 0), MAX_QUERY_LEN - 1);
+
+                                       continue;
+                               } else {
+                                       memset(pre_appid, 0, MAX_QUERY_LEN);
+                                       strncpy(pre_appid, (const char *)sqlite3_column_text(stmt, 0), MAX_QUERY_LEN - 1);
                                }
-                               locale = __get_app_locale_by_fallback(appinfo_db, appinfo->uiapp_info->appid);
+                       } else {
+                               strncpy(pre_appid, (const char *)sqlite3_column_text(stmt, 0), MAX_QUERY_LEN - 1);
                        }
 
-                       memset(query, '\0', MAX_QUERY_LEN);
-                       snprintf(query, MAX_QUERY_LEN, "select * from disabled_package_app_localized_info where app_id='%s' and app_locale='%s'", appinfo->uiapp_info->appid, locale);
-                       ret = __exec_db_query(appinfo_db, query, __appinfo_cb, (void *)appinfo);
-                       tryvm_if(ret == -1, ret = PMINFO_R_ERROR, "App Localized Info DB Information retrieval failed");
-
-                       memset(query, '\0', MAX_QUERY_LEN);
-                       snprintf(query, MAX_QUERY_LEN, "select * from disabled_package_app_localized_info where app_id='%s' and app_locale='%s'", appinfo->uiapp_info->appid, DEFAULT_LOCALE);
-                       ret = __exec_db_query(appinfo_db, query, __appinfo_cb, (void *)appinfo);
-                       tryvm_if(ret == -1, ret = PMINFO_R_ERROR, "App Localized Info DB Information retrieval failed");
-
-                       /*Populate app category*/
-                       memset(query, '\0', MAX_QUERY_LEN);
-                       snprintf(query, MAX_QUERY_LEN, "select * from disabled_package_app_app_category where app_id=='%s'%", appinfo->uiapp_info->appid);
-                       ret = __exec_db_query(appinfo_db, query, __appinfo_cb, (void *)appinfo);
-                       tryvm_if(ret == -1, ret = PMINFO_R_ERROR, "App Category Info DB Information retrieval failed");
-
-                       /*Populate app metadata*/
-                       memset(query, '\0', MAX_QUERY_LEN);
-                       snprintf(query, MAX_QUERY_LEN, "select * from disabled_package_app_app_metadata where app_id='%s'", appinfo->uiapp_info->appid);
-                       ret = __exec_db_query(appinfo_db, query, __appinfo_cb, (void *)appinfo);
-                       tryvm_if(ret == -1, ret = PMINFO_R_ERROR, "App Metadata Info DB Information retrieval failed");
-
-                       if (appinfo->uiapp_info->label) {
-                               LISTHEAD(appinfo->uiapp_info->label, ptr2);
-                               appinfo->uiapp_info->label = ptr2;
-                       }
-                       if (appinfo->uiapp_info->icon) {
-                               LISTHEAD(appinfo->uiapp_info->icon, ptr1);
-                               appinfo->uiapp_info->icon = ptr1;
-                       }
-                       if (appinfo->uiapp_info->category) {
-                               LISTHEAD(appinfo->uiapp_info->category, ptr3);
-                               appinfo->uiapp_info->category = ptr3;
-                       }
-                       if (appinfo->uiapp_info->metadata) {
-                               LISTHEAD(appinfo->uiapp_info->metadata, ptr4);
-                               appinfo->uiapp_info->metadata = ptr4;
-                       }
-                       if (appinfo->uiapp_info->permission) {
-                               LISTHEAD(appinfo->uiapp_info->permission, ptr5);
-                               appinfo->uiapp_info->permission = ptr5;
-                       }
-                       if (appinfo->uiapp_info->image) {
-                               LISTHEAD(appinfo->uiapp_info->image, ptr6);
-                               appinfo->uiapp_info->image = ptr6;
-                       }
-                       ret = app_func((void *)appinfo, user_data);
-                       if (ret < 0)
-                               break;
-                       tmp = tmp->next;
+                       __get_appinfo_for_list(stmt, info);
+               } else {
+                       break;
                }
-               break;
        }
 
-       ret = PMINFO_R_OK;
-catch:
-       if (locale) {
-               free(locale);
-               locale = NULL;
-       }
-       if (appinfo) {
-               if (appinfo->package) {
-                       free((void *)appinfo->package);
-                       appinfo->package = NULL;
+       /*head up*/
+       SAFE_LISTHEAD(info->manifest_info->uiapplication, ptr1);
+
+       /*UI Apps*/
+       for(ptr1 = info->manifest_info->uiapplication; ptr1; ptr1 = ptr1->next)
+       {
+               appinfo->locale = strdup(locale);
+               appinfo->uiapp_info = ptr1;
+
+               ret = app_func((void *)appinfo, user_data);
+               if(ret < 0) {
+                       FREE_AND_NULL(appinfo->locale);
+                       break;
                }
-               free(appinfo);
-               appinfo = NULL;
+
+               FREE_AND_NULL(appinfo->locale);
        }
-       __cleanup_pkginfo(allinfo);
+       ret = PMINFO_R_OK;
 
+catch:
+       FREE_AND_NULL(locale);
+       sqlite3_free(query);
+       sqlite3_finalize(stmt);
        sqlite3_close(appinfo_db);
+       FREE_AND_NULL(appinfo);
+       __cleanup_pkginfo(info);
        return ret;
 }
 
-API int pkgmgrinfo_appinfo_get_disabled_appinfo(const char *appid, pkgmgrinfo_appinfo_h *handle)
+API int pkgmgrinfo_appinfo_get_unmounted_appinfo(const char *appid, pkgmgrinfo_appinfo_h *handle)
 {
        retvm_if(appid == NULL, PMINFO_R_EINVAL, "appid is NULL");
        retvm_if(handle == NULL, PMINFO_R_EINVAL, "Argument supplied to hold return value is NULL");
@@ -2437,20 +1199,25 @@ API int pkgmgrinfo_appinfo_get_disabled_appinfo(const char *appid, pkgmgrinfo_ap
        icon_x *tmp2 = NULL;
        category_x *tmp3 = NULL;
        metadata_x *tmp4 = NULL;
-
+       permission_x *tmp5 = NULL;
+       image_x *tmp6 = NULL;
        char *query = NULL;
        sqlite3 *appinfo_db = NULL;
+       char *alias_id = NULL;
 
        /*open db*/
        ret = db_util_open(MANIFEST_DB, &appinfo_db, 0);
        retvm_if(ret != SQLITE_OK, ret = PMINFO_R_ERROR, "connect db [%s] failed!", MANIFEST_DB);
 
-       /*check appid exist on db*/
-       query = sqlite3_mprintf("select exists(select * from disabled_package_app_info where app_id=%Q)", appid);
+       /*Get the alias id*/
+       alias_id = __get_aliasid_from_db(appinfo_db,appid);
+
+       /*check alias_id exist on db*/
+       query = sqlite3_mprintf("select exists(select * from package_app_info where app_id=%Q and app_disable='false')", alias_id);
        ret = __exec_db_query(appinfo_db, query, _pkgmgrinfo_validate_cb, (void *)&exist);
        sqlite3_free(query);
        tryvm_if(ret == -1, ret = PMINFO_R_ERROR, "sqlite3_exec fail");
-       tryvm_if(exist == 0, ret = PMINFO_R_ERROR, "Appid[%s] not found in DB", appid);
+       tryvm_if(exist == 0, ret = PMINFO_R_ERROR, "Appid[%s] not found in DB", alias_id);
 
        /*get system locale*/
        locale = __convert_system_locale_to_manifest_locale();
@@ -2460,12 +1227,6 @@ API int pkgmgrinfo_appinfo_get_disabled_appinfo(const char *appid, pkgmgrinfo_ap
        appinfo = (pkgmgr_appinfo_x *)calloc(1, sizeof(pkgmgr_appinfo_x));
        tryvm_if(appinfo == NULL, ret = PMINFO_R_ERROR, "Failed to allocate memory for appinfo");
 
-       /*check app_component from DB*/
-       query = sqlite3_mprintf("select app_component, package from disabled_package_app_info where app_id=%Q", appid);
-       ret = __exec_db_query(appinfo_db, query, __appcomponent_cb, (void *)appinfo);
-       sqlite3_free(query);
-       tryvm_if(ret == -1, ret = PMINFO_R_ERROR, "App Info DB Information retrieval failed");
-
        /*calloc app_component*/
        appinfo->uiapp_info = (uiapplication_x *)calloc(1, sizeof(uiapplication_x));
        tryvm_if(appinfo->uiapp_info == NULL, ret = PMINFO_R_ERROR, "Failed to allocate memory for uiapp info");
@@ -2473,56 +1234,58 @@ API int pkgmgrinfo_appinfo_get_disabled_appinfo(const char *appid, pkgmgrinfo_ap
        appinfo->locale = strdup(locale);
 
        /*populate app_info from DB*/
-       query = sqlite3_mprintf("select * from disabled_package_app_info where app_id=%Q ", appid);
+       query = sqlite3_mprintf("select * from package_app_info where app_id=%Q and app_disable='false' ", alias_id);
        ret = __exec_db_query(appinfo_db, query, __appinfo_cb, (void *)appinfo);
        sqlite3_free(query);
        tryvm_if(ret == -1, ret = PMINFO_R_ERROR, "App Info DB Information retrieval failed");
 
-       query = sqlite3_mprintf("select * from disabled_package_app_localized_info where app_id=%Q and app_locale=%Q", appid, locale);
+       query = sqlite3_mprintf("select * from package_app_localized_info where app_id=%Q and app_locale=%Q", alias_id, locale);
        ret = __exec_db_query(appinfo_db, query, __appinfo_cb, (void *)appinfo);
        sqlite3_free(query);
        tryvm_if(ret == -1, ret = PMINFO_R_ERROR, "App Info DB Information retrieval failed");
 
        /*Also store the values corresponding to default locales*/
-       query = sqlite3_mprintf("select * from disabled_package_app_localized_info where app_id=%Q and app_locale=%Q", appid, DEFAULT_LOCALE);
+       query = sqlite3_mprintf("select * from package_app_localized_info where app_id=%Q and app_locale=%Q", alias_id, DEFAULT_LOCALE);
        ret = __exec_db_query(appinfo_db, query, __appinfo_cb, (void *)appinfo);
        sqlite3_free(query);
        tryvm_if(ret == -1, ret = PMINFO_R_ERROR, "App Localized Info DB Information retrieval failed");
 
        /*Populate app category*/
-       query = sqlite3_mprintf("select * from disabled_package_app_app_category where app_id=%Q", appid);
+       query = sqlite3_mprintf("select * from package_app_app_category where app_id=%Q", alias_id);
        ret = __exec_db_query(appinfo_db, query, __appinfo_cb, (void *)appinfo);
        sqlite3_free(query);
        tryvm_if(ret == -1, ret = PMINFO_R_ERROR, "App Category Info DB Information retrieval failed");
 
        /*Populate app metadata*/
-       query = sqlite3_mprintf("select * from disabled_package_app_app_metadata where app_id=%Q", appid);
+       query = sqlite3_mprintf("select * from package_app_app_metadata where app_id=%Q", alias_id);
        ret = __exec_db_query(appinfo_db, query, __appinfo_cb, (void *)appinfo);
        sqlite3_free(query);
        tryvm_if(ret == -1, ret = PMINFO_R_ERROR, "App Metadata Info DB Information retrieval failed");
 
-       switch (appinfo->app_component) {
-       case PMINFO_UI_APP:
-               if (appinfo->uiapp_info->label) {
-                       LISTHEAD(appinfo->uiapp_info->label, tmp1);
-                       appinfo->uiapp_info->label = tmp1;
-               }
-               if (appinfo->uiapp_info->icon) {
-                       LISTHEAD(appinfo->uiapp_info->icon, tmp2);
-                       appinfo->uiapp_info->icon = tmp2;
-               }
-               if (appinfo->uiapp_info->category) {
-                       LISTHEAD(appinfo->uiapp_info->category, tmp3);
-                       appinfo->uiapp_info->category = tmp3;
-               }
-               if (appinfo->uiapp_info->metadata) {
-                       LISTHEAD(appinfo->uiapp_info->metadata, tmp4);
-                       appinfo->uiapp_info->metadata = tmp4;
-               }
-               break;
-       default:
-               break;
-       }
+       /*Populate app permission*/
+       query = sqlite3_mprintf("select * from package_app_app_permission where app_id=%Q", alias_id);
+       ret = __exec_db_query(appinfo_db, query, __appinfo_cb, (void *)appinfo);
+       sqlite3_free(query);
+       tryvm_if(ret == -1, ret = PMINFO_R_ERROR, "App permission Info DB Information retrieval failed");
+
+       /*store setting notification icon section*/
+       query = sqlite3_mprintf("select * from package_app_icon_section_info where app_id=%Q", alias_id);
+       ret = __exec_db_query(appinfo_db, query, __appinfo_cb, (void *)appinfo);
+       sqlite3_free(query);
+       tryvm_if(ret == -1, ret = PMINFO_R_ERROR, "App icon section Info DB Information retrieval failed");
+
+       /*store app preview image info*/
+       query = sqlite3_mprintf("select app_image_section, app_image from package_app_image_info where app_id=%Q", alias_id);
+       ret = __exec_db_query(appinfo_db, query, __appinfo_cb, (void *)appinfo);
+       sqlite3_free(query);
+       tryvm_if(ret == -1, ret = PMINFO_R_ERROR, "App image Info DB Information retrieval failed");
+
+       SAFE_LISTHEAD(appinfo->uiapp_info->label, tmp1);
+       SAFE_LISTHEAD(appinfo->uiapp_info->icon, tmp2);
+       SAFE_LISTHEAD(appinfo->uiapp_info->category, tmp3);
+       SAFE_LISTHEAD(appinfo->uiapp_info->metadata, tmp4);
+       SAFE_LISTHEAD(appinfo->uiapp_info->permission, tmp5);
+       SAFE_LISTHEAD(appinfo->uiapp_info->image, tmp6);
 
        ret = PMINFO_R_OK;
 
@@ -2535,10 +1298,8 @@ catch:
        }
 
        sqlite3_close(appinfo_db);
-       if (locale) {
-               free(locale);
-               locale = NULL;
-       }
+       FREE_AND_NULL(locale);
+       FREE_AND_NULL(alias_id);
        return ret;
 }
 
@@ -2559,18 +1320,22 @@ API int pkgmgrinfo_appinfo_get_appinfo(const char *appid, pkgmgrinfo_appinfo_h *
        image_x *tmp6 = NULL;
        char *query = NULL;
        sqlite3 *appinfo_db = NULL;
+       char *alias_id = NULL;
 
        /*open db*/
        ret = db_util_open(MANIFEST_DB, &appinfo_db, 0);
        retvm_if(ret != SQLITE_OK, ret = PMINFO_R_ERROR, "connect db [%s] failed!", MANIFEST_DB);
 
-       /*check appid exist on db*/
-       query = sqlite3_mprintf("select exists(select * from package_app_info where app_id=%Q)", appid);
+       /*Get the alias id*/
+       alias_id = __get_aliasid_from_db(appinfo_db,appid);
+
+       /*check alias_id exist on db*/
+       query = sqlite3_mprintf("select exists(select * from package_app_info where app_id=%Q and app_disable='false')", alias_id);
        ret = __exec_db_query(appinfo_db, query, _pkgmgrinfo_validate_cb, (void *)&exist);
        sqlite3_free(query);
        tryvm_if(ret == -1, ret = PMINFO_R_ERROR, "sqlite3_exec fail");
        if (exist == 0) {
-               _LOGS("Appid[%s] not found in DB", appid);
+               _LOGS("Appid[%s] not found in DB", alias_id);
                ret = PMINFO_R_ERROR;
                goto catch;
        }
@@ -2583,124 +1348,68 @@ API int pkgmgrinfo_appinfo_get_appinfo(const char *appid, pkgmgrinfo_appinfo_h *
        appinfo = (pkgmgr_appinfo_x *)calloc(1, sizeof(pkgmgr_appinfo_x));
        tryvm_if(appinfo == NULL, ret = PMINFO_R_ERROR, "Failed to allocate memory for appinfo");
 
-       /*check app_component from DB*/
-       query = sqlite3_mprintf("select app_component, package from package_app_info where app_id=%Q", appid);
-       ret = __exec_db_query(appinfo_db, query, __appcomponent_cb, (void *)appinfo);
-       sqlite3_free(query);
-       tryvm_if(ret == -1, ret = PMINFO_R_ERROR, "App Info DB Information retrieval failed");
-
        /*calloc app_component*/
-       if (appinfo->app_component == PMINFO_UI_APP) {
-               appinfo->uiapp_info = (uiapplication_x *)calloc(1, sizeof(uiapplication_x));
-               tryvm_if(appinfo->uiapp_info == NULL, ret = PMINFO_R_ERROR, "Failed to allocate memory for uiapp info");
-       } else {
-               appinfo->svcapp_info = (serviceapplication_x *)calloc(1, sizeof(serviceapplication_x));
-               tryvm_if(appinfo->svcapp_info == NULL, ret = PMINFO_R_ERROR, "Failed to allocate memory for svcapp info");
-       }
+       appinfo->uiapp_info = (uiapplication_x *)calloc(1, sizeof(uiapplication_x));
+       tryvm_if(appinfo->uiapp_info == NULL, ret = PMINFO_R_ERROR, "Failed to allocate memory for uiapp info");
+
        appinfo->locale = strdup(locale);
 
        /*populate app_info from DB*/
-       query = sqlite3_mprintf("select * from package_app_info where app_id=%Q ", appid);
+       query = sqlite3_mprintf("select * from package_app_info where app_id=%Q and app_disable='false' ", alias_id);
        ret = __exec_db_query(appinfo_db, query, __appinfo_cb, (void *)appinfo);
        sqlite3_free(query);
        tryvm_if(ret == -1, ret = PMINFO_R_ERROR, "App Info DB Information retrieval failed");
 
-       query = sqlite3_mprintf("select * from package_app_localized_info where app_id=%Q and app_locale=%Q", appid, locale);
+       query = sqlite3_mprintf("select * from package_app_localized_info where app_id=%Q and app_locale=%Q", alias_id, locale);
        ret = __exec_db_query(appinfo_db, query, __appinfo_cb, (void *)appinfo);
        sqlite3_free(query);
        tryvm_if(ret == -1, ret = PMINFO_R_ERROR, "App Info DB Information retrieval failed");
 
        /*Also store the values corresponding to default locales*/
-       query = sqlite3_mprintf("select * from package_app_localized_info where app_id=%Q and app_locale=%Q", appid, DEFAULT_LOCALE);
+       query = sqlite3_mprintf("select * from package_app_localized_info where app_id=%Q and app_locale=%Q", alias_id, DEFAULT_LOCALE);
        ret = __exec_db_query(appinfo_db, query, __appinfo_cb, (void *)appinfo);
        sqlite3_free(query);
        tryvm_if(ret == -1, ret = PMINFO_R_ERROR, "App Localized Info DB Information retrieval failed");
 
        /*Populate app category*/
-       query = sqlite3_mprintf("select * from package_app_app_category where app_id=%Q", appid);
+       query = sqlite3_mprintf("select * from package_app_app_category where app_id=%Q", alias_id);
        ret = __exec_db_query(appinfo_db, query, __appinfo_cb, (void *)appinfo);
        sqlite3_free(query);
        tryvm_if(ret == -1, ret = PMINFO_R_ERROR, "App Category Info DB Information retrieval failed");
 
        /*Populate app metadata*/
-       query = sqlite3_mprintf("select * from package_app_app_metadata where app_id=%Q", appid);
+       query = sqlite3_mprintf("select * from package_app_app_metadata where app_id=%Q", alias_id);
        ret = __exec_db_query(appinfo_db, query, __appinfo_cb, (void *)appinfo);
        sqlite3_free(query);
        tryvm_if(ret == -1, ret = PMINFO_R_ERROR, "App Metadata Info DB Information retrieval failed");
 
        /*Populate app permission*/
-       query = sqlite3_mprintf("select * from package_app_app_permission where app_id=%Q", appid);
+       query = sqlite3_mprintf("select * from package_app_app_permission where app_id=%Q", alias_id);
        ret = __exec_db_query(appinfo_db, query, __appinfo_cb, (void *)appinfo);
        sqlite3_free(query);
        tryvm_if(ret == -1, ret = PMINFO_R_ERROR, "App permission Info DB Information retrieval failed");
 
        /*store setting notification icon section*/
-       query = sqlite3_mprintf("select * from package_app_icon_section_info where app_id=%Q", appid);
+       query = sqlite3_mprintf("select * from package_app_icon_section_info where app_id=%Q", alias_id);
        ret = __exec_db_query(appinfo_db, query, __appinfo_cb, (void *)appinfo);
        sqlite3_free(query);
        tryvm_if(ret == -1, ret = PMINFO_R_ERROR, "App icon section Info DB Information retrieval failed");
 
        /*store app preview image info*/
-       query = sqlite3_mprintf("select app_image_section, app_image from package_app_image_info where app_id=%Q", appid);
+       query = sqlite3_mprintf("select app_image_section, app_image from package_app_image_info where app_id=%Q", alias_id);
        ret = __exec_db_query(appinfo_db, query, __appinfo_cb, (void *)appinfo);
        sqlite3_free(query);
        tryvm_if(ret == -1, ret = PMINFO_R_ERROR, "App image Info DB Information retrieval failed");
 
        ret = __appinfo_check_installed_storage(appinfo);
-       tryvm_if(ret == -1, ret = PMINFO_R_ERROR, "[%s] is installed external, but is not in mmc", appinfo->package);
+       tryvm_if(ret == -1, ret = PMINFO_R_ERROR, "[%s] is installed external, but is not in mmc", appinfo->uiapp_info->package);
 
-       switch (appinfo->app_component) {
-       case PMINFO_UI_APP:
-               if (appinfo->uiapp_info->label) {
-                       LISTHEAD(appinfo->uiapp_info->label, tmp1);
-                       appinfo->uiapp_info->label = tmp1;
-               }
-               if (appinfo->uiapp_info->icon) {
-                       LISTHEAD(appinfo->uiapp_info->icon, tmp2);
-                       appinfo->uiapp_info->icon = tmp2;
-               }
-               if (appinfo->uiapp_info->category) {
-                       LISTHEAD(appinfo->uiapp_info->category, tmp3);
-                       appinfo->uiapp_info->category = tmp3;
-               }
-               if (appinfo->uiapp_info->metadata) {
-                       LISTHEAD(appinfo->uiapp_info->metadata, tmp4);
-                       appinfo->uiapp_info->metadata = tmp4;
-               }
-               if (appinfo->uiapp_info->permission) {
-                       LISTHEAD(appinfo->uiapp_info->permission, tmp5);
-                       appinfo->uiapp_info->permission = tmp5;
-               }
-               if (appinfo->uiapp_info->image) {
-                       LISTHEAD(appinfo->uiapp_info->image, tmp6);
-                       appinfo->uiapp_info->image = tmp6;
-               }
-               break;
-       case PMINFO_SVC_APP:
-               if (appinfo->svcapp_info->label) {
-                       LISTHEAD(appinfo->svcapp_info->label, tmp1);
-                       appinfo->svcapp_info->label = tmp1;
-               }
-               if (appinfo->svcapp_info->icon) {
-                       LISTHEAD(appinfo->svcapp_info->icon, tmp2);
-                       appinfo->svcapp_info->icon = tmp2;
-               }
-               if (appinfo->svcapp_info->category) {
-                       LISTHEAD(appinfo->svcapp_info->category, tmp3);
-                       appinfo->svcapp_info->category = tmp3;
-               }
-               if (appinfo->svcapp_info->metadata) {
-                       LISTHEAD(appinfo->svcapp_info->metadata, tmp4);
-                       appinfo->svcapp_info->metadata = tmp4;
-               }
-               if (appinfo->svcapp_info->permission) {
-                       LISTHEAD(appinfo->svcapp_info->permission, tmp5);
-                       appinfo->svcapp_info->permission = tmp5;
-               }
-               break;
-       default:
-               break;
-       }
+       SAFE_LISTHEAD(appinfo->uiapp_info->label, tmp1);
+       SAFE_LISTHEAD(appinfo->uiapp_info->icon, tmp2);
+       SAFE_LISTHEAD(appinfo->uiapp_info->category, tmp3);
+       SAFE_LISTHEAD(appinfo->uiapp_info->metadata, tmp4);
+       SAFE_LISTHEAD(appinfo->uiapp_info->permission, tmp5);
+       SAFE_LISTHEAD(appinfo->uiapp_info->image, tmp6);
 
        ret = PMINFO_R_OK;
 
@@ -2713,10 +1422,8 @@ catch:
        }
 
        sqlite3_close(appinfo_db);
-       if (locale) {
-               free(locale);
-               locale = NULL;
-       }
+       FREE_AND_NULL(locale);
+       FREE_AND_NULL(alias_id);
        return ret;
 }
 
@@ -2727,10 +1434,7 @@ API int pkgmgrinfo_appinfo_get_appid(pkgmgrinfo_appinfo_h  handle, char **appid)
        retvm_if(appid == NULL, PMINFO_R_EINVAL, "Argument supplied to hold return value is NULL");
        pkgmgr_appinfo_x *info = (pkgmgr_appinfo_x *)handle;
 
-       if (info->app_component == PMINFO_UI_APP)
-               *appid = (char *)info->uiapp_info->appid;
-       else if (info->app_component == PMINFO_SVC_APP)
-               *appid = (char *)info->svcapp_info->appid;
+       *appid = (char *)info->uiapp_info->appid;
 
        return PMINFO_R_OK;
 }
@@ -2741,7 +1445,7 @@ API int pkgmgrinfo_appinfo_get_pkgname(pkgmgrinfo_appinfo_h  handle, char **pkg_
        retvm_if(pkg_name == NULL, PMINFO_R_EINVAL, "Argument supplied to hold return value is NULL");
        pkgmgr_appinfo_x *info = (pkgmgr_appinfo_x *)handle;
 
-       *pkg_name = (char *)info->package;
+       *pkg_name = (char *)info->uiapp_info->package;
 
        return PMINFO_R_OK;
 }
@@ -2752,7 +1456,18 @@ API int pkgmgrinfo_appinfo_get_pkgid(pkgmgrinfo_appinfo_h  handle, char **pkgid)
        retvm_if(pkgid == NULL, PMINFO_R_EINVAL, "Argument supplied to hold return value is NULL");
        pkgmgr_appinfo_x *info = (pkgmgr_appinfo_x *)handle;
 
-       *pkgid = (char *)info->package;
+       *pkgid = (char *)info->uiapp_info->package;
+
+       return PMINFO_R_OK;
+}
+
+API int pkgmgrinfo_appinfo_get_pkgtype(pkgmgrinfo_appinfo_h  handle, char **pkgtype)
+{
+       retvm_if(handle == NULL, PMINFO_R_EINVAL, "appinfo handle is NULL");
+       retvm_if(pkgtype == NULL, PMINFO_R_EINVAL, "Argument supplied to hold return value is NULL");
+       pkgmgr_appinfo_x *info = (pkgmgr_appinfo_x *)handle;
+
+       *pkgtype = (char *)info->uiapp_info->package_type;
 
        return PMINFO_R_OK;
 }
@@ -2763,10 +1478,7 @@ API int pkgmgrinfo_appinfo_get_exec(pkgmgrinfo_appinfo_h  handle, char **exec)
        retvm_if(exec == NULL, PMINFO_R_EINVAL, "Argument supplied to hold return value is NULL");
        pkgmgr_appinfo_x *info = (pkgmgr_appinfo_x *)handle;
 
-       if (info->app_component == PMINFO_UI_APP)
-               *exec = (char *)info->uiapp_info->exec;
-       if (info->app_component == PMINFO_SVC_APP)
-               *exec = (char *)info->svcapp_info->exec;
+       *exec = (char *)info->uiapp_info->exec;
 
        return PMINFO_R_OK;
 }
@@ -2776,40 +1488,39 @@ API int pkgmgrinfo_appinfo_get_icon(pkgmgrinfo_appinfo_h  handle, char **icon)
 {
        retvm_if(handle == NULL, PMINFO_R_EINVAL, "appinfo handle is NULL");
        retvm_if(icon == NULL, PMINFO_R_EINVAL, "Argument supplied to hold return value is NULL");
-        char *locale = NULL;
-        icon_x *ptr = NULL;
-        icon_x *start = NULL;
-        *icon = NULL;
-
-        pkgmgr_appinfo_x *info = (pkgmgr_appinfo_x *)handle;
-               locale = info->locale;
-               retvm_if(locale == NULL, PMINFO_R_ERROR, "manifest locale is NULL");
-
-        if (info->app_component == PMINFO_UI_APP)
-                start = info->uiapp_info->icon;
-        if (info->app_component == PMINFO_SVC_APP)
-                start = info->svcapp_info->icon;
-        for(ptr = start; ptr != NULL; ptr = ptr->next)
-        {
-                if (ptr->lang) {
-                        if (strcmp(ptr->lang, locale) == 0) {
-                                                       if (ptr->text) {
-                                *icon = (char *)ptr->text;
-                                if (strcasecmp(*icon, "(null)") == 0) {
-                                        locale = DEFAULT_LOCALE;
-                                        continue;
-                                } else
-                                        break;
-                                                       } else {
-                                                               locale = DEFAULT_LOCALE;
-                                                               continue;
-                                                       }
-                        } else if (strcmp(ptr->lang, DEFAULT_LOCALE) == 0) {
-                                *icon = (char *)ptr->text;
-                                break;
-                        }
-                }
-        }
+
+    char *locale = NULL;
+    icon_x *ptr = NULL;
+    icon_x *start = NULL;
+    *icon = NULL;
+
+    pkgmgr_appinfo_x *info = (pkgmgr_appinfo_x *)handle;
+       locale = info->locale;
+       retvm_if(locale == NULL, PMINFO_R_ERROR, "manifest locale is NULL");
+
+       start = info->uiapp_info->icon;
+
+    for(ptr = start; ptr != NULL; ptr = ptr->next)
+    {
+            if (ptr->lang) {
+                    if (strcmp(ptr->lang, locale) == 0) {
+                                               if (ptr->text) {
+                            *icon = (char *)ptr->text;
+                            if (strcasecmp(*icon, PKGMGR_PARSER_EMPTY_STR) == 0) {
+                                    locale = DEFAULT_LOCALE;
+                                    continue;
+                            } else
+                                    break;
+                                               } else {
+                                                       locale = DEFAULT_LOCALE;
+                                                       continue;
+                                               }
+                    } else if (strcmp(ptr->lang, DEFAULT_LOCALE) == 0) {
+                            *icon = (char *)ptr->text;
+                            break;
+                    }
+            }
+    }
        return PMINFO_R_OK;
 }
 
@@ -2818,6 +1529,7 @@ API int pkgmgrinfo_appinfo_get_label(pkgmgrinfo_appinfo_h  handle, char **label)
 {
        retvm_if(handle == NULL, PMINFO_R_EINVAL, "appinfo handle is NULL");
        retvm_if(label == NULL, PMINFO_R_EINVAL, "Argument supplied to hold return value is NULL");
+       int ret = 0;
        char *locale = NULL;
        label_x *ptr = NULL;
        label_x *start = NULL;
@@ -2827,17 +1539,18 @@ API int pkgmgrinfo_appinfo_get_label(pkgmgrinfo_appinfo_h  handle, char **label)
        locale = info->locale;
        retvm_if(locale == NULL, PMINFO_R_ERROR, "manifest locale is NULL");
 
-       if (info->app_component == PMINFO_UI_APP)
-               start = info->uiapp_info->label;
-       if (info->app_component == PMINFO_SVC_APP)
-               start = info->svcapp_info->label;
+       ret = __sat_ui_get_label(handle, label);
+       retvm_if(ret == PMINFO_R_OK, PMINFO_R_OK, "sat ui(%s) is enabled", (char *)info->uiapp_info->appid);
+
+       start = info->uiapp_info->label;
+
        for(ptr = start; ptr != NULL; ptr = ptr->next)
        {
                if (ptr->lang) {
                        if (strcmp(ptr->lang, locale) == 0) {
                                if (ptr->text) {
                                        *label = (char *)ptr->text;
-                                       if (strcasecmp(*label, "(null)") == 0) {
+                                       if (strcasecmp(*label, PKGMGR_PARSER_EMPTY_STR) == 0) {
                                                locale = DEFAULT_LOCALE;
                                                continue;
                                        } else
@@ -2849,7 +1562,7 @@ API int pkgmgrinfo_appinfo_get_label(pkgmgrinfo_appinfo_h  handle, char **label)
                        } else if (strncasecmp(ptr->lang, locale, 2) == 0) {
                                *label = (char *)ptr->text;
                                if (ptr->text) {
-                                       if (strcasecmp(*label, "(null)") == 0) {
+                                       if (strcasecmp(*label, PKGMGR_PARSER_EMPTY_STR) == 0) {
                                                        locale = DEFAULT_LOCALE;
                                                        continue;
                                        } else
@@ -2872,14 +1585,8 @@ API int pkgmgrinfo_appinfo_get_component(pkgmgrinfo_appinfo_h  handle, pkgmgrinf
 {
        retvm_if(handle == NULL, PMINFO_R_EINVAL, "appinfo handle is NULL");
        retvm_if(component == NULL, PMINFO_R_EINVAL, "Argument supplied to hold return value is NULL");
-       pkgmgr_appinfo_x *info = (pkgmgr_appinfo_x *)handle;
 
-       if (info->app_component == PMINFO_UI_APP)
-               *component = PMINFO_UI_APP;
-       else if (info->app_component == PMINFO_SVC_APP)
-               *component = PMINFO_SVC_APP;
-       else
-               return PMINFO_R_ERROR;
+       *component = PMINFO_UI_APP;
 
        return PMINFO_R_OK;
 }
@@ -2890,10 +1597,7 @@ API int pkgmgrinfo_appinfo_get_apptype(pkgmgrinfo_appinfo_h  handle, char **app_
        retvm_if(app_type == NULL, PMINFO_R_EINVAL, "Argument supplied to hold return value is NULL");
        pkgmgr_appinfo_x *info = (pkgmgr_appinfo_x *)handle;
 
-       if (info->app_component == PMINFO_UI_APP)
-               *app_type = (char *)info->uiapp_info->type;
-       if (info->app_component == PMINFO_SVC_APP)
-               *app_type = (char *)info->svcapp_info->type;
+       *app_type = (char *)info->uiapp_info->type;
 
        return PMINFO_R_OK;
 }
@@ -3077,12 +1781,7 @@ API int pkgmgrinfo_appinfo_get_permission_type(pkgmgrinfo_appinfo_h  handle, pkg
        char *val = NULL;
        pkgmgr_appinfo_x *info = (pkgmgr_appinfo_x *)handle;
 
-       if (info->app_component == PMINFO_UI_APP)
-               val = info->uiapp_info->permission_type;
-       else if (info->app_component == PMINFO_SVC_APP)
-               val = info->svcapp_info->permission_type;
-       else
-               return PMINFO_R_ERROR;
+       val = (char*)info->uiapp_info->permission_type;
 
        if (strcmp(val, "signature") == 0)
                *permission = PMINFO_PERMISSION_SIGNATURE;
@@ -3148,10 +1847,19 @@ API int pkgmgrinfo_appinfo_get_effectimage(pkgmgrinfo_appinfo_h  handle, char **
        retvm_if(landscape_img == NULL, PMINFO_R_EINVAL, "Argument supplied to hold return value is NULL");
        pkgmgr_appinfo_x *info = (pkgmgr_appinfo_x *)handle;
 
-       if (info->app_component == PMINFO_UI_APP){
-               *portrait_img = (char *)info->uiapp_info->portraitimg;
-               *landscape_img = (char *)info->uiapp_info->landscapeimg;
-       }
+       *portrait_img = (char *)info->uiapp_info->portraitimg;
+       *landscape_img = (char *)info->uiapp_info->landscapeimg;
+
+       return PMINFO_R_OK;
+}
+
+API int pkgmgrinfo_appinfo_get_effectimage_type(pkgmgrinfo_appinfo_h  handle, char **effectimg_type)
+{
+       retvm_if(handle == NULL, PMINFO_R_EINVAL, "appinfo handle is NULL");
+       retvm_if(effectimg_type == NULL, PMINFO_R_EINVAL, "Argument supplied to hold return value is NULL");
+       pkgmgr_appinfo_x *info = (pkgmgr_appinfo_x *)handle;
+
+       *effectimg_type = (char *)info->uiapp_info->effectimage_type;
 
        return PMINFO_R_OK;
 }
@@ -3174,26 +1882,32 @@ API int pkgmgrinfo_appinfo_get_localed_label(const char *appid, const char *loca
        int ret = -1;
        char *val = NULL;
        char *localed_label = NULL;
+       char *query = NULL;
 
        retvm_if(appid == NULL || locale == NULL || label == NULL, PMINFO_R_EINVAL, "Argument is NULL");
 
        sqlite3_stmt *stmt = NULL;
        sqlite3 *pkgmgr_parser_db = NULL;
+       char *alias_id = NULL;
 
-       char *query = sqlite3_mprintf("select app_label from package_app_localized_info where app_id=%Q and app_locale=%Q", appid, locale);
-
-       ret = sqlite3_open(MANIFEST_DB, &pkgmgr_parser_db);
+       ret = db_util_open(MANIFEST_DB, &pkgmgr_parser_db, 0);
        if (ret != SQLITE_OK) {
-               _LOGE("open fail\n");
-               sqlite3_free(query);
+               _LOGE("DB open fail\n");
                return -1;
        }
 
+       /*Get the alias id*/
+       alias_id = __get_aliasid_from_db(pkgmgr_parser_db,appid);
+
+       query = sqlite3_mprintf("select app_label from package_app_localized_info where app_id=%Q and app_locale=%Q", alias_id, locale);
+
+
        ret = sqlite3_prepare_v2(pkgmgr_parser_db, query, strlen(query), &stmt, NULL);
        if (ret != SQLITE_OK) {
                _LOGE("prepare_v2 fail\n");
                sqlite3_close(pkgmgr_parser_db);
                sqlite3_free(query);
+               FREE_AND_NULL(alias_id);
                return -1;
        }
 
@@ -3227,15 +1941,16 @@ API int pkgmgrinfo_appinfo_get_localed_label(const char *appid, const char *loca
        /*find default label when exact matching failed*/
        if (localed_label == NULL) {
                sqlite3_free(query);
-               query = sqlite3_mprintf("select app_label from package_app_localized_info where app_id=%Q and app_locale=%Q", appid, DEFAULT_LOCALE);
+               query = sqlite3_mprintf("select app_label from package_app_localized_info where app_id=%Q and app_locale=%Q", alias_id, DEFAULT_LOCALE);
                ret = sqlite3_prepare_v2(pkgmgr_parser_db, query, strlen(query), &stmt, NULL);
                if (ret != SQLITE_OK) {
                        _LOGE("prepare_v2 fail\n");
                        sqlite3_close(pkgmgr_parser_db);
                        sqlite3_free(query);
+                       FREE_AND_NULL(alias_id);
                        return -1;
                }
-               
+
                cols = sqlite3_column_count(stmt);
                while(1)
                {
@@ -3246,16 +1961,11 @@ API int pkgmgrinfo_appinfo_get_localed_label(const char *appid, const char *loca
                                        val = (char*)sqlite3_column_text(stmt, col);
                                        if (val == NULL)
                                                break;
-               
                                        _LOGE("success find default localed_label[%s]\n", val);
-               
                                        localed_label = strdup(val);
                                        if (localed_label == NULL)
                                                break;
-               
                                        *label = localed_label;
-               
-               
                                }
                                ret = 0;
                        } else {
@@ -3265,73 +1975,234 @@ API int pkgmgrinfo_appinfo_get_localed_label(const char *appid, const char *loca
 
        }
 
+       FREE_AND_NULL(alias_id);
        sqlite3_finalize(stmt);
        sqlite3_close(pkgmgr_parser_db);
        sqlite3_free(query);
+
+       if (localed_label == NULL) {
+               return PMINFO_R_ERROR;
+       } else {
+               return PMINFO_R_OK;
+       }
+}
+
+API int pkgmgrinfo_appinfo_get_metadata_value(pkgmgrinfo_appinfo_h handle, const char *metadata_key, char **metadata_value)
+{
+       retvm_if(handle == NULL, PMINFO_R_EINVAL, "appinfo handle is NULL");
+       retvm_if(metadata_key == NULL, PMINFO_R_EINVAL, "metadata_key is NULL");
+       retvm_if(metadata_value == NULL, PMINFO_R_EINVAL, "metadata_value is NULL");
+
+       metadata_x *ptr = NULL;
+       pkgmgr_appinfo_x *info = (pkgmgr_appinfo_x *)handle;
+
+       ptr = info->uiapp_info->metadata;
+
+       for (; ptr; ptr = ptr->next) {
+               if (ptr->key) {
+                       if (strcasecmp(ptr->key, metadata_key) == 0)
+                       {
+                               *metadata_value = (char*)ptr->value;
+                               return PMINFO_R_OK;
+                       }
+               }
+       }
+
+       return PMINFO_R_EINVAL;
+}
+
+API int pkgmgrinfo_appinfo_get_multi_instance_mainid(pkgmgrinfo_appinfo_h  handle, char **multi_instance_mainid)
+{
+       retvm_if(handle == NULL, PMINFO_R_EINVAL, "appinfo handle is NULL");
+       retvm_if(multi_instance_mainid == NULL, PMINFO_R_EINVAL, "Argument supplied to hold return value is NULL");
+       pkgmgr_appinfo_x *info = (pkgmgr_appinfo_x *)handle;
+
+       *multi_instance_mainid = (char *)info->uiapp_info->multi_instance_mainid;
+
+       return PMINFO_R_OK;
+}
+
+API int pkgmgrinfo_appinfo_get_datacontrol_info(const char *providerid, const char *type, char **appid, char **access)
+{
+       retvm_if(providerid == NULL, PMINFO_R_EINVAL, "Argument supplied is NULL\n");
+       retvm_if(type == NULL, PMINFO_R_EINVAL, "Argument supplied is NULL\n");
+       retvm_if(appid == NULL, PMINFO_R_EINVAL, "Argument supplied to hold return value is NULL\n");
+       retvm_if(access == NULL, PMINFO_R_EINVAL, "Argument supplied to hold return value is NULL\n");
+
+       int ret = PMINFO_R_OK;
+       char *query = NULL;
+       sqlite3 *appinfo_db = NULL;
+       sqlite3_stmt *stmt = NULL;
+
+       /*open db*/
+       ret = db_util_open(MANIFEST_DB, &appinfo_db, 0);
+       retvm_if(ret != SQLITE_OK, ret = PMINFO_R_ERROR, "connect db [%s] failed!", MANIFEST_DB);
+
+       /*Start constructing query*/
+       query = sqlite3_mprintf("select * from package_app_data_control where providerid=%Q and type=%Q", providerid, type);
+
+       /*prepare query*/
+       ret = sqlite3_prepare_v2(appinfo_db, query, strlen(query), &stmt, NULL);
+       tryvm_if(ret != PMINFO_R_OK, ret = PMINFO_R_ERROR, "sqlite3_prepare_v2 failed[%s]\n", query);
+
+       /*step query*/
+       ret = sqlite3_step(stmt);
+       tryvm_if((ret != SQLITE_ROW) || (ret == SQLITE_DONE), ret = PMINFO_R_ERROR, "No records found");
+
+       *appid = strdup((char *)sqlite3_column_text(stmt, 0));
+       *access = strdup((char *)sqlite3_column_text(stmt, 2));
+
+       ret = PMINFO_R_OK;
+
+catch:
+       sqlite3_free(query);
+       sqlite3_finalize(stmt);
+       sqlite3_close(appinfo_db);
+       return ret;
+}
+
+API int pkgmgrinfo_appinfo_get_datacontrol_appid(const char *providerid, char **appid)
+{
+       retvm_if(providerid == NULL, PMINFO_R_EINVAL, "Argument supplied is NULL\n");
+       retvm_if(appid == NULL, PMINFO_R_EINVAL, "Argument supplied to hold return value is NULL\n");
+
+       int ret = PMINFO_R_OK;
+       char *query = NULL;
+       sqlite3 *appinfo_db = NULL;
+       sqlite3_stmt *stmt = NULL;
+
+       /*open db*/
+       ret = db_util_open(MANIFEST_DB, &appinfo_db, 0);
+       retvm_if(ret != SQLITE_OK, ret = PMINFO_R_ERROR, "connect db [%s] failed!", MANIFEST_DB);
+
+       /*Start constructing query*/
+       query = sqlite3_mprintf("select * from package_app_data_control where providerid=%Q", providerid);
+
+       /*prepare query*/
+       ret = sqlite3_prepare_v2(appinfo_db, query, strlen(query), &stmt, NULL);
+       tryvm_if(ret != PMINFO_R_OK, ret = PMINFO_R_ERROR, "sqlite3_prepare_v2 failed[%s]\n", query);
+
+       /*step query*/
+       ret = sqlite3_step(stmt);
+       tryvm_if((ret != SQLITE_ROW) || (ret == SQLITE_DONE), ret = PMINFO_R_ERROR, "No records found");
+
+       *appid = strdup((char *)sqlite3_column_text(stmt, 0));
+
+       ret = PMINFO_R_OK;
+
+catch:
+       sqlite3_free(query);
+       sqlite3_finalize(stmt);
+       sqlite3_close(appinfo_db);
        return ret;
+}
+
+API int pkgmgrinfo_appinfo_get_support_mode(pkgmgrinfo_appinfo_h  handle, int *support_mode)
+{
+       retvm_if(handle == NULL, PMINFO_R_EINVAL, "appinfo handle is NULL");
+       retvm_if(support_mode == NULL, PMINFO_R_EINVAL, "Argument supplied to hold return value is NULL");
+
+       pkgmgr_appinfo_x *info = (pkgmgr_appinfo_x *)handle;
+       if (info->uiapp_info->support_mode)
+               *support_mode = atoi(info->uiapp_info->support_mode);
+       else
+               *support_mode = 0;
+
+       return PMINFO_R_OK;
+}
+
+API int pkgmgrinfo_appinfo_get_support_feature(pkgmgrinfo_appinfo_h  handle, int *support_feature)
+{
+       retvm_if(handle == NULL, PMINFO_R_EINVAL, "appinfo handle is NULL");
+       retvm_if(support_feature == NULL, PMINFO_R_EINVAL, "Argument supplied to hold return value is NULL");
+
+       pkgmgr_appinfo_x *info = (pkgmgr_appinfo_x *)handle;
+       if (info->uiapp_info->support_feature)
+               *support_feature = atoi(info->uiapp_info->support_feature);
+       else
+               *support_feature = 0;
 
+       return PMINFO_R_OK;
 }
 
-API int pkgmgrinfo_appinfo_is_category_exist(pkgmgrinfo_appinfo_h handle, const char *category, bool *exist)
+API int pkgmgrinfo_appinfo_get_uginfo(const char *ug_name, pkgmgrinfo_appinfo_h *handle)
 {
-       retvm_if(handle == NULL, PMINFO_R_EINVAL, "appinfo handle is NULL");
-       retvm_if(category == NULL, PMINFO_R_EINVAL, "category is NULL");
-       retvm_if(exist == NULL, PMINFO_R_EINVAL, "exist is NULL");
+       retvm_if(ug_name == NULL, PMINFO_R_EINVAL, "ug_name is NULL");
+       retvm_if(handle == NULL, PMINFO_R_EINVAL, "Argument supplied to hold return value is NULL");
 
+       pkgmgr_appinfo_x *appinfo = NULL;
        int ret = -1;
-       category_x *ptr = NULL;
-       pkgmgr_appinfo_x *info = (pkgmgr_appinfo_x *)handle;
+       char *query = NULL;
+       sqlite3 *appinfo_db = NULL;
 
-       *exist = 0;
+       /*open db*/
+       ret = db_util_open(MANIFEST_DB, &appinfo_db, 0);
+       retvm_if(ret != SQLITE_OK, ret = PMINFO_R_ERROR, "connect db [%s] failed!", MANIFEST_DB);
 
-       if (info->app_component == PMINFO_UI_APP)
-               ptr = info->uiapp_info->category;
-       else if (info->app_component == PMINFO_SVC_APP)
-               ptr = info->svcapp_info->category;
-       else
-               return PMINFO_R_EINVAL;
+       /*calloc appinfo*/
+       appinfo = (pkgmgr_appinfo_x *)calloc(1, sizeof(pkgmgr_appinfo_x));
+       tryvm_if(appinfo == NULL, ret = PMINFO_R_ERROR, "Failed to allocate memory for appinfo");
 
-       for (; ptr; ptr = ptr->next) {
-               if (ptr->name) {
-                       if (strcasecmp(ptr->name, category) == 0)
-                       {
-                               *exist = 1;
-                               break;
-                       }
-               }
+       /*calloc app_component*/
+       appinfo->uiapp_info = (uiapplication_x *)calloc(1, sizeof(uiapplication_x));
+       tryvm_if(appinfo->uiapp_info == NULL, ret = PMINFO_R_ERROR, "Failed to allocate memory for uiapp info");
+
+       /*populate app_info from DB*/
+       query = sqlite3_mprintf("select * from package_app_info where app_ui_gadget='true' and app_exec like '%%%s'", ug_name);
+       ret = __exec_db_query(appinfo_db, query, __appinfo_cb, (void *)appinfo);
+       sqlite3_free(query);
+       tryvm_if(ret == -1, ret = PMINFO_R_ERROR, "App Info DB Information retrieval failed");
+
+       ret = __appinfo_check_installed_storage(appinfo);
+       tryvm_if(ret == -1, ret = PMINFO_R_ERROR, "[%s] is installed external, but is not in mmc", appinfo->uiapp_info->package);
+
+       ret = PMINFO_R_OK;
+
+catch:
+       if (ret == PMINFO_R_OK)
+               *handle = (void*)appinfo;
+       else {
+               *handle = NULL;
+               __cleanup_appinfo(appinfo);
        }
 
-       return PMINFO_R_OK;
+       sqlite3_close(appinfo_db);
+
+       return ret;
 }
 
-API int pkgmgrinfo_appinfo_get_metadata_value(pkgmgrinfo_appinfo_h handle, const char *metadata_key, char **metadata_value)
+/*Get the alias id for an appid from pkgmgr DB*/
+API int  pkgmgrinfo_appinfo_get_aliasid(const char *appid, char **alias_id)
 {
-       retvm_if(handle == NULL, PMINFO_R_EINVAL, "appinfo handle is NULL");
-       retvm_if(metadata_key == NULL, PMINFO_R_EINVAL, "metadata_key is NULL");
-       retvm_if(metadata_value == NULL, PMINFO_R_EINVAL, "metadata_value is NULL");
 
-       int ret = -1;
-       metadata_x *ptr = NULL;
-       pkgmgr_appinfo_x *info = (pkgmgr_appinfo_x *)handle;
+       sqlite3 *appinfo_db = NULL;
+       int ret = PMINFO_R_OK;
 
-       if (info->app_component == PMINFO_UI_APP)
-               ptr = info->uiapp_info->metadata;
-       else if (info->app_component == PMINFO_SVC_APP)
-               ptr = info->svcapp_info->metadata;
-       else
-               return PMINFO_R_EINVAL;
+       retvm_if(appid == NULL, PMINFO_R_EINVAL, "appid is NULL");
+       retvm_if(alias_id == NULL, PMINFO_R_EINVAL, "Argument supplied to hold return value is NULL");
 
-       for (; ptr; ptr = ptr->next) {
-               if (ptr->key) {
-                       if (strcasecmp(ptr->key, metadata_key) == 0)
-                       {
-                               *metadata_value = ptr->value;
-                               return PMINFO_R_OK;
-                       }
-               }
-       }
+       /*open db */
+       ret = db_util_open(MANIFEST_DB, &appinfo_db, 0);
+       tryvm_if(ret != SQLITE_OK, ret = PMINFO_R_ERROR, "connect db [%s] failed!", MANIFEST_DB);
 
-       return PMINFO_R_EINVAL;
+       *alias_id = __get_aliasid_from_db(appinfo_db,appid);
+catch:
+
+       sqlite3_close(appinfo_db);
+       return ret;
+}
+
+API int pkgmgrinfo_appinfo_get_installed_time(pkgmgrinfo_appinfo_h handle, int *installed_time)
+{
+       retvm_if(handle == NULL, PMINFO_R_EINVAL, "appinfo handle is NULL\n");
+       retvm_if(installed_time == NULL, PMINFO_R_EINVAL, "Argument supplied to hold return value is NULL\n");
+       pkgmgr_appinfo_x *info = (pkgmgr_appinfo_x *)handle;
+       if (info->uiapp_info->package_installed_time)
+               *installed_time = atoi(info->uiapp_info->package_installed_time);
+       else
+               return PMINFO_R_ERROR;
+
+       return PMINFO_R_OK;
 }
 
 API int pkgmgrinfo_appinfo_foreach_permission(pkgmgrinfo_appinfo_h handle,
@@ -3342,12 +2213,9 @@ API int pkgmgrinfo_appinfo_foreach_permission(pkgmgrinfo_appinfo_h handle,
        int ret = -1;
        permission_x *ptr = NULL;
        pkgmgr_appinfo_x *info = (pkgmgr_appinfo_x *)handle;
-       if (info->app_component == PMINFO_UI_APP)
-               ptr = info->uiapp_info->permission;
-       else if (info->app_component == PMINFO_SVC_APP)
-               ptr = info->svcapp_info->permission;
-       else
-               return PMINFO_R_EINVAL;
+
+       ptr = info->uiapp_info->permission;
+
        for (; ptr; ptr = ptr->next) {
                if (ptr->value) {
                        ret = permission_func(ptr->value, user_data);
@@ -3366,12 +2234,9 @@ API int pkgmgrinfo_appinfo_foreach_category(pkgmgrinfo_appinfo_h handle,
        int ret = -1;
        category_x *ptr = NULL;
        pkgmgr_appinfo_x *info = (pkgmgr_appinfo_x *)handle;
-       if (info->app_component == PMINFO_UI_APP)
-               ptr = info->uiapp_info->category;
-       else if (info->app_component == PMINFO_SVC_APP)
-               ptr = info->svcapp_info->category;
-       else
-               return PMINFO_R_EINVAL;
+
+       ptr = info->uiapp_info->category;
+
        for (; ptr; ptr = ptr->next) {
                if (ptr->name) {
                        ret = category_func(ptr->name, user_data);
@@ -3390,12 +2255,9 @@ API int pkgmgrinfo_appinfo_foreach_metadata(pkgmgrinfo_appinfo_h handle,
        int ret = -1;
        metadata_x *ptr = NULL;
        pkgmgr_appinfo_x *info = (pkgmgr_appinfo_x *)handle;
-       if (info->app_component == PMINFO_UI_APP)
-               ptr = info->uiapp_info->metadata;
-       else if (info->app_component == PMINFO_SVC_APP)
-               ptr = info->svcapp_info->metadata;
-       else
-               return PMINFO_R_EINVAL;
+
+       ptr = info->uiapp_info->metadata;
+
        for (; ptr; ptr = ptr->next) {
                if (ptr->key) {
                        ret = metadata_func(ptr->key, ptr->value, user_data);
@@ -3423,7 +2285,7 @@ API int pkgmgrinfo_appinfo_foreach_appcontrol(pkgmgrinfo_appinfo_h handle,
        char **uri = NULL;
        char **mime = NULL;
        char **subapp = NULL;
-       appcontrol_x *appcontrol = NULL;
+       appsvc_x *appsvc = NULL;
        manifest_x *mfx = NULL;
        operation_x *op = NULL;
        uri_x *ui = NULL;
@@ -3449,11 +2311,10 @@ API int pkgmgrinfo_appinfo_foreach_appcontrol(pkgmgrinfo_appinfo_h handle,
        mfx = pkgmgr_parser_process_manifest_xml(manifest);
        if (mfx == NULL) {
                _LOGE("Failed to parse package manifest file\n");
-               free(manifest);
-               manifest = NULL;
+               FREE_AND_NULL(manifest);
                return PMINFO_R_ERROR;
        }
-       free(manifest);
+       FREE_AND_NULL(manifest);
        ptr  = calloc(1, sizeof(pkgmgrinfo_appcontrol_x));
        if (ptr == NULL) {
                _LOGE("Out of Memory!!!\n");
@@ -3461,44 +2322,32 @@ API int pkgmgrinfo_appinfo_foreach_appcontrol(pkgmgrinfo_appinfo_h handle,
                return PMINFO_R_ERROR;
        }
        /*Get Operation, Uri, Mime*/
-       switch (component) {
-       case PMINFO_UI_APP:
-               if (mfx->uiapplication) {
-                       if (mfx->uiapplication->appsvc) {
-                               appcontrol = mfx->uiapplication->appsvc;
-                       }
-               }
-               break;
-       case PMINFO_SVC_APP:
-               if (mfx->serviceapplication) {
-                       if (mfx->serviceapplication->appsvc) {
-                               appcontrol = mfx->serviceapplication->appsvc;
-                       }
+       if (mfx->uiapplication) {
+               if (mfx->uiapplication->appsvc) {
+                       appsvc = mfx->uiapplication->appsvc;
                }
-               break;
-       default:
-               break;
        }
-       for (; appcontrol; appcontrol = appcontrol->next) {
-               op = appcontrol->operation;
+
+       for (; appsvc; appsvc = appsvc->next) {
+               op = appsvc->operation;
                for (; op; op = op->next)
                        oc = oc + 1;
-               op = appcontrol->operation;
+               op = appsvc->operation;
 
-               ui = appcontrol->uri;
+               ui = appsvc->uri;
                for (; ui; ui = ui->next)
                        uc = uc + 1;
-               ui = appcontrol->uri;
+               ui = appsvc->uri;
 
-               mi = appcontrol->mime;
+               mi = appsvc->mime;
                for (; mi; mi = mi->next)
                        mc = mc + 1;
-               mi = appcontrol->mime;
+               mi = appsvc->mime;
 
-               sa = appcontrol->subapp;
+               sa = appsvc->subapp;
                for (; sa; sa = sa->next)
                        sc = sc + 1;
-               sa = appcontrol->subapp;
+               sa = appsvc->subapp;
 
                operation = (char **)calloc(oc, sizeof(char *));
                for (i = 0; i < oc; i++) {
@@ -3536,45 +2385,21 @@ API int pkgmgrinfo_appinfo_foreach_appcontrol(pkgmgrinfo_appinfo_h handle,
 
                ret = appcontrol_func((void *)ptr, user_data);
                for (i = 0; i < oc; i++) {
-                       if (operation[i]) {
-                               free(operation[i]);
-                               operation[i] = NULL;
-                       }
-               }
-               if (operation) {
-                       free(operation);
-                       operation = NULL;
+                       FREE_AND_NULL(operation[i]);
                }
+               FREE_AND_NULL(operation);
                for (i = 0; i < uc; i++) {
-                       if (uri[i]) {
-                               free(uri[i]);
-                               uri[i] = NULL;
-                       }
-               }
-               if (uri) {
-                       free(uri);
-                       uri = NULL;
+                       FREE_AND_NULL(uri[i]);
                }
+               FREE_AND_NULL(uri);
                for (i = 0; i < mc; i++) {
-                       if (mime[i]) {
-                               free(mime[i]);
-                               mime[i] = NULL;
-                       }
-               }
-               if (mime) {
-                       free(mime);
-                       mime = NULL;
+                       FREE_AND_NULL(mime[i]);
                }
+               FREE_AND_NULL(mime);
                for (i = 0; i < sc; i++) {
-                       if (subapp[i]) {
-                               free(subapp[i]);
-                               subapp[i] = NULL;
-                       }
-               }
-               if (subapp) {
-                       free(subapp);
-                       subapp = NULL;
+                       FREE_AND_NULL(subapp[i]);
                }
+               FREE_AND_NULL(subapp);
                if (ret < 0)
                        break;
                uc = 0;
@@ -3583,10 +2408,7 @@ API int pkgmgrinfo_appinfo_foreach_appcontrol(pkgmgrinfo_appinfo_h handle,
                sc = 0;
        }
        pkgmgr_parser_free_manifest_xml(mfx);
-       if (ptr) {
-               free(ptr);
-               ptr = NULL;
-       }
+       FREE_AND_NULL(ptr);
        return PMINFO_R_OK;
 }
 
@@ -3667,16 +2489,14 @@ API int pkgmgrinfo_appinfo_is_enabled(pkgmgrinfo_appinfo_h  handle, bool *enable
 {
        retvm_if(handle == NULL, PMINFO_R_EINVAL, "appinfo handle is NULL");
        retvm_if(enabled == NULL, PMINFO_R_EINVAL, "Argument supplied to hold return value is NULL");
+       int ret = 0;
        char *val = NULL;
        pkgmgr_appinfo_x *info = (pkgmgr_appinfo_x *)handle;
-       if (info->app_component == PMINFO_UI_APP)
-               val = (char *)info->uiapp_info->enabled;
-       else if (info->app_component == PMINFO_SVC_APP)
-               val = (char *)info->uiapp_info->enabled;
-       else {
-               _LOGE("invalid component type\n");
-               return PMINFO_R_EINVAL;
-       }
+
+       ret = __sat_ui_is_enabled((char *)info->uiapp_info->appid, enabled);
+       retvm_if(ret == PMINFO_R_OK, PMINFO_R_OK, "sat ui(%s) is enabled", (char *)info->uiapp_info->appid);
+
+       val = (char *)info->uiapp_info->enabled;
 
        if (val) {
                if (strcasecmp(val, "true") == 0)
@@ -3697,14 +2517,7 @@ API int pkgmgrinfo_appinfo_is_onboot(pkgmgrinfo_appinfo_h  handle, bool *onboot)
        char *val = NULL;
        pkgmgr_appinfo_x *info = (pkgmgr_appinfo_x *)handle;
 
-       if (info->app_component == PMINFO_UI_APP)
-               val = (char *)info->uiapp_info->onboot;
-       else if (info->app_component == PMINFO_SVC_APP)
-               val = (char *)info->svcapp_info->onboot;
-       else {
-               _LOGE("invalid component type\n");
-               return PMINFO_R_EINVAL;
-       }
+       val = (char *)info->uiapp_info->onboot;
 
        if (val) {
                if (strcasecmp(val, "true") == 0)
@@ -3717,101 +2530,228 @@ API int pkgmgrinfo_appinfo_is_onboot(pkgmgrinfo_appinfo_h  handle, bool *onboot)
        return PMINFO_R_OK;
 }
 
-API int pkgmgrinfo_appinfo_is_autorestart(pkgmgrinfo_appinfo_h  handle, bool *autorestart)
+API int pkgmgrinfo_appinfo_is_autorestart(pkgmgrinfo_appinfo_h  handle, bool *autorestart)
+{
+       retvm_if(handle == NULL, PMINFO_R_EINVAL, "appinfo handle is NULL");
+       retvm_if(autorestart == NULL, PMINFO_R_EINVAL, "Argument supplied to hold return value is NULL");
+       char *val = NULL;
+       pkgmgr_appinfo_x *info = (pkgmgr_appinfo_x *)handle;
+
+       val = (char *)info->uiapp_info->autorestart;
+
+       if (val) {
+               if (strcasecmp(val, "true") == 0)
+                       *autorestart = 1;
+               else if (strcasecmp(val, "false") == 0)
+                       *autorestart = 0;
+               else
+                       *autorestart = 0;
+       }
+       return PMINFO_R_OK;
+}
+
+API int pkgmgrinfo_appinfo_is_mainapp(pkgmgrinfo_appinfo_h  handle, bool *mainapp)
+{
+       retvm_if(handle == NULL, PMINFO_R_EINVAL, "appinfo handle is NULL");
+       retvm_if(mainapp == NULL, PMINFO_R_EINVAL, "Argument supplied to hold return value is NULL");
+       char *val = NULL;
+       pkgmgr_appinfo_x *info = (pkgmgr_appinfo_x *)handle;
+       val = (char *)info->uiapp_info->mainapp;
+       if (val) {
+               if (strcasecmp(val, "true") == 0)
+                       *mainapp = 1;
+               else if (strcasecmp(val, "false") == 0)
+                       *mainapp = 0;
+               else
+                       *mainapp = 0;
+       }
+       return PMINFO_R_OK;
+}
+
+API int pkgmgrinfo_appinfo_is_preload(pkgmgrinfo_appinfo_h handle, bool *preload)
+{
+       retvm_if(handle == NULL, PMINFO_R_EINVAL, "appinfo handle is NULL\n");
+       retvm_if(preload == NULL, PMINFO_R_EINVAL, "Argument supplied to hold return value is NULL\n");
+       char *val = NULL;
+       pkgmgr_appinfo_x *info = (pkgmgr_appinfo_x *)handle;
+       val = (char *)info->uiapp_info->preload;
+       if (val) {
+               if (strcasecmp(val, "true") == 0)
+                       *preload = 1;
+               else if (strcasecmp(val, "false") == 0)
+                       *preload = 0;
+               else
+                       *preload = 0;
+       }
+       return PMINFO_R_OK;
+}
+
+API int pkgmgrinfo_appinfo_is_submode(pkgmgrinfo_appinfo_h handle, bool *submode)
+{
+       retvm_if(handle == NULL, PMINFO_R_EINVAL, "appinfo handle is NULL\n");
+       retvm_if(submode == NULL, PMINFO_R_EINVAL, "Argument supplied to hold return value is NULL\n");
+       char *val = NULL;
+       pkgmgr_appinfo_x *info = (pkgmgr_appinfo_x *)handle;
+       val = (char *)info->uiapp_info->submode;
+       if (val) {
+               if (strcasecmp(val, "true") == 0)
+                       *submode = 1;
+               else if (strcasecmp(val, "false") == 0)
+                       *submode = 0;
+               else
+                       *submode = 0;
+       }
+       return PMINFO_R_OK;
+}
+
+API int pkgmgrinfo_appinfo_is_process_pool(pkgmgrinfo_appinfo_h handle, bool *process_pool)
+{
+       retvm_if(handle == NULL, PMINFO_R_EINVAL, "appinfo handle is NULL\n");
+       retvm_if(process_pool == NULL, PMINFO_R_EINVAL, "Argument supplied to hold return value is NULL\n");
+       char *val = NULL;
+       pkgmgr_appinfo_x *info = (pkgmgr_appinfo_x *)handle;
+       val = (char *)info->uiapp_info->process_pool;
+       if (val) {
+               if (strcasecmp(val, "true") == 0)
+                       *process_pool = 1;
+               else if (strcasecmp(val, "false") == 0)
+                       *process_pool = 0;
+               else
+                       *process_pool = 0;
+       }
+       return PMINFO_R_OK;
+}
+
+API int pkgmgrinfo_appinfo_is_category_exist(pkgmgrinfo_appinfo_h handle, const char *category, bool *exist)
+{
+       retvm_if(handle == NULL, PMINFO_R_EINVAL, "appinfo handle is NULL");
+       retvm_if(category == NULL, PMINFO_R_EINVAL, "category is NULL");
+       retvm_if(exist == NULL, PMINFO_R_EINVAL, "exist is NULL");
+
+       category_x *ptr = NULL;
+       pkgmgr_appinfo_x *info = (pkgmgr_appinfo_x *)handle;
+
+       *exist = 0;
+
+       ptr = info->uiapp_info->category;
+
+       for (; ptr; ptr = ptr->next) {
+               if (ptr->name) {
+                       if (strcasecmp(ptr->name, category) == 0)
+                       {
+                               *exist = 1;
+                               break;
+                       }
+               }
+       }
+
+       return PMINFO_R_OK;
+}
+
+API int pkgmgrinfo_appinfo_is_multi_instance(pkgmgrinfo_appinfo_h handle, bool *multi_instance)
+{
+       retvm_if(handle == NULL, PMINFO_R_EINVAL, "appinfo handle is NULL\n");
+       retvm_if(multi_instance == NULL, PMINFO_R_EINVAL, "Argument supplied to hold return value is NULL\n");
+       char *val = NULL;
+       pkgmgr_appinfo_x *info = (pkgmgr_appinfo_x *)handle;
+       val = (char *)info->uiapp_info->multi_instance;
+       if (val) {
+               if (strcasecmp(val, "true") == 0)
+                       *multi_instance = 1;
+               else if (strcasecmp(val, "false") == 0)
+                       *multi_instance = 0;
+               else
+                       *multi_instance = 0;
+       }
+       return PMINFO_R_OK;
+}
+
+API int pkgmgrinfo_appinfo_is_multi_window(pkgmgrinfo_appinfo_h handle, bool *multi_window)
 {
-       retvm_if(handle == NULL, PMINFO_R_EINVAL, "appinfo handle is NULL");
-       retvm_if(autorestart == NULL, PMINFO_R_EINVAL, "Argument supplied to hold return value is NULL");
+       retvm_if(handle == NULL, PMINFO_R_EINVAL, "appinfo handle is NULL\n");
+       retvm_if(multi_window == NULL, PMINFO_R_EINVAL, "Argument supplied to hold return value is NULL\n");
        char *val = NULL;
        pkgmgr_appinfo_x *info = (pkgmgr_appinfo_x *)handle;
-
-       if (info->app_component == PMINFO_UI_APP)
-               val = (char *)info->uiapp_info->autorestart;
-       else if (info->app_component == PMINFO_SVC_APP)
-               val = (char *)info->svcapp_info->autorestart;
-       else {
-               _LOGE("invalid component type\n");
-               return PMINFO_R_EINVAL;
-       }
-
+       val = (char *)info->uiapp_info->multi_window;
        if (val) {
                if (strcasecmp(val, "true") == 0)
-                       *autorestart = 1;
+                       *multi_window = 1;
                else if (strcasecmp(val, "false") == 0)
-                       *autorestart = 0;
+                       *multi_window = 0;
                else
-                       *autorestart = 0;
+                       *multi_window = 0;
        }
        return PMINFO_R_OK;
 }
 
-API int pkgmgrinfo_appinfo_is_mainapp(pkgmgrinfo_appinfo_h  handle, bool *mainapp)
+API int pkgmgrinfo_appinfo_is_support_disable(pkgmgrinfo_appinfo_h handle, bool *support_disable)
 {
-       retvm_if(handle == NULL, PMINFO_R_EINVAL, "appinfo handle is NULL");
-       retvm_if(mainapp == NULL, PMINFO_R_EINVAL, "Argument supplied to hold return value is NULL");
+       retvm_if(handle == NULL, PMINFO_R_EINVAL, "appinfo handle is NULL\n");
+       retvm_if(support_disable == NULL, PMINFO_R_EINVAL, "Argument supplied to hold return value is NULL\n");
        char *val = NULL;
        pkgmgr_appinfo_x *info = (pkgmgr_appinfo_x *)handle;
-       val = (char *)info->uiapp_info->mainapp;
+       val = (char *)info->uiapp_info->support_disable;
        if (val) {
                if (strcasecmp(val, "true") == 0)
-                       *mainapp = 1;
+                       *support_disable = 1;
                else if (strcasecmp(val, "false") == 0)
-                       *mainapp = 0;
+                       *support_disable = 0;
                else
-                       *mainapp = 0;
+                       *support_disable = 0;
        }
        return PMINFO_R_OK;
 }
 
-API int pkgmgrinfo_appinfo_is_preload(pkgmgrinfo_appinfo_h handle, bool *preload)
+API int pkgmgrinfo_appinfo_is_ui_gadget(pkgmgrinfo_appinfo_h handle, bool *ui_gadget)
 {
        retvm_if(handle == NULL, PMINFO_R_EINVAL, "appinfo handle is NULL\n");
-       retvm_if(preload == NULL, PMINFO_R_EINVAL, "Argument supplied to hold return value is NULL\n");
+       retvm_if(ui_gadget == NULL, PMINFO_R_EINVAL, "Argument supplied to hold return value is NULL\n");
        char *val = NULL;
        pkgmgr_appinfo_x *info = (pkgmgr_appinfo_x *)handle;
-       val = (char *)info->uiapp_info->preload;
+       val = (char *)info->uiapp_info->ui_gadget;
        if (val) {
                if (strcasecmp(val, "true") == 0)
-                       *preload = 1;
+                       *ui_gadget = 1;
                else if (strcasecmp(val, "false") == 0)
-                       *preload = 0;
+                       *ui_gadget = 0;
                else
-                       *preload = 0;
+                       *ui_gadget = 0;
        }
        return PMINFO_R_OK;
 }
 
-API int pkgmgrinfo_appinfo_is_submode(pkgmgrinfo_appinfo_h handle, bool *submode)
+API int pkgmgrinfo_appinfo_is_removable(pkgmgrinfo_appinfo_h handle, bool *removable)
 {
        retvm_if(handle == NULL, PMINFO_R_EINVAL, "appinfo handle is NULL\n");
-       retvm_if(submode == NULL, PMINFO_R_EINVAL, "Argument supplied to hold return value is NULL\n");
+       retvm_if(removable == NULL, PMINFO_R_EINVAL, "Argument supplied to hold return value is NULL\n");
        char *val = NULL;
        pkgmgr_appinfo_x *info = (pkgmgr_appinfo_x *)handle;
-       val = (char *)info->uiapp_info->submode;
+       val = (char *)info->uiapp_info->removable;
        if (val) {
                if (strcasecmp(val, "true") == 0)
-                       *submode = 1;
+                       *removable = 1;
                else if (strcasecmp(val, "false") == 0)
-                       *submode = 0;
+                       *removable = 0;
                else
-                       *submode = 0;
+                       *removable = 0;
        }
        return PMINFO_R_OK;
 }
 
-API int pkgmgrinfo_appinfo_is_process_pool(pkgmgrinfo_appinfo_h handle, bool *process_pool)
+API int pkgmgrinfo_appinfo_is_system(pkgmgrinfo_appinfo_h handle, bool *system)
 {
        retvm_if(handle == NULL, PMINFO_R_EINVAL, "appinfo handle is NULL\n");
-       retvm_if(process_pool == NULL, PMINFO_R_EINVAL, "Argument supplied to hold return value is NULL\n");
+       retvm_if(system == NULL, PMINFO_R_EINVAL, "Argument supplied to hold return value is NULL\n");
        char *val = NULL;
        pkgmgr_appinfo_x *info = (pkgmgr_appinfo_x *)handle;
-       val = (char *)info->uiapp_info->process_pool;
+       val = (char *)info->uiapp_info->package_system;
        if (val) {
                if (strcasecmp(val, "true") == 0)
-                       *process_pool = 1;
+                       *system = 1;
                else if (strcasecmp(val, "false") == 0)
-                       *process_pool = 0;
+                       *system = 0;
                else
-                       *process_pool = 0;
+                       *system = 0;
        }
        return PMINFO_R_OK;
 }
@@ -3859,8 +2799,7 @@ API int pkgmgrinfo_appinfo_filter_add_int(pkgmgrinfo_appinfo_filter_h handle,
        val = strndup(buf, PKG_VALUE_STRING_LEN_MAX - 1);
        if (val == NULL) {
                _LOGE("Out of Memory\n");
-               free(node);
-               node = NULL;
+               FREE_AND_NULL(node);
                return PMINFO_R_ERROR;
        }
        node->prop = prop;
@@ -3901,8 +2840,7 @@ API int pkgmgrinfo_appinfo_filter_add_bool(pkgmgrinfo_appinfo_filter_h handle,
                val = strndup("('false','False')", 17);
        if (val == NULL) {
                _LOGE("Out of Memory\n");
-               free(node);
-               node = NULL;
+               FREE_AND_NULL(node);
                return PMINFO_R_ERROR;
        }
        node->prop = prop;
@@ -3944,10 +2882,7 @@ API int pkgmgrinfo_appinfo_filter_add_string(pkgmgrinfo_appinfo_filter_h handle,
        node->prop = prop;
        switch (prop) {
        case E_PMINFO_APPINFO_PROP_APP_COMPONENT:
-               if (strcmp(value, PMINFO_APPINFO_UI_APP) == 0)
-                       val = strndup("uiapp", PKG_STRING_LEN_MAX - 1);
-               else
-                       val = strndup("svcapp", PKG_STRING_LEN_MAX - 1);
+               val = strndup("uiapp", PKG_STRING_LEN_MAX - 1);
                node->value = val;
                link = g_slist_find_custom(filter->list, (gconstpointer)node, __compare_func);
                if (link)
@@ -3961,8 +2896,7 @@ API int pkgmgrinfo_appinfo_filter_add_string(pkgmgrinfo_appinfo_filter_h handle,
                val = (char *)calloc(1, PKG_STRING_LEN_MAX);
                if (val == NULL) {
                        _LOGE("Out of Memory\n");
-                       free(node);
-                       node = NULL;
+                       FREE_AND_NULL(node);
                        return PMINFO_R_ERROR;
                }
                link = g_slist_find_custom(filter->list, (gconstpointer)node, __compare_func);
@@ -4001,144 +2935,110 @@ API int pkgmgrinfo_appinfo_filter_count(pkgmgrinfo_appinfo_filter_h handle, int
 {
        retvm_if(handle == NULL, PMINFO_R_EINVAL, "Filter handle input parameter is NULL\n");
        retvm_if(count == NULL, PMINFO_R_EINVAL, "Filter handle input parameter is NULL\n");
+
+       int ret = 0;
+       int filter_count = 0;
+
        char *locale = NULL;
        char *condition = NULL;
        char query[MAX_QUERY_LEN] = {'\0'};
        char where[MAX_QUERY_LEN] = {'\0'};
-       GSList *list;
-       int ret = 0;
+
        uiapplication_x *ptr1 = NULL;
-       serviceapplication_x *ptr2 = NULL;
+       pkgmgr_pkginfo_x *info = NULL;
+       pkgmgr_appinfo_x *appinfo = NULL;
        pkgmgrinfo_filter_x *filter = (pkgmgrinfo_filter_x*)handle;
+
        sqlite3 *pkginfo_db = NULL;
-       int filter_count = 0;
+       sqlite3_stmt *stmt = NULL;
+       GSList *list;
+
 
        /*open db*/
        ret = db_util_open(MANIFEST_DB, &pkginfo_db, 0);
-       retvm_if(ret != SQLITE_OK, PMINFO_R_ERROR, "connect db [%s] failed!", MANIFEST_DB);
+       retvm_if(ret != SQLITE_OK, PMINFO_R_ERROR, "db_util_open[%s] failed!", MANIFEST_DB);
 
-       /*get system locale*/
-       locale = __convert_system_locale_to_manifest_locale();
-       tryvm_if(locale == NULL, ret = PMINFO_R_ERROR, "manifest locale is NULL");
+       /*calloc*/
+       info = (pkgmgr_pkginfo_x *)calloc(1, sizeof(pkgmgr_pkginfo_x));
+       tryvm_if(info == NULL, ret = PMINFO_R_ERROR, "Out of Memory!!!\n");
+
+       info->manifest_info = (manifest_x *)calloc(1, sizeof(manifest_x));
+       tryvm_if(info->manifest_info == NULL, ret = PMINFO_R_ERROR, "Out of Memory!!!\n");
+
+       appinfo = (pkgmgr_appinfo_x *)calloc(1, sizeof(pkgmgr_appinfo_x));
+       tryvm_if(appinfo == NULL, ret = PMINFO_R_ERROR, "Out of Memory!!!\n");
 
        /*Start constructing query*/
-       snprintf(query, MAX_QUERY_LEN - 1, FILTER_QUERY_LIST_APP, locale);
+       locale = __convert_system_locale_to_manifest_locale();
+       snprintf(query, MAX_QUERY_LEN - 1, FILTER_QUERY_COUNT_APP, locale);
+
        /*Get where clause*/
        for (list = filter->list; list; list = g_slist_next(list)) {
                __get_filter_condition(list->data, &condition);
                if (condition) {
                        strncat(where, condition, sizeof(where) - strlen(where) -1);
                        where[sizeof(where) - 1] = '\0';
-                       free(condition);
-                       condition = NULL;
+                       FREE_AND_NULL(condition);
                }
                if (g_slist_next(list)) {
                        strncat(where, " and ", sizeof(where) - strlen(where) - 1);
                        where[sizeof(where) - 1] = '\0';
                }
        }
+
+       if (strstr(where, "package_app_info.app_disable") == NULL) {
+               if (strlen(where) > 0) {
+                       strncat(where, " and package_app_info.app_disable IN ('false','False')", sizeof(where) - strlen(where) - 1);
+                       where[sizeof(where) - 1] = '\0';
+               }
+       }
        _LOGS("where = %s\n", where);
+
        if (strlen(where) > 0) {
                strncat(query, where, sizeof(query) - strlen(query) - 1);
                query[sizeof(query) - 1] = '\0';
        }
        _LOGS("query = %s\n", query);
-       /*To get filtered list*/
-       pkgmgr_pkginfo_x *info = NULL;
-       info = (pkgmgr_pkginfo_x *)calloc(1, sizeof(pkgmgr_pkginfo_x));
-       tryvm_if(info == NULL, ret = PMINFO_R_ERROR, "Out of Memory!!!\n");
-
-       info->manifest_info = (manifest_x *)calloc(1, sizeof(manifest_x));
-       tryvm_if(info->manifest_info == NULL, ret = PMINFO_R_ERROR, "Out of Memory!!!\n");
 
-       /*To get detail app info for each member of filtered list*/
-       pkgmgr_pkginfo_x *filtinfo = NULL;
-       filtinfo = (pkgmgr_pkginfo_x *)calloc(1, sizeof(pkgmgr_pkginfo_x));
-       tryvm_if(filtinfo == NULL, ret = PMINFO_R_ERROR, "Out of Memory!!!\n");
+       /*prepare query*/
+       ret = sqlite3_prepare_v2(pkginfo_db, query, strlen(query), &stmt, NULL);
+       tryvm_if(ret != PMINFO_R_OK, ret = PMINFO_R_ERROR, "sqlite3_prepare_v2 failed[%s]\n", query);
 
-       filtinfo->manifest_info = (manifest_x *)calloc(1, sizeof(manifest_x));
-       tryvm_if(filtinfo->manifest_info == NULL, ret = PMINFO_R_ERROR, "Out of Memory!!!\n");
-
-       pkgmgr_appinfo_x *appinfo = (pkgmgr_appinfo_x *)calloc(1, sizeof(pkgmgr_appinfo_x));
-       tryvm_if(appinfo == NULL, ret = PMINFO_R_ERROR, "Out of Memory!!!\n");
+       /*step query*/
+       while(1) {
+               ret = sqlite3_step(stmt);
+               if(ret == SQLITE_ROW) {
+                       __get_appinfo_for_list(stmt, info);
+               } else {
+                       break;
+               }
+       }
 
-       ret = __exec_db_query(pkginfo_db, query, __app_list_cb, (void *)info);
-       tryvm_if(ret == -1, ret = PMINFO_R_ERROR, "Package Info DB Information retrieval failed");
+       /*head up*/
+       SAFE_LISTHEAD(info->manifest_info->uiapplication, ptr1);
 
-       memset(query, '\0', MAX_QUERY_LEN);
-       if (info->manifest_info->uiapplication) {
-               LISTHEAD(info->manifest_info->uiapplication, ptr1);
-               info->manifest_info->uiapplication = ptr1;
-       }
-       if (info->manifest_info->serviceapplication) {
-               LISTHEAD(info->manifest_info->serviceapplication, ptr2);
-               info->manifest_info->serviceapplication = ptr2;
-       }
-       /*Filtered UI Apps*/
-       for(ptr1 = info->manifest_info->uiapplication; ptr1; ptr1 = ptr1->next)
-       {
-               snprintf(query, MAX_QUERY_LEN, "select * from package_app_info where app_id='%s' and app_component='%s'",
-                                                       ptr1->appid, "uiapp");
-               ret = __exec_db_query(pkginfo_db, query, __uiapp_list_cb, (void *)filtinfo);
-               tryvm_if(ret == -1, ret = PMINFO_R_ERROR, "Package Info DB Information retrieval failed");
-       }
-       for(ptr2 = info->manifest_info->serviceapplication; ptr2; ptr2 = ptr2->next)
-       {
-               snprintf(query, MAX_QUERY_LEN, "select * from package_app_info where app_id='%s' and app_component='%s'",
-                                                       ptr2->appid, "svcapp");
-               ret = __exec_db_query(pkginfo_db, query, __svcapp_list_cb, (void *)filtinfo);
-               tryvm_if(ret == -1, ret = PMINFO_R_ERROR, "Package Info DB Information retrieval failed");
-       }
-       if (filtinfo->manifest_info->uiapplication) {
-               LISTHEAD(filtinfo->manifest_info->uiapplication, ptr1);
-               filtinfo->manifest_info->uiapplication = ptr1;
-       }
        /*If the callback func return < 0 we break and no more call back is called*/
        while(ptr1 != NULL)
        {
-               appinfo->locale = strdup(locale);
                appinfo->uiapp_info = ptr1;
-               appinfo->app_component = PMINFO_UI_APP;
-
                ret = __appinfo_check_installed_storage(appinfo);
                if(ret < 0) {
                        ptr1 = ptr1->next;
                        continue;
                }
-
-               filter_count++;
-
                ptr1 = ptr1->next;
-       }
-       /*Filtered Service Apps*/
-       if (filtinfo->manifest_info->serviceapplication) {
-               LISTHEAD(filtinfo->manifest_info->serviceapplication, ptr2);
-               filtinfo->manifest_info->serviceapplication = ptr2;
-       }
-       /*If the callback func return < 0 we break and no more call back is called*/
-       while(ptr2 != NULL)
-       {
-               appinfo->locale = strdup(locale);
-               appinfo->svcapp_info = ptr2;
-               appinfo->app_component = PMINFO_SVC_APP;
                filter_count++;
-               ptr2 = ptr2->next;
        }
+
        *count = filter_count;
 
        ret = PMINFO_R_OK;
 catch:
-       if (locale) {
-               free(locale);
-               locale = NULL;
-       }
+       FREE_AND_NULL(locale);
+       sqlite3_finalize(stmt);
        sqlite3_close(pkginfo_db);
-       if (appinfo) {
-               free(appinfo);
-               appinfo = NULL;
-       }
+       FREE_AND_NULL(appinfo);
        __cleanup_pkginfo(info);
-       __cleanup_pkginfo(filtinfo);
        return ret;
 }
 
@@ -4147,144 +3047,141 @@ API int pkgmgrinfo_appinfo_filter_foreach_appinfo(pkgmgrinfo_appinfo_filter_h ha
 {
        retvm_if(handle == NULL, PMINFO_R_EINVAL, "Filter handle input parameter is NULL\n");
        retvm_if(app_cb == NULL, PMINFO_R_EINVAL, "Filter handle input parameter is NULL\n");
+
+       int ret = 0;
+
        char *locale = NULL;
        char *condition = NULL;
        char query[MAX_QUERY_LEN] = {'\0'};
        char where[MAX_QUERY_LEN] = {'\0'};
-       GSList *list;
-       int ret = 0;
-       uiapplication_x *ptr1 = NULL;
-       serviceapplication_x *ptr2 = NULL;
+
+       char appid[MAX_QUERY_LEN] = {0,};
+       char pre_appid[MAX_QUERY_LEN] = {0,};
+
+       pkgmgr_pkginfo_x *info = NULL;
+       pkgmgr_appinfo_x *appinfo = NULL;
        pkgmgrinfo_filter_x *filter = (pkgmgrinfo_filter_x*)handle;
+       uiapplication_x *ptr1 = NULL;
+
        sqlite3 *pkginfo_db = NULL;
+       sqlite3_stmt *stmt = NULL;
+       GSList *list;
 
        /*open db*/
        ret = db_util_open(MANIFEST_DB, &pkginfo_db, 0);
        retvm_if(ret != SQLITE_OK, PMINFO_R_ERROR, "connect db [%s] failed!", MANIFEST_DB);
 
-       /*get system locale*/
-       locale = __convert_system_locale_to_manifest_locale();
-       tryvm_if(locale == NULL, ret = PMINFO_R_ERROR, "manifest locale is NULL");
+       /*calloc*/
+       info = (pkgmgr_pkginfo_x *)calloc(1, sizeof(pkgmgr_pkginfo_x));
+       tryvm_if(info == NULL, ret = PMINFO_R_ERROR, "Out of Memory!!!\n");
+
+       info->manifest_info = (manifest_x *)calloc(1, sizeof(manifest_x));
+       tryvm_if(info->manifest_info == NULL, ret = PMINFO_R_ERROR, "Out of Memory!!!\n");
+
+       appinfo = (pkgmgr_appinfo_x *)calloc(1, sizeof(pkgmgr_appinfo_x));
+       tryvm_if(appinfo == NULL, ret = PMINFO_R_ERROR, "Out of Memory!!!\n");
 
        /*Start constructing query*/
-       snprintf(query, MAX_QUERY_LEN - 1, FILTER_QUERY_LIST_APP, locale);
+       locale = __convert_system_locale_to_manifest_locale();
+       snprintf(query, MAX_QUERY_LEN - 1, FILTER_QUERY_LIST_APP, DEFAULT_LOCALE, locale);
+
        /*Get where clause*/
        for (list = filter->list; list; list = g_slist_next(list)) {
                __get_filter_condition(list->data, &condition);
                if (condition) {
                        strncat(where, condition, sizeof(where) - strlen(where) -1);
                        where[sizeof(where) - 1] = '\0';
-                       free(condition);
-                       condition = NULL;
+                       FREE_AND_NULL(condition);
                }
                if (g_slist_next(list)) {
                        strncat(where, " and ", sizeof(where) - strlen(where) - 1);
                        where[sizeof(where) - 1] = '\0';
                }
        }
+
+       if (strstr(where, "package_app_info.app_disable") == NULL) {
+               if (strlen(where) > 0) {
+                       strncat(where, " and package_app_info.app_disable IN ('false','False')", sizeof(where) - strlen(where) - 1);
+                       where[sizeof(where) - 1] = '\0';
+               }
+       }
+
        _LOGS("where = %s\n", where);
+
        if (strlen(where) > 0) {
                strncat(query, where, sizeof(query) - strlen(query) - 1);
                query[sizeof(query) - 1] = '\0';
        }
        _LOGS("query = %s\n", query);
-       /*To get filtered list*/
-       pkgmgr_pkginfo_x *info = NULL;
-       info = (pkgmgr_pkginfo_x *)calloc(1, sizeof(pkgmgr_pkginfo_x));
-       tryvm_if(info == NULL, ret = PMINFO_R_ERROR, "Out of Memory!!!\n");
 
-       info->manifest_info = (manifest_x *)calloc(1, sizeof(manifest_x));
-       tryvm_if(info->manifest_info == NULL, ret = PMINFO_R_ERROR, "Out of Memory!!!\n");
+       /*prepare query*/
+       ret = sqlite3_prepare_v2(pkginfo_db, query, strlen(query), &stmt, NULL);
+       tryvm_if(ret != PMINFO_R_OK, ret = PMINFO_R_ERROR, "sqlite3_prepare_v2 failed[%s]\n", query);
 
-       /*To get detail app info for each member of filtered list*/
-       pkgmgr_pkginfo_x *filtinfo = NULL;
-       filtinfo = (pkgmgr_pkginfo_x *)calloc(1, sizeof(pkgmgr_pkginfo_x));
-       tryvm_if(filtinfo == NULL, ret = PMINFO_R_ERROR, "Out of Memory!!!\n");
+       /*step query*/
+       while(1) {
+               ret = sqlite3_step(stmt);
+               if(ret == SQLITE_ROW) {
 
-       filtinfo->manifest_info = (manifest_x *)calloc(1, sizeof(manifest_x));
-       tryvm_if(filtinfo->manifest_info == NULL, ret = PMINFO_R_ERROR, "Out of Memory!!!\n");
+                       memset(appid, 0, MAX_QUERY_LEN);
+                       strncpy(appid, (const char *)sqlite3_column_text(stmt, 0), MAX_QUERY_LEN - 1);
 
-       pkgmgr_appinfo_x *appinfo = (pkgmgr_appinfo_x *)calloc(1, sizeof(pkgmgr_appinfo_x));
-       tryvm_if(appinfo == NULL, ret = PMINFO_R_ERROR, "Out of Memory!!!\n");
+                       if (strlen(pre_appid) != 0) {
+                               if (strcmp(pre_appid, appid) == 0) {
+                                       /*if same appid is found, then it is about exact matched locale*/
+                                       __update_localed_label_for_list(stmt, info);
 
-       ret = __exec_db_query(pkginfo_db, query, __app_list_cb, (void *)info);
-       tryvm_if(ret == -1, ret = PMINFO_R_ERROR, "Package Info DB Information retrieval failed");
+                                       memset(pre_appid, 0, MAX_QUERY_LEN);
+                                       strncpy(pre_appid, (const char *)sqlite3_column_text(stmt, 0), MAX_QUERY_LEN - 1);
 
-       memset(query, '\0', MAX_QUERY_LEN);
-       if (info->manifest_info->uiapplication) {
-               LISTHEAD(info->manifest_info->uiapplication, ptr1);
-               info->manifest_info->uiapplication = ptr1;
-       }
-       if (info->manifest_info->serviceapplication) {
-               LISTHEAD(info->manifest_info->serviceapplication, ptr2);
-               info->manifest_info->serviceapplication = ptr2;
-       }
-       /*Filtered UI Apps*/
-       for(ptr1 = info->manifest_info->uiapplication; ptr1; ptr1 = ptr1->next)
-       {
-               snprintf(query, MAX_QUERY_LEN, "select * from package_app_info where app_id='%s' and app_component='%s'",
-                                                       ptr1->appid, "uiapp");
-               ret = __exec_db_query(pkginfo_db, query, __uiapp_list_cb, (void *)filtinfo);
-               tryvm_if(ret == -1, ret = PMINFO_R_ERROR, "Package Info DB Information retrieval failed");
-       }
-       for(ptr2 = info->manifest_info->serviceapplication; ptr2; ptr2 = ptr2->next)
-       {
-               snprintf(query, MAX_QUERY_LEN, "select * from package_app_info where app_id='%s' and app_component='%s'",
-                                                       ptr2->appid, "svcapp");
-               ret = __exec_db_query(pkginfo_db, query, __svcapp_list_cb, (void *)filtinfo);
-               tryvm_if(ret == -1, ret = PMINFO_R_ERROR, "Package Info DB Information retrieval failed");
-       }
-       if (filtinfo->manifest_info->uiapplication) {
-               LISTHEAD(filtinfo->manifest_info->uiapplication, ptr1);
-               filtinfo->manifest_info->uiapplication = ptr1;
+                                       continue;
+                               } else {
+                                       memset(pre_appid, 0, MAX_QUERY_LEN);
+                                       strncpy(pre_appid, (const char *)sqlite3_column_text(stmt, 0), MAX_QUERY_LEN - 1);
+                               }
+                       } else {
+                               strncpy(pre_appid, (const char *)sqlite3_column_text(stmt, 0), MAX_QUERY_LEN - 1);
+                       }
+
+                       __get_appinfo_for_list(stmt, info);
+               } else {
+                       break;
+               }
        }
+
+       /*head up*/
+       SAFE_LISTHEAD(info->manifest_info->uiapplication, ptr1);
+
        /*If the callback func return < 0 we break and no more call back is called*/
        while(ptr1 != NULL)
        {
                appinfo->locale = strdup(locale);
                appinfo->uiapp_info = ptr1;
-               appinfo->app_component = PMINFO_UI_APP;
 
                ret = __appinfo_check_installed_storage(appinfo);
                if(ret < 0) {
+                       FREE_AND_NULL(appinfo->locale);
                        ptr1 = ptr1->next;
                        continue;
                }
 
                ret = app_cb((void *)appinfo, user_data);
-               if (ret < 0)
+               if (ret < 0){
+                       FREE_AND_NULL(appinfo->locale);
                        break;
+               }
+
+               FREE_AND_NULL(appinfo->locale);
                ptr1 = ptr1->next;
        }
-       /*Filtered Service Apps*/
-       if (filtinfo->manifest_info->serviceapplication) {
-               LISTHEAD(filtinfo->manifest_info->serviceapplication, ptr2);
-               filtinfo->manifest_info->serviceapplication = ptr2;
-       }
-       /*If the callback func return < 0 we break and no more call back is called*/
-       while(ptr2 != NULL)
-       {
-               appinfo->locale = strdup(locale);
-               appinfo->svcapp_info = ptr2;
-               appinfo->app_component = PMINFO_SVC_APP;
-               ret = app_cb((void *)appinfo, user_data);
-               if (ret < 0)
-                       break;
-               ptr2 = ptr2->next;
-       }
        ret = PMINFO_R_OK;
+
 catch:
-       if (locale) {
-               free(locale);
-               locale = NULL;
-       }
+       FREE_AND_NULL(locale);
+       sqlite3_finalize(stmt);
        sqlite3_close(pkginfo_db);
-       if (appinfo) {
-               free(appinfo);
-               appinfo = NULL;
-       }
+       FREE_AND_NULL(appinfo);
        __cleanup_pkginfo(info);
-       __cleanup_pkginfo(filtinfo);
        return ret;
 }
 
@@ -4324,16 +3221,9 @@ API int pkgmgrinfo_appinfo_metadata_filter_add(pkgmgrinfo_appinfo_metadata_filte
        return PMINFO_R_OK;
 catch:
        if (node) {
-               if (node->key) {
-                       free(node->key);
-                       node->key = NULL;
-               }
-               if (node->value) {
-                       free(node->value);
-                       node->value = NULL;
-               }
-               free(node);
-               node = NULL;
+               FREE_AND_NULL(node->key);
+               FREE_AND_NULL(node->value);
+               FREE_AND_NULL(node);
        }
        return ret;
 }
@@ -4345,23 +3235,33 @@ API int pkgmgrinfo_appinfo_metadata_filter_foreach(pkgmgrinfo_appinfo_metadata_f
        retvm_if(app_cb == NULL, PMINFO_R_EINVAL, "Callback function supplied is NULL\n");
        char *locale = NULL;
        char *condition = NULL;
-       char *error_message = NULL;
        char query[MAX_QUERY_LEN] = {'\0'};
        char where[MAX_QUERY_LEN] = {'\0'};
+       char appid[MAX_QUERY_LEN] = {0,};
+       char pre_appid[MAX_QUERY_LEN] = {0,};
        GSList *list;
        int ret = 0;
        pkgmgr_pkginfo_x *info = NULL;
-       pkgmgr_pkginfo_x *filtinfo = NULL;
        pkgmgr_appinfo_x *appinfo = NULL;
        uiapplication_x *ptr1 = NULL;
-       serviceapplication_x *ptr2 = NULL;
        pkgmgrinfo_filter_x *filter = (pkgmgrinfo_filter_x*)handle;
        sqlite3 *pkginfo_db = NULL;
+       sqlite3_stmt *stmt = NULL;
 
        /*open db*/
        ret = db_util_open(MANIFEST_DB, &pkginfo_db, 0);
        retvm_if(ret != SQLITE_OK, PMINFO_R_ERROR, "connect db [%s] failed!", MANIFEST_DB);
 
+       /*calloc*/
+       info = (pkgmgr_pkginfo_x *)calloc(1, sizeof(pkgmgr_pkginfo_x));
+       tryvm_if(info == NULL, ret = PMINFO_R_ERROR, "Out of Memory!!!\n");
+
+       info->manifest_info = (manifest_x *)calloc(1, sizeof(manifest_x));
+       tryvm_if(info == NULL, ret = PMINFO_R_ERROR, "Out of Memory!!!\n");
+
+       appinfo = (pkgmgr_appinfo_x *)calloc(1, sizeof(pkgmgr_appinfo_x));
+       tryvm_if(info == NULL, ret = PMINFO_R_ERROR, "Out of Memory!!!\n");
+
        /*Get current locale*/
        locale = __convert_system_locale_to_manifest_locale();
        tryvm_if(locale == NULL, ret = PMINFO_R_ERROR, "manifest locale is NULL\n");
@@ -4370,116 +3270,99 @@ API int pkgmgrinfo_appinfo_metadata_filter_foreach(pkgmgrinfo_appinfo_metadata_f
        memset(where, '\0', MAX_QUERY_LEN);
        memset(query, '\0', MAX_QUERY_LEN);
        snprintf(query, MAX_QUERY_LEN - 1, METADATA_FILTER_QUERY_SELECT_CLAUSE);
+
        /*Get where clause*/
        for (list = filter->list; list; list = g_slist_next(list)) {
                __get_metadata_filter_condition(list->data, &condition);
                if (condition) {
                        strncat(where, condition, sizeof(where) - strlen(where) -1);
-                       free(condition);
-                       condition = NULL;
+                       FREE_AND_NULL(condition);
                }
                if (g_slist_next(list)) {
                        strncat(where, METADATA_FILTER_QUERY_UNION_CLAUSE, sizeof(where) - strlen(where) - 1);
                }
        }
+
+       if (strstr(where, "package_app_info.app_disable") == NULL) {
+               if (strlen(where) > 0) {
+                       strncat(where, " and package_app_info.app_disable IN ('false','False')", sizeof(where) - strlen(where) - 1);
+                       where[sizeof(where) - 1] = '\0';
+               }
+       }
+
        _LOGE("where = %s (%d)\n", where, strlen(where));
+
        if (strlen(where) > 0) {
                strncat(query, where, sizeof(query) - strlen(query) - 1);
        }
        _LOGE("query = %s (%d)\n", query, strlen(query));
-       /*To get filtered list*/
-       info = (pkgmgr_pkginfo_x *)calloc(1, sizeof(pkgmgr_pkginfo_x));
-       tryvm_if(info == NULL, ret = PMINFO_R_ERROR, "Out of Memory!!!\n");
 
-       info->manifest_info = (manifest_x *)calloc(1, sizeof(manifest_x));
-       tryvm_if(info->manifest_info == NULL, ret = PMINFO_R_ERROR, "Out of Memory!!!\n");
+       /*prepare query*/
+       ret = sqlite3_prepare_v2(pkginfo_db, query, strlen(query), &stmt, NULL);
+       tryvm_if(ret != PMINFO_R_OK, ret = PMINFO_R_ERROR, "sqlite3_prepare_v2 failed[%s]\n", query);
+
+       /*step query*/
+       while(1) {
+               ret = sqlite3_step(stmt);
+               if(ret == SQLITE_ROW) {
 
-       /*To get detail app info for each member of filtered list*/
-       filtinfo = (pkgmgr_pkginfo_x *)calloc(1, sizeof(pkgmgr_pkginfo_x));
-       tryvm_if(filtinfo == NULL, ret = PMINFO_R_ERROR, "Out of Memory!!!\n");
+                       memset(appid, 0, MAX_QUERY_LEN);
+                       strncpy(appid, (const char *)sqlite3_column_text(stmt, 0), MAX_QUERY_LEN - 1);
 
-       filtinfo->manifest_info = (manifest_x *)calloc(1, sizeof(manifest_x));
-       tryvm_if(filtinfo->manifest_info == NULL, ret = PMINFO_R_ERROR, "Out of Memory!!!\n");
+                       if (strlen(pre_appid) != 0) {
+                               if (strcmp(pre_appid, appid) == 0) {
+                                       /*if same appid is found, then it is about exact matched locale*/
+                                       __update_localed_label_for_list(stmt, info);
 
-       appinfo = (pkgmgr_appinfo_x *)calloc(1, sizeof(pkgmgr_appinfo_x));
-       tryvm_if(appinfo == NULL, ret = PMINFO_R_ERROR, "Out of Memory!!!\n");
+                                       memset(pre_appid, 0, MAX_QUERY_LEN);
+                                       strncpy(pre_appid, (const char *)sqlite3_column_text(stmt, 0), MAX_QUERY_LEN - 1);
 
-       ret = sqlite3_exec(pkginfo_db, query, __app_list_cb, (void *)info, &error_message);
-       tryvm_if(ret != SQLITE_OK, ret = PMINFO_R_ERROR, "Don't execute query = %s error message = %s\n", query, error_message);
-       memset(query, '\0', MAX_QUERY_LEN);
+                                       continue;
+                               } else {
+                                       memset(pre_appid, 0, MAX_QUERY_LEN);
+                                       strncpy(pre_appid, (const char *)sqlite3_column_text(stmt, 0), MAX_QUERY_LEN - 1);
+                               }
+                       } else {
+                               strncpy(pre_appid, (const char *)sqlite3_column_text(stmt, 0), MAX_QUERY_LEN - 1);
+                       }
 
-       if (info->manifest_info->uiapplication) {
-               LISTHEAD(info->manifest_info->uiapplication, ptr1);
-               info->manifest_info->uiapplication = ptr1;
-       }
-       if (info->manifest_info->serviceapplication) {
-               LISTHEAD(info->manifest_info->serviceapplication, ptr2);
-               info->manifest_info->serviceapplication = ptr2;
+                       __get_appinfo_for_list(stmt, info);
+               } else {
+                       break;
+               }
        }
 
+       /*head up*/
+       SAFE_LISTHEAD(info->manifest_info->uiapplication, ptr1);
+
        /*UI Apps*/
-       for(ptr1 = info->manifest_info->uiapplication; ptr1; ptr1 = ptr1->next)
-       {
-               snprintf(query, MAX_QUERY_LEN, "select * from package_app_info where app_id='%s' and app_component='%s'",
-                                                       ptr1->appid, "uiapp");
-               ret = sqlite3_exec(pkginfo_db, query, __uiapp_list_cb, (void *)filtinfo, &error_message);
-               tryvm_if(ret != SQLITE_OK, ret = PMINFO_R_ERROR, "Don't execute query = %s error message = %s\n", query, error_message);
-               memset(query, '\0', MAX_QUERY_LEN);
-       }
-       /*Service Apps*/
-       for(ptr2 = info->manifest_info->serviceapplication; ptr2; ptr2 = ptr2->next)
-       {
-               snprintf(query, MAX_QUERY_LEN, "select * from package_app_info where app_id='%s' and app_component='%s'",
-                                                       ptr2->appid, "svcapp");
-               ret = sqlite3_exec(pkginfo_db, query, __svcapp_list_cb, (void *)filtinfo, &error_message);
-               tryvm_if(ret != SQLITE_OK, ret = PMINFO_R_ERROR, "Don't execute query = %s error message = %s\n", query, error_message);
-               memset(query, '\0', MAX_QUERY_LEN);
-       }
-       /*Filtered UI Apps*/
-       if (filtinfo->manifest_info->uiapplication) {
-               LISTHEAD(filtinfo->manifest_info->uiapplication, ptr1);
-               filtinfo->manifest_info->uiapplication = ptr1;
-       }
-       /*If the callback func return < 0 we break and no more call back is called*/
-       while(ptr1 != NULL)
-       {
+       while (ptr1 != NULL) {
                appinfo->locale = strdup(locale);
                appinfo->uiapp_info = ptr1;
-               appinfo->app_component = PMINFO_UI_APP;
+
+               ret = __appinfo_check_installed_storage(appinfo);
+               if(ret < 0) {
+                       FREE_AND_NULL(appinfo->locale);
+                       ptr1 = ptr1->next;
+                       continue;
+               }
+
                ret = app_cb((void *)appinfo, user_data);
-               if (ret < 0)
+               if (ret < 0) {
+                       FREE_AND_NULL(appinfo->locale);
                        break;
+               }
+
+               FREE_AND_NULL(appinfo->locale);
                ptr1 = ptr1->next;
        }
-       /*Filtered Service Apps*/
-       if (filtinfo->manifest_info->serviceapplication) {
-               LISTHEAD(filtinfo->manifest_info->serviceapplication, ptr2);
-               filtinfo->manifest_info->serviceapplication = ptr2;
-       }
-       /*If the callback func return < 0 we break and no more call back is called*/
-       while(ptr2 != NULL)
-       {
-               appinfo->locale = strdup(locale);
-               appinfo->svcapp_info = ptr2;
-               appinfo->app_component = PMINFO_SVC_APP;
-               ret = app_cb((void *)appinfo, user_data);
-               if (ret < 0)
-                       break;
-               ptr2 = ptr2->next;
-       }
+
        ret = PMINFO_R_OK;
 catch:
-       if (locale) {
-               free(locale);
-               locale = NULL;
-       }
-       sqlite3_free(error_message);
+       FREE_AND_NULL(locale);
+       sqlite3_finalize(stmt);
        sqlite3_close(pkginfo_db);
-       if (appinfo) {
-               free(appinfo);
-               appinfo = NULL;
-       }
+       FREE_AND_NULL(appinfo);
        __cleanup_pkginfo(info);
-       __cleanup_pkginfo(filtinfo);
        return ret;
 }
diff --git a/src/pkgmgrinfo_basic.c b/src/pkgmgrinfo_basic.c
new file mode 100644 (file)
index 0000000..f6aa083
--- /dev/null
@@ -0,0 +1,771 @@
+/*
+ * pkgmgrinfo-basic
+ *
+ * Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved.
+ *
+ * Contact: Jayoun Lee <airjany@samsung.com>, Junsuk Oh <junsuk77.oh@samsung.com>,
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+#include <stdlib.h>
+#include <string.h>
+
+#include "pkgmgrinfo_basic.h"
+#include "pkgmgrinfo_private.h"
+#include <openssl/md5.h>
+
+#define HASH_LEN  MD5_DIGEST_LENGTH * 2
+
+
+static void __ps_free_category(category_x *category)
+{
+       if (category == NULL)
+               return;
+       FREE_AND_NULL(category->name);
+       FREE_AND_NULL(category);
+}
+
+static void __ps_free_privilege(privilege_x *privilege)
+{
+       if (privilege == NULL)
+               return;
+       FREE_AND_NULL(privilege->text);
+       FREE_AND_NULL(privilege);
+}
+
+static void __ps_free_privileges(privileges_x *privileges)
+{
+       if (privileges == NULL)
+               return;
+       /*Free Privilege*/
+       if (privileges->privilege) {
+               privilege_x *privilege = privileges->privilege;
+               privilege_x *tmp = NULL;
+               while(privilege != NULL) {
+                       tmp = privilege->next;
+                       __ps_free_privilege(privilege);
+                       privilege = tmp;
+               }
+       }
+       FREE_AND_NULL(privileges);
+}
+
+static void __ps_free_metadata(metadata_x *metadata)
+{
+       if (metadata == NULL)
+               return;
+       FREE_AND_NULL(metadata->key);
+       FREE_AND_NULL(metadata->value);
+       FREE_AND_NULL(metadata);
+}
+
+static void __ps_free_permission(permission_x *permission)
+{
+       if (permission == NULL)
+               return;
+       FREE_AND_NULL(permission->type);
+       FREE_AND_NULL(permission->value);
+       FREE_AND_NULL(permission);
+}
+
+static void __ps_free_icon(icon_x *icon)
+{
+       if (icon == NULL)
+               return;
+       FREE_AND_NULL(icon->text);
+       FREE_AND_NULL(icon->lang);
+       FREE_AND_NULL(icon->name);
+       FREE_AND_NULL(icon->section);
+       FREE_AND_NULL(icon->size);
+       FREE_AND_NULL(icon->resolution);
+       FREE_AND_NULL(icon);
+}
+
+static void __ps_free_image(image_x *image)
+{
+       if (image == NULL)
+               return;
+       FREE_AND_NULL(image->text);
+       FREE_AND_NULL(image->lang);
+       FREE_AND_NULL(image->name);
+       FREE_AND_NULL(image->section);
+       FREE_AND_NULL(image);
+}
+
+static void __ps_free_operation(operation_x *operation)
+{
+       if (operation == NULL)
+               return;
+       FREE_AND_NULL(operation->text);
+       FREE_AND_NULL(operation);
+}
+
+static void __ps_free_uri(uri_x *uri)
+{
+       if (uri == NULL)
+               return;
+       FREE_AND_NULL(uri->text);
+       FREE_AND_NULL(uri);
+}
+
+static void __ps_free_mime(mime_x *mime)
+{
+       if (mime == NULL)
+               return;
+       FREE_AND_NULL(mime->text);
+       FREE_AND_NULL(mime);
+}
+
+static void __ps_free_subapp(subapp_x *subapp)
+{
+       if (subapp == NULL)
+               return;
+       FREE_AND_NULL(subapp->text);
+       FREE_AND_NULL(subapp);
+}
+
+static void __ps_free_condition(condition_x *condition)
+{
+       if (condition == NULL)
+               return;
+       FREE_AND_NULL(condition->text);
+       FREE_AND_NULL(condition->name);
+       FREE_AND_NULL(condition);
+}
+
+static void __ps_free_notification(notification_x *notification)
+{
+       if (notification == NULL)
+               return;
+       FREE_AND_NULL(notification->text);
+       FREE_AND_NULL(notification->name);
+       FREE_AND_NULL(notification);
+}
+
+static void __ps_free_compatibility(compatibility_x *compatibility)
+{
+       if (compatibility == NULL)
+               return;
+       FREE_AND_NULL(compatibility->text);
+       FREE_AND_NULL(compatibility->name);
+       FREE_AND_NULL(compatibility);
+}
+
+static void __ps_free_allowed(allowed_x *allowed)
+{
+       if (allowed == NULL)
+               return;
+       FREE_AND_NULL(allowed->name);
+       FREE_AND_NULL(allowed->text);
+       FREE_AND_NULL(allowed);
+}
+
+static void __ps_free_request(request_x *request)
+{
+       if (request == NULL)
+               return;
+       FREE_AND_NULL(request->text);
+       FREE_AND_NULL(request);
+}
+
+static void __ps_free_datacontrol(datacontrol_x *datacontrol)
+{
+       if (datacontrol == NULL)
+               return;
+       FREE_AND_NULL(datacontrol->providerid);
+       FREE_AND_NULL(datacontrol->access);
+       FREE_AND_NULL(datacontrol->type);
+       FREE_AND_NULL(datacontrol);
+}
+
+static void __ps_free_launchconditions(launchconditions_x *launchconditions)
+{
+       if (launchconditions == NULL)
+               return;
+       FREE_AND_NULL(launchconditions->text);
+       /*Free Condition*/
+       if (launchconditions->condition) {
+               condition_x *condition = launchconditions->condition;
+               condition_x *tmp = NULL;
+               while(condition != NULL) {
+                       tmp = condition->next;
+                       __ps_free_condition(condition);
+                       condition = tmp;
+               }
+       }
+       FREE_AND_NULL(launchconditions);
+}
+
+static void __ps_free_appsvc(appsvc_x *appsvc)
+{
+       if (appsvc == NULL)
+               return;
+       FREE_AND_NULL(appsvc->text);
+       /*Free Operation*/
+       if (appsvc->operation) {
+               operation_x *operation = appsvc->operation;
+               operation_x *tmp = NULL;
+               while(operation != NULL) {
+                       tmp = operation->next;
+                       __ps_free_operation(operation);
+                       operation = tmp;
+               }
+       }
+       /*Free Uri*/
+       if (appsvc->uri) {
+               uri_x *uri = appsvc->uri;
+               uri_x *tmp = NULL;
+               while(uri != NULL) {
+                       tmp = uri->next;
+                       __ps_free_uri(uri);
+                       uri = tmp;
+               }
+       }
+       /*Free Mime*/
+       if (appsvc->mime) {
+               mime_x *mime = appsvc->mime;
+               mime_x *tmp = NULL;
+               while(mime != NULL) {
+                       tmp = mime->next;
+                       __ps_free_mime(mime);
+                       mime = tmp;
+               }
+       }
+       /*Free subapp*/
+       if (appsvc->subapp) {
+               subapp_x *subapp = appsvc->subapp;
+               subapp_x *tmp = NULL;
+               while(subapp != NULL) {
+                       tmp = subapp->next;
+                       __ps_free_subapp(subapp);
+                       subapp = tmp;
+               }
+       }
+       FREE_AND_NULL(appsvc);
+}
+
+static void __ps_free_deviceprofile(deviceprofile_x *deviceprofile)
+{
+       return;
+}
+
+static void __ps_free_define(define_x *define)
+{
+       if (define == NULL)
+               return;
+       FREE_AND_NULL(define->path);
+       /*Free Request*/
+       if (define->request) {
+               request_x *request = define->request;
+               request_x *tmp = NULL;
+               while(request != NULL) {
+                       tmp = request->next;
+                       __ps_free_request(request);
+                       request = tmp;
+               }
+       }
+       /*Free Allowed*/
+       if (define->allowed) {
+               allowed_x *allowed = define->allowed;
+               allowed_x *tmp = NULL;
+               while(allowed != NULL) {
+                       tmp = allowed->next;
+                       __ps_free_allowed(allowed);
+                       allowed = tmp;
+               }
+       }
+       FREE_AND_NULL(define);
+}
+
+static void __ps_free_datashare(datashare_x *datashare)
+{
+       if (datashare == NULL)
+               return;
+       /*Free Define*/
+       if (datashare->define) {
+               define_x *define =  datashare->define;
+               define_x *tmp = NULL;
+               while(define != NULL) {
+                       tmp = define->next;
+                       __ps_free_define(define);
+                       define = tmp;
+               }
+       }
+       /*Free Request*/
+       if (datashare->request) {
+               request_x *request = datashare->request;
+               request_x *tmp = NULL;
+               while(request != NULL) {
+                       tmp = request->next;
+                       __ps_free_request(request);
+                       request = tmp;
+               }
+       }
+       FREE_AND_NULL(datashare);
+}
+
+static void __ps_free_label(label_x *label)
+{
+       if (label == NULL)
+               return;
+       FREE_AND_NULL(label->name);
+       FREE_AND_NULL(label->text);
+       FREE_AND_NULL(label->lang);
+       FREE_AND_NULL(label);
+}
+
+static void __ps_free_author(author_x *author)
+{
+       if (author == NULL)
+               return;
+       FREE_AND_NULL(author->email);
+       FREE_AND_NULL(author->text);
+       FREE_AND_NULL(author->href);
+       FREE_AND_NULL(author->lang);
+       FREE_AND_NULL(author);
+}
+
+static void __ps_free_description(description_x *description)
+{
+       if (description == NULL)
+               return;
+       FREE_AND_NULL(description->name);
+       FREE_AND_NULL(description->text);
+       FREE_AND_NULL(description->lang);
+       FREE_AND_NULL(description);
+}
+
+static void __ps_free_license(license_x *license)
+{
+       if (license == NULL)
+               return;
+       FREE_AND_NULL(license->text);
+       FREE_AND_NULL(license->lang);
+       FREE_AND_NULL(license);
+}
+
+static void __ps_free_uiapplication(uiapplication_x *uiapplication)
+{
+       if (uiapplication == NULL)
+               return;
+       FREE_AND_NULL(uiapplication->exec);
+       FREE_AND_NULL(uiapplication->appid);
+       FREE_AND_NULL(uiapplication->nodisplay);
+       FREE_AND_NULL(uiapplication->multiple);
+       FREE_AND_NULL(uiapplication->type);
+       FREE_AND_NULL(uiapplication->categories);
+       FREE_AND_NULL(uiapplication->extraid);
+       FREE_AND_NULL(uiapplication->taskmanage);
+       FREE_AND_NULL(uiapplication->enabled);
+       FREE_AND_NULL(uiapplication->hwacceleration);
+       FREE_AND_NULL(uiapplication->screenreader);
+       FREE_AND_NULL(uiapplication->mainapp);
+       FREE_AND_NULL(uiapplication->recentimage);
+       FREE_AND_NULL(uiapplication->package);
+       FREE_AND_NULL(uiapplication->launchcondition);
+       FREE_AND_NULL(uiapplication->multi_instance);
+       FREE_AND_NULL(uiapplication->multi_instance_mainid);
+       FREE_AND_NULL(uiapplication->multi_window);
+       FREE_AND_NULL(uiapplication->support_disable);
+       FREE_AND_NULL(uiapplication->ui_gadget);
+       FREE_AND_NULL(uiapplication->removable);
+       FREE_AND_NULL(uiapplication->support_mode);
+       FREE_AND_NULL(uiapplication->support_feature);
+       FREE_AND_NULL(uiapplication->satui_label);
+       FREE_AND_NULL(uiapplication->package_type);
+       FREE_AND_NULL(uiapplication->package_system);
+       FREE_AND_NULL(uiapplication->package_installed_time);
+
+       /*Free Label*/
+       if (uiapplication->label) {
+               label_x *label = uiapplication->label;
+               label_x *tmp = NULL;
+               while(label != NULL) {
+                       tmp = label->next;
+                       __ps_free_label(label);
+                       label = tmp;
+               }
+       }
+       /*Free Icon*/
+       if (uiapplication->icon) {
+               icon_x *icon = uiapplication->icon;
+               icon_x *tmp = NULL;
+               while(icon != NULL) {
+                       tmp = icon->next;
+                       __ps_free_icon(icon);
+                       icon = tmp;
+               }
+       }
+       /*Free image*/
+       if (uiapplication->image) {
+               image_x *image = uiapplication->image;
+               image_x *tmp = NULL;
+               while(image != NULL) {
+                       tmp = image->next;
+                       __ps_free_image(image);
+                       image = tmp;
+               }
+       }
+       /*Free LaunchConditions*/
+       if (uiapplication->launchconditions) {
+               launchconditions_x *launchconditions = uiapplication->launchconditions;
+               launchconditions_x *tmp = NULL;
+               while(launchconditions != NULL) {
+                       tmp = launchconditions->next;
+                       __ps_free_launchconditions(launchconditions);
+                       launchconditions = tmp;
+               }
+       }
+       /*Free Notification*/
+       if (uiapplication->notification) {
+               notification_x *notification = uiapplication->notification;
+               notification_x *tmp = NULL;
+               while(notification != NULL) {
+                       tmp = notification->next;
+                       __ps_free_notification(notification);
+                       notification = tmp;
+               }
+       }
+       /*Free DataShare*/
+       if (uiapplication->datashare) {
+               datashare_x *datashare = uiapplication->datashare;
+               datashare_x *tmp = NULL;
+               while(datashare != NULL) {
+                       tmp = datashare->next;
+                       __ps_free_datashare(datashare);
+                       datashare = tmp;
+               }
+       }
+       /*Free AppSvc*/
+       if (uiapplication->appsvc) {
+               appsvc_x *appsvc = uiapplication->appsvc;
+               appsvc_x *tmp = NULL;
+               while(appsvc != NULL) {
+                       tmp = appsvc->next;
+                       __ps_free_appsvc(appsvc);
+                       appsvc = tmp;
+               }
+       }
+       /*Free Category*/
+       if (uiapplication->category) {
+               category_x *category = uiapplication->category;
+               category_x *tmp = NULL;
+               while(category != NULL) {
+                       tmp = category->next;
+                       __ps_free_category(category);
+                       category = tmp;
+               }
+       }
+       /*Free Metadata*/
+       if (uiapplication->metadata) {
+               metadata_x *metadata = uiapplication->metadata;
+               metadata_x *tmp = NULL;
+               while(metadata != NULL) {
+                       tmp = metadata->next;
+                       __ps_free_metadata(metadata);
+                       metadata = tmp;
+               }
+       }
+       /*Free permission*/
+       if (uiapplication->permission) {
+               permission_x *permission = uiapplication->permission;
+               permission_x *tmp = NULL;
+               while(permission != NULL) {
+                       tmp = permission->next;
+                       __ps_free_permission(permission);
+                       permission = tmp;
+               }
+       }
+
+       /*Free datacontrol*/
+       if (uiapplication->datacontrol) {
+               datacontrol_x *datacontrol = uiapplication->datacontrol;
+               datacontrol_x *tmp = NULL;
+               while(datacontrol != NULL) {
+                       tmp = datacontrol->next;
+                       __ps_free_datacontrol(datacontrol);
+                       datacontrol = tmp;
+               }
+       }
+
+       /* _PRODUCT_LAUNCHING_ENHANCED_ START */
+       FREE_AND_NULL(uiapplication->indicatordisplay);
+       FREE_AND_NULL(uiapplication->portraitimg);
+       FREE_AND_NULL(uiapplication->landscapeimg);
+       FREE_AND_NULL(uiapplication->effectimage_type);
+       /* _PRODUCT_LAUNCHING_ENHANCED_ END */
+       FREE_AND_NULL(uiapplication->guestmode_visibility);
+       FREE_AND_NULL(uiapplication->app_component);
+       FREE_AND_NULL(uiapplication->permission_type);
+       FREE_AND_NULL(uiapplication->component_type);
+       FREE_AND_NULL(uiapplication->preload);
+       FREE_AND_NULL(uiapplication->submode);
+       FREE_AND_NULL(uiapplication->submode_mainid);
+       FREE_AND_NULL(uiapplication->installed_storage);
+       FREE_AND_NULL(uiapplication->process_pool);
+       FREE_AND_NULL(uiapplication->autorestart);
+       FREE_AND_NULL(uiapplication->onboot);
+
+       FREE_AND_NULL(uiapplication);
+}
+
+static void __ps_free_font(font_x *font)
+{
+       if (font == NULL)
+               return;
+       FREE_AND_NULL(font->name);
+       FREE_AND_NULL(font->text);
+       FREE_AND_NULL(font);
+}
+
+static void __ps_free_theme(theme_x *theme)
+{
+       if (theme == NULL)
+               return;
+       FREE_AND_NULL(theme->name);
+       FREE_AND_NULL(theme->text);
+       FREE_AND_NULL(theme);
+}
+
+static void __ps_free_daemon(daemon_x *daemon)
+{
+       if (daemon == NULL)
+               return;
+       FREE_AND_NULL(daemon->name);
+       FREE_AND_NULL(daemon->text);
+       FREE_AND_NULL(daemon);
+}
+
+static void __ps_free_ime(ime_x *ime)
+{
+       if (ime == NULL)
+               return;
+       FREE_AND_NULL(ime->name);
+       FREE_AND_NULL(ime->text);
+       FREE_AND_NULL(ime);
+}
+
+API void _pkgmgrinfo_basic_free_manifest_x(manifest_x *mfx)
+{
+       if (mfx == NULL)
+               return;
+       FREE_AND_NULL(mfx->ns);
+       FREE_AND_NULL(mfx->package);
+       FREE_AND_NULL(mfx->version);
+       FREE_AND_NULL(mfx->installlocation);
+       FREE_AND_NULL(mfx->preload);
+       FREE_AND_NULL(mfx->readonly);
+       FREE_AND_NULL(mfx->removable);
+       FREE_AND_NULL(mfx->update);
+       FREE_AND_NULL(mfx->system);
+       FREE_AND_NULL(mfx->hash);
+       FREE_AND_NULL(mfx->type);
+       FREE_AND_NULL(mfx->package_size);
+       FREE_AND_NULL(mfx->package_total_size);
+       FREE_AND_NULL(mfx->package_data_size);
+       FREE_AND_NULL(mfx->installed_time);
+       FREE_AND_NULL(mfx->installed_storage);
+       FREE_AND_NULL(mfx->storeclient_id);
+       FREE_AND_NULL(mfx->mainapp_id);
+       FREE_AND_NULL(mfx->package_url);
+       FREE_AND_NULL(mfx->root_path);
+       FREE_AND_NULL(mfx->csc_path);
+       FREE_AND_NULL(mfx->appsetting);
+       FREE_AND_NULL(mfx->nodisplay_setting);
+       FREE_AND_NULL(mfx->support_disable);
+       FREE_AND_NULL(mfx->mother_package);
+       FREE_AND_NULL(mfx->support_mode);
+       FREE_AND_NULL(mfx->groupid);
+       FREE_AND_NULL(mfx->support_reset);
+       FREE_AND_NULL(mfx->use_reset);
+
+       /*Free Icon*/
+       if (mfx->icon) {
+               icon_x *icon = mfx->icon;
+               icon_x *tmp = NULL;
+               while(icon != NULL) {
+                       tmp = icon->next;
+                       __ps_free_icon(icon);
+                       icon = tmp;
+               }
+       }
+       /*Free Label*/
+       if (mfx->label) {
+               label_x *label = mfx->label;
+               label_x *tmp = NULL;
+               while(label != NULL) {
+                       tmp = label->next;
+                       __ps_free_label(label);
+                       label = tmp;
+               }
+       }
+       /*Free Author*/
+       if (mfx->author) {
+               author_x *author = mfx->author;
+               author_x *tmp = NULL;
+               while(author != NULL) {
+                       tmp = author->next;
+                       __ps_free_author(author);
+                       author = tmp;
+               }
+       }
+       /*Free Description*/
+       if (mfx->description) {
+               description_x *description = mfx->description;
+               description_x *tmp = NULL;
+               while(description != NULL) {
+                       tmp = description->next;
+                       __ps_free_description(description);
+                       description = tmp;
+               }
+       }
+       /*Free License*/
+       if (mfx->license) {
+               license_x *license = mfx->license;
+               license_x *tmp = NULL;
+               while(license != NULL) {
+                       tmp = license->next;
+                       __ps_free_license(license);
+                       license = tmp;
+               }
+       }
+       /*Free Privileges*/
+       if (mfx->privileges) {
+               privileges_x *privileges = mfx->privileges;
+               privileges_x *tmp = NULL;
+               while(privileges != NULL) {
+                       tmp = privileges->next;
+                       __ps_free_privileges(privileges);
+                       privileges = tmp;
+               }
+       }
+       /*Free UiApplication*/
+       if (mfx->uiapplication) {
+               uiapplication_x *uiapplication = mfx->uiapplication;
+               uiapplication_x *tmp = NULL;
+               while(uiapplication != NULL) {
+                       tmp = uiapplication->next;
+                       __ps_free_uiapplication(uiapplication);
+                       uiapplication = tmp;
+               }
+       }
+       /*Free Daemon*/
+       if (mfx->daemon) {
+               daemon_x *daemon = mfx->daemon;
+               daemon_x *tmp = NULL;
+               while(daemon != NULL) {
+                       tmp = daemon->next;
+                       __ps_free_daemon(daemon);
+                       daemon = tmp;
+               }
+       }
+       /*Free Theme*/
+       if (mfx->theme) {
+               theme_x *theme = mfx->theme;
+               theme_x *tmp = NULL;
+               while(theme != NULL) {
+                       tmp = theme->next;
+                       __ps_free_theme(theme);
+                       theme = tmp;
+               }
+       }
+       /*Free Font*/
+       if (mfx->font) {
+               font_x *font = mfx->font;
+               font_x *tmp = NULL;
+               while(font != NULL) {
+                       tmp = font->next;
+                       __ps_free_font(font);
+                       font = tmp;
+               }
+       }
+       /*Free Ime*/
+       if (mfx->ime) {
+               ime_x *ime = mfx->ime;
+               ime_x *tmp = NULL;
+               while(ime != NULL) {
+                       tmp = ime->next;
+                       __ps_free_ime(ime);
+                       ime = tmp;
+               }
+       }
+       /*Free Compatibility*/
+       if (mfx->compatibility) {
+               compatibility_x *compatibility = mfx->compatibility;
+               compatibility_x *tmp = NULL;
+               while(compatibility != NULL) {
+                       tmp = compatibility->next;
+                       __ps_free_compatibility(compatibility);
+                       compatibility = tmp;
+               }
+       }
+       /*Free DeviceProfile*/
+       if (mfx->deviceprofile) {
+               deviceprofile_x *deviceprofile = mfx->deviceprofile;
+               deviceprofile_x *tmp = NULL;
+               while(deviceprofile != NULL) {
+                       tmp = deviceprofile->next;
+                       __ps_free_deviceprofile(deviceprofile);
+                       deviceprofile = tmp;
+               }
+       }
+       FREE_AND_NULL(mfx);
+       return;
+}
+
+API char*  pkgmgrinfo_basic_generate_hash_for_file( const char *file)
+{
+
+       unsigned char c[MD5_DIGEST_LENGTH] = {0};
+       char *hash = NULL;
+       char temp[3]={0};
+       int index = 0;
+       MD5_CTX mdContext;
+       int bytes;
+       unsigned char data[1024];
+
+       FILE *inFile = fopen (file, "rb");
+
+       if (inFile == NULL) {
+               _LOGD("@Error while opening the file: %s",strerror(errno));
+               return NULL;
+       }
+
+       MD5_Init (&mdContext);
+
+       while ((bytes = fread (data, 1, 1024, inFile)) != 0)
+               MD5_Update (&mdContext, data, bytes);
+
+       MD5_Final (c,&mdContext);
+
+       hash = (char*)malloc(HASH_LEN + 1);
+       if(hash == NULL){
+               _LOGE("Malloc failed!!");
+               goto catch;
+       }
+       memset(hash,'\0',HASH_LEN + 1);
+
+       for(index = 0; index < MD5_DIGEST_LENGTH; index++) {
+               sprintf(temp,"%02x",c[index]);
+               strncat(hash,temp,strlen(temp));
+
+       }
+
+catch:
+       if(inFile)
+               fclose (inFile);
+
+       return hash;
+}
index 62b9b76..b0e26f0 100644 (file)
 #include <sqlite3.h>
 #include <db-util.h>
 
-#include "pkgmgr-info-internal.h"
-#include "pkgmgr-info-debug.h"
+#include "pkgmgrinfo_private.h"
+#include "pkgmgrinfo_debug.h"
 #include "pkgmgr-info.h"
+#include "pkgmgrinfo_basic.h"
 
 #ifdef LOG_TAG
 #undef LOG_TAG
@@ -71,7 +72,7 @@ static int __certinfo_cb(void *data, int ncols, char **coltxt, char **colname)
        for(i = 0; i < ncols; i++)
        {
                if (strcmp(colname[i], "package") == 0) {
-                       if (coltxt[i])
+                       if (coltxt[i] && info->pkgid == NULL)
                                info->pkgid = strdup(coltxt[i]);
                        else
                                info->pkgid = NULL;
@@ -121,7 +122,7 @@ static int __certinfo_cb(void *data, int ncols, char **coltxt, char **colname)
                        else
                                (info->cert_id)[PMINFO_DISTRIBUTOR2_ROOT_CERT] = 0;
                } else if (strcmp(colname[i], "cert_info") == 0 ){
-                       if (coltxt[i])
+                       if (coltxt[i] && info->cert_value == NULL)
                                info->cert_value = strdup(coltxt[i]);
                        else
                                info->cert_value = NULL;
@@ -261,22 +262,12 @@ static int __delete_certinfo(const char *pkgid)
        sqlite3_free(del_query);
        ret = PMINFO_R_OK;
 err:
-       if (indexinfo) {
-               free(indexinfo);
-               indexinfo = NULL;
-       }
-       if (certinfo->pkgid) {
-               free(certinfo->pkgid);
-               certinfo->pkgid = NULL;
-       }
+       FREE_AND_NULL(indexinfo);
+       FREE_AND_NULL(certinfo->pkgid);
        for (i = 0; i < MAX_CERT_TYPE; i++) {
-               if ((certinfo->cert_info)[i]) {
-                       free((certinfo->cert_info)[i]);
-                       (certinfo->cert_info)[i] = NULL;
-               }
+               FREE_AND_NULL((certinfo->cert_info)[i]);
        }
-       free(certinfo);
-       certinfo = NULL;
+       FREE_AND_NULL(certinfo);
        return ret;
 }
 
@@ -333,8 +324,7 @@ API int pkgmgrinfo_pkginfo_load_certinfo(const char *pkgid, pkgmgrinfo_certinfo_
                }
                if (certinfo->cert_value) {
                        (certinfo->cert_info)[i] = strdup(certinfo->cert_value);
-                       free(certinfo->cert_value);
-                       certinfo->cert_value = NULL;
+                       FREE_AND_NULL(certinfo->cert_value);
                }
        }
 err:
@@ -363,18 +353,11 @@ API int pkgmgrinfo_pkginfo_destroy_certinfo(pkgmgrinfo_certinfo_h handle)
        int i = 0;
        pkgmgr_certinfo_x *certinfo = NULL;
        certinfo = (pkgmgr_certinfo_x *)handle;
-       if (certinfo->pkgid) {
-               free(certinfo->pkgid);
-               certinfo->pkgid = NULL;
-       }
+       FREE_AND_NULL(certinfo->pkgid);
        for (i = 0; i < MAX_CERT_TYPE; i++) {
-               if ((certinfo->cert_info)[i]) {
-                       free((certinfo->cert_info)[i]);
-                       (certinfo->cert_info)[i] = NULL;
-               }
+               FREE_AND_NULL((certinfo->cert_info)[i]);
        }
-       free(certinfo);
-       certinfo = NULL;
+       FREE_AND_NULL(certinfo);
        return PMINFO_R_OK;
 }
 
@@ -589,14 +572,8 @@ API int pkgmgrinfo_save_certinfo(const char *pkgid, pkgmgrinfo_instcertinfo_h ha
        ret =  PMINFO_R_OK;
 err:
        sqlite3_close(cert_db);
-       if (vquery) {
-               free(vquery);
-               vquery = NULL;
-       }
-       if (indexinfo) {
-               free(indexinfo);
-               indexinfo = NULL;
-       }
+       FREE_AND_NULL(vquery);
+       FREE_AND_NULL(indexinfo);
        return ret;
 }
 
@@ -606,18 +583,11 @@ API int pkgmgrinfo_destroy_certinfo_set_handle(pkgmgrinfo_instcertinfo_h handle)
        int i = 0;
        pkgmgr_instcertinfo_x *certinfo = NULL;
        certinfo = (pkgmgr_instcertinfo_x *)handle;
-       if (certinfo->pkgid) {
-               free(certinfo->pkgid);
-               certinfo->pkgid = NULL;
-       }
+       FREE_AND_NULL(certinfo->pkgid);
        for (i = 0; i < MAX_CERT_TYPE; i++) {
-               if ((certinfo->cert_info)[i]) {
-                       free((certinfo->cert_info)[i]);
-                       (certinfo->cert_info)[i] = NULL;
-               }
+               FREE_AND_NULL((certinfo->cert_info)[i]);
        }
-       free(certinfo);
-       certinfo = NULL;
+       FREE_AND_NULL(certinfo);
        return PMINFO_R_OK;
 }
 
index 3194ebd..000f3d1 100644 (file)
@@ -26,8 +26,8 @@
 #include <dbus/dbus.h>
 #include <dbus/dbus-glib-lowlevel.h>
 
-#include "pkgmgr-info-internal.h"
-#include "pkgmgr-info-debug.h"
+#include "pkgmgrinfo_private.h"
+#include "pkgmgrinfo_debug.h"
 #include "pkgmgr-info.h"
 
 #ifdef LOG_TAG
@@ -62,7 +62,6 @@ static int __get_pkg_location(const char *pkgid)
 /* pkgmgrinfo client start*/
 API pkgmgrinfo_client *pkgmgrinfo_client_new(pkgmgrinfo_client_type ctype)
 {
-       int ret = 0;
        char *errmsg = NULL;
        void *pc = NULL;
        void *handle = NULL;
@@ -72,13 +71,14 @@ API pkgmgrinfo_client *pkgmgrinfo_client_new(pkgmgrinfo_client_type ctype)
        retvm_if(!handle, NULL, "dlopen() failed. [%s]", dlerror());
 
        __pkgmgr_client_new = dlsym(handle, "pkgmgr_client_new");
+       retvm_if(__pkgmgr_client_new == NULL, NULL, "__pkgmgr_client_new() failed");
+
        errmsg = dlerror();
-       tryvm_if((errmsg != NULL) || (__pkgmgr_client_new == NULL), ret = PMINFO_R_ERROR, "dlsym() failed. [%s]", errmsg);
+       retvm_if(errmsg != NULL, NULL, "dlsym() failed. [%s]", errmsg);
 
        pc = __pkgmgr_client_new(ctype);
-       tryvm_if(pc == NULL, ret = PMINFO_R_ERROR, "pkgmgr_client_new failed.");
 
-catch:
+//catch:
 //     dlclose(handle);
        return (pkgmgrinfo_client *) pc;
 }
index 6aa454c..ba07c31 100644 (file)
@@ -26,8 +26,8 @@
 #include <dlfcn.h>
 #include <dirent.h>
 
-#include "pkgmgr-info-internal.h"
-#include "pkgmgr-info-debug.h"
+#include "pkgmgrinfo_private.h"
+#include "pkgmgrinfo_debug.h"
 #include "pkgmgr-info.h"
 
 #include "pkgmgr_parser.h"
 #endif
 #define LOG_TAG "PKGMGR_DB"
 
-typedef struct _pkgmgr_datacontrol_x {
-       char *appid;
-       char *access;
-} pkgmgr_datacontrol_x;
-
-static int __datacontrol_cb(void *data, int ncols, char **coltxt, char **colname)
-{
-       pkgmgr_datacontrol_x *info = (pkgmgr_datacontrol_x *)data;
-       int i = 0;
-       for(i = 0; i < ncols; i++)
-       {
-               if (strcmp(colname[i], "PACKAGE_NAME") == 0) {
-                       if (coltxt[i])
-                               info->appid = strdup(coltxt[i]);
-                       else
-                               info->appid = NULL;
-               } else if (strcmp(colname[i], "ACCESS") == 0 ){
-                       if (coltxt[i])
-                               info->access = strdup(coltxt[i]);
-                       else
-                               info->access = NULL;
-               } else
-                       continue;
-       }
-       return 0;
-}
-
-static int __update_ail_appinfo(manifest_x * mfx)
+static int __ail_set_installed_storage(const char *pkgid, INSTALL_LOCATION location)
 {
+       retvm_if(pkgid == NULL, PMINFO_R_EINVAL, "pkgid is NULL\n");
        int ret = -1;
-       uiapplication_x *uiapplication = mfx->uiapplication;
-       void *lib_handle = NULL;
-       int (*ail_desktop_operation) (const char *appid, const char *property, const char *value, bool broadcast);
-       char *aop = NULL;
-
-       if ((lib_handle = dlopen(LIBAIL_PATH, RTLD_LAZY)) == NULL) {
-               _LOGE("dlopen is failed LIBAIL_PATH[%s]\n", LIBAIL_PATH);
-               goto END;
-       }
+       int exist = 0;
+       sqlite3 *ail_db = NULL;
+       char *AIL_DB_PATH = "/opt/dbspace/.app_info.db";
+       char *query = NULL;
 
-       aop  = "ail_desktop_appinfo_modify_str";
+       ret = db_util_open(AIL_DB_PATH, &ail_db, 0);
+       retvm_if(ret != SQLITE_OK, PMINFO_R_ERROR, "connect db [%s] failed!", AIL_DB_PATH);
 
-       if ((ail_desktop_operation =
-            dlsym(lib_handle, aop)) == NULL || dlerror() != NULL) {
-               _LOGE("can not find symbol \n");
-               goto END;
-       }
+       /*Begin transaction*/
+       ret = sqlite3_exec(ail_db, "BEGIN EXCLUSIVE", NULL, NULL, NULL);
+       tryvm_if(ret != SQLITE_OK, ret = PMINFO_R_ERROR, "Failed to begin transaction\n");
+       _LOGD("Transaction Begin\n");
 
-       for(; uiapplication; uiapplication=uiapplication->next) {
-               ret = ail_desktop_operation(uiapplication->appid, "AIL_PROP_X_SLP_INSTALLEDSTORAGE_STR", mfx->installed_storage, false);
-               if (ret != 0)
-                       _LOGE("Failed to store info in DB\n");
+       /*validate pkgid*/
+       query = sqlite3_mprintf("select exists(select * from app_info where x_slp_pkgid=%Q)", pkgid);
+       ret = __exec_db_query(ail_db, query, _pkgmgrinfo_validate_cb, (void *)&exist);
+       tryvm_if(ret == -1, ret = PMINFO_R_ERROR, "sqlite3_exec[%s] fail", pkgid);
+       if (exist == 0) {
+               _LOGS("pkgid[%s] not found in DB", pkgid);
+               ret = PMINFO_R_ERROR;
+               goto catch;
        }
+       sqlite3_free(query);
 
-END:
-       if (lib_handle)
-               dlclose(lib_handle);
-
-       return ret;
-}
-
-API int pkgmgrinfo_create_pkgdbinfo(const char *pkgid, pkgmgrinfo_pkgdbinfo_h *handle)
-{
-       retvm_if(!pkgid, PMINFO_R_EINVAL, "pkgid is NULL");
-       retvm_if(!handle, PMINFO_R_EINVAL, "Argument supplied is NULL");
-
-       char *manifest = NULL;
-       manifest_x *mfx = NULL;
+       query = sqlite3_mprintf("update app_info set x_slp_installedstorage=%Q where x_slp_pkgid=%Q", location?"installed_external":"installed_internal", pkgid);
 
-       manifest = pkgmgr_parser_get_manifest_file(pkgid);
-       retvm_if(manifest == NULL, PMINFO_R_EINVAL, "pkg[%s] dont have manifest file", pkgid);
+       ret = sqlite3_exec(ail_db, query, NULL, NULL, NULL);
+       tryvm_if(ret != SQLITE_OK, ret = PMINFO_R_ERROR, "Don't execute query = %s\n", query);
 
-       mfx = pkgmgr_parser_process_manifest_xml(manifest);
-       if (manifest) {
-               free(manifest);
-               manifest = NULL;
+       /*Commit transaction*/
+       ret = sqlite3_exec(ail_db, "COMMIT", NULL, NULL, NULL);
+       if (ret != SQLITE_OK) {
+               _LOGE("Failed to commit transaction. Rollback now\n");
+               ret = sqlite3_exec(ail_db, "ROLLBACK", NULL, NULL, NULL);
+               tryvm_if(ret != SQLITE_OK, ret = PMINFO_R_ERROR, "Don't execute query = %s\n", query);
        }
-       retvm_if(mfx == NULL, PMINFO_R_EINVAL, "pkg[%s] parsing fail", pkgid);
-
-       *handle = (void *)mfx;
-
-       return PMINFO_R_OK;
-}
-
-API int pkgmgrinfo_set_type_to_pkgdbinfo(pkgmgrinfo_pkgdbinfo_h handle, const char *type)
-{
-       retvm_if(!type, PMINFO_R_EINVAL, "Argument supplied is NULL");
-       retvm_if(!handle, PMINFO_R_EINVAL, "Argument supplied is NULL");
-
-       int len = strlen(type);
-       retvm_if(len > PKG_TYPE_STRING_LEN_MAX, PMINFO_R_EINVAL, "pkg type length exceeds the max limit");
-
-       manifest_x *mfx = (manifest_x *)handle;
-       free((void *)mfx->type);
-
-       mfx->type = strndup(type, PKG_TYPE_STRING_LEN_MAX);
-       return PMINFO_R_OK;
-}
-
-API int pkgmgrinfo_set_version_to_pkgdbinfo(pkgmgrinfo_pkgdbinfo_h handle, const char *version)
-{
-       retvm_if(!version, PMINFO_R_EINVAL, "Argument supplied is NULL");
-       retvm_if(!handle, PMINFO_R_EINVAL, "Argument supplied is NULL");
-
-       int len = strlen(version);
-       retvm_if(len > PKG_TYPE_STRING_LEN_MAX, PMINFO_R_EINVAL, "pkg type length exceeds the max limit");
-
-       manifest_x *mfx = (manifest_x *)handle;
-       free((void *)mfx->version);
-
-       mfx->version = strndup(version, PKG_VERSION_STRING_LEN_MAX);
-       return PMINFO_R_OK;
-}
-
-API int pkgmgrinfo_set_install_location_to_pkgdbinfo(pkgmgrinfo_pkgdbinfo_h handle, INSTALL_LOCATION location)
-{
-       retvm_if(!handle, PMINFO_R_EINVAL, "Argument supplied is NULL");
-       retvm_if((location < 0) || (location > 1), PMINFO_R_EINVAL, "Argument supplied is NULL");
-
-       manifest_x *mfx = (manifest_x *)handle;
-       free((void *)mfx->installlocation);
-
-       if (location == INSTALL_INTERNAL)
-               mfx->installlocation= strdup("internal-only");
-       else if (location == INSTALL_EXTERNAL)
-               mfx->installlocation= strdup("prefer-external");
-
-       return PMINFO_R_OK;
-}
-
-API int pkgmgrinfo_set_size_to_pkgdbinfo(pkgmgrinfo_pkgdbinfo_h handle, const char *size)
-{
-       retvm_if(!handle, PMINFO_R_EINVAL, "Argument supplied is NULL");
-       retvm_if(size == NULL, PMINFO_R_EINVAL, "Argument supplied is NULL");
-
-       manifest_x *mfx = (manifest_x *)handle;
-
-       mfx->package_size = strdup(size);
-
-       return PMINFO_R_OK;
-}
-
-API int pkgmgrinfo_set_label_to_pkgdbinfo(pkgmgrinfo_pkgdbinfo_h handle, const char *label_txt, const char *locale)
-{
-       retvm_if(!handle, PMINFO_R_EINVAL, "Argument supplied is NULL");
-       retvm_if(!label_txt, PMINFO_R_EINVAL, "Argument supplied is NULL");
-
-       int len = strlen(label_txt);
-       retvm_if(len > PKG_TYPE_STRING_LEN_MAX, PMINFO_R_EINVAL, "pkg type length exceeds the max limit");
-
-       manifest_x *mfx = (manifest_x *)handle;
-
-       label_x *label = calloc(1, sizeof(label_x));
-       retvm_if(label == NULL, PMINFO_R_EINVAL, "Malloc Failed");
-
-       LISTADD(mfx->label, label);
-       if (locale)
-               mfx->label->lang = strdup(locale);
-       else
-               mfx->label->lang = strdup(DEFAULT_LOCALE);
-       mfx->label->text = strdup(label_txt);
+       _LOGD("Transaction Commit and End\n");
 
-       return PMINFO_R_OK;
+       ret = PMINFO_R_OK;
+catch:
+       sqlite3_close(ail_db);
+       sqlite3_free(query);
+       return ret;
 }
 
-API int pkgmgrinfo_set_icon_to_pkgdbinfo(pkgmgrinfo_pkgdbinfo_h handle, const char *icon_txt, const char *locale)
+API int pkgmgrinfo_pkginfo_set_state_enabled(const char *pkgid, bool enabled)
 {
-       retvm_if(!handle, PMINFO_R_EINVAL, "Argument supplied is NULL");
-       retvm_if(!icon_txt, PMINFO_R_EINVAL, "Argument supplied is NULL");
-
-       int len = strlen(icon_txt);
-       retvm_if(len > PKG_TYPE_STRING_LEN_MAX, PMINFO_R_EINVAL, "pkg type length exceeds the max limit");
-
-       manifest_x *mfx = (manifest_x *)handle;
-
-       icon_x *icon = calloc(1, sizeof(icon_x));
-       retvm_if(icon == NULL, PMINFO_R_EINVAL, "Malloc Failed");
-
-       LISTADD(mfx->icon, icon);
-       if (locale)
-               mfx->icon->lang = strdup(locale);
-       else
-               mfx->icon->lang = strdup(DEFAULT_LOCALE);
-       mfx->icon->text = strdup(icon_txt);
-
-       return PMINFO_R_OK;
+       /* Should be implemented later */
+       return 0;
 }
 
-API int pkgmgrinfo_set_description_to_pkgdbinfo(pkgmgrinfo_pkgdbinfo_h handle, const char *desc_txt, const char *locale)
+API int pkgmgrinfo_pkginfo_set_preload(const char *pkgid, int preload)
 {
-       retvm_if(!handle, PMINFO_R_EINVAL, "Argument supplied is NULL");
-       retvm_if(!desc_txt, PMINFO_R_EINVAL, "Argument supplied is NULL");
-
-       int len = strlen(desc_txt);
-       retvm_if(len > PKG_TYPE_STRING_LEN_MAX, PMINFO_R_EINVAL, "pkg type length exceeds the max limit");
-
-       manifest_x *mfx = (manifest_x *)handle;
-
-       description_x *description = calloc(1, sizeof(description_x));
-       retvm_if(description == NULL, PMINFO_R_EINVAL, "Malloc Failed");
+       retvm_if(pkgid == NULL, PMINFO_R_EINVAL, "pkgid is NULL\n");
+       int ret = -1;
+       int exist = 0;
+       sqlite3 *pkginfo_db = NULL;
+       char *query = NULL;
 
-       LISTADD(mfx->description, description);
-       if (locale)
-               mfx->description->lang = strdup(locale);
-       else
-               mfx->description->lang = strdup(DEFAULT_LOCALE);
-       mfx->description->text = strdup(desc_txt);
+       ret = db_util_open(MANIFEST_DB, &pkginfo_db, 0);
+       retvm_if(ret != SQLITE_OK, PMINFO_R_ERROR, "connect db [%s] failed!", MANIFEST_DB);
 
-       return PMINFO_R_OK;
-}
+       /*Begin transaction*/
+       ret = sqlite3_exec(pkginfo_db, "BEGIN EXCLUSIVE", NULL, NULL, NULL);
+       tryvm_if(ret != SQLITE_OK, ret = PMINFO_R_ERROR, "Failed to begin transaction\n");
+       _LOGD("Transaction Begin\n");
 
-API int pkgmgrinfo_set_author_to_pkgdbinfo(pkgmgrinfo_pkgdbinfo_h handle, const char *author_name,
-               const char *author_email, const char *author_href, const char *locale)
-{
-       retvm_if(!handle, PMINFO_R_EINVAL, "Argument supplied is NULL");
-       manifest_x *mfx = (manifest_x *)handle;
-       author_x *author = calloc(1, sizeof(author_x));
-       retvm_if(author == NULL, PMINFO_R_EINVAL, "Argument supplied is NULL");
-
-       LISTADD(mfx->author, author);
-       if (author_name)
-               mfx->author->text = strdup(author_name);
-       if (author_email)
-               mfx->author->email = strdup(author_email);
-       if (author_href)
-               mfx->author->href = strdup(author_href);
-       if (locale)
-               mfx->author->lang = strdup(locale);
-       else
-               mfx->author->lang = strdup(DEFAULT_LOCALE);
-       return PMINFO_R_OK;
-}
+       /*validate pkgid*/
+       query = sqlite3_mprintf("select exists(select * from package_info where package=%Q)", pkgid);
+       ret = __exec_db_query(pkginfo_db, query, _pkgmgrinfo_validate_cb, (void *)&exist);
+       tryvm_if(ret == -1, ret = PMINFO_R_ERROR, "sqlite3_exec[%s] fail", pkgid);
+       if (exist == 0) {
+               _LOGS("pkgid[%s] not found in DB", pkgid);
+               ret = PMINFO_R_ERROR;
+               goto catch;
+       }
+       sqlite3_free(query);
 
-API int pkgmgrinfo_set_removable_to_pkgdbinfo(pkgmgrinfo_pkgdbinfo_h handle, int removable)
-{
-       retvm_if(!handle, PMINFO_R_EINVAL, "Argument supplied is NULL");
-       retvm_if((removable < 0) || (removable > 1), PMINFO_R_EINVAL, "Argument supplied is NULL");
+       query = sqlite3_mprintf("update package_info set package_preload=%Q where package=%Q", preload?"true":"false", pkgid);
 
-       manifest_x *mfx = (manifest_x *)handle;
-       free((void *)mfx->removable);
+       ret = sqlite3_exec(pkginfo_db, query, NULL, NULL, NULL);
+       tryvm_if(ret != SQLITE_OK, ret = PMINFO_R_ERROR, "Don't execute query = %s\n", query);
 
-       if (removable == 0)
-               mfx->removable= strdup("false");
-       else if (removable == 1)
-               mfx->removable= strdup("true");
+       /*Commit transaction*/
+       ret = sqlite3_exec(pkginfo_db, "COMMIT", NULL, NULL, NULL);
+       if (ret != SQLITE_OK) {
+               _LOGE("Failed to commit transaction. Rollback now\n");
+               ret = sqlite3_exec(pkginfo_db, "ROLLBACK", NULL, NULL, NULL);
+               tryvm_if(ret != SQLITE_OK, ret = PMINFO_R_ERROR, "Don't execute query = %s\n", query);
+       }
+       _LOGD("Transaction Commit and End\n");
 
-       return PMINFO_R_OK;
+       ret = PMINFO_R_OK;
+catch:
+       sqlite3_close(pkginfo_db);
+       sqlite3_free(query);
+       return ret;
 }
 
-API int pkgmgrinfo_set_preload_to_pkgdbinfo(pkgmgrinfo_pkgdbinfo_h handle, int preload)
-{
-       retvm_if(!handle, PMINFO_R_EINVAL, "Argument supplied is NULL");
-       retvm_if((preload < 0) || (preload > 1), PMINFO_R_EINVAL, "Argument supplied is NULL");
-
-       manifest_x *mfx = (manifest_x *)handle;
-
-       free((void *)mfx->preload);
-
-       if (preload == 0)
-               mfx->preload= strdup("false");
-       else if (preload == 1)
-               mfx->preload= strdup("true");
-
-       return PMINFO_R_OK;
-}
 
-API int pkgmgrinfo_set_installed_storage_to_pkgdbinfo(pkgmgrinfo_pkgdbinfo_h handle, INSTALL_LOCATION location)
+API int pkgmgrinfo_pkginfo_set_installed_storage(const char *pkgid, INSTALL_LOCATION location)
 {
-       retvm_if(!handle, PMINFO_R_EINVAL, "Argument supplied is NULL");
-       retvm_if((location < 0) || (location > 1), PMINFO_R_EINVAL, "Argument supplied is NULL");
+       retvm_if(pkgid == NULL, PMINFO_R_EINVAL, "pkgid is NULL\n");
+       int ret = -1;
+       int exist = 0;
+       sqlite3 *pkginfo_db = NULL;
+       char *query = NULL;
 
-       manifest_x *mfx = (manifest_x *)handle;
+       ret = db_util_open(MANIFEST_DB, &pkginfo_db, 0);
+       retvm_if(ret != SQLITE_OK, PMINFO_R_ERROR, "connect db [%s] failed!", MANIFEST_DB);
 
-       free((void *)mfx->installed_storage);
+       /*Begin transaction*/
+       // Setting Manifest DB
+       ret = sqlite3_exec(pkginfo_db, "BEGIN EXCLUSIVE", NULL, NULL, NULL);
+       tryvm_if(ret != SQLITE_OK, ret = PMINFO_R_ERROR, "Failed to begin transaction\n");
+       _LOGD("Transaction Begin\n");
 
-       if (location == INSTALL_INTERNAL)
-               mfx->installed_storage= strdup("installed_internal");
-       else if (location == INSTALL_EXTERNAL)
-               mfx->installed_storage= strdup("installed_external");
+       /*validate pkgid*/
+       query = sqlite3_mprintf("select exists(select * from package_info where package=%Q)", pkgid);
+       ret = __exec_db_query(pkginfo_db, query, _pkgmgrinfo_validate_cb, (void *)&exist);
+       tryvm_if(ret == -1, ret = PMINFO_R_ERROR, "sqlite3_exec[%s] fail", pkgid);
+       if (exist == 0) {
+               _LOGS("pkgid[%s] not found in DB", pkgid);
+               ret = PMINFO_R_ERROR;
+               goto catch;
+       }
+       sqlite3_free(query);
 
-       return PMINFO_R_OK;
-}
+       query = sqlite3_mprintf("select exists(select * from package_app_info where package=%Q)", pkgid);
+       ret = __exec_db_query(pkginfo_db, query, _pkgmgrinfo_validate_cb, (void *)&exist);
+       tryvm_if(ret == -1, ret = PMINFO_R_ERROR, "sqlite3_exec[%s] fail", pkgid);
+       if (exist == 0) {
+               _LOGS("pkgid[%s] not found in DB", pkgid);
+               ret = PMINFO_R_ERROR;
+               goto catch;
+       }
+       sqlite3_free(query);
 
-API int pkgmgrinfo_save_pkgdbinfo(pkgmgrinfo_pkgdbinfo_h handle)
-{
-       retvm_if(!handle, PMINFO_R_EINVAL, "Argument supplied is NULL");
+       // pkgcakge_info table
+       query = sqlite3_mprintf("update package_info set installed_storage=%Q where package=%Q", location?"installed_external":"installed_internal", pkgid);
 
-       int ret = 0;
-       manifest_x *mfx = NULL;
-       mfx = (manifest_x *)handle;
+       ret = sqlite3_exec(pkginfo_db, query, NULL, NULL, NULL);
+       tryvm_if(ret != SQLITE_OK, ret = PMINFO_R_ERROR, "Don't execute query = %s\n", query);
+       sqlite3_free(query);
 
-       ret = pkgmgr_parser_update_manifest_info_in_db(mfx);
-       retvm_if(ret != 0, PMINFO_R_ERROR, "Failed to store info in DB\n");
-       
-       ret = __update_ail_appinfo(mfx);
-       retvm_if(ret != 0, PMINFO_R_ERROR, "Failed to store info in DB\n");
+       // package_app_info table
+       query = sqlite3_mprintf("update package_app_info set app_installed_storage=%Q where package=%Q", location?"installed_external":"installed_internal", pkgid);
 
-       _LOGE("Successfully stored info in DB\n");
-       return PMINFO_R_OK;
-}
+       ret = sqlite3_exec(pkginfo_db, query, NULL, NULL, NULL);
+       tryvm_if(ret != SQLITE_OK, ret = PMINFO_R_ERROR, "Don't execute query = %s\n", query);
 
-API int pkgmgrinfo_destroy_pkgdbinfo(pkgmgrinfo_pkgdbinfo_h handle)
-{
-       retvm_if(!handle, PMINFO_R_EINVAL, "Argument supplied is NULL");
+       // Setting AIL DB
+       ret = __ail_set_installed_storage(pkgid, location);
+       tryvm_if(ret != PMINFO_R_OK, ret = PMINFO_R_ERROR, "Setting AIL DB failed.");
 
-       manifest_x *mfx = NULL;
-       mfx = (manifest_x *)handle;
-       pkgmgr_parser_free_manifest_xml(mfx);
-       return PMINFO_R_OK;
-}
+       /*Commit transaction*/
+       ret = sqlite3_exec(pkginfo_db, "COMMIT", NULL, NULL, NULL);
+       if (ret != SQLITE_OK) {
+               _LOGE("Failed to commit transaction. Rollback now\n");
+               ret = sqlite3_exec(pkginfo_db, "ROLLBACK", NULL, NULL, NULL);
+               tryvm_if(ret != SQLITE_OK, ret = PMINFO_R_ERROR, "Don't execute query = %s\n", query);
+       }
+       _LOGD("Transaction Commit and End\n");
 
-API int pkgmgrinfo_pkginfo_set_state_enabled(const char *pkgid, bool enabled)
-{
-       /* Should be implemented later */
-       return 0;
+       ret = PMINFO_R_OK;
+catch:
+       sqlite3_close(pkginfo_db);
+       sqlite3_free(query);
+       return ret;
 }
 
 API int pkgmgrinfo_appinfo_set_state_enabled(const char *appid, bool enabled)
 {
        retvm_if(appid == NULL, PMINFO_R_EINVAL, "appid is NULL\n");
        int ret = -1;
+       int exist = 0;
        sqlite3 *pkginfo_db = NULL;
+       char *query = NULL;
 
        ret = db_util_open(MANIFEST_DB, &pkginfo_db, 0);
        retvm_if(ret != SQLITE_OK, PMINFO_R_ERROR, "connect db [%s] failed!", MANIFEST_DB);
 
        /*Begin transaction*/
        ret = sqlite3_exec(pkginfo_db, "BEGIN EXCLUSIVE", NULL, NULL, NULL);
-       if (ret != SQLITE_OK) {
-               _LOGE("Failed to begin transaction\n");
-               sqlite3_close(pkginfo_db);
-               return PMINFO_R_ERROR;
-       }
+       tryvm_if(ret != SQLITE_OK, ret = PMINFO_R_ERROR, "Failed to begin transaction\n");
        _LOGD("Transaction Begin\n");
 
-       char *query = sqlite3_mprintf("update package_app_info set app_enabled=%Q where app_id=%Q", enabled?"true":"false", appid);
-
-       char *error_message = NULL;
-       if (SQLITE_OK !=
-           sqlite3_exec(pkginfo_db, query, NULL, NULL, &error_message)) {
-               _LOGE("Don't execute query = %s error message = %s\n", query,
-                      error_message);
-               sqlite3_free(error_message);
-               sqlite3_free(query);
-               return PMINFO_R_ERROR;
+       /*validate appid*/
+       query = sqlite3_mprintf("select exists(select * from package_app_info where app_id=%Q)", appid);
+       ret = __exec_db_query(pkginfo_db, query, _pkgmgrinfo_validate_cb, (void *)&exist);
+       tryvm_if(ret == -1, ret = PMINFO_R_ERROR, "sqlite3_exec[%s] fail", appid);
+       if (exist == 0) {
+               _LOGS("appid[%s] not found in DB", appid);
+               ret = PMINFO_R_ERROR;
+               goto catch;
        }
-       sqlite3_free(error_message);
+       sqlite3_free(query);
+
+       query = sqlite3_mprintf("update package_app_info set app_enabled=%Q where app_id=%Q", enabled?"true":"false", appid);
+
+       ret = sqlite3_exec(pkginfo_db, query, NULL, NULL, NULL);
+       tryvm_if(ret != SQLITE_OK, ret = PMINFO_R_ERROR, "Don't execute query = %s\n", query);
 
        /*Commit transaction*/
        ret = sqlite3_exec(pkginfo_db, "COMMIT", NULL, NULL, NULL);
        if (ret != SQLITE_OK) {
                _LOGE("Failed to commit transaction. Rollback now\n");
                ret = sqlite3_exec(pkginfo_db, "ROLLBACK", NULL, NULL, NULL);
-               if (ret != SQLITE_OK)
-                       _LOGE("Don't execute query = %s\n", query);
-               sqlite3_close(pkginfo_db);
-               sqlite3_free(query);
-               return PMINFO_R_ERROR;
+               tryvm_if(ret != SQLITE_OK, ret = PMINFO_R_ERROR, "Don't execute query = %s\n", query);
        }
        _LOGD("Transaction Commit and End\n");
-       sqlite3_close(pkginfo_db);
-       sqlite3_free(query);
-
-       return PMINFO_R_OK;
-}
-
-
-API int pkgmgrinfo_datacontrol_get_info(const char *providerid, const char * type, char **appid, char **access)
-{
-       retvm_if(providerid == NULL, PMINFO_R_EINVAL, "Argument supplied is NULL\n");
-       retvm_if(type == NULL, PMINFO_R_EINVAL, "Argument supplied is NULL\n");
-       retvm_if(appid == NULL, PMINFO_R_EINVAL, "Argument supplied to hold return value is NULL\n");
-       retvm_if(access == NULL, PMINFO_R_EINVAL, "Argument supplied to hold return value is NULL\n");
-       int ret = PMINFO_R_OK;
-       char *error_message = NULL;
-       pkgmgr_datacontrol_x *data = NULL;
 
-       sqlite3 *datacontrol_info_db = NULL;
-
-       /*open db*/
-       ret = db_util_open(DATACONTROL_DB, &datacontrol_info_db, 0);
-       retvm_if(ret != SQLITE_OK, PMINFO_R_ERROR, "connect db [%s] failed!", MANIFEST_DB);
-
-       data = (pkgmgr_datacontrol_x *)calloc(1, sizeof(pkgmgr_datacontrol_x));
-       if (data == NULL) {
-               _LOGE("Failed to allocate memory for pkgmgr_datacontrol_x\n");
-               sqlite3_close(datacontrol_info_db);
-               return PMINFO_R_ERROR;
-       }
-       char *query = sqlite3_mprintf("select appinfo.package_name, datacontrol.access from appinfo, datacontrol where datacontrol.id=appinfo.unique_id and datacontrol.provider_id = %Q and datacontrol.type=%Q COLLATE NOCASE",
-               providerid, type);
-
-       if (SQLITE_OK !=
-               sqlite3_exec(datacontrol_info_db, query, __datacontrol_cb, (void *)data, &error_message)) {
-               _LOGE("Don't execute query = %s error message = %s\n", query,
-                          error_message);
-               sqlite3_free(error_message);
-               sqlite3_free(query);
-               sqlite3_close(datacontrol_info_db);
-               return PMINFO_R_ERROR;
-       }
-
-       *appid = (char *)data->appid;
-       *access = (char *)data->access;
-       free(data);
+       ret = PMINFO_R_OK;
+catch:
+       sqlite3_close(pkginfo_db);
        sqlite3_free(query);
-       sqlite3_close(datacontrol_info_db);
-
-       return PMINFO_R_OK;
+       return ret;
 }
 
 API int pkgmgrinfo_appinfo_set_default_label(const char *appid, const char *label)
 {
        retvm_if(appid == NULL, PMINFO_R_EINVAL, "appid is NULL\n");
        int ret = -1;
-       char *error_message = NULL;
+       int exist = 0;
        sqlite3 *pkginfo_db = NULL;
+       char *query = NULL;
 
        /*open db*/
        ret = db_util_open(MANIFEST_DB, &pkginfo_db, 0);
@@ -462,38 +275,38 @@ API int pkgmgrinfo_appinfo_set_default_label(const char *appid, const char *labe
 
        /*Begin transaction*/
        ret = sqlite3_exec(pkginfo_db, "BEGIN EXCLUSIVE", NULL, NULL, NULL);
-       if (ret != SQLITE_OK) {
-               _LOGE("Failed to begin transaction\n");
-               sqlite3_close(pkginfo_db);
-               return PMINFO_R_ERROR;
-       }
+       tryvm_if(ret != SQLITE_OK, ret = PMINFO_R_ERROR, "Failed to begin transaction\n");
        _LOGD("Transaction Begin\n");
 
-       char *query = sqlite3_mprintf("update package_app_localized_info set app_label=%Q where app_id=%Q", label, appid);
-
-       ret = sqlite3_exec(pkginfo_db, query, NULL, NULL, &error_message);
-       if (ret != SQLITE_OK) {
-               _LOGE("Don't execute query = %s error message = %s\n", query, error_message);
-               sqlite3_free(error_message);
-               sqlite3_free(query);
-               return PMINFO_R_ERROR;
+       /*validate appid*/
+       query = sqlite3_mprintf("select exists(select * from package_app_localized_info where app_id=%Q)", appid);
+       ret = __exec_db_query(pkginfo_db, query, _pkgmgrinfo_validate_cb, (void *)&exist);
+       tryvm_if(ret == -1, ret = PMINFO_R_ERROR, "sqlite3_exec[%s] fail", appid);
+       if (exist == 0) {
+               _LOGS("appid[%s] not found in DB", appid);
+               ret = PMINFO_R_ERROR;
+               goto catch;
        }
+       sqlite3_free(query);
+
+       query = sqlite3_mprintf("update package_app_localized_info set app_label=%Q where app_id=%Q", label, appid);
+
+       ret = sqlite3_exec(pkginfo_db, query, NULL, NULL, NULL);
+       tryvm_if(ret != SQLITE_OK, ret = PMINFO_R_ERROR, "Don't execute query = %s\n", query);
 
        /*Commit transaction*/
        ret = sqlite3_exec(pkginfo_db, "COMMIT", NULL, NULL, NULL);
        if (ret != SQLITE_OK) {
                _LOGE("Failed to commit transaction. Rollback now\n");
                ret = sqlite3_exec(pkginfo_db, "ROLLBACK", NULL, NULL, NULL);
-               if (ret != SQLITE_OK)
-                       _LOGE("Don't execute query = %s\n", query);
-               sqlite3_free(query);
-               sqlite3_close(pkginfo_db);
-               return PMINFO_R_ERROR;
+               tryvm_if(ret != SQLITE_OK, ret = PMINFO_R_ERROR, "Don't execute query = %s\n", query);
        }
        _LOGD("Transaction Commit and End\n");
+
+       ret = PMINFO_R_OK;
+catch:
        sqlite3_free(query);
        sqlite3_close(pkginfo_db);
-
-       return PMINFO_R_OK;
+       return ret;
 }
 
diff --git a/src/pkgmgrinfo_feature.c b/src/pkgmgrinfo_feature.c
new file mode 100644 (file)
index 0000000..3cbb85d
--- /dev/null
@@ -0,0 +1,467 @@
+/*
+ * pkgmgrinfo-feature
+ *
+ * Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved.
+ *
+ * Contact: Jayoun Lee <airjany@samsung.com>, Junsuk Oh <junsuk77.oh@samsung.com>,
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+#include "pkgmgrinfo_private.h"
+
+#ifdef LOG_TAG
+#undef LOG_TAG
+#endif
+#define LOG_TAG "PKGMGR_INFO"
+
+typedef int (*pkgmgr_handler)(int req_id, const char *pkg_type,
+                               const char *pkgid, const char *key,
+                               const char *val, const void *pmsg, void *data);
+
+typedef void pkgmgr_client;
+typedef void pkgmgr_info;
+
+typedef enum {
+       PM_REQUEST_CSC = 0,
+       PM_REQUEST_MOVE = 1,
+       PM_REQUEST_GET_SIZE = 2,
+       PM_REQUEST_KILL_APP = 3,
+       PM_REQUEST_CHECK_APP = 4,
+       PM_REQUEST_MAX
+}pkgmgr_request_service_type;
+
+typedef enum {
+       PM_GET_TOTAL_SIZE= 0,
+       PM_GET_DATA_SIZE = 1,
+       PM_GET_ALL_PKGS = 2,
+       PM_GET_SIZE_INFO = 3,
+       PM_GET_TOTAL_AND_DATA = 4,
+       PM_GET_SIZE_FILE = 5,
+       PM_GET_MAX
+}pkgmgr_getsize_type;
+
+typedef enum {
+       PC_REQUEST = 0,
+       PC_LISTENING,
+       PC_BROADCAST,
+}client_type;
+
+static int __pkg_list_cb(void *data, int ncols, char **coltxt, char **colname)
+{
+       pkgmgr_pkginfo_x *udata = (pkgmgr_pkginfo_x *)data;
+       int i = 0;
+       pkgmgr_pkginfo_x *info = NULL;
+       info = calloc(1, sizeof(pkgmgr_pkginfo_x));
+       info->manifest_info = (manifest_x *)calloc(1, sizeof(manifest_x));
+
+       LISTADD(udata, info);
+       for(i = 0; i < ncols; i++)
+       {
+               if (strcmp(colname[i], "package") == 0) {
+                       if (coltxt[i])
+                               info->manifest_info->package = strdup(coltxt[i]);
+                       else
+                               info->manifest_info->package = NULL;
+               } else
+                       continue;
+       }
+
+       return 0;
+}
+
+API int pkgmgrinfo_pkginfo_get_disabled_pkginfo(const char *pkgid, pkgmgrinfo_pkginfo_h *handle)
+{
+       retvm_if(pkgid == NULL, PMINFO_R_EINVAL, "pkgid is NULL\n");
+       retvm_if(handle == NULL, PMINFO_R_EINVAL, "Argument supplied to hold return value is NULL\n");
+       pkgmgr_pkginfo_x *pkginfo = NULL;
+       int ret = PMINFO_R_OK;
+       char *query = NULL;
+       char *locale = NULL;
+       label_x *tmp1 = NULL;
+       icon_x *tmp2 = NULL;
+       description_x *tmp3 = NULL;
+       author_x *tmp4 = NULL;
+       privilege_x *tmp5 = NULL;
+       sqlite3 *pkginfo_db = NULL;
+
+       /*validate pkgid*/
+       ret = db_util_open(MANIFEST_DB, &pkginfo_db, 0);
+       retvm_if(ret != SQLITE_OK, PMINFO_R_ERROR, "connect db [%s] failed!", MANIFEST_DB);
+
+       /*get system locale*/
+       locale = __convert_system_locale_to_manifest_locale();
+       tryvm_if(locale == NULL, ret = PMINFO_R_ERROR, "manifest locale is NULL");
+
+       pkginfo = (pkgmgr_pkginfo_x *)calloc(1, sizeof(pkgmgr_pkginfo_x));
+       tryvm_if(pkginfo == NULL, ret = PMINFO_R_ERROR, "Failed to allocate memory for pkginfo");
+
+       pkginfo->locale = strdup(locale);
+
+       pkginfo->manifest_info = (manifest_x *)calloc(1, sizeof(manifest_x));
+       tryvm_if(pkginfo->manifest_info == NULL, ret = PMINFO_R_ERROR, "Failed to allocate memory for manifest info");
+
+       pkginfo->manifest_info->package = strdup(pkgid);
+       pkginfo->manifest_info->privileges = (privileges_x *)calloc(1, sizeof(privileges_x));
+       tryvm_if(pkginfo->manifest_info->privileges == NULL, ret = PMINFO_R_ERROR, "Failed to allocate memory for privileges info");
+
+       /*populate manifest_info from DB*/
+       query= sqlite3_mprintf("select * from disabled_package_info where package=%Q", pkgid);
+       ret = __exec_db_query(pkginfo_db, query, __pkginfo_cb, (void *)pkginfo);
+       sqlite3_free(query);
+       tryvm_if(ret == -1, ret = PMINFO_R_ERROR, "Package Info DB Information retrieval failed");
+
+       query= sqlite3_mprintf("select * from disabled_package_localized_info where package=%Q and package_locale=%Q", pkgid, locale);
+       ret = __exec_db_query(pkginfo_db, query, __pkginfo_cb, (void *)pkginfo);
+       sqlite3_free(query);
+       tryvm_if(ret == -1, ret = PMINFO_R_ERROR, "Package Info DB Information retrieval failed");
+
+       /*Also store the values corresponding to default locales*/
+       query= sqlite3_mprintf("select * from disabled_package_localized_info where package=%Q and package_locale=%Q", pkgid, DEFAULT_LOCALE);
+       ret = __exec_db_query(pkginfo_db, query, __pkginfo_cb, (void *)pkginfo);
+       sqlite3_free(query);
+       tryvm_if(ret == -1, ret = PMINFO_R_ERROR, "Package Info DB Information retrieval failed");
+
+       SAFE_LISTHEAD(pkginfo->manifest_info->label, tmp1);
+       SAFE_LISTHEAD(pkginfo->manifest_info->icon, tmp2);
+       SAFE_LISTHEAD(pkginfo->manifest_info->description, tmp3);
+       SAFE_LISTHEAD(pkginfo->manifest_info->author, tmp4);
+       SAFE_LISTHEAD(pkginfo->manifest_info->privileges->privilege, tmp5);
+
+catch:
+       if (ret == PMINFO_R_OK)
+               *handle = (void*)pkginfo;
+       else {
+               *handle = NULL;
+               __cleanup_pkginfo(pkginfo);
+       }
+       sqlite3_close(pkginfo_db);
+
+       if (locale) {
+               free(locale);
+               locale = NULL;
+       }
+       return ret;
+}
+
+API int pkgmgrinfo_pkginfo_get_disabled_list(pkgmgrinfo_pkg_list_cb pkg_list_cb, void *user_data)
+{
+       retvm_if(pkg_list_cb == NULL, PMINFO_R_EINVAL, "callback function is NULL\n");
+       int ret = PMINFO_R_OK;
+       char query[MAX_QUERY_LEN] = {'\0'};
+       char *locale = NULL;
+       pkgmgr_pkginfo_x *pkginfo = NULL;
+       label_x *tmp1 = NULL;
+       icon_x *tmp2 = NULL;
+       description_x *tmp3 = NULL;
+       author_x *tmp4 = NULL;
+       sqlite3 *pkginfo_db = NULL;
+       pkgmgr_pkginfo_x *tmphead = NULL;
+       pkgmgr_pkginfo_x *node = NULL;
+       pkgmgr_pkginfo_x *temp_node = NULL;
+
+       /*open db*/
+       ret = db_util_open(MANIFEST_DB, &pkginfo_db, 0);
+       retvm_if(ret != SQLITE_OK, PMINFO_R_ERROR, "connect db [%s] failed!", MANIFEST_DB);
+
+       /*get system locale*/
+       locale = __convert_system_locale_to_manifest_locale();
+       tryvm_if(locale == NULL, ret = PMINFO_R_ERROR, "manifest locale is NULL");
+
+       tmphead = (pkgmgr_pkginfo_x *)calloc(1, sizeof(pkgmgr_pkginfo_x));
+       if(tmphead == NULL){
+               _LOGE("@calloc failed!!");
+               FREE_AND_NULL(locale);
+               return PMINFO_R_ERROR;
+       }
+
+       snprintf(query, MAX_QUERY_LEN, "select * from disabled_package_info");
+       ret = __exec_db_query(pkginfo_db, query, __pkg_list_cb, (void *)tmphead);
+       tryvm_if(ret == -1, ret = PMINFO_R_ERROR, "Package Info DB Information retrieval failed");
+
+       LISTHEAD(tmphead, node);
+
+       for(node = node->next; node ; node = node->next) {
+               pkginfo = node;
+               pkginfo->locale = strdup(locale);
+               pkginfo->manifest_info->privileges = (privileges_x *)calloc(1, sizeof(privileges_x));
+               tryvm_if(pkginfo->manifest_info->privileges == NULL, ret = PMINFO_R_ERROR, "Failed to allocate memory for privileges info\n");
+
+               /*populate manifest_info from DB*/
+               snprintf(query, MAX_QUERY_LEN, "select * from disabled_package_info where package='%s' ", pkginfo->manifest_info->package);
+               ret = __exec_db_query(pkginfo_db, query, __pkginfo_cb, (void *)pkginfo);
+               tryvm_if(ret == -1, ret = PMINFO_R_ERROR, "Package Info DB Information retrieval failed");
+
+               memset(query, '\0', MAX_QUERY_LEN);
+               snprintf(query, MAX_QUERY_LEN, "select * from disabled_package_localized_info where" \
+                       " package='%s' and package_locale='%s'", pkginfo->manifest_info->package, locale);
+               ret = __exec_db_query(pkginfo_db, query, __pkginfo_cb, (void *)pkginfo);
+               tryvm_if(ret == -1, ret = PMINFO_R_ERROR, "Package Info DB Information retrieval failed");
+
+               /*Also store the values corresponding to default locales*/
+               memset(query, '\0', MAX_QUERY_LEN);
+               snprintf(query, MAX_QUERY_LEN, "select * from disabled_package_localized_info where" \
+                       " package='%s' and package_locale='%s'", pkginfo->manifest_info->package, DEFAULT_LOCALE);
+               ret = __exec_db_query(pkginfo_db, query, __pkginfo_cb, (void *)pkginfo);
+               tryvm_if(ret == -1, ret = PMINFO_R_ERROR, "Package Info DB Information retrieval failed");
+
+               SAFE_LISTHEAD(pkginfo->manifest_info->label, tmp1);
+               SAFE_LISTHEAD(pkginfo->manifest_info->icon, tmp2);
+               SAFE_LISTHEAD(pkginfo->manifest_info->description, tmp3);
+               SAFE_LISTHEAD(pkginfo->manifest_info->author, tmp4);
+       }
+
+       LISTHEAD(tmphead, node);
+
+       for(node = node->next; node ; node = node->next) {
+               pkginfo = node;
+
+               ret = pkg_list_cb( (void *)pkginfo, user_data);
+               if(ret < 0)
+                       break;
+       }
+
+       ret = PMINFO_R_OK;
+
+catch:
+       sqlite3_close(pkginfo_db);
+       if (locale) {
+               free(locale);
+               locale = NULL;
+       }
+       if (tmphead) {
+               LISTHEAD(tmphead, node);
+               temp_node = node->next;
+               node = temp_node;
+               while (node) {
+                       temp_node = node->next;
+                       __cleanup_pkginfo(node);
+                       node = temp_node;
+               }
+               __cleanup_pkginfo(tmphead);
+       }
+       return ret;
+}
+
+API int pkgmgrinfo_appinfo_get_disabled_appinfo(const char *appid, pkgmgrinfo_appinfo_h *handle)
+{
+       retvm_if(appid == NULL, PMINFO_R_EINVAL, "appid is NULL");
+       retvm_if(handle == NULL, PMINFO_R_EINVAL, "Argument supplied to hold return value is NULL");
+
+       pkgmgr_appinfo_x *appinfo = NULL;
+       char *locale = NULL;
+       int ret = -1;
+       int exist = 0;
+       label_x *tmp1 = NULL;
+       icon_x *tmp2 = NULL;
+       category_x *tmp3 = NULL;
+       metadata_x *tmp4 = NULL;
+
+       char *query = NULL;
+       sqlite3 *appinfo_db = NULL;
+
+       /*open db*/
+       ret = db_util_open(MANIFEST_DB, &appinfo_db, 0);
+       retvm_if(ret != SQLITE_OK, ret = PMINFO_R_ERROR, "connect db [%s] failed!", MANIFEST_DB);
+
+       /*check appid exist on db*/
+       query = sqlite3_mprintf("select exists(select * from disabled_package_app_info where app_id=%Q)", appid);
+       ret = __exec_db_query(appinfo_db, query, _pkgmgrinfo_validate_cb, (void *)&exist);
+       sqlite3_free(query);
+       tryvm_if(ret == -1, ret = PMINFO_R_ERROR, "sqlite3_exec fail");
+       tryvm_if(exist == 0, ret = PMINFO_R_ERROR, "Appid[%s] not found in DB", appid);
+
+       /*get system locale*/
+       locale = __convert_system_locale_to_manifest_locale();
+       tryvm_if(locale == NULL, ret = PMINFO_R_ERROR, "manifest locale is NULL");
+
+       /*calloc appinfo*/
+       appinfo = (pkgmgr_appinfo_x *)calloc(1, sizeof(pkgmgr_appinfo_x));
+       tryvm_if(appinfo == NULL, ret = PMINFO_R_ERROR, "Failed to allocate memory for appinfo");
+
+       /*calloc app_component*/
+       appinfo->uiapp_info = (uiapplication_x *)calloc(1, sizeof(uiapplication_x));
+       tryvm_if(appinfo->uiapp_info == NULL, ret = PMINFO_R_ERROR, "Failed to allocate memory for uiapp info");
+
+       appinfo->locale = strdup(locale);
+
+       /*populate app_info from DB*/
+       query = sqlite3_mprintf("select * from disabled_package_app_info where app_id=%Q ", appid);
+       ret = __exec_db_query(appinfo_db, query, __appinfo_cb, (void *)appinfo);
+       sqlite3_free(query);
+       tryvm_if(ret == -1, ret = PMINFO_R_ERROR, "App Info DB Information retrieval failed");
+
+       query = sqlite3_mprintf("select * from disabled_package_app_localized_info where app_id=%Q and app_locale=%Q", appid, locale);
+       ret = __exec_db_query(appinfo_db, query, __appinfo_cb, (void *)appinfo);
+       sqlite3_free(query);
+       tryvm_if(ret == -1, ret = PMINFO_R_ERROR, "App Info DB Information retrieval failed");
+
+       /*Also store the values corresponding to default locales*/
+       query = sqlite3_mprintf("select * from disabled_package_app_localized_info where app_id=%Q and app_locale=%Q", appid, DEFAULT_LOCALE);
+       ret = __exec_db_query(appinfo_db, query, __appinfo_cb, (void *)appinfo);
+       sqlite3_free(query);
+       tryvm_if(ret == -1, ret = PMINFO_R_ERROR, "App Localized Info DB Information retrieval failed");
+
+       /*Populate app category*/
+       query = sqlite3_mprintf("select * from disabled_package_app_app_category where app_id=%Q", appid);
+       ret = __exec_db_query(appinfo_db, query, __appinfo_cb, (void *)appinfo);
+       sqlite3_free(query);
+       tryvm_if(ret == -1, ret = PMINFO_R_ERROR, "App Category Info DB Information retrieval failed");
+
+       /*Populate app metadata*/
+       query = sqlite3_mprintf("select * from disabled_package_app_app_metadata where app_id=%Q", appid);
+       ret = __exec_db_query(appinfo_db, query, __appinfo_cb, (void *)appinfo);
+       sqlite3_free(query);
+       tryvm_if(ret == -1, ret = PMINFO_R_ERROR, "App Metadata Info DB Information retrieval failed");
+
+       SAFE_LISTHEAD(appinfo->uiapp_info->label, tmp1);
+       SAFE_LISTHEAD(appinfo->uiapp_info->icon, tmp2);
+       SAFE_LISTHEAD(appinfo->uiapp_info->category, tmp3);
+       SAFE_LISTHEAD(appinfo->uiapp_info->metadata, tmp4);
+
+       ret = PMINFO_R_OK;
+
+catch:
+       if (ret == PMINFO_R_OK)
+               *handle = (void*)appinfo;
+       else {
+               *handle = NULL;
+               __cleanup_appinfo(appinfo);
+       }
+
+       sqlite3_close(appinfo_db);
+       if (locale) {
+               free(locale);
+               locale = NULL;
+       }
+       return ret;
+}
+
+API int pkgmgrinfo_appinfo_get_disabled_list(pkgmgrinfo_pkginfo_h handle, pkgmgrinfo_app_component component,
+                                               pkgmgrinfo_app_list_cb app_func, void *user_data)
+{
+       retvm_if(handle == NULL, PMINFO_R_EINVAL, "pkginfo handle is NULL");
+       retvm_if(app_func == NULL, PMINFO_R_EINVAL, "callback pointer is NULL");
+       retvm_if((component != PMINFO_UI_APP) && (component != PMINFO_SVC_APP) && (component != PMINFO_ALL_APP), PMINFO_R_EINVAL, "Invalid App Component Type");
+
+       char *locale = NULL;
+       int ret = -1;
+       char query[MAX_QUERY_LEN] = {'\0'};
+       pkgmgr_pkginfo_x *info = (pkgmgr_pkginfo_x *)handle;
+       pkgmgr_pkginfo_x *allinfo = NULL;
+       pkgmgr_appinfo_x *appinfo = NULL;
+       icon_x *ptr1 = NULL;
+       label_x *ptr2 = NULL;
+       category_x *ptr3 = NULL;
+       metadata_x *ptr4 = NULL;
+       permission_x *ptr5 = NULL;
+       image_x *ptr6 = NULL;
+       sqlite3 *appinfo_db = NULL;
+
+       /*check installed storage*/
+       ret = __pkginfo_check_installed_storage(info);
+       retvm_if(ret < 0, PMINFO_R_EINVAL, "[%s] is installed external, but is not in mmc", info->manifest_info->package);
+
+       /*get system locale*/
+       locale = __convert_system_locale_to_manifest_locale();
+       tryvm_if(locale == NULL, ret = PMINFO_R_EINVAL, "manifest locale is NULL");
+
+       /*calloc allinfo*/
+       allinfo = (pkgmgr_pkginfo_x *)calloc(1, sizeof(pkgmgr_pkginfo_x));
+       tryvm_if(allinfo == NULL, ret = PMINFO_R_ERROR, "Failed to allocate memory for appinfo");
+
+       /*calloc manifest_info*/
+       allinfo->manifest_info = (manifest_x *)calloc(1, sizeof(manifest_x));
+       tryvm_if(allinfo->manifest_info == NULL, ret = PMINFO_R_ERROR, "Out of Memory!!!");
+
+       /*calloc appinfo*/
+       appinfo = (pkgmgr_appinfo_x *)calloc(1, sizeof(pkgmgr_appinfo_x));
+       tryvm_if(appinfo == NULL, ret = PMINFO_R_ERROR, "Failed to allocate memory for appinfo");
+
+       /*open db */
+       ret = db_util_open(MANIFEST_DB, &appinfo_db, 0);
+       tryvm_if(ret != SQLITE_OK, ret = PMINFO_R_ERROR, "connect db [%s] failed!", MANIFEST_DB);
+
+       snprintf(query, MAX_QUERY_LEN, "select DISTINCT * from disabled_package_app_info where package='%s'", info->manifest_info->package);
+
+               /*Populate ui app info */
+               ret = __exec_db_query(appinfo_db, query, __uiapp_list_cb, (void *)info);
+               tryvm_if(ret == -1, ret = PMINFO_R_ERROR, "App Info list retrieval failed");
+
+               uiapplication_x *tmp = NULL;
+               SAFE_LISTHEAD(info->manifest_info->uiapplication, tmp);
+
+               /*Populate localized info for default locales and call callback*/
+               /*If the callback func return < 0 we break and no more call back is called*/
+               while(tmp != NULL)
+               {
+                       appinfo->locale = strdup(locale);
+                       appinfo->uiapp_info = tmp;
+                       if (strcmp(appinfo->uiapp_info->type,"c++app") == 0){
+                               if (locale) {
+                                       free(locale);
+                               }
+                               locale = __get_app_locale_by_fallback(appinfo_db, appinfo->uiapp_info->appid);
+                       }
+
+                       memset(query, '\0', MAX_QUERY_LEN);
+                       snprintf(query, MAX_QUERY_LEN, "select * from disabled_package_app_localized_info where app_id='%s' and app_locale='%s'", appinfo->uiapp_info->appid, locale);
+                       ret = __exec_db_query(appinfo_db, query, __appinfo_cb, (void *)appinfo);
+                       tryvm_if(ret == -1, ret = PMINFO_R_ERROR, "App Localized Info DB Information retrieval failed");
+
+                       memset(query, '\0', MAX_QUERY_LEN);
+                       snprintf(query, MAX_QUERY_LEN, "select * from disabled_package_app_localized_info where app_id='%s' and app_locale='%s'", appinfo->uiapp_info->appid, DEFAULT_LOCALE);
+                       ret = __exec_db_query(appinfo_db, query, __appinfo_cb, (void *)appinfo);
+                       tryvm_if(ret == -1, ret = PMINFO_R_ERROR, "App Localized Info DB Information retrieval failed");
+
+                       /*Populate app category*/
+                       memset(query, '\0', MAX_QUERY_LEN);
+                       snprintf(query, MAX_QUERY_LEN, "select * from disabled_package_app_app_category where app_id=='%s'", appinfo->uiapp_info->appid);
+                       ret = __exec_db_query(appinfo_db, query, __appinfo_cb, (void *)appinfo);
+                       tryvm_if(ret == -1, ret = PMINFO_R_ERROR, "App Category Info DB Information retrieval failed");
+
+                       /*Populate app metadata*/
+                       memset(query, '\0', MAX_QUERY_LEN);
+                       snprintf(query, MAX_QUERY_LEN, "select * from disabled_package_app_app_metadata where app_id='%s'", appinfo->uiapp_info->appid);
+                       ret = __exec_db_query(appinfo_db, query, __appinfo_cb, (void *)appinfo);
+                       tryvm_if(ret == -1, ret = PMINFO_R_ERROR, "App Metadata Info DB Information retrieval failed");
+
+                       SAFE_LISTHEAD(appinfo->uiapp_info->icon, ptr1);
+                       SAFE_LISTHEAD(appinfo->uiapp_info->label, ptr2);
+                       SAFE_LISTHEAD(appinfo->uiapp_info->category, ptr3);
+                       SAFE_LISTHEAD(appinfo->uiapp_info->metadata, ptr4);
+                       SAFE_LISTHEAD(appinfo->uiapp_info->permission, ptr5);
+                       SAFE_LISTHEAD(appinfo->uiapp_info->image, ptr6);
+
+                       ret = app_func((void *)appinfo, user_data);
+                       if (ret < 0)
+                               break;
+                       tmp = tmp->next;
+               }
+
+       ret = PMINFO_R_OK;
+catch:
+       if (locale) {
+               free(locale);
+               locale = NULL;
+       }
+       if (appinfo) {
+               free(appinfo);
+               appinfo = NULL;
+       }
+       __cleanup_pkginfo(allinfo);
+
+       sqlite3_close(appinfo_db);
+       return ret;
+}
index 4b4c408..d0e0d14 100644 (file)
 #endif
 #define LOG_TAG "PKGMGR_INFO"
 
-#define FILTER_QUERY_LIST_PACKAGE      "select DISTINCT package_info.package " \
-                               "from package_info LEFT OUTER JOIN package_localized_info " \
+#define FILTER_QUERY_LIST_PACKAGE      "select * from package_info LEFT OUTER JOIN package_localized_info " \
                                "ON package_info.package=package_localized_info.package " \
-                               "and package_localized_info.package_locale='%s' where "
+                               "and package_localized_info.package_locale IN ('%s', '%s') where "
+
 
 typedef struct _pkgmgr_cert_x {
        char *pkgid;
        int cert_id;
 } pkgmgr_cert_x;
 
-
-typedef int (*pkgmgr_handler)(int req_id, const char *pkg_type,
-                               const char *pkgid, const char *key,
-                               const char *val, const void *pmsg, void *data);
-
-typedef void pkgmgr_client;
-typedef void pkgmgr_info;
-
-typedef enum {
-       PM_REQUEST_CSC = 0,
-       PM_REQUEST_MOVE = 1,
-       PM_REQUEST_GET_SIZE = 2,
-       PM_REQUEST_KILL_APP = 3,
-       PM_REQUEST_CHECK_APP = 4,
-       PM_REQUEST_MAX
-}pkgmgr_request_service_type;
-
-typedef enum {
-       PM_GET_TOTAL_SIZE= 0,
-       PM_GET_DATA_SIZE = 1,
-       PM_GET_ALL_PKGS = 2,
-       PM_GET_SIZE_INFO = 3,
-       PM_GET_TOTAL_AND_DATA = 4,
-       PM_GET_SIZE_FILE = 5,
-       PM_GET_MAX
-}pkgmgr_getsize_type;
-
-typedef enum {
-       PC_REQUEST = 0,
-       PC_LISTENING,
-       PC_BROADCAST,
-}client_type;
-
-#define PKG_SIZE_INFO_FILE "/tmp/pkgmgr_size_info.txt"
-#define MAX_PKG_BUF_LEN                1024
-#define MAX_PKG_INFO_LEN       10
-
 static void __destroy_each_node(gpointer data, gpointer user_data)
 {
        ret_if(data == NULL);
        pkgmgrinfo_node_x *node = (pkgmgrinfo_node_x*)data;
-       if (node->value) {
-               free(node->value);
-               node->value = NULL;
-       }
-       if (node->key) {
-               free(node->key);
-               node->key = NULL;
+       FREE_AND_NULL(node->value);
+       FREE_AND_NULL(node->key);
+       FREE_AND_NULL(node);
+}
+
+static void __get_pkginfo_from_db(char *colname, char *coltxt, manifest_x *manifest_info)
+{
+       if (strcmp(colname, "package") == 0) {
+               if (manifest_info->package)
+                       return;
+
+               if (coltxt)
+                       manifest_info->package = strdup(coltxt);
+       } else if (strcmp(colname, "package_type") == 0) {
+               if (coltxt)
+                       manifest_info->type = strdup(coltxt);
+               else
+                       manifest_info->type = NULL;
+       } else if (strcmp(colname, "package_version") == 0) {
+               if (coltxt)
+                       manifest_info->version = strdup(coltxt);
+               else
+                       manifest_info->version = NULL;
+       } else if (strcmp(colname, "install_location") == 0) {
+               if (coltxt)
+                       manifest_info->installlocation = strdup(coltxt);
+               else
+                       manifest_info->installlocation = NULL;
+       } else if (strcmp(colname, "package_size") == 0) {
+               if (coltxt)
+                       manifest_info->package_size = strdup(coltxt);
+               else
+                       manifest_info->package_size = NULL;
+       } else if (strcmp(colname, "package_removable") == 0 ){
+               if (coltxt)
+                       manifest_info->removable = strdup(coltxt);
+               else
+                       manifest_info->removable = NULL;
+       } else if (strcmp(colname, "package_preload") == 0 ){
+               if (coltxt)
+                       manifest_info->preload = strdup(coltxt);
+               else
+                       manifest_info->preload = NULL;
+       } else if (strcmp(colname, "package_readonly") == 0 ){
+               if (coltxt)
+                       manifest_info->readonly = strdup(coltxt);
+               else
+                       manifest_info->readonly = NULL;
+       } else if (strcmp(colname, "package_update") == 0 ){
+               if (coltxt)
+                       manifest_info->update= strdup(coltxt);
+               else
+                       manifest_info->update = NULL;
+       } else if (strcmp(colname, "package_system") == 0 ){
+               if (coltxt)
+                       manifest_info->system= strdup(coltxt);
+               else
+                       manifest_info->system = NULL;
+       } else if (strcmp(colname, "package_appsetting") == 0 ){
+               if (coltxt)
+                       manifest_info->appsetting = strdup(coltxt);
+               else
+                       manifest_info->appsetting = NULL;
+       } else if (strcmp(colname, "installed_time") == 0 ){
+               if (coltxt)
+                       manifest_info->installed_time = strdup(coltxt);
+               else
+                       manifest_info->installed_time = NULL;
+       } else if (strcmp(colname, "installed_storage") == 0 ){
+               if (coltxt)
+                       manifest_info->installed_storage = strdup(coltxt);
+               else
+                       manifest_info->installed_storage = NULL;
+       } else if (strcmp(colname, "mainapp_id") == 0 ){
+               if (coltxt)
+                       manifest_info->mainapp_id = strdup(coltxt);
+               else
+                       manifest_info->mainapp_id = NULL;
+       } else if (strcmp(colname, "storeclient_id") == 0 ){
+               if (coltxt)
+                       manifest_info->storeclient_id = strdup(coltxt);
+               else
+                       manifest_info->storeclient_id = NULL;
+       } else if (strcmp(colname, "package_url") == 0 ){
+               if (coltxt)
+                       manifest_info->package_url = strdup(coltxt);
+               else
+                       manifest_info->package_url = NULL;
+       } else if (strcmp(colname, "root_path") == 0 ){
+               if (coltxt)
+                       manifest_info->root_path = strdup(coltxt);
+               else
+                       manifest_info->root_path = NULL;
+       } else if (strcmp(colname, "csc_path") == 0 ){
+               if (coltxt)
+                       manifest_info->csc_path = strdup(coltxt);
+               else
+                       manifest_info->csc_path = NULL;
+       } else if (strcmp(colname, "package_support_disable") == 0 ){
+               if (coltxt)
+                       manifest_info->support_disable = strdup(coltxt);
+               else
+                       manifest_info->support_disable = NULL;
+       } else if (strcmp(colname, "package_mother_package") == 0 ){
+               if (coltxt)
+                       manifest_info->mother_package = strdup(coltxt);
+               else
+                       manifest_info->mother_package = NULL;
+       } else if (strcmp(colname, "package_support_mode") == 0 ){
+               if (coltxt)
+                       manifest_info->support_mode = strdup(coltxt);
+               else
+                       manifest_info->support_mode = NULL;
+       } else if (strcmp(colname, "package_reserve1") == 0 ){
+               if (coltxt)
+                       manifest_info->support_reset = strdup(coltxt);
+               else
+                       manifest_info->support_reset = NULL;
+       } else if (strcmp(colname, "package_reserve2") == 0 ){
+               if (coltxt)
+                       manifest_info->use_reset = strdup(coltxt);
+               else
+                       manifest_info->use_reset = NULL;
+       } else if (strcmp(colname, "package_hash") == 0 ){
+               if (coltxt)
+                       manifest_info->hash = strdup(coltxt);
+               else
+                       manifest_info->hash = NULL;
+       } else if (strcmp(colname, "package_reserve3") == 0 ){
+               if (coltxt)
+                       manifest_info->groupid = strdup(coltxt);
+               else
+                       manifest_info->groupid = NULL;
+
+       /*end package_info table*/
+
+       } else if (strcmp(colname, "author_email") == 0 ){
+               if (coltxt)
+                       manifest_info->author->email = strdup(coltxt);
+               else
+                       manifest_info->author->email = NULL;
+       } else if (strcmp(colname, "author_href") == 0 ){
+               if (coltxt)
+                       manifest_info->author->href = strdup(coltxt);
+               else
+                       manifest_info->author->href = NULL;
+       } else if (strcmp(colname, "package_label") == 0 ){
+               if (coltxt)
+                       manifest_info->label->text = strdup(coltxt);
+               else
+                       manifest_info->label->text = NULL;
+       } else if (strcmp(colname, "package_icon") == 0 ){
+               if (coltxt)
+                       manifest_info->icon->text = strdup(coltxt);
+               else
+                       manifest_info->icon->text = NULL;
+       } else if (strcmp(colname, "package_description") == 0 ){
+               if (coltxt)
+                       manifest_info->description->text = strdup(coltxt);
+               else
+                       manifest_info->description->text = NULL;
+       } else if (strcmp(colname, "package_author") == 0 ){
+               if (coltxt)
+                       manifest_info->author->text = strdup(coltxt);
+               else
+                       manifest_info->author->text = NULL;
+       } else if (strcmp(colname, "package_locale") == 0 ){
+               if (coltxt) {
+                       manifest_info->author->lang = strdup(coltxt);
+                       manifest_info->icon->lang = strdup(coltxt);
+                       manifest_info->label->lang = strdup(coltxt);
+                       manifest_info->description->lang = strdup(coltxt);
+               }
+               else {
+                       manifest_info->author->lang = NULL;
+                       manifest_info->icon->lang = NULL;
+                       manifest_info->label->lang = NULL;
+                       manifest_info->description->lang = NULL;
+               }
+       /*end package_localized_info table*/
+
+       } else if (strcmp(colname, "privilege") == 0 ){
+               if (coltxt)
+                       manifest_info->privileges->privilege->text = strdup(coltxt);
+               else
+                       manifest_info->privileges->privilege->text = NULL;
+
        }
-       free(node);
-       node = NULL;
+       /*end package_privilege_info table*/
+
 }
 
-static int __pkg_list_cb(void *data, int ncols, char **coltxt, char **colname)
+static void __get_pkginfo_for_list(sqlite3_stmt *stmt, pkgmgr_pkginfo_x *udata)
 {
-       pkgmgr_pkginfo_x *udata = (pkgmgr_pkginfo_x *)data;
        int i = 0;
+       int ncols = 0;
+       char *colname = NULL;
+       char *coltxt = NULL;
        pkgmgr_pkginfo_x *info = NULL;
+
        info = calloc(1, sizeof(pkgmgr_pkginfo_x));
        info->manifest_info = (manifest_x *)calloc(1, sizeof(manifest_x));
+       info->manifest_info->icon= (icon_x *)calloc(1, sizeof(icon_x));
+       info->manifest_info->label= (label_x *)calloc(1, sizeof(label_x));
+       info->manifest_info->author= (author_x *)calloc(1, sizeof(author_x));
+       info->manifest_info->description= (description_x *)calloc(1, sizeof(description_x));
+
+       ncols = sqlite3_column_count(stmt);
 
        LISTADD(udata, info);
+
        for(i = 0; i < ncols; i++)
        {
-               if (strcmp(colname[i], "package") == 0) {
-                       if (coltxt[i])
-                               info->manifest_info->package = strdup(coltxt[i]);
-                       else
-                               info->manifest_info->package = NULL;
-               } else
-                       continue;
+               colname = (char *)sqlite3_column_name(stmt, i);
+               coltxt = (char *)sqlite3_column_text(stmt, i);
+
+//             _LOGE("field value  :: %s = %s \n", colname, coltxt);
+               __get_pkginfo_from_db(colname, coltxt, info->manifest_info);
        }
+}
 
-       return 0;
+static void __update_localed_label_for_list(sqlite3_stmt *stmt, pkgmgr_pkginfo_x *list_pkginfo)
+{
+       int i = 0;
+       int ncols = 0;
+       char *colname = NULL;
+       char *coltxt = NULL;
+
+       pkgmgr_pkginfo_x *node = NULL;
+       pkgmgr_pkginfo_x *pkginfo = NULL;
+
+       LISTHEAD(list_pkginfo, node);
+       pkginfo = node->next;
+
+       ncols = sqlite3_column_count(stmt);
+
+       for(i = 0; i < ncols; i++)
+       {
+               colname = (char *)sqlite3_column_name(stmt, i);
+               if (strcmp(colname, "package_label") == 0 ){
+                       coltxt = (char *)sqlite3_column_text(stmt, i);
+                       FREE_AND_STRDUP(coltxt, pkginfo->manifest_info->label->text);
+               }
+       }
 }
 
-static int __pkginfo_cb(void *data, int ncols, char **coltxt, char **colname)
+int __pkginfo_cb(void *data, int ncols, char **coltxt, char **colname)
 {
        pkgmgr_pkginfo_x *info = (pkgmgr_pkginfo_x *)data;
        int i = 0;
@@ -133,143 +307,10 @@ static int __pkginfo_cb(void *data, int ncols, char **coltxt, char **colname)
        LISTADD(info->manifest_info->description, description);
        privilege = calloc(1, sizeof(privilege_x));
        LISTADD(info->manifest_info->privileges->privilege, privilege);
+
        for(i = 0; i < ncols; i++)
        {
-               if (strcmp(colname[i], "package_version") == 0) {
-                       if (coltxt[i])
-                               info->manifest_info->version = strdup(coltxt[i]);
-                       else
-                               info->manifest_info->version = NULL;
-               } else if (strcmp(colname[i], "package_type") == 0) {
-                       if (coltxt[i])
-                               info->manifest_info->type = strdup(coltxt[i]);
-                       else
-                               info->manifest_info->type = NULL;
-               } else if (strcmp(colname[i], "install_location") == 0) {
-                       if (coltxt[i])
-                               info->manifest_info->installlocation = strdup(coltxt[i]);
-                       else
-                               info->manifest_info->installlocation = NULL;
-               } else if (strcmp(colname[i], "package_size") == 0) {
-                       if (coltxt[i])
-                               info->manifest_info->package_size = strdup(coltxt[i]);
-                       else
-                               info->manifest_info->package_size = NULL;
-               } else if (strcmp(colname[i], "author_email") == 0 ){
-                       if (coltxt[i])
-                               info->manifest_info->author->email = strdup(coltxt[i]);
-                       else
-                               info->manifest_info->author->email = NULL;
-               } else if (strcmp(colname[i], "author_href") == 0 ){
-                       if (coltxt[i])
-                               info->manifest_info->author->href = strdup(coltxt[i]);
-                       else
-                               info->manifest_info->author->href = NULL;
-               } else if (strcmp(colname[i], "package_label") == 0 ){
-                       if (coltxt[i])
-                               info->manifest_info->label->text = strdup(coltxt[i]);
-                       else
-                               info->manifest_info->label->text = NULL;
-               } else if (strcmp(colname[i], "package_icon") == 0 ){
-                       if (coltxt[i])
-                               info->manifest_info->icon->text = strdup(coltxt[i]);
-                       else
-                               info->manifest_info->icon->text = NULL;
-               } else if (strcmp(colname[i], "package_description") == 0 ){
-                       if (coltxt[i])
-                               info->manifest_info->description->text = strdup(coltxt[i]);
-                       else
-                               info->manifest_info->description->text = NULL;
-               } else if (strcmp(colname[i], "package_author") == 0 ){
-                       if (coltxt[i])
-                               info->manifest_info->author->text = strdup(coltxt[i]);
-                       else
-                               info->manifest_info->author->text = NULL;
-               } else if (strcmp(colname[i], "package_removable") == 0 ){
-                       if (coltxt[i])
-                               info->manifest_info->removable = strdup(coltxt[i]);
-                       else
-                               info->manifest_info->removable = NULL;
-               } else if (strcmp(colname[i], "package_preload") == 0 ){
-                       if (coltxt[i])
-                               info->manifest_info->preload = strdup(coltxt[i]);
-                       else
-                               info->manifest_info->preload = NULL;
-               } else if (strcmp(colname[i], "package_readonly") == 0 ){
-                       if (coltxt[i])
-                               info->manifest_info->readonly = strdup(coltxt[i]);
-                       else
-                               info->manifest_info->readonly = NULL;
-               } else if (strcmp(colname[i], "package_update") == 0 ){
-                       if (coltxt[i])
-                               info->manifest_info->update= strdup(coltxt[i]);
-                       else
-                               info->manifest_info->update = NULL;
-               } else if (strcmp(colname[i], "package_system") == 0 ){
-                       if (coltxt[i])
-                               info->manifest_info->system= strdup(coltxt[i]);
-                       else
-                               info->manifest_info->system = NULL;
-               } else if (strcmp(colname[i], "package_appsetting") == 0 ){
-                       if (coltxt[i])
-                               info->manifest_info->appsetting = strdup(coltxt[i]);
-                       else
-                               info->manifest_info->appsetting = NULL;
-               } else if (strcmp(colname[i], "installed_time") == 0 ){
-                       if (coltxt[i])
-                               info->manifest_info->installed_time = strdup(coltxt[i]);
-                       else
-                               info->manifest_info->installed_time = NULL;
-               } else if (strcmp(colname[i], "installed_storage") == 0 ){
-                       if (coltxt[i])
-                               info->manifest_info->installed_storage = strdup(coltxt[i]);
-                       else
-                               info->manifest_info->installed_storage = NULL;
-               } else if (strcmp(colname[i], "mainapp_id") == 0 ){
-                       if (coltxt[i])
-                               info->manifest_info->mainapp_id = strdup(coltxt[i]);
-                       else
-                               info->manifest_info->mainapp_id = NULL;
-               } else if (strcmp(colname[i], "storeclient_id") == 0 ){
-                       if (coltxt[i])
-                               info->manifest_info->storeclient_id = strdup(coltxt[i]);
-                       else
-                               info->manifest_info->storeclient_id = NULL;
-               } else if (strcmp(colname[i], "root_path") == 0 ){
-                       if (coltxt[i])
-                               info->manifest_info->root_path = strdup(coltxt[i]);
-                       else
-                               info->manifest_info->root_path = NULL;
-               } else if (strcmp(colname[i], "csc_path") == 0 ){
-                       if (coltxt[i])
-                               info->manifest_info->csc_path = strdup(coltxt[i]);
-                       else
-                               info->manifest_info->csc_path = NULL;
-               } else if (strcmp(colname[i], "privilege") == 0 ){
-                       if (coltxt[i])
-                               info->manifest_info->privileges->privilege->text = strdup(coltxt[i]);
-                       else
-                               info->manifest_info->privileges->privilege->text = NULL;
-               } else if (strcmp(colname[i], "package_locale") == 0 ){
-                       if (coltxt[i]) {
-                               info->manifest_info->author->lang = strdup(coltxt[i]);
-                               info->manifest_info->icon->lang = strdup(coltxt[i]);
-                               info->manifest_info->label->lang = strdup(coltxt[i]);
-                               info->manifest_info->description->lang = strdup(coltxt[i]);
-                       }
-                       else {
-                               info->manifest_info->author->lang = NULL;
-                               info->manifest_info->icon->lang = NULL;
-                               info->manifest_info->label->lang = NULL;
-                               info->manifest_info->description->lang = NULL;
-                       }
-               } else if (strcmp(colname[i], "package_url") == 0 ){
-                       if (coltxt[i])
-                               info->manifest_info->package_url = strdup(coltxt[i]);
-                       else
-                               info->manifest_info->package_url = NULL;
-               } else
-                       continue;
+               __get_pkginfo_from_db(colname[i], coltxt[i], info->manifest_info);
        }
        return 0;
 }
@@ -287,7 +328,7 @@ static int __cert_cb(void *data, int ncols, char **coltxt, char **colname)
                        else
                                info->cert_id = 0;
                } else if (strcmp(colname[i], "package") == 0) {
-                       if (coltxt[i])
+                       if (coltxt[i] && info->pkgid == NULL)
                                info->pkgid= strdup(coltxt[i]);
                        else
                                info->pkgid = NULL;
@@ -297,203 +338,78 @@ static int __cert_cb(void *data, int ncols, char **coltxt, char **colname)
        return 0;
 }
 
-int __reqeust_get_size(const char *pkgid, int type)
-{
-       int ret = 0;
-       int size = 0;
-       char *errmsg = NULL;
-       void *pc = NULL;
-       void *handle = NULL;
-//     FILE *fp = NULL;
-       pkgmgr_client *(*__pkgmgr_client_new)(client_type ctype) = NULL;
-//     int (*__pkgmgr_client_get_size)(pkgmgr_client * pc, const char *pkgid, pkgmgr_getsize_type get_type, pkgmgr_handler event_cb, void *data) = NULL;
-       int (*__pkgmgr_client_request_service)(pkgmgr_request_service_type service_type, int service_mode,
-                                         pkgmgr_client * pc, const char *pkg_type, const char *pkgid,
-                                         const char *custom_info, pkgmgr_handler event_cb, void *data) = NULL;
-
-       retvm_if(pkgid == NULL, PMINFO_R_ERROR, "pkgid is NULL");
-
-       handle = dlopen("libpkgmgr-client.so.0", RTLD_LAZY | RTLD_GLOBAL);
-       retvm_if(!handle, PMINFO_R_ERROR, "dlopen() failed. [%s]", dlerror());
-
-       __pkgmgr_client_new = dlsym(handle, "pkgmgr_client_new");
-       errmsg = dlerror();
-       tryvm_if((errmsg != NULL) || (__pkgmgr_client_new == NULL), ret = PMINFO_R_ERROR, "dlsym() failed. [%s]", errmsg);
-
-       __pkgmgr_client_request_service = dlsym(handle, "pkgmgr_client_request_service");
-       errmsg = dlerror();
-       tryvm_if((errmsg != NULL) || (__pkgmgr_client_request_service == NULL), ret = PMINFO_R_ERROR, "dlsym() failed. [%s]", errmsg);
-
-       pc = __pkgmgr_client_new(PC_REQUEST);
-       tryvm_if(pc == NULL, ret = PMINFO_R_ERROR, "pkgmgr_client_new failed.");
-
-       size = __pkgmgr_client_request_service(PM_REQUEST_GET_SIZE, type, pc, NULL, pkgid, NULL, NULL, NULL);
-       tryvm_if(size < 0, ret = PMINFO_R_ERROR, "get size failed.");
-
-       ret = size;
-
-catch:
-       dlclose(handle);
-       return ret;
-}
-
-void __get_package_size(const char *size_info, const char *pkgid, int *total_size, int *data_size)
+API int pkgmgrinfo_pkginfo_get_list(pkgmgrinfo_pkg_list_cb pkg_list_cb, void *user_data)
 {
-       char *p = NULL;
-       p = strstr(size_info, pkgid);
-       if (p == NULL)
-               return;
-
-       p += strlen(pkgid);
-       if (*p == '=') {
-               *total_size = atoi(p+1);
-
-               while (*p)
-               {
-                       if (*p == '/') {
-                               *data_size = atoi(p+1);
-                               break;
-                       } else {
-                               p++;
-                       }
-               }
-       } else {
-               return;
-       }
-
-       return;
-}
+       retvm_if(pkg_list_cb == NULL, PMINFO_R_EINVAL, "callback function is NULL\n");
 
-int __get_package_size_info(char **size_info)
-{
-//     int ret = 0;
-       int size = 0;
-       char *pInfo = NULL;
-       FILE *fp = NULL;
-       pInfo = (char *)malloc(MAX_PKG_BUF_LEN * MAX_PKG_INFO_LEN);
-       memset(pInfo, 0, MAX_PKG_BUF_LEN * MAX_PKG_INFO_LEN);
-
-       fp = fopen(PKG_SIZE_INFO_FILE, "r");
-       if (fp != NULL) {
-               size = fread(pInfo, 1, MAX_PKG_BUF_LEN * MAX_PKG_INFO_LEN, fp);
-               if (size < 0)
-                       _LOGE("size error \n");
-               fclose(fp);
-       }
+       int ret = PMINFO_R_OK;
+       char *locale = NULL;
+       char *query = NULL;
 
-       *size_info = pInfo;
-       return PMINFO_R_OK;
-}
+       char pkgid[MAX_QUERY_LEN] = {0,};
+       char pre_pkgid[MAX_QUERY_LEN] = {0,};
 
-int __set_package_size_info(manifest_x *manifest, const char* size_info)
-{
-       int total_size = 0;
-       int data_size = 0;
-//     int ret = 0;
-       char total_buf[PKG_TYPE_STRING_LEN_MAX] = {'\0'};
-       char data_buf[PKG_TYPE_STRING_LEN_MAX] = {'\0'};
+       sqlite3 *pkginfo_db = NULL;
+       sqlite3_stmt *stmt = NULL;
 
-       __get_package_size(size_info, manifest->package, &total_size, &data_size);
+       pkgmgr_pkginfo_x *node = NULL;
+       pkgmgr_pkginfo_x *pkginfo = NULL;
+       pkgmgr_pkginfo_x *list_pkginfo = NULL;
 
-       manifest->package_size = strdup("true");
+       /*open db*/
+       ret = db_util_open(MANIFEST_DB, &pkginfo_db, 0);
+       retvm_if(ret != SQLITE_OK, PMINFO_R_ERROR, "db_util_open[%s] failed!", MANIFEST_DB);
 
-       snprintf(total_buf, PKG_TYPE_STRING_LEN_MAX - 1, "%d", total_size);
-       manifest->package_total_size = strndup(total_buf, PKG_TYPE_STRING_LEN_MAX - 1);
+       /*Start constructing query*/
+       locale = __convert_system_locale_to_manifest_locale();
+       query = sqlite3_mprintf("select * from package_info LEFT OUTER JOIN package_localized_info " \
+                                                               "ON package_info.package=package_localized_info.package "\
+                                                               "where package_info.package_disable='false' and package_localized_info.package_locale IN (%Q, %Q)", DEFAULT_LOCALE, locale);
 
-       snprintf(data_buf, PKG_TYPE_STRING_LEN_MAX - 1, "%d", data_size);
-       manifest->package_data_size = strndup(data_buf, PKG_TYPE_STRING_LEN_MAX - 1);
+       /*prepare query*/
+       ret = sqlite3_prepare_v2(pkginfo_db, query, strlen(query), &stmt, NULL);
+       tryvm_if(ret != PMINFO_R_OK, ret = PMINFO_R_ERROR, "sqlite3_prepare_v2 failed[%s]\n", query);
 
-       return 0;
-}
+       /*calloc pkginfo_x*/
+       list_pkginfo = (pkgmgr_pkginfo_x *)calloc(1, sizeof(pkgmgr_pkginfo_x));
+       tryvm_if(list_pkginfo == NULL, ret = PMINFO_R_ERROR, "Out of Memory!!!\n");
 
-API int pkgmgrinfo_pkginfo_get_list(pkgmgrinfo_pkg_list_cb pkg_list_cb, void *user_data)
-{
-       retvm_if(pkg_list_cb == NULL, PMINFO_R_EINVAL, "callback function is NULL\n");
-       int ret = PMINFO_R_OK;
-       char query[MAX_QUERY_LEN] = {'\0'};
-       char *locale = NULL;
-       pkgmgr_pkginfo_x *pkginfo = NULL;
-       label_x *tmp1 = NULL;
-       icon_x *tmp2 = NULL;
-       description_x *tmp3 = NULL;
-       author_x *tmp4 = NULL;
-       privilege_x *tmp5 = NULL;
-       sqlite3 *pkginfo_db = NULL;
+       /*step query*/
+       while(1) {
+               ret = sqlite3_step(stmt);
+               if(ret == SQLITE_ROW) {
 
-       /*open db*/
-       ret = db_util_open(MANIFEST_DB, &pkginfo_db, 0);
-       retvm_if(ret != SQLITE_OK, PMINFO_R_ERROR, "connect db [%s] failed!", MANIFEST_DB);
+                       memset(pkgid, 0, MAX_QUERY_LEN);
+                       strncpy(pkgid, (const char *)sqlite3_column_text(stmt, 0), MAX_QUERY_LEN - 1);
 
-       /*get system locale*/
-       locale = __convert_system_locale_to_manifest_locale();
-       tryvm_if(locale == NULL, ret = PMINFO_R_ERROR, "manifest locale is NULL");
+                       if (strlen(pre_pkgid) != 0) {
+                               if (strcmp(pre_pkgid, pkgid) == 0) {
+                                       __update_localed_label_for_list(stmt, list_pkginfo);
 
-       pkgmgr_pkginfo_x *tmphead = (pkgmgr_pkginfo_x *)calloc(1, sizeof(pkgmgr_pkginfo_x));
-       pkgmgr_pkginfo_x *node = NULL;
-       pkgmgr_pkginfo_x *temp_node = NULL;
+                                       memset(pre_pkgid, 0, MAX_QUERY_LEN);
+                                       strncpy(pre_pkgid, (const char *)sqlite3_column_text(stmt, 0), MAX_QUERY_LEN - 1);
 
-       snprintf(query, MAX_QUERY_LEN, "select * from package_info");
-       ret = __exec_db_query(pkginfo_db, query, __pkg_list_cb, (void *)tmphead);
-       tryvm_if(ret == -1, ret = PMINFO_R_ERROR, "Package Info DB Information retrieval failed");
+                                       continue;
+                               } else {
+                                       memset(pre_pkgid, 0, MAX_QUERY_LEN);
+                                       strncpy(pre_pkgid, (const char *)sqlite3_column_text(stmt, 0), MAX_QUERY_LEN - 1);
+                               }
+                       } else {
+                               strncpy(pre_pkgid, (const char *)sqlite3_column_text(stmt, 0), MAX_QUERY_LEN - 1);
+                       }
 
-       LISTHEAD(tmphead, node);
+                       __get_pkginfo_for_list(stmt, list_pkginfo);
 
-       for(node = node->next; node ; node = node->next) {
-               pkginfo = node;
-               pkginfo->locale = strdup(locale);
-               pkginfo->manifest_info->privileges = (privileges_x *)calloc(1, sizeof(privileges_x));
-               tryvm_if(pkginfo->manifest_info->privileges == NULL, ret = PMINFO_R_ERROR, "Failed to allocate memory for privileges info\n");
-
-               /*populate manifest_info from DB*/
-               snprintf(query, MAX_QUERY_LEN, "select * from package_info where package='%s' ", pkginfo->manifest_info->package);
-               ret = __exec_db_query(pkginfo_db, query, __pkginfo_cb, (void *)pkginfo);
-               tryvm_if(ret == -1, ret = PMINFO_R_ERROR, "Package Info DB Information retrieval failed");
-
-               memset(query, '\0', MAX_QUERY_LEN);
-               /*populate privilege_info from DB*/
-               snprintf(query, MAX_QUERY_LEN, "select * from package_privilege_info where package='%s' ", pkginfo->manifest_info->package);
-               ret = __exec_db_query(pkginfo_db, query, __pkginfo_cb, (void *)pkginfo);
-               tryvm_if(ret == -1, ret = PMINFO_R_ERROR, "Package privilege Info DB Information retrieval failed");
-
-               memset(query, '\0', MAX_QUERY_LEN);
-               snprintf(query, MAX_QUERY_LEN, "select * from package_localized_info where" \
-                       " package='%s' and package_locale='%s'", pkginfo->manifest_info->package, locale);
-               ret = __exec_db_query(pkginfo_db, query, __pkginfo_cb, (void *)pkginfo);
-               tryvm_if(ret == -1, ret = PMINFO_R_ERROR, "Package Info DB Information retrieval failed");
-
-               /*Also store the values corresponding to default locales*/
-               memset(query, '\0', MAX_QUERY_LEN);
-               snprintf(query, MAX_QUERY_LEN, "select * from package_localized_info where" \
-                       " package='%s' and package_locale='%s'", pkginfo->manifest_info->package, DEFAULT_LOCALE);
-               ret = __exec_db_query(pkginfo_db, query, __pkginfo_cb, (void *)pkginfo);
-               tryvm_if(ret == -1, ret = PMINFO_R_ERROR, "Package Info DB Information retrieval failed");
-
-               if (pkginfo->manifest_info->label) {
-                       LISTHEAD(pkginfo->manifest_info->label, tmp1);
-                       pkginfo->manifest_info->label = tmp1;
-               }
-               if (pkginfo->manifest_info->icon) {
-                       LISTHEAD(pkginfo->manifest_info->icon, tmp2);
-                       pkginfo->manifest_info->icon = tmp2;
-               }
-               if (pkginfo->manifest_info->description) {
-                       LISTHEAD(pkginfo->manifest_info->description, tmp3);
-                       pkginfo->manifest_info->description = tmp3;
-               }
-               if (pkginfo->manifest_info->author) {
-                       LISTHEAD(pkginfo->manifest_info->author, tmp4);
-                       pkginfo->manifest_info->author = tmp4;
-               }
-               if (pkginfo->manifest_info->privileges->privilege) {
-                       LISTHEAD(pkginfo->manifest_info->privileges->privilege, tmp5);
-                       pkginfo->manifest_info->privileges->privilege = tmp5;
+               } else {
+                       break;
                }
        }
 
-       LISTHEAD(tmphead, node);
+       LISTHEAD(list_pkginfo, node);
 
        for(node = node->next; node ; node = node->next) {
                pkginfo = node;
+               pkginfo->locale = strdup(locale);
 
                ret = __pkginfo_check_installed_storage(pkginfo);
                if(ret < 0)
@@ -504,108 +420,88 @@ API int pkgmgrinfo_pkginfo_get_list(pkgmgrinfo_pkg_list_cb pkg_list_cb, void *us
                        break;
        }
 
-       ret = PMINFO_R_OK;
-
 catch:
+       sqlite3_free(query);
+       sqlite3_finalize(stmt);
        sqlite3_close(pkginfo_db);
-       if (locale) {
-               free(locale);
-               locale = NULL;
-       }
-       LISTHEAD(tmphead, node);
-       temp_node = node->next;
-       node = temp_node;
-       while (node) {
-               temp_node = node->next;
-               __cleanup_pkginfo(node);
-               node = temp_node;
-       }
-       __cleanup_pkginfo(tmphead);
+       FREE_AND_NULL(locale);
+
+       __cleanup_list_pkginfo(list_pkginfo, node);
+
        return ret;
 }
 
 API int pkgmgrinfo_pkginfo_get_mounted_list(pkgmgrinfo_pkg_list_cb pkg_list_cb, void *user_data)
 {
        retvm_if(pkg_list_cb == NULL, PMINFO_R_EINVAL, "callback function is NULL\n");
+
        int ret = PMINFO_R_OK;
-       char query[MAX_QUERY_LEN] = {'\0'};
        char *locale = NULL;
-       pkgmgr_pkginfo_x *pkginfo = NULL;
-       label_x *tmp1 = NULL;
-       icon_x *tmp2 = NULL;
-       description_x *tmp3 = NULL;
-       author_x *tmp4 = NULL;
-       privilege_x *tmp5 = NULL;
+       char *query = NULL;
+
+       char pkgid[MAX_QUERY_LEN] = {0,};
+       char pre_pkgid[MAX_QUERY_LEN] = {0,};
+
        sqlite3 *pkginfo_db = NULL;
+       sqlite3_stmt *stmt = NULL;
+
+       pkgmgr_pkginfo_x *node = NULL;
+       pkgmgr_pkginfo_x *pkginfo = NULL;
+       pkgmgr_pkginfo_x *list_pkginfo = NULL;
 
        /*open db*/
        ret = db_util_open(MANIFEST_DB, &pkginfo_db, 0);
-       retvm_if(ret != SQLITE_OK, PMINFO_R_ERROR, "connect db [%s] failed!", MANIFEST_DB);
+       retvm_if(ret != SQLITE_OK, PMINFO_R_ERROR, "db_util_open[%s] failed!", MANIFEST_DB);
 
-       /*get system locale*/
+       /*Start constructing query*/
        locale = __convert_system_locale_to_manifest_locale();
-       tryvm_if(locale == NULL, ret = PMINFO_R_ERROR, "manifest locale is NULL");
+       query = sqlite3_mprintf("select * from package_info LEFT OUTER JOIN package_localized_info " \
+                                                               "ON package_info.package=package_localized_info.package "\
+                                                               "where installed_storage='installed_external' and package_info.package_disable='false' and package_localized_info.package_locale IN (%Q, %Q)", DEFAULT_LOCALE, locale);
 
-       pkgmgr_pkginfo_x *tmphead = (pkgmgr_pkginfo_x *)calloc(1, sizeof(pkgmgr_pkginfo_x));
-       pkgmgr_pkginfo_x *node = NULL;
-       pkgmgr_pkginfo_x *temp_node = NULL;
+       /*prepare query*/
+       ret = sqlite3_prepare_v2(pkginfo_db, query, strlen(query), &stmt, NULL);
+       tryvm_if(ret != PMINFO_R_OK, ret = PMINFO_R_ERROR, "sqlite3_prepare_v2 failed[%s]\n", query);
 
-       snprintf(query, MAX_QUERY_LEN, "select package from package_info where installed_storage='installed_external'");
-       ret = __exec_db_query(pkginfo_db, query, __pkg_list_cb, (void *)tmphead);
-       tryvm_if(ret == -1, ret = PMINFO_R_ERROR, "Package Info DB Information retrieval failed");
+       /*calloc pkginfo_x*/
+       list_pkginfo = (pkgmgr_pkginfo_x *)calloc(1, sizeof(pkgmgr_pkginfo_x));
+       tryvm_if(list_pkginfo == NULL, ret = PMINFO_R_ERROR, "Out of Memory!!!\n");
 
-       LISTHEAD(tmphead, node);
+       /*step query*/
+       while(1) {
+               ret = sqlite3_step(stmt);
+               if(ret == SQLITE_ROW) {
 
-       for(node = node->next; node ; node = node->next) {
-               pkginfo = node;
-               pkginfo->locale = strdup(locale);
-               pkginfo->manifest_info->privileges = (privileges_x *)calloc(1, sizeof(privileges_x));
-               tryvm_if(pkginfo->manifest_info->privileges == NULL, ret = PMINFO_R_ERROR, "Failed to allocate memory for privileges info\n");
-
-               /*populate manifest_info from DB*/
-               snprintf(query, MAX_QUERY_LEN, "select * from package_info where package='%s' ", pkginfo->manifest_info->package);
-               ret = __exec_db_query(pkginfo_db, query, __pkginfo_cb, (void *)pkginfo);
-               tryvm_if(ret == -1, ret = PMINFO_R_ERROR, "Package Info DB Information retrieval failed");
-
-               memset(query, '\0', MAX_QUERY_LEN);
-               snprintf(query, MAX_QUERY_LEN, "select * from package_localized_info where" \
-                       " package='%s' and package_locale='%s'", pkginfo->manifest_info->package, locale);
-               ret = __exec_db_query(pkginfo_db, query, __pkginfo_cb, (void *)pkginfo);
-               tryvm_if(ret == -1, ret = PMINFO_R_ERROR, "Package Info DB Information retrieval failed");
-
-               /*Also store the values corresponding to default locales*/
-               memset(query, '\0', MAX_QUERY_LEN);
-               snprintf(query, MAX_QUERY_LEN, "select * from package_localized_info where" \
-                       " package='%s' and package_locale='%s'", pkginfo->manifest_info->package, DEFAULT_LOCALE);
-               ret = __exec_db_query(pkginfo_db, query, __pkginfo_cb, (void *)pkginfo);
-               tryvm_if(ret == -1, ret = PMINFO_R_ERROR, "Package Info DB Information retrieval failed");
-
-               if (pkginfo->manifest_info->label) {
-                       LISTHEAD(pkginfo->manifest_info->label, tmp1);
-                       pkginfo->manifest_info->label = tmp1;
-               }
-               if (pkginfo->manifest_info->icon) {
-                       LISTHEAD(pkginfo->manifest_info->icon, tmp2);
-                       pkginfo->manifest_info->icon = tmp2;
-               }
-               if (pkginfo->manifest_info->description) {
-                       LISTHEAD(pkginfo->manifest_info->description, tmp3);
-                       pkginfo->manifest_info->description = tmp3;
-               }
-               if (pkginfo->manifest_info->author) {
-                       LISTHEAD(pkginfo->manifest_info->author, tmp4);
-                       pkginfo->manifest_info->author = tmp4;
-               }
-               if (pkginfo->manifest_info->privileges->privilege) {
-                       LISTHEAD(pkginfo->manifest_info->privileges->privilege, tmp5);
-                       pkginfo->manifest_info->privileges->privilege = tmp5;
+                       memset(pkgid, 0, MAX_QUERY_LEN);
+                       strncpy(pkgid, (const char *)sqlite3_column_text(stmt, 0), MAX_QUERY_LEN - 1);
+
+                       if (strlen(pre_pkgid) != 0) {
+                               if (strcmp(pre_pkgid, pkgid) == 0) {
+                                       __update_localed_label_for_list(stmt, list_pkginfo);
+
+                                       memset(pre_pkgid, 0, MAX_QUERY_LEN);
+                                       strncpy(pre_pkgid, (const char *)sqlite3_column_text(stmt, 0), MAX_QUERY_LEN - 1);
+                                       continue;
+                               } else {
+                                       memset(pre_pkgid, 0, MAX_QUERY_LEN);
+                                       strncpy(pre_pkgid, (const char *)sqlite3_column_text(stmt, 0), MAX_QUERY_LEN - 1);
+                               }
+                       } else {
+                               strncpy(pre_pkgid, (const char *)sqlite3_column_text(stmt, 0), MAX_QUERY_LEN - 1);
+                       }
+
+                       __get_pkginfo_for_list(stmt, list_pkginfo);
+
+               } else {
+                       break;
                }
        }
 
-       LISTHEAD(tmphead, node);
+       LISTHEAD(list_pkginfo, node);
 
        for(node = node->next; node ; node = node->next) {
                pkginfo = node;
+               pkginfo->locale = strdup(locale);
 
                ret = __pkginfo_check_installed_storage(pkginfo);
                if(ret < 0)
@@ -616,234 +512,104 @@ API int pkgmgrinfo_pkginfo_get_mounted_list(pkgmgrinfo_pkg_list_cb pkg_list_cb,
                        break;
        }
 
-       ret = PMINFO_R_OK;
-
 catch:
+       sqlite3_free(query);
+       sqlite3_finalize(stmt);
        sqlite3_close(pkginfo_db);
-       if (locale) {
-               free(locale);
-               locale = NULL;
-       }
-       LISTHEAD(tmphead, node);
-       temp_node = node->next;
-       node = temp_node;
-       while (node) {
-               temp_node = node->next;
-               __cleanup_pkginfo(node);
-               node = temp_node;
-       }
-       __cleanup_pkginfo(tmphead);
+       FREE_AND_NULL(locale);
+
+       __cleanup_list_pkginfo(list_pkginfo, node);
+
        return ret;
 }
 
+
 API int pkgmgrinfo_pkginfo_get_unmounted_list(pkgmgrinfo_pkg_list_cb pkg_list_cb, void *user_data)
 {
        retvm_if(pkg_list_cb == NULL, PMINFO_R_EINVAL, "callback function is NULL\n");
+
        int ret = PMINFO_R_OK;
-       char query[MAX_QUERY_LEN] = {'\0'};
        char *locale = NULL;
-       pkgmgr_pkginfo_x *pkginfo = NULL;
-       label_x *tmp1 = NULL;
-       icon_x *tmp2 = NULL;
-       description_x *tmp3 = NULL;
-       author_x *tmp4 = NULL;
-       privilege_x *tmp5 = NULL;
-       sqlite3 *pkginfo_db = NULL;
+       char *query = NULL;
 
-       /*open db*/
-       ret = db_util_open(MANIFEST_DB, &pkginfo_db, 0);
-       retvm_if(ret != SQLITE_OK, PMINFO_R_ERROR, "connect db [%s] failed!", MANIFEST_DB);
+       char pkgid[MAX_QUERY_LEN] = {0,};
+       char pre_pkgid[MAX_QUERY_LEN] = {0,};
 
-       /*get system locale*/
-       locale = __convert_system_locale_to_manifest_locale();
-       tryvm_if(locale == NULL, ret = PMINFO_R_ERROR, "manifest locale is NULL");
+       sqlite3 *pkginfo_db = NULL;
+       sqlite3_stmt *stmt = NULL;
 
-       pkgmgr_pkginfo_x *tmphead = (pkgmgr_pkginfo_x *)calloc(1, sizeof(pkgmgr_pkginfo_x));
        pkgmgr_pkginfo_x *node = NULL;
-       pkgmgr_pkginfo_x *temp_node = NULL;
-
-       snprintf(query, MAX_QUERY_LEN, "select package from package_info where installed_storage='installed_external'");
-       ret = __exec_db_query(pkginfo_db, query, __pkg_list_cb, (void *)tmphead);
-       tryvm_if(ret == -1, ret = PMINFO_R_ERROR, "Package Info DB Information retrieval failed");
-
-       LISTHEAD(tmphead, node);
-
-       for(node = node->next; node ; node = node->next) {
-               pkginfo = node;
-               pkginfo->locale = strdup(locale);
-               pkginfo->manifest_info->privileges = (privileges_x *)calloc(1, sizeof(privileges_x));
-               tryvm_if(pkginfo->manifest_info->privileges == NULL, ret = PMINFO_R_ERROR, "Failed to allocate memory for privileges info\n");
-
-               /*populate manifest_info from DB*/
-               snprintf(query, MAX_QUERY_LEN, "select * from package_info where package='%s' ", pkginfo->manifest_info->package);
-               ret = __exec_db_query(pkginfo_db, query, __pkginfo_cb, (void *)pkginfo);
-               tryvm_if(ret == -1, ret = PMINFO_R_ERROR, "Package Info DB Information retrieval failed");
-
-               memset(query, '\0', MAX_QUERY_LEN);
-               snprintf(query, MAX_QUERY_LEN, "select * from package_localized_info where" \
-                       " package='%s' and package_locale='%s'", pkginfo->manifest_info->package, locale);
-               ret = __exec_db_query(pkginfo_db, query, __pkginfo_cb, (void *)pkginfo);
-               tryvm_if(ret == -1, ret = PMINFO_R_ERROR, "Package Info DB Information retrieval failed");
-
-               /*Also store the values corresponding to default locales*/
-               memset(query, '\0', MAX_QUERY_LEN);
-               snprintf(query, MAX_QUERY_LEN, "select * from package_localized_info where" \
-                       " package='%s' and package_locale='%s'", pkginfo->manifest_info->package, DEFAULT_LOCALE);
-               ret = __exec_db_query(pkginfo_db, query, __pkginfo_cb, (void *)pkginfo);
-               tryvm_if(ret == -1, ret = PMINFO_R_ERROR, "Package Info DB Information retrieval failed");
-
-               if (pkginfo->manifest_info->label) {
-                       LISTHEAD(pkginfo->manifest_info->label, tmp1);
-                       pkginfo->manifest_info->label = tmp1;
-               }
-               if (pkginfo->manifest_info->icon) {
-                       LISTHEAD(pkginfo->manifest_info->icon, tmp2);
-                       pkginfo->manifest_info->icon = tmp2;
-               }
-               if (pkginfo->manifest_info->description) {
-                       LISTHEAD(pkginfo->manifest_info->description, tmp3);
-                       pkginfo->manifest_info->description = tmp3;
-               }
-               if (pkginfo->manifest_info->author) {
-                       LISTHEAD(pkginfo->manifest_info->author, tmp4);
-                       pkginfo->manifest_info->author = tmp4;
-               }
-               if (pkginfo->manifest_info->privileges->privilege) {
-                       LISTHEAD(pkginfo->manifest_info->privileges->privilege, tmp5);
-                       pkginfo->manifest_info->privileges->privilege = tmp5;
-               }
-       }
-
-       LISTHEAD(tmphead, node);
+       pkgmgr_pkginfo_x *pkginfo = NULL;
+       pkgmgr_pkginfo_x *list_pkginfo = NULL;
 
-       for(node = node->next; node ; node = node->next) {
-               pkginfo = node;
+       /*open db*/
+       ret = db_util_open(MANIFEST_DB, &pkginfo_db, 0);
+       retvm_if(ret != SQLITE_OK, PMINFO_R_ERROR, "db_util_open[%s] failed!", MANIFEST_DB);
 
-               ret = pkg_list_cb( (void *)pkginfo, user_data);
-               if(ret < 0)
-                       break;
-       }
+       /*Start constructing query*/
+       locale = __convert_system_locale_to_manifest_locale();
+       query = sqlite3_mprintf("select * from package_info LEFT OUTER JOIN package_localized_info " \
+                                                               "ON package_info.package=package_localized_info.package "\
+                                                               "where installed_storage='installed_external' and package_info.package_disable='false' and package_localized_info.package_locale IN (%Q, %Q)", DEFAULT_LOCALE, locale);
 
-       ret = PMINFO_R_OK;
+       /*prepare query*/
+       ret = sqlite3_prepare_v2(pkginfo_db, query, strlen(query), &stmt, NULL);
+       tryvm_if(ret != PMINFO_R_OK, ret = PMINFO_R_ERROR, "sqlite3_prepare_v2 failed[%s]\n", query);
 
-catch:
-       sqlite3_close(pkginfo_db);
-       if (locale) {
-               free(locale);
-               locale = NULL;
-       }
-       LISTHEAD(tmphead, node);
-       temp_node = node->next;
-       node = temp_node;
-       while (node) {
-               temp_node = node->next;
-               __cleanup_pkginfo(node);
-               node = temp_node;
-       }
-       __cleanup_pkginfo(tmphead);
-       return ret;
-}
+       /*calloc pkginfo_x*/
+       list_pkginfo = (pkgmgr_pkginfo_x *)calloc(1, sizeof(pkgmgr_pkginfo_x));
+       tryvm_if(list_pkginfo == NULL, ret = PMINFO_R_ERROR, "Out of Memory!!!\n");
 
-API int pkgmgrinfo_pkginfo_get_disabled_list(pkgmgrinfo_pkg_list_cb pkg_list_cb, void *user_data)
-{
-       retvm_if(pkg_list_cb == NULL, PMINFO_R_EINVAL, "callback function is NULL\n");
-       int ret = PMINFO_R_OK;
-       char query[MAX_QUERY_LEN] = {'\0'};
-       char *locale = NULL;
-       pkgmgr_pkginfo_x *pkginfo = NULL;
-       label_x *tmp1 = NULL;
-       icon_x *tmp2 = NULL;
-       description_x *tmp3 = NULL;
-       author_x *tmp4 = NULL;
-       sqlite3 *pkginfo_db = NULL;
+       /*step query*/
+       while(1) {
+               ret = sqlite3_step(stmt);
+               if(ret == SQLITE_ROW) {
 
-       /*open db*/
-       ret = db_util_open(MANIFEST_DB, &pkginfo_db, 0);
-       retvm_if(ret != SQLITE_OK, PMINFO_R_ERROR, "connect db [%s] failed!", MANIFEST_DB);
+                       memset(pkgid, 0, MAX_QUERY_LEN);
+                       strncpy(pkgid, (const char *)sqlite3_column_text(stmt, 0), MAX_QUERY_LEN - 1);
 
-       /*get system locale*/
-       locale = __convert_system_locale_to_manifest_locale();
-       tryvm_if(locale == NULL, ret = PMINFO_R_ERROR, "manifest locale is NULL");
+                       if (strlen(pre_pkgid) != 0) {
+                               if (strcmp(pre_pkgid, pkgid) == 0) {
+                                       __update_localed_label_for_list(stmt, list_pkginfo);
 
-       pkgmgr_pkginfo_x *tmphead = (pkgmgr_pkginfo_x *)calloc(1, sizeof(pkgmgr_pkginfo_x));
-       pkgmgr_pkginfo_x *node = NULL;
-       pkgmgr_pkginfo_x *temp_node = NULL;
+                                       memset(pre_pkgid, 0, MAX_QUERY_LEN);
+                                       strncpy(pre_pkgid, (const char *)sqlite3_column_text(stmt, 0), MAX_QUERY_LEN - 1);
 
-       snprintf(query, MAX_QUERY_LEN, "select * from disabled_package_info");
-       ret = __exec_db_query(pkginfo_db, query, __pkg_list_cb, (void *)tmphead);
-       tryvm_if(ret == -1, ret = PMINFO_R_ERROR, "Package Info DB Information retrieval failed");
+                                       continue;
+                               } else {
+                                       memset(pre_pkgid, 0, MAX_QUERY_LEN);
+                                       strncpy(pre_pkgid, (const char *)sqlite3_column_text(stmt, 0), MAX_QUERY_LEN - 1);
+                               }
+                       } else {
+                               strncpy(pre_pkgid, (const char *)sqlite3_column_text(stmt, 0), MAX_QUERY_LEN - 1);
+                       }
 
-       LISTHEAD(tmphead, node);
+                       __get_pkginfo_for_list(stmt, list_pkginfo);
 
-       for(node = node->next; node ; node = node->next) {
-               pkginfo = node;
-               pkginfo->locale = strdup(locale);
-               pkginfo->manifest_info->privileges = (privileges_x *)calloc(1, sizeof(privileges_x));
-               tryvm_if(pkginfo->manifest_info->privileges == NULL, ret = PMINFO_R_ERROR, "Failed to allocate memory for privileges info\n");
-
-               /*populate manifest_info from DB*/
-               snprintf(query, MAX_QUERY_LEN, "select * from disabled_package_info where package='%s' ", pkginfo->manifest_info->package);
-               ret = __exec_db_query(pkginfo_db, query, __pkginfo_cb, (void *)pkginfo);
-               tryvm_if(ret == -1, ret = PMINFO_R_ERROR, "Package Info DB Information retrieval failed");
-
-               memset(query, '\0', MAX_QUERY_LEN);
-               snprintf(query, MAX_QUERY_LEN, "select * from disabled_package_localized_info where" \
-                       " package='%s' and package_locale='%s'", pkginfo->manifest_info->package, locale);
-               ret = __exec_db_query(pkginfo_db, query, __pkginfo_cb, (void *)pkginfo);
-               tryvm_if(ret == -1, ret = PMINFO_R_ERROR, "Package Info DB Information retrieval failed");
-
-               /*Also store the values corresponding to default locales*/
-               memset(query, '\0', MAX_QUERY_LEN);
-               snprintf(query, MAX_QUERY_LEN, "select * from disabled_package_localized_info where" \
-                       " package='%s' and package_locale='%s'", pkginfo->manifest_info->package, DEFAULT_LOCALE);
-               ret = __exec_db_query(pkginfo_db, query, __pkginfo_cb, (void *)pkginfo);
-               tryvm_if(ret == -1, ret = PMINFO_R_ERROR, "Package Info DB Information retrieval failed");
-
-               if (pkginfo->manifest_info->label) {
-                       LISTHEAD(pkginfo->manifest_info->label, tmp1);
-                       pkginfo->manifest_info->label = tmp1;
-               }
-               if (pkginfo->manifest_info->icon) {
-                       LISTHEAD(pkginfo->manifest_info->icon, tmp2);
-                       pkginfo->manifest_info->icon = tmp2;
-               }
-               if (pkginfo->manifest_info->description) {
-                       LISTHEAD(pkginfo->manifest_info->description, tmp3);
-                       pkginfo->manifest_info->description = tmp3;
-               }
-               if (pkginfo->manifest_info->author) {
-                       LISTHEAD(pkginfo->manifest_info->author, tmp4);
-                       pkginfo->manifest_info->author = tmp4;
+               } else {
+                       break;
                }
        }
 
-       LISTHEAD(tmphead, node);
+       LISTHEAD(list_pkginfo, node);
 
        for(node = node->next; node ; node = node->next) {
                pkginfo = node;
+               pkginfo->locale = strdup(locale);
 
                ret = pkg_list_cb( (void *)pkginfo, user_data);
                if(ret < 0)
                        break;
        }
 
-       ret = PMINFO_R_OK;
-
 catch:
+       sqlite3_free(query);
+       sqlite3_finalize(stmt);
        sqlite3_close(pkginfo_db);
-       if (locale) {
-               free(locale);
-               locale = NULL;
-       }
-       LISTHEAD(tmphead, node);
-       temp_node = node->next;
-       node = temp_node;
-       while (node) {
-               temp_node = node->next;
-               __cleanup_pkginfo(node);
-               node = temp_node;
-       }
-       __cleanup_pkginfo(tmphead);
+       FREE_AND_NULL(locale);
+
+       __cleanup_list_pkginfo(list_pkginfo, node);
+
        return ret;
 }
 
@@ -868,7 +634,7 @@ API int pkgmgrinfo_pkginfo_get_unmounted_pkginfo(const char *pkgid, pkgmgrinfo_p
        retvm_if(ret != SQLITE_OK, PMINFO_R_ERROR, "connect db [%s] failed!", MANIFEST_DB);
 
        /*check pkgid exist on db*/
-       query= sqlite3_mprintf("select exists(select * from package_info where package=%Q)", pkgid);
+       query= sqlite3_mprintf("select exists(select * from package_info where package=%Q and package_disable='false')", pkgid);
        ret = __exec_db_query(pkginfo_db, query, _pkgmgrinfo_validate_cb, (void *)&exist);
        sqlite3_free(query);
        tryvm_if(ret == -1, ret = PMINFO_R_ERROR, "sqlite3_exec[%s] fail", pkgid);
@@ -891,7 +657,7 @@ API int pkgmgrinfo_pkginfo_get_unmounted_pkginfo(const char *pkgid, pkgmgrinfo_p
        tryvm_if(pkginfo->manifest_info->privileges == NULL, ret = PMINFO_R_ERROR, "Failed to allocate memory for privileges info");
 
        /*populate manifest_info from DB*/
-       query= sqlite3_mprintf("select * from package_info where package=%Q", pkgid);
+       query= sqlite3_mprintf("select * from package_info where package=%Q and package_disable='false'", pkgid);
        ret = __exec_db_query(pkginfo_db, query, __pkginfo_cb, (void *)pkginfo);
        sqlite3_free(query);
        tryvm_if(ret == -1, ret = PMINFO_R_ERROR, "Package Info DB Information retrieval failed");
@@ -913,116 +679,11 @@ API int pkgmgrinfo_pkginfo_get_unmounted_pkginfo(const char *pkgid, pkgmgrinfo_p
        sqlite3_free(query);
        tryvm_if(ret == -1, ret = PMINFO_R_ERROR, "Package Info DB Information retrieval failed");
 
-       if (pkginfo->manifest_info->label) {
-               LISTHEAD(pkginfo->manifest_info->label, tmp1);
-               pkginfo->manifest_info->label = tmp1;
-       }
-       if (pkginfo->manifest_info->icon) {
-               LISTHEAD(pkginfo->manifest_info->icon, tmp2);
-               pkginfo->manifest_info->icon = tmp2;
-       }
-       if (pkginfo->manifest_info->description) {
-               LISTHEAD(pkginfo->manifest_info->description, tmp3);
-               pkginfo->manifest_info->description = tmp3;
-       }
-       if (pkginfo->manifest_info->author) {
-               LISTHEAD(pkginfo->manifest_info->author, tmp4);
-               pkginfo->manifest_info->author = tmp4;
-       }
-       if (pkginfo->manifest_info->privileges->privilege) {
-               LISTHEAD(pkginfo->manifest_info->privileges->privilege, tmp5);
-               pkginfo->manifest_info->privileges->privilege = tmp5;
-       }
-
-catch:
-       if (ret == PMINFO_R_OK)
-               *handle = (void*)pkginfo;
-       else {
-               *handle = NULL;
-               __cleanup_pkginfo(pkginfo);
-       }
-       sqlite3_close(pkginfo_db);
-
-       if (locale) {
-               free(locale);
-               locale = NULL;
-       }
-       return ret;
-}
-
-API int pkgmgrinfo_pkginfo_get_disabled_pkginfo(const char *pkgid, pkgmgrinfo_pkginfo_h *handle)
-{
-       retvm_if(pkgid == NULL, PMINFO_R_EINVAL, "pkgid is NULL\n");
-       retvm_if(handle == NULL, PMINFO_R_EINVAL, "Argument supplied to hold return value is NULL\n");
-       pkgmgr_pkginfo_x *pkginfo = NULL;
-       int ret = PMINFO_R_OK;
-       char *query = NULL;
-       char *locale = NULL;
-       int exist = 0;
-       label_x *tmp1 = NULL;
-       icon_x *tmp2 = NULL;
-       description_x *tmp3 = NULL;
-       author_x *tmp4 = NULL;
-       privilege_x *tmp5 = NULL;
-       sqlite3 *pkginfo_db = NULL;
-
-       /*validate pkgid*/
-       ret = db_util_open(MANIFEST_DB, &pkginfo_db, 0);
-       retvm_if(ret != SQLITE_OK, PMINFO_R_ERROR, "connect db [%s] failed!", MANIFEST_DB);
-
-       /*get system locale*/
-       locale = __convert_system_locale_to_manifest_locale();
-       tryvm_if(locale == NULL, ret = PMINFO_R_ERROR, "manifest locale is NULL");
-
-       pkginfo = (pkgmgr_pkginfo_x *)calloc(1, sizeof(pkgmgr_pkginfo_x));
-       tryvm_if(pkginfo == NULL, ret = PMINFO_R_ERROR, "Failed to allocate memory for pkginfo");
-
-       pkginfo->locale = strdup(locale);
-
-       pkginfo->manifest_info = (manifest_x *)calloc(1, sizeof(manifest_x));
-       tryvm_if(pkginfo->manifest_info == NULL, ret = PMINFO_R_ERROR, "Failed to allocate memory for manifest info");
-
-       pkginfo->manifest_info->package = strdup(pkgid);
-       pkginfo->manifest_info->privileges = (privileges_x *)calloc(1, sizeof(privileges_x));
-       tryvm_if(pkginfo->manifest_info->privileges == NULL, ret = PMINFO_R_ERROR, "Failed to allocate memory for privileges info");
-
-       /*populate manifest_info from DB*/
-       query= sqlite3_mprintf("select * from disabled_package_info where package=%Q", pkgid);
-       ret = __exec_db_query(pkginfo_db, query, __pkginfo_cb, (void *)pkginfo);
-       sqlite3_free(query);
-       tryvm_if(ret == -1, ret = PMINFO_R_ERROR, "Package Info DB Information retrieval failed");
-
-       query= sqlite3_mprintf("select * from disabled_package_localized_info where package=%Q and package_locale=%Q", pkgid, locale);
-       ret = __exec_db_query(pkginfo_db, query, __pkginfo_cb, (void *)pkginfo);
-       sqlite3_free(query);
-       tryvm_if(ret == -1, ret = PMINFO_R_ERROR, "Package Info DB Information retrieval failed");
-
-       /*Also store the values corresponding to default locales*/
-       query= sqlite3_mprintf("select * from disabled_package_localized_info where package=%Q and package_locale=%Q", pkgid, DEFAULT_LOCALE);
-       ret = __exec_db_query(pkginfo_db, query, __pkginfo_cb, (void *)pkginfo);
-       sqlite3_free(query);
-       tryvm_if(ret == -1, ret = PMINFO_R_ERROR, "Package Info DB Information retrieval failed");
-
-       if (pkginfo->manifest_info->label) {
-               LISTHEAD(pkginfo->manifest_info->label, tmp1);
-               pkginfo->manifest_info->label = tmp1;
-       }
-       if (pkginfo->manifest_info->icon) {
-               LISTHEAD(pkginfo->manifest_info->icon, tmp2);
-               pkginfo->manifest_info->icon = tmp2;
-       }
-       if (pkginfo->manifest_info->description) {
-               LISTHEAD(pkginfo->manifest_info->description, tmp3);
-               pkginfo->manifest_info->description = tmp3;
-       }
-       if (pkginfo->manifest_info->author) {
-               LISTHEAD(pkginfo->manifest_info->author, tmp4);
-               pkginfo->manifest_info->author = tmp4;
-       }
-       if (pkginfo->manifest_info->privileges->privilege) {
-               LISTHEAD(pkginfo->manifest_info->privileges->privilege, tmp5);
-               pkginfo->manifest_info->privileges->privilege = tmp5;
-       }
+       SAFE_LISTHEAD(pkginfo->manifest_info->label, tmp1);
+       SAFE_LISTHEAD(pkginfo->manifest_info->icon, tmp2);
+       SAFE_LISTHEAD(pkginfo->manifest_info->description, tmp3);
+       SAFE_LISTHEAD(pkginfo->manifest_info->author, tmp4);
+       SAFE_LISTHEAD(pkginfo->manifest_info->privileges->privilege, tmp5);
 
 catch:
        if (ret == PMINFO_R_OK)
@@ -1033,10 +694,7 @@ catch:
        }
        sqlite3_close(pkginfo_db);
 
-       if (locale) {
-               free(locale);
-               locale = NULL;
-       }
+       FREE_AND_NULL(locale);
        return ret;
 }
 
@@ -1061,7 +719,7 @@ API int pkgmgrinfo_pkginfo_get_pkginfo(const char *pkgid, pkgmgrinfo_pkginfo_h *
        retvm_if(ret != SQLITE_OK, PMINFO_R_ERROR, "connect db [%s] failed!", MANIFEST_DB);
 
        /*check pkgid exist on db*/
-       query= sqlite3_mprintf("select exists(select * from package_info where package=%Q)", pkgid);
+       query= sqlite3_mprintf("select exists(select * from package_info where package=%Q and package_disable='false')", pkgid);
        ret = __exec_db_query(pkginfo_db, query, _pkgmgrinfo_validate_cb, (void *)&exist);
        sqlite3_free(query);
        tryvm_if(ret == -1, ret = PMINFO_R_ERROR, "sqlite3_exec[%s] fail", pkgid);
@@ -1088,7 +746,7 @@ API int pkgmgrinfo_pkginfo_get_pkginfo(const char *pkgid, pkgmgrinfo_pkginfo_h *
        tryvm_if(pkginfo->manifest_info->privileges == NULL, ret = PMINFO_R_ERROR, "Failed to allocate memory for privileges info");
 
        /*populate manifest_info from DB*/
-       query= sqlite3_mprintf("select * from package_info where package=%Q", pkgid);
+       query= sqlite3_mprintf("select * from package_info where package=%Q and package_disable='false'", pkgid);
        ret = __exec_db_query(pkginfo_db, query, __pkginfo_cb, (void *)pkginfo);
        sqlite3_free(query);
        tryvm_if(ret == -1, ret = PMINFO_R_ERROR, "Package Info DB Information retrieval failed");
@@ -1110,26 +768,11 @@ API int pkgmgrinfo_pkginfo_get_pkginfo(const char *pkgid, pkgmgrinfo_pkginfo_h *
        sqlite3_free(query);
        tryvm_if(ret == -1, ret = PMINFO_R_ERROR, "Package Info DB Information retrieval failed");
 
-       if (pkginfo->manifest_info->label) {
-               LISTHEAD(pkginfo->manifest_info->label, tmp1);
-               pkginfo->manifest_info->label = tmp1;
-       }
-       if (pkginfo->manifest_info->icon) {
-               LISTHEAD(pkginfo->manifest_info->icon, tmp2);
-               pkginfo->manifest_info->icon = tmp2;
-       }
-       if (pkginfo->manifest_info->description) {
-               LISTHEAD(pkginfo->manifest_info->description, tmp3);
-               pkginfo->manifest_info->description = tmp3;
-       }
-       if (pkginfo->manifest_info->author) {
-               LISTHEAD(pkginfo->manifest_info->author, tmp4);
-               pkginfo->manifest_info->author = tmp4;
-       }
-       if (pkginfo->manifest_info->privileges->privilege) {
-               LISTHEAD(pkginfo->manifest_info->privileges->privilege, tmp5);
-               pkginfo->manifest_info->privileges->privilege = tmp5;
-       }
+       SAFE_LISTHEAD(pkginfo->manifest_info->label, tmp1);
+       SAFE_LISTHEAD(pkginfo->manifest_info->icon, tmp2);
+       SAFE_LISTHEAD(pkginfo->manifest_info->description, tmp3);
+       SAFE_LISTHEAD(pkginfo->manifest_info->author, tmp4);
+       SAFE_LISTHEAD(pkginfo->manifest_info->privileges->privilege, tmp5);
 
        ret = __pkginfo_check_installed_storage(pkginfo);
        tryvm_if(ret == -1, ret = PMINFO_R_ERROR, "[%s] is installed external, but is not in mmc", pkgid);
@@ -1143,10 +786,7 @@ catch:
        }
        sqlite3_close(pkginfo_db);
 
-       if (locale) {
-               free(locale);
-               locale = NULL;
-       }
+       FREE_AND_NULL(locale);
        return ret;
 }
 
@@ -1201,122 +841,19 @@ API int pkgmgrinfo_pkginfo_get_version(pkgmgrinfo_pkginfo_h handle, char **versi
 API int pkgmgrinfo_pkginfo_get_install_location(pkgmgrinfo_pkginfo_h handle, pkgmgrinfo_install_location *location)
 {
        retvm_if(handle == NULL, PMINFO_R_EINVAL, "pkginfo handle is NULL\n");
-       retvm_if(location == NULL, PMINFO_R_EINVAL, "Argument supplied to hold return value is NULL\n");
-       char *val = NULL;
-       pkgmgr_pkginfo_x *info = (pkgmgr_pkginfo_x *)handle;
-       val = (char *)info->manifest_info->installlocation;
-       if (val) {
-               if (strcmp(val, "internal-only") == 0)
-                       *location = PMINFO_INSTALL_LOCATION_INTERNAL_ONLY;
-               else if (strcmp(val, "prefer-external") == 0)
-                       *location = PMINFO_INSTALL_LOCATION_PREFER_EXTERNAL;
-               else
-                       *location = PMINFO_INSTALL_LOCATION_AUTO;
-       }
-       return PMINFO_R_OK;
-}
-
-API int pkgmgrinfo_pkginfo_get_package_size(pkgmgrinfo_pkginfo_h handle, int *size)
-{
-       retvm_if(handle == NULL, PMINFO_R_EINVAL, "pkginfo handle is NULL\n");
-       retvm_if(size == NULL, PMINFO_R_EINVAL, "Argument supplied to hold return value is NULL\n");
-       char *val = NULL;
-       pkgmgr_pkginfo_x *info = (pkgmgr_pkginfo_x *)handle;
-       val = (char *)info->manifest_info->package_size;
-       if (val) {
-               *size = atoi(val);
-       } else {
-               *size = 0;
-               _LOGE("package size is not specified\n");
-               return PMINFO_R_ERROR;
-       }
-       return PMINFO_R_OK;
-}
-
-API int pkgmgrinfo_pkginfo_get_total_size(pkgmgrinfo_pkginfo_h handle, int *size)
-{
-       retvm_if(handle == NULL, PMINFO_R_EINVAL, "pkginfo handle is NULL\n");
-       retvm_if(size == NULL, PMINFO_R_EINVAL, "Argument supplied to hold return value is NULL\n");
-
-       int ret = -1;
-       char *pkgid = NULL;
-       char *val = NULL;
-
-       pkgmgr_pkginfo_x *info = (pkgmgr_pkginfo_x *)handle;
-       val = (char *)info->manifest_info->package_size;
-       if (strcmp(val, "true") == 0) {
-               *size = atoi(info->manifest_info->package_total_size);
-               return 0;
-       } else {
-               ret = pkgmgrinfo_pkginfo_get_pkgid(handle,&pkgid);
-               retvm_if(ret < 0, PMINFO_R_ERROR, "get pkgid fail");
-
-               *size = __reqeust_get_size(pkgid, PM_GET_TOTAL_SIZE);
-               return 0;
-       }
-}
-
-API int pkgmgrinfo_pkginfo_get_data_size(pkgmgrinfo_pkginfo_h handle, int *size)
-{
-       retvm_if(handle == NULL, PMINFO_R_EINVAL, "pkginfo handle is NULL\n");
-       retvm_if(size == NULL, PMINFO_R_EINVAL, "Argument supplied to hold return value is NULL\n");
-
-       int ret = -1;
-       char *pkgid = NULL;
-       char *val = NULL;
-
-       pkgmgr_pkginfo_x *info = (pkgmgr_pkginfo_x *)handle;
-       val = (char *)info->manifest_info->package_size;
-       if (strcmp(val, "true") == 0) {
-               *size = atoi(info->manifest_info->package_data_size);
-               return 0;
-       } else {
-               ret = pkgmgrinfo_pkginfo_get_pkgid(handle,&pkgid);
-               retvm_if(ret < 0, PMINFO_R_ERROR, "get pkgid fail");
-
-               *size = __reqeust_get_size(pkgid, PM_GET_DATA_SIZE);
-               return 0;
-       }
-}
-
-API int pkgmgrinfo_pkginfo_get_size_info(pkgmgrinfo_pkginfo_h handle, int *total_size, int *data_size)
-{
-       retvm_if(handle == NULL, PMINFO_R_EINVAL, "pkginfo handle is NULL\n");
-       retvm_if(total_size == NULL, PMINFO_R_EINVAL, "Argument supplied to hold return value is NULL\n");
-       retvm_if(data_size == NULL, PMINFO_R_EINVAL, "Argument supplied to hold return value is NULL\n");
-
-       int ret = -1;
-       int total_tmp = 0;
-       int data_tmp = 0;
+       retvm_if(location == NULL, PMINFO_R_EINVAL, "Argument supplied to hold return value is NULL\n");
        char *val = NULL;
-       char *pkgid = NULL;
-       char* package_size_info = NULL;
-
        pkgmgr_pkginfo_x *info = (pkgmgr_pkginfo_x *)handle;
-
-       val = (char *)info->manifest_info->package_size;
-       if (strcmp(val, "true") == 0) {
-               *total_size = atoi(info->manifest_info->package_total_size);
-               *data_size = atoi(info->manifest_info->package_data_size);
-               return 0;
-       } else {
-               ret = pkgmgrinfo_pkginfo_get_pkgid(handle,&pkgid);
-               retvm_if(ret < 0, PMINFO_R_ERROR, "get pkgid fail");
-
-               ret = __reqeust_get_size(pkgid, PM_GET_TOTAL_AND_DATA);
-               retvm_if(ret < 0, PMINFO_R_ERROR, "fail reqeust size info");
-
-               ret = __get_package_size_info(&package_size_info);
-               retvm_if(ret != 0 || package_size_info == NULL, PMINFO_R_ERROR, "__get_package_size_info() failed");
-
-               __get_package_size(package_size_info, pkgid, &total_tmp, &data_tmp);
-               *total_size = total_tmp;
-               *data_size = data_tmp;
-
-               free(package_size_info);
-               return 0;
+       val = (char *)info->manifest_info->installlocation;
+       if (val) {
+               if (strcmp(val, "internal-only") == 0)
+                       *location = PMINFO_INSTALL_LOCATION_INTERNAL_ONLY;
+               else if (strcmp(val, "prefer-external") == 0)
+                       *location = PMINFO_INSTALL_LOCATION_PREFER_EXTERNAL;
+               else
+                       *location = PMINFO_INSTALL_LOCATION_AUTO;
        }
-       return -1;
+       return PMINFO_R_OK;
 }
 
 API int pkgmgrinfo_pkginfo_get_icon(pkgmgrinfo_pkginfo_h handle, char **icon)
@@ -1339,7 +876,7 @@ API int pkgmgrinfo_pkginfo_get_icon(pkgmgrinfo_pkginfo_h handle, char **icon)
                        if (strcmp(ptr->lang, locale) == 0) {
                                if (ptr->text) {
                                        *icon = (char *)ptr->text;
-                                       if (strcasecmp(*icon, "(null)") == 0) {
+                                       if (strcasecmp(*icon, PKGMGR_PARSER_EMPTY_STR) == 0) {
                                                locale = DEFAULT_LOCALE;
                                                continue;
                                        } else
@@ -1377,7 +914,7 @@ API int pkgmgrinfo_pkginfo_get_label(pkgmgrinfo_pkginfo_h handle, char **label)
                        if (strcmp(ptr->lang, locale) == 0) {
                                if (ptr->text) {
                                        *label = (char *)ptr->text;
-                                       if (strcasecmp(*label, "(null)") == 0) {
+                                       if (strcasecmp(*label, PKGMGR_PARSER_EMPTY_STR) == 0) {
                                                locale = DEFAULT_LOCALE;
                                                continue;
                                        } else
@@ -1556,11 +1093,87 @@ API int pkgmgrinfo_pkginfo_get_csc_path(pkgmgrinfo_pkginfo_h handle, char **path
        if (info->manifest_info->csc_path)
                *path = (char *)info->manifest_info->csc_path;
        else
-               *path = (char *)info->manifest_info->csc_path;
+               return PMINFO_R_ERROR;
+
+       return PMINFO_R_OK;
+}
+
+API int pkgmgrinfo_pkginfo_get_support_mode(pkgmgrinfo_pkginfo_h handle, int *support_mode)
+{
+       retvm_if(handle == NULL, PMINFO_R_EINVAL, "pkginfo handle is NULL\n");
+       retvm_if(support_mode == NULL, PMINFO_R_EINVAL, "Argument supplied to hold return value is NULL\n");
+
+       pkgmgr_pkginfo_x *info = (pkgmgr_pkginfo_x *)handle;
+       if (info->manifest_info->support_mode)
+               *support_mode = atoi(info->manifest_info->support_mode);
+       else
+               *support_mode = 0;
+
+       return PMINFO_R_OK;
+}
+
+API int pkgmgrinfo_pkginfo_get_hash(pkgmgrinfo_pkginfo_h handle, char **hash)
+{
+       retvm_if(handle == NULL, PMINFO_R_EINVAL, "pkginfo handle is NULL\n");
+       retvm_if(hash == NULL, PMINFO_R_EINVAL, "Argument supplied to hold return value is NULL\n");
+
+       pkgmgr_pkginfo_x *info = (pkgmgr_pkginfo_x *)handle;
+       if (info->manifest_info->hash)
+               *hash = (char *)info->manifest_info->hash;
+       else
+               *hash = NULL;
+
+       return PMINFO_R_OK;
+
+}
+
+API int pkgmgrinfo_pkginfo_get_groupid(pkgmgrinfo_pkginfo_h handle, char **groupid)
+{
+       retvm_if(handle == NULL, PMINFO_R_EINVAL, "pkginfo handle is NULL\n");
+       retvm_if(groupid == NULL, PMINFO_R_EINVAL, "Argument supplied to hold return value is NULL\n");
+
+       pkgmgr_pkginfo_x *info = (pkgmgr_pkginfo_x *)handle;
+       if (info->manifest_info->groupid)
+               *groupid = (char *)info->manifest_info->groupid;
+       else
+               return PMINFO_R_ERROR;
 
        return PMINFO_R_OK;
 }
 
+API int pkgmgrinfo_pkginfo_get_support_reset(pkgmgrinfo_pkginfo_h handle, char **support_reset)
+{
+       retvm_if(handle == NULL, PMINFO_R_EINVAL, "pkginfo handle is NULL\n");
+       retvm_if(support_reset == NULL, PMINFO_R_EINVAL, "Argument supplied to hold return value is NULL\n");
+
+       pkgmgr_pkginfo_x *info = (pkgmgr_pkginfo_x *)handle;
+       if (info->manifest_info->support_reset)
+               *support_reset = (char *)info->manifest_info->support_reset;
+       else
+               return PMINFO_R_ERROR;
+
+       return PMINFO_R_OK;
+}
+
+API int pkgmgrinfo_pkginfo_foreach_privilege(pkgmgrinfo_pkginfo_h handle,
+                       pkgmgrinfo_pkg_privilege_list_cb privilege_func, void *user_data)
+{
+       retvm_if(handle == NULL, PMINFO_R_EINVAL, "pkginfo handle is NULL");
+       retvm_if(privilege_func == NULL, PMINFO_R_EINVAL, "Callback function is NULL");
+       int ret = -1;
+       privilege_x *ptr = NULL;
+       pkgmgr_pkginfo_x *info = (pkgmgr_pkginfo_x *)handle;
+       ptr = info->manifest_info->privileges->privilege;
+       for (; ptr; ptr = ptr->next) {
+               if (ptr->text){
+                       ret = privilege_func(ptr->text, user_data);
+                       if (ret < 0)
+                               break;
+               }
+       }
+       return PMINFO_R_OK;
+}
+
 API int pkgmgrinfo_pkginfo_compare_pkg_cert_info(const char *lhs_package_id, const char *rhs_package_id, pkgmgrinfo_cert_compare_result_type_e *compare_result)
 {
        retvm_if(lhs_package_id == NULL, PMINFO_R_EINVAL, "lhs package ID is NULL");
@@ -1660,12 +1273,8 @@ err:
        sqlite3_free(error_message);
        sqlite3_close(pkgmgr_cert_db);
        if (info) {
-               if (info->pkgid) {
-                       free(info->pkgid);
-                       info->pkgid = NULL;
-               }
-               free(info);
-               info = NULL;
+               FREE_AND_NULL(info->pkgid);
+               FREE_AND_NULL(info);
        }
        return ret;
 }
@@ -1692,7 +1301,7 @@ API int pkgmgrinfo_pkginfo_compare_app_cert_info(const char *lhs_app_id, const c
        ret = db_util_open(MANIFEST_DB, &pkginfo_db, 0);
        tryvm_if(ret != SQLITE_OK, ret = PMINFO_R_ERROR, "connect db [%s] failed!", MANIFEST_DB);
 
-       query = sqlite3_mprintf("select exists(select * from package_app_info where app_id=%Q)", lhs_app_id);
+       query = sqlite3_mprintf("select exists(select * from package_app_info where app_id=%Q and app_disable='false')", lhs_app_id);
        if (SQLITE_OK !=
            sqlite3_exec(pkginfo_db, query, _pkgmgrinfo_validate_cb, (void *)&exist, &error_message)) {
                _LOGE("Don't execute query = %s error message = %s\n", query,
@@ -1706,7 +1315,7 @@ API int pkgmgrinfo_pkginfo_compare_app_cert_info(const char *lhs_app_id, const c
                lpkgid = NULL;
        } else {
                sqlite3_free(query);
-               query = sqlite3_mprintf("select package from package_app_info where app_id=%Q", lhs_app_id);
+               query = sqlite3_mprintf("select package from package_app_info where app_id=%Q and app_disable='false'", lhs_app_id);
                if (SQLITE_OK !=
                        sqlite3_exec(pkginfo_db, query, __cert_cb, (void *)info, &error_message)) {
                        _LOGE("Don't execute query = %s error message = %s\n", query,
@@ -1727,7 +1336,7 @@ API int pkgmgrinfo_pkginfo_compare_app_cert_info(const char *lhs_app_id, const c
        }
 
        sqlite3_free(query);
-       query = sqlite3_mprintf("select exists(select * from package_app_info where app_id=%Q)", rhs_app_id);
+       query = sqlite3_mprintf("select exists(select * from package_app_info where app_id=%Q and app_disable='false')", rhs_app_id);
        if (SQLITE_OK !=
            sqlite3_exec(pkginfo_db, query, _pkgmgrinfo_validate_cb, (void *)&exist, &error_message)) {
                _LOGE("Don't execute query = %s error message = %s\n", query,
@@ -1741,7 +1350,7 @@ API int pkgmgrinfo_pkginfo_compare_app_cert_info(const char *lhs_app_id, const c
                rpkgid = NULL;
        } else {
                sqlite3_free(query);
-               query = sqlite3_mprintf("select package from package_app_info where app_id=%Q", rhs_app_id);
+               query = sqlite3_mprintf("select package from package_app_info where app_id=%Q and app_disable='false'", rhs_app_id);
                if (SQLITE_OK !=
                        sqlite3_exec(pkginfo_db, query, __cert_cb, (void *)info, &error_message)) {
                        _LOGE("Don't execute query = %s error message = %s\n", query,
@@ -1758,8 +1367,7 @@ API int pkgmgrinfo_pkginfo_compare_app_cert_info(const char *lhs_app_id, const c
                        goto catch;
                }
                sqlite3_free(query);
-               free(info->pkgid);
-               info->pkgid = NULL;
+               FREE_AND_NULL(info->pkgid);
        }
        ret = pkgmgrinfo_pkginfo_compare_pkg_cert_info(lpkgid, rpkgid, compare_result);
 
@@ -1767,21 +1375,11 @@ API int pkgmgrinfo_pkginfo_compare_app_cert_info(const char *lhs_app_id, const c
        sqlite3_free(error_message);
        sqlite3_close(pkginfo_db);
        if (info) {
-               if (info->pkgid) {
-                       free(info->pkgid);
-                       info->pkgid = NULL;
-               }
-               free(info);
-               info = NULL;
-       }
-       if (lpkgid) {
-               free(lpkgid);
-               lpkgid = NULL;
-       }
-       if (rpkgid) {
-               free(rpkgid);
-               rpkgid = NULL;
+               FREE_AND_NULL(info->pkgid);
+               FREE_AND_NULL(info);
        }
+       FREE_AND_NULL(lpkgid);
+       FREE_AND_NULL(rpkgid);
        return ret;
 }
 
@@ -1790,61 +1388,6 @@ API int pkgmgrinfo_pkginfo_is_accessible(pkgmgrinfo_pkginfo_h handle, bool *acce
        retvm_if(handle == NULL, PMINFO_R_EINVAL, "pkginfo handle is NULL\n");
        retvm_if(accessible == NULL, PMINFO_R_EINVAL, "Argument supplied to hold return value is NULL\n");
 
-#if 0 //smack issue occured, check later
-       char *pkgid = NULL;
-       pkgmgrinfo_pkginfo_get_pkgid(handle, &pkgid);
-       if (pkgid == NULL){
-                _LOGD("invalid func parameters\n");
-                return PMINFO_R_ERROR;
-       }
-        _LOGD("pkgmgr_get_pkg_external_validation() called\n");
-
-       FILE *fp = NULL;
-       char app_mmc_path[FILENAME_MAX] = { 0, };
-       char app_dir_path[FILENAME_MAX] = { 0, };
-       char app_mmc_internal_path[FILENAME_MAX] = { 0, };
-       snprintf(app_dir_path, FILENAME_MAX,"%s%s", PKG_RW_PATH, pkgid);
-       snprintf(app_mmc_path, FILENAME_MAX,"%s%s", PKG_SD_PATH, pkgid);
-       snprintf(app_mmc_internal_path, FILENAME_MAX,"%s%s/.mmc", PKG_RW_PATH, pkgid);
-
-       /*check whether application is in external memory or not */
-       fp = fopen(app_mmc_path, "r");
-       if (fp == NULL){
-               _LOGD(" app path in external memory not accesible\n");
-       } else {
-               fclose(fp);
-               fp = NULL;
-               *accessible = 1;
-               _LOGD("pkgmgr_get_pkg_external_validation() : SD_CARD \n");
-               return PMINFO_R_OK;
-       }
-
-       /*check whether application is in internal or not */
-       fp = fopen(app_dir_path, "r");
-       if (fp == NULL) {
-               _LOGD(" app path in internal memory not accesible\n");
-               *accessible = 0;
-               return PMINFO_R_ERROR;
-       } else {
-               fclose(fp);
-               /*check whether the application is installed in SD card
-               but SD card is not present*/
-               fp = fopen(app_mmc_internal_path, "r");
-               if (fp == NULL){
-                       *accessible = 1;
-                       _LOGD("pkgmgr_get_pkg_external_validation() : INTERNAL_MEM \n");
-                       return PMINFO_R_OK;
-               }
-               else{
-                       *accessible = 0;
-                       _LOGD("pkgmgr_get_pkg_external_validation() : ERROR_MMC_STATUS \n");
-               }
-               fclose(fp);
-       }
-
-       _LOGD("pkgmgr_get_pkg_external_validation() end\n");
-#endif
-
        *accessible = 1;
        return PMINFO_R_OK;
 }
@@ -1963,6 +1506,44 @@ API int pkgmgrinfo_pkginfo_is_update(pkgmgrinfo_pkginfo_h handle, bool *update)
        return PMINFO_R_OK;
 }
 
+API int pkgmgrinfo_pkginfo_is_support_disable(pkgmgrinfo_pkginfo_h handle, bool *support_disable)
+{
+       retvm_if(handle == NULL, PMINFO_R_EINVAL, "pkginfo handle is NULL\n");
+       retvm_if(support_disable == NULL, PMINFO_R_EINVAL, "Argument supplied to hold return value is NULL\n");
+
+       char *val = NULL;
+       pkgmgr_pkginfo_x *info = (pkgmgr_pkginfo_x *)handle;
+       val = (char *)info->manifest_info->support_disable;
+       if (val) {
+               if (strcasecmp(val, "true") == 0)
+                       *support_disable = 1;
+               else if (strcasecmp(val, "false") == 0)
+                       *support_disable = 0;
+               else
+                       *support_disable = 1;
+       }
+       return PMINFO_R_OK;
+}
+
+API int pkgmgrinfo_pkginfo_is_mother_package(pkgmgrinfo_pkginfo_h handle, bool *mother_package)
+{
+       retvm_if(handle == NULL, PMINFO_R_EINVAL, "pkginfo handle is NULL\n");
+       retvm_if(mother_package == NULL, PMINFO_R_EINVAL, "Argument supplied to hold return value is NULL\n");
+
+       char *val = NULL;
+       pkgmgr_pkginfo_x *info = (pkgmgr_pkginfo_x *)handle;
+       val = (char *)info->manifest_info->mother_package;
+       if (val) {
+               if (strcasecmp(val, "true") == 0)
+                       *mother_package = 1;
+               else if (strcasecmp(val, "false") == 0)
+                       *mother_package = 0;
+               else
+                       *mother_package = 1;
+       }
+       return PMINFO_R_OK;
+}
+
 API int pkgmgrinfo_pkginfo_destroy_pkginfo(pkgmgrinfo_pkginfo_h handle)
 {
        retvm_if(handle == NULL, PMINFO_R_EINVAL, "pkginfo handle is NULL\n");
@@ -1992,14 +1573,7 @@ API int pkgmgrinfo_pkginfo_filter_destroy(pkgmgrinfo_pkginfo_filter_h handle)
                g_slist_foreach(filter->list, __destroy_each_node, NULL);
                g_slist_free(filter->list);
        }
-       free(filter);
-       filter = NULL;
-
-       if (access(PKG_SIZE_INFO_FILE, F_OK) == 0) {
-               char info_file[PKG_VALUE_STRING_LEN_MAX] = { 0, };
-               snprintf(info_file, PKG_VALUE_STRING_LEN_MAX, "%s", PKG_SIZE_INFO_FILE);
-               (void)remove(info_file);
-       }
+       FREE_AND_NULL(filter);
 
        return PMINFO_R_OK;
 }
@@ -2029,8 +1603,7 @@ API int pkgmgrinfo_pkginfo_filter_add_int(pkgmgrinfo_pkginfo_filter_h handle,
        val = strndup(buf, PKG_VALUE_STRING_LEN_MAX - 1);
        if (val == NULL) {
                _LOGE("Out of Memory\n");
-               free(node);
-               node = NULL;
+               FREE_AND_NULL(node);
                return PMINFO_R_ERROR;
        }
        node->prop = prop;
@@ -2071,8 +1644,7 @@ API int pkgmgrinfo_pkginfo_filter_add_bool(pkgmgrinfo_pkginfo_filter_h handle,
                val = strndup("('false','False')", 17);
        if (val == NULL) {
                _LOGE("Out of Memory\n");
-               free(node);
-               node = NULL;
+               FREE_AND_NULL(node);
                return PMINFO_R_ERROR;
        }
        node->prop = prop;
@@ -2122,8 +1694,7 @@ API int pkgmgrinfo_pkginfo_filter_add_string(pkgmgrinfo_pkginfo_filter_h handle,
                val = strndup(value, PKG_STRING_LEN_MAX - 1);
        if (val == NULL) {
                _LOGE("Out of Memory\n");
-               free(node);
-               node = NULL;
+               FREE_AND_NULL(node);
                return PMINFO_R_ERROR;
        }
        node->prop = prop;
@@ -2142,29 +1713,35 @@ API int pkgmgrinfo_pkginfo_filter_count(pkgmgrinfo_pkginfo_filter_h handle, int
 {
        retvm_if(handle == NULL, PMINFO_R_EINVAL, "Filter handle input parameter is NULL\n");
        retvm_if(count == NULL, PMINFO_R_EINVAL, "Filter handle input parameter is NULL\n");
+
+       int ret = 0;
+       int filter_count = 0;
+
+       char pkgid[MAX_QUERY_LEN] = {0,};
+       char pre_pkgid[MAX_QUERY_LEN] = {0,};
+
        char *locale = NULL;
        char *condition = NULL;
        char query[MAX_QUERY_LEN] = {'\0'};
        char where[MAX_QUERY_LEN] = {'\0'};
        GSList *list;
-       int ret = 0;
+
        pkgmgr_pkginfo_x *node = NULL;
-       pkgmgr_pkginfo_x *tmphead = NULL;
        pkgmgr_pkginfo_x *pkginfo = NULL;
+       pkgmgr_pkginfo_x *list_pkginfo = NULL;
        pkgmgrinfo_filter_x *filter = (pkgmgrinfo_filter_x*)handle;
+
        sqlite3 *pkginfo_db = NULL;
-       int filter_count = 0;
+       sqlite3_stmt *stmt = NULL;
+
 
        /*open db*/
        ret = db_util_open(MANIFEST_DB, &pkginfo_db, 0);
-       retvm_if(ret != SQLITE_OK, PMINFO_R_ERROR, "connect db [%s] failed!", MANIFEST_DB);
-
-       /*get system locale*/
-       locale = __convert_system_locale_to_manifest_locale();
-       tryvm_if(locale == NULL, ret = PMINFO_R_ERROR, "manifest locale is NULL");
+       retvm_if(ret != SQLITE_OK, PMINFO_R_ERROR, "db_util_open[%s] failed!", MANIFEST_DB);
 
        /*Start constructing query*/
-       snprintf(query, MAX_QUERY_LEN - 1, FILTER_QUERY_LIST_PACKAGE, locale);
+       locale = __convert_system_locale_to_manifest_locale();
+       snprintf(query, MAX_QUERY_LEN - 1, FILTER_QUERY_LIST_PACKAGE, DEFAULT_LOCALE, locale);
 
        /*Get where clause*/
        for (list = filter->list; list; list = g_slist_next(list)) {
@@ -2172,14 +1749,21 @@ API int pkgmgrinfo_pkginfo_filter_count(pkgmgrinfo_pkginfo_filter_h handle, int
                if (condition) {
                        strncat(where, condition, sizeof(where) - strlen(where) -1);
                        where[sizeof(where) - 1] = '\0';
-                       free(condition);
-                       condition = NULL;
+                       FREE_AND_NULL(condition);
                }
                if (g_slist_next(list)) {
                        strncat(where, " and ", sizeof(where) - strlen(where) - 1);
                        where[sizeof(where) - 1] = '\0';
                }
        }
+
+       if (strstr(where, "package_info.package_disable") == NULL) {
+               if (strlen(where) > 0) {
+                       strncat(where, " and package_info.package_disable IN ('false','False')", sizeof(where) - strlen(where) - 1);
+                       where[sizeof(where) - 1] = '\0';
+               }
+       }
+
        _LOGE("where = %s\n", where);
        if (strlen(where) > 0) {
                strncat(query, where, sizeof(query) - strlen(query) - 1);
@@ -2187,37 +1771,42 @@ API int pkgmgrinfo_pkginfo_filter_count(pkgmgrinfo_pkginfo_filter_h handle, int
        }
        _LOGE("query = %s\n", query);
 
-       tmphead = calloc(1, sizeof(pkgmgr_pkginfo_x));
-       tryvm_if(tmphead == NULL, ret = PMINFO_R_ERROR, "Out of Memory!!!\n");
+       list_pkginfo = calloc(1, sizeof(pkgmgr_pkginfo_x));
+       tryvm_if(list_pkginfo == NULL, ret = PMINFO_R_ERROR, "Out of Memory!!!\n");
 
-       ret = __exec_db_query(pkginfo_db, query, __pkg_list_cb, (void *)tmphead);
-       tryvm_if(ret == -1, ret = PMINFO_R_ERROR, "Package Info DB Information retrieval failed");
+       ret = sqlite3_prepare_v2(pkginfo_db, query, strlen(query), &stmt, NULL);
+       tryvm_if(ret != PMINFO_R_OK, ret = PMINFO_R_ERROR, "sqlite3_prepare_v2 failed[%s]\n", query);
 
-       LISTHEAD(tmphead, node);
-       for(node = node->next ; node ; node = node->next) {
-               pkginfo = node;
-               pkginfo->locale = strdup(locale);
-               pkginfo->manifest_info->privileges = (privileges_x *)calloc(1, sizeof(privileges_x));
-               tryvm_if(pkginfo->manifest_info->privileges == NULL, ret = PMINFO_R_ERROR, "Failed to allocate memory for privileges info\n");
-
-               /*populate manifest_info from DB*/
-               snprintf(query, MAX_QUERY_LEN, "select * from package_info where package='%s' ", pkginfo->manifest_info->package);
-               ret = __exec_db_query(pkginfo_db, query, __pkginfo_cb, (void *)pkginfo);
-               tryvm_if(ret == -1, ret = PMINFO_R_ERROR, "Package Info DB Information retrieval failed");
-
-               memset(query, '\0', MAX_QUERY_LEN);
-               snprintf(query, MAX_QUERY_LEN, "select * from package_localized_info where package='%s' and package_locale='%s'", pkginfo->manifest_info->package, locale);
-               ret = __exec_db_query(pkginfo_db, query, __pkginfo_cb, (void *)pkginfo);
-               tryvm_if(ret == -1, ret = PMINFO_R_ERROR, "Package Info DB Information retrieval failed");
-
-               /*Also store the values corresponding to default locales*/
-               memset(query, '\0', MAX_QUERY_LEN);
-               snprintf(query, MAX_QUERY_LEN, "select * from package_localized_info where package='%s' and package_locale='%s'", pkginfo->manifest_info->package, DEFAULT_LOCALE);
-               ret = __exec_db_query(pkginfo_db, query, __pkginfo_cb, (void *)pkginfo);
-               tryvm_if(ret == -1, ret = PMINFO_R_ERROR, "Package Info DB Information retrieval failed");
+       while(1) {
+               ret = sqlite3_step(stmt);
+               if(ret == SQLITE_ROW) {
+
+                       memset(pkgid, 0, MAX_QUERY_LEN);
+                       strncpy(pkgid, (const char *)sqlite3_column_text(stmt, 0), MAX_QUERY_LEN - 1);
+
+                       if (strlen(pre_pkgid) != 0) {
+                               if (strcmp(pre_pkgid, pkgid) == 0) {
+                                       __update_localed_label_for_list(stmt, list_pkginfo);
+
+                                       memset(pre_pkgid, 0, MAX_QUERY_LEN);
+                                       strncpy(pre_pkgid, (const char *)sqlite3_column_text(stmt, 0), MAX_QUERY_LEN - 1);
+
+                                       continue;
+                               } else {
+                                       memset(pre_pkgid, 0, MAX_QUERY_LEN);
+                                       strncpy(pre_pkgid, (const char *)sqlite3_column_text(stmt, 0), MAX_QUERY_LEN - 1);
+                               }
+                       } else {
+                               strncpy(pre_pkgid, (const char *)sqlite3_column_text(stmt, 0), MAX_QUERY_LEN - 1);
+                       }
+
+                       __get_pkginfo_for_list(stmt, list_pkginfo);
+               } else {
+                       break;
+               }
        }
 
-       LISTHEAD(tmphead, node);
+       LISTHEAD(list_pkginfo, node);
 
        for(node = node->next ; node ; node = node->next) {
                pkginfo = node;
@@ -2231,12 +1820,12 @@ API int pkgmgrinfo_pkginfo_filter_count(pkgmgrinfo_pkginfo_filter_h handle, int
        ret = PMINFO_R_OK;
 
 catch:
-       if (locale) {
-               free(locale);
-               locale = NULL;
-       }
+       FREE_AND_NULL(locale);
+       sqlite3_finalize(stmt);
        sqlite3_close(pkginfo_db);
-       __cleanup_pkginfo(tmphead);
+
+       __cleanup_list_pkginfo(list_pkginfo, node);
+
        return ret;
 }
 
@@ -2251,29 +1840,25 @@ API int pkgmgrinfo_pkginfo_filter_foreach_pkginfo(pkgmgrinfo_pkginfo_filter_h ha
        char where[MAX_QUERY_LEN] = {'\0'};
        GSList *list;
        int ret = 0;
-       label_x *tmp1 = NULL;
-       icon_x *tmp2 = NULL;
-       description_x *tmp3 = NULL;
-       author_x *tmp4 = NULL;
-       privilege_x *tmp5 = NULL;
+
+       char pkgid[MAX_QUERY_LEN] = {0,};
+       char pre_pkgid[MAX_QUERY_LEN] = {0,};
+
        pkgmgr_pkginfo_x *node = NULL;
-       pkgmgr_pkginfo_x *tmphead = NULL;
        pkgmgr_pkginfo_x *pkginfo = NULL;
+       pkgmgr_pkginfo_x *list_pkginfo = NULL;
        pkgmgrinfo_filter_x *filter = (pkgmgrinfo_filter_x*)handle;
+
        sqlite3 *pkginfo_db = NULL;
-       char* package_size_info = NULL;
-       bool is_setting = false;
+       sqlite3_stmt *stmt = NULL;
 
        /*open db*/
        ret = db_util_open(MANIFEST_DB, &pkginfo_db, 0);
-       retvm_if(ret != SQLITE_OK, PMINFO_R_ERROR, "connect db [%s] failed!", MANIFEST_DB);
-
-       /*get system locale*/
-       locale = __convert_system_locale_to_manifest_locale();
-       tryvm_if(locale == NULL, ret = PMINFO_R_ERROR, "manifest locale is NULL");
+       retvm_if(ret != SQLITE_OK, PMINFO_R_ERROR, "db_util_open[%s] failed!", MANIFEST_DB);
 
        /*Start constructing query*/
-       snprintf(query, MAX_QUERY_LEN - 1, FILTER_QUERY_LIST_PACKAGE, locale);
+       locale = __convert_system_locale_to_manifest_locale();
+       snprintf(query, MAX_QUERY_LEN - 1, FILTER_QUERY_LIST_PACKAGE, DEFAULT_LOCALE, locale);
 
        /*Get where clause*/
        for (list = filter->list; list; list = g_slist_next(list)) {
@@ -2282,91 +1867,69 @@ API int pkgmgrinfo_pkginfo_filter_foreach_pkginfo(pkgmgrinfo_pkginfo_filter_h ha
                        strncat(where, condition, sizeof(where) - strlen(where) -1);
                        where[sizeof(where) - 1] = '\0';
 
-                       if (strstr(condition, "package_info.package_nodisplay"))
-                               is_setting = true;
-
-                       free(condition);
-                       condition = NULL;
+                       FREE_AND_NULL(condition);
                }
                if (g_slist_next(list)) {
                        strncat(where, " and ", sizeof(where) - strlen(where) - 1);
                        where[sizeof(where) - 1] = '\0';
                }
        }
+
+       if (strstr(where, "package_info.package_disable") == NULL) {
+               if (strlen(where) > 0) {
+                       strncat(where, " and package_info.package_disable IN ('false','False')", sizeof(where) - strlen(where) - 1);
+                       where[sizeof(where) - 1] = '\0';
+               }
+       }
+
        _LOGE("where = %s\n", where);
+
        if (strlen(where) > 0) {
                strncat(query, where, sizeof(query) - strlen(query) - 1);
                query[sizeof(query) - 1] = '\0';
        }
        _LOGE("query = %s\n", query);
 
-       tmphead = calloc(1, sizeof(pkgmgr_pkginfo_x));
-       tryvm_if(tmphead == NULL, ret = PMINFO_R_ERROR, "Out of Memory!!!\n");
+       list_pkginfo = calloc(1, sizeof(pkgmgr_pkginfo_x));
+       tryvm_if(list_pkginfo == NULL, ret = PMINFO_R_ERROR, "Out of Memory!!!\n");
 
-       ret = __exec_db_query(pkginfo_db, query, __pkg_list_cb, (void *)tmphead);
-       tryvm_if(ret == -1, ret = PMINFO_R_ERROR, "Package Info DB Information retrieval failed");
+       ret = sqlite3_prepare_v2(pkginfo_db, query, strlen(query), &stmt, NULL);
+       tryvm_if(ret != PMINFO_R_OK, ret = PMINFO_R_ERROR, "sqlite3_prepare_v2 failed[%s]\n", query);
 
-       if (is_setting) {
-               ret = __reqeust_get_size("size_info", PM_GET_SIZE_FILE);
-               tryvm_if(ret < 0, ret = PMINFO_R_ERROR, "fail reqeust size info");
+       while(1) {
+               ret = sqlite3_step(stmt);
+               if(ret == SQLITE_ROW) {
 
-               ret = __get_package_size_info(&package_size_info);
-               tryvm_if(ret != 0 || package_size_info == NULL, ret = PMINFO_R_ERROR, "__get_package_size_info() failed");
-               _LOGD("is_setting is true, get package size info success!! ");
-       }
+                       memset(pkgid, 0, MAX_QUERY_LEN);
+                       strncpy(pkgid, (const char *)sqlite3_column_text(stmt, 0), MAX_QUERY_LEN - 1);
 
-       LISTHEAD(tmphead, node);
-       for(node = node->next ; node ; node = node->next) {
-               pkginfo = node;
-               pkginfo->locale = strdup(locale);
-               pkginfo->manifest_info->privileges = (privileges_x *)calloc(1, sizeof(privileges_x));
-               tryvm_if(pkginfo->manifest_info->privileges == NULL, ret = PMINFO_R_ERROR, "Failed to allocate memory for privileges info\n");
-
-               /*populate manifest_info from DB*/
-               snprintf(query, MAX_QUERY_LEN, "select * from package_info where package='%s' ", pkginfo->manifest_info->package);
-               ret = __exec_db_query(pkginfo_db, query, __pkginfo_cb, (void *)pkginfo);
-               tryvm_if(ret == -1, ret = PMINFO_R_ERROR, "Package Info DB Information retrieval failed");
-
-               memset(query, '\0', MAX_QUERY_LEN);
-               snprintf(query, MAX_QUERY_LEN, "select * from package_localized_info where package='%s' and package_locale='%s'", pkginfo->manifest_info->package, locale);
-               ret = __exec_db_query(pkginfo_db, query, __pkginfo_cb, (void *)pkginfo);
-               tryvm_if(ret == -1, ret = PMINFO_R_ERROR, "Package Info DB Information retrieval failed");
-
-               /*Also store the values corresponding to default locales*/
-               memset(query, '\0', MAX_QUERY_LEN);
-               snprintf(query, MAX_QUERY_LEN, "select * from package_localized_info where package='%s' and package_locale='%s'", pkginfo->manifest_info->package, DEFAULT_LOCALE);
-               ret = __exec_db_query(pkginfo_db, query, __pkginfo_cb, (void *)pkginfo);
-               tryvm_if(ret == -1, ret = PMINFO_R_ERROR, "Package Info DB Information retrieval failed");
-
-               if (pkginfo->manifest_info->label) {
-                       LISTHEAD(pkginfo->manifest_info->label, tmp1);
-                       pkginfo->manifest_info->label = tmp1;
-               }
-               if (pkginfo->manifest_info->icon) {
-                       LISTHEAD(pkginfo->manifest_info->icon, tmp2);
-                       pkginfo->manifest_info->icon = tmp2;
-               }
-               if (pkginfo->manifest_info->description) {
-                       LISTHEAD(pkginfo->manifest_info->description, tmp3);
-                       pkginfo->manifest_info->description = tmp3;
-               }
-               if (pkginfo->manifest_info->author) {
-                       LISTHEAD(pkginfo->manifest_info->author, tmp4);
-                       pkginfo->manifest_info->author = tmp4;
-               }
-               if (pkginfo->manifest_info->privileges->privilege) {
-                       LISTHEAD(pkginfo->manifest_info->privileges->privilege, tmp5);
-                       pkginfo->manifest_info->privileges->privilege = tmp5;
-               }
-               if (is_setting) {
-                       __set_package_size_info(pkginfo->manifest_info, package_size_info);
+                       if (strlen(pre_pkgid) != 0) {
+                               if (strcmp(pre_pkgid, pkgid) == 0) {
+                                       __update_localed_label_for_list(stmt, list_pkginfo);
+
+                                       memset(pre_pkgid, 0, MAX_QUERY_LEN);
+                                       strncpy(pre_pkgid, (const char *)sqlite3_column_text(stmt, 0), MAX_QUERY_LEN - 1);
+
+                                       continue;
+                               } else {
+                                       memset(pre_pkgid, 0, MAX_QUERY_LEN);
+                                       strncpy(pre_pkgid, (const char *)sqlite3_column_text(stmt, 0), MAX_QUERY_LEN - 1);
+                               }
+                       } else {
+                               strncpy(pre_pkgid, (const char *)sqlite3_column_text(stmt, 0), MAX_QUERY_LEN - 1);
+                       }
+
+                       __get_pkginfo_for_list(stmt, list_pkginfo);
+               } else {
+                       break;
                }
        }
 
-       LISTHEAD(tmphead, node);
+       LISTHEAD(list_pkginfo, node);
 
        for(node = node->next ; node ; node = node->next) {
                pkginfo = node;
+               pkginfo->locale = strdup(locale);
 
                ret = __pkginfo_check_installed_storage(pkginfo);
                if(ret < 0)
@@ -2379,34 +1942,73 @@ API int pkgmgrinfo_pkginfo_filter_foreach_pkginfo(pkgmgrinfo_pkginfo_filter_h ha
        ret = PMINFO_R_OK;
 
 catch:
-       if (locale) {
-               free(locale);
-               locale = NULL;
-       }
-       if (package_size_info) {
-               free(package_size_info);
-       }
-
+       FREE_AND_NULL(locale);
+       sqlite3_finalize(stmt);
        sqlite3_close(pkginfo_db);
-       __cleanup_pkginfo(tmphead);
+       __cleanup_list_pkginfo(list_pkginfo, node);
+
        return ret;
 }
 
-API int pkgmgrinfo_pkginfo_foreach_privilege(pkgmgrinfo_pkginfo_h handle,
-                       pkgmgrinfo_pkg_privilege_list_cb privilege_func, void *user_data)
+API int pkgmgrinfo_pkginfo_privilege_filter_foreach(const char *privilege,
+                       pkgmgrinfo_pkg_list_cb pkg_list_cb, void *user_data)
 {
-       retvm_if(handle == NULL, PMINFO_R_EINVAL, "pkginfo handle is NULL");
-       retvm_if(privilege_func == NULL, PMINFO_R_EINVAL, "Callback function is NULL");
-       int ret = -1;
-       privilege_x *ptr = NULL;
-       pkgmgr_pkginfo_x *info = (pkgmgr_pkginfo_x *)handle;
-       ptr = info->manifest_info->privileges->privilege;
-       for (; ptr; ptr = ptr->next) {
-               if (ptr->text){
-                       ret = privilege_func(ptr->text, user_data);
-                       if (ret < 0)
-                               break;
+       retvm_if(privilege == NULL, PMINFO_R_EINVAL, "privilege is NULL\n");
+       retvm_if(pkg_list_cb == NULL, PMINFO_R_EINVAL, "callback function is NULL\n");
+
+       int ret = PMINFO_R_OK;
+       char *query = NULL;
+
+       sqlite3 *pkginfo_db = NULL;
+       sqlite3_stmt *stmt = NULL;
+
+       pkgmgr_pkginfo_x *node = NULL;
+       pkgmgr_pkginfo_x *pkginfo = NULL;
+       pkgmgr_pkginfo_x *list_pkginfo = NULL;
+
+       /*open db*/
+       ret = db_util_open(MANIFEST_DB, &pkginfo_db, 0);
+       retvm_if(ret != SQLITE_OK, PMINFO_R_ERROR, "db_util_open[%s] failed!", MANIFEST_DB);
+
+       /*Start constructing query*/
+       query = sqlite3_mprintf("select package_info.* from package_info LEFT OUTER JOIN package_privilege_info " \
+                       "ON package_privilege_info.package=package_info.package " \
+                       "where package_privilege_info.privilege=%Q and package_info.package_disable='false'", privilege);
+
+       /*prepare query*/
+       ret = sqlite3_prepare_v2(pkginfo_db, query, strlen(query), &stmt, NULL);
+       tryvm_if(ret != PMINFO_R_OK, ret = PMINFO_R_ERROR, "sqlite3_prepare_v2 failed[%s]\n", query);
+
+       /*calloc pkginfo_x*/
+       list_pkginfo = (pkgmgr_pkginfo_x *)calloc(1, sizeof(pkgmgr_pkginfo_x));
+       tryvm_if(list_pkginfo == NULL, ret = PMINFO_R_ERROR, "Out of Memory!!!\n");
+
+       /*step query*/
+       while(1) {
+               ret = sqlite3_step(stmt);
+               if(ret == SQLITE_ROW) {
+                       __get_pkginfo_for_list(stmt, list_pkginfo);
+               } else {
+                       break;
                }
        }
-       return PMINFO_R_OK;
+
+       LISTHEAD(list_pkginfo, node);
+
+       for(node = node->next; node ; node = node->next) {
+               pkginfo = node;
+               ret = pkg_list_cb( (void *)pkginfo, user_data);
+               if(ret < 0)
+                       break;
+       }
+       ret = PMINFO_R_OK;
+
+catch:
+       sqlite3_free(query);
+       sqlite3_finalize(stmt);
+       sqlite3_close(pkginfo_db);
+
+       __cleanup_list_pkginfo(list_pkginfo, node);
+
+       return ret;
 }
old mode 100644 (file)
new mode 100755 (executable)
index 445317e..f128b7e
 
 #include "pkgmgrinfo_private.h"
 
+struct _pkginfo_str_map_t {
+       pkgmgrinfo_pkginfo_filter_prop_str prop;
+       const char *property;
+};
+
+static struct _pkginfo_str_map_t pkginfo_str_prop_map[] = {
+       {E_PMINFO_PKGINFO_PROP_PACKAGE_ID,              PMINFO_PKGINFO_PROP_PACKAGE_ID},
+       {E_PMINFO_PKGINFO_PROP_PACKAGE_TYPE,            PMINFO_PKGINFO_PROP_PACKAGE_TYPE},
+       {E_PMINFO_PKGINFO_PROP_PACKAGE_VERSION,         PMINFO_PKGINFO_PROP_PACKAGE_VERSION},
+       {E_PMINFO_PKGINFO_PROP_PACKAGE_INSTALL_LOCATION,PMINFO_PKGINFO_PROP_PACKAGE_INSTALL_LOCATION},
+       {E_PMINFO_PKGINFO_PROP_PACKAGE_INSTALLED_STORAGE,PMINFO_PKGINFO_PROP_PACKAGE_INSTALLED_STORAGE},
+       {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_STORECLIENT_ID,  PMINFO_PKGINFO_PROP_PACKAGE_STORECLIENT_ID}
+};
+
+struct _pkginfo_int_map_t {
+       pkgmgrinfo_pkginfo_filter_prop_int prop;
+       const char *property;
+};
+
+static struct _pkginfo_int_map_t pkginfo_int_prop_map[] = {
+       {E_PMINFO_PKGINFO_PROP_PACKAGE_SIZE,    PMINFO_PKGINFO_PROP_PACKAGE_SIZE},
+       {E_PMINFO_PKGINFO_PROP_PACKAGE_SUPPORT_MODE,    PMINFO_PKGINFO_PROP_PACKAGE_SUPPORT_MODE}
+};
+
+struct _pkginfo_bool_map_t {
+       pkgmgrinfo_pkginfo_filter_prop_bool prop;
+       const char *property;
+};
+
+static struct _pkginfo_bool_map_t pkginfo_bool_prop_map[] = {
+       {E_PMINFO_PKGINFO_PROP_PACKAGE_REMOVABLE,       PMINFO_PKGINFO_PROP_PACKAGE_REMOVABLE},
+       {E_PMINFO_PKGINFO_PROP_PACKAGE_PRELOAD,         PMINFO_PKGINFO_PROP_PACKAGE_PRELOAD},
+       {E_PMINFO_PKGINFO_PROP_PACKAGE_READONLY,        PMINFO_PKGINFO_PROP_PACKAGE_READONLY},
+       {E_PMINFO_PKGINFO_PROP_PACKAGE_UPDATE,          PMINFO_PKGINFO_PROP_PACKAGE_UPDATE},
+       {E_PMINFO_PKGINFO_PROP_PACKAGE_APPSETTING,      PMINFO_PKGINFO_PROP_PACKAGE_APPSETTING},
+       {E_PMINFO_PKGINFO_PROP_PACKAGE_NODISPLAY_SETTING,       PMINFO_PKGINFO_PROP_PACKAGE_NODISPLAY_SETTING},
+       {E_PMINFO_PKGINFO_PROP_PACKAGE_SUPPORT_DISABLE, PMINFO_PKGINFO_PROP_PACKAGE_SUPPORT_DISABLE},
+       {E_PMINFO_PKGINFO_PROP_PACKAGE_DISABLE, PMINFO_PKGINFO_PROP_PACKAGE_DISABLE},
+       {E_PMINFO_PKGINFO_PROP_PACKAGE_USE_RESET,       PMINFO_PKGINFO_PROP_PACKAGE_USE_RESET}
+};
+
+struct _appinfo_str_map_t {
+       pkgmgrinfo_appinfo_filter_prop_str prop;
+       const char *property;
+};
+
+static struct _appinfo_str_map_t appinfo_str_prop_map[] = {
+       {E_PMINFO_APPINFO_PROP_APP_ID,          PMINFO_APPINFO_PROP_APP_ID},
+       {E_PMINFO_APPINFO_PROP_APP_COMPONENT,   PMINFO_APPINFO_PROP_APP_COMPONENT},
+       {E_PMINFO_APPINFO_PROP_APP_EXEC,        PMINFO_APPINFO_PROP_APP_EXEC},
+       {E_PMINFO_APPINFO_PROP_APP_ICON,        PMINFO_APPINFO_PROP_APP_ICON},
+       {E_PMINFO_APPINFO_PROP_APP_TYPE,        PMINFO_APPINFO_PROP_APP_TYPE},
+       {E_PMINFO_APPINFO_PROP_APP_OPERATION,   PMINFO_APPINFO_PROP_APP_OPERATION},
+       {E_PMINFO_APPINFO_PROP_APP_URI,         PMINFO_APPINFO_PROP_APP_URI},
+       {E_PMINFO_APPINFO_PROP_APP_MIME,        PMINFO_APPINFO_PROP_APP_MIME},
+       {E_PMINFO_APPINFO_PROP_APP_CATEGORY,    PMINFO_APPINFO_PROP_APP_CATEGORY},
+       {E_PMINFO_APPINFO_PROP_APP_HWACCELERATION,      PMINFO_APPINFO_PROP_APP_HWACCELERATION},
+       {E_PMINFO_APPINFO_PROP_APP_SCREENREADER,        PMINFO_APPINFO_PROP_APP_SCREENREADER}
+};
+
+struct _appinfo_int_map_t {
+       pkgmgrinfo_appinfo_filter_prop_int prop;
+       const char *property;
+};
+
+static struct _appinfo_int_map_t appinfo_int_prop_map[] = {
+       {E_PMINFO_APPINFO_PROP_APP_SUPPORT_MODE,        PMINFO_APPINFO_PROP_APP_SUPPORT_MODE}
+};
+
+struct _appinfo_bool_map_t {
+       pkgmgrinfo_appinfo_filter_prop_bool prop;
+       const char *property;
+};
+
+static struct _appinfo_bool_map_t appinfo_bool_prop_map[] = {
+       {E_PMINFO_APPINFO_PROP_APP_NODISPLAY,           PMINFO_APPINFO_PROP_APP_NODISPLAY},
+       {E_PMINFO_APPINFO_PROP_APP_MULTIPLE,            PMINFO_APPINFO_PROP_APP_MULTIPLE},
+       {E_PMINFO_APPINFO_PROP_APP_ONBOOT,              PMINFO_APPINFO_PROP_APP_ONBOOT},
+       {E_PMINFO_APPINFO_PROP_APP_AUTORESTART,         PMINFO_APPINFO_PROP_APP_AUTORESTART},
+       {E_PMINFO_APPINFO_PROP_APP_TASKMANAGE,          PMINFO_APPINFO_PROP_APP_TASKMANAGE},
+       {E_PMINFO_APPINFO_PROP_APP_LAUNCHCONDITION,             PMINFO_APPINFO_PROP_APP_LAUNCHCONDITION},
+       {E_PMINFO_APPINFO_PROP_APP_SUPPORT_DISABLE,             PMINFO_APPINFO_PROP_APP_SUPPORT_DISABLE},
+       {E_PMINFO_APPINFO_PROP_APP_DISABLE,             PMINFO_APPINFO_PROP_APP_DISABLE},
+       {E_PMINFO_APPINFO_PROP_APP_REMOVABLE,           PMINFO_APPINFO_PROP_APP_REMOVABLE}
+};
+
+inline int _pkgmgrinfo_validate_cb(void *data, int ncols, char **coltxt, char **colname)
+{
+       int *p = (int*)data;
+       *p = atoi(coltxt[0]);
+       return 0;
+}
+
+inline pkgmgrinfo_pkginfo_filter_prop_str _pminfo_pkginfo_convert_to_prop_str(const char *property)
+{
+       int i = 0;
+       int max = 0;
+       pkgmgrinfo_pkginfo_filter_prop_str prop = -1;
+
+       if (property == NULL)
+               return -1;
+       max = E_PMINFO_PKGINFO_PROP_PACKAGE_MAX_STR - E_PMINFO_PKGINFO_PROP_PACKAGE_MIN_STR + 1;
+       for (i = 0 ; i < max; i++) {
+               if (strcmp(property, pkginfo_str_prop_map[i].property) == 0) {
+                       prop =  pkginfo_str_prop_map[i].prop;
+                       break;
+               }
+       }
+       return prop;
+}
+
+inline pkgmgrinfo_pkginfo_filter_prop_int _pminfo_pkginfo_convert_to_prop_int(const char *property)
+{
+       int i = 0;
+       int max = 0;
+       pkgmgrinfo_pkginfo_filter_prop_int prop = -1;
+
+       if (property == NULL)
+               return -1;
+       max = E_PMINFO_PKGINFO_PROP_PACKAGE_MAX_INT - E_PMINFO_PKGINFO_PROP_PACKAGE_MIN_INT + 1;
+       for (i = 0 ; i < max; i++) {
+               if (strcmp(property, pkginfo_int_prop_map[i].property) == 0) {
+                       prop =  pkginfo_int_prop_map[i].prop;
+                       break;
+               }
+       }
+       return prop;
+}
+
+inline pkgmgrinfo_pkginfo_filter_prop_bool _pminfo_pkginfo_convert_to_prop_bool(const char *property)
+{
+       int i = 0;
+       int max = 0;
+       pkgmgrinfo_pkginfo_filter_prop_bool prop = -1;
+
+       if (property == NULL)
+               return -1;
+       max = E_PMINFO_PKGINFO_PROP_PACKAGE_MAX_BOOL - E_PMINFO_PKGINFO_PROP_PACKAGE_MIN_BOOL + 1;
+       for (i = 0 ; i < max; i++) {
+               if (strcmp(property, pkginfo_bool_prop_map[i].property) == 0) {
+                       prop =  pkginfo_bool_prop_map[i].prop;
+                       break;
+               }
+       }
+       return prop;
+}
+
+inline pkgmgrinfo_appinfo_filter_prop_str _pminfo_appinfo_convert_to_prop_str(const char *property)
+{
+       int i = 0;
+       int max = 0;
+       pkgmgrinfo_appinfo_filter_prop_str prop = -1;
+
+       if (property == NULL)
+               return -1;
+       max = E_PMINFO_APPINFO_PROP_APP_MAX_STR - E_PMINFO_APPINFO_PROP_APP_MIN_STR + 1;
+       for (i = 0 ; i < max; i++) {
+               if (strcmp(property, appinfo_str_prop_map[i].property) == 0) {
+                       prop =  appinfo_str_prop_map[i].prop;
+                       break;
+               }
+       }
+       return prop;
+}
+
+inline pkgmgrinfo_appinfo_filter_prop_int _pminfo_appinfo_convert_to_prop_int(const char *property)
+{
+       int i = 0;
+       int max = 0;
+       pkgmgrinfo_appinfo_filter_prop_int prop = -1;
+
+       if (property == NULL)
+               return -1;
+       max = E_PMINFO_APPINFO_PROP_APP_MAX_INT - E_PMINFO_APPINFO_PROP_APP_MIN_INT + 1;
+       for (i = 0 ; i < max; i++) {
+               if (strcmp(property, appinfo_int_prop_map[i].property) == 0) {
+                       prop =  appinfo_int_prop_map[i].prop;
+                       break;
+               }
+       }
+       return prop;
+}
+
+inline pkgmgrinfo_appinfo_filter_prop_bool _pminfo_appinfo_convert_to_prop_bool(const char *property)
+{
+       int i = 0;
+       int max = 0;
+       pkgmgrinfo_appinfo_filter_prop_bool prop = -1;
+
+       if (property == NULL)
+               return -1;
+       max = E_PMINFO_APPINFO_PROP_APP_MAX_BOOL - E_PMINFO_APPINFO_PROP_APP_MIN_BOOL + 1;
+       for (i = 0 ; i < max; i++) {
+               if (strcmp(property, appinfo_bool_prop_map[i].property) == 0) {
+                       prop =  appinfo_bool_prop_map[i].prop;
+                       break;
+               }
+       }
+       return prop;
+}
+
 int __exec_db_query(sqlite3 *db, char *query, sqlite_query_callback callback, void *data)
 {
        char *error_message = NULL;
@@ -37,18 +241,32 @@ int __exec_db_query(sqlite3 *db, char *query, sqlite_query_callback callback, vo
        return 0;
 }
 
+void __cleanup_list_pkginfo(pkgmgr_pkginfo_x *list_pkginfo, pkgmgr_pkginfo_x *node)
+{
+       pkgmgr_pkginfo_x *temp_node = NULL;
+
+       if (list_pkginfo != NULL) {
+               LISTHEAD(list_pkginfo, node);
+               temp_node = node->next;
+               node = temp_node;
+               while (node) {
+                       temp_node = node->next;
+                       __cleanup_pkginfo(node);
+                       node = temp_node;
+               }
+               __cleanup_pkginfo(list_pkginfo);
+       }
+}
+
 void __cleanup_pkginfo(pkgmgr_pkginfo_x *data)
 {
        if(data == NULL)
                return;
-       if (data->locale){
-               free((void *)data->locale);
-               data->locale = NULL;
-       }
 
-       pkgmgr_parser_free_manifest_xml(data->manifest_info);
-       free((void *)data);
-       data = NULL;
+       FREE_AND_NULL(data->locale);
+
+       _pkgmgrinfo_basic_free_manifest_x(data->manifest_info);
+       FREE_AND_NULL(data);
        return;
 }
 
@@ -56,23 +274,13 @@ void __cleanup_appinfo(pkgmgr_appinfo_x *data)
 {
        if(data == NULL)
                return;
-       if (data->package){
-               free((void *)data->package);
-               data->package = NULL;
-       }
-       if (data->locale){
-               free((void *)data->locale);
-               data->locale = NULL;
-       }
+
+       FREE_AND_NULL(data->locale);
 
        manifest_x *mfx = calloc(1, sizeof(manifest_x));
-       if (data->app_component == PMINFO_UI_APP)
-               mfx->uiapplication = data->uiapp_info;
-       else if (data->app_component == PMINFO_SVC_APP)
-               mfx->serviceapplication = data->svcapp_info;
-       pkgmgr_parser_free_manifest_xml(mfx);
-       free((void *)data);
-       data = NULL;
+       mfx->uiapplication = data->uiapp_info;
+       _pkgmgrinfo_basic_free_manifest_x(mfx);
+       FREE_AND_NULL(data);
        return;
 }
 
@@ -90,13 +298,13 @@ char* __convert_system_locale_to_manifest_locale()
        char *locale = malloc(6);
        if (!locale) {
                _LOGE("Malloc Failed\n");
-               free(syslocale);
+               FREE_AND_NULL(syslocale);
                return strdup(DEFAULT_LOCALE);
        }
 
        sprintf(locale, "%c%c-%c%c", syslocale[0], syslocale[1], tolower(syslocale[3]), tolower(syslocale[4]));
 
-       free(syslocale);
+       FREE_AND_NULL(syslocale);
        return locale;
 }
 
@@ -140,6 +348,9 @@ void __get_filter_condition(gpointer data, char **condition)
        case E_PMINFO_PKGINFO_PROP_PACKAGE_AUTHOR_HREF:
                snprintf(buf, MAX_QUERY_LEN, "package_info.author_href='%s'", node->value);
                break;
+       case E_PMINFO_PKGINFO_PROP_PACKAGE_STORECLIENT_ID:
+               snprintf(buf, MAX_QUERY_LEN, "package_info.storeclient_id='%s'", node->value);
+               break;
        case E_PMINFO_PKGINFO_PROP_PACKAGE_AUTHOR_EMAIL:
                snprintf(buf, MAX_QUERY_LEN, "package_info.author_email='%s'", node->value);
                break;
@@ -164,6 +375,18 @@ void __get_filter_condition(gpointer data, char **condition)
        case E_PMINFO_PKGINFO_PROP_PACKAGE_NODISPLAY_SETTING:
                snprintf(buf, MAX_QUERY_LEN, "package_info.package_nodisplay IN %s", node->value);
                break;
+       case E_PMINFO_PKGINFO_PROP_PACKAGE_SUPPORT_DISABLE:
+               snprintf(buf, MAX_QUERY_LEN, "package_info.package_support_disable IN %s", node->value);
+               break;
+       case E_PMINFO_PKGINFO_PROP_PACKAGE_DISABLE:
+               snprintf(buf, MAX_QUERY_LEN, "package_info.package_disable IN %s", node->value);
+               break;
+       case E_PMINFO_PKGINFO_PROP_PACKAGE_SUPPORT_MODE:
+               snprintf(buf, MAX_QUERY_LEN, "package_info.package_support_mode & %s", node->value);
+               break;
+       case E_PMINFO_PKGINFO_PROP_PACKAGE_USE_RESET:
+               snprintf(buf, MAX_QUERY_LEN, "package_info.package_reserve2 IN %s", node->value);
+               break;
 
        case E_PMINFO_APPINFO_PROP_APP_ID:
                snprintf(buf, MAX_QUERY_LEN, "package_app_info.app_id='%s'", node->value);
@@ -220,6 +443,18 @@ void __get_filter_condition(gpointer data, char **condition)
        case E_PMINFO_APPINFO_PROP_APP_LAUNCHCONDITION:
                snprintf(buf, MAX_QUERY_LEN, "package_app_info.app_launchcondition IN %s", node->value);
                break;
+       case E_PMINFO_APPINFO_PROP_APP_SUPPORT_DISABLE:
+               snprintf(buf, MAX_QUERY_LEN, "package_app_info.app_support_disable IN %s", node->value);
+               break;
+       case E_PMINFO_APPINFO_PROP_APP_DISABLE:
+               snprintf(buf, MAX_QUERY_LEN, "package_app_info.app_disable IN %s", node->value);
+               break;
+       case E_PMINFO_APPINFO_PROP_APP_REMOVABLE:
+               snprintf(buf, MAX_QUERY_LEN, "package_app_info.app_removable IN %s", node->value);
+               break;
+       case E_PMINFO_APPINFO_PROP_APP_SUPPORT_MODE:
+               snprintf(buf, MAX_QUERY_LEN, "package_app_info.app_support_mode & %s", node->value);
+               break;
        default:
                _LOGE("Invalid Property Type\n");
                *condition = NULL;
@@ -251,10 +486,7 @@ int __appinfo_check_installed_storage(pkgmgr_appinfo_x *appinfo)
        char buf[MAX_QUERY_LEN] = {'\0'};
        char pkgid[MAX_QUERY_LEN] = {'\0'};
 
-       if (appinfo->package != NULL)
-               snprintf(pkgid, MAX_QUERY_LEN - 1, "%s", appinfo->package);
-       else
-               snprintf(pkgid, MAX_QUERY_LEN - 1, "%s", appinfo->uiapp_info->package);
+       snprintf(pkgid, MAX_QUERY_LEN - 1, "%s", appinfo->uiapp_info->package);
 
        retvm_if(appinfo->uiapp_info->installed_storage == NULL, PMINFO_R_ERROR, "installed_storage is NULL\n");