diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/gui-wizard-gtk/main.c | 4 | ||||
-rw-r--r-- | src/gui-wizard-gtk/wizard.c | 33 | ||||
-rw-r--r-- | src/gui-wizard-gtk/wizard.h | 1 | ||||
-rw-r--r-- | src/include/abrtlib.h | 2 | ||||
-rw-r--r-- | src/lib/steal_directory.c | 6 |
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; } |