return manager_handle_id++;
}
+static void __clean_all_event_info(event_info *head)
+{
+ event_info *current = head;
+ event_info *prev;
+
+ if (current == NULL)
+ return;
+
+ while (current) {
+ prev = current;
+ current = current->next;
+ free(prev);
+ }
+}
+
API int package_manager_request_create(package_manager_request_h *request)
{
struct package_manager_request_s *package_manager_request;
pkgmgr_client_free(request->pc);
request->pc = NULL;
free(request->pkg_type);
+ __clean_all_event_info(request->head);
free(request);
return PACKAGE_MANAGER_ERROR_NONE;
return -1;
}
- _LOGD("tmp->req_id %d, event_type %d", tmp->req_id, event_type);
+ _LOGD("tmp->req_id %d, event_type %d", tmp->req_id, *event_type);
while (tmp) {
if (tmp->req_id == req_id) {
pkgmgr_client_free(manager->pc);
manager->pc = NULL;
+ __clean_all_event_info(manager->head);
free(manager);
return PACKAGE_MANAGER_ERROR_NONE;
package_manager_event_type_e event_type,
package_manager_event_state_e event_state)
{
- event_info *evt_info;
+ event_info *evt_info = *head;
- evt_info = (event_info *) calloc(1, sizeof(event_info));
- if (evt_info == NULL) {
- _LOGD("calloc failed");
- return -1;
+ if (!evt_info) {
+ evt_info = (event_info *)calloc(1, sizeof(event_info));
+ if (evt_info == NULL) {
+ _LOGD("calloc failed");
+ return -1;
+ }
}
evt_info->req_id = req_id;
evt_info->event_type = event_type;
package_manager_event_type_e *event_type,
package_manager_event_state_e *event_state)
{
- event_info *tmp;
-
- tmp = *head;
+ event_info *tmp = *head;
if (tmp == NULL) {
_LOGE("tmp is NULL");
*event_type = tmp->event_type;
*event_state = tmp->event_state;
+
return 0;
}
package_manager_event_type_e event_type,
package_manager_event_state_e event_state)
{
- package_manager_event_type_e evt_type;
- package_manager_event_state_e evt_state;
- event_info *tmp;
+ event_info *tmp = *head;
- if (__find_event_info(head, req_id, &evt_type, &evt_state) != 0)
- __add_event_info(head, req_id, event_type, event_state);
- else {
- tmp = *head;
-
- if (tmp == NULL) {
- _LOGE("tmp is NULL");
- return -1;
- }
-
- tmp->event_type = event_type;
- tmp->event_state = event_state;
- return 0;
+ if (tmp == NULL) {
+ _LOGE("tmp is NULL");
+ return -1;
}
- return -1;
+ tmp->event_type = event_type;
+ tmp->event_state = event_state;
+
+ return 0;
}
/* App Event Listening Policy:
package_manager_event_state_e event_state = -1;
uid_t uid = target_uid;
- _LOGD("global_event_handler is called");
+ _LOGD("req_id(%d), pkg_name(%s), type(%s), key(%s), val(%s)",
+ req_id, pkg_name, pkg_type, key, val);
package_manager_h manager = data;
atoi(val),
PACKAGE_MANAGER_ERROR_NONE,
manager->user_data);
+ } else {
+ _LOGE("unexpected progress event");
}
-
} else if (strcasecmp(key, "error") == 0) {
- if (strcasecmp(key, "0") != 0) {
- if (__find_event
- (&(manager->head), req_id, &event_type,
- &event_state) == 0) {
- __update_event(&(manager->head), req_id,
- event_type,
- PACKAGE_MANAGER_EVENT_STATE_FAILED);
- }
+ if (__find_event
+ (&(manager->head), req_id, &event_type,
+ &event_state) == 0) {
+ __update_event(&(manager->head), req_id,
+ event_type,
+ PACKAGE_MANAGER_EVENT_STATE_FAILED);
if (manager->event_cb && getuid() == uid)
- manager->event_cb(pkg_type,
- pkg_name, event_type,
- PACKAGE_MANAGER_EVENT_STATE_FAILED,
- 0,
- PACKAGE_MANAGER_ERROR_NONE,
- manager->user_data);
+ manager->event_cb(pkg_type,
+ pkg_name, event_type,
+ PACKAGE_MANAGER_EVENT_STATE_FAILED,
+ 0,
+ PACKAGE_MANAGER_ERROR_NONE,
+ manager->user_data);
+ } else {
+ _LOGE("unexpected error event");
}
} else if (strcasecmp(key, "end") == 0) {
if (__find_event
(&(manager->head), req_id, &event_type,
&event_state) == 0) {
if (event_state != PACKAGE_MANAGER_EVENT_STATE_FAILED) {
- if (manager->event_cb && getuid() == uid)
- manager->event_cb(pkg_type,
+ if (manager->event_cb && getuid() == uid) {
+ if (strcasecmp(val, "ok") == 0) {
+ manager->event_cb(pkg_type,
pkg_name, event_type,
PACKAGE_MANAGER_EVENT_STATE_COMPLETED,
100,
PACKAGE_MANAGER_ERROR_NONE,
manager->user_data);
- }
- } else {
- if (strcasecmp(key, "ok") != 0) {
- if (manager->event_cb && getuid() == uid)
- manager->event_cb(pkg_type,
+ } else {
+ manager->event_cb(pkg_type,
pkg_name, event_type,
PACKAGE_MANAGER_EVENT_STATE_FAILED,
0,
PACKAGE_MANAGER_ERROR_NONE,
manager->user_data);
+ }
+ }
}
+ } else {
+ _LOGE("unexpected end event");
}
}