From c00b15ff52f89ada9770453580e5828fd466e9c5 Mon Sep 17 00:00:00 2001 From: Denys Vlasenko Date: Fri, 25 Feb 2011 15:55:44 +0100 Subject: change stealing semantics from copy to move Signed-off-by: Denys Vlasenko --- src/cli/CLI.cpp | 17 ++--------------- src/gui-gtk/abrt-gtk.c | 18 +----------------- src/gui-wizard-gtk/Makefile.am | 4 +++- src/gui-wizard-gtk/wizard.c | 5 ++++- src/include/report/dump_dir.h | 3 ++- src/lib/abrt_dbus.c | 17 ++++++++++++++++- src/lib/abrt_dbus.h | 3 ++- src/lib/dump_dir.c | 5 +++-- 8 files changed, 33 insertions(+), 39 deletions(-) diff --git a/src/cli/CLI.cpp b/src/cli/CLI.cpp index b0d6bdf6..593ed6ee 100644 --- a/src/cli/CLI.cpp +++ b/src/cli/CLI.cpp @@ -395,6 +395,7 @@ int main(int argc, char** argv) struct dump_dir *dd_copy = steal_directory((char *)D_list->data, dump_dir_name); if (dd_copy) { + delete_dump_dir_possibly_using_abrtd(dump_dir_name); dump_dir_name = xstrdup(dd_copy->dd_dir); dd_close(dd_copy); } @@ -407,21 +408,7 @@ int main(int argc, char** argv) } case OPT_DELETE: { - /* Try to delete it ourselves */ - struct dump_dir *dd = dd_opendir(dump_dir_name, DD_OPEN_READONLY); - if (dd) - { - if (dd->locked) /* it is not readonly */ - { - dd_delete(dd); - break; - } - dd_close(dd); - } - - /* Ask abrtd to do it for us */ - exitcode = connect_to_abrtd_and_call_DeleteDebugDump(dump_dir_name); - + exitcode = delete_dump_dir_possibly_using_abrtd(dump_dir_name); break; } case OPT_INFO: diff --git a/src/gui-gtk/abrt-gtk.c b/src/gui-gtk/abrt-gtk.c index 140430b1..085ed9f0 100644 --- a/src/gui-gtk/abrt-gtk.c +++ b/src/gui-gtk/abrt-gtk.c @@ -108,24 +108,8 @@ static gint on_key_press_event_cb(GtkTreeView *treeview, GdkEventKey *key, gpoin const char *dump_dir_name = g_value_get_string(&d_dir); VERB1 log("Deleting '%s'", dump_dir_name); - - /* Try to delete it ourselves */ - struct dump_dir *dd = dd_opendir(dump_dir_name, DD_OPEN_READONLY); - if (dd) - { - if (dd->locked) /* it is not readonly */ - { - dd_delete(dd); - goto deleted_ok; - } - dd_close(dd); - } - - /* Ask abrtd to do it for us */ - VERB1 log("Deleting '%s' via abrtd dbus call", dump_dir_name); - if (connect_to_abrtd_and_call_DeleteDebugDump(dump_dir_name) == 0) + if (delete_dump_dir_possibly_using_abrtd(dump_dir_name) == 0) { - deleted_ok: gtk_list_store_remove(s_dumps_list_store, &iter); } else diff --git a/src/gui-wizard-gtk/Makefile.am b/src/gui-wizard-gtk/Makefile.am index 90b74586..4281c470 100644 --- a/src/gui-wizard-gtk/Makefile.am +++ b/src/gui-wizard-gtk/Makefile.am @@ -22,6 +22,7 @@ bug_reporting_wizard_CFLAGS = \ -DICON_DIR=\"${datadir}/abrt/icons/hicolor/48x48/status\" \ $(GLIB_CFLAGS) \ $(GTK_CFLAGS) \ + $(DBUS_CFLAGS) \ -D_GNU_SOURCE \ -Wall -Werror @@ -32,7 +33,8 @@ bug_reporting_wizard_LDADD = \ ../lib/libreport.la \ ../lib/libabrt_dbus.la \ $(GLIB_LIBS) \ - $(GTK_LIBS) + $(GTK_LIBS) \ + $(DBUS_LIBS) # we don't want to install it, just make it part of tarball diff --git a/src/gui-wizard-gtk/wizard.c b/src/gui-wizard-gtk/wizard.c index 017c6bd1..747bca43 100644 --- a/src/gui-wizard-gtk/wizard.c +++ b/src/gui-wizard-gtk/wizard.c @@ -1,5 +1,6 @@ #include #include "abrtlib.h" +#include "abrt_dbus.h" #include "wizard.h" #define DEFAULT_WIDTH 800 @@ -141,7 +142,7 @@ struct dump_dir *steal_if_needed(struct dump_dir *dd) GTK_MESSAGE_QUESTION, GTK_BUTTONS_OK_CANCEL, _("Need writable directory, but '%s' is not writable." - " Create a copy in '%s' and operate on the copy?"), + " Move it to '%s' and operate on the moved copy?"), g_dump_dir_name, HOME ); gint response = GTK_RESPONSE_CANCEL; @@ -157,6 +158,8 @@ struct dump_dir *steal_if_needed(struct dump_dir *dd) //FIXME: show error dialog? return NULL; + delete_dump_dir_possibly_using_abrtd(g_dump_dir_name); + g_dump_dir_name = xstrdup(dd->dd_dir); gtk_window_set_title(GTK_WINDOW(g_assistant), g_dump_dir_name); diff --git a/src/include/report/dump_dir.h b/src/include/report/dump_dir.h index 3bcc526d..66b61054 100644 --- a/src/include/report/dump_dir.h +++ b/src/include/report/dump_dir.h @@ -62,7 +62,8 @@ char* dd_load_text_ext(const struct dump_dir *dd, const char *name, unsigned fla char* dd_load_text(const struct dump_dir *dd, const char *name); void dd_save_text(struct dump_dir *dd, const char *name, const char *data); void dd_save_binary(struct dump_dir *dd, const char *name, const char *data, unsigned size); -void dd_delete(struct dump_dir *dd); +/* Returns 0 if directory is deleted or not found */ +int dd_delete(struct dump_dir *dd); void delete_dump_dir(const char *dd_dir); diff --git a/src/lib/abrt_dbus.c b/src/lib/abrt_dbus.c index 8843158b..5d8d861d 100644 --- a/src/lib/abrt_dbus.c +++ b/src/lib/abrt_dbus.c @@ -817,7 +817,7 @@ int32_t call_DeleteDebugDump(const char *dump_dir_name) return result; } -int connect_to_abrtd_and_call_DeleteDebugDump(const char *dump_dir_name) +static int connect_to_abrtd_and_call_DeleteDebugDump(const char *dump_dir_name) { DBusError err; dbus_error_init(&err); @@ -847,3 +847,18 @@ int connect_to_abrtd_and_call_DeleteDebugDump(const char *dump_dir_name) return ret; } + +int delete_dump_dir_possibly_using_abrtd(const char *dump_dir_name) +{ + /* Try to delete it ourselves */ + struct dump_dir *dd = dd_opendir(dump_dir_name, DD_OPEN_READONLY); + if (dd) + { + if (dd->locked) /* it is not readonly */ + return dd_delete(dd); + dd_close(dd); + } + + VERB1 log("Deleting '%s' via abrtd dbus call", dump_dir_name); + return connect_to_abrtd_and_call_DeleteDebugDump(dump_dir_name); +} diff --git a/src/lib/abrt_dbus.h b/src/lib/abrt_dbus.h index dd07cb0c..8f559980 100644 --- a/src/lib/abrt_dbus.h +++ b/src/lib/abrt_dbus.h @@ -88,7 +88,8 @@ int log_dbus_error(const char *msg, DBusError *err); int32_t call_DeleteDebugDump(const char *dump_dir_name); /* Connect to system bus, find abrtd, perform "DeleteDebugDump" call, close g_dbus_conn */ -int connect_to_abrtd_and_call_DeleteDebugDump(const char *dump_dir_name); +/* now static: int connect_to_abrtd_and_call_DeleteDebugDump(const char *dump_dir_name); */ +int delete_dump_dir_possibly_using_abrtd(const char *dump_dir_name); /* diff --git a/src/lib/dump_dir.c b/src/lib/dump_dir.c index 379e968e..3ba2f059 100644 --- a/src/lib/dump_dir.c +++ b/src/lib/dump_dir.c @@ -572,11 +572,12 @@ static int delete_file_dir(const char *dir, bool skip_lock_file) return r; } -void dd_delete(struct dump_dir *dd) +int dd_delete(struct dump_dir *dd) { - delete_file_dir(dd->dd_dir, /*skip_lock_file:*/ true); + int r = delete_file_dir(dd->dd_dir, /*skip_lock_file:*/ true); dd->locked = 0; /* delete_file_dir already removed .lock */ dd_close(dd); + return r; } static char *load_text_file(const char *path, unsigned flags) -- cgit