[systemd-commits] src/tmpfiles.c

Lennart Poettering lennart at kemper.freedesktop.org
Wed Jan 11 13:08:44 PST 2012


 src/tmpfiles.c |   30 ++++++++++++++++++++----------
 1 file changed, 20 insertions(+), 10 deletions(-)

New commits:
commit fdcad0c25579a60061b1fda956686e878a80faef
Author: Lennart Poettering <lennart at poettering.net>
Date:   Wed Jan 11 22:07:35 2012 +0100

    tmpfiles: fix parsing of /proc/net/unix on 32Bit machines
    
    Tracked down by Michael Meeks

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);



More information about the systemd-commits mailing list