#include "util.h"
#include "log.h"
-#if defined(TARGET_FEDORA) || defined(TARGET_ALTLINUX) || defined(TARGET_MANDRIVA) || defined(TARGET_MEEGO) || defined(TARGET_MAGEIA)
+#if defined(TARGET_ALTLINUX) || defined(TARGET_MANDRIVA) || defined(TARGET_MAGEIA)
#define FILENAME "/etc/sysconfig/network"
#elif defined(TARGET_SUSE) || defined(TARGET_SLACKWARE)
#define FILENAME "/etc/HOSTNAME"
assert(path);
assert(hn);
- if ((r = read_one_line_file(path, &s)) < 0)
+ r = read_one_line_file(path, &s);
+ if (r < 0)
return r;
hostname_cleanup(s);
static int read_distro_hostname(char **hn) {
-#if defined(TARGET_FEDORA) || defined(TARGET_ARCH) || defined(TARGET_GENTOO) || defined(TARGET_ALTLINUX) || defined(TARGET_MANDRIVA) || defined(TARGET_MEEGO) || defined(TARGET_MAGEIA)
+#if defined(TARGET_ARCH) || defined(TARGET_GENTOO) || defined(TARGET_ALTLINUX) || defined(TARGET_MANDRIVA) || defined(TARGET_MAGEIA)
int r;
- FILE *f;
+ _cleanup_fclose_ FILE *f = NULL;
assert(hn);
- if (!(f = fopen(FILENAME, "re")))
+ f = fopen(FILENAME, "re");
+ if (!f)
return -errno;
for (;;) {
if (!startswith_no_case(s, "HOSTNAME="))
continue;
- if (!(k = strdup(s+9))) {
+ k = strdup(s+9);
+ if (!k) {
r = -ENOMEM;
goto finish;
}
r = -ENOENT;
finish:
- fclose(f);
return r;
#elif defined(TARGET_SUSE) || defined(TARGET_SLACKWARE)
/* First, try to load the generic hostname configuration file,
* that we support on all distributions */
- if ((r = read_and_strip_hostname("/etc/hostname", hn)) < 0) {
-
+ r = read_and_strip_hostname("/etc/hostname", hn);
+ if (r < 0) {
if (r == -ENOENT)
return read_distro_hostname(hn);
int r;
char *b = NULL;
const char *hn = NULL;
+ bool enoent = false;
+
+ r = read_hostname(&b);
+ if (r < 0) {
+ hn = NULL;
- if ((r = read_hostname(&b)) < 0) {
if (r == -ENOENT)
- log_info("No hostname configured.");
+ enoent = true;
else
log_warning("Failed to read configured hostname: %s", strerror(-r));
-
- hn = NULL;
} else
hn = b;
- if (!hn) {
- /* Don't override the hostname if it is unset and not
- * explicitly configured */
-
- char *old_hostname = NULL;
-
- if ((old_hostname = gethostname_malloc())) {
- bool already_set;
-
- already_set = old_hostname[0] != 0;
- free(old_hostname);
+ if (isempty(hn)) {
+ /* Don't override the hostname if it is already set
+ * and not explicitly configured */
+ if (hostname_is_set())
+ goto finish;
- if (already_set)
- goto finish;
- }
+ if (enoent)
+ log_info("No hostname configured.");
hn = "localhost";
}