X-Git-Url: http://git.madism.org/?p=apps%2Fmadmutt.git;a=blobdiff_plain;f=mbox.c;h=ebbd9ae8bb833a580c17a89b2df8f91a135a4a80;hp=1cd5a0c9a8083792dd45628cb621e9ab62340de8;hb=21d34545d4204a0f5672c8bdbeb6a79803eb3a54;hpb=bad8211c28d4b229878e0264012009493db48da5 diff --git a/mbox.c b/mbox.c index 1cd5a0c..ebbd9ae 100644 --- a/mbox.c +++ b/mbox.c @@ -18,6 +18,7 @@ #include "buffy.h" #include "mbox.h" #include "sort.h" +#include "thread.h" #include "copy.h" #ifdef USE_COMPRESSED @@ -41,10 +42,10 @@ /* struct used by mutt_sync_mailbox() to store new offsets */ struct m_update_t { short valid; - long hdr; - long body; + LOFF_T hdr; + LOFF_T body; long lines; - long length; + LOFF_T length; }; @@ -93,7 +94,7 @@ static int mmdf_parse_mailbox (CONTEXT * ctx) int count = 0, oldmsgcount = ctx->msgcount; int lines; time_t t, tz; - long loc, tmploc; + LOFF_T loc, tmploc; HEADER *hdr; struct stat sb; @@ -126,8 +127,8 @@ static int mmdf_parse_mailbox (CONTEXT * ctx) if (fgets (buf, sizeof (buf) - 1, ctx->fp) == NULL) break; - if (mutt_strcmp (buf, MMDF_SEP) == 0) { - loc = ftell (ctx->fp); + if (str_cmp (buf, MMDF_SEP) == 0) { + loc = ftello (ctx->fp); count++; if (!ctx->quiet && ReadInc && ((count % ReadInc == 0) || count == 1)) @@ -150,8 +151,8 @@ static int mmdf_parse_mailbox (CONTEXT * ctx) return_path[0] = 0; if (!is_from (buf, return_path, sizeof (return_path), &t)) { - if (fseek (ctx->fp, loc, SEEK_SET) != 0) { - debug_print (1, ("fseek() failed\n")); + if (fseeko (ctx->fp, loc, SEEK_SET) != 0) { + debug_print (1, ("fseeko() failed\n")); mutt_error _("Mailbox is corrupt!"); return (-1); @@ -162,17 +163,17 @@ static int mmdf_parse_mailbox (CONTEXT * ctx) hdr->env = mutt_read_rfc822_header (ctx->fp, hdr, 0, 0); - loc = ftell (ctx->fp); + loc = ftello (ctx->fp); if (hdr->content->length > 0 && hdr->lines > 0) { tmploc = loc + hdr->content->length; if (0 < tmploc && tmploc < ctx->size) { - if (fseek (ctx->fp, tmploc, SEEK_SET) != 0 || + if (fseeko (ctx->fp, tmploc, SEEK_SET) != 0 || fgets (buf, sizeof (buf) - 1, ctx->fp) == NULL || - mutt_strcmp (MMDF_SEP, buf) != 0) { - if (fseek (ctx->fp, loc, SEEK_SET) != 0) - debug_print (1, ("fseek() failed\n")); + str_cmp (MMDF_SEP, buf) != 0) { + if (fseeko (ctx->fp, loc, SEEK_SET) != 0) + debug_print (1, ("fseeko() failed\n")); hdr->content->length = -1; } } @@ -185,11 +186,11 @@ static int mmdf_parse_mailbox (CONTEXT * ctx) if (hdr->content->length < 0) { lines = -1; do { - loc = ftell (ctx->fp); + loc = ftello (ctx->fp); if (fgets (buf, sizeof (buf) - 1, ctx->fp) == NULL) break; lines++; - } while (mutt_strcmp (buf, MMDF_SEP) != 0); + } while (str_cmp (buf, MMDF_SEP) != 0); hdr->lines = lines; hdr->content->length = loc - hdr->content->offset; @@ -231,7 +232,7 @@ static int mbox_parse_mailbox (CONTEXT * ctx) HEADER *curhdr; time_t t, tz; int count = 0, lines = 0; - long loc; + LOFF_T loc; #ifdef NFS_ATTRIBUTE_HACK struct utimbuf newtime; @@ -261,7 +262,7 @@ static int mbox_parse_mailbox (CONTEXT * ctx) date received */ tz = mutt_local_tz (0); - loc = ftell (ctx->fp); + loc = ftello (ctx->fp); while (fgets (buf, sizeof (buf), ctx->fp) != NULL) { if (is_from (buf, return_path, sizeof (return_path), &t)) { /* Save the Content-Length of the previous message */ @@ -281,7 +282,7 @@ static int mbox_parse_mailbox (CONTEXT * ctx) if (!ctx->quiet && ReadInc && ((count % ReadInc == 0) || count == 1)) mutt_message (_("Reading %s... %d (%d%%)"), ctx->path, count, - (int) (ftell (ctx->fp) / (ctx->size / 100 + 1))); + (int) (ftello (ctx->fp) / (ctx->size / 100 + 1))); if (ctx->msgcount == ctx->hdrmax) mx_alloc_memory (ctx); @@ -298,9 +299,9 @@ static int mbox_parse_mailbox (CONTEXT * ctx) * save time by not having to search for the next message marker). */ if (curhdr->content->length > 0) { - long tmploc; + LOFF_T tmploc; - loc = ftell (ctx->fp); + loc = ftello (ctx->fp); tmploc = loc + curhdr->content->length + 1; if (0 < tmploc && tmploc < ctx->size) { @@ -308,14 +309,14 @@ static int mbox_parse_mailbox (CONTEXT * ctx) * check to see if the content-length looks valid. we expect to * to see a valid message separator at this point in the stream */ - if (fseek (ctx->fp, tmploc, SEEK_SET) != 0 || + if (fseeko (ctx->fp, tmploc, SEEK_SET) != 0 || fgets (buf, sizeof (buf), ctx->fp) == NULL || - safe_strncmp ("From ", buf, 5) != 0) { - debug_print (1, ("bad content-length in message %d (cl=%ld)\n", - curhdr->index, curhdr->content->length)); + str_ncmp ("From ", buf, 5) != 0) { + debug_print (1, ("bad content-length in message %d (cl=" + OFF_T_FMT ")\n", curhdr->index, curhdr->content->length)); debug_print (1, ("LINE: %s\n", buf)); - if (fseek (ctx->fp, loc, SEEK_SET) != 0) { /* nope, return the previous position */ - debug_print (1, ("fseek() failed\n")); + if (fseeko (ctx->fp, loc, SEEK_SET) != 0) { /* nope, return the previous position */ + debug_print (1, ("fseeko() failed\n")); } curhdr->content->length = -1; } @@ -335,8 +336,8 @@ static int mbox_parse_mailbox (CONTEXT * ctx) int cl = curhdr->content->length; /* count the number of lines in this message */ - if (fseek (ctx->fp, loc, SEEK_SET) != 0) - debug_print (1, ("fseek() failed\n")); + if (fseeko (ctx->fp, loc, SEEK_SET) != 0) + debug_print (1, ("fseeko() failed\n")); while (cl-- > 0) { if (fgetc (ctx->fp) == '\n') curhdr->lines++; @@ -344,8 +345,8 @@ static int mbox_parse_mailbox (CONTEXT * ctx) } /* return to the offset of the next message separator */ - if (fseek (ctx->fp, tmploc, SEEK_SET) != 0) - debug_print (1, ("fseek() failed\n")); + if (fseeko (ctx->fp, tmploc, SEEK_SET) != 0) + debug_print (1, ("fseeko() failed\n")); } } @@ -363,7 +364,7 @@ static int mbox_parse_mailbox (CONTEXT * ctx) else lines++; - loc = ftell (ctx->fp); + loc = ftello (ctx->fp); } /* @@ -374,7 +375,7 @@ static int mbox_parse_mailbox (CONTEXT * ctx) */ if (count > 0) { if (PREV->content->length < 0) { - PREV->content->length = ftell (ctx->fp) - PREV->content->offset - 1; + PREV->content->length = ftello (ctx->fp) - PREV->content->offset - 1; if (PREV->content->length < 0) PREV->content->length = 0; } @@ -464,13 +465,13 @@ static int _mbox_check_mailbox (CONTEXT * ctx, int *index_hint) * see the message separator at *exactly* what used to be the end of the * folder. */ - if (fseek (ctx->fp, ctx->size, SEEK_SET) != 0) - debug_print (1, ("fseek() failed\n")); + if (fseeko (ctx->fp, ctx->size, SEEK_SET) != 0) + debug_print (1, ("fseeko() failed\n")); if (fgets (buffer, sizeof (buffer), ctx->fp) != NULL) { - if ((ctx->magic == M_MBOX && safe_strncmp ("From ", buffer, 5) == 0) - || (ctx->magic == M_MMDF && mutt_strcmp (MMDF_SEP, buffer) == 0)) { - if (fseek (ctx->fp, ctx->size, SEEK_SET) != 0) - debug_print (1, ("fseek() failed\n")); + if ((ctx->magic == M_MBOX && str_ncmp ("From ", buffer, 5) == 0) + || (ctx->magic == M_MMDF && str_cmp (MMDF_SEP, buffer) == 0)) { + if (fseeko (ctx->fp, ctx->size, SEEK_SET) != 0) + debug_print (1, ("fseeko() failed\n")); if (ctx->magic == M_MBOX) mbox_parse_mailbox (ctx); else @@ -552,7 +553,7 @@ static int _mbox_sync_mailbox (CONTEXT * ctx, int unused, int *index_hint) int rc = -1; int need_sort = 0; /* flag to resort mailbox if new mail arrives */ int first = -1; /* first message to be written */ - long offset; /* location in mailbox to write changed messages */ + LOFF_T offset; /* location in mailbox to write changed messages */ struct stat statbuf; struct utimbuf utimebuf; struct m_update_t *newOffset = NULL; @@ -643,8 +644,8 @@ static int _mbox_sync_mailbox (CONTEXT * ctx, int unused, int *index_hint) offset -= (sizeof MMDF_SEP - 1); /* allocate space for the new offsets */ - newOffset = safe_calloc (ctx->msgcount - first, sizeof (struct m_update_t)); - oldOffset = safe_calloc (ctx->msgcount - first, sizeof (struct m_update_t)); + newOffset = mem_calloc (ctx->msgcount - first, sizeof (struct m_update_t)); + oldOffset = mem_calloc (ctx->msgcount - first, sizeof (struct m_update_t)); for (i = first, j = 0; i < ctx->msgcount; i++) { /* @@ -662,7 +663,7 @@ static int _mbox_sync_mailbox (CONTEXT * ctx, int unused, int *index_hint) j++; if (!ctx->quiet && WriteInc && ((i % WriteInc) == 0 || j == 1)) mutt_message (_("Writing messages... %d (%d%%)"), i, - (int) (ftell (ctx->fp) / (ctx->size / 100 + 1))); + (int) (ftello (ctx->fp) / (ctx->size / 100 + 1))); if (ctx->magic == M_MMDF) { if (fputs (MMDF_SEP, fp) == EOF) { @@ -678,7 +679,7 @@ static int _mbox_sync_mailbox (CONTEXT * ctx, int unused, int *index_hint) * temporary file only contains saved message which are located after * `offset' in the real mailbox */ - newOffset[i - first].hdr = ftell (fp) + offset; + newOffset[i - first].hdr = ftello (fp) + offset; if (mutt_copy_message (fp, ctx, ctx->hdrs[i], M_CM_UPDATE, @@ -696,7 +697,7 @@ static int _mbox_sync_mailbox (CONTEXT * ctx, int unused, int *index_hint) * if the user accesses it later. */ newOffset[i - first].body = - ftell (fp) - ctx->hdrs[i]->content->length + offset; + ftello (fp) - ctx->hdrs[i]->content->length + offset; mutt_free_body (&ctx->hdrs[i]->content->parts); switch (ctx->magic) { @@ -746,19 +747,19 @@ static int _mbox_sync_mailbox (CONTEXT * ctx, int unused, int *index_hint) return (-1); } - if (fseek (ctx->fp, offset, SEEK_SET) != 0 || /* seek the append location */ + if (fseeko (ctx->fp, offset, SEEK_SET) != 0 || /* seek the append location */ /* do a sanity check to make sure the mailbox looks ok */ fgets (buf, sizeof (buf), ctx->fp) == NULL || - (ctx->magic == M_MBOX && safe_strncmp ("From ", buf, 5) != 0) || - (ctx->magic == M_MMDF && mutt_strcmp (MMDF_SEP, buf) != 0)) { + (ctx->magic == M_MBOX && str_ncmp ("From ", buf, 5) != 0) || + (ctx->magic == M_MMDF && str_cmp (MMDF_SEP, buf) != 0)) { debug_print (1, ("message not in expected position.\n")); debug_print (1, ("LINE: %s\n", buf)); i = -1; } else { - if (fseek (ctx->fp, offset, SEEK_SET) != 0) { /* return to proper offset */ + if (fseeko (ctx->fp, offset, SEEK_SET) != 0) { /* return to proper offset */ i = -1; - debug_print (1, ("fseek() failed\n")); + debug_print (1, ("fseeko() failed\n")); } else { /* copy the temp mailbox back into place starting at the first @@ -772,7 +773,7 @@ static int _mbox_sync_mailbox (CONTEXT * ctx, int unused, int *index_hint) i = -1; } if (i == 0) { - ctx->size = ftell (ctx->fp); /* update the size of the mailbox */ + ctx->size = ftello (ctx->fp); /* update the size of the mailbox */ ftruncate (fileno (ctx->fp), ctx->size); } } @@ -823,8 +824,8 @@ static int _mbox_sync_mailbox (CONTEXT * ctx, int unused, int *index_hint) ctx->hdrs[i]->index = j++; } } - FREE (&newOffset); - FREE (&oldOffset); + mem_free (&newOffset); + mem_free (&oldOffset); unlink (tempfile); /* remove partial copy of the mailbox */ mutt_unblock_signals (); @@ -849,8 +850,8 @@ bail: /* Come here in case of disaster */ mbox_unlock_mailbox (ctx); mutt_unblock_signals (); - FREE (&newOffset); - FREE (&oldOffset); + mem_free (&newOffset); + mem_free (&oldOffset); if ((ctx->fp = freopen (ctx->path, "r", ctx->fp)) == NULL) { mutt_error _("Could not reopen mailbox!"); @@ -929,11 +930,11 @@ static int mbox_reopen_mailbox (CONTEXT * ctx, int *index_hint) if (ctx->subj_hash) hash_destroy (&ctx->subj_hash, NULL); mutt_clear_threads (ctx); - FREE (&ctx->v2r); + mem_free (&ctx->v2r); if (ctx->readonly) { for (i = 0; i < ctx->msgcount; i++) mutt_free_header (&(ctx->hdrs[i])); /* nothing to do! */ - FREE (&ctx->hdrs); + mem_free (&ctx->hdrs); } else { /* save the old headers */ @@ -957,8 +958,8 @@ static int mbox_reopen_mailbox (CONTEXT * ctx, int *index_hint) switch (ctx->magic) { case M_MBOX: case M_MMDF: - if (fseek (ctx->fp, 0, SEEK_SET) != 0) { - debug_print (1, ("fseek() failed\n")); + if (fseeko (ctx->fp, 0, SEEK_SET) != 0) { + debug_print (1, ("fseeko() failed\n")); rc = -1; } else { @@ -979,7 +980,7 @@ static int mbox_reopen_mailbox (CONTEXT * ctx, int *index_hint) /* free the old headers */ for (j = 0; j < old_msgcount; j++) mutt_free_header (&(old_hdrs[j])); - FREE (&old_hdrs); + mem_free (&old_hdrs); ctx->quiet = 0; return (-1); @@ -1047,7 +1048,7 @@ static int mbox_reopen_mailbox (CONTEXT * ctx, int *index_hint) msg_mod = 1; } } - FREE (&old_hdrs); + mem_free (&old_hdrs); } ctx->quiet = 0; @@ -1091,9 +1092,9 @@ int mbox_is_magic (const char* path, struct stat* st) { struct utimbuf times; #endif fgets (tmp, sizeof (tmp), f); - if (safe_strncmp ("From ", tmp, 5) == 0) + if (str_ncmp ("From ", tmp, 5) == 0) magic = M_MBOX; - else if (mutt_strcmp (MMDF_SEP, tmp) == 0) + else if (str_cmp (MMDF_SEP, tmp) == 0) magic = M_MMDF; safe_fclose (&f); #ifndef BUFFY_SIZE @@ -1137,7 +1138,7 @@ static int mmdf_commit_message (MESSAGE* msg, CONTEXT* ctx) { } static mx_t* reg_mx (void) { - mx_t* fmt = safe_calloc (1, sizeof (mx_t)); + mx_t* fmt = mem_calloc (1, sizeof (mx_t)); fmt->local = 1; fmt->mx_check_empty = mbox_check_empty; fmt->mx_is_magic = mbox_is_magic;