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; }
void mailimap_id_param_free(struct mailimap_id_param * param) { mailimap_string_free(param->idpa_name); mailimap_nstring_free(param->idpa_value); free(param); }
static int mailimap_namespace_info_parse(mailstream * fd, MMAPString * buffer, size_t * indx, struct mailimap_namespace_info ** result, size_t progr_rate, progress_function * progr_fun) { size_t cur_token = * indx; int r; int res; char * prefix; size_t prefix_len; clistiter * cur; clist * ext_list; char delimiter; struct mailimap_namespace_info * info; r = mailimap_oparenth_parse(fd, buffer, &cur_token); if (r != MAILIMAP_NO_ERROR) { res = r; goto err; } r = mailimap_string_parse(fd, buffer, &cur_token, &prefix, &prefix_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_nil_parse(fd, buffer, &cur_token); if (r == MAILIMAP_NO_ERROR) { delimiter = 0; } else { r = mailimap_dquote_parse(fd, buffer, &cur_token); if (r == MAILIMAP_ERROR_PARSE) { res = r; goto free_prefix; } r = mailimap_quoted_char_parse(fd, buffer, &cur_token, &delimiter); if (r == MAILIMAP_ERROR_PARSE) { res = r; goto free_prefix; } r = mailimap_dquote_parse(fd, buffer, &cur_token); if (r == MAILIMAP_ERROR_PARSE) { res = r; goto free_prefix; } } r = mailimap_cparenth_parse(fd, buffer, &cur_token); if (r != MAILIMAP_NO_ERROR) { res = r; goto free_ext; } r = mailimap_struct_multiple_parse(fd, buffer, &cur_token, &ext_list, (mailimap_struct_parser *) mailimap_namespace_response_extension_parse, (mailimap_struct_destructor *) mailimap_namespace_response_extension_free, progr_rate, progr_fun); if (r == MAILIMAP_ERROR_PARSE) { ext_list = NULL; } else if (r != MAILIMAP_NO_ERROR) { res = r; goto free_prefix; } info = mailimap_namespace_info_new(prefix, delimiter, ext_list); if (info == NULL) { res = MAILIMAP_ERROR_MEMORY; goto free_ext; } * result = info; * indx = cur_token; return MAILIMAP_NO_ERROR; free_ext: if (ext_list != NULL) { for(cur = clist_begin(ext_list) ; cur != NULL ; cur = clist_next(cur)) { struct mailimap_namespace_response_extension * ext; ext = clist_content(cur); mailimap_namespace_response_extension_free(ext); } clist_free(ext_list); } free_prefix: mailimap_string_free(prefix); err: return res; }