int pkgmgrinfo_pkginfo_foreach_appdefined_privilege(pkgmgrinfo_pkginfo_h handle,
pkgmgrinfo_pkg_appdefined_privilege_list_cb privilege_func, void *user_data);
+/**
+ * @fn int pkgmgrinfo_pkginfo_foreach_privilege_v2(pkgmgrinfo_pkginfo_h handle,
+ pkgmgrinfo_pkg_privilege_list_cb_v2 privilege_func,
+ void *user_data);
+ * @brief This API gets the list of privilege for a particular package
+ *
+ * @par This API is for package-manager client application
+ * @par Sync (or) Async : Synchronous API
+ * @param[in] handle pointer to the package info handle.
+ * @param[in] privilege_func callback function for list
+ * @param[in] user_data user data to be passed to callback function
+ * @return 0 if success, error code(<0) if fail
+ * @retval PMINFO_R_OK success
+ * @retval PMINFO_R_EINVAL invalid argument
+ * @retval PMINFO_R_ERROR internal error
+ * @pre pkgmgrinfo_pkginfo_get_pkginfo()
+ * @post pkgmgrinfo_pkginfo_destroy_pkginfo()
+ * @code
+int privilege_func(pkgmgrinfo_pkginfo_privilege_h handle, void *user_data)
+{
+ char* type;
+ char* name;
+ if (pkgmgrinfo_get_privilege_name(handle, &name) != PMINFO_R_OK)
+ return 0;
+
+ if (pkgmgrinfo_get_privilege_type(handle, &type) != PMINFO_R_OK)
+ return 0;
+
+ printf("privilege : %s, type : %s\n", name, type);
+
+ return 0;
+}
+
+static int print_privilege(const char *package, char *privilege)
+{
+ int ret = 0;
+ pkgmgrinfo_pkginfo_h handle;
+ ret = pkgmgrinfo_pkginfo_get_pkginfo(package, &handle);
+ if (ret != PMINFO_R_OK)
+ return -1;
+ ret = pkgmgrinfo_pkginfo_foreach_privilege_v2(handle, privilege_func, NULL);
+ if (ret != PMINFO_R_OK) {
+ pkgmgrinfo_pkginfo_destroy_pkginfo(handle);
+ return -1;
+ }
+ pkgmgrinfo_pkginfo_destroy_pkginfo(handle);
+ return 0;
+}
+ * @endcode
+ */
+int pkgmgrinfo_pkginfo_foreach_privilege_v2(pkgmgrinfo_pkginfo_h handle,
+ pkgmgrinfo_pkg_privilege_list_cb_v2 privilege_func,
+ void *user_data);
+
+/**
+ * @fn int pkgmgrinfo_get_privilege_category(pkgmgrinfo_pkginfo_privilege_h handle, pkgmgrinfo_privilege_category *category)
+ * @brief This API retrieves the privilege category from privilge handle
+ *
+ * @par This API is for package-manager client application
+ * @par Sync (or) Async : Synchronous API
+ *
+ * @param[in] handle pointer to privilege handle
+ * @param[out] category privilege category
+ * @return 0 if success, error code(<0) if fail
+ * @retval PMINFO_R_OK success
+ * @retval PMINFO_R_EINVAL invalid argument
+ * @code
+static int get_privilege_category_from_handle(pkgmgrinfo_pkginfo_privilege_h handle)
+{
+ int ret = 0;
+ pkgmgrinfo_privilege_category category;
+
+ ret = pkgmgrinfo_get_privilege_category(handle, &category);
+ if (ret != PMINFO_R_OK)
+ return -1;
+ return 0;
+}
+ * @endcode
+ */
+int pkgmgrinfo_get_privilege_category(pkgmgrinfo_pkginfo_privilege_h handle, pkgmgrinfo_privilege_category *category);
+
+/**
+ * @fn int pkgmgrinfo_get_privilege_name(pkgmgrinfo_pkginfo_privilege_h handle, char **name)
+ * @brief This API retrieves the privilege name from privilge handle
+ *
+ * @par This API is for package-manager client application
+ * @par Sync (or) Async : Synchronous API
+ *
+ * @param[in] handle pointer to privilege handle
+ * @param[out] name privilege name
+ * @return 0 if success, error code(<0) if fail
+ * @retval PMINFO_R_OK success
+ * @retval PMINFO_R_EINVAL invalid argument
+ * @code
+static int get_privilege_name_from_handle(pkgmgrinfo_pkginfo_privilege_h handle)
+{
+ int ret = 0;
+ pkgmgrinfo_privilege_name name;
+
+ ret = pkgmgrinfo_get_privilege_name(handle, &name);
+ if (ret != PMINFO_R_OK)
+ return -1;
+ return 0;
+}
+ * @endcode
+ */
+int pkgmgrinfo_get_privilege_name(pkgmgrinfo_pkginfo_privilege_h handle, char **name);
+
+/**
+ * @fn int pkgmgrinfo_get_privilege_type(pkgmgrinfo_pkginfo_privilege_h handle, char **type)
+ * @brief This API retrieves the privilege type from privilge handle
+ *
+ * @par This API is for package-manager client application
+ * @par Sync (or) Async : Synchronous API
+ *
+ * @param[in] handle pointer to privilege handle
+ * @param[out] type privilege type
+ * @return 0 if success, error code(<0) if fail
+ * @retval PMINFO_R_OK success
+ * @retval PMINFO_R_EINVAL invalid argument
+ * @code
+static int get_privilege_type_from_handle(pkgmgrinfo_pkginfo_privilege_h handle)
+{
+ int ret = 0;
+ pkgmgrinfo_privilege_type type;
+
+ ret = pkgmgrinfo_get_privilege_type(handle, &type);
+ if (ret != PMINFO_R_OK)
+ return -1;
+ return 0;
+}
+ * @endcode
+ */
+int pkgmgrinfo_get_privilege_type(pkgmgrinfo_pkginfo_privilege_h handle, char **type);
+
/**
* @fn int pkgmgrinfo_pkginfo_foreach_plugin(pkgmgrinfo_pkginfo_h handle,
pkgmgrinfo_plugin_list_cb plugin_func, void *user_data);
*/
typedef void *pkgmgrinfo_appinfo_app_control_h;
+/**
+ * @brief A handle to get privilege
+ */
+typedef void *pkgmgrinfo_pkginfo_privilege_h;
+
/**
* @brief type definition.
*/
typedef int (*pkgmgrinfo_pkg_privilege_list_cb) (const char *privilege_name,
void *user_data);
+/**
+ * @fn int (*pkgmgrinfo_pkg_privilege_list_cb_v2) (pkgmgrinfo_pkginfo_privilege_h privilege, void *user_data)
+ *
+ * @brief Specifies the type of function passed to pkgmgrinfo_pkginfo_foreach_privilege_v2()
+ *
+ * @param[in] privilege the handle of the privilege
+ * @param[in] user_data user data passed to pkgmgrinfo_pkginfo_foreach_privilege_v2()
+ *
+ * @return 0 if success, negative value(<0) if fail. Callback is not called if return value is negative.\n
+ *
+ * @see pkgmgrinfo_pkginfo_foreach_privilege_v2()
+ */
+typedef int (*pkgmgrinfo_pkg_privilege_list_cb_v2) (
+ pkgmgrinfo_pkginfo_privilege_h privilege, void *user_data);
+
/**
* @fn int (*pkgmgrinfo_pkg_appdefined_privilege_list_cb) (const char *privilege_name, const char *license_path, void *user_data)
*
PMINFO_PERMISSION_PRIVILEGE, /**< permission type is privilege*/
} pkgmgrinfo_permission_type;
+typedef enum {
+ PMINFO_PRIVILEGE_NORMAL = 0, /**< normal privilege*/
+ PMINFO_PRIVILEGE_APPDEFINES, /**< appdefines privilege*/
+} pkgmgrinfo_privilege_category;
+
#endif
return PMINFO_R_OK;
}
+API int pkgmgrinfo_pkginfo_foreach_privilege_v2(pkgmgrinfo_pkginfo_h handle,
+ pkgmgrinfo_pkg_privilege_list_cb_v2 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;
+ privilege_x *privilege;
+ appdefined_privilege_x *appdefined_privilege;
+ pkgmgrinfo_privilege_x privilege_handle;
+ GList *tmp;
+ pkgmgr_pkginfo_x *info = (pkgmgr_pkginfo_x *)handle;
+
+ if (info->pkg_info == NULL)
+ return PMINFO_R_ERROR;
+
+ for (tmp = info->pkg_info->privileges; tmp; tmp = tmp->next) {
+
+ privilege = (privilege_x *)tmp->data;
+ if (privilege == NULL)
+ continue;
+ privilege_handle.category = PMINFO_PRIVILEGE_NORMAL;
+ privilege_handle.priv = (void *)privilege;
+ ret = privilege_func((pkgmgrinfo_pkginfo_privilege_h)&privilege_handle, user_data);
+ if (ret < 0)
+ return PMINFO_R_OK;
+ }
+
+ for (tmp = info->pkg_info->appdefined_privileges; tmp;
+ tmp = tmp->next) {
+ appdefined_privilege = (appdefined_privilege_x *)tmp->data;
+ if (appdefined_privilege == NULL)
+ continue;
+ privilege_handle.category = PMINFO_PRIVILEGE_APPDEFINES;
+ privilege_handle.priv = (void *)appdefined_privilege;
+ ret = privilege_func((pkgmgrinfo_pkginfo_privilege_h)&privilege_handle, user_data);
+ if (ret < 0)
+ return PMINFO_R_OK;
+ }
+
+ return PMINFO_R_OK;
+}
+
+API int pkgmgrinfo_get_privilege_category(pkgmgrinfo_pkginfo_privilege_h handle, pkgmgrinfo_privilege_category *category)
+{
+ retvm_if(handle == NULL, PMINFO_R_EINVAL, "privilege handle is NULL");
+ retvm_if(category == NULL, PMINFO_R_EINVAL,
+ "Argument supplied to hold return value is NULL");
+
+ *category = ((pkgmgrinfo_privilege_x *)handle)->category;
+
+ return PMINFO_R_OK;
+}
+
+API int pkgmgrinfo_get_privilege_name(pkgmgrinfo_pkginfo_privilege_h handle, char **name)
+{
+ retvm_if(handle == NULL, PMINFO_R_EINVAL, "privilege handle is NULL");
+ retvm_if(name == NULL, PMINFO_R_EINVAL,
+ "Argument supplied to hold return value is NULL");
+
+ int ret = PMINFO_R_OK;
+ pkgmgrinfo_privilege_x *privilege_handle = (pkgmgrinfo_privilege_x *)handle;
+ switch (privilege_handle->category) {
+ case PMINFO_PRIVILEGE_NORMAL:
+ *name = ((privilege_x *)privilege_handle->priv)->value;
+ break;
+ case PMINFO_PRIVILEGE_APPDEFINES:
+ *name = ((appdefined_privilege_x *)privilege_handle->priv)->value;
+ break;
+ default:
+ LOGE("Invalid privilege category : %d",
+ privilege_handle->category);
+ ret = PMINFO_R_ERROR;
+ break;
+ }
+
+ return ret;
+}
+
+API int pkgmgrinfo_get_privilege_type(pkgmgrinfo_pkginfo_privilege_h handle, char **type)
+{
+ retvm_if(handle == NULL, PMINFO_R_EINVAL, "privilege handle is NULL");
+ retvm_if(type == NULL, PMINFO_R_EINVAL,
+ "Argument supplied to hold return value is NULL");
+
+ int ret = PMINFO_R_OK;
+ pkgmgrinfo_privilege_x *privilege_handle = (pkgmgrinfo_privilege_x *)handle;
+ switch (privilege_handle->category) {
+ case PMINFO_PRIVILEGE_NORMAL:
+ *type = ((privilege_x *)privilege_handle->priv)->type;
+ break;
+ case PMINFO_PRIVILEGE_APPDEFINES:
+ *type = ((appdefined_privilege_x *)privilege_handle->priv)->type;
+ break;
+ default:
+ LOGE("Invalid privilege category : %d",
+ privilege_handle->category);
+ ret = PMINFO_R_ERROR;
+ break;
+ }
+
+ return ret;
+}
+
API int pkgmgrinfo_pkginfo_foreach_plugin(pkgmgrinfo_pkginfo_h handle,
pkgmgrinfo_plugin_list_cb plugin_func, void *user_data)
{
get_pkg_detail_info_from_package;
} pkg_plugin_set;
+typedef struct _pkgmgrinfo_privilege_x {
+ pkgmgrinfo_privilege_category category;
+ void *priv;
+} pkgmgrinfo_privilege_x;
+
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);