Blob Blame History Raw
From bafeb54696d57d063052ea19286aa72e1a3cc0be Mon Sep 17 00:00:00 2001
From: Lennart Poettering <lennart@poettering.net>
Date: Wed, 19 Feb 2014 17:51:08 +0100
Subject: [PATCH] udev: make sure we always return a valid error code in
 trie_store()

(cherry picked from commit d4f1ef4437e59b2cb69a201bb086ab23070ea72d)

Conflicts:
	src/udev/udevadm-hwdb.c
---
 src/udev/udevadm-hwdb.c | 11 +++++------
 1 file changed, 5 insertions(+), 6 deletions(-)

diff --git a/src/udev/udevadm-hwdb.c b/src/udev/udevadm-hwdb.c
index fe56758..141db57 100644
--- a/src/udev/udevadm-hwdb.c
+++ b/src/udev/udevadm-hwdb.c
@@ -341,7 +341,7 @@ static int trie_store(struct trie *trie, const char *filename) {
         struct trie_f t = {
                 .trie = trie,
         };
-        char *filename_tmp;
+        _cleanup_free_ char *filename_tmp = NULL;
         int64_t pos;
         int64_t root_off;
         int64_t size;
@@ -385,8 +385,8 @@ static int trie_store(struct trie *trie, const char *filename) {
                 err = -errno;
         fclose(t.f);
         if (err < 0 || rename(filename_tmp, filename) < 0) {
-                unlink(filename_tmp);
-                goto out;
+                unlink_noerrno(filename_tmp);
+                return err < 0 ? err : -errno;
         }
 
         log_debug("=== trie on-disk ===");
@@ -400,9 +400,8 @@ static int trie_store(struct trie *trie, const char *filename) {
                   (unsigned long long)t.values_count * sizeof(struct trie_value_entry_f), (unsigned long long)t.values_count);
         log_debug("string store:     %8llu bytes", (unsigned long long)trie->strings->len);
         log_debug("strings start:    %8llu", (unsigned long long) t.strings_off);
-out:
-        free(filename_tmp);
-        return err;
+
+        return 0;
 }
 
 static int insert_data(struct trie *trie, struct udev_list *match_list,