示例#1
0
int
mailimap_quota_quota_resource_parse(mailstream * fd, MMAPString *buffer,
    size_t * indx, void * result_ptr,
    size_t progr_rate, progress_function * progr_fun)
{
  struct mailimap_quota_quota_resource ** result = result_ptr;
  size_t cur_token = * indx;
  int r, res;
  char * resource_name;
  uint32_t usage, limit;
  struct mailimap_quota_quota_resource * resource;

  r = mailimap_atom_parse(fd, buffer, &cur_token, &resource_name,
      progr_rate, progr_fun);
  if (r != MAILIMAP_NO_ERROR) {
    res = r;
    goto err;
  }

  r = mailimap_space_parse(fd, buffer, &cur_token);
  if (r != MAILIMAP_NO_ERROR) {
    res = r;
    goto resource_name_free;
  }

  r = mailimap_number_parse(fd, buffer, &cur_token, &usage);
  if (r != MAILIMAP_NO_ERROR) {
    res = r;
    goto resource_name_free;
  }

  r = mailimap_space_parse(fd, buffer, &cur_token);
  if (r != MAILIMAP_NO_ERROR) {
    res = r;
    goto resource_name_free;
  }

  r = mailimap_number_parse(fd, buffer, &cur_token, &limit);
  if (r != MAILIMAP_NO_ERROR) {
    res = r;
    goto resource_name_free;
  }

  resource = mailimap_quota_quota_resource_new(resource_name,
      usage, limit);
  if (!resource) {
    res = r;
    goto resource_name_free;
  }

  * result = resource;
  * indx = cur_token;

  return MAILIMAP_NO_ERROR;

 resource_name_free:
  mailimap_atom_free(resource_name);
 err:
  return res;
}
示例#2
0
static int fetch_data_xgmmsgid_parse(mailstream * fd,
                                      MMAPString * buffer, size_t * indx,
                                      uint64_t * result, size_t progr_rate, progress_function * progr_fun)
{
    size_t cur_token;
    uint64_t msgid;
    uint32_t uid;
    char  *msgid_str;
    int r;
    
    cur_token = * indx;
    
    r = mailimap_number_parse(fd, buffer, &cur_token, &uid);
    if (r != MAILIMAP_NO_ERROR)
        return r;

    r = mailimap_space_parse(fd, buffer, &cur_token);
    if (r != MAILIMAP_NO_ERROR)
        return r;
    
    r = mailimap_token_case_insensitive_parse(fd, buffer,
                                              &cur_token, "FETCH");
    if (r != MAILIMAP_NO_ERROR)
        return r;

    r = mailimap_space_parse(fd, buffer, &cur_token);
    if (r != MAILIMAP_NO_ERROR)
        return r;
    
    r = mailimap_oparenth_parse(fd, buffer, &cur_token);
    if (r != MAILIMAP_NO_ERROR)
        return r;
    
    r = mailimap_token_case_insensitive_parse(fd, buffer,
                                              &cur_token, "X-GM-MSGID");
    if (r != MAILIMAP_NO_ERROR)
        return r;
    
    r = mailimap_space_parse(fd, buffer, &cur_token);
    if (r != MAILIMAP_NO_ERROR)
        return r;
    
    r = mailimap_astring_parse(fd, buffer, &cur_token, &msgid_str, progr_rate, progr_fun);
    if (r != MAILIMAP_NO_ERROR)
        return r;
    
    msgid = atol(msgid_str);
    
    r = mailimap_cparenth_parse(fd, buffer, &cur_token);
    if (r != MAILIMAP_NO_ERROR)
        return r;
    
    * indx = cur_token;
    * result = msgid;
    
    return MAILIMAP_NO_ERROR;
}