On Mon, 18.05.15 12:36, Martin Pitt (martin.p...@ubuntu.com) wrote: > static int read_and_strip_hostname(const char *path, char **hn) { > - char *s; > - int r; > + _cleanup_fclose_ FILE *f = NULL; > + char l[LINE_MAX]; > + char *s = NULL; > > assert(path); > assert(hn); > > - r = read_one_line_file(path, &s); > - if (r < 0) > - return r; > + /* may have comments, ignore them */ > + f = fopen("/etc/hostname", "re"); > + if (!f) > + return -errno; > + FOREACH_LINE(l, f, return -errno) { > + truncate_nl(l); > + if (l[0] != '\0' && l[0] != '#') { > + s = strdup(l); > + break;
This code will result in ENOENT being returned on OOM... That's not right... Also consider using strstrip() here. > - r = read_one_line_file("/etc/hostname", > &c->data[PROP_STATIC_HOSTNAME]); > - if (r < 0 && r != -ENOENT) > - return r; > + /* /etc/hostname may have comments, ignore them */ > + f = fopen("/etc/hostname", "re"); > + if (!f) > + return -errno; > + FOREACH_LINE(l, f, return -errno) { > + truncate_nl(l); > + if (l[0] != '\0' && l[0] != '#') { > + c->data[PROP_STATIC_HOSTNAME] = strdup(l); > + break; > + } > + } Given that this same code is needed twice in different components, please add a new call read_etc_hostname() to src/shared/hostname-util.c (which I just added to git). It should then also do hostname_cleanup() on the name, and thus pretty much replace read_and_strip_hostname() entirely in hostname-setup.c. Lennart -- Lennart Poettering, Red Hat _______________________________________________ systemd-devel mailing list systemd-devel@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/systemd-devel