if (!strcmp(bdev->type, "overlay") || !strcmp(bdev->type, "overlayfs"))
flags |= LXC_STORAGE_INTERNAL_OVERLAY_RESTORE;
- rest = lxcapi_clone(snap, newname, c->config_path, flags,
- bdev->type, NULL, 0, NULL);
+ rest = lxcapi_clone(snap, newname, c->config_path, flags, bdev->type,
+ NULL, 0, NULL);
storage_put(bdev);
if (rest && lxcapi_is_defined(rest))
b = true;
return -22;
}
- nsrc = strchr(osrc, ':') + 1;
- if ((nsrc != osrc + 8) && (nsrc != osrc + 10)) {
- ERROR("Detected \":\" in \"%s\" at wrong position", osrc);
- free(osrc);
- return -22;
- }
+ nsrc = osrc;
+ if (strncmp(osrc, "overlay:", 8) == 0)
+ nsrc += 8;
+ else if (strncmp(osrc, "overlayfs:", 10) == 0)
+ nsrc += 10;
odelta = strchr(nsrc, ':');
if (!odelta) {
int ovl_destroy(struct lxc_storage *orig)
{
- bool ovl;
char *upper = orig->src;
- ovl = !strncmp(upper, "overlay:", 8);
- if (!ovl && strncmp(upper, "overlayfs:", 10))
- return -22;
-
/* For an overlay container the rootfs is considered immutable
* and cannot be removed when restoring from a snapshot.
*/
if (orig->flags & LXC_STORAGE_INTERNAL_OVERLAY_RESTORE)
return 0;
- if (ovl)
+ if (strncmp(upper, "overlay:", 8) == 0)
upper += 8;
- else
+ else if (strncmp(upper, "overlayfs:", 10) == 0)
upper += 10;
upper = strchr(upper, ':');
bool ovl_detect(const char *path)
{
- if (!strncmp(path, "overlayfs:", 10))
+ if (!strncmp(path, "overlay:", 8))
return true;
- if (!strncmp(path, "overlay:", 8))
+ if (!strncmp(path, "overlayfs:", 10))
return true;
return false;
ERROR("Failed to allocate memory");
return -1;
}
+ upper = dup;
+ lower = dup;
- /* support multiple lower layers */
- lower = strstr(dup, ":/");
- if (!lower) {
- ERROR("Failed to detect \":/\" in string \"%s\"", dup);
- free(dup);
- return -22;
- }
+ if (strncmp(dup, "overlay:", 8) == 0)
+ lower += 8;
+ else if (strncmp(dup, "overlayfs:", 10) == 0)
+ lower += 10;
+ if (upper != lower)
+ upper = lower;
- lower++;
- upper = lower;
- while ((tmp = strstr(++upper, ":/"))) {
+ /* support multiple lower layers */
+ while ((tmp = strstr(upper, ":/"))) {
+ tmp++;
upper = tmp;
}
size_t i;
struct lxc_storage *bdev;
- for (i = 0; i < numbdevs; i++) {
+ for (i = 0; i < numbdevs; i++)
if (strcmp(bdevs[i].name, type) == 0)
break;
- }
if (i == numbdevs)
return NULL;
bdev->ops = bdevs[i].ops;
bdev->type = bdevs[i].name;
- if (!strcmp(bdev->type, "aufs"))
+ if (strcmp(bdev->type, "aufs") == 0)
WARN("The \"aufs\" driver will is deprecated and will soon be "
"removed. For similar functionality see the \"overlay\" "
"storage driver");
const char *cname,
struct bdev_specs *specs)
{
-
+ int ret;
struct lxc_storage *bdev;
if (!type)
if (!bdev)
return NULL;
- if (bdev->ops->create(bdev, dest, cname, specs) < 0) {
+ ret = bdev->ops->create(bdev, dest, cname, specs);
+ if (ret < 0) {
storage_put(bdev);
return NULL;
}