int mailmbox_write_unlock(struct mailmbox_folder * folder) { int r; r = maillock_write_unlock(folder->mb_filename, folder->mb_fd); if (r == 0) return MAILMBOX_NO_ERROR; else return MAILMBOX_ERROR_FILE; }
static void write_article_seq(mailsession * session, uint32_t first, uint32_t last) { FILE * f; struct nntp_session_state_data * ancestor_data; char seq_filename[PATH_MAX]; struct nntp_cached_session_state_data * cached_data; int r; int fd; cached_data = get_cached_data(session); ancestor_data = get_ancestor_data(session); if (ancestor_data->nntp_group_name == NULL) return; snprintf(seq_filename, PATH_MAX, "%s/%s/%s", cached_data->nntp_cache_directory, ancestor_data->nntp_group_name, SEQ_FILENAME); fd = creat(seq_filename, S_IRUSR | S_IWUSR); if (fd < 0) return; f = fdopen(fd, "w"); if (f != NULL) { r = maillock_write_lock(seq_filename, fd); if (r == 0) { MMAPString * mmapstr; size_t cur_token; mmapstr = mmap_string_new(""); if (mmapstr != NULL) { r = mail_serialize_clear(mmapstr, &cur_token); if (r == MAIL_NO_ERROR) { r = mailimf_cache_int_write(mmapstr, &cur_token, first); r = mailimf_cache_int_write(mmapstr, &cur_token, last); fwrite(mmapstr->str, 1, mmapstr->len, f); } mmap_string_free(mmapstr); } r = maillock_write_unlock(seq_filename, fd); } fclose(f); } else close(fd); }
int mail_cache_db_open_lock(const char * filename, struct mail_cache_db ** pcache_db) { int r; struct mail_cache_db * cache_db; r = maillock_write_lock(filename, -1); if (r < 0) goto err; r = mail_cache_db_open(filename, &cache_db); if (r < 0) goto unlock; * pcache_db = cache_db; return 0; unlock: maillock_write_unlock(filename, -1); err: return -1; }
void mail_cache_db_close_unlock(const char * filename, struct mail_cache_db * cache_db) { mail_cache_db_close(cache_db); maillock_write_unlock(filename, -1); }