summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--hostname-setup.c11
-rw-r--r--util.c25
-rw-r--r--util.h1
3 files changed, 35 insertions, 2 deletions
diff --git a/hostname-setup.c b/hostname-setup.c
index 4d7f32d0a7..b8551d9802 100644
--- a/hostname-setup.c
+++ b/hostname-setup.c
@@ -40,11 +40,13 @@
#define FILENAME "/etc/hostname"
#elif defined(TARGET_ARCH)
#define FILENAME "/etc/rc.conf"
+#elif defined(TARGET_GENTOO)
+#define FILENAME "/etc/conf.d/hostname"
#endif
static int read_hostname(char **hn) {
-#if defined(TARGET_FEDORA) || defined(TARGET_ARCH)
+#if defined(TARGET_FEDORA) || defined(TARGET_ARCH) || defined(TARGET_GENTOO)
int r;
FILE *f;
@@ -67,7 +69,7 @@ static int read_hostname(char **hn) {
s = strstrip(line);
- if (!startswith(s, "HOSTNAME="))
+ if (!startswith_no_case(s, "HOSTNAME="))
continue;
if (!(k = strdup(s+9))) {
@@ -75,6 +77,11 @@ static int read_hostname(char **hn) {
goto finish;
}
+ if (!(k = delete_chars(k, "\"\'"))) {
+ r = -ENOMEM;
+ goto finish;
+ }
+
*hn = k;
break;
}
diff --git a/util.c b/util.c
index eed9aa7f84..8042214c8f 100644
--- a/util.c
+++ b/util.c
@@ -42,6 +42,7 @@
#include <sys/inotify.h>
#include <sys/poll.h>
#include <libgen.h>
+#include <ctype.h>
#include "macro.h"
#include "util.h"
@@ -141,6 +142,30 @@ bool startswith(const char *s, const char *prefix) {
return memcmp(s, prefix, pl) == 0;
}
+bool startswith_no_case(const char *s, const char *prefix) {
+ size_t sl, pl;
+ unsigned i;
+
+ assert(s);
+ assert(prefix);
+
+ sl = strlen(s);
+ pl = strlen(prefix);
+
+ if (pl == 0)
+ return true;
+
+ if (sl < pl)
+ return false;
+
+ for(i = 0; i < pl; ++i) {
+ if (tolower(s[i]) != tolower(prefix[i]))
+ return false;
+ }
+
+ return true;
+}
+
bool first_word(const char *s, const char *word) {
size_t sl, wl;
diff --git a/util.h b/util.h
index ecf3b15e33..b9eb3602c8 100644
--- a/util.h
+++ b/util.h
@@ -89,6 +89,7 @@ static inline bool is_path_absolute(const char *p) {
bool endswith(const char *s, const char *postfix);
bool startswith(const char *s, const char *prefix);
+bool startswith_no_case(const char *s, const char *prefix);
bool first_word(const char *s, const char *word);