diff options
author | Denys Vlasenko <dvlasenk@redhat.com> | 2011-03-03 18:10:29 +0100 |
---|---|---|
committer | Denys Vlasenko <dvlasenk@redhat.com> | 2011-03-03 18:10:29 +0100 |
commit | 6d768d603aaeb5f912086c3068331fcc88aa5340 (patch) | |
tree | 6aba1d07f050af7f5045e0273730b054bbcd7404 /src | |
parent | 28a7bf1a5432f7e9af4661dc3032b411b7d8f1b0 (diff) | |
download | abrt-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.cpp | 10 | ||||
-rw-r--r-- | src/gui-gtk/abrt-gtk.c | 3 | ||||
-rw-r--r-- | src/gui-wizard-gtk/wizard.c | 15 | ||||
-rw-r--r-- | src/include/report/dump_dir.h | 9 | ||||
-rw-r--r-- | src/lib/dump_dir.c | 33 | ||||
-rw-r--r-- | src/lib/run_event.c | 4 | ||||
-rw-r--r-- | src/report-python/reportmodule.c | 3 |
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); |