X-Git-Url: http://git.madism.org/?p=apps%2Fmadmutt.git;a=blobdiff_plain;f=mbox.c;h=c3dc0fd185cb1c93a5e6684d7b43e392f7564052;hp=15d58f7fefefee9db098fdfc91da54faf3876141;hb=d5fc962299f48696697e29f323e78c8bba6ca2d1;hpb=b17296ba049d71986028ac83f0b415a021d0691c diff --git a/mbox.c b/mbox.c index 15d58f7..c3dc0fd 100644 --- a/mbox.c +++ b/mbox.c @@ -13,6 +13,11 @@ # include "config.h" #endif +#include +#include +#include +#include + #include "mutt.h" #include "mx.h" #include "buffy.h" @@ -20,14 +25,8 @@ #include "sort.h" #include "thread.h" #include "copy.h" - -#ifdef USE_COMPRESSED #include "compress.h" -#endif -#include "lib/mem.h" -#include "lib/intl.h" -#include "lib/str.h" #include "lib/debug.h" #include @@ -42,10 +41,10 @@ /* struct used by mutt_sync_mailbox() to store new offsets */ struct m_update_t { short valid; - long hdr; - long body; + off_t hdr; + off_t body; long lines; - long length; + off_t length; }; @@ -94,14 +93,10 @@ static int mmdf_parse_mailbox (CONTEXT * ctx) int count = 0, oldmsgcount = ctx->msgcount; int lines; time_t t, tz; - LOFF_T loc, tmploc; + off_t loc, tmploc; HEADER *hdr; struct stat sb; -#ifdef NFS_ATTRIBUTE_HACK - struct utimbuf newtime; -#endif - if (stat (ctx->path, &sb) == -1) { mutt_perror (ctx->path); return (-1); @@ -109,25 +104,17 @@ static int mmdf_parse_mailbox (CONTEXT * ctx) ctx->mtime = sb.st_mtime; ctx->size = sb.st_size; -#ifdef NFS_ATTRIBUTE_HACK - if (sb.st_mtime > sb.st_atime) { - newtime.modtime = sb.st_mtime; - newtime.actime = time (NULL); - utime (ctx->path, &newtime); - } -#endif - /* precompute the local timezone to speed up calculation of the received time */ tz = mutt_local_tz (0); buf[sizeof (buf) - 1] = 0; - FOREVER { + for (;;) { if (fgets (buf, sizeof (buf) - 1, ctx->fp) == NULL) break; - if (str_cmp (buf, MMDF_SEP) == 0) { + if (m_strcmp(buf, MMDF_SEP) == 0) { loc = ftello (ctx->fp); count++; @@ -171,7 +158,7 @@ static int mmdf_parse_mailbox (CONTEXT * ctx) if (0 < tmploc && tmploc < ctx->size) { if (fseeko (ctx->fp, tmploc, SEEK_SET) != 0 || fgets (buf, sizeof (buf) - 1, ctx->fp) == NULL || - str_cmp (MMDF_SEP, buf) != 0) { + m_strcmp(MMDF_SEP, buf) != 0) { if (fseeko (ctx->fp, loc, SEEK_SET) != 0) debug_print (1, ("fseeko() failed\n")); hdr->content->length = -1; @@ -190,7 +177,7 @@ static int mmdf_parse_mailbox (CONTEXT * ctx) if (fgets (buf, sizeof (buf) - 1, ctx->fp) == NULL) break; lines++; - } while (str_cmp (buf, MMDF_SEP) != 0); + } while (m_strcmp(buf, MMDF_SEP) != 0); hdr->lines = lines; hdr->content->length = loc - hdr->content->offset; @@ -201,7 +188,7 @@ static int mmdf_parse_mailbox (CONTEXT * ctx) rfc822_parse_adrlist (hdr->env->return_path, return_path); if (!hdr->env->from) - hdr->env->from = rfc822_cpy_adr (hdr->env->return_path); + hdr->env->from = address_list_dup (hdr->env->return_path); ctx->msgcount++; } @@ -232,11 +219,7 @@ static int mbox_parse_mailbox (CONTEXT * ctx) HEADER *curhdr; time_t t, tz; int count = 0, lines = 0; - LOFF_T loc; - -#ifdef NFS_ATTRIBUTE_HACK - struct utimbuf newtime; -#endif + off_t loc; /* Save information about the folder at the time we opened it. */ if (stat (ctx->path, &sb) == -1) { @@ -247,14 +230,6 @@ static int mbox_parse_mailbox (CONTEXT * ctx) ctx->size = sb.st_size; ctx->mtime = sb.st_mtime; -#ifdef NFS_ATTRIBUTE_HACK - if (sb.st_mtime > sb.st_atime) { - newtime.modtime = sb.st_mtime; - newtime.actime = time (NULL); - utime (ctx->path, &newtime); - } -#endif - if (!ctx->readonly) ctx->readonly = access (ctx->path, W_OK) ? 1 : 0; @@ -299,7 +274,7 @@ static int mbox_parse_mailbox (CONTEXT * ctx) * save time by not having to search for the next message marker). */ if (curhdr->content->length > 0) { - LOFF_T tmploc; + off_t tmploc; loc = ftello (ctx->fp); tmploc = loc + curhdr->content->length + 1; @@ -311,9 +286,9 @@ static int mbox_parse_mailbox (CONTEXT * ctx) */ if (fseeko (ctx->fp, tmploc, SEEK_SET) != 0 || fgets (buf, sizeof (buf), ctx->fp) == NULL || - str_ncmp ("From ", buf, 5) != 0) { - debug_print (1, ("bad content-length in message %d (cl=%ld)\n", - curhdr->index, curhdr->content->length)); + m_strncmp("From ", buf, 5) != 0) { + debug_print (1, ("bad content-length in message %d (cl=%zd)\n", + curhdr->index, curhdr->content->length)); debug_print (1, ("LINE: %s\n", buf)); if (fseeko (ctx->fp, loc, SEEK_SET) != 0) { /* nope, return the previous position */ debug_print (1, ("fseeko() failed\n")); @@ -357,7 +332,7 @@ static int mbox_parse_mailbox (CONTEXT * ctx) rfc822_parse_adrlist (curhdr->env->return_path, return_path); if (!curhdr->env->from) - curhdr->env->from = rfc822_cpy_adr (curhdr->env->return_path); + curhdr->env->from = address_list_dup (curhdr->env->return_path); lines = 0; } @@ -468,8 +443,8 @@ static int _mbox_check_mailbox (CONTEXT * ctx, int *index_hint) 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 && str_ncmp ("From ", buffer, 5) == 0) - || (ctx->magic == M_MMDF && str_cmp (MMDF_SEP, buffer) == 0)) { + if ((ctx->magic == M_MBOX && m_strncmp("From ", buffer, 5) == 0) + || (ctx->magic == M_MMDF && m_strcmp(MMDF_SEP, buffer) == 0)) { if (fseeko (ctx->fp, ctx->size, SEEK_SET) != 0) debug_print (1, ("fseeko() failed\n")); if (ctx->magic == M_MBOX) @@ -553,7 +528,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 */ - LOFF_T offset; /* location in mailbox to write changed messages */ + off_t offset; /* location in mailbox to write changed messages */ struct stat statbuf; struct utimbuf utimebuf; struct m_update_t *newOffset = NULL; @@ -644,8 +619,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 = mem_calloc (ctx->msgcount - first, sizeof (struct m_update_t)); - oldOffset = mem_calloc (ctx->msgcount - first, sizeof (struct m_update_t)); + newOffset = p_new(struct m_update_t, ctx->msgcount - first); + oldOffset = p_new(struct m_update_t, ctx->msgcount - first); for (i = first, j = 0; i < ctx->msgcount; i++) { /* @@ -750,8 +725,8 @@ static int _mbox_sync_mailbox (CONTEXT * ctx, int unused, int *index_hint) 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 && str_ncmp ("From ", buf, 5) != 0) || - (ctx->magic == M_MMDF && str_cmp (MMDF_SEP, buf) != 0)) { + (ctx->magic == M_MBOX && m_strncmp("From ", buf, 5) != 0) || + (ctx->magic == M_MMDF && m_strcmp(MMDF_SEP, buf) != 0)) { debug_print (1, ("message not in expected position.\n")); debug_print (1, ("LINE: %s\n", buf)); i = -1; @@ -824,8 +799,8 @@ static int _mbox_sync_mailbox (CONTEXT * ctx, int unused, int *index_hint) ctx->hdrs[i]->index = j++; } } - mem_free (&newOffset); - mem_free (&oldOffset); + p_delete(&newOffset); + p_delete(&oldOffset); unlink (tempfile); /* remove partial copy of the mailbox */ mutt_unblock_signals (); @@ -850,8 +825,8 @@ bail: /* Come here in case of disaster */ mbox_unlock_mailbox (ctx); mutt_unblock_signals (); - mem_free (&newOffset); - mem_free (&oldOffset); + p_delete(&newOffset); + p_delete(&oldOffset); if ((ctx->fp = freopen (ctx->path, "r", ctx->fp)) == NULL) { mutt_error _("Could not reopen mailbox!"); @@ -886,10 +861,8 @@ int mbox_close_mailbox (CONTEXT * ctx) { mx_unlock_file (ctx->path, fileno (ctx->fp), 1); -#ifdef USE_COMPRESSED if (ctx->compressinfo) mutt_slow_close_compressed (ctx); -#endif mutt_unblock_signals (); mx_fastclose_mailbox (ctx); @@ -930,11 +903,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); - mem_free (&ctx->v2r); + p_delete(&ctx->v2r); if (ctx->readonly) { for (i = 0; i < ctx->msgcount; i++) mutt_free_header (&(ctx->hdrs[i])); /* nothing to do! */ - mem_free (&ctx->hdrs); + p_delete(&ctx->hdrs); } else { /* save the old headers */ @@ -980,7 +953,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])); - mem_free (&old_hdrs); + p_delete(&old_hdrs); ctx->quiet = 0; return (-1); @@ -1048,7 +1021,7 @@ static int mbox_reopen_mailbox (CONTEXT * ctx, int *index_hint) msg_mod = 1; } } - mem_free (&old_hdrs); + p_delete(&old_hdrs); } ctx->quiet = 0; @@ -1092,9 +1065,9 @@ int mbox_is_magic (const char* path, struct stat* st) { struct utimbuf times; #endif fgets (tmp, sizeof (tmp), f); - if (str_ncmp ("From ", tmp, 5) == 0) + if (m_strncmp("From ", tmp, 5) == 0) magic = M_MBOX; - else if (str_cmp (MMDF_SEP, tmp) == 0) + else if (m_strcmp(MMDF_SEP, tmp) == 0) magic = M_MMDF; safe_fclose (&f); #ifndef BUFFY_SIZE @@ -1111,10 +1084,8 @@ int mbox_is_magic (const char* path, struct stat* st) { return (-1); /* fopen failed */ } -#ifdef USE_COMPRESSED if (magic == -1 && mutt_can_read_compressed (path)) return (M_COMPRESSED); -#endif return (magic); } @@ -1138,7 +1109,7 @@ static int mmdf_commit_message (MESSAGE* msg, CONTEXT* ctx) { } static mx_t* reg_mx (void) { - mx_t* fmt = mem_calloc (1, sizeof (mx_t)); + mx_t* fmt = p_new(mx_t, 1); fmt->local = 1; fmt->mx_check_empty = mbox_check_empty; fmt->mx_is_magic = mbox_is_magic;