Ejemplo n.º 1
0
int mailmbox_write_lock(struct mailmbox_folder * folder)
{
  int r;

  if (folder->mb_read_only)
    return MAILMBOX_ERROR_READONLY;

  r = maillock_write_lock(folder->mb_filename, folder->mb_fd);
  if (r == 0)
    return MAILMBOX_NO_ERROR;
  else
    return MAILMBOX_ERROR_FILE;
}
Ejemplo n.º 2
0
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);
}
Ejemplo n.º 3
0
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;
}