problem_data_t *get_problem_data_dbus(const char *problem_dir_path) { INITIALIZE_LIBABRT(); static const char *elements[] = { FILENAME_TIME, FILENAME_REASON, FILENAME_NOT_REPORTABLE, FILENAME_COMPONENT, FILENAME_EXECUTABLE, FILENAME_REPORTED_TO, NULL, }; problem_data_t *pd = problem_data_new(); if (fill_problem_data_over_dbus(problem_dir_path, elements, pd) != 0) { error_msg(_("Can't get problem data from abrt-dbus")); problem_data_free(pd); return NULL; } return pd; }
static problem_info_t *problem_info_new(const char *dir) { problem_info_t *pi = g_new0(problem_info_t, 1); pi->refcount = 1; pi->time = -1; pi->pid = -1; pi->count = -1; pi->problem_data = problem_data_new(); problem_info_set_dir(pi, dir); return pi; }
problem_data_t *create_problem_data_for_reporting(const char *dump_dir_name) { struct dump_dir *dd = dd_opendir(dump_dir_name, /*flags:*/ 0); if (!dd) return NULL; /* dd_opendir already emitted error msg */ char **exclude_items = build_exclude_vector(getenv("EXCLUDE_FROM_REPORT")); problem_data_t *problem_data = problem_data_new(); problem_data_load_from_dump_dir(problem_data, dd, exclude_items); dd_close(dd); free(exclude_items); return problem_data; }
problem_data_t *get_problem_data_dbus(const char *problem_dir_path) { INITIALIZE_LIBABRT(); GDBusProxy *proxy = get_dbus_proxy(); if (!proxy) return NULL; GVariantBuilder *builder = g_variant_builder_new(G_VARIANT_TYPE("as")); g_variant_builder_add(builder, "s", FILENAME_TIME ); g_variant_builder_add(builder, "s", FILENAME_REASON ); g_variant_builder_add(builder, "s", FILENAME_NOT_REPORTABLE); g_variant_builder_add(builder, "s", FILENAME_COMPONENT ); g_variant_builder_add(builder, "s", FILENAME_EXECUTABLE ); g_variant_builder_add(builder, "s", FILENAME_REPORTED_TO ); GVariant *params = g_variant_new("(sas)", problem_dir_path, builder); g_variant_builder_unref(builder); GError *error = NULL; GVariant *result = g_dbus_proxy_call_sync(proxy, "GetInfo", params, G_DBUS_CALL_FLAGS_NONE, -1, NULL, &error); if (error) { error_msg(_("Can't get problem data from abrt-dbus: %s"), error->message); g_error_free(error); return NULL; } problem_data_t *pd = problem_data_new(); char *key, *val; GVariantIter *iter; g_variant_get(result, "(a{ss})", &iter); while (g_variant_iter_loop(iter, "{ss}", &key, &val)) { problem_data_add_text_noteditable(pd, key, val); } g_variant_unref(result); return pd; }
problem_data_t *get_full_problem_data_over_dbus(const char *problem_dir_path) { INITIALIZE_LIBABRT(); GDBusProxy *proxy = get_dbus_proxy(); if (!proxy) return ERR_PTR; GError *error = NULL; GVariant *result = g_dbus_proxy_call_sync(proxy, "GetProblemData", g_variant_new("(s)", problem_dir_path), G_DBUS_CALL_FLAGS_NONE, -1, NULL, &error); if (error) { error_msg(_("Can't get problem data from abrt-dbus: %s"), error->message); g_error_free(error); return ERR_PTR; } GVariantIter *iter = NULL; g_variant_get(result, "(a{s(its)})", &iter); gchar *name = NULL; gint flags; gulong size; gchar *value = NULL; problem_data_t *pd = problem_data_new(); while (g_variant_iter_loop(iter, "{&s(it&s)}", &name, &flags, &size, &value)) problem_data_add_ext(pd, name, value, flags, size); problem_data_add(pd, CD_DUMPDIR, problem_dir_path, CD_FLAG_TXT + CD_FLAG_ISNOTEDITABLE + CD_FLAG_LIST); g_variant_unref(result); return pd; }
problem_data_t *create_problem_data_from_dump_dir(struct dump_dir *dd) { problem_data_t *problem_data = problem_data_new(); problem_data_load_from_dump_dir(problem_data, dd, NULL); return problem_data; }