dcavalca / rpms / systemd

Forked from rpms/systemd 2 years ago
Clone
Michal Sekletar 9bf975
From 3008e643b5b511a171e03a6f55444ea4ee0e6ee6 Mon Sep 17 00:00:00 2001
Michal Sekletar 9bf975
From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= <zbyszek@in.waw.pl>
Michal Sekletar 9bf975
Date: Fri, 11 Apr 2014 08:44:55 -0400
Zbigniew Jędrzejewski-Szmek a59965
Subject: [PATCH] journal: cleanup up error handling in update_catalog()
Michal Sekletar 9bf975
Michal Sekletar 9bf975
- Negative/positive errno mixup caused duplicates not to be detected properly.
Michal Sekletar 9bf975
  Now we get a warning about some duplicate entries in our own catalogs...
Michal Sekletar 9bf975
- Errors in update_catalog would be ignored, but they should not be.
Michal Sekletar 9bf975
Michal Sekletar 9bf975
(cherry picked from commit e3b9d9c8027a7c4c55cf1614e0fe9423fad69e8f)
Michal Sekletar 9bf975
(cherry picked from commit 68018bce87437df9986b4417e5b84b1f1c2a5287)
Michal Sekletar 9bf975
---
Michal Sekletar 9bf975
 src/journal/catalog.c      | 25 +++++++++++++------------
Michal Sekletar 9bf975
 src/journal/test-catalog.c |  3 ++-
Michal Sekletar 9bf975
 2 files changed, 15 insertions(+), 13 deletions(-)
