Quoting Stéphane Graber (stgra...@ubuntu.com): > 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>
Acked-by: Serge E. Hallyn <serge.hal...@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 ------------------------------------------------------------------------------ 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