From 3177a7fa12247d30b854fcb7697cd578b9086bf5 Mon Sep 17 00:00:00 2001 From: Marc-Antoine Perennou Date: Sun, 9 May 2010 18:13:02 +0200 Subject: [PATCH] hostname: read hostname for Gentoo --- hostname-setup.c | 11 +++++++++-- util.c | 25 +++++++++++++++++++++++++ util.h | 1 + 3 files changed, 35 insertions(+), 2 deletions(-) diff --git a/hostname-setup.c b/hostname-setup.c index 4d7f32d0a..b8551d980 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 eed9aa7f8..8042214c8 100644 --- a/util.c +++ b/util.c @@ -42,6 +42,7 @@ #include #include #include +#include #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 ecf3b15e3..b9eb3602c 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); -- 2.30.2