Back to index

courier  0.68.2
Functions
maildirmkdir.c File Reference
#include <sys/types.h>
#include <sys/stat.h>
#include <string.h>
#include <stdlib.h>
#include <errno.h>
#include "maildirmisc.h"

Go to the source code of this file.

Functions

int maildir_mkdir (const char *dir)

Function Documentation

int maildir_mkdir ( const char *  dir)

Definition at line 22 of file maildirmkdir.c.

{
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);
}

Here is the caller graph for this function: