}
if (mkdir_parents_chgrp(path, perm.dir_create_mode,
perm.file_create_gid,
- perm.file_create_gid_origin) < 0 &&
- errno != EEXIST) {
+ perm.file_create_gid_origin) == 0)
+ return 1;
+ else if (errno == EEXIST)
+ return 0;
+ else if (errno == ENOTDIR) {
+ mailbox_list_set_error(list, MAIL_ERROR_NOTPOSSIBLE,
+ "Mailbox doesn't allow inferior mailboxes");
+ return -1;
+ } else if (mailbox_list_set_error_from_errno(list)) {
+ return -1;
+ } else {
mailbox_list_set_critical(list, "mkdir_parents(%s) failed: %m",
path);
return -1;
}
- return 0;
}
int mailbox_list_mkdir_parent(struct mailbox_list *list,
void mailbox_list_get_root_permissions(struct mailbox_list *list,
mode_t *file_mode_r, mode_t *dir_mode_r,
gid_t *gid_r, const char **gid_origin_r);
-/* Create path's directory with proper permissions. */
+/* Create path's directory with proper permissions. Returns 1 if created,
+ 0 if it already existed, -1 if error. */
int mailbox_list_mkdir(struct mailbox_list *list,
const char *mailbox, const char *path) ATTR_NULL(2);
/* Like mailbox_list_mkdir(), but create path's parent parent directory.