[lxc-devel] [PATCH v3 4/6] lxc-unshare: Move functions to determine clone flags from command line options to namespace.c

Serge Hallyn serge.hallyn at canonical.com
Thu May 24 14:16:34 UTC 2012


Quoting Christian Seiler (christian at iwakd.de):
> In order to be able to reuse code in lxc-attach, the functions
> lxc_namespace_2_cloneflag and lxc_fill_namespace_flags are moved from
> lxc_unshare.c to namespace.c.
> 
> Signed-off-by: Christian Seiler <christian at iwakd.de>
> Cc: Daniel Lezcano <daniel.lezcano at free.fr>
> Cc: Serge Hallyn <serge.hallyn at canonical.com>

Acked-by: Serge Hallyn <serge.hallyn at canonical.com>

> ---
>  src/lxc/lxc_unshare.c |   45 ---------------------------------------------
>  src/lxc/namespace.c   |   45 +++++++++++++++++++++++++++++++++++++++++++++
>  src/lxc/namespace.h   |    3 +++
>  3 files changed, 48 insertions(+), 45 deletions(-)
> 
> diff --git a/src/lxc/lxc_unshare.c b/src/lxc/lxc_unshare.c
> index 0baccb0..fda2ed8 100644
> --- a/src/lxc/lxc_unshare.c
> +++ b/src/lxc/lxc_unshare.c
> @@ -85,51 +85,6 @@ static uid_t lookup_user(const char *optarg)
>  	return uid;
>  }
>  
> -static char *namespaces_list[] = {
> -	"MOUNT", "PID", "UTSNAME", "IPC",
> -	"USER", "NETWORK"
> -};
> -static int cloneflags_list[] = {
> -	CLONE_NEWNS, CLONE_NEWPID, CLONE_NEWUTS, CLONE_NEWIPC,
> -	CLONE_NEWUSER, CLONE_NEWNET
> -};
> -
> -static int lxc_namespace_2_cloneflag(char *namespace)
> -{
> -	int i, len;
> -	len = sizeof(namespaces_list)/sizeof(namespaces_list[0]);
> -	for (i = 0; i < len; i++)
> -		if (!strcmp(namespaces_list[i], namespace))
> -			return cloneflags_list[i];
> -
> -	ERROR("invalid namespace name %s", namespace);
> -	return -1;
> -}
> -
> -static int lxc_fill_namespace_flags(char *flaglist, int *flags)
> -{
> -	char *token, *saveptr = NULL;
> -	int aflag;
> -
> -	if (!flaglist) {
> -		ERROR("need at least one namespace to unshare");
> -		return -1;
> -	}
> -
> -	token = strtok_r(flaglist, "|", &saveptr);
> -	while (token) {
> -
> -		aflag = lxc_namespace_2_cloneflag(token);
> -		if (aflag < 0)
> -			return -1;
> -
> -		*flags |= aflag;
> -
> -		token = strtok_r(NULL, "|", &saveptr);
> -	}
> -	return 0;
> -}
> -
>  
>  struct start_arg {
>  	char ***args;
> diff --git a/src/lxc/namespace.c b/src/lxc/namespace.c
> index 3e6fc3a..3fa027b 100644
> --- a/src/lxc/namespace.c
> +++ b/src/lxc/namespace.c
> @@ -69,3 +69,48 @@ pid_t lxc_clone(int (*fn)(void *), void *arg, int flags)
>  
>  	return ret;
>  }
> +
> +static char *namespaces_list[] = {
> +	"MOUNT", "PID", "UTSNAME", "IPC",
> +	"USER", "NETWORK"
> +};
> +static int cloneflags_list[] = {
> +	CLONE_NEWNS, CLONE_NEWPID, CLONE_NEWUTS, CLONE_NEWIPC,
> +	CLONE_NEWUSER, CLONE_NEWNET
> +};
> +
> +int lxc_namespace_2_cloneflag(char *namespace)
> +{
> +	int i, len;
> +	len = sizeof(namespaces_list)/sizeof(namespaces_list[0]);
> +	for (i = 0; i < len; i++)
> +		if (!strcmp(namespaces_list[i], namespace))
> +			return cloneflags_list[i];
> +
> +	ERROR("invalid namespace name %s", namespace);
> +	return -1;
> +}
> +
> +int lxc_fill_namespace_flags(char *flaglist, int *flags)
> +{
> +	char *token, *saveptr = NULL;
> +	int aflag;
> +
> +	if (!flaglist) {
> +		ERROR("need at least one namespace to unshare");
> +		return -1;
> +	}
> +
> +	token = strtok_r(flaglist, "|", &saveptr);
> +	while (token) {
> +
> +		aflag = lxc_namespace_2_cloneflag(token);
> +		if (aflag < 0)
> +			return -1;
> +
> +		*flags |= aflag;
> +
> +		token = strtok_r(NULL, "|", &saveptr);
> +	}
> +	return 0;
> +}
> diff --git a/src/lxc/namespace.h b/src/lxc/namespace.h
> index 5442dd3..04e81bb 100644
> --- a/src/lxc/namespace.h
> +++ b/src/lxc/namespace.h
> @@ -50,4 +50,7 @@
>  
>  extern pid_t lxc_clone(int (*fn)(void *), void *arg, int flags);
>  
> +extern int lxc_namespace_2_cloneflag(char *namespace);
> +extern int lxc_fill_namespace_flags(char *flaglist, int *flags);
> +
>  #endif
> -- 
> 1.7.2.5
> 




More information about the lxc-devel mailing list