dbox-file.c (dovecot-2.3.16) | : | dbox-file.c (dovecot-2.3.17) | ||
---|---|---|---|---|
skipping to change at line 98 | skipping to change at line 98 | |||
*_file = NULL; | *_file = NULL; | |||
i_assert(file->refcount > 0); | i_assert(file->refcount > 0); | |||
if (--file->refcount == 0) | if (--file->refcount == 0) | |||
file->storage->v.file_unrefed(file); | file->storage->v.file_unrefed(file); | |||
} | } | |||
static int dbox_file_parse_header(struct dbox_file *file, const char *line) | static int dbox_file_parse_header(struct dbox_file *file, const char *line) | |||
{ | { | |||
const char *const *tmp, *value; | const char *const *tmp, *value; | |||
unsigned int pos; | ||||
enum dbox_header_key key; | enum dbox_header_key key; | |||
file->file_version = *line - '0'; | file->file_version = *line - '0'; | |||
if (!i_isdigit(line[0]) || line[1] != ' ' || | if (!i_isdigit(line[0]) || line[1] != ' ' || | |||
(file->file_version != 1 && file->file_version != DBOX_VERSION)) { | (file->file_version != 1 && file->file_version != DBOX_VERSION)) { | |||
dbox_file_set_corrupted(file, "Invalid dbox version"); | dbox_file_set_corrupted(file, "Invalid dbox version"); | |||
return -1; | return -1; | |||
} | } | |||
line += 2; | line += 2; | |||
pos = 2; | ||||
file->msg_header_size = 0; | file->msg_header_size = 0; | |||
for (tmp = t_strsplit(line, " "); *tmp != NULL; tmp++) { | for (tmp = t_strsplit(line, " "); *tmp != NULL; tmp++) { | |||
uintmax_t time; | uintmax_t time; | |||
key = **tmp; | key = **tmp; | |||
value = *tmp + 1; | value = *tmp + 1; | |||
switch (key) { | switch (key) { | |||
case DBOX_HEADER_OLDV1_APPEND_OFFSET: | case DBOX_HEADER_OLDV1_APPEND_OFFSET: | |||
skipping to change at line 134 | skipping to change at line 132 | |||
} | } | |||
break; | break; | |||
case DBOX_HEADER_CREATE_STAMP: | case DBOX_HEADER_CREATE_STAMP: | |||
if (str_to_uintmax_hex(value, &time) < 0) { | if (str_to_uintmax_hex(value, &time) < 0) { | |||
dbox_file_set_corrupted(file, "Invalid create tim e stamp"); | dbox_file_set_corrupted(file, "Invalid create tim e stamp"); | |||
return -1; | return -1; | |||
} | } | |||
file->create_time = (time_t)time; | file->create_time = (time_t)time; | |||
break; | break; | |||
} | } | |||
pos += strlen(value) + 2; | ||||
} | } | |||
if (file->msg_header_size == 0) { | if (file->msg_header_size == 0) { | |||
dbox_file_set_corrupted(file, "Missing message header size"); | dbox_file_set_corrupted(file, "Missing message header size"); | |||
return -1; | return -1; | |||
} | } | |||
return 0; | return 0; | |||
} | } | |||
static int dbox_file_read_header(struct dbox_file *file) | static int dbox_file_read_header(struct dbox_file *file) | |||
skipping to change at line 313 | skipping to change at line 310 | |||
} else if (file->fd != -1) { | } else if (file->fd != -1) { | |||
if (close(file->fd) < 0) | if (close(file->fd) < 0) | |||
dbox_file_set_syscall_error(file, "close()"); | dbox_file_set_syscall_error(file, "close()"); | |||
file->fd = -1; | file->fd = -1; | |||
} | } | |||
file->cur_offset = UOFF_T_MAX; | file->cur_offset = UOFF_T_MAX; | |||
} | } | |||
int dbox_file_try_lock(struct dbox_file *file) | int dbox_file_try_lock(struct dbox_file *file) | |||
{ | { | |||
const char *error; | ||||
int ret; | int ret; | |||
i_assert(file->fd != -1); | i_assert(file->fd != -1); | |||
#ifdef DBOX_FILE_LOCK_METHOD_FLOCK | #ifdef DBOX_FILE_LOCK_METHOD_FLOCK | |||
struct file_lock_settings lock_set = { | ||||
.lock_method = FILE_LOCK_METHOD_FLOCK, | ||||
}; | ||||
ret = file_try_lock(file->fd, file->cur_path, F_WRLCK, | ret = file_try_lock(file->fd, file->cur_path, F_WRLCK, | |||
FILE_LOCK_METHOD_FLOCK, &file->lock); | &lock_set, &file->lock, &error); | |||
if (ret < 0) { | if (ret < 0) { | |||
mail_storage_set_critical(&file->storage->storage, | mail_storage_set_critical(&file->storage->storage, | |||
"file_try_lock(%s) failed: %m", file->cur_path); | "file_try_lock(%s) failed: %s", file->cur_path, error); | |||
} | } | |||
#else | #else | |||
ret = file_dotlock_create(&dotlock_set, file->cur_path, | ret = file_dotlock_create(&dotlock_set, file->cur_path, | |||
DOTLOCK_CREATE_FLAG_NONBLOCK, &file->lock); | DOTLOCK_CREATE_FLAG_NONBLOCK, &file->lock); | |||
if (ret < 0) { | if (ret < 0) { | |||
mail_storage_set_critical(&file->storage->storage, | mail_storage_set_critical(&file->storage->storage, | |||
"file_dotlock_create(%s) failed: %m", file->cur_path); | "file_dotlock_create(%s) failed: %m", file->cur_path); | |||
} | } | |||
#endif | #endif | |||
return ret; | return ret; | |||
End of changes. 7 change blocks. | ||||
5 lines changed or deleted | 6 lines changed or added |