X-Git-Url: http://git.madism.org/?p=apps%2Fmadmutt.git;a=blobdiff_plain;f=mh.c;h=4ddb15507f1327b6f1eb96fc66c2434ea4ae513d;hp=1c6483bb84ca082be8bbd82399d06f63f4dc3511;hb=42cc85de46ed8971a6c793835023cf26766fb096;hpb=ce220f6dc8789ed75468c63adce953fbdfed11a8 diff --git a/mh.c b/mh.c index 1c6483b..4ddb155 100644 --- a/mh.c +++ b/mh.c @@ -28,6 +28,7 @@ #include "lib/mem.h" #include "lib/intl.h" #include "lib/str.h" +#include "lib/debug.h" #include #include @@ -70,6 +71,8 @@ struct mh_sequences { /* prototypes */ static int maildir_check_empty (const char*); +static int maildir_check_mailbox (CONTEXT*, int*, int); +static int mh_check_mailbox (CONTEXT*, int*, int); static void mhs_alloc (struct mh_sequences *mhs, int i) { @@ -154,11 +157,11 @@ static void mh_read_sequences (struct mh_sequences *mhs, const char *path) if (!(t = strtok (buff, " \t:"))) continue; - if (!safe_strcmp (t, MhUnseen)) + if (!mutt_strcmp (t, MhUnseen)) f = MH_SEQ_UNSEEN; - else if (!safe_strcmp (t, MhFlagged)) + else if (!mutt_strcmp (t, MhFlagged)) f = MH_SEQ_FLAGGED; - else if (!safe_strcmp (t, MhReplied)) + else if (!mutt_strcmp (t, MhReplied)) f = MH_SEQ_REPLIED; else /* unknown sequence */ continue; @@ -301,11 +304,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, safe_strlen (seq_unseen))) + if (!safe_strncmp (buff, seq_unseen, mutt_strlen (seq_unseen))) continue; - if (!safe_strncmp (buff, seq_flagged, safe_strlen (seq_flagged))) + if (!safe_strncmp (buff, seq_flagged, mutt_strlen (seq_flagged))) continue; - if (!safe_strncmp (buff, seq_replied, safe_strlen (seq_replied))) + if (!safe_strncmp (buff, seq_replied, mutt_strlen (seq_replied))) continue; fprintf (nfp, "%s\n", buff); @@ -392,17 +395,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, safe_strlen (seq_unseen))) { + if (unseen && !strncmp (buff, seq_unseen, mutt_strlen (seq_unseen))) { fprintf (nfp, "%s %d\n", buff, n); unseen_done = 1; } else if (flagged - && !strncmp (buff, seq_flagged, safe_strlen (seq_flagged))) { + && !strncmp (buff, seq_flagged, mutt_strlen (seq_flagged))) { fprintf (nfp, "%s %d\n", buff, n); flagged_done = 1; } else if (replied - && !strncmp (buff, seq_replied, safe_strlen (seq_replied))) { + && !strncmp (buff, seq_replied, mutt_strlen (seq_replied))) { fprintf (nfp, "%s %d\n", buff, n); replied_done = 1; } @@ -680,7 +683,7 @@ static int maildir_parse_dir (CONTEXT * ctx, struct maildir ***last, if (subdir) { snprintf (buf, sizeof (buf), "%s/%s", ctx->path, subdir); - is_old = (safe_strcmp ("cur", subdir) == 0); + is_old = (mutt_strcmp ("cur", subdir) == 0); } else strfcpy (buf, ctx->path, sizeof (buf)); @@ -696,9 +699,7 @@ static int maildir_parse_dir (CONTEXT * ctx, struct maildir ***last, /* FOO - really ignore the return value? */ - dprint (2, - (debugfile, "%s:%d: parsing %s\n", __FILE__, __LINE__, - de->d_name)); + debug_print (2, ("parsing %s\n", de->d_name)); maildir_parse_entry (ctx, last, subdir, de->d_name, count, is_old, de->d_ino); } @@ -713,16 +714,12 @@ static int maildir_add_to_context (CONTEXT * ctx, struct maildir *md) while (md) { - dprint (2, (debugfile, "%s:%d maildir_add_to_context(): Considering %s\n", - __FILE__, __LINE__, NONULL (md->canon_fname))); + debug_print (2, ("considering %s\n", NONULL (md->canon_fname))); if (md->h) { - dprint (2, - (debugfile, - "%s:%d Adding header structure. Flags: %s%s%s%s%s\n", __FILE__, - __LINE__, md->h->flagged ? "f" : "", md->h->deleted ? "D" : "", - md->h->replied ? "r" : "", md->h->old ? "O" : "", - md->h->read ? "R" : "")); + debug_print (2, ("flags: %s%s%s%s%s\n", md->h->flagged ? "f" : "", + md->h->deleted ? "D" : "", md->h->replied ? "r" : "", + md->h->old ? "O" : "", md->h->read ? "R" : "")); if (ctx->msgcount == ctx->hdrmax) mx_alloc_memory (ctx); @@ -838,7 +835,7 @@ static size_t maildir_hcache_keylen (const char *fn) { const char *p = strchr (fn, ':'); - return p ? (size_t) (p - fn) : safe_strlen (fn); + return p ? (size_t) (p - fn) : mutt_strlen (fn); } #endif @@ -1004,7 +1001,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, safe_strlen (tmp), 1, ch_compar); + qsort (tmp, mutt_strlen (tmp), 1, ch_compar); snprintf (dest, destlen, ":2,%s", tmp); } } @@ -1047,8 +1044,7 @@ static int maildir_open_new_message (MESSAGE * msg, CONTEXT * dest, HEADER * hdr dest->path, subdir, (long) time (NULL), (unsigned int) getpid (), Counter++, NONULL (Hostname), suffix); - dprint (2, (debugfile, "maildir_open_new_message (): Trying %s.\n", - path)); + debug_print (2, ("trying %s.\n", path)); umask (Umask); if ((fd = open (path, O_WRONLY | O_EXCL | O_CREAT, 0666)) == -1) { @@ -1058,7 +1054,7 @@ static int maildir_open_new_message (MESSAGE * msg, CONTEXT * dest, HEADER * hdr } } else { - dprint (2, (debugfile, "maildir_open_new_message (): Success.\n")); + debug_print (2, ("success.\n")); msg->path = safe_strdup (path); break; } @@ -1097,7 +1093,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]; @@ -1125,8 +1121,7 @@ int maildir_commit_message (CONTEXT * ctx, MESSAGE * msg, HEADER * hdr) NONULL (Hostname), suffix); snprintf (full, _POSIX_PATH_MAX, "%s/%s", ctx->path, path); - dprint (2, (debugfile, "maildir_commit_message (): renaming %s to %s.\n", - msg->path, full)); + debug_print (2, ("renaming %s to %s.\n", msg->path, full)); if (safe_rename (msg->path, full) == 0) { if (hdr) @@ -1166,7 +1161,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; @@ -1231,12 +1226,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 @@ -1268,9 +1261,9 @@ static int mh_rewrite_message (CONTEXT * ctx, int msgno) strfcpy (partpath, h->path, _POSIX_PATH_MAX); 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); @@ -1317,7 +1310,8 @@ static int mh_sync_message (CONTEXT * ctx, int msgno) { HEADER *h = ctx->hdrs[msgno]; - if (h->attach_del || h->refs_changed || h->irt_changed) + if (h->attach_del || + (h->env && (h->env->refs_changed || h->env->irt_changed))) if (mh_rewrite_message (ctx, msgno) != 0) return -1; @@ -1328,7 +1322,8 @@ static int maildir_sync_message (CONTEXT * ctx, int msgno) { HEADER *h = ctx->hdrs[msgno]; - if (h->attach_del || h->refs_changed || h->irt_changed) { + if (h->attach_del || + (h->env && (h->env->refs_changed || h->env->irt_changed))) { /* when doing attachment deletion/rethreading, fall back to the MH case. */ if (mh_rewrite_message (ctx, msgno) != 0) return (-1); @@ -1344,10 +1339,7 @@ static int maildir_sync_message (CONTEXT * ctx, int msgno) char *p; if ((p = strrchr (h->path, '/')) == NULL) { - dprint (1, - (debugfile, - "maildir_sync_message: %s: unable to find subdir!\n", - h->path)); + debug_print (1, ("%s: unable to find subdir!\n", h->path)); return (-1); } p++; @@ -1364,7 +1356,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 (safe_strcmp (fullpath, oldpath) == 0) { + if (mutt_strcmp (fullpath, oldpath) == 0) { /* message hasn't really changed */ return 0; } @@ -1391,9 +1383,9 @@ static int mh_sync_mailbox (CONTEXT * ctx, int unused, int *index_hint) #endif /* USE_HCACHE */ if (ctx->magic == M_MH) - i = mh_check_mailbox (ctx, index_hint); + i = mh_check_mailbox (ctx, index_hint, 0); else - i = maildir_check_mailbox (ctx, index_hint); + i = maildir_check_mailbox (ctx, index_hint, 0); if (i != 0) return i; @@ -1556,7 +1548,7 @@ static void maildir_update_flags (CONTEXT * ctx, HEADER * o, HEADER * n) * either subdirectory differently, as mail could be copied directly into * the cur directory from another agent. */ -int maildir_check_mailbox (CONTEXT * ctx, int *index_hint) +static int maildir_check_mailbox (CONTEXT * ctx, int *index_hint, int unused) { struct stat st_new; /* status of the "new" subdirectory */ struct stat st_cur; /* status of the "cur" subdirectory */ @@ -1571,9 +1563,6 @@ int maildir_check_mailbox (CONTEXT * ctx, int *index_hint) HASH *fnames; /* hash table for quickly looking up the base filename for a maildir message */ - /* XXX seems like this check belongs in mx_check_mailbox() - * rather than here. - */ if (!option (OPTCHECKNEW)) return 0; @@ -1632,7 +1621,7 @@ int maildir_check_mailbox (CONTEXT * ctx, int *index_hint) /* check to see if the message has moved to a different * subdirectory. If so, update the associated filename. */ - if (safe_strcmp (ctx->hdrs[i]->path, p->h->path)) + if (mutt_strcmp (ctx->hdrs[i]->path, p->h->path)) str_replace (&ctx->hdrs[i]->path, p->h->path); /* if the user hasn't modified the flags on this message, update @@ -1696,7 +1685,7 @@ int maildir_check_mailbox (CONTEXT * ctx, int *index_hint) * */ -int mh_check_mailbox (CONTEXT * ctx, int *index_hint) +static int mh_check_mailbox (CONTEXT * ctx, int *index_hint, int unused) { char buf[_POSIX_PATH_MAX]; struct stat st, st_cur; @@ -1817,7 +1806,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 (!safe_strcmp (tunique, unique)) { + if (!mutt_strcmp (tunique, unique)) { snprintf (fname, sizeof (fname), "%s/%s/%s", folder, subfolder, de->d_name); fp = fopen (fname, "r"); /* __FOPEN_CHECKED__ */ @@ -1987,6 +1976,14 @@ static mx_t* reg_mx (void) { 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; @@ -1994,6 +1991,8 @@ mx_t* mh_reg_mx (void) { fmt->mx_is_magic = mh_is_magic; 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); } @@ -2004,5 +2003,7 @@ mx_t* maildir_reg_mx (void) { fmt->mx_is_magic = maildir_is_magic; 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); }