dovecot-2.2: Added stat_first_parent() helper function.
dovecot at dovecot.org
dovecot at dovecot.org
Sat Jan 5 01:14:35 EET 2013
details: http://hg.dovecot.org/dovecot-2.2/rev/40f9e2e339a6
changeset: 15555:40f9e2e339a6
user: Timo Sirainen <tss at iki.fi>
date: Thu Dec 13 12:13:42 2012 +0200
description:
Added stat_first_parent() helper function.
diffstat:
src/lib/mkdir-parents.c | 20 ++++++++++++++++++++
src/lib/mkdir-parents.h | 8 ++++++++
2 files changed, 28 insertions(+), 0 deletions(-)
diffs (50 lines):
diff -r f13f2725882e -r 40f9e2e339a6 src/lib/mkdir-parents.c
--- a/src/lib/mkdir-parents.c Tue Dec 11 20:04:10 2012 +0200
+++ b/src/lib/mkdir-parents.c Thu Dec 13 12:13:42 2012 +0200
@@ -125,3 +125,23 @@
{
return mkdir_parents_chown(path, mode, (uid_t)-1, (gid_t)-1);
}
+
+int stat_first_parent(const char *path, const char **root_dir_r,
+ struct stat *st_r)
+{
+ const char *p;
+
+ while (stat(path, st_r) < 0) {
+ if (errno != ENOENT || strcmp(path, "/") == 0) {
+ *root_dir_r = path;
+ return -1;
+ }
+ p = strrchr(path, '/');
+ if (p == NULL)
+ path = "/";
+ else
+ path = t_strdup_until(path, p);
+ }
+ *root_dir_r = path;
+ return 0;
+}
diff -r f13f2725882e -r 40f9e2e339a6 src/lib/mkdir-parents.h
--- a/src/lib/mkdir-parents.h Tue Dec 11 20:04:10 2012 +0200
+++ b/src/lib/mkdir-parents.h Thu Dec 13 12:13:42 2012 +0200
@@ -1,6 +1,8 @@
#ifndef MKDIR_PARENTS_H
#define MKDIR_PARENTS_H
+#include <sys/stat.h>
+
/* Create path and all the directories under it if needed. Permissions for
existing directories isn't changed. Returns 0 if ok. If directory already
exists, returns -1 with errno=EEXIST. */
@@ -20,4 +22,10 @@
int mkdir_chgrp(const char *path, mode_t mode,
gid_t gid, const char *gid_origin);
+/* stat() the path or its first parent that exists. Returns 0 if ok, -1 if
+ failed. root_dir is set to the last stat()ed directory (on success and
+ on failure). */
+int stat_first_parent(const char *path, const char **root_dir_r,
+ struct stat *st_r);
+
#endif
More information about the dovecot-cvs
mailing list