merge with master
authorJinkun Jang <jinkun.jang@samsung.com>
Fri, 15 Mar 2013 16:12:00 +0000 (01:12 +0900)
committerJinkun Jang <jinkun.jang@samsung.com>
Fri, 15 Mar 2013 16:12:00 +0000 (01:12 +0900)
CMakeLists.txt
include/package_info.h
include/package_manager.h
packaging/capi-appfw-package-manager.spec
src/package_info.c
src/package_manager.c
tool/main.c

index 1071df0..457f751 100755 (executable)
@@ -19,7 +19,7 @@ FOREACH(flag ${${fw_name}_CFLAGS})
     SET(EXTRA_CFLAGS "${EXTRA_CFLAGS} ${flag}")
 ENDFOREACH(flag)
 
-SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${EXTRA_CFLAGS} -fPIC -Wall -Werror")
+SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${EXTRA_CFLAGS} -fPIC -Wall")
 SET(CMAKE_C_FLAGS_DEBUG "-O0 -g")
 
 IF("${ARCH}" STREQUAL "arm")
@@ -43,7 +43,7 @@ SET_TARGET_PROPERTIES(${fw_name}
      CLEAN_DIRECT_OUTPUT 1
 )
 
-INSTALL(TARGETS ${fw_name} DESTINATION lib)
+INSTALL(TARGETS ${fw_name} DESTINATION ${LIB_INSTALL_DIR})
 INSTALL(
         DIRECTORY ${INC_DIR}/ DESTINATION include/appfw
         FILES_MATCHING
@@ -61,7 +61,7 @@ CONFIGURE_FILE(
     ${CMAKE_CURRENT_SOURCE_DIR}/${fw_name}.pc
     @ONLY
 )
-INSTALL(FILES ${CMAKE_CURRENT_SOURCE_DIR}/${fw_name}.pc DESTINATION lib/pkgconfig)
+INSTALL(FILES ${CMAKE_CURRENT_SOURCE_DIR}/${fw_name}.pc DESTINATION ${LIB_INSTALL_DIR}/pkgconfig)
 
 
 IF(UNIX)
index f31f38b..283ca00 100755 (executable)
@@ -220,6 +220,19 @@ int package_info_is_removable_package(package_info_h package_info, bool *removab
 
 
 /**
+ * @brief Gets whether the package is preload or not
+ * @param [in] package_info The package information
+ * @param [out] preload The preload info of the package
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #PACKAGE_MANAGER_ERROR_NONE Successful
+ * @retval #PACKAGE_MANAGER_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #PACKAGE_MANAGER_ERROR_OUT_OF_MEMORY Out of memory
+ * @retval #PACKAGE_MANAGER_ERROR_IO_ERROR IO error
+ */
+int package_info_is_preload_package(package_info_h package_info, bool *preload);
+
+
+/**
  * @brief Checks whether two package information are equal.
  * @param [in] lhs     The first package information to compare
  * @param [in] rhs     The second package information to compare
index cc709f8..5f8f131 100755 (executable)
@@ -45,7 +45,12 @@ typedef enum {
  * @brief Enumeration of event type
  */
 typedef enum {
-       PACAKGE_MANAGER_EVENT_TYPE_INSTALL,
+       PACKAGE_MANAGER_EVENT_TYPE_INSTALL = 0,
+       PACKAGE_MANAGER_EVENT_TYPE_UNINSTALL,
+       PACKAGE_MANAGER_EVENT_TYPE_UPDATE,
+
+       /* These enum will be deprecated. Use above enum instead. */
+       PACAKGE_MANAGER_EVENT_TYPE_INSTALL = 0,
        PACAKGE_MANAGER_EVENT_TYPE_UNINSTALL,
        PACAKGE_MANAGER_EVENT_TYPE_UPDATE,
 } package_manager_event_type_e;
@@ -54,7 +59,13 @@ typedef enum {
  * @brief Enumeration of event state
  */
 typedef enum {
-       PACAKGE_MANAGER_EVENT_STATE_STARTED,
+       PACKAGE_MANAGER_EVENT_STATE_STARTED = 0,
+       PACKAGE_MANAGER_EVENT_STATE_PROCESSING,
+       PACKAGE_MANAGER_EVENT_STATE_COMPLETED,
+       PACKAGE_MANAGER_EVENT_STATE_FAILED,
+
+       /* These enum will be deprecated. Use above enum instead. */
+       PACAKGE_MANAGER_EVENT_STATE_STARTED = 0,
        PACAKGE_MANAGER_EVENT_STATE_PROCESSING,
        PACAKGE_MANAGER_EVENT_STATE_COMPLETED,
        PACAKGE_MANAGER_EVENT_STATE_FAILED,
@@ -64,7 +75,11 @@ typedef enum {
  * @brief Enumeration of request mode
  */
 typedef enum {
-       PACAKGE_MANAGER_REQUEST_MODE_DEFAULT,
+       PACKAGE_MANAGER_REQUEST_MODE_DEFAULT = 0,
+       PACKAGE_MANAGER_REQUEST_MODE_QUIET,
+
+       /* These enum will be deprecated. Use above enum instead. */
+       PACAKGE_MANAGER_REQUEST_MODE_DEFAULT = 0,
        PACAKGE_MANAGER_REQUEST_MODE_QUIET,
 } package_manager_request_mode_e;
 
@@ -72,15 +87,26 @@ typedef enum {
  * @brief Enumeration of move type
  */
 typedef enum {
+       PACKAGE_MANAGER_REQUEST_MOVE_TO_INTERNAL = 0,
+       PACKAGE_MANAGER_REQUEST_MOVE_TO_EXTERNAL,
+
+       /* These enum will be deprecated. Use above enum instead. */
        PACAKGE_MANAGER_REQUEST_MOVE_TO_INTERNAL = 0,
-       PACAKGE_MANAGER_REQUEST_MOVE_TO_EXTERNAL = 1,
+       PACAKGE_MANAGER_REQUEST_MOVE_TO_EXTERNAL,
 } package_manager_move_type_e;
 
 /**
  * @brief Enumeration of certification compare type
  */
 typedef enum {
-       PACAKGE_MANAGER_COMPARE_MATCH,
+       PACKAGE_MANAGER_COMPARE_MATCH = 0,
+       PACKAGE_MANAGER_COMPARE_MISMATCH,
+       PACKAGE_MANAGER_COMPARE_LHS_NO_CERT,
+       PACKAGE_MANAGER_COMPARE_RHS_NO_CERT,
+       PACKAGE_MANAGER_COMPARE_BOTH_NO_CERT,
+
+       /* These enum will be deprecated. Use above enum instead. */
+       PACAKGE_MANAGER_COMPARE_MATCH = 0,
        PACAKGE_MANAGER_COMPARE_MISMATCH,
        PACAKGE_MANAGER_COMPARE_LHS_NO_CERT,
        PACAKGE_MANAGER_COMPARE_RHS_NO_CERT,
@@ -88,6 +114,15 @@ typedef enum {
 } package_manager_compare_result_type_e;
 
 /**
+ * @brief Enumeration of permission type
+ */
+typedef enum {
+       PACKAGE_MANAGER_PERMISSION_NORMAL = 0,
+       PACKAGE_MANAGER_PERMISSION_SIGNATURE,
+       PACKAGE_MANAGER_PERMISSION_PRIVILEGE,
+} package_manager_permission_type_e;
+
+/**
  * @brief Package manager handle
  */
 typedef struct package_manager_s *package_manager_h;
@@ -125,14 +160,14 @@ typedef void (*package_manager_request_event_cb) (
 /**
  * @brief Creates a request handle to the package manager.
  *
- * @remarks The @a request must be released with package_manager_reqeust_destroy() by you.
+ * @remarks The @a request must be released with package_manager_request_destroy() by you.
  * @param [out] request A request handle to be newly created on success
  * @return 0 on success, otherwise a negative error value.
  * @retval #PACKAGE_MANAGER_ERROR_NONE Successful
  * @retval #PACKAGE_MANAGER_ERROR_INVALID_PARAMETER Invalid parameter
  * @retval #PACKAGE_MANAGER_ERROR_OUT_OF_MEMORY Out of memory
  * @retval #PACKAGE_MANAGER_ERROR_IO_ERROR Internal I/O error
- * @see package_manager_reqeust_destroy()
+ * @see package_manager_request_destroy()
  */
 int package_manager_request_create(package_manager_request_h *request);
 
@@ -145,7 +180,7 @@ int package_manager_request_create(package_manager_request_h *request);
  * @retval #PACKAGE_MANAGER_ERROR_INVALID_PARAMETER Invalid parameter
  * @see package_manager_request_create()
  */
-int package_manager_reqeust_destroy(package_manager_request_h request);
+int package_manager_request_destroy(package_manager_request_h request);
 
 /**
  * @brief Registers a callback function to be invoked when the progress of the request changes.
@@ -400,6 +435,30 @@ int package_manager_compare_package_cert_info(const char *lhs_package_id, const
  */
  int package_manager_compare_app_cert_info(const char *lhs_app_id, const char *rhs_app_id, package_manager_compare_result_type_e *compare_result);
 
+/**
+ * @brief Gets whether the package is preload or not by app_id
+ * @param [in] app_id The ID of the application
+ * @param [out] preload The preload info of the package
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #PACKAGE_MANAGER_ERROR_NONE Successful
+ * @retval #PACKAGE_MANAGER_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #PACKAGE_MANAGER_ERROR_OUT_OF_MEMORY Out of memory
+ * @retval #PACKAGE_MANAGER_ERROR_IO_ERROR IO error
+ */
+int package_manager_is_preload_package_by_app_id(const char *app_id, bool *preload);
+
+/**
+ * @brief Gets the package  permission type by app_id
+ * @param [in] app_id The ID of the application
+ * @param [out] permission_type The package permission type
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #PACKAGE_MANAGER_ERROR_NONE Successful
+ * @retval #PACKAGE_MANAGER_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #PACKAGE_MANAGER_ERROR_OUT_OF_MEMORY Out of memory
+ * @retval #PACKAGE_MANAGER_ERROR_IO_ERROR IO error
+ */
+int package_manager_get_permission_type(const char *app_id, package_manager_permission_type_e *permission_type);
+
 #ifdef __cplusplus
 }
 #endif
index 14c9714..8043b0a 100755 (executable)
@@ -1,10 +1,9 @@
-#sbs-git:slp/api/package-manager capi-appfw-package-manager 0.1.0 76739af2bfbeb46dc9db0cb3e044f880ddcb9440
 Name:       capi-appfw-package-manager
 Summary:    Package Manager API
-Version: 0.0.22
+Version: 0.0.26
 Release:    1
-Group:      TO_BE/FILLED_IN
-License:    TO BE FILLED IN
+Group:      API
+License:    Apache-2.0
 Source0:    %{name}-%{version}.tar.gz
 BuildRequires:  cmake
 BuildRequires:  pkgconfig(dlog)
@@ -14,8 +13,6 @@ BuildRequires:  pkgconfig(ail)
 BuildRequires: pkgconfig(vconf)
 BuildRequires: pkgconfig(aul)
 BuildRequires:  pkgconfig(capi-base-common)
-Requires(post): /sbin/ldconfig
-Requires(postun): /sbin/ldconfig
 
 %description
 The Package Manager API provides functions to install, uninstall the package,
@@ -23,7 +20,7 @@ and also privides event listening function.
 
 %package devel
 Summary:  Package Manager API (Development)
-Group:    TO_BE/FILLED_IN
+Group:    API
 Requires: %{name} = %{version}-%{release}
 
 %description devel
@@ -37,7 +34,7 @@ and also privides event listening function. (DEV)
 
 %build
 MAJORVER=`echo %{version} | awk 'BEGIN {FS="."}{print $1}'`
-cmake . -DCMAKE_INSTALL_PREFIX=/usr -DFULLVER=%{version} -DMAJORVER=${MAJORVER}
+%cmake . -DFULLVER=%{version} -DMAJORVER=${MAJORVER}
 
 make %{?jobs:-j%jobs}
 
index b916071..8e51c8c 100755 (executable)
@@ -445,6 +445,25 @@ int package_info_is_removable_package(package_info_h package_info, bool *removab
        return PACKAGE_MANAGER_ERROR_NONE;
 }
 
+int package_info_is_preload_package(package_info_h package_info, bool *preload)
+{
+       bool pkg_info_value = false;
+
+       if (package_info == NULL || preload == NULL)
+       {
+               return package_manager_error(PACKAGE_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__, NULL);
+       }
+
+       if (pkgmgr_pkginfo_is_preload(package_info->pkgmgr_pkginfo, &pkg_info_value) != PKGMGR_R_OK)
+       {
+               return package_manager_error(PACKAGE_MANAGER_ERROR_IO_ERROR, __FUNCTION__, NULL);
+       }
+
+       *preload = pkg_info_value;
+
+       return PACKAGE_MANAGER_ERROR_NONE;
+}
+
 int package_info_is_equal(package_info_h lhs, package_info_h rhs, bool *equal)
 {
        if (lhs == NULL || rhs == NULL || equal == NULL)
index 3a35ce4..33d8f7e 100755 (executable)
@@ -173,6 +173,22 @@ int package_manager_client_destroy(package_manager_request_h request)
        return PACKAGE_MANAGER_ERROR_NONE;
 }
 
+int package_manager_request_destroy(package_manager_request_h request)
+{
+       if (package_manager_client_valiate_handle(request)) {
+               return
+                   package_manager_error
+                   (PACKAGE_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__,
+                    NULL);
+       }
+
+       pkgmgr_client_free(request->pc);
+       request->pc = NULL;
+       free(request);
+
+       return PACKAGE_MANAGER_ERROR_NONE;
+}
+
 int package_manager_request_set_event_cb(package_manager_request_h request,
                                         package_manager_request_event_cb
                                         callback, void *user_data)
@@ -222,7 +238,7 @@ int package_manager_request_set_mode(package_manager_request_h request,
                     NULL);
        }
 
-       if (mode == PACAKGE_MANAGER_REQUEST_MODE_QUIET)
+       if (mode == PACKAGE_MANAGER_REQUEST_MODE_QUIET)
                request->mode = PM_QUIET;
        else
                request->mode = PM_DEFAULT;
@@ -238,11 +254,11 @@ static int package_manager_get_event_type(const char *key,
                return PACKAGE_MANAGER_ERROR_INVALID_PARAMETER;
 
        if (strcasecmp(key, "install") == 0)
-               *event_type = PACAKGE_MANAGER_EVENT_TYPE_INSTALL;
+               *event_type = PACKAGE_MANAGER_EVENT_TYPE_INSTALL;
        else if (strcasecmp(key, "uninstall") == 0)
-               *event_type = PACAKGE_MANAGER_EVENT_TYPE_UNINSTALL;
+               *event_type = PACKAGE_MANAGER_EVENT_TYPE_UNINSTALL;
        else if (strcasecmp(key, "undate") == 0)
-               *event_type = PACAKGE_MANAGER_EVENT_TYPE_UPDATE;
+               *event_type = PACKAGE_MANAGER_EVENT_TYPE_UPDATE;
        else
                return PACKAGE_MANAGER_ERROR_INVALID_PARAMETER;
 
@@ -380,12 +396,12 @@ static int request_event_handler(int req_id, const char *pkg_type,
                        return PACKAGE_MANAGER_ERROR_INVALID_PARAMETER;
 
                __add_event_info(&(request->head), req_id, event_type,
-                                PACAKGE_MANAGER_EVENT_STATE_STARTED);
+                                PACKAGE_MANAGER_EVENT_STATE_STARTED);
 
                if (request->event_cb)
                        request->event_cb(req_id, pkg_type, pkg_name,
                                          event_type,
-                                         PACAKGE_MANAGER_EVENT_STATE_STARTED,
+                                         PACKAGE_MANAGER_EVENT_STATE_STARTED,
                                          0, PACKAGE_MANAGER_ERROR_NONE, request->user_data);
 
        } else if (strcasecmp(key, "install_percent") == 0
@@ -395,11 +411,11 @@ static int request_event_handler(int req_id, const char *pkg_type,
                     &event_state) == 0) {
                        __update_event_info(&(request->head), req_id,
                                            event_type,
-                                           PACAKGE_MANAGER_EVENT_STATE_PROCESSING);
+                                           PACKAGE_MANAGER_EVENT_STATE_PROCESSING);
                        if (request->event_cb)
                                request->event_cb(req_id, pkg_type, pkg_name,
                                                  event_type,
-                                                 PACAKGE_MANAGER_EVENT_STATE_PROCESSING,
+                                                 PACKAGE_MANAGER_EVENT_STATE_PROCESSING,
                                                  atoi(val),
                                                  PACKAGE_MANAGER_ERROR_NONE,
                                                  request->user_data);
@@ -412,13 +428,13 @@ static int request_event_handler(int req_id, const char *pkg_type,
                             &event_state) == 0) {
                                __update_event_info(&(request->head), req_id,
                                                    event_type,
-                                                   PACAKGE_MANAGER_EVENT_STATE_FAILED);
+                                                   PACKAGE_MANAGER_EVENT_STATE_FAILED);
                        }
 
                        if (request->event_cb)
                                request->event_cb(req_id, pkg_type,
                                                  pkg_name, event_type,
-                                                 PACAKGE_MANAGER_EVENT_STATE_FAILED,
+                                                 PACKAGE_MANAGER_EVENT_STATE_FAILED,
                                                  0,
                                                  PACKAGE_MANAGER_ERROR_NONE,
                                                  request->user_data);
@@ -428,11 +444,11 @@ static int request_event_handler(int req_id, const char *pkg_type,
                if (__find_event_info
                    (&(request->head), req_id, &event_type,
                     &event_state) == 0) {
-                       if (event_state != PACAKGE_MANAGER_EVENT_STATE_FAILED) {
+                       if (event_state != PACKAGE_MANAGER_EVENT_STATE_FAILED) {
                                if (request->event_cb)
                                        request->event_cb(req_id, pkg_type,
                                                          pkg_name, event_type,
-                                                         PACAKGE_MANAGER_EVENT_STATE_COMPLETED,
+                                                         PACKAGE_MANAGER_EVENT_STATE_COMPLETED,
                                                          100,
                                                          PACKAGE_MANAGER_ERROR_NONE,
                                                          request->user_data);
@@ -442,7 +458,7 @@ static int request_event_handler(int req_id, const char *pkg_type,
                                if (request->event_cb)
                                        request->event_cb(req_id, pkg_type,
                                                          pkg_name, event_type,
-                                                         PACAKGE_MANAGER_EVENT_STATE_FAILED,
+                                                         PACKAGE_MANAGER_EVENT_STATE_FAILED,
                                                          0,
                                                          PACKAGE_MANAGER_ERROR_NONE,
                                                          request->user_data);
@@ -583,12 +599,12 @@ static int global_event_handler(int req_id, const char *pkg_type,
                        return PACKAGE_MANAGER_ERROR_INVALID_PARAMETER;
 
                __add_event_info(&(manager->head), req_id, event_type,
-                                PACAKGE_MANAGER_EVENT_STATE_STARTED);
+                                PACKAGE_MANAGER_EVENT_STATE_STARTED);
 
                if (manager->event_cb)
                        manager->event_cb(pkg_type, pkg_name,
                                          event_type,
-                                         PACAKGE_MANAGER_EVENT_STATE_STARTED,
+                                         PACKAGE_MANAGER_EVENT_STATE_STARTED,
                                          0, PACKAGE_MANAGER_ERROR_NONE, manager->user_data);
 
        } else if (strcasecmp(key, "install_percent") == 0
@@ -598,11 +614,11 @@ static int global_event_handler(int req_id, const char *pkg_type,
                     &event_state) == 0) {
                        __update_event_info(&(manager->head), req_id,
                                            event_type,
-                                           PACAKGE_MANAGER_EVENT_STATE_PROCESSING);
+                                           PACKAGE_MANAGER_EVENT_STATE_PROCESSING);
                        if (manager->event_cb)
                                manager->event_cb(pkg_type, pkg_name,
                                                  event_type,
-                                                 PACAKGE_MANAGER_EVENT_STATE_PROCESSING,
+                                                 PACKAGE_MANAGER_EVENT_STATE_PROCESSING,
                                                  atoi(val),
                                                  PACKAGE_MANAGER_ERROR_NONE,
                                                  manager->user_data);
@@ -615,13 +631,13 @@ static int global_event_handler(int req_id, const char *pkg_type,
                             &event_state) == 0) {
                                __update_event_info(&(manager->head), req_id,
                                                    event_type,
-                                                   PACAKGE_MANAGER_EVENT_STATE_FAILED);
+                                                   PACKAGE_MANAGER_EVENT_STATE_FAILED);
                        }
 
                        if (manager->event_cb)
                                manager->event_cb(pkg_type,
                                                  pkg_name, event_type,
-                                                 PACAKGE_MANAGER_EVENT_STATE_FAILED,
+                                                 PACKAGE_MANAGER_EVENT_STATE_FAILED,
                                                  0,
                                                  PACKAGE_MANAGER_ERROR_NONE,
                                                  manager->user_data);
@@ -631,11 +647,11 @@ static int global_event_handler(int req_id, const char *pkg_type,
                if (__find_event_info
                    (&(manager->head), req_id, &event_type,
                     &event_state) == 0) {
-                       if (event_state != PACAKGE_MANAGER_EVENT_STATE_FAILED) {
+                       if (event_state != PACKAGE_MANAGER_EVENT_STATE_FAILED) {
                                if (manager->event_cb)
                                        manager->event_cb(pkg_type,
                                                          pkg_name, event_type,
-                                                         PACAKGE_MANAGER_EVENT_STATE_COMPLETED,
+                                                         PACKAGE_MANAGER_EVENT_STATE_COMPLETED,
                                                          100,
                                                          PACKAGE_MANAGER_ERROR_NONE,
                                                          manager->user_data);
@@ -645,7 +661,7 @@ static int global_event_handler(int req_id, const char *pkg_type,
                                if (manager->event_cb)
                                        manager->event_cb(pkg_type,
                                                          pkg_name, event_type,
-                                                         PACAKGE_MANAGER_EVENT_STATE_FAILED,
+                                                         PACKAGE_MANAGER_EVENT_STATE_FAILED,
                                                          0,
                                                          PACKAGE_MANAGER_ERROR_NONE,
                                                          manager->user_data);
@@ -785,3 +801,78 @@ int package_manager_compare_app_cert_info(const char *lhs_app_id, const char *rh
        return PACKAGE_MANAGER_ERROR_NONE;
 }
 
+int package_manager_is_preload_package_by_app_id(const char *app_id, bool *preload)
+{
+       pkgmgrinfo_appinfo_h pkgmgrinfo_appinfo = NULL;
+       pkgmgrinfo_pkginfo_h pkgmgrinfo_pkginfo = NULL;
+
+       int retval =0;
+       char *pkg_id = NULL;
+       bool is_preload = 0;
+
+       if (pkgmgrinfo_appinfo_get_appinfo(app_id, &pkgmgrinfo_appinfo) != PMINFO_R_OK)
+       {
+               return package_manager_error(PACKAGE_MANAGER_ERROR_NO_SUCH_PACKAGE, __FUNCTION__, NULL);
+       }
+
+       retval = pkgmgrinfo_appinfo_get_pkgname(pkgmgrinfo_appinfo, &pkg_id);
+       if (retval != PMINFO_R_OK)
+       {
+               pkgmgrinfo_appinfo_destroy_appinfo(pkgmgrinfo_appinfo);
+               return package_manager_error(PACKAGE_MANAGER_ERROR_NO_SUCH_PACKAGE, __FUNCTION__, NULL);
+       }
+
+       if (pkgmgrinfo_pkginfo_get_pkginfo(pkg_id, &pkgmgrinfo_pkginfo) != PMINFO_R_OK)
+       {
+               pkgmgrinfo_appinfo_destroy_appinfo(pkgmgrinfo_appinfo);
+               pkgmgrinfo_pkginfo_destroy_pkginfo(pkgmgrinfo_pkginfo);
+               return package_manager_error(PACKAGE_MANAGER_ERROR_NO_SUCH_PACKAGE, __FUNCTION__, NULL);
+       }
+
+       if (pkgmgrinfo_pkginfo_is_preload(pkgmgrinfo_pkginfo, &is_preload) != PMINFO_R_OK)
+       {
+               pkgmgrinfo_appinfo_destroy_appinfo(pkgmgrinfo_appinfo);
+               pkgmgrinfo_pkginfo_destroy_pkginfo(pkgmgrinfo_pkginfo);
+               return package_manager_error(PACKAGE_MANAGER_ERROR_NO_SUCH_PACKAGE, __FUNCTION__, NULL);
+       }
+
+       if (is_preload)
+               *preload = 1;
+       else
+               *preload = 0;
+
+       pkgmgrinfo_appinfo_destroy_appinfo(pkgmgrinfo_appinfo);
+       pkgmgrinfo_pkginfo_destroy_pkginfo(pkgmgrinfo_pkginfo);
+
+       return PACKAGE_MANAGER_ERROR_NONE;
+}
+
+int package_manager_get_permission_type(const char *app_id, package_manager_permission_type_e *permission_type)
+{
+       int retval = 0;
+       pkgmgrinfo_appinfo_h pkgmgrinfo_appinfo =NULL;
+       pkgmgrinfo_permission_type permission = 0;
+
+       if (pkgmgrinfo_appinfo_get_appinfo(app_id, &pkgmgrinfo_appinfo) != PMINFO_R_OK)
+       {
+               return package_manager_error(PACKAGE_MANAGER_ERROR_NO_SUCH_PACKAGE, __FUNCTION__, NULL);
+       }
+
+       retval = pkgmgrinfo_appinfo_get_permission_type(pkgmgrinfo_appinfo, &permission);
+       if (retval != PMINFO_R_OK)
+       {
+               return package_manager_error(PACKAGE_MANAGER_ERROR_NO_SUCH_PACKAGE, __FUNCTION__, NULL);
+       }
+
+       if (permission == PMINFO_PERMISSION_NORMAL)
+               *permission_type = PACKAGE_MANAGER_PERMISSION_NORMAL;
+       else if (permission == PMINFO_PERMISSION_SIGNATURE)
+               *permission_type = PACKAGE_MANAGER_PERMISSION_SIGNATURE;
+       else if (permission == PMINFO_PERMISSION_PRIVILEGE)
+               *permission_type = PACKAGE_MANAGER_PERMISSION_PRIVILEGE;
+       else
+               *permission_type = PACKAGE_MANAGER_PERMISSION_NORMAL;
+
+       pkgmgrinfo_appinfo_destroy_appinfo(pkgmgrinfo_appinfo);
+       return PACKAGE_MANAGER_ERROR_NONE;
+}
index f872a3e..e4ddc3d 100755 (executable)
@@ -65,6 +65,7 @@ static int _get_packageinfo(const char *package)
        package_info_installed_storage_type_e storage;
        bool system;
        bool removable;
+       bool preload;
 
 
        ret = package_manager_get_package_info(package, &package_info);
@@ -80,6 +81,7 @@ static int _get_packageinfo(const char *package)
        package_info_get_installed_storage(package_info, &storage);
        package_info_is_system_package(package_info, &system);
        package_info_is_removable_package(package_info, &removable);
+       package_info_is_preload_package(package_info, &preload);
 
        fprintf(stderr, "pkg \t= [%s]\n", pkg);
        fprintf(stderr, "label \t= [%s]\n", label);
@@ -89,6 +91,7 @@ static int _get_packageinfo(const char *package)
        fprintf(stderr, "storage \t= [%d]\n", storage);
        fprintf(stderr, "system \t= [%d]\n", system);
        fprintf(stderr, "removable \t= [%d]\n", removable);
+       fprintf(stderr, "preload \t= [%d]\n", preload);
 
        package_info_foreach_cert_info(package_info, _cert_info_cb, NULL);