From 1a48616bac993a676fe72552288cbd70fe8b768e Mon Sep 17 00:00:00 2001 From: Pitiphong Phongpattranont Date: Thu, 28 Mar 2013 19:42:43 +0700 Subject: [PATCH] Added free sort result list function. --- build-windows/build_headers.list | 2 ++ src/low-level/imap/mailimap_sort.c | 37 ++++++++++++++++++------------ src/low-level/imap/mailimap_sort.h | 2 ++ 3 files changed, 26 insertions(+), 15 deletions(-) diff --git a/build-windows/build_headers.list b/build-windows/build_headers.list index 0438c97..23725ed 100644 --- a/build-windows/build_headers.list +++ b/build-windows/build_headers.list @@ -112,6 +112,8 @@ libetpan_version.h ..\src\low-level\imap\mailimap_print.h ..\src\low-level\imap\mailimap_sender.h ..\src\low-level\imap\mailimap_socket.h +..\src\low-level\imap\mailimap_sort.h +..\src\low-level\imap\mailimap_sort_types.h ..\src\low-level\imap\mailimap_ssl.h ..\src\low-level\imap\mailimap_types.h ..\src\low-level\imap\mailimap_types_helper.h diff --git a/src/low-level/imap/mailimap_sort.c b/src/low-level/imap/mailimap_sort.c index 35fce76..41ab8ee 100644 --- a/src/low-level/imap/mailimap_sort.c +++ b/src/low-level/imap/mailimap_sort.c @@ -206,6 +206,12 @@ mailimap_uid_sort(mailimap * session, const char * charset, return MAILIMAP_NO_ERROR; } +LIBETPAN_EXPORT +void mailimap_sort_result_free(clist * search_result) +{ + clist_foreach(search_result, (clist_func) free, NULL); + clist_free(search_result); +} int @@ -329,6 +335,7 @@ mailimap_number_list_data_sort_parse(mailstream * fd, MMAPString * buffer, clist * number_list; int r; int res; + size_t final_token; cur_token = * indx; @@ -338,25 +345,24 @@ mailimap_number_list_data_sort_parse(mailstream * fd, MMAPString * buffer, return r; } - r = mailimap_space_parse(fd, buffer, &cur_token); - if (r != MAILIMAP_NO_ERROR) { - res = r; - return r; - } + final_token = cur_token; + number_list = NULL; - 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) { - res = r; - return r; + 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 = cur_token; + * indx = final_token; return MAILIMAP_NO_ERROR; } @@ -378,6 +384,7 @@ mailimap_sort_extension_parse(int calling_parser, mailstream * fd, switch (calling_parser) { + case MAILIMAP_EXTENDED_PARSER_RESPONSE_DATA: case MAILIMAP_EXTENDED_PARSER_MAILBOX_DATA: r = mailimap_number_list_data_sort_parse(fd, buffer, &cur_token, &number_list, progr_rate, progr_fun); diff --git a/src/low-level/imap/mailimap_sort.h b/src/low-level/imap/mailimap_sort.h index f059716..841f823 100644 --- a/src/low-level/imap/mailimap_sort.h +++ b/src/low-level/imap/mailimap_sort.h @@ -92,6 +92,8 @@ extern "C" { struct mailimap_sort_key * key, struct mailimap_search_key * searchkey, clist ** result); + LIBETPAN_EXPORT + void mailimap_sort_result_free(clist * search_result); #ifdef __cplusplus }