static int mailimap_xgmlabels_parse(mailstream * fd, MMAPString * buffer, size_t * indx, clist ** result) { size_t cur_token; clist * list; int r; int res; cur_token = * indx; r = mailimap_oparenth_parse(fd, buffer, &cur_token); if (r != MAILIMAP_NO_ERROR) { res = r; goto err; } r = mailimap_struct_spaced_list_parse(fd, buffer, &cur_token, &list, (mailimap_struct_parser * ) mailimap_astring_parse, (mailimap_struct_destructor * ) mailimap_astring_free, 0, NULL); if (r == MAILIMAP_ERROR_PARSE) { list = clist_new(); if (list == NULL) { res = MAILIMAP_ERROR_MEMORY; goto err; } } else if (r != MAILIMAP_NO_ERROR) { res = r; goto err; } r = mailimap_cparenth_parse(fd, buffer, &cur_token); if (r != MAILIMAP_NO_ERROR) { res = r; goto free_list; } * indx = cur_token; * result = list; return MAILIMAP_NO_ERROR; free_list: clist_foreach(list, (clist_func) mailimap_astring_free, NULL); clist_free(list); err: return res; }
int mailimap_quota_quota_list_nonempty_parse(mailstream * fd, MMAPString *buffer, size_t * indx, clist ** result, size_t progr_rate, progress_function * progr_fun) { size_t cur_token; int r; int res; clist * quota_resource_list; cur_token = * indx; r = mailimap_oparenth_parse(fd, buffer, &cur_token); if (r != MAILIMAP_NO_ERROR) { res = r; goto err; } r = mailimap_struct_spaced_list_parse(fd, buffer, &cur_token, "a_resource_list, &mailimap_quota_quota_resource_parse, (mailimap_struct_destructor *) &mailimap_quota_quota_resource_free, progr_rate, progr_fun); if (r != MAILIMAP_NO_ERROR) { res = r; goto err; } r = mailimap_cparenth_parse(fd, buffer, &cur_token); if (r != MAILIMAP_NO_ERROR) { res = r; goto quota_list_free; } * result = quota_resource_list; * indx = cur_token; return MAILIMAP_NO_ERROR; quota_list_free: clist_foreach(quota_resource_list, (clist_func) &mailimap_quota_quota_resource_free, NULL); clist_free(quota_resource_list); err: return res; }
static int mailimap_number_list_data_sort_parse(mailstream * fd, MMAPString * buffer, size_t * indx, clist ** result, size_t progr_rate, progress_function * progr_fun) { size_t cur_token; clist * number_list; int r; size_t final_token; cur_token = * indx; r = mailimap_token_case_insensitive_parse(fd, buffer, &cur_token, "SORT"); if (r != MAILIMAP_NO_ERROR) { return r; } final_token = cur_token; number_list = NULL; r = mailimap_space_parse(fd, buffer, &cur_token); if (r == MAILIMAP_NO_ERROR) { r = mailimap_struct_spaced_list_parse(fd, buffer, &cur_token, &number_list, (mailimap_struct_parser *) mailimap_nz_number_alloc_parse, (mailimap_struct_destructor *) mailimap_number_alloc_free, progr_rate, progr_fun); if (r == MAILIMAP_NO_ERROR) { final_token = cur_token; } } * result = number_list; * indx = final_token; return MAILIMAP_NO_ERROR; }
static int search_data_parse(mailstream * fd, MMAPString * buffer, struct mailimap_parser_context * parser_ctx, size_t * indx, struct mailimap_condstore_search ** result) { int r; clist * number_list; struct mailimap_condstore_search * search_data; size_t cur_token; int res; uint64_t value; cur_token = * indx; /* mailbox-data =/ "SEARCH" [1*(SP nz-number) SP search-sort-mod-seq] search-sort-mod-seq = "(" "MODSEQ" SP mod-sequence-value ")" */ r = mailimap_token_case_insensitive_parse(fd, buffer, &cur_token, "SEARCH"); if (r != MAILIMAP_NO_ERROR) { res = r; goto err; return r; } r = mailimap_space_parse(fd, buffer, &cur_token); if (r != MAILIMAP_NO_ERROR) { res = r; goto err; } r = mailimap_struct_spaced_list_parse(fd, buffer, parser_ctx, &cur_token, &number_list, (mailimap_struct_parser *) mailimap_nz_number_alloc_parse, (mailimap_struct_destructor *) mailimap_number_alloc_free, 0, NULL); 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 free_number_list; } r = mailimap_oparenth_parse(fd, buffer, parser_ctx, &cur_token); if (r != MAILIMAP_NO_ERROR) { res = r; goto free_number_list; } r = mailimap_mod_sequence_value_parse(fd, buffer, parser_ctx, &cur_token, &value); if (r != MAILIMAP_NO_ERROR) { res = r; goto free_number_list; } r = mailimap_cparenth_parse(fd, buffer, parser_ctx, &cur_token); if (r != MAILIMAP_NO_ERROR) { res = r; goto free_number_list; } search_data = mailimap_condstore_search_new(number_list, value); if (search_data == NULL) { res = r; goto free_number_list; } * indx = cur_token; * result = search_data; return MAILIMAP_NO_ERROR; free_number_list: clist_foreach(number_list, (clist_func) free, NULL); clist_free(number_list); err: return res; }
int mailimap_acl_acl_data_parse(mailstream * fd, MMAPString * buffer, struct mailimap_parser_context * parser_ctx, size_t * indx, struct mailimap_acl_acl_data ** result, size_t progr_rate, progress_function * progr_fun) { size_t cur_token; char * mailbox; clist * ir_list; struct mailimap_acl_acl_data * acl_data; int r; int res; cur_token = * indx; mailbox = NULL; /* XXX - removes a gcc warning */ r = mailimap_token_case_insensitive_parse(fd, buffer, &cur_token, "ACL"); 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 err; } r = mailimap_mailbox_parse(fd, buffer, parser_ctx, &cur_token, &mailbox, 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 mailbox_free; } r = mailimap_struct_spaced_list_parse(fd, buffer, parser_ctx, &cur_token, &ir_list, (mailimap_struct_parser * ) mailimap_acl_identifier_rights_parse, (mailimap_struct_destructor * ) mailimap_acl_identifier_rights_free, progr_rate, progr_fun); if (r != MAILIMAP_NO_ERROR) { res = r; goto mailbox_free; } acl_data = mailimap_acl_acl_data_new(mailbox, ir_list); if (acl_data == NULL) { res = MAILIMAP_ERROR_MEMORY; goto ir_list_free; } * result = acl_data; * indx = cur_token; return MAILIMAP_NO_ERROR; ir_list_free: if (ir_list != NULL) { clist_foreach(ir_list, (clist_func) mailimap_acl_identifier_rights_free, NULL); clist_free(ir_list); } mailbox_free: mailimap_mailbox_free(mailbox); err: return res; }
static int mailimap_namespace_response_extension_parse(mailstream * fd, MMAPString * buffer, size_t * indx, struct mailimap_namespace_response_extension ** result, size_t progr_rate, progress_function * progr_fun) { int r; int res; size_t cur_token; char * name; size_t name_len; clist * value_list; struct mailimap_namespace_response_extension * ext; clistiter * cur; cur_token = * indx; r = mailimap_space_parse(fd, buffer, &cur_token); if (r == MAILIMAP_ERROR_PARSE) { /* do nothing */ } r = mailimap_string_parse(fd, buffer, &cur_token, &name, &name_len, progr_rate, progr_fun); if (r != MAILIMAP_NO_ERROR) { res = r; goto err; } r = mailimap_space_parse(fd, buffer, &cur_token); if (r == MAILIMAP_ERROR_PARSE) { /* do nothing */ } r = mailimap_oparenth_parse(fd, buffer, &cur_token); if (r != MAILIMAP_NO_ERROR) { res = r; goto err; } r = mailimap_struct_spaced_list_parse(fd, buffer, &cur_token, &value_list, (mailimap_struct_parser *) namespace_extension_value_parse, (mailimap_struct_destructor *) mailimap_string_free, progr_rate, progr_fun); if (r != MAILIMAP_NO_ERROR) { res = r; goto free_name; } r = mailimap_cparenth_parse(fd, buffer, &cur_token); if (r != MAILIMAP_NO_ERROR) { res = r; goto free_value_list; } ext = mailimap_namespace_response_extension_new(name, value_list); if (ext == NULL) { res = MAILIMAP_ERROR_MEMORY; goto free_value_list; } * indx = cur_token; * result = ext; return MAILIMAP_NO_ERROR; free_value_list: for(cur = clist_begin(value_list) ; cur != NULL ; cur = clist_next(cur)) { char * value; value = clist_content(cur); mailimap_string_free(value); } clist_free(value_list); free_name: mailimap_string_free(name); err: return res; }
int mailimap_acl_listrights_data_parse(mailstream * fd, MMAPString *buffer, size_t * indx, struct mailimap_acl_listrights_data ** result, size_t progr_rate, progress_function * progr_fun) { size_t cur_token; char * mailbox; char * identifier; clist * rights_list; struct mailimap_acl_listrights_data * lr_data; int r; int res; cur_token = * indx; mailbox = NULL; /* XXX - removes a gcc warning */ identifier = NULL; r = mailimap_token_case_insensitive_parse(fd, buffer, &cur_token, "LISTRIGHTS"); 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 err; } r = mailimap_mailbox_parse(fd, buffer, &cur_token, &mailbox, 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 mailbox_free; } r = mailimap_acl_identifier_parse(fd, buffer, &cur_token, &identifier, progr_rate, progr_fun); if (r != MAILIMAP_NO_ERROR) { res = r; goto mailbox_free; } r = mailimap_space_parse(fd, buffer, &cur_token); if (r != MAILIMAP_NO_ERROR) { res = r; goto identifier_free; } r = mailimap_struct_spaced_list_parse(fd, buffer, &cur_token, &rights_list, (mailimap_struct_parser * ) mailimap_acl_rights_parse, (mailimap_struct_destructor * ) mailimap_acl_rights_free, progr_rate, progr_fun); if (r != MAILIMAP_NO_ERROR) { res = r; goto identifier_free; } lr_data = mailimap_acl_listrights_data_new(mailbox, identifier, rights_list); if (lr_data == NULL) { res = MAILIMAP_ERROR_MEMORY; goto rights_list_free; } * result = lr_data; * indx = cur_token; return MAILIMAP_NO_ERROR; rights_list_free: if (rights_list != NULL) { clist_foreach(rights_list, (clist_func) mailimap_acl_rights_free, NULL); clist_free(rights_list); } identifier_free: mailimap_acl_identifier_free(identifier); mailbox_free: mailimap_mailbox_free(mailbox); err: return res; }