aboutsummaryrefslogtreecommitdiffhomepage
path: root/contrib/notmuch-deliver/maildrop/maildir/maildirmkdir.c
diff options
context:
space:
mode:
authorGravatar Thomas Schwinge <thomas@schwinge.name>2010-12-29 12:00:30 +0100
committerGravatar Ali Polatel <alip@exherbo.org>2011-11-05 01:12:35 +0200
commit38b245b46a51be82a5a5f798255cbbbbc0186f78 (patch)
treed4210e76396f3d45614f329f8288e10762fad407 /contrib/notmuch-deliver/maildrop/maildir/maildirmkdir.c
parent5f53ce3e2b9704f4f2a4be92c91f82c697c15b9d (diff)
Move files copied from maildrop to a separate hierarchy.
Signed-off-by: Thomas Schwinge <thomas@schwinge.name>
Diffstat (limited to 'contrib/notmuch-deliver/maildrop/maildir/maildirmkdir.c')
-rw-r--r--contrib/notmuch-deliver/maildrop/maildir/maildirmkdir.c78
1 files changed, 78 insertions, 0 deletions
diff --git a/contrib/notmuch-deliver/maildrop/maildir/maildirmkdir.c b/contrib/notmuch-deliver/maildrop/maildir/maildirmkdir.c
new file mode 100644
index 00000000..754b2c70
--- /dev/null
+++ b/contrib/notmuch-deliver/maildrop/maildir/maildirmkdir.c
@@ -0,0 +1,78 @@
+/*
+** Copyright 2000 Double Precision, Inc.
+** See COPYING for distribution information.
+*/
+
+#if HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <string.h>
+#include <stdlib.h>
+#if HAVE_UNISTD_H
+#include <unistd.h>
+#endif
+#include <errno.h>
+
+#include "maildirmisc.h"
+
+static const char rcsid[]="$Id: maildirmkdir.c,v 1.2 2002/03/15 03:09:21 mrsam Exp $";
+
+int maildir_mkdir(const char *dir)
+{
+char *buf, *p;
+size_t l;
+
+ if (dir == 0 || dir[0] == 0)
+ {
+ errno = EINVAL;
+ return (-1);
+ }
+ l = strlen(dir);
+ if ((buf = malloc(l + sizeof("/tmp"))) == 0)
+ {
+ errno = ENOMEM;
+ return (-1);
+ }
+ strcpy(buf, dir);
+ strcpy(buf+l, "/cur");
+
+ /* We do mkdir -p here */
+
+ p = buf+1;
+ while ((p = strchr(p, '/')) != 0)
+ {
+ *p = '\0';
+ if (mkdir(buf, 0700) < 0 && errno != EEXIST)
+ {
+ free(buf);
+ return (-1);
+ }
+ *p++ = '/';
+ }
+
+ if (mkdir(buf, 0700) < 0 && errno != EEXIST) {
+ free(buf);
+ return (-1);
+ }
+ strcpy(buf+l, "/new");
+ if (mkdir(buf, 0700) < 0 && errno != EEXIST) {
+ free(buf);
+ return (-1);
+ }
+ /*
+ * make /tmp last because this is the one we open first -
+ * the existence of this directory implies the whole
+ * Maildir structure is complete
+ */
+ strcpy(buf+l, "/tmp");
+ if (mkdir(buf, 0700) < 0 && errno != EEXIST) {
+ free(buf);
+ return (-1);
+ }
+ free(buf);
+ return (0);
+}
+