Michal Sekletar 9bf975
Michal Sekletar 9bf975
diff --git a/src/journal/catalog.c b/src/journal/catalog.c
Zbigniew Jędrzejewski-Szmek 1cc3df
index 90ca008064..e5342bee51 100644
Michal Sekletar 9bf975
--- a/src/journal/catalog.c
Michal Sekletar 9bf975
+++ b/src/journal/catalog.c
Michal Sekletar 9bf975
@@ -109,7 +109,7 @@ static int finish_item(
Michal Sekletar 9bf975
                 const char *payload) {
Michal Sekletar 9bf975
 
Michal Sekletar 9bf975
         ssize_t offset;
Michal Sekletar 9bf975
-        CatalogItem *i;
Michal Sekletar 9bf975
+        _cleanup_free_ CatalogItem *i = NULL;
Michal Sekletar 9bf975
         int r;
Michal Sekletar 9bf975
 
Michal Sekletar 9bf975
         assert(h);
Michal Sekletar 9bf975
@@ -129,13 +129,14 @@ static int finish_item(
Michal Sekletar 9bf975
         i->offset = htole64((uint64_t) offset);
Michal Sekletar 9bf975
 
Michal Sekletar 9bf975
         r = hashmap_put(h, i, i);
Michal Sekletar 9bf975
-        if (r == EEXIST) {
Michal Sekletar 9bf975
+        if (r == -EEXIST) {
Michal Sekletar 9bf975
                 log_warning("Duplicate entry for " SD_ID128_FORMAT_STR ".%s, ignoring.",
Michal Sekletar 9bf975
                             SD_ID128_FORMAT_VAL(id), language ? language : "C");
Michal Sekletar 9bf975
-                free(i);
Michal Sekletar 9bf975
                 return 0;
Michal Sekletar 9bf975
-        }
Michal Sekletar 9bf975
+        } else if (r < 0)
Michal Sekletar 9bf975
+                return r;
Michal Sekletar 9bf975
 
Michal Sekletar 9bf975
+        i = NULL;
Michal Sekletar 9bf975
         return 0;
Michal Sekletar 9bf975
 }
Michal Sekletar 9bf975
 
Michal Sekletar 9bf975
@@ -348,8 +349,8 @@ error:
Michal Sekletar 9bf975
 int catalog_update(const char* database, const char* root, const char* const* dirs) {
Michal Sekletar 9bf975
         _cleanup_strv_free_ char **files = NULL;
Michal Sekletar 9bf975
         char **f;
Michal Sekletar 9bf975
-        Hashmap *h;
Michal Sekletar 9bf975
         struct strbuf *sb = NULL;
Michal Sekletar 9bf975
+        _cleanup_hashmap_free_free_ Hashmap *h = NULL;
Michal Sekletar 9bf975
         _cleanup_free_ CatalogItem *items = NULL;
Michal Sekletar 9bf975
         CatalogItem *i;
Michal Sekletar 9bf975
         Iterator j;
Michal Sekletar 9bf975
@@ -371,13 +372,17 @@ int catalog_update(const char* database, const char* root, const char* const* di
Michal Sekletar 9bf975
         }
Michal Sekletar 9bf975
 
Michal Sekletar 9bf975
         STRV_FOREACH(f, files) {
Michal Sekletar 9bf975
-                log_debug("reading file '%s'", *f);
Michal Sekletar 9bf975
-                catalog_import_file(h, sb, *f);
Michal Sekletar 9bf975
+                log_debug("Reading file '%s'", *f);
Michal Sekletar 9bf975
+                r = catalog_import_file(h, sb, *f);
Michal Sekletar 9bf975
+                if (r < 0) {
Michal Sekletar 9bf975
+                        log_error("Failed to import file '%s': %s.",
Michal Sekletar 9bf975
+                                  *f, strerror(-r));
Michal Sekletar 9bf975
+                        goto finish;
Michal Sekletar 9bf975
+                }
Michal Sekletar 9bf975
         }
Michal Sekletar 9bf975
 
Michal Sekletar 9bf975
         if (hashmap_size(h) <= 0) {
Michal Sekletar 9bf975
                 log_info("No items in catalog.");
Michal Sekletar 9bf975
-                r = 0;
Michal Sekletar 9bf975
                 goto finish;
Michal Sekletar 9bf975
         } else
Michal Sekletar 9bf975
                 log_debug("Found %u items in catalog.", hashmap_size(h));
Michal Sekletar 9bf975
@@ -408,11 +413,7 @@ int catalog_update(const char* database, const char* root, const char* const* di
Michal Sekletar 9bf975
                 log_debug("%s: wrote %u items, with %zu bytes of strings, %ld total size.",
Michal Sekletar 9bf975
                           database, n, sb->len, r);
Michal Sekletar 9bf975
 
Michal Sekletar 9bf975
-        r = 0;
Michal Sekletar 9bf975
-
Michal Sekletar 9bf975
 finish:
Michal Sekletar 9bf975
-        if (h)
Michal Sekletar 9bf975
-                hashmap_free_free(h);
Michal Sekletar 9bf975
         if (sb)
Michal Sekletar 9bf975
                 strbuf_cleanup(sb);
Michal Sekletar 9bf975
 
Michal Sekletar 9bf975
diff --git a/src/journal/test-catalog.c b/src/journal/test-catalog.c
Zbigniew Jędrzejewski-Szmek 1cc3df
index 5db5bed8de..f021dbfd54 100644
Michal Sekletar 9bf975
--- a/src/journal/test-catalog.c
Michal Sekletar 9bf975
+++ b/src/journal/test-catalog.c
Michal Sekletar 9bf975
@@ -126,7 +126,8 @@ int main(int argc, char *argv[]) {
Michal Sekletar 9bf975
 
Michal Sekletar 9bf975
         setlocale(LC_ALL, "de_DE.UTF-8");
Michal Sekletar 9bf975
 
Michal Sekletar 9bf975
-        log_set_max_level(LOG_DEBUG);
Michal Sekletar 9bf975
+        log_parse_environment();
Michal Sekletar 9bf975
+        log_open();
Michal Sekletar 9bf975
 
Michal Sekletar 9bf975
         test_catalog_importing();
Michal Sekletar 9bf975