*/
typedef struct package_info_s *package_info_h;
+/**
+ * @brief The package update information handle.
+ * @since_tizen 4.0
+ */
+typedef struct package_update_info_s *package_update_info_h;
/**
* @brief Enumeration for storage type.
PACKAGE_INFO_DISTRIBUTOR2_SIGNER_CERT = 8, /**< Distributor2 Signer Certificate*/
} package_cert_type_e;
+/**
+ * @brief Enumeration for package update info type.
+ * @since_tizen 4.0
+ */
+typedef enum {
+ PACKAGE_UPDATEINFO_TYPE_NONE = 0, /**< None type */
+ PACKAGE_UPDATEINFO_TYPE_FORCE, /**< Force type */
+ PACKAGE_UPDATEINFO_TYPE_OPTIONAL /**< Optional type */
+} package_update_info_type_e;
+
+/**
+ * @brief Called for each update information of all packages.
+ * @since_tizen 4.0
+ * @param[in] package_updateinfo The application update information handle
+ * @param[in] user_data The user data passed from the foreach function
+ * @return @c true to continue with the next iteration of the loop,
+ * otherwise @c false to break out of the loop
+ * @pre package_info_updateinfo_foreach_updateinfo() will invoke this callback.
+ * @see package_info_updateinfo_foreach_updateinfo()
+ */
+typedef bool (*package_info_updateinfo_cb) (package_update_info_h package_updateinfo, void *user_data);
/**
* @brief Called to get the application ID once for each installed package.
*/
int package_info_foreach_privilege_info(package_info_h package_info, package_info_privilege_info_cb callback, void *user_data);
+/**
+ * @brief Gets the package update information for the given package.
+ * @since_tizen 4.0
+ * @remarks You must release @a package_updateinfo using package_info_updateinfo_destroy().
+ * @param[in] pkgid The ID of the package
+ * @param[out] package_updateinfo The package update information for the given package ID
+ * @return @c 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_NO_SUCH_PACKAGE The package is not installed
+ * @retval #PACKAGE_MANAGER_ERROR_OUT_OF_MEMORY Out of memory
+ * @retval #PACKAGE_MANAGER_ERROR_IO_ERROR Database error occurred
+ * @see package_info_updateinfo_destroy()
+ */
+int package_info_updateinfo_create(const char *pkgid, package_update_info_h *package_updateinfo);
+
+/**
+ * @brief Gets the package name.
+ * @since_tizen 4.0
+ * @remarks You must release @a package using free().
+ * @param[in] package_updateinfo The package update information
+ * @param[out] package The package name
+ * @return @c 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 occured
+ */
+int package_info_updateinfo_get_pkgid(package_update_info_h package_updateinfo, char **package);
+
+/**
+ * @brief Gets the update version of package.
+ * @since_tizen 4.0
+ * @remarks You must release @a version using free().
+ * @param[in] package_updateinfo The package update information
+ * @param[out] version The package update version
+ * @return @c 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 occured
+ */
+int package_info_updateinfo_get_version(package_update_info_h package_updateinfo, char **version);
+
+/**
+ * @brief Gets the update type of package.
+ * @since_tizen 4.0
+ * @param[in] package_updateinfo The package update information
+ * @param[out] type The package update type
+ * @return @c 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_IO_ERROR Internal I/O error occured
+ */
+int package_info_updateinfo_get_type(package_update_info_h package_updateinfo, package_update_info_type_e *type);
+
+/**
+ * @brief Destroys the package update information handle and releases all its resources.
+ * @since_tizen 4.0
+ * @param[in] package_updateinfo The package update information handle
+ * @return @c 0 on success,
+ * otherwise a negative error value
+ * @retval #PACKAGE_MANAGER_ERROR_NONE Successful
+ * @retval #PACKAGE_MANAGER_ERROR_INVALID_PARAMETER Invalid parameter
+ * @see package_info_updateinfo_create()
+ */
+int package_info_updateinfo_destroy(package_update_info_h package_updateinfo);
+
+/**
+ * @brief Retrieve update information of all packages and invoke callback for each of it.
+ * @since_tizen 4.0
+ * @param[in] callback The iteration callback function
+ * @param[in] user_data The user data to be passed to the callback function
+ * @return @c 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_IO_ERROR I/O error
+ */
+int package_info_updateinfo_foreach_updateinfo(package_info_updateinfo_cb callback, void *user_data);
+
/**
* @}
PACKAGE_MANAGER_STATUS_TYPE_GET_SIZE = 0x40, /**< Get size status */
} package_manager_status_type_e;
+/**
+ * @brief The Package manager update info request handle.
+ * @since_tizen 4.0
+ */
+typedef struct package_updateinfo_request_s *package_updateinfo_request_h;
/**
* @brief The Package manager handle.
void *user_data,
int *id);
+/**
+ * @platform
+ * @brief Creates a package update info request.
+ * @since_tizen 4.0
+ * @privlevel platform
+ * @privilege %http://tizen.org/privilege/packagemanager.admin
+ * @remarks You must release @a handle using package_manager_request_destroy().
+ * @param[out] package_updateinfo The package update info request handle that is newly created on success
+ * @return @c 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_PERMISSION_DENIED Permission denied
+ * @see package_manager_updateinfo_request_destroy()
+ */
+int package_manager_updateinfo_request_create(package_updateinfo_request_h *package_updateinfo);
+
+/**
+ * @brief Sets the package id to the package update info.
+ * @since_tizen 4.0
+ * @param[in] package_updateinfo The update info request handle
+ * @param[in] pkgid The package id to be set
+ * @return @c 0 on success,
+ * otherwise a negative error value
+ * @retval #PACKAGE_MANAGER_ERROR_NONE Successful
+ * @retval #PACKAGE_MANAGER_ERROR_OUT_OF_MEMORY Out of memory
+ * @retval #PACKAGE_MANAGER_ERROR_INVALID_PARAMETER Invalid parameter
+ * @see package_manager_updateinfo_request_create()
+ */
+int package_manager_updateinfo_set_pkgid(package_updateinfo_request_h package_updateinfo, const char *pkgid);
+
+/**
+ * @brief Sets the package version to the package update info.
+ * @since_tizen 4.0
+ * @param[in] package_updateinfo The update info request handle
+ * @param[in] version The package version to be set
+ * @return @c 0 on success,
+ * otherwise a negative error value
+ * @retval #PACKAGE_MANAGER_ERROR_NONE Successful
+ * @retval #PACKAGE_MANAGER_ERROR_OUT_OF_MEMORY Out of memory
+ * @retval #PACKAGE_MANAGER_ERROR_INVALID_PARAMETER Invalid parameter
+ * @see package_manager_updateinfo_request_create()
+ */
+int package_manager_updateinfo_set_version(package_updateinfo_request_h package_updateinfo, const char *version);
+
+/**
+ * @brief Sets the package update type to the package update info.
+ * @since_tizen 4.0
+ * @param[in] package_updateinfo The update info request handle
+ * @param[in] type The package update type to be set
+ * @return @c 0 on success,
+ * otherwise a negative error value
+ * @retval #PACKAGE_MANAGER_ERROR_NONE Successful
+ * @retval #PACKAGE_MANAGER_ERROR_INVALID_PARAMETER Invalid parameter
+ * @see package_manager_updateinfo_request_create()
+ * @see package_update_info_type
+ */
+int package_manager_updateinfo_set_type(package_updateinfo_request_h package_updateinfo, package_update_info_type_e type);
+
+/**
+ * @platform
+ * @brief Request to register package update info.
+ * @since_tizen 4.0
+ * @param[in] package_updateinfo The update info request handle
+ * @return @c 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_IO_ERROR I/O error
+ * @retval #PACKAGE_MANAGER_ERROR_SYSTEM_ERROR Severe system error
+ * @see package_manager_updateinfo_request_create()
+ * @see package_manager_updateinfo_request_destroy()
+ */
+int package_manager_updateinfo_request_register(package_updateinfo_request_h package_updateinfo);
+
+/**
+ * @brief Destroys the package update info.
+ * @since_tizen 4.0
+ * @param[in] package_updateinfo The update info request handle
+ * @return @c 0 on success,
+ * otherwise a negative error value
+ * @retval #PACKAGE_MANAGER_ERROR_NONE Successful
+ * @retval #PACKAGE_MANAGER_ERROR_INVALID_PARAMETER Invalid parameter
+ * @see package_manager_updateinfo_request_create()
+ */
+int package_manager_updateinfo_request_destroy(package_updateinfo_request_h package_updateinfo);
+
+/**
+ * @platform
+ * @brief Request to unregister update info in platform for given package id.
+ * @since_tizen 4.0
+ * @param[in] package_updateinfo The update info request handle
+ * @param[in] pkgid The package id to request unregister update info
+ * @return @c 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_IO_ERROR I/O error
+ * @retval #PACKAGE_MANAGER_ERROR_SYSTEM_ERROR Severe system error
+ */
+int package_manager_updateinfo_request_unregister(package_updateinfo_request_h package_updateinfo, const char *pkgid);
+
+/**
+ * @platform
+ * @brief Request to unregister update info of all packages in platform.
+ * @since_tizen 4.0
+ * @param[in] package_updateinfo The update info request handle
+ * @return @c 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_IO_ERROR I/O error
+ * @retval #PACKAGE_MANAGER_ERROR_SYSTEM_ERROR Severe system error
+ */
+int package_manager_updateinfo_request_unregister_all(package_updateinfo_request_h package_updateinfo);
+
/**
* @}
pkgmgrinfo_certinfo_h pkgmgrinfo_certinfo;
};
+typedef struct package_updateinfo_s {
+ pkgmgrinfo_updateinfo_h update_info;
+} package_updateinfo_s;
+
typedef struct _foreach_app_context_ {
package_info_app_cb callback;
void *user_data;
} foreach_app_context_s;
+typedef struct _foreach_updateinfo_ {
+ package_info_updateinfo_cb callback;
+ void *user_data;
+} foreach_updateinfo_context_s;
+
+static int package_info_foreach_updateinfo_cb(const pkgmgrinfo_updateinfo_h handle, void *user_data)
+{
+ foreach_updateinfo_context_s *foreach_updateinfo = user_data;
+ bool iteration_next;
+
+ if (handle == NULL || foreach_updateinfo == NULL)
+ return package_manager_error(PACKAGE_MANAGER_ERROR_IO_ERROR, __FUNCTION__, NULL);
+ iteration_next = foreach_updateinfo->callback(handle, foreach_updateinfo->user_data);
+ if (iteration_next == true)
+ return PMINFO_R_OK;
+ else
+ return PMINFO_R_ERROR;
+}
+
+static int package_info_updateinfo_convert_type(pkgmgrinfo_updateinfo_update_type type, package_update_info_type_e *converted_type)
+{
+ if (type == PMINFO_UPDATEINFO_NONE)
+ *converted_type = PACKAGE_UPDATEINFO_TYPE_NONE;
+ else if (type == PMINFO_UPDATEINFO_FORCE)
+ *converted_type = PACKAGE_UPDATEINFO_TYPE_FORCE;
+ else if (type == PMINFO_UPDATEINFO_OPTIONAL)
+ *converted_type = PACKAGE_UPDATEINFO_TYPE_OPTIONAL;
+ else
+ return -1;
+
+ return 0;
+}
+
API int package_info_create(const char *package, package_info_h *package_info)
{
package_info_h package_info_created;
return ret;
}
+API int package_info_updateinfo_create(const char *pkgid, package_update_info_h *package_updateinfo)
+{
+ int ret;
+ package_updateinfo_s *update_info;
+
+ if (pkgid == NULL || package_updateinfo == NULL)
+ return package_manager_error(PACKAGE_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__, NULL);
+
+ update_info = calloc(1, sizeof(package_updateinfo_s));
+ if (update_info == NULL)
+ return package_manager_error(PACKAGE_MANAGER_ERROR_OUT_OF_MEMORY, __FUNCTION__, NULL);
+
+ ret = pkgmgrinfo_updateinfo_get_updateinfo(pkgid, &update_info->update_info);
+ if (ret == PMINFO_R_ENOENT) {
+ free(update_info);
+ return package_manager_error(PACKAGE_MANAGER_ERROR_NO_SUCH_PACKAGE, __FUNCTION__, NULL);
+ } else if (ret == PMINFO_R_EINVAL) {
+ free(update_info);
+ return package_manager_error(PACKAGE_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__, NULL);
+ } else if (ret == PMINFO_R_ERROR) {
+ free(update_info);
+ return package_manager_error(PACKAGE_MANAGER_ERROR_IO_ERROR, __FUNCTION__, NULL);
+ }
+
+ *package_updateinfo = update_info;
+ return PACKAGE_MANAGER_ERROR_NONE;
+}
+
+API int package_info_updateinfo_get_pkgid(package_update_info_h package_updateinfo, char **package)
+{
+ int ret;
+ char *pkg_updateinfo_value = NULL;
+ char *pkgid_dup;
+ package_updateinfo_s *update_info;
+
+ if (package == NULL || package_updateinfo == NULL)
+ return package_manager_error(PACKAGE_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__, NULL);
+
+ update_info = (package_updateinfo_s *)package_updateinfo;
+ ret = pkgmgrinfo_updateinfo_get_pkgid(update_info->update_info, &pkg_updateinfo_value);
+ if (ret != PMINFO_R_OK || pkg_updateinfo_value == NULL)
+ return package_manager_error(PACKAGE_MANAGER_ERROR_IO_ERROR, __FUNCTION__, NULL);
+
+ pkgid_dup = strdup(pkg_updateinfo_value);
+ if (pkgid_dup == NULL)
+ return package_manager_error(PACKAGE_MANAGER_ERROR_OUT_OF_MEMORY, __FUNCTION__, NULL);
+
+ *package = pkgid_dup;
+ return PACKAGE_MANAGER_ERROR_NONE;
+}
+
+API int package_info_updateinfo_get_version(package_update_info_h package_updateinfo, char **version)
+{
+ int ret;
+ char *pkg_updateinfo_value = NULL;
+ char *ver_dup;
+ package_updateinfo_s *update_info;
+
+ if (package_updateinfo == NULL || version == NULL)
+ return package_manager_error(PACKAGE_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__, NULL);
+
+ update_info = (package_updateinfo_s *)package_updateinfo;
+ ret = pkgmgrinfo_updateinfo_get_version(update_info->update_info, &pkg_updateinfo_value);
+ if (ret != PMINFO_R_OK || pkg_updateinfo_value == NULL)
+ return package_manager_error(PACKAGE_MANAGER_ERROR_IO_ERROR, __FUNCTION__, NULL);
+
+ ver_dup = strdup(pkg_updateinfo_value);
+ if (ver_dup == NULL)
+ return package_manager_error(PACKAGE_MANAGER_ERROR_OUT_OF_MEMORY, __FUNCTION__, NULL);
+
+ *version = ver_dup;
+ return PACKAGE_MANAGER_ERROR_NONE;
+}
+
+API int package_info_updateinfo_get_type(package_update_info_h package_updateinfo, package_update_info_type_e *type)
+{
+ int ret;
+ pkgmgrinfo_updateinfo_update_type pkg_updateinfo_value;
+ package_update_info_type_e converted_type;
+ package_updateinfo_s *update_info;
+
+ if (package_updateinfo == NULL || type == NULL)
+ return package_manager_error(PACKAGE_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__, NULL);
+
+ update_info = (package_updateinfo_s *)package_updateinfo;
+ ret = pkgmgrinfo_updateinfo_get_update_type(update_info->update_info, &pkg_updateinfo_value);
+ if (ret != PMINFO_R_OK)
+ return package_manager_error(PACKAGE_MANAGER_ERROR_IO_ERROR, __FUNCTION__, NULL);
+
+ ret = package_info_updateinfo_convert_type(pkg_updateinfo_value, &converted_type);
+ if (ret != 0)
+ return package_manager_error(PACKAGE_MANAGER_ERROR_IO_ERROR, __FUNCTION__, NULL);
+
+ *type = converted_type;
+ return PACKAGE_MANAGER_ERROR_NONE;
+}
+
+API int package_info_updateinfo_destroy(package_update_info_h package_updateinfo)
+{
+ package_updateinfo_s *update_info;
+
+ if (package_updateinfo == NULL)
+ return package_manager_error(PACKAGE_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__, NULL);
+
+ update_info = (package_updateinfo_s *)package_updateinfo;
+ pkgmgrinfo_updateinfo_destroy(update_info->update_info);
+ free(update_info);
+
+ return PACKAGE_MANAGER_ERROR_NONE;
+}
+
+API int package_info_updateinfo_foreach_updateinfo(package_info_updateinfo_cb callback, void *user_data)
+{
+ int ret;
+
+ if (callback == NULL)
+ return package_manager_error(PACKAGE_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__, NULL);
+
+ foreach_updateinfo_context_s foreach_updateinfo = {
+ .callback = callback,
+ .user_data = user_data,
+ };
+
+ ret = pkgmgrinfo_updateinfo_foreach_updateinfo(package_info_foreach_updateinfo_cb, &foreach_updateinfo);
+ if (ret != PMINFO_R_OK)
+ return package_manager_error(PACKAGE_MANAGER_ERROR_IO_ERROR, __FUNCTION__, NULL);
+
+ return PACKAGE_MANAGER_ERROR_NONE;
+}
+
int package_info_create_with_pkginfo(pkgmgrinfo_pkginfo_h pkg_handle, package_info_h *package_info)
{
package_info_h pkg_info = NULL;
pkgmgrinfo_pkginfo_filter_h pkgmgrinfo_pkginfo_filter;
};
+struct package_updateinfo_request_s {
+ pkgmgr_client *pc;
+ pkg_update_info_t *updateinfo_handle;
+};
+
static int package_manager_request_new_id()
{
static int request_handle_id = 0;
*ext_app_size = size_info->external_app_size;
return PACKAGE_MANAGER_ERROR_NONE;
}
+
+API int package_manager_updateinfo_set_pkgid(package_updateinfo_request_h package_updateinfo, const char *pkgid)
+{
+ struct package_updateinfo_request_s *request;
+
+ if (package_updateinfo == NULL || package_updateinfo->updateinfo_handle == NULL)
+ return package_manager_error(PACKAGE_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__, NULL);
+
+ request = (struct package_updateinfo_request_s *)package_updateinfo;
+ if (request->updateinfo_handle->pkgid)
+ free(request->updateinfo_handle->pkgid);
+ request->updateinfo_handle->pkgid = strdup(pkgid);
+ if (request->updateinfo_handle->pkgid == NULL)
+ return package_manager_error(PACKAGE_MANAGER_ERROR_OUT_OF_MEMORY, __FUNCTION__, NULL);
+
+ return PACKAGE_MANAGER_ERROR_NONE;
+}
+
+API int package_manager_updateinfo_set_version(package_updateinfo_request_h package_updateinfo, const char *version)
+{
+ struct package_updateinfo_request_s *request;
+
+ if (package_updateinfo == NULL || package_updateinfo->updateinfo_handle == NULL)
+ return package_manager_error(PACKAGE_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__, NULL);
+
+ request = (struct package_updateinfo_request_s *)package_updateinfo;
+ if (request->updateinfo_handle->version)
+ free(request->updateinfo_handle->version);
+ request->updateinfo_handle->version = strdup(version);
+ if (request->updateinfo_handle->pkgid == NULL)
+ return package_manager_error(PACKAGE_MANAGER_ERROR_OUT_OF_MEMORY, __FUNCTION__, NULL);
+
+ return PACKAGE_MANAGER_ERROR_NONE;
+}
+
+static int package_manager_updateinfo_convert_property(package_update_info_type_e property, pkgmgr_updateinfo_type *converted_property)
+{
+ if (converted_property == NULL)
+ return -1;
+
+ if (property == PACKAGE_UPDATEINFO_TYPE_FORCE)
+ *converted_property = PM_UPDATEINFO_TYPE_FORCE;
+ else if (property == PACKAGE_UPDATEINFO_TYPE_OPTIONAL)
+ *converted_property = PM_UPDATEINFO_TYPE_OPTIONAL;
+ else if (property == PACKAGE_UPDATEINFO_TYPE_NONE)
+ *converted_property = PM_UPDATEINFO_TYPE_NONE;
+ else
+ return -1;
+
+ return 0;
+}
+
+API int package_manager_updateinfo_set_type(package_updateinfo_request_h package_updateinfo, package_update_info_type_e type)
+{
+ int retval;
+ pkgmgr_updateinfo_type converted_type;
+ struct package_updateinfo_request_s *request;
+
+ if (package_updateinfo == NULL || package_updateinfo->updateinfo_handle == NULL)
+ return package_manager_error(PACKAGE_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__, NULL);
+
+ request = (struct package_updateinfo_request_s *)package_updateinfo;
+ retval = package_manager_updateinfo_convert_property(type, &converted_type);
+ if (retval != 0)
+ return package_manager_error(PACKAGE_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__, NULL);
+
+ request->updateinfo_handle->type = converted_type;
+ return PACKAGE_MANAGER_ERROR_NONE;
+}
+
+API int package_manager_updateinfo_request_destroy(package_updateinfo_request_h package_updateinfo)
+{
+ struct package_updateinfo_request_s *request;
+
+ if (package_updateinfo == NULL)
+ return package_manager_error(PACKAGE_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__, NULL);
+
+ request = (struct package_updateinfo_request_s *)package_updateinfo;
+ if (request->pc)
+ pkgmgr_client_free(request->pc);
+
+ if (request->updateinfo_handle) {
+ if (request->updateinfo_handle->pkgid)
+ free(request->updateinfo_handle->pkgid);
+ if (request->updateinfo_handle->version)
+ free(request->updateinfo_handle->version);
+ free(request->updateinfo_handle);
+ }
+ free(request);
+
+ return PACKAGE_MANAGER_ERROR_NONE;
+}
+
+API int package_manager_updateinfo_request_create(package_updateinfo_request_h *package_updateinfo)
+{
+ struct package_updateinfo_request_s *request;
+ pkg_update_info_t *update_info;
+
+ if (package_updateinfo == NULL)
+ return package_manager_error(PACKAGE_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__, NULL);
+
+ request = calloc(1, sizeof(struct package_updateinfo_request_s));
+ if (request == NULL)
+ return package_manager_error(PACKAGE_MANAGER_ERROR_OUT_OF_MEMORY, __FUNCTION__, NULL);
+
+ request->pc = pkgmgr_client_new(PC_REQUEST);
+ if (request->pc == NULL)
+ return package_manager_error(PACKAGE_MANAGER_ERROR_OUT_OF_MEMORY, __FUNCTION__, NULL);
+
+ update_info = calloc(1, sizeof(pkg_update_info_t));
+ if (update_info == NULL) {
+ pkgmgr_client_free(request->pc);
+ return package_manager_error(PACKAGE_MANAGER_ERROR_OUT_OF_MEMORY, __FUNCTION__, NULL);
+ }
+ request->updateinfo_handle = update_info;
+
+ *package_updateinfo = request;
+ return PACKAGE_MANAGER_ERROR_NONE;
+}
+
+API int package_manager_updateinfo_request_register(package_updateinfo_request_h package_updateinfo)
+{
+ struct package_updateinfo_request_s *update_info;
+ int retval;
+
+ if (package_updateinfo == NULL)
+ return package_manager_error(PACKAGE_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__, NULL);
+ update_info = (struct package_updateinfo_request_s *)package_updateinfo;
+
+ retval = pkgmgr_client_register_pkg_update_info(update_info->pc, update_info->updateinfo_handle);
+ if (retval == PKGMGR_R_EINVAL)
+ return package_manager_error(PACKAGE_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__, NULL);
+
+ return PACKAGE_MANAGER_ERROR_NONE;
+}
+
+API int package_manager_updateinfo_request_unregister(package_updateinfo_request_h package_updateinfo, const char *pkgid)
+{
+ int retval;
+ struct package_updateinfo_request_s *update_info;
+
+ retval = check_privilege(PRIVILEGE_PACKAGE_MANAGER_ADMIN);
+ if (retval != PACKAGE_MANAGER_ERROR_NONE)
+ return retval;
+
+ if (package_updateinfo == NULL || pkgid == NULL)
+ return package_manager_error(PACKAGE_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__, NULL);
+
+ update_info = (struct package_updateinfo_request_s *)package_updateinfo;
+ retval = pkgmgr_client_unregister_pkg_update_info(update_info->pc, pkgid);
+ if (retval != PMINFO_R_OK)
+ return package_manager_error(PACKAGE_MANAGER_ERROR_IO_ERROR, __FUNCTION__, NULL);
+
+ return PACKAGE_MANAGER_ERROR_NONE;
+}
+
+API int package_manager_updateinfo_request_unregister_all(package_updateinfo_request_h package_updateinfo)
+{
+ int retval;
+ struct package_updateinfo_request_s *update_info;
+
+ retval = check_privilege(PRIVILEGE_PACKAGE_MANAGER_ADMIN);
+ if (retval != PACKAGE_MANAGER_ERROR_NONE)
+ return retval;
+
+ if (package_updateinfo == NULL)
+ return package_manager_error(PACKAGE_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__, NULL);
+
+ update_info = (struct package_updateinfo_request_s *)package_updateinfo;
+ retval = pkgmgr_client_unregister_all_pkg_update_info(update_info->pc);
+
+ if (retval != PMINFO_R_OK)
+ return package_manager_error(PACKAGE_MANAGER_ERROR_IO_ERROR, __FUNCTION__, NULL);
+
+ return PACKAGE_MANAGER_ERROR_NONE;
+}