>From b4619f01b6f25752220b2fe5c5ccd22e248f4015 Mon Sep 17 00:00:00 2001
From: Didier Roche <didro...@ubuntu.com>
Date: Mon, 24 Nov 2014 09:40:57 +0100
Subject: [PATCH 1/5] Factorize some machine-id-setup functions to be reused

---
 src/core/machine-id-setup.c | 41 +++++++++++++++++++++++++++++++----------
 1 file changed, 31 insertions(+), 10 deletions(-)

diff --git a/src/core/machine-id-setup.c b/src/core/machine-id-setup.c
index ce6d8e0..578bcfb 100644
--- a/src/core/machine-id-setup.c
+++ b/src/core/machine-id-setup.c
@@ -159,6 +159,34 @@ static int generate(char id[34], const char *root) {
         return 0;
 }
 
+static int get_valid_machine_id(int fd, char id[34]) {
+        assert(fd >= 0);
+        assert(id);
+
+        if (loop_read(fd, id, 33, false) == 33 && id[32] == '\n') {
+                id[32] = 0;
+
+                if (id128_is_valid(id)) {
+                        id[32] = '\n';
+                        id[33] = 0;
+                        return 0;
+                }
+        }
+
+        return -EINVAL;
+}
+
+static int write_machine_id(int fd, char id[34]) {
+        assert(fd >= 0);
+        assert(id);
+        lseek(fd, 0, SEEK_SET);
+
+        if (loop_write(fd, id, 33, false) == 33)
+                return 0;
+
+        return -errno;
+}
+
 int machine_id_setup(const char *root) {
         const char *etc_machine_id, *run_machine_id;
         _cleanup_close_ int fd = -1;
@@ -211,13 +239,8 @@ int machine_id_setup(const char *root) {
                 return -errno;
         }
 
-        if (S_ISREG(st.st_mode))
-                if (loop_read(fd, id, 33, false) == 33 && id[32] == '\n') {
-                        id[32] = 0;
-
-                        if (id128_is_valid(id))
-                                return 0;
-                }
+        if (S_ISREG(st.st_mode) && get_valid_machine_id(fd, id) == 0)
+                return 0;
 
         /* Hmm, so, the id currently stored is not useful, then let's
          * generate one */
@@ -227,9 +250,7 @@ int machine_id_setup(const char *root) {
                 return r;
 
         if (S_ISREG(st.st_mode) && writable) {
-                lseek(fd, 0, SEEK_SET);
-
-                if (loop_write(fd, id, 33, false) == 33)
+                if (write_machine_id(fd, id) == 0)
                         return 0;
         }
 
-- 
2.1.3

_______________________________________________
systemd-devel mailing list
systemd-devel@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/systemd-devel

Reply via email to