2008-09-14 Jeffrey Stedfast * README: Bumped version * configure.in: Bumped version to 2.3.10 2008-09-13 Jeffrey Stedfast Epic optimization hack-a-thon which resulted in another ~5% performance improvement. * gmime/gmime-message.c (g_mime_message_init): Instead of using a hash table for our recipients table, simply use an array since we can easily look them up using the GMimeRecipientType as an array index. Eliminates unnecessary memory and, most importantly, performance overhead. (message_add_recipients_from_string): Optimized quite a bit by using the new internet_address_list_append/prepend functions. * gmime/gmime-utils.c (decode_addrspec): Updated for g_mime_decode_domain() changes. * gmime/gmime-parse-utils.c (g_mime_decode_domain): Changed the API a bit to prevent the need for string duplication/g_free overhead in our callers. * gmime/gmime-parser.c (parser_fill): Keep track of the stream offset ourselves. * gmime/internet-address.c (internet_address_list_append): Renamed from internet_address_list_concat() and optimized slightly. (internet_address_list_prepend): New function that prepends the contents of a list to another list. (_internet_address_set_name): New internal function which avoids emitting a "changed" event in an attempt to enhance the performance of internet_address_list_parse(). (_internet_address_list_add): Same idea as _internet_address_set_name(), but also takes ownership of the InternetAddress' ref to avoid unnecessary ref/unref overhead. (internet_address_mailbox_new): Instead of calling internet_address_mailbox_set_addr(), set it manually to avoid a g_signal_emit(). (internet_address_group_new): Call _internet_address_set_name() to avoid signal emission. (internet_address_group_add_member): Now returns the index of the newly added member. (decode_mailbox): Avoid string duplication of the addrspec token, use the new g_mime_decode_domain() API to avoid unnecessary strdup/g_free overhead, and use _internet_address_set_name(). (decode_address): Don't need to unref members anymore as the lists we add them to take ownership of the refs. 2008-09-12 Jeffrey Stedfast I/O Optimization which improved performance by ~5% * gmime/gmime-parser.c (parser_fill): Now takes an 'atleast' argument which we use to decide whether we should bother calling read() or not. If we have more than 'atleast' bytes left in our buffer, we don't read. (parser_scan_content): Take advantage of the 'atleast' argument to parser_fill(). (parser_step_headers): Same. (parser_step_from): Here too. (parser_skip_line): And here. 2008-09-08 Jeffrey Stedfast * gmime/gmime-message.c (message_add_recipients_from_string): Prepend, append, or set the addresses in the recipients list depending on the new 'action' argument. (process_header): Pass along our 'action' to message_add_recipients_from_string(). (message_prepend_header): Pass PREPEND as the action argument to process_header(). (message_append_header): Pass APPEND as the action argument to process_header(). (message_set_header): Pass SET as the action argument to process_header(). * gmime/gmime-header.c (g_mime_header_list_set): If there is more than a single header with the specified name, remove them. 2008-09-07 Jeffrey Stedfast * util/memchunk.[c,h]: Removed. No longer used.