diff options
-rw-r--r-- | configure.ac | 9 | ||||
-rw-r--r-- | hostname-setup.c | 41 |
2 files changed, 50 insertions, 0 deletions
diff --git a/configure.ac b/configure.ac index cc0ee11722..95456cd0bc 100644 --- a/configure.ac +++ b/configure.ac @@ -84,6 +84,7 @@ if test "z$with_distro" = "z"; then AC_CHECK_FILE(/etc/redhat-release,with_distro="fedora") AC_CHECK_FILE(/etc/SuSE-release,with_distro="suse") AC_CHECK_FILE(/etc/debian_version,with_distro="debian") + AC_CHECK_FILE(/etc/arch-release,with_distro="arch") fi if test "z$with_distro" = "z"; then with_distro=`uname -s` @@ -113,6 +114,13 @@ case $with_distro in special_syslog_service=sysklogd.service AC_DEFINE(TARGET_DEBIAN, [], [Target is Debian/Ubuntu]) ;; + arch) + SYSTEM_SYSVINIT_PATH=/etc/rc.d + SYSTEM_SYSVRCND_PATH=/etc + special_dbus_service=dbus.service + special_syslog_service=syslog-ng.service + AC_DEFINE(TARGET_ARCH, [], [Target is ArchLinux]) + ;; none) SYSTEM_SYSVINIT_PATH=/fix/the/configure/script SYSTEM_SYSVRCND_PATH=/fix/the/configure/script @@ -130,6 +138,7 @@ AC_SUBST(SYSTEM_SYSVRCND_PATH) AM_CONDITIONAL(TARGET_FEDORA, test x"$with_distro" = xfedora) AM_CONDITIONAL(TARGET_SUSE, test x"$with_distro" = xsuse) AM_CONDITIONAL(TARGET_DEBIAN, test x"$with_distro" = xdebian) +AM_CONDITIONAL(TARGET_ARCH, test x"$with_distro" = xarch) AC_DEFINE_UNQUOTED(SPECIAL_DBUS_SERVICE, ["$special_dbus_service"], [D-Bus service name]) AC_DEFINE_UNQUOTED(SPECIAL_SYSLOG_SERVICE, ["$special_syslog_service"], [syslog service name]) diff --git a/hostname-setup.c b/hostname-setup.c index 5f3ee77ac0..67891a52e6 100644 --- a/hostname-setup.c +++ b/hostname-setup.c @@ -75,6 +75,47 @@ finish: fclose(f); return r; +#elif defined(TARGET_ARCH) + int r; + FILE *f; + + assert(hn); + + if (!(f = fopen("/etc/rc.conf", "re"))) + return -errno; + + for (;;) { + char line[LINE_MAX]; + char *s, *k; + + if (!fgets(line, sizeof(line), f)) { + if (feof(f)) + break; + + r = -errno; + goto finish; + } + + s = strstrip(line); + + if (!startswith(s, "HOSTNAME=")) + continue; + + if (!(k = strdup(s+9))) { + r = -ENOMEM; + goto finish; + } + + *hn = k; + break; + } + + r = 0; + +finish: + fclose(f); + return r; + #elif defined(TARGET_SUSE) int r; char *s, *k; |