}
}
-static bool get_snappath_dir(struct lxc_container *c, char *snappath)
-{
- int ret;
- /*
- * If the old style snapshot path exists, use it
- * /var/lib/lxc -> /var/lib/lxcsnaps
- */
- ret = snprintf(snappath, MAXPATHLEN, "%ssnaps", c->config_path);
- if (ret < 0 || ret >= MAXPATHLEN)
- return false;
- if (dir_exists(snappath)) {
- ret = snprintf(snappath, MAXPATHLEN, "%ssnaps/%s", c->config_path, c->name);
- if (ret < 0 || ret >= MAXPATHLEN)
- return false;
- return true;
- }
-
- /*
- * Use the new style path
- * /var/lib/lxc -> /var/lib/lxc + /lxcsnaps/ + c->name + \0
- */
- ret = snprintf(snappath, MAXPATHLEN, "%s/lxcsnaps/%s", c->config_path, c->name);
- if (ret < 0 || ret >= MAXPATHLEN)
- return false;
- return true;
-}
-
static int lxcapi_snapshot(struct lxc_container *c, const char *commentfile)
{
int i, flags, ret;
struct lxc_container *c2;
char snappath[MAXPATHLEN], newname[20];
- if (!get_snappath_dir(c, snappath)) {
+ // /var/lib/lxc -> /var/lib/lxcsnaps \0
+ ret = snprintf(snappath, MAXPATHLEN, "%ssnaps/%s", c->config_path, c->name);
+ if (ret < 0 || ret >= MAXPATHLEN)
return -1;
- }
i = get_next_index(snappath, c->name);
if (mkdir_p(snappath, 0755) < 0) {
static int lxcapi_snapshot_list(struct lxc_container *c, struct lxc_snapshot **ret_snaps)
{
char snappath[MAXPATHLEN], path2[MAXPATHLEN];
- int count = 0, ret;
+ int dirlen, count = 0, ret;
struct dirent dirent, *direntp;
struct lxc_snapshot *snaps =NULL, *nsnaps;
DIR *dir;
if (!c || !lxcapi_is_defined(c))
return -1;
- if (!get_snappath_dir(c, snappath)) {
+ // snappath is ${lxcpath}snaps/${lxcname}/
+ dirlen = snprintf(snappath, MAXPATHLEN, "%ssnaps/%s", c->config_path, c->name);
+ if (dirlen < 0 || dirlen >= MAXPATHLEN) {
ERROR("path name too long");
return -1;
}
static bool lxcapi_snapshot_restore(struct lxc_container *c, const char *snapname, const char *newname)
{
char clonelxcpath[MAXPATHLEN];
- int flags = 0;
+ int flags = 0,ret;
struct lxc_container *snap, *rest;
struct bdev *bdev;
bool b = false;
return false;
}
}
- if (!get_snappath_dir(c, clonelxcpath)) {
+ ret = snprintf(clonelxcpath, MAXPATHLEN, "%ssnaps/%s", c->config_path, c->name);
+ if (ret < 0 || ret >= MAXPATHLEN) {
bdev_put(bdev);
return false;
}
{
struct lxc_container *c;
- if (!name)
- return NULL;
-
- if (strcmp(name, "lxcsnaps") == 0)
- return NULL;
-
c = malloc(sizeof(*c));
if (!c) {
fprintf(stderr, "failed to malloc lxc_container\n");
* \brief Create a container snapshot.
*
* Assuming default paths, snapshots will be created as
- * \c /var/lib/lxc/lxcsnaps/\<c\>/snap\<n\>
+ * \c /var/lib/lxcsnaps/\<c\>/snap\<n\>
* where \c \<c\> represents the container name and \c \<n\>
* represents the zero-based snapshot number.
*
* fail if the snapshot is overlay-based, since the snapshots
* will pin the original container.
* \note As an example, if the container exists as \c /var/lib/lxc/c1, snapname might be \c 'snap0'
- * (representing \c /var/lib/lxc/lxcsnaps/c1/snap0). If \p newname is \p c2,
+ * (representing \c /var/lib/lxcsnaps/c1/snap0). If \p newname is \p c2,
* then \c snap0 will be copied to \c /var/lib/lxc/c2.
*/
bool (*snapshot_restore)(struct lxc_container *c, const char *snapname, const char *newname);