X-Git-Url: http://git.madism.org/?p=apps%2Fmadmutt.git;a=blobdiff_plain;f=mh.c;h=d55115d6845b44295aff14a791b3959a5a845d99;hp=66216dc89e27913e04ca9705878f5822a9894213;hb=122350970aa462ca53ed28f52c31703b7fc6e854;hpb=debd2491451020d9fd5f0440bb2dada0b9eac6e7 diff --git a/mh.c b/mh.c index 66216dc..d55115d 100644 --- a/mh.c +++ b/mh.c @@ -17,6 +17,11 @@ # include "config.h" #endif +#include +#include +#include +#include + #include "mutt.h" #include "mx.h" #include "mh.h" @@ -24,10 +29,9 @@ #include "copy.h" #include "buffy.h" #include "sort.h" +#include "thread.h" +#include "hcache.h" -#include "lib/mem.h" -#include "lib/intl.h" -#include "lib/str.h" #include "lib/debug.h" #include @@ -52,9 +56,6 @@ struct maildir { HEADER *h; char *canon_fname; unsigned header_parsed:1; -#ifdef USE_INODESORT - ino_t inode; -#endif /* USE_INODESORT */ struct maildir *next; }; @@ -81,7 +82,7 @@ static void mhs_alloc (struct mh_sequences *mhs, int i) if (i > mhs->max || !mhs->flags) { newmax = i + 128; - safe_realloc (&mhs->flags, sizeof (mhs->flags[0]) * (newmax + 1)); + p_realloc(&mhs->flags, newmax + 1); for (j = mhs->max + 1; j <= newmax; j++) mhs->flags[j] = 0; @@ -91,7 +92,7 @@ static void mhs_alloc (struct mh_sequences *mhs, int i) static void mhs_free_sequences (struct mh_sequences *mhs) { - FREE (&mhs->flags); + p_delete(&mhs->flags); } static short mhs_check (struct mh_sequences *mhs, int i) @@ -157,11 +158,11 @@ static void mh_read_sequences (struct mh_sequences *mhs, const char *path) if (!(t = strtok (buff, " \t:"))) continue; - if (!mutt_strcmp (t, MhUnseen)) + if (!m_strcmp(t, MhUnseen)) f = MH_SEQ_UNSEEN; - else if (!mutt_strcmp (t, MhFlagged)) + else if (!m_strcmp(t, MhFlagged)) f = MH_SEQ_FLAGGED; - else if (!mutt_strcmp (t, MhReplied)) + else if (!m_strcmp(t, MhReplied)) f = MH_SEQ_REPLIED; else /* unknown sequence */ continue; @@ -173,7 +174,7 @@ static void mh_read_sequences (struct mh_sequences *mhs, const char *path) } } - FREE (&buff); + p_delete(&buff); safe_fclose (&fp); } @@ -182,7 +183,7 @@ int mh_buffy (const char *path) int i, r = 0; struct mh_sequences mhs; - memset (&mhs, 0, sizeof (mhs)); + p_clear(&mhs, 1); mh_read_sequences (&mhs, path); for (i = 0; !r && i <= mhs.max; i++) @@ -197,7 +198,7 @@ static int mh_mkstemp (CONTEXT * dest, FILE ** fp, char **tgt) int fd; char path[_POSIX_PATH_MAX]; - FOREVER { + for (;;) { snprintf (path, _POSIX_PATH_MAX, "%s/.mutt-%s-%d-%d", dest->path, NONULL (Hostname), (int) getpid (), Counter++); umask (Umask); @@ -208,13 +209,13 @@ static int mh_mkstemp (CONTEXT * dest, FILE ** fp, char **tgt) } } else { - *tgt = safe_strdup (path); + *tgt = m_strdup(path); break; } } if ((*fp = fdopen (fd, "w")) == NULL) { - FREE (tgt); + p_delete(tgt); close (fd); unlink (path); return (-1); @@ -287,7 +288,7 @@ void mh_update_sequences (CONTEXT * ctx) struct mh_sequences mhs; - memset (&mhs, 0, sizeof (mhs)); + p_clear(&mhs, 1); snprintf (seq_unseen, sizeof (seq_unseen), "%s:", NONULL (MhUnseen)); snprintf (seq_replied, sizeof (seq_replied), "%s:", NONULL (MhReplied)); @@ -304,11 +305,11 @@ void mh_update_sequences (CONTEXT * ctx) /* first, copy unknown sequences */ if ((ofp = fopen (sequences, "r"))) { while ((buff = mutt_read_line (buff, &s, ofp, &l))) { - if (!safe_strncmp (buff, seq_unseen, mutt_strlen (seq_unseen))) + if (!m_strncmp(buff, seq_unseen, m_strlen(seq_unseen))) continue; - if (!safe_strncmp (buff, seq_flagged, mutt_strlen (seq_flagged))) + if (!m_strncmp(buff, seq_flagged, m_strlen(seq_flagged))) continue; - if (!safe_strncmp (buff, seq_replied, mutt_strlen (seq_replied))) + if (!m_strncmp(buff, seq_replied, m_strlen(seq_replied))) continue; fprintf (nfp, "%s\n", buff); @@ -362,7 +363,7 @@ void mh_update_sequences (CONTEXT * ctx) unlink (tmpfname); } - FREE (&tmpfname); + p_delete(&tmpfname); } static void mh_sequences_add_one (CONTEXT * ctx, int n, short unseen, @@ -395,17 +396,17 @@ static void mh_sequences_add_one (CONTEXT * ctx, int n, short unseen, snprintf (sequences, sizeof (sequences), "%s/.mh_sequences", ctx->path); if ((ofp = fopen (sequences, "r"))) { while ((buff = mutt_read_line (buff, &sz, ofp, &line))) { - if (unseen && !strncmp (buff, seq_unseen, mutt_strlen (seq_unseen))) { + if (unseen && !strncmp (buff, seq_unseen, m_strlen(seq_unseen))) { fprintf (nfp, "%s %d\n", buff, n); unseen_done = 1; } else if (flagged - && !strncmp (buff, seq_flagged, mutt_strlen (seq_flagged))) { + && !strncmp (buff, seq_flagged, m_strlen(seq_flagged))) { fprintf (nfp, "%s %d\n", buff, n); flagged_done = 1; } else if (replied - && !strncmp (buff, seq_replied, mutt_strlen (seq_replied))) { + && !strncmp (buff, seq_replied, m_strlen(seq_replied))) { fprintf (nfp, "%s %d\n", buff, n); replied_done = 1; } @@ -414,7 +415,7 @@ static void mh_sequences_add_one (CONTEXT * ctx, int n, short unseen, } } safe_fclose (&ofp); - FREE (&buff); + p_delete(&buff); if (!unseen_done && unseen) fprintf (nfp, "%s: %d\n", NONULL (MhUnseen), n); @@ -429,7 +430,7 @@ static void mh_sequences_add_one (CONTEXT * ctx, int n, short unseen, if (safe_rename (tmpfname, sequences) != 0) unlink (tmpfname); - FREE (&tmpfname); + p_delete(&tmpfname); } static void mh_update_maildir (struct maildir *md, struct mh_sequences *mhs) @@ -460,11 +461,11 @@ static void maildir_free_entry (struct maildir **md) if (!md || !*md) return; - FREE (&(*md)->canon_fname); + p_delete(&(*md)->canon_fname); if ((*md)->h) - mutt_free_header (&(*md)->h); + header_delete(&(*md)->h); - FREE (md); + p_delete(md); } static void maildir_free_maildir (struct maildir **md) @@ -488,10 +489,10 @@ static void maildir_parse_flags (HEADER * h, const char *path) h->read = 0; h->replied = 0; - if ((p = strrchr (path, ':')) != NULL && safe_strncmp (p + 1, "2,", 2) == 0) { + if ((p = strrchr (path, ':')) != NULL && m_strncmp(p + 1, "2,", 2) == 0) { p += 3; - str_replace (&h->maildir_flags, p); + m_strreplace(&h->maildir_flags, p); q = h->maildir_flags; while (*p) { @@ -525,7 +526,7 @@ static void maildir_parse_flags (HEADER * h, const char *path) } if (q == h->maildir_flags) - FREE (&h->maildir_flags); + p_delete(&h->maildir_flags); else if (q) *q = '\0'; } @@ -546,7 +547,7 @@ static void maildir_update_mtime (CONTEXT * ctx) if (stat (buf, &st) == 0) ctx->mtime_cur = st.st_mtime; - strfcpy (buf, ctx->path, sizeof (buf)); + m_strcpy(buf, sizeof(buf), ctx->path); } if (stat (buf, &st) == 0) @@ -566,7 +567,7 @@ static HEADER *maildir_parse_message (int magic, const char *fname, if ((f = fopen (fname, "r")) != NULL) { if (!h) - h = mutt_new_header (); + h = header_new(); h->env = mutt_read_rfc822_header (f, h, 0, 0); fstat (fileno (f), &st); @@ -623,7 +624,7 @@ static int maildir_parse_entry (CONTEXT * ctx, struct maildir ***last, if (ctx->magic == M_MH) h = maildir_parse_message (ctx->magic, buf, is_old, NULL); else { - h = mutt_new_header (); + h = header_new(); h->old = is_old; maildir_parse_flags (h, buf); } @@ -637,17 +638,14 @@ static int maildir_parse_entry (CONTEXT * ctx, struct maildir ***last, if (subdir) { snprintf (buf, sizeof (buf), "%s/%s", subdir, fname); - h->path = safe_strdup (buf); + h->path = m_strdup(buf); } else - h->path = safe_strdup (fname); + h->path = m_strdup(fname); - entry = safe_calloc (sizeof (struct maildir), 1); + entry = p_new(struct maildir, 1); entry->h = h; entry->header_parsed = (ctx->magic == M_MH); -#ifdef USE_INODESORT - entry->inode = inode; -#endif /* USE_INODESORT */ **last = entry; *last = &entry->next; @@ -683,10 +681,10 @@ static int maildir_parse_dir (CONTEXT * ctx, struct maildir ***last, if (subdir) { snprintf (buf, sizeof (buf), "%s/%s", ctx->path, subdir); - is_old = (mutt_strcmp ("cur", subdir) == 0); + is_old = (m_strcmp("cur", subdir) == 0); } else - strfcpy (buf, ctx->path, sizeof (buf)); + m_strcpy(buf, sizeof(buf), ctx->path); if ((dirp = opendir (buf)) == NULL) return -1; @@ -701,7 +699,12 @@ static int maildir_parse_dir (CONTEXT * ctx, struct maildir ***last, debug_print (2, ("parsing %s\n", de->d_name)); maildir_parse_entry (ctx, last, subdir, de->d_name, count, is_old, - de->d_ino); +#if HAVE_DIRENT_D_INO + de->d_ino +#else + 0 +#endif + ); } closedir (dirp); @@ -751,91 +754,12 @@ static int maildir_move_to_context (CONTEXT * ctx, struct maildir **md) return r; } -#ifdef USE_INODESORT -/* - * Merge two maildir lists according to the inode numbers. - */ -static struct maildir *maildir_merge_inode (struct maildir *left, - struct maildir *right) -{ - struct maildir *head; - struct maildir *tail; - - if (left && right) { - if (left->inode < right->inode) { - head = left; - left = left->next; - } - else { - head = right; - right = right->next; - } - } - else { - if (left) - return left; - else - return right; - } - - tail = head; - - while (left && right) { - if (left->inode < right->inode) { - tail->next = left; - left = left->next; - } - else { - tail->next = right; - right = right->next; - } - tail = tail->next; - } - - if (left) { - tail->next = left; - } - else { - tail->next = right; - } - - return head; -} - -/* - * Sort maildir list according to inode. - */ -static struct maildir *maildir_sort_inode (struct maildir *list) -{ - struct maildir *left = list; - struct maildir *right = list; - - if (!list || !list->next) { - return list; - } - - list = list->next; - while (list && list->next) { - right = right->next; - list = list->next->next; - } - - list = right; - right = right->next; - list->next = 0; - - left = maildir_sort_inode (left); - right = maildir_sort_inode (right); - return maildir_merge_inode (left, right); -} -#endif /* USE_INODESORT */ - -#if USE_HCACHE +#ifdef USE_HCACHE static size_t maildir_hcache_keylen (const char *fn) { const char *p = strchr (fn, ':'); - return p ? (size_t) (p - fn) : mutt_strlen (fn); + return p ? (size_t) (p - fn) : m_strlen(fn); } #endif @@ -849,7 +773,7 @@ void maildir_delayed_parsing (CONTEXT * ctx, struct maildir *md) char fn[_POSIX_PATH_MAX]; int count; -#if USE_HCACHE +#ifdef USE_HCACHE void *hc = NULL; void *data; struct timeval *when = NULL; @@ -863,7 +787,7 @@ void maildir_delayed_parsing (CONTEXT * ctx, struct maildir *md) if (!(p && p->h && !p->header_parsed)) continue; -#if USE_HCACHE +#ifdef USE_HCACHE data = mutt_hcache_fetch (hc, p->h->path + 3, &maildir_hcache_keylen); when = (struct timeval *) data; #endif @@ -872,7 +796,7 @@ void maildir_delayed_parsing (CONTEXT * ctx, struct maildir *md) mutt_message (_("Reading %s... %d"), ctx->path, count); snprintf (fn, sizeof (fn), "%s/%s", ctx->path, p->h->path); -#if USE_HCACHE +#ifdef USE_HCACHE if (option (OPTHCACHEVERIFY)) { ret = stat (fn, &lastchanged); } @@ -890,17 +814,17 @@ void maildir_delayed_parsing (CONTEXT * ctx, struct maildir *md) if (maildir_parse_message (ctx->magic, fn, p->h->old, p->h)) { p->header_parsed = 1; maildir_parse_flags (p->h, fn); -#if USE_HCACHE +#ifdef USE_HCACHE mutt_hcache_store (hc, p->h->path + 3, p->h, 0, &maildir_hcache_keylen); #endif } else - mutt_free_header (&p->h); -#if USE_HCACHE - FREE (&data); + header_delete(&p->h); +#ifdef USE_HCACHE + p_delete(&data); #endif } -#if USE_HCACHE +#ifdef USE_HCACHE mutt_hcache_close (hc); #endif } @@ -920,7 +844,7 @@ static int _mh_read_dir (CONTEXT * ctx, const char *subdir) int count; - memset (&mhs, 0, sizeof (mhs)); + p_clear(&mhs, 1); maildir_update_mtime (ctx); @@ -936,10 +860,6 @@ static int _mh_read_dir (CONTEXT * ctx, const char *subdir) mhs_free_sequences (&mhs); } -#ifdef USE_INODESORT - md = maildir_sort_inode (md); -#endif /* USE_INODESORT */ - if (ctx->magic == M_MAILDIR) maildir_delayed_parsing (ctx, md); @@ -1001,7 +921,7 @@ static void maildir_flags (char *dest, size_t destlen, HEADER * hdr) hdr->read ? "S" : "", hdr->deleted ? "T" : "", NONULL (hdr->maildir_flags)); if (hdr->maildir_flags) - qsort (tmp, mutt_strlen (tmp), 1, ch_compar); + qsort (tmp, m_strlen(tmp), 1, ch_compar); snprintf (dest, destlen, ":2,%s", tmp); } } @@ -1035,11 +955,11 @@ static int maildir_open_new_message (MESSAGE * msg, CONTEXT * dest, HEADER * hdr *suffix = '\0'; if (hdr && (hdr->read || hdr->old)) - strfcpy (subdir, "cur", sizeof (subdir)); + m_strcpy(subdir, sizeof(subdir), "cur"); else - strfcpy (subdir, "new", sizeof (subdir)); + m_strcpy(subdir, sizeof(subdir), "new"); - FOREVER { + for (;;) { snprintf (path, _POSIX_PATH_MAX, "%s/tmp/%s.%ld.%u_%d.%s%s", dest->path, subdir, (long) time (NULL), (unsigned int) getpid (), Counter++, NONULL (Hostname), suffix); @@ -1055,13 +975,13 @@ static int maildir_open_new_message (MESSAGE * msg, CONTEXT * dest, HEADER * hdr } else { debug_print (2, ("success.\n")); - msg->path = safe_strdup (path); + msg->path = m_strdup(path); break; } } if ((msg->fp = fdopen (fd, "w")) == NULL) { - FREE (&msg->path); + p_delete(&msg->path); close (fd); unlink (path); return (-1); @@ -1093,7 +1013,7 @@ static int maildir_open_new_message (MESSAGE * msg, CONTEXT * dest, HEADER * hdr * */ -int maildir_commit_message (CONTEXT * ctx, MESSAGE * msg, HEADER * hdr) +static int maildir_commit_message (MESSAGE * msg, CONTEXT * ctx, HEADER * hdr) { char subdir[4]; char suffix[16]; @@ -1106,16 +1026,16 @@ int maildir_commit_message (CONTEXT * ctx, MESSAGE * msg, HEADER * hdr) /* extract the subdir */ s = strrchr (msg->path, '/') + 1; - strfcpy (subdir, s, 4); + m_strcpy(subdir, sizeof(subdir), s); /* extract the flags */ if ((s = strchr (s, ':'))) - strfcpy (suffix, s, sizeof (suffix)); + m_strcpy(suffix, sizeof(suffix), s); else suffix[0] = '\0'; /* construct a new file name. */ - FOREVER { + for (;;) { snprintf (path, _POSIX_PATH_MAX, "%s/%ld.%u_%d.%s%s", subdir, (long) time (NULL), (unsigned int) getpid (), Counter++, NONULL (Hostname), suffix); @@ -1125,8 +1045,8 @@ int maildir_commit_message (CONTEXT * ctx, MESSAGE * msg, HEADER * hdr) if (safe_rename (msg->path, full) == 0) { if (hdr) - str_replace (&hdr->path, path); - FREE (&msg->path); + m_strreplace(&hdr->path, path); + p_delete(&msg->path); /* * Adjust the mtime on the file to match the time at which this @@ -1161,7 +1081,7 @@ int maildir_commit_message (CONTEXT * ctx, MESSAGE * msg, HEADER * hdr) */ -static int _mh_commit_message (CONTEXT * ctx, MESSAGE * msg, HEADER * hdr, +static int _mh_commit_message (MESSAGE * msg, CONTEXT * ctx, HEADER * hdr, short updseq) { DIR *dirp; @@ -1205,14 +1125,14 @@ static int _mh_commit_message (CONTEXT * ctx, MESSAGE * msg, HEADER * hdr, * slot. */ - FOREVER { + for (;;) { hi++; snprintf (tmp, sizeof (tmp), "%d", hi); snprintf (path, sizeof (path), "%s/%s", ctx->path, tmp); if (safe_rename (msg->path, path) == 0) { if (hdr) - str_replace (&hdr->path, tmp); - FREE (&msg->path); + m_strreplace(&hdr->path, tmp); + p_delete(&msg->path); break; } else if (errno != EEXIST) { @@ -1226,12 +1146,10 @@ static int _mh_commit_message (CONTEXT * ctx, MESSAGE * msg, HEADER * hdr, return 0; } -int mh_commit_message (CONTEXT * ctx, MESSAGE * msg, HEADER * hdr) -{ - return _mh_commit_message (ctx, msg, hdr, 1); +static int mh_commit_message (MESSAGE * msg, CONTEXT * ctx, HEADER * hdr) { + return _mh_commit_message (msg, ctx, hdr, 1); } - /* Sync a message in an MH folder. * * This code is also used for attachment deletion in maildir @@ -1259,13 +1177,13 @@ static int mh_rewrite_message (CONTEXT * ctx, int msgno) if ((rc = mutt_copy_message (dest->fp, ctx, h, M_CM_UPDATE, CH_UPDATE | CH_UPDATE_LEN)) == 0) { - snprintf (oldpath, _POSIX_PATH_MAX, "%s/%s", ctx->path, h->path); - strfcpy (partpath, h->path, _POSIX_PATH_MAX); + snprintf (oldpath, sizeof(oldpath), "%s/%s", ctx->path, h->path); + m_strcpy(partpath, sizeof(partpath), h->path); if (ctx->magic == M_MAILDIR) - rc = maildir_commit_message (ctx, dest, h); + rc = maildir_commit_message (dest, ctx, h); else - rc = _mh_commit_message (ctx, dest, h, 0); + rc = _mh_commit_message (dest, ctx, h, 0); mx_close_message (&dest); @@ -1292,7 +1210,7 @@ static int mh_rewrite_message (CONTEXT * ctx, int msgno) if (ctx->magic == M_MH && rc == 0) { snprintf (newpath, _POSIX_PATH_MAX, "%s/%s", ctx->path, h->path); if ((rc = safe_rename (newpath, oldpath)) == 0) - str_replace (&h->path, partpath); + m_strreplace(&h->path, partpath); } } else @@ -1345,7 +1263,7 @@ static int maildir_sync_message (CONTEXT * ctx, int msgno) return (-1); } p++; - strfcpy (newpath, p, sizeof (newpath)); + m_strcpy(newpath, sizeof(newpath), p); /* kill the previous flags */ if ((p = strchr (newpath, ':')) != NULL) @@ -1358,7 +1276,7 @@ static int maildir_sync_message (CONTEXT * ctx, int msgno) snprintf (fullpath, sizeof (fullpath), "%s/%s", ctx->path, partpath); snprintf (oldpath, sizeof (oldpath), "%s/%s", ctx->path, h->path); - if (mutt_strcmp (fullpath, oldpath) == 0) { + if (m_strcmp(fullpath, oldpath) == 0) { /* message hasn't really changed */ return 0; } @@ -1370,7 +1288,7 @@ static int maildir_sync_message (CONTEXT * ctx, int msgno) mutt_perror ("rename"); return (-1); } - str_replace (&h->path, partpath); + m_strreplace(&h->path, partpath); } return (0); } @@ -1380,7 +1298,7 @@ static int mh_sync_mailbox (CONTEXT * ctx, int unused, int *index_hint) char path[_POSIX_PATH_MAX], tmp[_POSIX_PATH_MAX]; int i, j; -#if USE_HCACHE +#ifdef USE_HCACHE void *hc = NULL; #endif /* USE_HCACHE */ @@ -1392,7 +1310,7 @@ static int mh_sync_mailbox (CONTEXT * ctx, int unused, int *index_hint) if (i != 0) return i; -#if USE_HCACHE +#ifdef USE_HCACHE if (ctx->magic == M_MAILDIR) hc = mutt_hcache_open (HeaderCache, ctx->path); #endif /* USE_HCACHE */ @@ -1403,7 +1321,7 @@ static int mh_sync_mailbox (CONTEXT * ctx, int unused, int *index_hint) snprintf (path, sizeof (path), "%s/%s", ctx->path, ctx->hdrs[i]->path); if (ctx->magic == M_MAILDIR || (option (OPTMHPURGE) && ctx->magic == M_MH)) { -#if USE_HCACHE +#ifdef USE_HCACHE if (ctx->magic == M_MAILDIR) mutt_hcache_delete (hc, ctx->hdrs[i]->path + 3, &maildir_hcache_keylen); @@ -1436,7 +1354,7 @@ static int mh_sync_mailbox (CONTEXT * ctx, int unused, int *index_hint) } } -#if USE_HCACHE +#ifdef USE_HCACHE if (ctx->magic == M_MAILDIR) mutt_hcache_close (hc); #endif /* USE_HCACHE */ @@ -1461,7 +1379,7 @@ static int mh_sync_mailbox (CONTEXT * ctx, int unused, int *index_hint) return 0; err: -#if USE_HCACHE +#ifdef USE_HCACHE if (ctx->magic == M_MAILDIR) mutt_hcache_close (hc); #endif /* USE_HCACHE */ @@ -1475,7 +1393,7 @@ static char *maildir_canon_filename (char *dest, const char *src, size_t l) if ((t = strrchr (src, '/'))) src = t + 1; - strfcpy (dest, src, l); + m_strcpy(dest, l, src); if ((u = strrchr (dest, ':'))) *u = '\0'; @@ -1607,7 +1525,7 @@ static int maildir_check_mailbox (CONTEXT * ctx, int *index_hint, int unused) for (p = md; p; p = p->next) { maildir_canon_filename (buf, p->h->path, sizeof (buf)); - p->canon_fname = safe_strdup (buf); + p->canon_fname = m_strdup(buf); hash_insert (fnames, p->canon_fname, p, 0); } @@ -1623,8 +1541,8 @@ static int maildir_check_mailbox (CONTEXT * ctx, int *index_hint, int unused) /* check to see if the message has moved to a different * subdirectory. If so, update the associated filename. */ - if (mutt_strcmp (ctx->hdrs[i]->path, p->h->path)) - str_replace (&ctx->hdrs[i]->path, p->h->path); + if (m_strcmp(ctx->hdrs[i]->path, p->h->path)) + m_strreplace(&ctx->hdrs[i]->path, p->h->path); /* if the user hasn't modified the flags on this message, update * the flags we just detected. @@ -1637,7 +1555,7 @@ static int maildir_check_mailbox (CONTEXT * ctx, int *index_hint, int unused) ctx->hdrs[i]->trash = p->h->trash; /* this is a duplicate of an existing header, so remove it */ - mutt_free_header (&p->h); + header_delete(&p->h); } /* This message was not in the list of messages we just scanned. * Check to see if we have enough information to know if the @@ -1701,7 +1619,7 @@ static int mh_check_mailbox (CONTEXT * ctx, int *index_hint, int unused) if (!option (OPTCHECKNEW)) return 0; - strfcpy (buf, ctx->path, sizeof (buf)); + m_strcpy(buf, sizeof(buf), ctx->path); if (stat (buf, &st) == -1) return -1; @@ -1715,7 +1633,7 @@ static int mh_check_mailbox (CONTEXT * ctx, int *index_hint, int unused) safe_fclose (&fp); if (safe_rename (tmp, buf) == -1) unlink (tmp); - FREE (&tmp); + p_delete(&tmp); } } @@ -1731,7 +1649,7 @@ static int mh_check_mailbox (CONTEXT * ctx, int *index_hint, int unused) ctx->mtime_cur = st_cur.st_mtime; ctx->mtime = st.st_mtime; - memset (&mhs, 0, sizeof (mhs)); + p_clear(&mhs, 1); md = NULL; last = &md; @@ -1750,13 +1668,13 @@ static int mh_check_mailbox (CONTEXT * ctx, int *index_hint, int unused) ctx->hdrs[i]->active = 0; if ((p = hash_find (fnames, ctx->hdrs[i]->path)) && p->h && - (mbox_strict_cmp_headers (ctx->hdrs[i], p->h))) { + (mutt_cmp_header (ctx->hdrs[i], p->h))) { ctx->hdrs[i]->active = 1; /* found the right message */ if (!ctx->hdrs[i]->changed) maildir_update_flags (ctx, ctx->hdrs[i], p->h); - mutt_free_header (&p->h); + header_delete(&p->h); } else /* message has disappeared */ occult = 1; @@ -1808,7 +1726,7 @@ FILE *_maildir_open_find_message (const char *folder, const char *unique, while ((de = readdir (dp))) { maildir_canon_filename (tunique, de->d_name, sizeof (tunique)); - if (!mutt_strcmp (tunique, unique)) { + if (!m_strcmp(tunique, unique)) { snprintf (fname, sizeof (fname), "%s/%s/%s", folder, subfolder, de->d_name); fp = fopen (fname, "r"); /* __FOPEN_CHECKED__ */ @@ -1971,13 +1889,21 @@ static int maildir_is_magic (const char* path, struct stat* st) { /* routines common to maildir and mh */ static mx_t* reg_mx (void) { - mx_t* fmt = safe_calloc (1, sizeof (mx_t)); + mx_t* fmt = p_new(mx_t, 1); fmt->local = 1; fmt->mx_access = access; fmt->mx_sync_mailbox = mh_sync_mailbox; return (fmt); } +static int mh_commit (MESSAGE* msg, CONTEXT* ctx) { + return (mh_commit_message (msg, ctx, NULL)); +} + +static int maildir_commit (MESSAGE* msg, CONTEXT* ctx) { + return (maildir_commit_message (msg, ctx, NULL)); +} + mx_t* mh_reg_mx (void) { mx_t* fmt = reg_mx (); fmt->type = M_MH; @@ -1986,6 +1912,7 @@ mx_t* mh_reg_mx (void) { fmt->mx_open_mailbox = mh_read_dir; fmt->mx_open_new_message = mh_open_new_message; fmt->mx_check_mailbox = mh_check_mailbox; + fmt->mx_commit_message = mh_commit; return (fmt); } @@ -1997,5 +1924,6 @@ mx_t* maildir_reg_mx (void) { fmt->mx_open_mailbox = maildir_read_dir; fmt->mx_open_new_message = maildir_open_new_message; fmt->mx_check_mailbox = maildir_check_mailbox; + fmt->mx_commit_message = maildir_commit; return (fmt); }