[lxc-devel] [lxc/master] utils: move recursive_destroy() from cfgsng to utils.

2xsec on Github lxc-bot at linuxcontainers.org
Tue Jul 3 05:47:08 UTC 2018


A non-text attachment was scrubbed...
Name: not available
Type: text/x-mailbox
Size: 450 bytes
Desc: not available
URL: <http://lists.linuxcontainers.org/pipermail/lxc-devel/attachments/20180703/c422e7be/attachment.bin>
-------------- next part --------------
From d7ab03757c2d192d101e06ae1bbf3fc7df3735ec Mon Sep 17 00:00:00 2001
From: 2xsec <dh48.jeong at samsung.com>
Date: Tue, 3 Jul 2018 14:44:24 +0900
Subject: [PATCH] utils: move recursive_destroy() from cfgsng to utils.

Signed-off-by: 2xsec <dh48.jeong at samsung.com>
---
 src/lxc/cgroups/cgfsng.c | 56 --------------------------------------------
 src/lxc/tools/lxc_ls.c   | 55 ++++----------------------------------------
 src/lxc/utils.c          | 60 ++++++++++++++++++++++++++++++++++++++++++++++++
 src/lxc/utils.h          |  1 +
 4 files changed, 65 insertions(+), 107 deletions(-)

diff --git a/src/lxc/cgroups/cgfsng.c b/src/lxc/cgroups/cgfsng.c
index b514a7bb6..3cc9f9f62 100644
--- a/src/lxc/cgroups/cgfsng.c
+++ b/src/lxc/cgroups/cgfsng.c
@@ -1040,62 +1040,6 @@ static void lxc_cgfsng_print_basecg_debuginfo(char *basecginfo, char **klist,
 		TRACE("named subsystem %d: %s", k, *it);
 }
 
