summaryrefslogtreecommitdiff
path: root/testing/systemd/0001-tmpfiles-fix-parsing-of-proc-net-unix-on-32Bit-machi.patch
diff options
context:
space:
mode:
Diffstat (limited to 'testing/systemd/0001-tmpfiles-fix-parsing-of-proc-net-unix-on-32Bit-machi.patch')
-rw-r--r--testing/systemd/0001-tmpfiles-fix-parsing-of-proc-net-unix-on-32Bit-machi.patch87
1 files changed, 87 insertions, 0 deletions
diff --git a/testing/systemd/0001-tmpfiles-fix-parsing-of-proc-net-unix-on-32Bit-machi.patch b/testing/systemd/0001-tmpfiles-fix-parsing-of-proc-net-unix-on-32Bit-machi.patch
new file mode 100644
index 000000000..456d679ed
--- /dev/null
+++ b/testing/systemd/0001-tmpfiles-fix-parsing-of-proc-net-unix-on-32Bit-machi.patch
@@ -0,0 +1,87 @@
+From fdcad0c25579a60061b1fda956686e878a80faef Mon Sep 17 00:00:00 2001
+From: Lennart Poettering <lennart@poettering.net>
+Date: Wed, 11 Jan 2012 22:07:35 +0100
+Subject: [PATCH] tmpfiles: fix parsing of /proc/net/unix on 32Bit machines
+
+Tracked down by Michael Meeks
+---
+ src/tmpfiles.c | 30 ++++++++++++++++++++----------
+ 1 files changed, 20 insertions(+), 10 deletions(-)
+
+diff --git a/src/tmpfiles.c b/src/tmpfiles.c
+index 19a7c08..44e5c9d 100644
+--- a/src/tmpfiles.c
++++ b/src/tmpfiles.c
+@@ -117,41 +117,50 @@ static void load_unix_sockets(void) {
+ /* We maintain a cache of the sockets we found in
+ * /proc/net/unix to speed things up a little. */
+
+- if (!(unix_sockets = set_new(string_hash_func, string_compare_func)))
++ unix_sockets = set_new(string_hash_func, string_compare_func);
++ if (!unix_sockets)
+ return;
+
+- if (!(f = fopen("/proc/net/unix", "re")))
++ f = fopen("/proc/net/unix", "re");
++ if (!f)
+ return;
+
+- if (!(fgets(line, sizeof(line), f)))
++ /* Skip header */
++ if (!fgets(line, sizeof(line), f))
+ goto fail;
+
+ for (;;) {
+ char *p, *s;
+ int k;
+
+- if (!(fgets(line, sizeof(line), f)))
++ if (!fgets(line, sizeof(line), f))
+ break;
+
+ truncate_nl(line);
+
+- if (strlen(line) < 53)
++ p = strchr(line, ':');
++ if (!p)
++ continue;
++
++ if (strlen(p) < 37)
+ continue;
+
+- p = line + 53;
++ p += 37;
+ p += strspn(p, WHITESPACE);
+- p += strcspn(p, WHITESPACE);
++ p += strcspn(p, WHITESPACE); /* skip one more word */
+ p += strspn(p, WHITESPACE);
+
+ if (*p != '/')
+ continue;
+
+- if (!(s = strdup(p)))
++ s = strdup(p);
++ if (!s)
+ goto fail;
+
+ path_kill_slashes(s);
+
+- if ((k = set_put(unix_sockets, s)) < 0) {
++ k = set_put(unix_sockets, s);
++ if (k < 0) {
+ free(s);
+
+ if (k != -EEXIST)
+@@ -1059,7 +1068,8 @@ int main(int argc, char *argv[]) {
+ Item *i;
+ Iterator iterator;
+
+- if ((r = parse_argv(argc, argv)) <= 0)
++ r = parse_argv(argc, argv);
++ if (r <= 0)
+ return r < 0 ? EXIT_FAILURE : EXIT_SUCCESS;
+
+ log_set_target(LOG_TARGET_AUTO);
+--
+1.7.8.3
+