aboutsummaryrefslogtreecommitdiffstats
path: root/e-util/e-path.c
diff options
context:
space:
mode:
authorDan Winship <danw@src.gnome.org>2002-08-23 00:10:47 +0800
committerDan Winship <danw@src.gnome.org>2002-08-23 00:10:47 +0800
commitf726a2a5d842b04614ff19aa22d7d9a6c3bd1295 (patch)
tree7546d8303c7acdb297baaae36b43b15b1436b482 /e-util/e-path.c
parentcd45f4c5902b80d9b1acbd6d1ea6e483b94c7c96 (diff)
downloadgsoc2013-evolution-f726a2a5d842b04614ff19aa22d7d9a6c3bd1295.tar
gsoc2013-evolution-f726a2a5d842b04614ff19aa22d7d9a6c3bd1295.tar.gz
gsoc2013-evolution-f726a2a5d842b04614ff19aa22d7d9a6c3bd1295.tar.bz2
gsoc2013-evolution-f726a2a5d842b04614ff19aa22d7d9a6c3bd1295.tar.lz
gsoc2013-evolution-f726a2a5d842b04614ff19aa22d7d9a6c3bd1295.tar.xz
gsoc2013-evolution-f726a2a5d842b04614ff19aa22d7d9a6c3bd1295.tar.zst
gsoc2013-evolution-f726a2a5d842b04614ff19aa22d7d9a6c3bd1295.zip
Remove an e_path directory, and its parent "subfolders" dir if it's now
* e-path.c (e_path_rmdir): Remove an e_path directory, and its parent "subfolders" dir if it's now empty. svn path=/trunk/; revision=17837
Diffstat (limited to 'e-util/e-path.c')
-rw-r--r--e-util/e-path.c48
1 files changed, 48 insertions, 0 deletions
diff --git a/e-util/e-path.c b/e-util/e-path.c
index 06ac05ef25..06b75686b1 100644
--- a/e-util/e-path.c
+++ b/e-util/e-path.c
@@ -23,6 +23,7 @@
#include <dirent.h>
#include <string.h>
#include <sys/stat.h>
+#include <unistd.h>
#include <glib.h>
#include "e-path.h"
@@ -204,3 +205,50 @@ e_path_find_folders (const char *prefix,
{
return find_folders_recursive (prefix, "", callback, data);
}
+
+
+/**
+ * e_path_rmdir:
+ * @prefix: a prefix to prepend to the path, or %NULL
+ * @path: the virtual path to convert to a filesystem path.
+ *
+ * This removes the directory pointed to by @prefix and @path
+ * and attempts to remove its parent "subfolders" directory too
+ * if it's empty.
+ *
+ * Return value: -1 (with errno set) if it failed to rmdir the
+ * specified directory. 0 otherwise, whether or not it removed
+ * the parent directory.
+ **/
+int
+e_path_rmdir (const char *prefix, const char *vpath)
+{
+ char *physical_path, *p;
+
+ /* Remove the directory itself */
+ physical_path = e_path_to_physical (prefix, vpath);
+ if (rmdir (physical_path) == -1) {
+ g_free (physical_path);
+ return -1;
+ }
+
+ /* Attempt to remove its parent "subfolders" directory,
+ * ignoring errors since it might not be empty.
+ */
+
+ p = strrchr (physical_path, '/');
+ if (p[1] == '\0') {
+ g_free (physical_path);
+ return 0;
+ }
+ *p = '\0';
+ p = strrchr (physical_path, '/');
+ if (!p || strcmp (p + 1, SUBFOLDER_DIR_NAME) != 0) {
+ g_free (physical_path);
+ return 0;
+ }
+
+ rmdir (physical_path);
+ g_free (physical_path);
+ return 0;
+}