-static int recursive_destroy(char *dirname)
-{
-	int ret;
-	struct dirent *direntp;
-	DIR *dir;
-	int r = 0;
-
-	dir = opendir(dirname);
-	if (!dir)
-		return -1;
-
-	while ((direntp = readdir(dir))) {
-		char *pathname;
-		struct stat mystat;
-
-		if (!strcmp(direntp->d_name, ".") ||
-		    !strcmp(direntp->d_name, ".."))
-			continue;
-
-		pathname = must_make_path(dirname, direntp->d_name, NULL);
-
-		ret = lstat(pathname, &mystat);
-		if (ret < 0) {
-			if (!r)
-				WARN("Failed to stat \"%s\"", pathname);
-			r = -1;
-			goto next;
-		}
-
-		if (!S_ISDIR(mystat.st_mode))
-			goto next;
-
-		ret = recursive_destroy(pathname);
-		if (ret < 0)
-			r = -1;
-	next:
-		free(pathname);
-	}
-
-	ret = rmdir(dirname);
-	if (ret < 0) {
-		if (!r)
-			SYSWARN("Failed to delete \"%s\"", dirname);
-		r = -1;
-	}
-
-	ret = closedir(dir);
-	if (ret < 0) {
-		if (!r)
-			SYSWARN("Failed to delete \"%s\"", dirname);
-		r = -1;
-	}
-
-	return r;
-}
-
 static int cgroup_rmdir(struct hierarchy **hierarchies,
 			const char *container_cgroup)
 {
diff --git a/src/lxc/tools/lxc_ls.c b/src/lxc/tools/lxc_ls.c
index 475dcfdfe..bba72e8d5 100644
--- a/src/lxc/tools/lxc_ls.c
+++ b/src/lxc/tools/lxc_ls.c
@@ -160,8 +160,6 @@ static int ls_remove_lock(const char *path, const char *name,
 static int ls_serialize(int wpipefd, struct ls *n);
 static int my_parser(struct lxc_arguments *args, int c, char *arg);
 
-static int rm_r(char *dirname);
-
 static const struct option my_longopts[] = {
 	{"line", no_argument, 0, '1'},
 	{"fancy", no_argument, 0, 'f'},
@@ -1088,7 +1086,10 @@ static int ls_remove_lock(const char *path, const char *name,
 	if (check < 0 || (size_t)check >= *len_lockpath)
 		goto out;
 
-	(void)rm_r(*lockpath);
+	ret = recursive_destroy(*lockpath);
+	if (ret < 0)
+		WARN("Failed to destroy \"%s\"", *lockpath);
+
 	ret = 0;
 
 out:
@@ -1323,51 +1324,3 @@ static void ls_field_width(const struct ls *l, const size_t size,
 		}
 	}
 }
-
-static int rm_r(char *dirname)
-{
-	int ret;
-	struct dirent *direntp;
-	DIR *dir;
-	int r = 0;
-
-	dir = opendir(dirname);
-	if (!dir)
-		return -1;
-
-	while ((direntp = readdir(dir))) {
-		char *pathname;
-		struct stat mystat;
-
-		if (!strcmp(direntp->d_name, ".") ||
-		    !strcmp(direntp->d_name, ".."))
-			continue;
-
-		pathname = must_make_path(dirname, direntp->d_name, NULL);
-
-		ret = lstat(pathname, &mystat);
-		if (ret < 0) {
-			r = -1;
-			goto next;
-		}
-
-		if (!S_ISDIR(mystat.st_mode))
-			goto next;
-
-		ret = rm_r(pathname);
-		if (ret < 0)
-			r = -1;
-	next:
-		free(pathname);
-	}
-
-	ret = rmdir(dirname);
-	if (ret < 0)
-		r = -1;
-
-	ret = closedir(dir);
-	if (ret < 0)
-		r = -1;
-
-	return r;
-}
diff --git a/src/lxc/utils.c b/src/lxc/utils.c
index fb7ae2023..e2ee8229d 100644
--- a/src/lxc/utils.c
+++ b/src/lxc/utils.c
@@ -2708,3 +2708,63 @@ int fd_cloexec(int fd, bool cloexec)
 
 	return 0;
 }
+
+int recursive_destroy(char *dirname)
+{
+	int ret;
+	struct dirent *direntp;
+	DIR *dir;
+	int r = 0;
+
+	dir = opendir(dirname);
+	if (!dir)
+		return -1;
+
+	while ((direntp = readdir(dir))) {
+		char *pathname;
+		struct stat mystat;
+
+		if (!strcmp(direntp->d_name, ".") ||
+		    !strcmp(direntp->d_name, ".."))
+			continue;
+
+		pathname = must_make_path(dirname, direntp->d_name, NULL);
+
+		ret = lstat(pathname, &mystat);
+		if (ret < 0) {
+			if (!r)
+				WARN("Failed to stat \"%s\"", pathname);
+
+			r = -1;
+			goto next;
+		}
+
+		if (!S_ISDIR(mystat.st_mode))
+			goto next;
+
+		ret = recursive_destroy(pathname);
+		if (ret < 0)
+			r = -1;
+
+	next:
+		free(pathname);
+	}
+
+	ret = rmdir(dirname);
+	if (ret < 0) {
+		if (!r)
+			SYSWARN("Failed to delete \"%s\"", dirname);
+
+		r = -1;
+	}
+
+	ret = closedir(dir);
+	if (ret < 0) {
+		if (!r)
+			SYSWARN("Failed to delete \"%s\"", dirname);
+
+		r = -1;
+	}
+
+	return r;
+}
diff --git a/src/lxc/utils.h b/src/lxc/utils.h
index 4a748cd1b..295e7862c 100644
--- a/src/lxc/utils.h
+++ b/src/lxc/utils.h
@@ -616,5 +616,6 @@ static inline pid_t lxc_raw_gettid(void)
 /* Set a signal the child process will receive after the parent has died. */
 extern int lxc_set_death_signal(int signal);
 extern int fd_cloexec(int fd, bool cloexec);
+extern int recursive_destroy(char *dirname);
 
 #endif /* __LXC_UTILS_H */


More information about the lxc-devel mailing list