#include "mailbox-attribute-private.h"
#include "mail-index-private.h"
+struct file_lock;
+struct file_create_settings;
+
/* Default prefix for indexes */
#define MAIL_INDEX_PREFIX "dovecot.index"
/* Returns -1 if error, 0 if failed with EEXIST, 1 if ok */
int mailbox_create_fd(struct mailbox *box, const char *path, int flags,
int *fd_r);
-/* Create a lock file to the mailbox with the given filename. If it succeeds,
+/* Create a lock file with the given path and settings. If it succeeds,
returns 1 and lock_r, which needs to be freed once finished with the lock.
- If lock_secs is reached, returns 0 and error_r. Returns -1 and sets error_r
- on other errors. */
+ If lock_set->lock_timeout_secs is reached, returns 0 and error_r. Returns
+ -1 and sets error_r on other errors. */
+int mail_storage_lock_create(const char *lock_path,
+ const struct file_create_settings *lock_set,
+ struct file_lock **lock_r, const char **error_r);
+/* Create a lock file to the mailbox with the given filename. Returns the same
+ as mail_storage_lock_create(). */
int mailbox_lock_file_create(struct mailbox *box, const char *lock_fname,
unsigned int lock_secs, struct file_lock **lock_r,
const char **error_r);
va_end(va);
}
+int mail_storage_lock_create(const char *lock_path,
+ const struct file_create_settings *lock_set,
+ struct file_lock **lock_r, const char **error_r)
+{
+ bool created;
+
+ if (file_create_locked(lock_path, lock_set, lock_r,
+ &created, error_r) == -1) {
+ *error_r = t_strdup_printf("file_create_locked(%s) failed: %s",
+ lock_path, *error_r);
+ return errno == EAGAIN ? 0 : -1;
+ }
+ file_lock_set_close_on_free(*lock_r, TRUE);
+ file_lock_set_unlink_on_free(*lock_r, TRUE);
+ return 1;
+}
+
int mailbox_lock_file_create(struct mailbox *box, const char *lock_fname,
unsigned int lock_secs, struct file_lock **lock_r,
const char **error_r)
const struct mailbox_permissions *perm;
struct file_create_settings set;
const char *lock_path;
- bool created;
perm = mailbox_get_permissions(box);
i_zero(&set);
set.mkdir_mode = 0700;
}
- if (file_create_locked(lock_path, &set, lock_r, &created, error_r) == -1) {
- *error_r = t_strdup_printf("file_create_locked(%s) failed: %s",
- lock_path, *error_r);
- return errno == EAGAIN ? 0 : -1;
- }
- file_lock_set_close_on_free(*lock_r, TRUE);
- file_lock_set_unlink_on_free(*lock_r, TRUE);
- return 1;
+ return mail_storage_lock_create(lock_path, &set, lock_r, error_r);
}