From: jk7744.park Date: Sun, 1 Feb 2015 04:35:03 +0000 (+0900) Subject: tizen 2.3 release X-Git-Tag: submit/tizen_2.3/20150202.061422^0 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=refs%2Fheads%2Ftizen_2.3;p=framework%2Fappfw%2Fpkgmgr-info.git tizen 2.3 release --- diff --git a/CMakeLists.txt b/CMakeLists.txt index b848832..fbc53a7 100755 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -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 index 0000000..e63f879 --- /dev/null +++ b/dump_pkgmgr.sh.in @@ -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 index 5329e1b..0000000 --- a/include/pkgmgr-info-internal.h +++ /dev/null @@ -1,144 +0,0 @@ -/* - * pkgmgr-info - * - * Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved. - * - * Contact: Jayoun Lee , Sewook Park , - * Jaeho Lee , Shobhit Srivastava - * - * 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__ */ diff --git a/include/pkgmgr-info.h b/include/pkgmgr-info.h index 8e233d1..71a78bf 100755 --- a/include/pkgmgr-info.h +++ b/include/pkgmgr-info.h @@ -49,11 +49,13 @@ #include #include +#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, /**, Sewook Park , + * Jaeho Lee , Shobhit Srivastava + * + * 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; /**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/pkgmgr-info-debug.h b/include/pkgmgrinfo_debug.h similarity index 100% rename from include/pkgmgr-info-debug.h rename to include/pkgmgrinfo_debug.h diff --git a/include/pkgmgrinfo_feature.h b/include/pkgmgrinfo_feature.h new file mode 100755 index 0000000..72661d0 --- /dev/null +++ b/include/pkgmgrinfo_feature.h @@ -0,0 +1,39 @@ +/* + * pkgmgrinfo_feature + * + * Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved. + * + * Contact: Jayoun Lee , Sewook Park , + * Jaeho Lee , Shobhit Srivastava + * + * 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__ */ diff --git a/include/pkgmgrinfo_private.h b/include/pkgmgrinfo_private.h index faccc61..14856c1 100644 --- a/include/pkgmgrinfo_private.h +++ b/include/pkgmgrinfo_private.h @@ -37,11 +37,123 @@ #include #include -#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 index 0000000..0b7bd90 --- /dev/null +++ b/include/pkgmgrinfo_type.h @@ -0,0 +1,305 @@ +/* + * pkgmgrinfo_type + * + * Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved. + * + * Contact: Jayoun Lee , Sewook Park , + * Jaeho Lee , Shobhit Srivastava + * + * 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, /** - + + @@ -35,6 +36,11 @@ + + + + + @@ -51,8 +57,16 @@ + + + + + + + + @@ -96,30 +110,13 @@ - - - - + - - - - - - - - - - - - - - - - - + + + @@ -128,10 +125,11 @@ - + + @@ -150,6 +148,7 @@ + @@ -159,6 +158,9 @@ + + + @@ -180,6 +182,8 @@ + + @@ -274,6 +278,13 @@ + + + + + + + diff --git a/parser/pkgmgr_parser.c b/parser/pkgmgr_parser.c index ff5eea6..3f7abec 100755 --- a/parser/pkgmgr_parser.c +++ b/parser/pkgmgr_parser.c @@ -34,15 +34,17 @@ #include #include #include +#include #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(¤t_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", ¬ification->name, NULL); + __save_xml_value(reader, ¬ification->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(¤t_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(); } diff --git a/parser/pkgmgr_parser.h b/parser/pkgmgr_parser.h index a650122..5dbe377 100755 --- a/parser/pkgmgr_parser.h +++ b/parser/pkgmgr_parser.h @@ -42,19 +42,14 @@ */ #include +#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; /** #include -#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; + + +} + diff --git a/parser/pkgmgr_parser_db.h b/parser/pkgmgr_parser_db.h index 4f8609f..91a8f31 100755 --- a/parser/pkgmgr_parser_db.h +++ b/parser/pkgmgr_parser_db.h @@ -46,6 +46,10 @@ 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 index 0000000..4f6f26c --- /dev/null +++ b/parser/pkgmgr_parser_db_util.c @@ -0,0 +1,97 @@ +/* + * pkgmgr_parser_db_util + * + * Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved. + * + * Contact: Jayoun Lee , Sewook Park , + * Jaeho Lee , Shobhit Srivastava + * + * 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 +#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 index 0000000..e64cff3 --- /dev/null +++ b/parser/pkgmgr_parser_db_util.h @@ -0,0 +1,37 @@ +/* + * pkgmgr-info + * + * Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved. + * + * Contact: Jayoun Lee , Sewook Park , + * Jaeho Lee , Shobhit Srivastava + * + * 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 index 0000000..7353d81 --- /dev/null +++ b/parser/pkgmgr_parser_feature.c @@ -0,0 +1,805 @@ +/* + * pkgmgr-info + * + * Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved. + * + * Contact: Jayoun Lee , Sewook Park , + * Jaeho Lee , Shobhit Srivastava + * + * 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 +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#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 index 0000000..bba6cee --- /dev/null +++ b/parser/pkgmgr_parser_feature.h @@ -0,0 +1,40 @@ +/* + * pkgmgr-info + * + * Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved. + * + * Contact: Jayoun Lee , Sewook Park , + * Jaeho Lee , Shobhit Srivastava + * + * 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__ */ diff --git a/parser/pkgmgr_parser_internal.h b/parser/pkgmgr_parser_internal.h index a891b0b..69d1b9b 100755 --- a/parser/pkgmgr_parser_internal.h +++ b/parser/pkgmgr_parser_internal.h @@ -27,9 +27,22 @@ #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__ */ diff --git a/parser/pkgmgr_parser_plugin.c b/parser/pkgmgr_parser_plugin.c index 905da9e..475f3ad 100644 --- a/parser/pkgmgr_parser_plugin.c +++ b/parser/pkgmgr_parser_plugin.c @@ -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) diff --git a/parser/pkgmgr_parser_plugin_list.txt.in b/parser/pkgmgr_parser_plugin_list.txt.in index 3f60761..15c2871 100644 --- a/parser/pkgmgr_parser_plugin_list.txt.in +++ b/parser/pkgmgr_parser_plugin_list.txt.in @@ -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 diff --git a/parser/pkgmgr_parser_signature.c b/parser/pkgmgr_parser_signature.c index 4eb0dfe..9f97869 100644 --- a/parser/pkgmgr_parser_signature.c +++ b/parser/pkgmgr_parser_signature.c @@ -27,7 +27,7 @@ #include #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 index 0f7d6ce..0000000 --- a/parser/preload_list.txt.in +++ /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 diff --git a/pkgmgr-parser.manifest.in b/pkgmgr-parser.manifest.in index 07736f2..eacbba9 100755 --- a/pkgmgr-parser.manifest.in +++ b/pkgmgr-parser.manifest.in @@ -1,13 +1,18 @@ - - - + + + + + + + + - - - - + + + + diff --git a/src/pkgmgr-info-internal.c b/src/pkgmgr-info-internal.c deleted file mode 100755 index 717a85f..0000000 --- a/src/pkgmgr-info-internal.c +++ /dev/null @@ -1,223 +0,0 @@ -/* - * pkgmgr-info - * - * Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved. - * - * Contact: Jayoun Lee , Sewook Park , - * Jaeho Lee , Shobhit Srivastava - * - * 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 -#include -#include -#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; -} diff --git a/src/pkgmgrinfo_appinfo.c b/src/pkgmgrinfo_appinfo.c index 90b06a2..9bb2ccd 100644 --- a/src/pkgmgrinfo_appinfo.c +++ b/src/pkgmgrinfo_appinfo.c @@ -20,6 +20,7 @@ */ #include "pkgmgrinfo_private.h" +#include "pkgmgr_parser.h" #ifdef LOG_TAG #undef LOG_TAG @@ -27,8 +28,14 @@ #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' " \ @@ -37,7 +44,16 @@ "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 index 0000000..f6aa083 --- /dev/null +++ b/src/pkgmgrinfo_basic.c @@ -0,0 +1,771 @@ +/* + * pkgmgrinfo-basic + * + * Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved. + * + * Contact: Jayoun Lee , Junsuk Oh , + * + * 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 +#include + +#include "pkgmgrinfo_basic.h" +#include "pkgmgrinfo_private.h" +#include + +#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; +} diff --git a/src/pkgmgrinfo_certinfo.c b/src/pkgmgrinfo_certinfo.c index 62b9b76..b0e26f0 100644 --- a/src/pkgmgrinfo_certinfo.c +++ b/src/pkgmgrinfo_certinfo.c @@ -24,9 +24,10 @@ #include #include -#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; } diff --git a/src/pkgmgrinfo_client.c b/src/pkgmgrinfo_client.c index 3194ebd..000f3d1 100644 --- a/src/pkgmgrinfo_client.c +++ b/src/pkgmgrinfo_client.c @@ -26,8 +26,8 @@ #include #include -#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; } diff --git a/src/pkgmgrinfo_db.c b/src/pkgmgrinfo_db.c index 6aa454c..ba07c31 100644 --- a/src/pkgmgrinfo_db.c +++ b/src/pkgmgrinfo_db.c @@ -26,8 +26,8 @@ #include #include -#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" @@ -38,423 +38,236 @@ #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 index 0000000..3cbb85d --- /dev/null +++ b/src/pkgmgrinfo_feature.c @@ -0,0 +1,467 @@ +/* + * pkgmgrinfo-feature + * + * Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved. + * + * Contact: Jayoun Lee , Junsuk Oh , + * + * 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; +} diff --git a/src/pkgmgrinfo_pkginfo.c b/src/pkgmgrinfo_pkginfo.c index 4b4c408..d0e0d14 100644 --- a/src/pkgmgrinfo_pkginfo.c +++ b/src/pkgmgrinfo_pkginfo.c @@ -27,93 +27,267 @@ #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; } diff --git a/src/pkgmgrinfo_private.c b/src/pkgmgrinfo_private.c old mode 100644 new mode 100755 index 445317e..f128b7e --- a/src/pkgmgrinfo_private.c +++ b/src/pkgmgrinfo_private.c @@ -23,6 +23,210 @@ #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");