tools: move lxc-destroy to API symbols only

Closes #2073. Signed-off-by: 's avatarChristian Brauner <christian.brauner@ubuntu.com>
parent e6294545
...@@ -18,19 +18,18 @@ ...@@ -18,19 +18,18 @@
*/ */
#define _GNU_SOURCE #define _GNU_SOURCE
#include "config.h" #include <fcntl.h>
#include <libgen.h> #include <libgen.h>
#include <stdio.h> #include <stdio.h>
#include <string.h>
#include <unistd.h> #include <unistd.h>
#include <sys/stat.h>
#include <sys/types.h> #include <sys/types.h>
#include <lxc/lxccontainer.h> #include <lxc/lxccontainer.h>
#include "arguments.h" #include "arguments.h"
#include "log.h" #include "tool_utils.h"
#include "lxc.h"
#include "utils.h"
static int my_parser(struct lxc_arguments* args, int c, char* arg); static int my_parser(struct lxc_arguments* args, int c, char* arg);
static bool quiet; static bool quiet;
...@@ -83,7 +82,7 @@ int main(int argc, char *argv[]) ...@@ -83,7 +82,7 @@ int main(int argc, char *argv[])
if (lxc_log_init(&log)) if (lxc_log_init(&log))
exit(EXIT_FAILURE); exit(EXIT_FAILURE);
lxc_log_options_no_override();
if (my_args.quiet) if (my_args.quiet)
quiet = true; quiet = true;
...@@ -155,11 +154,11 @@ static int my_parser(struct lxc_arguments *args, int c, char *arg) ...@@ -155,11 +154,11 @@ static int my_parser(struct lxc_arguments *args, int c, char *arg)
static bool do_destroy(struct lxc_container *c) static bool do_destroy(struct lxc_container *c)
{ {
bool bret = true; bool bret = true;
char path[MAXPATHLEN]; char path[TOOL_MAXPATHLEN];
/* First check whether the container has dependent clones or snapshots. */ /* First check whether the container has dependent clones or snapshots. */
int ret = snprintf(path, MAXPATHLEN, "%s/%s/lxc_snapshots", c->config_path, c->name); int ret = snprintf(path, TOOL_MAXPATHLEN, "%s/%s/lxc_snapshots", c->config_path, c->name);
if (ret < 0 || ret >= MAXPATHLEN) if (ret < 0 || ret >= TOOL_MAXPATHLEN)
return false; return false;
if (file_exists(path)) { if (file_exists(path)) {
...@@ -168,8 +167,8 @@ static bool do_destroy(struct lxc_container *c) ...@@ -168,8 +167,8 @@ static bool do_destroy(struct lxc_container *c)
return false; return false;
} }
ret = snprintf(path, MAXPATHLEN, "%s/%s/snaps", c->config_path, c->name); ret = snprintf(path, TOOL_MAXPATHLEN, "%s/%s/snaps", c->config_path, c->name);
if (ret < 0 || ret >= MAXPATHLEN) if (ret < 0 || ret >= TOOL_MAXPATHLEN)
return false; return false;
if (rmdir(path) < 0 && errno != ENOENT) { if (rmdir(path) < 0 && errno != ENOENT) {
...@@ -189,8 +188,13 @@ static bool do_destroy(struct lxc_container *c) ...@@ -189,8 +188,13 @@ static bool do_destroy(struct lxc_container *c)
/* If the container was ephemeral we have already removed it when we /* If the container was ephemeral we have already removed it when we
* stopped it. */ * stopped it. */
if (c->is_defined(c) && !c->lxc_conf->ephemeral) if (c->is_defined(c)) {
char buf[256];
ret = c->get_config_item(c, "lxc.ephemeral", buf, 256);
if (ret > 0 && strcmp(buf, "0") == 0) {
bret = c->destroy(c); bret = c->destroy(c);
}
}
if (!bret) { if (!bret) {
if (!quiet) if (!quiet)
...@@ -206,7 +210,7 @@ static bool do_destroy_with_snapshots(struct lxc_container *c) ...@@ -206,7 +210,7 @@ static bool do_destroy_with_snapshots(struct lxc_container *c)
struct lxc_container *c1; struct lxc_container *c1;
struct stat fbuf; struct stat fbuf;
bool bret = false; bool bret = false;
char path[MAXPATHLEN]; char path[TOOL_MAXPATHLEN];
char *buf = NULL; char *buf = NULL;
char *lxcpath = NULL; char *lxcpath = NULL;
char *lxcname = NULL; char *lxcname = NULL;
...@@ -216,8 +220,8 @@ static bool do_destroy_with_snapshots(struct lxc_container *c) ...@@ -216,8 +220,8 @@ static bool do_destroy_with_snapshots(struct lxc_container *c)
int counter = 0; int counter = 0;
/* Destroy clones. */ /* Destroy clones. */
ret = snprintf(path, MAXPATHLEN, "%s/%s/lxc_snapshots", c->config_path, c->name); ret = snprintf(path, TOOL_MAXPATHLEN, "%s/%s/lxc_snapshots", c->config_path, c->name);
if (ret < 0 || ret >= MAXPATHLEN) if (ret < 0 || ret >= TOOL_MAXPATHLEN)
return false; return false;
fd = open(path, O_RDONLY | O_CLOEXEC); fd = open(path, O_RDONLY | O_CLOEXEC);
...@@ -268,8 +272,8 @@ static bool do_destroy_with_snapshots(struct lxc_container *c) ...@@ -268,8 +272,8 @@ static bool do_destroy_with_snapshots(struct lxc_container *c)
} }
/* Destroy snapshots located in the containers snap/ folder. */ /* Destroy snapshots located in the containers snap/ folder. */
ret = snprintf(path, MAXPATHLEN, "%s/%s/snaps", c->config_path, c->name); ret = snprintf(path, TOOL_MAXPATHLEN, "%s/%s/snaps", c->config_path, c->name);
if (ret < 0 || ret >= MAXPATHLEN) if (ret < 0 || ret >= TOOL_MAXPATHLEN)
return false; return false;
if (rmdir(path) < 0 && errno != ENOENT) if (rmdir(path) < 0 && errno != ENOENT)
......
...@@ -596,3 +596,10 @@ int mkdir_p(const char *dir, mode_t mode) ...@@ -596,3 +596,10 @@ int mkdir_p(const char *dir, mode_t mode)
return 0; return 0;
} }
bool file_exists(const char *f)
{
struct stat statbuf;
return stat(f, &statbuf) == 0;
}
...@@ -140,6 +140,7 @@ extern char *lxc_string_join(const char *sep, const char **parts, ...@@ -140,6 +140,7 @@ extern char *lxc_string_join(const char *sep, const char **parts,
bool use_as_prefix); bool use_as_prefix);
extern int mkdir_p(const char *dir, mode_t mode); extern int mkdir_p(const char *dir, mode_t mode);
extern bool file_exists(const char *f);
extern int is_dir(const char *path); extern int is_dir(const char *path);
extern char *get_template_path(const char *t); extern char *get_template_path(const char *t);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment