summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorDenys Vlasenko <dvlasenk@redhat.com>2011-03-03 18:10:29 +0100
committerDenys Vlasenko <dvlasenk@redhat.com>2011-03-03 18:10:29 +0100
commit6d768d603aaeb5f912086c3068331fcc88aa5340 (patch)
tree6aba1d07f050af7f5045e0273730b054bbcd7404 /src
parent28a7bf1a5432f7e9af4661dc3032b411b7d8f1b0 (diff)
downloadabrt-6d768d603aaeb5f912086c3068331fcc88aa5340.tar.gz
abrt-6d768d603aaeb5f912086c3068331fcc88aa5340.tar.xz
abrt-6d768d603aaeb5f912086c3068331fcc88aa5340.zip
gui-wizard-gtk: fix stealing again
Signed-off-by: Denys Vlasenko <dvlasenk@redhat.com>
Diffstat (limited to 'src')
-rw-r--r--src/daemon/MiddleWare.cpp10
-rw-r--r--src/gui-gtk/abrt-gtk.c3
-rw-r--r--src/gui-wizard-gtk/wizard.c15
-rw-r--r--src/include/report/dump_dir.h9
-rw-r--r--src/lib/dump_dir.c33
-rw-r--r--src/lib/run_event.c4
-rw-r--r--src/report-python/reportmodule.c3
7 files changed, 36 insertions, 41 deletions
diff --git a/src/daemon/MiddleWare.cpp b/src/daemon/MiddleWare.cpp
index 809716aa..215e7b49 100644
--- a/src/daemon/MiddleWare.cpp
+++ b/src/daemon/MiddleWare.cpp
@@ -137,7 +137,7 @@ static mw_result_t CreateCrashReport(const char *dump_dir_name,
char *uid = dd_load_text(dd, FILENAME_UID);
if (strcmp(uid, caller_uid_str) != 0)
{
- char *inform_all = dd_load_text_ext(dd, FILENAME_INFORMALL, DD_FAIL_QUIETLY);
+ char *inform_all = dd_load_text_ext(dd, FILENAME_INFORMALL, DD_FAIL_QUIETLY_ENOENT);
bool for_all = string_to_bool(inform_all);
free(inform_all);
if (!for_all)
@@ -410,7 +410,7 @@ static int is_crash_a_dup(const char *dump_dir_name, void *param)
if (!dd)
return 0; /* wtf? (error, but will be handled elsewhere later) */
state->uuid = dd_load_text_ext(dd, FILENAME_UUID,
- DD_FAIL_QUIETLY + DD_LOAD_TEXT_RETURN_NULL_ON_FAILURE
+ DD_FAIL_QUIETLY_ENOENT + DD_LOAD_TEXT_RETURN_NULL_ON_FAILURE
);
dd_close(dd);
if (!state->uuid)
@@ -538,7 +538,7 @@ mw_result_t LoadDebugDump(const char *dump_dir_name, crash_data_t **crash_data)
res = MW_ERROR;
goto ret;
}
- char *count_str = dd_load_text_ext(dd, FILENAME_COUNT, DD_FAIL_QUIETLY);
+ char *count_str = dd_load_text_ext(dd, FILENAME_COUNT, DD_FAIL_QUIETLY_ENOENT);
unsigned long count = strtoul(count_str, NULL, 10);
count++;
char new_count_str[sizeof(long)*3 + 2];
@@ -624,7 +624,7 @@ vector_of_crash_data_t *GetCrashInfos(long caller_uid)
uid = dd_load_text(dd, FILENAME_UID);
if (strcmp(uid, caller_uid_str) != 0)
{
- char *inform_all = dd_load_text_ext(dd, FILENAME_INFORMALL, DD_FAIL_QUIETLY);
+ char *inform_all = dd_load_text_ext(dd, FILENAME_INFORMALL, DD_FAIL_QUIETLY_ENOENT);
bool for_all = string_to_bool(inform_all);
free(inform_all);
if (!for_all)
@@ -762,7 +762,7 @@ int DeleteDebugDump(const char *dump_dir_name, long caller_uid)
char *uid = dd_load_text(dd, FILENAME_UID);
if (strcmp(uid, caller_uid_str) != 0)
{
- char *inform_all = dd_load_text_ext(dd, FILENAME_INFORMALL, DD_FAIL_QUIETLY);
+ char *inform_all = dd_load_text_ext(dd, FILENAME_INFORMALL, DD_FAIL_QUIETLY_ENOENT);
if (!string_to_bool(inform_all))
{
dd_close(dd);
diff --git a/src/gui-gtk/abrt-gtk.c b/src/gui-gtk/abrt-gtk.c
index fc945d76..751d1c7a 100644
--- a/src/gui-gtk/abrt-gtk.c
+++ b/src/gui-gtk/abrt-gtk.c
@@ -32,7 +32,8 @@ void add_directory_to_dirlist(const char *dirname)
char *msg = dd_load_text_ext(dd, FILENAME_MESSAGE, 0
| DD_LOAD_TEXT_RETURN_NULL_ON_FAILURE
- | DD_FAIL_QUIETLY
+ | DD_FAIL_QUIETLY_ENOENT
+ | DD_FAIL_QUIETLY_EACCES
);
const char *reported = (msg ? GTK_STOCK_YES : GTK_STOCK_NO);
free(msg);
diff --git a/src/gui-wizard-gtk/wizard.c b/src/gui-wizard-gtk/wizard.c
index a4229571..8048800a 100644
--- a/src/gui-wizard-gtk/wizard.c
+++ b/src/gui-wizard-gtk/wizard.c
@@ -136,6 +136,7 @@ struct dump_dir *steal_if_needed(struct dump_dir *dd)
if (HOME && HOME[0])
HOME = concat_path_file(HOME, ".abrt/spool");
else
+//TODO: try to find homedir in password db?
HOME = xstrdup("/tmp");
GtkWidget *dialog = gtk_message_dialog_new(GTK_WINDOW(g_assistant),
@@ -727,17 +728,9 @@ static void on_page_prepare(GtkAssistant *assistant, GtkWidget *page, gpointer u
check_backtrace_and_allow_send();
}
- if (pages[PAGENO_BACKTRACE_APPROVAL + 1].page_widget == page)
- {
- /* User just pressed [Fwd] on backtrace page. Save backtrace text if changed */
- save_text_from_text_view(g_tv_backtrace, FILENAME_BACKTRACE);
- }
-
- if (pages[PAGENO_COMMENT + 1].page_widget == page)
- {
- /* User just pressed [Fwd] on comment page. Same as above */
- save_text_from_text_view(g_tv_comment, FILENAME_COMMENT);
- }
+ /* Save text fields if changed */
+ save_text_from_text_view(g_tv_backtrace, FILENAME_BACKTRACE);
+ save_text_from_text_view(g_tv_comment, FILENAME_COMMENT);
if (pages[PAGENO_SUMMARY].page_widget == page
|| pages[PAGENO_REPORT].page_widget == page
diff --git a/src/include/report/dump_dir.h b/src/include/report/dump_dir.h
index 1376d7f3..86bfcf0e 100644
--- a/src/include/report/dump_dir.h
+++ b/src/include/report/dump_dir.h
@@ -30,8 +30,9 @@ extern "C" {
#endif
enum {
- DD_FAIL_QUIETLY = (1 << 0),
- DD_OPEN_READONLY = (1 << 1),
+ DD_FAIL_QUIETLY_ENOENT = (1 << 0),
+ DD_FAIL_QUIETLY_EACCES = (1 << 1),
+ DD_OPEN_READONLY = (1 << 2),
};
struct dump_dir {
@@ -55,8 +56,8 @@ DIR *dd_init_next_file(struct dump_dir *dd);
int dd_get_next_file(struct dump_dir *dd, char **short_name, char **full_name);
enum {
- /* DD_FAIL_QUIETLY bit is valid for dd_load_text_ext too, */
- DD_LOAD_TEXT_RETURN_NULL_ON_FAILURE = (1 << 2),
+ /* DD_FAIL_QUIETLY_ENOENT bit is valid for dd_load_text_ext too, */
+ DD_LOAD_TEXT_RETURN_NULL_ON_FAILURE = (DD_OPEN_READONLY << 1),
};
char* dd_load_text_ext(const struct dump_dir *dd, const char *name, unsigned flags);
char* dd_load_text(const struct dump_dir *dd, const char *name);
diff --git a/src/lib/dump_dir.c b/src/lib/dump_dir.c
index a84e2814..d0b1d478 100644
--- a/src/lib/dump_dir.c
+++ b/src/lib/dump_dir.c
@@ -111,7 +111,7 @@ static bool exist_file_dir(const char *path)
}
/* Return values:
- * -1: error
+ * -1: error (in this case, errno is 0 if error message is already logged)
* 0: failed to lock (someone else has it locked)
* 1: success
*/
@@ -121,8 +121,11 @@ static int get_and_set_lock(const char* lock_file, const char* pid)
{
if (errno != EEXIST)
{
- if (errno != ENOENT && errno != ENOTDIR)
+ if (errno != ENOENT && errno != ENOTDIR && errno != EACCES)
+ {
perror_msg("Can't create lock file '%s'", lock_file);
+ errno = 0;
+ }
return -1;
}
@@ -137,6 +140,7 @@ static int get_and_set_lock(const char* lock_file, const char* pid)
continue;
}
perror_msg("Can't read lock file '%s'", lock_file);
+ errno = 0;
return -1;
}
pid_buf[r] = '\0';
@@ -161,6 +165,7 @@ static int get_and_set_lock(const char* lock_file, const char* pid)
if (unlink(lock_file) != 0 && errno != ENOENT)
{
perror_msg("Can't remove stale lock file '%s'", lock_file);
+ errno = 0;
return -1;
}
}
@@ -169,7 +174,7 @@ static int get_and_set_lock(const char* lock_file, const char* pid)
return 1;
}
-static int dd_lock(struct dump_dir *dd, unsigned sleep_usec)
+static int dd_lock(struct dump_dir *dd, unsigned sleep_usec, int flags)
{
if (dd->locked)
error_msg_and_die("Locking bug on '%s'", dd->dd_dirname);
@@ -283,7 +288,7 @@ struct dump_dir *dd_opendir(const char *dir, int flags)
dir = dd->dd_dirname = rm_trailing_slashes(dir);
errno = 0;
- if (dd_lock(dd, WAIT_FOR_OTHER_PROCESS_USLEEP) < 0)
+ if (dd_lock(dd, WAIT_FOR_OTHER_PROCESS_USLEEP, flags) < 0)
{
if ((flags & DD_OPEN_READONLY) && errno == EACCES)
{
@@ -306,22 +311,17 @@ struct dump_dir *dd_opendir(const char *dir, int flags)
* directory when run without arguments, because its option -d DIR
* defaults to "."!
*/
- /*if (!(flags & DD_FAIL_QUIETLY))... - no, DD_FAIL_QUIETLY only means
- * "it's ok if it doesn exist", not "ok if contents is bogus"!
- */
error_msg("'%s' is not a crash dump directory", dir);
- dd_close(dd);
- return NULL;
}
-
- if (errno == ENOENT || errno == ENOTDIR)
+ else if (errno == ENOENT || errno == ENOTDIR)
{
- if (!(flags & DD_FAIL_QUIETLY))
+ if (!(flags & DD_FAIL_QUIETLY_ENOENT))
error_msg("'%s' does not exist", dir);
}
else
{
- perror_msg("Can't access '%s'", dir);
+ if (!(flags & DD_FAIL_QUIETLY_EACCES))
+ perror_msg("Can't access '%s'", dir);
}
dd_close(dd);
return NULL;
@@ -335,8 +335,7 @@ struct dump_dir *dd_opendir(const char *dir, int flags)
struct stat stat_buf;
if (stat(dir, &stat_buf) != 0 || !S_ISDIR(stat_buf.st_mode))
{
- if (!(flags & DD_FAIL_QUIETLY))
- error_msg("'%s' does not exist", dir);
+ error_msg("Can't stat '%s', or it is not a directory", dir);
dd_close(dd);
return NULL;
}
@@ -421,7 +420,7 @@ struct dump_dir *dd_create(const char *dir, uid_t uid)
return NULL;
}
- if (dd_lock(dd, CREATE_LOCK_USLEEP) < 0)
+ if (dd_lock(dd, CREATE_LOCK_USLEEP, /*flags:*/ 0) < 0)
{
dd_close(dd);
return NULL;
@@ -585,7 +584,7 @@ static char *load_text_file(const char *path, unsigned flags)
FILE *fp = fopen(path, "r");
if (!fp)
{
- if (!(flags & DD_FAIL_QUIETLY))
+ if (!(flags & DD_FAIL_QUIETLY_ENOENT))
perror_msg("Can't open file '%s'", path);
return (flags & DD_LOAD_TEXT_RETURN_NULL_ON_FAILURE ? NULL : xstrdup(""));
}
diff --git a/src/lib/run_event.c b/src/lib/run_event.c
index e96e762f..59e2c643 100644
--- a/src/lib/run_event.c
+++ b/src/lib/run_event.c
@@ -168,7 +168,7 @@ static GList *load_event_config(GList *list,
goto stop; /* error (note: dd_opendir logged error msg) */
}
}
- real_val = malloced_val = dd_load_text_ext(dd, p, DD_FAIL_QUIETLY);
+ real_val = malloced_val = dd_load_text_ext(dd, p, DD_FAIL_QUIETLY_ENOENT);
}
/* Does VAL match? */
@@ -476,7 +476,7 @@ static int list_possible_events_helper(struct strbuf *result,
goto stop; /* error (note: dd_opendir logged error msg) */
}
}
- char *real_val = dd_load_text_ext(dd, p, DD_FAIL_QUIETLY);
+ char *real_val = dd_load_text_ext(dd, p, DD_FAIL_QUIETLY_ENOENT);
/* Does VAL match? */
if (strcmp(real_val, line_val) != 0)
{
diff --git a/src/report-python/reportmodule.c b/src/report-python/reportmodule.c
index fd58a3bd..41f0ba29 100644
--- a/src/report-python/reportmodule.c
+++ b/src/report-python/reportmodule.c
@@ -75,7 +75,8 @@ init_pyreport(void)
Py_INCREF(&p_dump_dir_type);
PyModule_AddObject(m, "dump_dir", (PyObject *)&p_dump_dir_type);
- PyModule_AddObject(m, "DD_FAIL_QUIETLY" , Py_BuildValue("i", DD_FAIL_QUIETLY ));
+ PyModule_AddObject(m, "DD_FAIL_QUIETLY_ENOENT" , Py_BuildValue("i", DD_FAIL_QUIETLY_ENOENT ));
+ PyModule_AddObject(m, "DD_FAIL_QUIETLY_EACCES" , Py_BuildValue("i", DD_FAIL_QUIETLY_EACCES ));
PyModule_AddObject(m, "DD_LOAD_TEXT_RETURN_NULL_ON_FAILURE", Py_BuildValue("i", DD_LOAD_TEXT_RETURN_NULL_ON_FAILURE));
Py_INCREF(&p_run_event_state_type);