From 3829489cd5f74f4b9f7e1567fee941123aa77987 Mon Sep 17 00:00:00 2001 From: Jakub Filak Date: Wed, 27 Aug 2014 08:45:24 +0200 Subject: [PATCH 21/24] a-a-s-p-data: reduce amount of error messages Read each GPG key only once. The GPG key dirs may contain many symlinks and if their target cannot be read, then we print an error message for every symlink pointing to the unreadable file. What's worse, the error messages show a path to the target, so users see several identical messages in the system logs. Related to rhbz#1133674 Signed-off-by: Jakub Filak --- src/daemon/abrt-action-save-package-data.c | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/src/daemon/abrt-action-save-package-data.c b/src/daemon/abrt-action-save-package-data.c index 6dbcfc2..cc86327 100644 --- a/src/daemon/abrt-action-save-package-data.c +++ b/src/daemon/abrt-action-save-package-data.c @@ -91,16 +91,22 @@ static void load_gpg_keys(void) if (strcmp(gpg_keys_dir, "") != 0) { log_debug("Reading gpg keys from '%s'", gpg_keys_dir); + GHashTable *done_set = g_hash_table_new(g_str_hash, g_str_equal); GList *gpg_files = get_file_list(gpg_keys_dir, NULL /* we don't care about the file ext */); - GList *tmp_gpp_files = gpg_files; - while (tmp_gpp_files) + for (GList *iter = gpg_files; iter; iter = g_list_next(iter)) { - log_debug("Loading gpg key '%s'", fo_get_fullpath((file_obj_t *)tmp_gpp_files->data)); - settings_setOpenGPGPublicKeys = g_list_append(settings_setOpenGPGPublicKeys, xstrdup(fo_get_fullpath((file_obj_t *)(tmp_gpp_files->data)) )); - tmp_gpp_files = g_list_next(tmp_gpp_files); + const char *key_path = fo_get_fullpath((file_obj_t *)iter->data); + + if (g_hash_table_contains(done_set, key_path)) + continue; + + g_hash_table_insert(done_set, (gpointer)key_path, NULL); + log_debug("Loading gpg key '%s'", key_path); + settings_setOpenGPGPublicKeys = g_list_append(settings_setOpenGPGPublicKeys, xstrdup(key_path)); } g_list_free_full(gpg_files, (GDestroyNotify)free_file_obj); + g_hash_table_destroy(done_set); } } -- 2.1.0