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

Reply via email to