summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDenys Vlasenko <dvlasenk@redhat.com>2011-02-25 15:55:44 +0100
committerDenys Vlasenko <dvlasenk@redhat.com>2011-02-25 15:55:44 +0100
commitc00b15ff52f89ada9770453580e5828fd466e9c5 (patch)
treee17de93d9efda6ae58616b2debf9dce819919793
parent2951be08071ebe14b69e2da92a67e7d0a844e89a (diff)
downloadabrt-c00b15ff52f89ada9770453580e5828fd466e9c5.tar.gz
abrt-c00b15ff52f89ada9770453580e5828fd466e9c5.tar.xz
abrt-c00b15ff52f89ada9770453580e5828fd466e9c5.zip
change stealing semantics from copy to move
Signed-off-by: Denys Vlasenko <dvlasenk@redhat.com>
-rw-r--r--src/cli/CLI.cpp17
-rw-r--r--src/gui-gtk/abrt-gtk.c18
-rw-r--r--src/gui-wizard-gtk/Makefile.am4
-rw-r--r--src/gui-wizard-gtk/wizard.c5
-rw-r--r--src/include/report/dump_dir.h3
-rw-r--r--src/lib/abrt_dbus.c17
-rw-r--r--src/lib/abrt_dbus.h3
-rw-r--r--src/lib/dump_dir.c5
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 <gtk/gtk.h>
#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)