From 1323838283dd5859a5a6bec92088b210d270d4e5 Mon Sep 17 00:00:00 2001 From: Christian Brauner Date: Thu, 8 Feb 2018 15:23:49 +0100 Subject: [PATCH] tools/lxc_unshare: satisfy Android Signed-off-by: Christian Brauner --- src/lxc/tools/lxc_unshare.c | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) diff --git a/src/lxc/tools/lxc_unshare.c b/src/lxc/tools/lxc_unshare.c index 98143d6623..54f0fd545f 100644 --- a/src/lxc/tools/lxc_unshare.c +++ b/src/lxc/tools/lxc_unshare.c @@ -42,6 +42,23 @@ #include "arguments.h" #include "tool_utils.h" +/* Define sethostname() if missing from the C library also workaround some + * quirky with having this defined in multiple places. + */ +static inline int sethostname_including_android(const char *name, size_t len) +{ +#ifndef HAVE_SETHOSTNAME +#ifdef __NR_sethostname + return syscall(__NR_sethostname, name, len); +#else + errno = ENOSYS; + return -1; +#endif +#else + return sethostname(name, len); +#endif +} + struct my_iflist { char *mi_ifname; @@ -127,7 +144,7 @@ static int do_start(void *arg) lxc_setup_fs(); if ((flags & CLONE_NEWUTS) && want_hostname) - if (sethostname(want_hostname, strlen(want_hostname)) < 0) { + if (sethostname_including_android(want_hostname, strlen(want_hostname)) < 0) { fprintf(stderr, "failed to set hostname %s: %s\n", want_hostname, strerror(errno)); exit(EXIT_FAILURE); }