mirror of
https://github.com/systemd/systemd.git
synced 2024-11-07 09:56:51 +03:00
tmpfiles: modernize load_unix_sockets() a bit
Let's log in case of error. Let's use read_line() instead of a fixed-size buffer Let's make use of set_free_free()'s return value.
This commit is contained in:
parent
dfd14786b5
commit
f1ff734fad
@ -375,35 +375,47 @@ static struct Item* find_glob(OrderedHashmap *h, const char *match) {
|
|||||||
|
|
||||||
static void load_unix_sockets(void) {
|
static void load_unix_sockets(void) {
|
||||||
_cleanup_fclose_ FILE *f = NULL;
|
_cleanup_fclose_ FILE *f = NULL;
|
||||||
char line[LINE_MAX];
|
int r;
|
||||||
|
|
||||||
if (unix_sockets)
|
if (unix_sockets)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
/* We maintain a cache of the sockets we found in
|
/* We maintain a cache of the sockets we found in /proc/net/unix to speed things up a little. */
|
||||||
* /proc/net/unix to speed things up a little. */
|
|
||||||
|
|
||||||
unix_sockets = set_new(&string_hash_ops);
|
unix_sockets = set_new(&string_hash_ops);
|
||||||
if (!unix_sockets)
|
if (!unix_sockets)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
f = fopen("/proc/net/unix", "re");
|
f = fopen("/proc/net/unix", "re");
|
||||||
if (!f)
|
if (!f) {
|
||||||
return;
|
log_full_errno(errno == ENOENT ? LOG_DEBUG : LOG_WARNING, errno,
|
||||||
|
"Failed to open /proc/net/unix, ignoring: %m");
|
||||||
|
goto fail;
|
||||||
|
}
|
||||||
|
|
||||||
/* Skip header */
|
/* Skip header */
|
||||||
if (!fgets(line, sizeof(line), f))
|
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;
|
goto fail;
|
||||||
|
}
|
||||||
|
if (r == 0) {
|
||||||
|
log_warning("Premature end of file reading /proc/net/unix.");
|
||||||
|
goto fail;
|
||||||
|
}
|
||||||
|
|
||||||
for (;;) {
|
for (;;) {
|
||||||
|
_cleanup_free_ char *line = NULL;
|
||||||
char *p, *s;
|
char *p, *s;
|
||||||
int k;
|
|
||||||
|
|
||||||
if (!fgets(line, sizeof(line), f))
|
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) /* EOF */
|
||||||
break;
|
break;
|
||||||
|
|
||||||
truncate_nl(line);
|
|
||||||
|
|
||||||
p = strchr(line, ':');
|
p = strchr(line, ':');
|
||||||
if (!p)
|
if (!p)
|
||||||
continue;
|
continue;
|
||||||
@ -420,21 +432,24 @@ static void load_unix_sockets(void) {
|
|||||||
continue;
|
continue;
|
||||||
|
|
||||||
s = strdup(p);
|
s = strdup(p);
|
||||||
if (!s)
|
if (!s) {
|
||||||
|
log_oom();
|
||||||
goto fail;
|
goto fail;
|
||||||
|
}
|
||||||
|
|
||||||
path_kill_slashes(s);
|
path_kill_slashes(s);
|
||||||
|
|
||||||
k = set_consume(unix_sockets, s);
|
r = set_consume(unix_sockets, s);
|
||||||
if (k < 0 && k != -EEXIST)
|
if (r < 0 && r != -EEXIST) {
|
||||||
|
log_warning_errno(r, "Failed to add AF_UNIX socket to set, ignoring: %m");
|
||||||
goto fail;
|
goto fail;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return;
|
return;
|
||||||
|
|
||||||
fail:
|
fail:
|
||||||
set_free_free(unix_sockets);
|
unix_sockets = set_free_free(unix_sockets);
|
||||||
unix_sockets = NULL;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static bool unix_socket_alive(const char *fn) {
|
static bool unix_socket_alive(const char *fn) {
|
||||||
|
Loading…
Reference in New Issue
Block a user