Some libc implementation (bionic) is lacking some of the syscall functions that are present in the glibc.
For those, detect at build time the they are missing and implement a minimal syscall() wrapper that will essentially give the same result as the glibc function. Signed-off-by: Stéphane Graber <stgra...@ubuntu.com> --- src/lxc/attach.c | 26 +++++++++++++++++++++----- src/lxc/conf.c | 30 ++++++++++++++++++++++++++++-- 2 files changed, 49 insertions(+), 7 deletions(-) diff --git a/src/lxc/attach.c b/src/lxc/attach.c index 9adb8f9..103f223 100644 --- a/src/lxc/attach.c +++ b/src/lxc/attach.c @@ -46,15 +46,31 @@ lxc_log_define(lxc_attach, lxc); -int setns(int fd, int nstype) +/* Define setns() if missing from the C library */ +#ifndef HAVE_SETNS +static int setns(int fd, int nstype) { -#ifndef __NR_setns - errno = ENOSYS; - return -1; +#ifdef __NR_setns +return syscall(__NR_setns, fd, nstype); #else - return syscall(__NR_setns, fd, nstype); +errno = ENOSYS; +return -1; #endif } +#endif + +/* Define unshare() if missing from the C library */ +#ifndef HAVE_UNSHARE +static int unshare(int flags) +{ +#ifdef __NR_unshare +return syscall(__NR_unshare, flags); +#else +errno = ENOSYS; +return -1; +#endif +} +#endif struct lxc_proc_context_info *lxc_proc_get_context_info(pid_t pid) { diff --git a/src/lxc/conf.c b/src/lxc/conf.c index 2136feb..7963b00 100644 --- a/src/lxc/conf.c +++ b/src/lxc/conf.c @@ -132,11 +132,37 @@ lxc_log_define(lxc_conf, lxc); #define LO_FLAGS_AUTOCLEAR 4 #endif +/* Define pivot_root() if missing from the C library */ +#ifndef HAVE_PIVOT_ROOT +static int pivot_root(const char * new_root, const char * put_old) +{ +#ifdef __NR_pivot_root +return syscall(__NR_pivot_root, new_root, put_old); +#else +errno = ENOSYS; +return -1; +#endif +} +#else +extern int pivot_root(const char * new_root, const char * put_old); +#endif + +/* Define sethostname() if missing from the C library */ +#ifndef HAVE_SETHOSTNAME +static int sethostname(const char * name, size_t len) +{ +#ifdef __NR_sethostname +return syscall(__NR_sethostname, name, len); +#else +errno = ENOSYS; +return -1; +#endif +} +#endif + char *lxchook_names[NUM_LXC_HOOKS] = { "pre-start", "pre-mount", "mount", "start", "post-stop" }; -extern int pivot_root(const char * new_root, const char * put_old); - typedef int (*instanciate_cb)(struct lxc_handler *, struct lxc_netdev *); struct mount_opt { -- 1.8.0 ------------------------------------------------------------------------------ Master Visual Studio, SharePoint, SQL, ASP.NET, C# 2012, HTML5, CSS, MVC, Windows 8 Apps, JavaScript and much more. Keep your skills current with LearnDevNow - 3,200 step-by-step video tutorials by Microsoft MVPs and experts. ON SALE this month only -- learn more at: http://p.sf.net/sfu/learnmore_122712 _______________________________________________ Lxc-devel mailing list Lxc-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/lxc-devel