summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--configure.ac9
-rw-r--r--hostname-setup.c41
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;