[sheepdog] [PATCH v4 2/7] util: add a helper to purge directory

Liu Yuan namei.unix at gmail.com
Tue Mar 12 07:00:16 CET 2013


From: Liu Yuan <tailai.ly at taobao.com>

This is preparation patch for md series.

Signed-off-by: Liu Yuan <tailai.ly at taobao.com>
---
 include/util.h |    1 +
 lib/util.c     |   20 +++++++++++++++-----
 2 files changed, 16 insertions(+), 5 deletions(-)

diff --git a/include/util.h b/include/util.h
index 3307d7e..eae4e9a 100644
--- a/include/util.h
+++ b/include/util.h
@@ -84,6 +84,7 @@ ssize_t xpread(int fd, void *buf, size_t count, off_t offset);
 ssize_t xpwrite(int fd, const void *buf, size_t count, off_t offset);
 void pstrcpy(char *buf, int buf_size, const char *str);
 int rmdir_r(char *dir_path);
+int purge_directory(char *dir_path);
 bool is_numeric(const char *p);
 int install_sighandler(int signum, void (*handler)(int), bool once);
 int install_crash_handler(void (*handler)(int));
diff --git a/lib/util.c b/lib/util.c
index 41396da..323779a 100644
--- a/lib/util.c
+++ b/lib/util.c
@@ -255,10 +255,10 @@ void notrace pstrcpy(char *buf, int buf_size, const char *str)
 	*q = '\0';
 }
 
-/* remove directory recursively */
-int rmdir_r(char *dir_path)
+/* Purge directory recursively */
+int purge_directory(char *dir_path)
 {
-	int ret;
+	int ret = 0;
 	struct stat s;
 	DIR *dir;
 	struct dirent *d;
@@ -293,13 +293,23 @@ int rmdir_r(char *dir_path)
 			goto out;
 		}
 	}
-
-	ret = rmdir(dir_path);
 out:
 	closedir(dir);
 	return ret;
 }
 
+/* remove directory recursively */
+int rmdir_r(char *dir_path)
+{
+	int ret;
+
+	ret = purge_directory(dir_path);
+	if (ret == 0)
+		ret = rmdir(dir_path);
+
+	return ret;
+}
+
 /* Trim zero sectors from the beginning and end of buffer */
 void trim_zero_sectors(void *buf, uint64_t *offset, uint32_t *len)
 {
-- 
1.7.9.5




More information about the sheepdog mailing list