Esempio n. 1
0
int mailmbox_read_lock(struct mailmbox_folder * folder)
{
  int r;

  r = maillock_read_lock(folder->mb_filename, folder->mb_fd);
  if (r == 0)
    return MAILMBOX_NO_ERROR;
  else
    return MAILMBOX_ERROR_FILE;
}
static void read_article_seq(mailsession * session,
			     uint32_t * pfirst, uint32_t * plast)
{
  FILE * f;
  struct nntp_session_state_data * ancestor_data;
  uint32_t first;
  uint32_t last;
  char seq_filename[PATH_MAX];
  struct nntp_cached_session_state_data * cached_data;
  int r;

  first = 0;
  last = 0;

  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);
  f = fopen(seq_filename, "r");

  if (f != NULL) {
    int fd;

    fd = fileno(f);
    
    r = maillock_read_lock(seq_filename, fd);
    if (r == 0) {
      MMAPString * mmapstr;
      size_t cur_token;
      char buf[sizeof(uint32_t) * 2];
      size_t read_size;
      
      read_size = fread(buf, 1, sizeof(uint32_t) * 2, f);
      mmapstr = mmap_string_new_len(buf, read_size);
      if (mmapstr != NULL) {
	cur_token = 0;
	r = mailimf_cache_int_read(mmapstr, &cur_token, &first);
	r = mailimf_cache_int_read(mmapstr, &cur_token, &last);
	
	mmap_string_free(mmapstr);
      }
      
      maillock_read_unlock(seq_filename, fd);
    }
    fclose(f);
  }

  * pfirst = first;
  * plast = last;
}