*flags_r |= MAIL_STORAGE_FLAG_KEEP_HEADER_MD5;
str = getenv("LOCK_METHOD");
- if (str == NULL || strcmp(str, "fcntl") == 0)
+ if (str == NULL)
*lock_method_r = FILE_LOCK_METHOD_FCNTL;
- else if (strcmp(str, "flock") == 0)
- *lock_method_r = FILE_LOCK_METHOD_FLOCK;
- else if (strcmp(str, "dotlock") == 0)
- *lock_method_r = FILE_LOCK_METHOD_DOTLOCK;
- else
+ else if (!file_lock_method_parse(str, lock_method_r))
i_fatal("Unknown lock_method: %s", str);
}
enum file_lock_method lock_method;
};
+bool file_lock_method_parse(const char *name, enum file_lock_method *method_r)
+{
+ if (strcasecmp(name, "fcntl") == 0)
+ *method_r = FILE_LOCK_METHOD_FCNTL;
+ else if (strcasecmp(name, "flock") == 0)
+ *method_r = FILE_LOCK_METHOD_FLOCK;
+ else if (strcasecmp(name, "dotlock") == 0)
+ *method_r = FILE_LOCK_METHOD_DOTLOCK;
+ else
+ return FALSE;
+ return TRUE;
+}
+
int file_try_lock(int fd, const char *path, int lock_type,
enum file_lock_method lock_method,
struct file_lock **lock_r)
FILE_LOCK_METHOD_DOTLOCK
};
+/* Parse lock method from given string. Returns TRUE if ok,
+ FALSE if name is unknown. */
+bool file_lock_method_parse(const char *name, enum file_lock_method *method_r);
+
/* Lock the file. Returns 1 if successful, 0 if file is already locked,
or -1 if error. lock_type is F_WRLCK or F_RDLCK. */
int file_try_lock(int fd, const char *path, int lock_type,