diff options
author | Thomas Schwinge <thomas@schwinge.name> | 2010-12-29 12:00:30 +0100 |
---|---|---|
committer | Ali Polatel <alip@exherbo.org> | 2011-11-05 01:12:35 +0200 |
commit | 38b245b46a51be82a5a5f798255cbbbbc0186f78 (patch) | |
tree | d4210e76396f3d45614f329f8288e10762fad407 /contrib/notmuch-deliver/maildrop/maildir/maildirmkdir.c | |
parent | 5f53ce3e2b9704f4f2a4be92c91f82c697c15b9d (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.c | 78 |
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); +} + |