From: Christian Brauner Date: Fri, 12 Jan 2018 13:39:21 +0000 (+0100) Subject: tools: move lxc-destroy to API symbols only X-Git-Tag: lxc-3.0.0.beta1~36^2~17 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=e3347eef56460e72b896c696ae9e5a81e5ecb0f2;p=thirdparty%2Flxc.git tools: move lxc-destroy to API symbols only Closes #2073. Signed-off-by: Christian Brauner --- diff --git a/src/lxc/tools/lxc_destroy.c b/src/lxc/tools/lxc_destroy.c index 1c3f7dc50..48484a6be 100644 --- a/src/lxc/tools/lxc_destroy.c +++ b/src/lxc/tools/lxc_destroy.c @@ -18,19 +18,18 @@ */ #define _GNU_SOURCE -#include "config.h" - +#include #include #include +#include #include +#include #include #include #include "arguments.h" -#include "log.h" -#include "lxc.h" -#include "utils.h" +#include "tool_utils.h" static int my_parser(struct lxc_arguments* args, int c, char* arg); static bool quiet; @@ -83,7 +82,7 @@ int main(int argc, char *argv[]) if (lxc_log_init(&log)) exit(EXIT_FAILURE); - lxc_log_options_no_override(); + if (my_args.quiet) quiet = true; @@ -155,11 +154,11 @@ static int my_parser(struct lxc_arguments *args, int c, char *arg) static bool do_destroy(struct lxc_container *c) { bool bret = true; - char path[MAXPATHLEN]; + char path[TOOL_MAXPATHLEN]; /* First check whether the container has dependent clones or snapshots. */ - int ret = snprintf(path, MAXPATHLEN, "%s/%s/lxc_snapshots", c->config_path, c->name); - if (ret < 0 || ret >= MAXPATHLEN) + int ret = snprintf(path, TOOL_MAXPATHLEN, "%s/%s/lxc_snapshots", c->config_path, c->name); + if (ret < 0 || ret >= TOOL_MAXPATHLEN) return false; if (file_exists(path)) { @@ -168,8 +167,8 @@ static bool do_destroy(struct lxc_container *c) return false; } - ret = snprintf(path, MAXPATHLEN, "%s/%s/snaps", c->config_path, c->name); - if (ret < 0 || ret >= MAXPATHLEN) + ret = snprintf(path, TOOL_MAXPATHLEN, "%s/%s/snaps", c->config_path, c->name); + if (ret < 0 || ret >= TOOL_MAXPATHLEN) return false; if (rmdir(path) < 0 && errno != ENOENT) { @@ -189,8 +188,13 @@ static bool do_destroy(struct lxc_container *c) /* If the container was ephemeral we have already removed it when we * stopped it. */ - if (c->is_defined(c) && !c->lxc_conf->ephemeral) - bret = c->destroy(c); + 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); + } + } if (!bret) { if (!quiet) @@ -206,7 +210,7 @@ static bool do_destroy_with_snapshots(struct lxc_container *c) struct lxc_container *c1; struct stat fbuf; bool bret = false; - char path[MAXPATHLEN]; + char path[TOOL_MAXPATHLEN]; char *buf = NULL; char *lxcpath = NULL; char *lxcname = NULL; @@ -216,8 +220,8 @@ static bool do_destroy_with_snapshots(struct lxc_container *c) int counter = 0; /* Destroy clones. */ - ret = snprintf(path, MAXPATHLEN, "%s/%s/lxc_snapshots", c->config_path, c->name); - if (ret < 0 || ret >= MAXPATHLEN) + ret = snprintf(path, TOOL_MAXPATHLEN, "%s/%s/lxc_snapshots", c->config_path, c->name); + if (ret < 0 || ret >= TOOL_MAXPATHLEN) return false; fd = open(path, O_RDONLY | O_CLOEXEC); @@ -268,8 +272,8 @@ static bool do_destroy_with_snapshots(struct lxc_container *c) } /* Destroy snapshots located in the containers snap/ folder. */ - ret = snprintf(path, MAXPATHLEN, "%s/%s/snaps", c->config_path, c->name); - if (ret < 0 || ret >= MAXPATHLEN) + ret = snprintf(path, TOOL_MAXPATHLEN, "%s/%s/snaps", c->config_path, c->name); + if (ret < 0 || ret >= TOOL_MAXPATHLEN) return false; if (rmdir(path) < 0 && errno != ENOENT) diff --git a/src/lxc/tools/tool_utils.c b/src/lxc/tools/tool_utils.c index 94f118e63..e50f50273 100644 --- a/src/lxc/tools/tool_utils.c +++ b/src/lxc/tools/tool_utils.c @@ -596,3 +596,10 @@ int mkdir_p(const char *dir, mode_t mode) return 0; } + +bool file_exists(const char *f) +{ + struct stat statbuf; + + return stat(f, &statbuf) == 0; +} diff --git a/src/lxc/tools/tool_utils.h b/src/lxc/tools/tool_utils.h index 02b2eedd0..4c9b43a28 100644 --- a/src/lxc/tools/tool_utils.h +++ b/src/lxc/tools/tool_utils.h @@ -140,6 +140,7 @@ extern char *lxc_string_join(const char *sep, const char **parts, bool use_as_prefix); 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 char *get_template_path(const char *t);