On 04/18/2013 10:32 AM, Stéphane Graber wrote:
> This reverts commit 8de4140644f01180f2fdab55b0ab0f13d1c761c6.
> 
> This commit was preventing container startup on my machine, making them
> all fail with various "No such file or directory" errors.
> 
> Signed-off-by: Stéphane Graber <stgra...@ubuntu.com>

Was directly applied to the staging branch as the issue was preventing
regular use of LXC.

> ---
>  src/lxc/utils.c | 48 +++++++++++++++++++++++++++++++-----------------
>  1 file changed, 31 insertions(+), 17 deletions(-)
> 
> diff --git a/src/lxc/utils.c b/src/lxc/utils.c
> index 9794553..e07ca7b 100644
> --- a/src/lxc/utils.c
> +++ b/src/lxc/utils.c
> @@ -95,25 +95,39 @@ extern int get_u16(unsigned short *val, const char *arg, 
> int base)
>       return 0;
>  }
>  
> +static int is_all_slashes(char *path)
> +{
> +     while (*path && *path == '/')
> +             path++;
> +     if (*path)
> +             return 0;
> +     return 1;
> +}
> +
>  extern int mkdir_p(char *dir, mode_t mode)
>  {
> -     char *tmp = dir;
> -     char *orig = dir;
> -     char *makeme;
> -
> -     do {
> -             dir = tmp + strspn(tmp, "/");
> -             tmp = dir + strcspn(dir, "/");
> -             makeme = strndupa(orig, dir - orig);
> -             if (*makeme) {
> -                     if (!access(makeme, F_OK))
> -                             return 0;
> -                     if (mkdir(makeme, mode)) {
> -                             SYSERROR("failed to create directory '%s'\n", 
> makeme);
> -                             return -1;
> -                     }
> -             }
> -     } while(tmp != dir);
> +     int ret;
> +     char *d;
> +
> +     if (is_all_slashes(dir))
> +             return 0;
> +
> +     d = strdup(dir);
> +     if (!d)
> +             return -1;
> +
> +     ret = mkdir_p(dirname(d), mode);
> +     free(d);
> +     if (ret)
> +             return -1;
> +
> +     if (!access(dir, F_OK))
> +             return 0;
> +
> +     if (mkdir(dir, mode)) {
> +             SYSERROR("failed to create directory '%s'\n", dir);
> +             return -1;
> +     }
>  
>       return 0;
>  }
> 


-- 
Stéphane Graber
Ubuntu developer
http://www.ubuntu.com

Attachment: signature.asc
Description: OpenPGP digital signature

------------------------------------------------------------------------------
Precog is a next-generation analytics platform capable of advanced
analytics on semi-structured data. The platform includes APIs for building
apps and a phenomenal toolset for data science. Developers can use
our toolset for easy data analysis & visualization. Get a free account!
http://www2.precog.com/precogplatform/slashdotnewsletter
_______________________________________________
Lxc-devel mailing list
Lxc-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/lxc-devel

Reply via email to