const char *cname, const char *oldpath, const char *lxcpath,
int snap, uint64_t newsize, struct lxc_conf *conf)
{
- int ret;
- size_t len;
+ int len, ret;
if (snap) {
ERROR("directories cannot be snapshotted. Try aufs or overlayfs.");
if (!orig->dest || !orig->src)
return -1;
- len = strlen(lxcpath) + strlen(cname) + strlen("rootfs") + 4 + 3;
+ len = strlen(lxcpath) + strlen(cname) + strlen("rootfs") + 3;
new->src = malloc(len);
if (!new->src)
return -1;
-
- ret = snprintf(new->src, len, "dir:%s/%s/rootfs", lxcpath, cname);
- if (ret < 0 || (size_t)ret >= len)
+ ret = snprintf(new->src, len, "%s/%s/rootfs", lxcpath, cname);
+ if (ret < 0 || ret >= len)
return -1;
-
- new->dest = strdup(new->src + 4);
- if (!new->dest)
+ if ((new->dest = strdup(new->src)) == NULL)
return -1;
return 0;
}
int dir_create(struct bdev *bdev, const char *dest, const char *n,
- struct bdev_specs *specs)
+ struct bdev_specs *specs)
{
- int ret;
- const char *src;
- size_t len;
-
- /* strlen("dir:") */
- len = 4;
if (specs && specs->dir)
- src = specs->dir;
+ bdev->src = strdup(specs->dir);
else
- src = dest;
-
- len += strlen(src) + 1;
- bdev->src = malloc(len);
- if (!bdev->src)
- return -1;
-
- ret = snprintf(bdev->src, len, "dir:%s", src);
- if (ret < 0 || (size_t)ret >= len)
- return -1;
-
+ bdev->src = strdup(dest);
bdev->dest = strdup(dest);
- if (!bdev->dest)
+ if (!bdev->src || !bdev->dest) {
+ ERROR("Out of memory");
return -1;
+ }
- ret = mkdir_p(src, 0755);
- if (ret < 0) {
- ERROR("Failed to create %s", src);
+ if (mkdir_p(bdev->src, 0755) < 0) {
+ ERROR("Error creating %s", bdev->src);
return -1;
}
-
- ret = mkdir_p(bdev->dest, 0755);
- if (ret < 0) {
- ERROR("Failed to create %s", bdev->dest);
+ if (mkdir_p(bdev->dest, 0755) < 0) {
+ ERROR("Error creating %s", bdev->dest);
return -1;
}
int dir_destroy(struct bdev *orig)
{
- char *src;
-
- src = lxc_storage_get_path(orig->src, orig->src);
-
- if (lxc_rmdir_onedev(src, NULL) < 0)
+ if (lxc_rmdir_onedev(orig->src, NULL) < 0)
return -1;
-
return 0;
}
return 1; // take their word for it
if (is_dir(path))
return 1;
-
return 0;
}
int dir_mount(struct bdev *bdev)
{
unsigned long mntflags;
- char *src, *mntdata;
+ char *mntdata;
int ret;
unsigned long mflags;
if (strcmp(bdev->type, "dir"))
return -22;
-
if (!bdev->src || !bdev->dest)
return -22;
return -22;
}
- src = lxc_storage_get_path(bdev->src, bdev->type);
-
- ret = mount(src, bdev->dest, "bind", MS_BIND | MS_REC | mntflags, mntdata);
+ ret = mount(bdev->src, bdev->dest, "bind", MS_BIND | MS_REC | mntflags, mntdata);
if ((0 == ret) && (mntflags & MS_RDONLY)) {
DEBUG("remounting %s on %s with readonly options",
- src ? src : "(none)", bdev->dest ? bdev->dest : "(none)");
- mflags = add_required_remount_flags(src, bdev->dest, MS_BIND | MS_REC | mntflags | MS_REMOUNT);
- ret = mount(src, bdev->dest, "bind", mflags, mntdata);
+ bdev->src ? bdev->src : "(none)", bdev->dest ? bdev->dest : "(none)");
+ mflags = add_required_remount_flags(bdev->src, bdev->dest, MS_BIND | MS_REC | mntflags | MS_REMOUNT);
+ ret = mount(bdev->src, bdev->dest, "bind", mflags, mntdata);
}
free(mntdata);
{
if (strcmp(bdev->type, "dir"))
return -22;
-
if (!bdev->src || !bdev->dest)
return -22;
-
return umount(bdev->dest);
}