summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/gui-wizard-gtk/main.c4
-rw-r--r--src/gui-wizard-gtk/wizard.c33
-rw-r--r--src/gui-wizard-gtk/wizard.h1
-rw-r--r--src/include/abrtlib.h2
-rw-r--r--src/lib/steal_directory.c6
5 files changed, 35 insertions, 11 deletions
diff --git a/src/gui-wizard-gtk/main.c b/src/gui-wizard-gtk/main.c
index b109eaa5..85f962cd 100644
--- a/src/gui-wizard-gtk/main.c
+++ b/src/gui-wizard-gtk/main.c
@@ -63,10 +63,12 @@ int main(int argc, char **argv)
if (!argv[0] || argv[1]) /* zero or >1 arguments */
show_usage_and_die(program_usage_string, program_options);
- g_dump_dir_name = argv[0];
+ g_dump_dir_name = xstrdup(argv[0]);
create_assistant();
+ g_custom_logger = &show_error_as_msgbox;
+
reload_crash_data_from_dump_dir();
update_gui_state_from_crash_data();
diff --git a/src/gui-wizard-gtk/wizard.c b/src/gui-wizard-gtk/wizard.c
index 747bca43..f0e83817 100644
--- a/src/gui-wizard-gtk/wizard.c
+++ b/src/gui-wizard-gtk/wizard.c
@@ -122,9 +122,8 @@ static void save_dialog_response(GtkDialog *dialog, gint response_id, gpointer u
struct dump_dir *steal_if_needed(struct dump_dir *dd)
{
-//FIXME: show error dialog?
if (!dd)
- xfunc_die();
+ xfunc_die(); /* error msg was already logged */
if (dd->locked)
return dd;
@@ -155,17 +154,39 @@ struct dump_dir *steal_if_needed(struct dump_dir *dd)
dd = steal_directory(HOME, g_dump_dir_name);
if (!dd)
-//FIXME: show error dialog?
- return NULL;
-
- delete_dump_dir_possibly_using_abrtd(g_dump_dir_name);
+ return NULL; /* Stealing failed. Error msg was already logged */
+ /* Delete old dir and switch to new one.
+ * Don't want to keep new dd open across deletion,
+ * therefore it's a bit more complicated.
+ */
+ char *old_name = g_dump_dir_name;
g_dump_dir_name = xstrdup(dd->dd_dir);
+ dd_close(dd);
+
gtk_window_set_title(GTK_WINDOW(g_assistant), g_dump_dir_name);
+ delete_dump_dir_possibly_using_abrtd(old_name); //TODO: if (deletion_failed) error_msg("BAD")?
+ free(old_name);
+
+ dd = dd_opendir(g_dump_dir_name, 0);
+ if (!dd)
+ xfunc_die(); /* error msg was already logged */
return dd;
}
+void show_error_as_msgbox(const char *msg)
+{
+ GtkWidget *dialog = gtk_message_dialog_new(GTK_WINDOW(g_assistant),
+ GTK_DIALOG_DESTROY_WITH_PARENT,
+ GTK_MESSAGE_WARNING,
+ GTK_BUTTONS_CLOSE,
+ "%s", msg
+ );
+ gtk_dialog_run(GTK_DIALOG(dialog));
+ gtk_widget_destroy(dialog);
+}
+
static void load_text_to_text_view(GtkTextView *tv, const char *name)
{
const char *str = g_cd ? get_crash_item_content_or_NULL(g_cd, name) : NULL;
diff --git a/src/gui-wizard-gtk/wizard.h b/src/gui-wizard-gtk/wizard.h
index 4289caa3..f27fb777 100644
--- a/src/gui-wizard-gtk/wizard.h
+++ b/src/gui-wizard-gtk/wizard.h
@@ -25,6 +25,7 @@ extern GtkTreeView *g_tv_details;
extern GtkListStore *g_ls_details;
void create_assistant(void);
void update_gui_state_from_crash_data(void);
+void show_error_as_msgbox(const char *msg);
extern char *g_glade_file;
diff --git a/src/include/abrtlib.h b/src/include/abrtlib.h
index c5959b34..ecae0de7 100644
--- a/src/include/abrtlib.h
+++ b/src/include/abrtlib.h
@@ -250,6 +250,8 @@ void parse_release_for_rhts(const char *pRelease, char **product, char **version
#define load_conf_file abrt_load_conf_file
bool load_conf_file(const char *pPath, map_string_h *settings, bool skipKeysWithoutValue);
+/* Tries to create a copy of dump_dir_name in base_dir, with same or similar basename.
+ * Returns NULL if copying failed. In this case, logs a message before returning. */
#define steal_directory abrt_steal_directory
struct dump_dir *steal_directory(const char *base_dir, const char *dump_dir_name);
diff --git a/src/lib/steal_directory.c b/src/lib/steal_directory.c
index 409bb9d9..67c76c25 100644
--- a/src/lib/steal_directory.c
+++ b/src/lib/steal_directory.c
@@ -20,7 +20,7 @@ struct dump_dir *steal_directory(const char *base_dir, const char *dump_dir_name
if (--count == 0)
{
error_msg("Can't create new dump dir in '%s'", base_dir);
- goto ret;
+ return NULL;
}
struct timeval tv;
gettimeofday(&tv, NULL);
@@ -33,10 +33,8 @@ struct dump_dir *steal_directory(const char *base_dir, const char *dump_dir_name
/* error. copy_file_recursive already emitted error message */
/* Don't leave half-copied dir lying around */
dd_delete(dd_dst);
-//FIXME: return NULL instead? GUI doesn't want to die in this situation!
- xfunc_die();
+ return NULL;
}
- ret:
return dd_dst;
}