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)
{
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'},
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:
}
}
}
-
-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;
-}
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;
+}
/* 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 */