static problem_data_t *load_problem_data(const char *problem_id) { char *name2 = NULL; /* First, check if there is a problem with the passed id */ GList *problems = get_problems_over_dbus(g_cli_authenticate); if (problems == ERR_PTR) return NULL; GList *item = g_list_find_custom(problems, problem_id, (GCompareFunc)strcmp); /* (git requires at least 5 char hash prefix, we do the same) */ if (item == NULL) { /* Try loading by dirname hash */ name2 = find_problem_by_hash(problem_id, problems); if (name2 == NULL) return NULL; problem_id = name2; } problem_data_t *problem_data = get_full_problem_data_over_dbus(problem_id); return (problem_data == ERR_PTR ? NULL : problem_data); }
char *hash2dirname(const char *hash) { /* Try loading by dirname hash */ GList *problems = get_problems_over_dbus(/*don't authorize*/false); if (problems == ERR_PTR) return NULL; char *found_name = find_problem_by_hash(hash, problems); g_list_free_full(problems, free); return found_name; }
vector_of_problem_data_t *fetch_crash_infos(void) { GList *problems = get_problems_over_dbus(/*don't authorize*/false); if (problems == ERR_PTR) return NULL; vector_of_problem_data_t *vpd = new_vector_of_problem_data(); for (GList *iter = problems; iter; iter = g_list_next(iter)) { problem_data_t *problem_data = get_full_problem_data_over_dbus((const char *)(iter->data)); if (problem_data == ERR_PTR) continue; g_ptr_array_add(vpd, problem_data); } return vpd; }
static unsigned int count_problem_dirs(unsigned long since) { unsigned count = 0; GList *problems = get_problems_over_dbus(g_cli_authenticate); if (problems == ERR_PTR) return count; for (GList *iter = problems; iter != NULL; iter = g_list_next(iter)) { const char *problem_id = (const char *)iter->data; if (test_exist_over_dbus(problem_id, FILENAME_REPORTED_TO)) { log_debug("Not counting problem %s: already reported", problem_id); continue; } char *time_str = load_text_over_dbus(problem_id, FILENAME_LAST_OCCURRENCE); if (time_str == ERR_PTR || time_str == NULL) { log_debug("Not counting problem %s: failed to get time element", problem_id); continue; } long val = atol(time_str); free(time_str); if (val < since) { log_debug("Not counting problem %s: older tham limit (%ld < %ld)", problem_id, val, since); continue; } count++; } return count; }