Sophie

Sophie

distrib > Fedora > 17 > i386 > media > updates-src > by-pkgid > ab4b662b9827b6375ffd451bf4abd615 > files > 164

systemd-44-24.fc17.src.rpm

From 225979823280a8e34f7155c2bc201d345e1e798b Mon Sep 17 00:00:00 2001
From: Kay Sievers <kay@vrfy.org>
Date: Tue, 17 Apr 2012 22:25:24 +0200
Subject: [PATCH] udev: unify /dev static symlink setup (cherry picked from
 commit 5ba2dc259f3cdd8fddef68cfd28380a32534e49a)

Conflicts:

	TODO
	src/udev/udevd.c
---
 Makefile.am            |    4 ++-
 src/core/mount-setup.c |   31 +++--------------------
 src/shared/dev-setup.c |   65 ++++++++++++++++++++++++++++++++++++++++++++++++
 src/shared/dev-setup.h |   27 ++++++++++++++++++++
 4 files changed, 98 insertions(+), 29 deletions(-)
 create mode 100644 src/shared/dev-setup.c
 create mode 100644 src/shared/dev-setup.h

diff --git a/Makefile.am b/Makefile.am
index 410b46b..dd1832e 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -545,7 +545,9 @@ libsystemd_shared_la_SOURCES = \
 	src/shared/specifier.c \
 	src/shared/specifier.h \
 	src/shared/spawn-polkit-agent.c \
-	src/shared/spawn-polkit-agent.h
+	src/shared/spawn-polkit-agent.h \
+	src/shared/dev-setup.c \
+	src/shared/dev-setup.h
 
 libsystemd_shared_la_CFLAGS = \
 	$(AM_CFLAGS) \
diff --git a/src/core/mount-setup.c b/src/core/mount-setup.c
index eeec251..09ba8b7 100644
--- a/src/core/mount-setup.c
+++ b/src/core/mount-setup.c
@@ -30,6 +30,7 @@
 #include <ftw.h>
 
 #include "mount-setup.h"
+#include "dev-setup.h"
 #include "log.h"
 #include "macro.h"
 #include "util.h"
@@ -323,24 +324,6 @@ finish:
         return r;
 }
 
-static int symlink_and_label(const char *old_path, const char *new_path) {
-        int r;
-
-        assert(old_path);
-        assert(new_path);
-
-        r = label_context_set(new_path, S_IFLNK);
-        if (r < 0)
-                return r;
-
-        if (symlink(old_path, new_path) < 0)
-                r = -errno;
-
-        label_context_clear();
-
-        return r;
-}
-
 static int nftw_cb(
                 const char *fpath,
                 const struct stat *sb,
@@ -365,20 +348,13 @@ static int nftw_cb(
 
 int mount_setup(bool loaded_policy) {
 
-        static const char symlinks[] =
-                "/proc/kcore\0"      "/dev/core\0"
-                "/proc/self/fd\0"    "/dev/fd\0"
-                "/proc/self/fd/0\0"  "/dev/stdin\0"
-                "/proc/self/fd/1\0"  "/dev/stdout\0"
-                "/proc/self/fd/2\0"  "/dev/stderr\0";
-
         static const char relabel[] =
                 "/run/initramfs/root-fsck\0"
                 "/run/initramfs/shutdown\0";
 
         int r;
         unsigned i;
-        const char *j, *k;
+        const char *j;
 
         for (i = 0; i < ELEMENTSOF(mount_table); i ++) {
                 r = mount_one(mount_table + i, true);
@@ -413,8 +389,7 @@ int mount_setup(bool loaded_policy) {
         /* Create a few default symlinks, which are normally created
          * by udevd, but some scripts might need them before we start
          * udevd. */
-        NULSTR_FOREACH_PAIR(j, k, symlinks)
-                symlink_and_label(j, k);
+        dev_setup();
 
         /* Create a few directories we always want around */
         label_mkdir("/run/systemd", 0755);
diff --git a/src/shared/dev-setup.c b/src/shared/dev-setup.c
new file mode 100644
index 0000000..0b3d648
--- /dev/null
+++ b/src/shared/dev-setup.c
@@ -0,0 +1,65 @@
+/*-*- Mode: C; c-basic-offset: 8; indent-tabs-mode: nil -*-*/
+
+/***
+  This file is part of systemd.
+
+  Copyright 2010-2012 Lennart Poettering
+
+  systemd is free software; you can redistribute it and/or modify it
+  under the terms of the GNU Lesser General Public License as published by
+  the Free Software Foundation; either version 2.1 of the License, or
+  (at your option) any later version.
+
+  systemd is distributed in the hope that it will be useful, but
+  WITHOUT ANY WARRANTY; without even the implied warranty of
+  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+  Lesser General Public License for more details.
+
+  You should have received a copy of the GNU Lesser General Public License
+  along with systemd; If not, see <http://www.gnu.org/licenses/>.
+***/
+
+#include <errno.h>
+#include <sys/stat.h>
+#include <stdlib.h>
+#include <string.h>
+#include <assert.h>
+#include <unistd.h>
+
+#include "dev-setup.h"
+#include "log.h"
+#include "macro.h"
+#include "util.h"
+#include "label.h"
+
+static int symlink_and_label(const char *old_path, const char *new_path) {
+        int r;
+
+        assert(old_path);
+        assert(new_path);
+
+        r = label_context_set(new_path, S_IFLNK);
+        if (r < 0)
+                return r;
+
+        if (symlink(old_path, new_path) < 0)
+                r = -errno;
+
+        label_context_clear();
+
+        return r;
+}
+
+void dev_setup(void) {
+        const char *j, *k;
+
+        static const char symlinks[] =
+                "/proc/kcore\0"      "/dev/core\0"
+                "/proc/self/fd\0"    "/dev/fd\0"
+                "/proc/self/fd/0\0"  "/dev/stdin\0"
+                "/proc/self/fd/1\0"  "/dev/stdout\0"
+                "/proc/self/fd/2\0"  "/dev/stderr\0";
+
+        NULSTR_FOREACH_PAIR(j, k, symlinks)
+                symlink_and_label(j, k);
+}
diff --git a/src/shared/dev-setup.h b/src/shared/dev-setup.h
new file mode 100644
index 0000000..5850758
--- /dev/null
+++ b/src/shared/dev-setup.h
@@ -0,0 +1,27 @@
+/*-*- Mode: C; c-basic-offset: 8; indent-tabs-mode: nil -*-*/
+
+#ifndef foodevsetuphfoo
+#define foodevsetuphfoo
+
+/***
+  This file is part of systemd.
+
+  Copyright 2010-2012 Lennart Poettering
+
+  systemd is free software; you can redistribute it and/or modify it
+  under the terms of the GNU Lesser General Public License as published by
+  the Free Software Foundation; either version 2.1 of the License, or
+  (at your option) any later version.
+
+  systemd is distributed in the hope that it will be useful, but
+  WITHOUT ANY WARRANTY; without even the implied warranty of
+  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+  Lesser General Public License for more details.
+
+  You should have received a copy of the GNU Lesser General Public License
+  along with systemd; If not, see <http://www.gnu.org/licenses/>.
+***/
+
+void dev_setup(void);
+
+#endif