X-Git-Url: http://git.madism.org/?p=apps%2Fmadmutt.git;a=blobdiff_plain;f=lib-mx%2Fmh.c;h=dacef77ae227164c4f143a6cbc6e62230b45025c;hp=bfaaab229979ffa3c7177199883f78aad135eaf7;hb=90f0c4dfb0480b5ce043c54f001d53ba6efc531b;hpb=8476307969a605bea67f6b702b0c1e7a52038bed diff --git a/lib-mx/mh.c b/lib-mx/mh.c index bfaaab2..dacef77 100644 --- a/lib-mx/mh.c +++ b/lib-mx/mh.c @@ -16,7 +16,7 @@ #include #include -#include +#include #include "mutt.h" #include "mx.h" @@ -35,13 +35,12 @@ struct maildir { struct maildir *next; }; -struct mh_sequences { - int max; - short *flags; -}; +typedef struct mh_sequences { + int size; + char flags[]; +} mh_sequences; /* mh_sequences support */ - #define MH_SEQ_UNSEEN (1 << 0) #define MH_SEQ_REPLIED (1 << 1) #define MH_SEQ_FLAGGED (1 << 2) @@ -51,54 +50,39 @@ 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) +static mh_sequences *mhs_new(void) { - int j; - int newmax; - - if (i > mhs->max || !mhs->flags) { - newmax = i + 128; - p_realloc(&mhs->flags, newmax + 1); - for (j = mhs->max + 1; j <= newmax; j++) - mhs->flags[j] = 0; - - mhs->max = newmax; - } + mh_sequences *res = xmalloc(sizeof(mh_sequences) + 128); + res->size = 128; + return res; } -static void mhs_free_sequences (struct mh_sequences *mhs) +static void mhs_ensure(mh_sequences *mhs, int i) { - p_delete(&mhs->flags); + if (i > mhs->size) { + xrealloc((void *)&mhs, sizeof(mh_sequences) + mhs->size + 128); + p_clear(mhs->flags + mhs->size, 128); + mhs->size += 128; + } } -static short mhs_check (struct mh_sequences *mhs, int i) +static void mhs_delete(mh_sequences **mhs) { - if (!mhs->flags || i > mhs->max) - return 0; - else - return mhs->flags[i]; + p_delete(mhs); } -static short mhs_set (struct mh_sequences *mhs, int i, short f) +static short mhs_check (struct mh_sequences *mhs, int i) { - mhs_alloc (mhs, i); - mhs->flags[i] |= f; - return mhs->flags[i]; + return i > mhs->size ? 0 : mhs->flags[i]; } -#if 0 - -/* unused */ - -static short mhs_unset (struct mh_sequences *mhs, int i, short f) +static short mhs_set (struct mh_sequences *mhs, int i, short f) { - mhs_alloc (mhs, i); - mhs->flags[i] &= ~f; - return mhs->flags[i]; + mhs_ensure(mhs, i); + mhs->flags[i] |= f; + return mhs->flags[i]; } -#endif - static void mh_read_token (char *t, int *first, int *last) { char *p; @@ -151,32 +135,35 @@ static void mh_read_sequences (struct mh_sequences *mhs, const char *path) } p_delete(&buff); - safe_fclose (&fp); + m_fclose(&fp); } int mh_buffy (const char *path) { - int i, r = 0; - struct mh_sequences mhs; - - p_clear(&mhs, 1); + mh_sequences *mhs = mhs_new(); + int i; + + mh_read_sequences(mhs, path); + for (i = 0; i <= mhs->size; i++) { + if (mhs_check(mhs, i) & MH_SEQ_UNSEEN) { + mhs_delete(&mhs); + return 1; + } + } - mh_read_sequences (&mhs, path); - for (i = 0; !r && i <= mhs.max; i++) - if (mhs_check (&mhs, i) & MH_SEQ_UNSEEN) - r = 1; - mhs_free_sequences (&mhs); - return r; + mhs_delete(&mhs); + return 0; } static int mh_mkstemp (CONTEXT * dest, FILE ** fp, char **tgt) { + static int Counter = 0; int fd; char path[_POSIX_PATH_MAX]; for (;;) { snprintf (path, _POSIX_PATH_MAX, "%s/.mutt-%s-%d-%d", - dest->path, NONULL (Hostname), (int) getpid (), Counter++); + dest->path, NONULL(mod_core.shorthost), (int) getpid (), Counter++); umask (Umask); if ((fd = open (path, O_WRONLY | O_EXCL | O_CREAT, 0666)) == -1) { if (errno != EEXIST) { @@ -200,8 +187,8 @@ static int mh_mkstemp (CONTEXT * dest, FILE ** fp, char **tgt) return 0; } -static void mhs_write_one_sequence (FILE * fp, struct mh_sequences *mhs, - short f, const char *tag) +static void mhs_write_one_sequence(FILE * fp, struct mh_sequences *mhs, + short f, const char *tag) { int i; int first, last; @@ -211,7 +198,7 @@ static void mhs_write_one_sequence (FILE * fp, struct mh_sequences *mhs, first = -1; last = -1; - for (i = 0; i <= mhs->max; i++) { + for (i = 0; i <= mhs->size; i++) { if ((mhs_check (mhs, i) & f)) { if (first < 0) first = i; @@ -260,15 +247,11 @@ static void mh_update_sequences (CONTEXT * ctx) char seq_unseen[STRING]; char seq_replied[STRING]; char seq_flagged[STRING]; + mh_sequences *mhs = mhs_new(); - - struct mh_sequences mhs; - - p_clear(&mhs, 1); - - snprintf (seq_unseen, sizeof (seq_unseen), "%s:", NONULL (MhUnseen)); - snprintf (seq_replied, sizeof (seq_replied), "%s:", NONULL (MhReplied)); - snprintf (seq_flagged, sizeof (seq_flagged), "%s:", NONULL (MhFlagged)); + snprintf(seq_unseen, sizeof(seq_unseen), "%s:", NONULL(MhUnseen)); + snprintf(seq_replied, sizeof(seq_replied), "%s:", NONULL(MhReplied)); + snprintf(seq_flagged, sizeof(seq_flagged), "%s:", NONULL(MhFlagged)); if (mh_mkstemp (ctx, &nfp, &tmpfname) != 0) { /* error message? */ @@ -291,7 +274,7 @@ static void mh_update_sequences (CONTEXT * ctx) fprintf (nfp, "%s\n", buff); } } - safe_fclose (&ofp); + m_fclose(&ofp); /* now, update our unseen, flagged, and replied sequences */ for (l = 0; l < ctx->msgcount; l++) { @@ -306,32 +289,31 @@ static void mh_update_sequences (CONTEXT * ctx) i = atoi (p); if (!ctx->hdrs[l]->read) { - mhs_set (&mhs, i, MH_SEQ_UNSEEN); + mhs_set(mhs, i, MH_SEQ_UNSEEN); unseen++; } if (ctx->hdrs[l]->flagged) { - mhs_set (&mhs, i, MH_SEQ_FLAGGED); + mhs_set(mhs, i, MH_SEQ_FLAGGED); flagged++; } if (ctx->hdrs[l]->replied) { - mhs_set (&mhs, i, MH_SEQ_REPLIED); + mhs_set(mhs, i, MH_SEQ_REPLIED); replied++; } } /* write out the new sequences */ if (unseen) - mhs_write_one_sequence (nfp, &mhs, MH_SEQ_UNSEEN, NONULL (MhUnseen)); + mhs_write_one_sequence(nfp, mhs, MH_SEQ_UNSEEN, NONULL (MhUnseen)); if (flagged) - mhs_write_one_sequence (nfp, &mhs, MH_SEQ_FLAGGED, NONULL (MhFlagged)); + mhs_write_one_sequence(nfp, mhs, MH_SEQ_FLAGGED, NONULL (MhFlagged)); if (replied) - mhs_write_one_sequence (nfp, &mhs, MH_SEQ_REPLIED, NONULL (MhReplied)); - - mhs_free_sequences (&mhs); + mhs_write_one_sequence(nfp, mhs, MH_SEQ_REPLIED, NONULL (MhReplied)); + mhs_delete(&mhs); /* try to commit the changes - no guarantee here */ - safe_fclose (&nfp); + m_fclose(&nfp); unlink (sequences); if (safe_rename (tmpfname, sequences) != 0) { @@ -372,17 +354,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, m_strlen(seq_unseen))) { + if (unseen && !m_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, m_strlen(seq_flagged))) { + && !m_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, m_strlen(seq_replied))) { + && !m_strncmp (buff, seq_replied, m_strlen(seq_replied))) { fprintf (nfp, "%s %d\n", buff, n); replied_done = 1; } @@ -390,7 +372,7 @@ static void mh_sequences_add_one (CONTEXT * ctx, int n, short unseen, fprintf (nfp, "%s\n", buff); } } - safe_fclose (&ofp); + m_fclose(&ofp); p_delete(&buff); if (!unseen_done && unseen) @@ -400,7 +382,7 @@ static void mh_sequences_add_one (CONTEXT * ctx, int n, short unseen, if (!replied_done && replied) fprintf (nfp, "%s: %d\n", NONULL (MhReplied), n); - safe_fclose (&nfp); + m_fclose(&nfp); unlink (sequences); if (safe_rename (tmpfname, sequences) != 0) @@ -547,7 +529,7 @@ static HEADER *maildir_parse_message (int magic, const char *fname, h->env = mutt_read_rfc822_header (f, h, 0, 0); fstat (fileno (f), &st); - fclose (f); + m_fclose(&f); if (!h->received) h->received = h->date_sent; @@ -674,7 +656,7 @@ static int maildir_parse_dir (CONTEXT * ctx, struct maildir ***last, /* FOO - really ignore the return value? */ maildir_parse_entry (ctx, last, subdir, de->d_name, count, is_old, -#if HAVE_DIRENT_D_INO +#ifdef HAVE_DIRENT_D_INO de->d_ino #else 0 @@ -742,13 +724,13 @@ static void maildir_delayed_parsing (CONTEXT * ctx, struct maildir *md) int count; #ifdef USE_HCACHE - void *hc = NULL; + hcache_t *hc = NULL; void *data; struct timeval *when = NULL; struct stat lastchanged; int ret; - hc = mutt_hcache_open (HeaderCache, ctx->path); + hc = mutt_hcache_open(ctx->path); #endif for (p = md, count = 0; p; p = p->next, count++) { @@ -765,19 +747,11 @@ static void maildir_delayed_parsing (CONTEXT * ctx, struct maildir *md) snprintf (fn, sizeof (fn), "%s/%s", ctx->path, p->h->path); #ifdef USE_HCACHE - if (option (OPTHCACHEVERIFY)) { - ret = stat (fn, &lastchanged); - } - else { - lastchanged.st_mtime = 0; - ret = 0; - } - - if (data != NULL && !ret && lastchanged.st_mtime <= when->tv_sec) { - p->h = mutt_hcache_restore ((unsigned char *) data, &p->h); + ret = stat(fn, &lastchanged); + if (data && !ret && lastchanged.st_mtime <= when->tv_sec) { + p->h = mutt_hcache_restore(data, &p->h); maildir_parse_flags (p->h, fn); - } - else + } else #endif if (maildir_parse_message (ctx->magic, fn, p->h->old, p->h)) { p->header_parsed = 1; @@ -785,15 +759,15 @@ static void maildir_delayed_parsing (CONTEXT * ctx, struct maildir *md) #ifdef USE_HCACHE mutt_hcache_store (hc, p->h->path + 3, p->h, 0, &maildir_hcache_keylen); #endif - } - else + } else { header_delete(&p->h); + } #ifdef USE_HCACHE p_delete(&data); #endif } #ifdef USE_HCACHE - mutt_hcache_close (hc); + mutt_hcache_close (&hc); #endif } @@ -806,26 +780,19 @@ static void maildir_delayed_parsing (CONTEXT * ctx, struct maildir *md) */ static int _mh_read_dir (CONTEXT * ctx, const char *subdir) { - struct maildir *md; - struct mh_sequences mhs; - struct maildir **last; - int count; - - - p_clear(&mhs, 1); + struct maildir *md = NULL, **last = &md; + int count = 0; maildir_update_mtime (ctx); - md = NULL; - last = &md; - count = 0; if (maildir_parse_dir (ctx, &last, subdir, &count) == -1) return -1; if (ctx->magic == M_MH) { - mh_read_sequences (&mhs, ctx->path); - mh_update_maildir (md, &mhs); - mhs_free_sequences (&mhs); + mh_sequences *mhs = mhs_new(); + mh_read_sequences(mhs, ctx->path); + mh_update_maildir(md, mhs); + mhs_delete(&mhs); } if (ctx->magic == M_MAILDIR) @@ -905,6 +872,7 @@ static void maildir_flags (char *dest, ssize_t destlen, HEADER * hdr) static int maildir_open_new_message (MESSAGE * msg, CONTEXT * dest, HEADER * hdr) { + static int Counter = 0; int fd; char path[_POSIX_PATH_MAX]; char suffix[16]; @@ -930,7 +898,7 @@ static int maildir_open_new_message (MESSAGE * msg, CONTEXT * dest, HEADER * hdr 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); + (unsigned int) getpid (), Counter++, NONULL (mod_core.shorthost), suffix); umask (Umask); if ((fd = open (path, O_WRONLY | O_EXCL | O_CREAT, 0666)) == -1) { @@ -979,13 +947,14 @@ static int maildir_open_new_message (MESSAGE * msg, CONTEXT * dest, HEADER * hdr static int maildir_commit_message (MESSAGE * msg, CONTEXT * ctx, HEADER * hdr) { + static int Counter = 0; char subdir[4]; char suffix[16]; char path[_POSIX_PATH_MAX]; char full[_POSIX_PATH_MAX]; char *s; - if (safe_fclose (&msg->fp) != 0) + if (m_fclose(&msg->fp) != 0) return -1; /* extract the subdir */ @@ -1002,7 +971,7 @@ static int maildir_commit_message (MESSAGE * msg, CONTEXT * ctx, HEADER * hdr) for (;;) { snprintf (path, _POSIX_PATH_MAX, "%s/%ld.%u_%d.%s%s", subdir, (long) time (NULL), (unsigned int) getpid (), Counter++, - NONULL (Hostname), suffix); + NONULL (mod_core.shorthost), suffix); snprintf (full, _POSIX_PATH_MAX, "%s/%s", ctx->path, path); if (safe_rename (msg->path, full) == 0) { @@ -1053,7 +1022,7 @@ static int _mh_commit_message (MESSAGE * msg, CONTEXT * ctx, HEADER * hdr, char path[_POSIX_PATH_MAX]; char tmp[16]; - if (safe_fclose (&msg->fp) != 0) + if (m_fclose(&msg->fp) != 0) return -1; if ((dirp = opendir (ctx->path)) == NULL) { @@ -1260,7 +1229,7 @@ static int mh_sync_mailbox (CONTEXT * ctx, int unused __attribute__ ((unused)), int i, j; #ifdef USE_HCACHE - void *hc = NULL; + hcache_t *hc = NULL; #endif /* USE_HCACHE */ if (ctx->magic == M_MH) @@ -1273,7 +1242,7 @@ static int mh_sync_mailbox (CONTEXT * ctx, int unused __attribute__ ((unused)), #ifdef USE_HCACHE if (ctx->magic == M_MAILDIR) - hc = mutt_hcache_open (HeaderCache, ctx->path); + hc = mutt_hcache_open(ctx->path); #endif /* USE_HCACHE */ for (i = 0; i < ctx->msgcount; i++) { @@ -1317,7 +1286,7 @@ static int mh_sync_mailbox (CONTEXT * ctx, int unused __attribute__ ((unused)), #ifdef USE_HCACHE if (ctx->magic == M_MAILDIR) - mutt_hcache_close (hc); + mutt_hcache_close (&hc); #endif /* USE_HCACHE */ if (ctx->magic == M_MH) @@ -1342,7 +1311,7 @@ static int mh_sync_mailbox (CONTEXT * ctx, int unused __attribute__ ((unused)), err: #ifdef USE_HCACHE if (ctx->magic == M_MAILDIR) - mutt_hcache_close (hc); + mutt_hcache_close (&hc); #endif /* USE_HCACHE */ return -1; } @@ -1441,7 +1410,7 @@ static int maildir_check_mailbox (CONTEXT * ctx, int *index_hint, int unused __a struct maildir *md; /* list of messages in the mailbox */ struct maildir **last, *p; int i; - HASH *fnames; /* hash table for quickly looking up the base filename + hash_t *fnames; /* hash table for quickly looking up the base filename for a maildir message */ if (!option (OPTCHECKNEW)) @@ -1482,12 +1451,12 @@ static int maildir_check_mailbox (CONTEXT * ctx, int *index_hint, int unused __a * of each message we scanned. This is used in the loop over the * existing messages below to do some correlation. */ - fnames = hash_create (1031); + fnames = hash_new (1031, 0); for (p = md; p; p = p->next) { maildir_canon_filename (buf, p->h->path, sizeof (buf)); p->canon_fname = m_strdup(buf); - hash_insert (fnames, p->canon_fname, p, 0); + hash_insert (fnames, p->canon_fname, p); } /* check for modifications and adjust flags */ @@ -1522,8 +1491,8 @@ static int maildir_check_mailbox (CONTEXT * ctx, int *index_hint, int unused __a * Check to see if we have enough information to know if the * message has disappeared out from underneath us. */ - else if (((changed & 1) && (!strncmp (ctx->hdrs[i]->path, "new/", 4))) || - ((changed & 2) && (!strncmp (ctx->hdrs[i]->path, "cur/", 4)))) { + else if (((changed & 1) && (!m_strncmp (ctx->hdrs[i]->path, "new/", 4))) || + ((changed & 2) && (!m_strncmp (ctx->hdrs[i]->path, "cur/", 4)))) { /* This message disappeared, so we need to simulate a "reopen" * event. We know it disappeared because we just scanned the * subdirectory it used to reside in. @@ -1540,7 +1509,7 @@ static int maildir_check_mailbox (CONTEXT * ctx, int *index_hint, int unused __a } /* destroy the file name hash */ - hash_destroy (&fnames, NULL); + hash_delete (&fnames, NULL); /* If we didn't just get new mail, update the tables. */ if (occult) @@ -1571,10 +1540,9 @@ static int mh_check_mailbox (CONTEXT * ctx, int *index_hint, int unused __attrib char buf[_POSIX_PATH_MAX]; struct stat st, st_cur; short modified = 0, have_new = 0, occult = 0; - struct maildir *md, *p; - struct maildir **last = NULL; - struct mh_sequences mhs; - HASH *fnames; + struct maildir *md = NULL, **last = &md, *p; + mh_sequences *mhs; + hash_t *fnames; int i; if (!option (OPTCHECKNEW)) @@ -1591,7 +1559,7 @@ static int mh_check_mailbox (CONTEXT * ctx, int *index_hint, int unused __attrib FILE *fp = NULL; if (mh_mkstemp (ctx, &fp, &tmp) == 0) { - safe_fclose (&fp); + m_fclose(&fp); if (safe_rename (tmp, buf) == -1) unlink (tmp); p_delete(&tmp); @@ -1610,20 +1578,17 @@ static int mh_check_mailbox (CONTEXT * ctx, int *index_hint, int unused __attrib ctx->mtime_cur = st_cur.st_mtime; ctx->mtime = st.st_mtime; - p_clear(&mhs, 1); - - md = NULL; - last = &md; maildir_parse_dir (ctx, &last, NULL, NULL); - mh_read_sequences (&mhs, ctx->path); - mh_update_maildir (md, &mhs); - mhs_free_sequences (&mhs); + mhs = mhs_new(); + mh_read_sequences(mhs, ctx->path); + mh_update_maildir(md, mhs); + mhs_delete(&mhs); /* check for modifications and adjust flags */ - fnames = hash_create (1031); + fnames = hash_new (1031, 0); for (p = md; p; p = p->next) - hash_insert (fnames, p->h->path, p, 0); + hash_insert (fnames, p->h->path, p); for (i = 0; i < ctx->msgcount; i++) { ctx->hdrs[i]->active = 0; @@ -1643,7 +1608,7 @@ static int mh_check_mailbox (CONTEXT * ctx, int *index_hint, int unused __attrib /* destroy the file name hash */ - hash_destroy (&fnames, NULL); + hash_delete (&fnames, NULL); /* If we didn't just get new mail, update the tables. */ if (occult) @@ -1656,16 +1621,13 @@ static int mh_check_mailbox (CONTEXT * ctx, int *index_hint, int unused __attrib } - - /* * These functions try to find a message in a maildir folder when it * has moved under our feet. Note that this code is rather expensive, but * then again, it's called rarely. */ - -static FILE *_maildir_open_find_message (const char *folder, const char *unique, - const char *subfolder) +static FILE *_maildir_open_find_message(const char *folder, const char *unique, + const char *subfolder) { char dir[_POSIX_PATH_MAX]; char tunique[_POSIX_PATH_MAX]; @@ -1690,7 +1652,7 @@ static FILE *_maildir_open_find_message (const char *folder, const char *unique, if (!m_strcmp(tunique, unique)) { snprintf (fname, sizeof (fname), "%s/%s/%s", folder, subfolder, de->d_name); - fp = fopen (fname, "r"); /* __FOPEN_CHECKED__ */ + fp = fopen(fname, "r"); oe = errno; break; } @@ -1800,52 +1762,38 @@ static int mh_check_empty (const char *path) return r; } -static int mh_is_magic (const char* path, struct stat* st) { - char tmp[_POSIX_PATH_MAX]; - - if (S_ISDIR (st->st_mode)) { - snprintf (tmp, sizeof (tmp), "%s/.mh_sequences", path); - if (access (tmp, F_OK) == 0) - return (M_MH); - - snprintf (tmp, sizeof (tmp), "%s/.xmhcache", path); - if (access (tmp, F_OK) == 0) - return (M_MH); - - snprintf (tmp, sizeof (tmp), "%s/.mew_cache", path); - if (access (tmp, F_OK) == 0) - return (M_MH); - - snprintf (tmp, sizeof (tmp), "%s/.mew-cache", path); - if (access (tmp, F_OK) == 0) - return (M_MH); - - snprintf (tmp, sizeof (tmp), "%s/.sylpheed_cache", path); - if (access (tmp, F_OK) == 0) - return (M_MH); - - /* - * ok, this isn't an mh folder, but mh mode can be used to read - * Usenet news from the spool. ;-) - */ +static int mh_is_magic(const char *path, struct stat *st) +{ + static char const * const files[] = { + ".mh_sequences", ".xmhcache", ".mew_cache", + ".mew-cache", ".sylpheed_cache", + }; + + if (S_ISDIR(st->st_mode)) { + for (int i = 0; i < countof(files); i++) { + char tmp[_POSIX_PATH_MAX]; + + snprintf(tmp, sizeof(tmp), "%s/%s", path, files[i]); + if (access(tmp, F_OK) == 0) + return M_MH; + } + } - snprintf (tmp, sizeof (tmp), "%s/.overview", path); - if (access (tmp, F_OK) == 0) - return (M_MH); - } - return (-1); + return -1; } -static int maildir_is_magic (const char* path, struct stat* st) { - struct stat sb; - char tmp[_POSIX_PATH_MAX]; +static int maildir_is_magic (const char *path, struct stat *st) +{ + if (S_ISDIR(st->st_mode)) { + char tmp[_POSIX_PATH_MAX]; + struct stat sb; + + snprintf(tmp, sizeof(tmp), "%s/cur", path); + if (stat(tmp, &sb) == 0 && S_ISDIR(sb.st_mode)) + return M_MAILDIR; + } - if (S_ISDIR (st->st_mode)) { - snprintf (tmp, sizeof (tmp), "%s/cur", path); - if (stat (tmp, &sb) == 0 && S_ISDIR (sb.st_mode)) - return (M_MAILDIR); - } - return (-1); + return -1; } static int mh_commit (MESSAGE* msg, CONTEXT* ctx) {