diff options
-rw-r--r-- | camel/ChangeLog | 20 | ||||
-rw-r--r-- | camel/camel-folder-summary.c | 19 | ||||
-rw-r--r-- | camel/camel-mime-parser.c | 65 | ||||
-rw-r--r-- | camel/camel-mime-part-utils.c | 1 | ||||
-rw-r--r-- | camel/camel-mime-part.c | 1 | ||||
-rw-r--r-- | camel/camel-mime-utils.c | 4 | ||||
-rw-r--r-- | camel/providers/mbox/camel-mbox-summary.c | 12 |
7 files changed, 77 insertions, 45 deletions
diff --git a/camel/ChangeLog b/camel/ChangeLog index ac81cd35cd..6515fadcb4 100644 --- a/camel/ChangeLog +++ b/camel/ChangeLog @@ -1,4 +1,22 @@ -2000-05-05 <notzed@the-dot-in.helixcode.com> +2000-05-05 NotZed <NotZed@HelixCode.com> + + * camel-folder-summary.c: And same here ... + + * camel-mime-utils.c: Defined out some memory profiling stuff I + left there by mistake. + + * camel-mime-parser.c (folder_scan_content): Apply the fix from + the header scanner to here too. + (folder_scan_header): Only check for end of header if we have + space for it (didn't end the read with a newline) + (folder_scan_header): inptr is the only real thing we need + registerised for performance. Try to help the compiler be smart + about it .. + (folder_scan_header): Simplified the save header case a tad. + + Commented out some memory profiling stuff. + +2000-05-05 <notzed@helixcode.com> * camel-mime-utils.c (header_decode_mailbox): Plug a memory leak. (header_decode_text): Fixed memory leaks with g_string_append(). diff --git a/camel/camel-folder-summary.c b/camel/camel-folder-summary.c index 6d8946ce12..0879d0fc37 100644 --- a/camel/camel-folder-summary.c +++ b/camel/camel-folder-summary.c @@ -35,7 +35,7 @@ #define d(x) -#if 1 +#if 0 extern int strdup_count, malloc_count, free_count; #endif @@ -862,10 +862,6 @@ content_info_load(CamelFolderSummary *s, FILE *in) ci = g_malloc0(s->content_info_size); -/* bs->pos = decode_int(in); - bs->bodypos = bs->pos + decode_int(in); - bs->endpos = bs->pos + decode_int(in);*/ - camel_folder_summary_decode_token(in, &type); camel_folder_summary_decode_token(in, &subtype); ct = header_content_type_new(type, subtype); @@ -897,10 +893,6 @@ content_info_save(CamelFolderSummary *s, FILE *out, CamelMessageContentInfo *ci) struct _header_content_type *ct; struct _header_param *hp; -/* camel_folder_summary_encode_uint32(out, bs->pos); - camel_folder_summary_encode_uint32(out, bs->bodypos - bs->pos); - camel_folder_summary_encode_uint32(out, bs->endpos - bs->pos);*/ - ct = ci->type; if (ct) { camel_folder_summary_encode_token(out, ct->type); @@ -1053,6 +1045,8 @@ int main(int argc, char **argv) CamelFolderSummary *s; char *buffer; int len; + extern int strdup_count, malloc_count, free_count; + ibex *index; gtk_init(&argc, &argv); @@ -1081,6 +1075,8 @@ int main(int argc, char **argv) fd = open(argv[1], O_RDONLY); + index = ibex_open("index.ibex", O_CREAT|O_RDWR, 0600); + mp = camel_mime_parser_new(); camel_mime_parser_scan_from(mp, TRUE); /* camel_mime_parser_set_header_regex(mp, "^(content-[^:]*|subject|from|to|date):");*/ @@ -1088,6 +1084,7 @@ int main(int argc, char **argv) s = camel_folder_summary_new(); camel_folder_summary_set_build_content(s, TRUE); +/* camel_folder_summary_set_index(s, index);*/ while (camel_mime_parser_step(mp, &buffer, &len) == HSCAN_FROM) { /*printf("Parsing message ...\n");*/ @@ -1097,6 +1094,10 @@ int main(int argc, char **argv) break; } } + + gtk_object_unref(mp); + gtk_object_unref(s); + printf("summarised %d messages\n", camel_folder_summary_count(s)); #if 0 printf("g_strdup count = %d\n", strdup_count); diff --git a/camel/camel-mime-parser.c b/camel/camel-mime-parser.c index 73a1172adb..91b4f6cd6e 100644 --- a/camel/camel-mime-parser.c +++ b/camel/camel-mime-parser.c @@ -50,6 +50,7 @@ #define STRUCT_ALIGN 4 +#if 0 extern int strdup_count; extern int malloc_count; extern int free_count; @@ -57,7 +58,7 @@ extern int free_count; #define g_strdup(x) (strdup_count++, g_strdup(x)) #define g_malloc(x) (malloc_count++, g_malloc(x)) #define g_free(x) (free_count++, g_free(x)) - +#endif #ifdef MEMPOOL typedef struct _MemPoolNode { @@ -1027,7 +1028,8 @@ folder_scan_header(struct _header_scan_state *s, int *lastone) int len; struct _header_scan_stack *part, *overpart = s->parts; struct _header_scan_stack *h; - register char *inptr, *inend; + char *inend; + register char *inptr; h(printf("scanning first bit\n")); @@ -1056,11 +1058,12 @@ retry: while ((len = folder_read(s))>0 && len >= s->atleast) { /* ensure we have at least enough room here */ inptr = s->inptr; inend = s->inend-s->atleast; - start = inptr; while (inptr<=inend) { /*printf(" '%.20s'\n", inptr);*/ + start = inptr; + if (!s->midline && (part = folder_boundary_check(s, inptr, lastone))) { if ((s->outptr>s->outbuf) || (inptr-start)) @@ -1074,8 +1077,10 @@ retry: ; /* check against the real buffer end, not our 'atleast limited' end */ - if (inptr> s->inend) { - inptr-=2; + /* also make sure we have at least 1 char lookahead, so even if we found a \n at + the end, well, make out we didn't, and re-scan it next pass */ + if (inptr>=s->inend) { + inptr--; s->midline = TRUE; } else { s->midline = FALSE; @@ -1087,31 +1092,29 @@ retry: s->outbuf[0], isprint(s->outbuf[0])?s->outbuf[0]:'.', s->outbuf[1], isprint(s->outbuf[1])?s->outbuf[1]:'.')); - if (!s->midline) { - if (!(inptr[0] == ' ' || inptr[0] == '\t')) { - if (s->outbuf[0] == '\n' - || (s->outbuf[0] == '\r' && s->outbuf[1]=='\n')) { - goto header_done; - } - - /* we always have at least _1_ char here ... */ - if (s->outptr[-1] == '\n') - s->outptr--; - s->outptr[0] = 0; - - d(printf("header %.10s at %d\n", s->outbuf, s->header_start)); - - header_raw_append_parse(&h->headers, s->outbuf, s->header_start); + if (!s->midline + && !(inptr[0] == ' ' || inptr[0] == '\t')) { + if (s->outbuf[0] == '\n' + || (s->outbuf[0] == '\r' && s->outbuf[1]=='\n')) { + goto header_done; + } - if (inptr[0]=='\n' - || (inptr[0] == '\r' && inptr[1]=='\n')) { - inptr++; - goto header_done; - } - s->outptr = s->outbuf; - s->header_start = -1; + /* we always have at least _1_ char here ... */ + if (s->outptr[-1] == '\n') + s->outptr--; + s->outptr[0] = 0; + + d(printf("header %.10s at %d\n", s->outbuf, s->header_start)); + + header_raw_append_parse(&h->headers, s->outbuf, s->header_start); + + if (inptr[0]=='\n' + || (inptr[0] == '\r' && inptr[1]=='\n')) { + inptr++; + goto header_done; } - start = inptr; + s->outptr = s->outbuf; + s->header_start = -1; } } s->inptr = inptr; @@ -1171,7 +1174,8 @@ static struct _header_scan_stack * folder_scan_content(struct _header_scan_state *s, int *lastone, char **data, int *length) { int atleast = s->atleast; - register char *inptr, *inend; + register char *inptr; + char *inend; char *start; int len; struct _header_scan_stack *part, *overpart = s->parts; @@ -1218,8 +1222,9 @@ retry: /* goto the next line */ while ((*inptr++)!='\n') ; + /* check against the real buffer end, not our 'atleast limited' end */ - if (inptr>= s->inend) { + if (inptr> s->inend) { inptr--; s->midline = TRUE; } else { diff --git a/camel/camel-mime-part-utils.c b/camel/camel-mime-part-utils.c index fa914be960..adbc62d305 100644 --- a/camel/camel-mime-part-utils.c +++ b/camel/camel-mime-part-utils.c @@ -23,7 +23,6 @@ */ #include <config.h> #include <string.h> -#include <glib.h> #include "gmime-content-field.h" #include "string-utils.h" #include "camel-mime-part-utils.h" diff --git a/camel/camel-mime-part.c b/camel/camel-mime-part.c index bb3abe7062..fa22cf9dcb 100644 --- a/camel/camel-mime-part.c +++ b/camel/camel-mime-part.c @@ -25,7 +25,6 @@ #include <config.h> #include <string.h> -#include <glib.h> #include "camel-mime-part.h" #include <stdio.h> #include "gmime-content-field.h" diff --git a/camel/camel-mime-utils.c b/camel/camel-mime-utils.c index 5eb26a6385..22b252116b 100644 --- a/camel/camel-mime-utils.c +++ b/camel/camel-mime-utils.c @@ -38,6 +38,7 @@ #include "camel-mime-utils.h" +#if 0 int strdup_count = 0; int malloc_count = 0; int free_count = 0; @@ -45,9 +46,10 @@ int free_count = 0; #define g_strdup(x) (strdup_count++, g_strdup(x)) #define g_malloc(x) (malloc_count++, g_malloc(x)) #define g_free(x) (free_count++, g_free(x)) +#endif /* for all warnings ... */ -#define w(x) +#define w(x) x #define d(x) #define d2(x) diff --git a/camel/providers/mbox/camel-mbox-summary.c b/camel/providers/mbox/camel-mbox-summary.c index 35b7945e49..fedd9f6411 100644 --- a/camel/providers/mbox/camel-mbox-summary.c +++ b/camel/providers/mbox/camel-mbox-summary.c @@ -1056,11 +1056,19 @@ int camel_mbox_summary_check(CamelMboxSummary *s) static void camel_mbox_summary_add(CamelMboxSummary *s, CamelMboxMessageInfo *info) { + CamelMboxMessageInfo *old; + +retry: if (info->info.uid == NULL) { info->info.uid = g_strdup_printf("%u", s->nextuid++); } - if (g_hash_table_lookup(s->message_uid, info->info.uid)) { - g_error("Trying to insert message with clashing uid's"); + if (( old = g_hash_table_lookup(s->message_uid, info->info.uid) )) { +#warning do something fatal with a fatal error. + /* err, once i work out why it keeps getting called so often */ + d(g_warning("Trying to insert message with clashing uid's new %s exist %s", info->info.uid, old->info.uid)); + g_free(info->info.uid); + info->info.uid = NULL; + goto retry; } d(printf("adding %s\n", info->info.uid)); g_ptr_array_add(s->messages, info); |