diff options
author | Yu Watanabe <watanabe.yu+github@gmail.com> | 2018-11-26 00:48:15 +0900 |
---|---|---|
committer | Yu Watanabe <watanabe.yu+github@gmail.com> | 2018-12-02 12:18:54 +0100 |
commit | 71a0be76cd8f2010b747d88c471af19fe162c5f7 (patch) | |
tree | 85de43e147b8c23b805f6c657fee5162bb3ab3c7 /src/tmpfiles | |
parent | a4a90e65c7921ce250487dd596aea65fcd192766 (diff) | |
download | systemd-71a0be76cd8f2010b747d88c471af19fe162c5f7.tar.gz systemd-71a0be76cd8f2010b747d88c471af19fe162c5f7.tar.bz2 systemd-71a0be76cd8f2010b747d88c471af19fe162c5f7.zip |
tmpfiles: make load_unix_sockets() return negative errno on failure
Diffstat (limited to 'src/tmpfiles')
-rw-r--r-- | src/tmpfiles/tmpfiles.c | 76 |
1 files changed, 31 insertions, 45 deletions
diff --git a/src/tmpfiles/tmpfiles.c b/src/tmpfiles/tmpfiles.c index ce17d6972d..b673ce1080 100644 --- a/src/tmpfiles/tmpfiles.c +++ b/src/tmpfiles/tmpfiles.c @@ -372,48 +372,39 @@ static struct Item* find_glob(OrderedHashmap *h, const char *match) { return NULL; } -static void load_unix_sockets(void) { +static int load_unix_sockets(void) { + _cleanup_set_free_free_ Set *sockets = NULL; _cleanup_fclose_ FILE *f = NULL; int r; if (unix_sockets) - return; + return 0; /* We maintain a cache of the sockets we found in /proc/net/unix to speed things up a little. */ - unix_sockets = set_new(&path_hash_ops); - if (!unix_sockets) { - log_oom(); - return; - } + sockets = set_new(&path_hash_ops); + if (!sockets) + return log_oom(); f = fopen("/proc/net/unix", "re"); - if (!f) { - log_full_errno(errno == ENOENT ? LOG_DEBUG : LOG_WARNING, errno, - "Failed to open /proc/net/unix, ignoring: %m"); - goto fail; - } + if (!f) + return log_full_errno(errno == ENOENT ? LOG_DEBUG : LOG_WARNING, errno, + "Failed to open /proc/net/unix, ignoring: %m"); /* Skip header */ r = read_line(f, LONG_LINE_MAX, NULL); - if (r < 0) { - log_warning_errno(r, "Failed to skip /proc/net/unix header line: %m"); - goto fail; - } - if (r == 0) { - log_warning("Premature end of file reading /proc/net/unix."); - goto fail; - } + if (r < 0) + return log_warning_errno(r, "Failed to skip /proc/net/unix header line: %m"); + if (r == 0) + return log_warning_errno(SYNTHETIC_ERRNO(EIO), "Premature end of file reading /proc/net/unix."); for (;;) { - _cleanup_free_ char *line = NULL; - char *p, *s; + _cleanup_free_ char *line = NULL, *s = NULL; + char *p; r = read_line(f, LONG_LINE_MAX, &line); - if (r < 0) { - log_warning_errno(r, "Failed to read /proc/net/unix line, ignoring: %m"); - goto fail; - } + if (r < 0) + return log_warning_errno(r, "Failed to read /proc/net/unix line, ignoring: %m"); if (r == 0) /* EOF */ break; @@ -433,36 +424,31 @@ static void load_unix_sockets(void) { continue; s = strdup(p); - if (!s) { - log_oom(); - goto fail; - } + if (!s) + return log_oom(); path_simplify(s, false); - r = set_consume(unix_sockets, s); - if (r < 0 && r != -EEXIST) { - log_warning_errno(r, "Failed to add AF_UNIX socket to set, ignoring: %m"); - goto fail; - } - } + r = set_consume(sockets, s); + if (r == -EEXIST) + continue; + if (r < 0) + return log_warning_errno(r, "Failed to add AF_UNIX socket to set, ignoring: %m"); - return; + TAKE_PTR(s); + } -fail: - unix_sockets = set_free_free(unix_sockets); + unix_sockets = TAKE_PTR(sockets); + return 1; } static bool unix_socket_alive(const char *fn) { assert(fn); - load_unix_sockets(); + if (load_unix_sockets() < 0) + return true; /* We don't know, so assume yes */ - if (unix_sockets) - return !!set_get(unix_sockets, (char*) fn); - - /* We don't know, so assume yes */ - return true; + return !!set_get(unix_sockets, (char*) fn); } static int dir_is_mount_point(DIR *d, const char *subdir) { |