And same here ...
authorNotZed <NotZed@HelixCode.com>
Fri, 5 May 2000 08:47:02 +0000 (08:47 +0000)
committerMichael Zucci <zucchi@src.gnome.org>
Fri, 5 May 2000 08:47:02 +0000 (08:47 +0000)
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.

camel/ChangeLog
camel/camel-folder-summary.c
camel/camel-mime-parser.c
camel/camel-mime-part-utils.c
camel/camel-mime-part.c
camel/camel-mime-utils.c
camel/providers/mbox/camel-mbox-summary.c

index ac81cd3..6515fad 100644 (file)
@@ -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().
index 6d8946c..0879d0f 100644 (file)
@@ -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);
index 73a1172..91b4f6c 100644 (file)
@@ -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 {
index fa914be..adbc62d 100644 (file)
@@ -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"
index bb3abe7..fa22cf9 100644 (file)
@@ -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"
index 5eb26a6..22b2521 100644 (file)
@@ -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)
index 35b7945..fedd9f6 100644 (file)
@@ -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);