Fix: recursive_rmdir: empty all empty subdir
authorMathieu Desnoyers <mathieu.desnoyers@efficios.com>
Thu, 18 Dec 2014 03:28:04 +0000 (22:28 -0500)
committerJérémie Galarneau <jeremie.galarneau@efficios.com>
Thu, 26 Mar 2015 22:07:42 +0000 (18:07 -0400)
Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
Signed-off-by: Jérémie Galarneau <jeremie.galarneau@efficios.com>
src/common/utils.c

index f9e6a99eafeec26afa4c7640f8a8d5a2c64178b1..4b733fb5cc346ead97b928809c9056eb42290904 100644 (file)
@@ -1062,13 +1062,13 @@ end:
 
 /*
  * Try to remove a hierarchy of empty directories, recursively. Don't unlink
- * any file.
+ * any file. Try to rmdir any empty directory within the hierarchy.
  */
 LTTNG_HIDDEN
 int utils_recursive_rmdir(const char *path)
 {
        DIR *dir;
-       int dir_fd, ret = 0, closeret;
+       int dir_fd, ret = 0, closeret, is_empty = 1;
        struct dirent *entry;
 
        /* Open directory */
@@ -1098,15 +1098,14 @@ int utils_recursive_rmdir(const char *path)
                                PATH_MAX - strlen(subpath) - 1);
                        strncat(subpath, entry->d_name,
                                PATH_MAX - strlen(subpath) - 1);
-                       ret = utils_recursive_rmdir(subpath);
-                       if (ret) {
-                               goto end;
+                       if (utils_recursive_rmdir(subpath)) {
+                               is_empty = 0;
                        }
                        break;
                }
                case DT_REG:
-                       ret = -EBUSY;
-                       goto end;
+                       is_empty = 0;
+                       break;
                default:
                        ret = -EINVAL;
                        goto end;
@@ -1117,7 +1116,7 @@ end:
        if (closeret) {
                PERROR("closedir");
        }
-       if (!ret) {
+       if (is_empty) {
                DBG3("Attempting rmdir %s", path);
                ret = rmdir(path);
        }
This page took 0.027976 seconds and 4 git commands to generate.