#include <lib-lib/lib-lib.h>
-#include <lib-ui/curses.h>
+#include <lib-ui/lib-ui.h>
#include <lib-sys/mutt_signal.h>
#include "mutt.h"
/* struct used by mutt_sync_mailbox() to store new offsets */
struct m_update_t {
- short valid;
- off_t hdr;
- off_t body;
- long lines;
- off_t length;
+ short valid;
+ off_t hdr;
+ off_t body;
+ long lines;
+ off_t length;
};
+static int mbox_open_new_message(MESSAGE *msg, CONTEXT *dest, HEADER *hdr)
+{
+ msg->fp = dest->fp;
+ return 0;
+}
-static int mbox_open_new_message (MESSAGE * msg, CONTEXT * dest, HEADER * hdr __attribute__ ((unused)))
+static int mbox_open_message(MESSAGE *msg, CONTEXT *ctx, int msgno)
{
- msg->fp = dest->fp;
- return 0;
+ msg->fp = ctx->fp;
+ return 0;
}
/* prototypes */
* excl - exclusive lock?
* retry - should retry if unable to lock?
*/
-int mbox_lock_mailbox (CONTEXT * ctx, int excl, int retry)
+int mbox_lock_mailbox(CONTEXT *ctx, int excl, int retry)
{
int r;
- if ((r = mx_lock_file (ctx->path, fileno (ctx->fp), excl, 1, retry)) == 0)
+ if ((r = mx_lock_file(ctx->path, fileno(ctx->fp), excl, retry)) == 0)
ctx->locked = 1;
else if (retry && !excl) {
ctx->readonly = 1;
return 0;
}
- return (r);
+ return r;
}
static void mbox_unlock_mailbox (CONTEXT * ctx)
if (ctx->locked) {
fflush (ctx->fp);
- mx_unlock_file (ctx->path, fileno (ctx->fp), 1);
+ mx_unlock_file(ctx->path, fileno(ctx->fp));
ctx->locked = 0;
}
}
/* Save information about the folder at the time we opened it. */
if (stat (ctx->path, &sb) == -1) {
mutt_perror (ctx->path);
- return (-1);
+ return -1;
}
ctx->size = sb.st_size;
/* precompute the local timezone to speed up calculation of the
date received */
- tz = mutt_local_tz (0);
+ t = time(NULL);
+ tz = localtime(&t)->tm_gmtoff;
loc = ftello (ctx->fp);
while (fgets (buf, sizeof (buf), ctx->fp) != NULL) {
mx_update_context (ctx, count);
}
- return (0);
+ return 0;
}
#undef PREV
/* open a mbox style mailbox */
static int mbox_open_mailbox (CONTEXT * ctx)
{
- int rc;
+ int rc;
- if ((ctx->fp = fopen (ctx->path, "r")) == NULL) {
- mutt_perror (ctx->path);
- return (-1);
- }
- mutt_block_signals ();
- if (mbox_lock_mailbox (ctx, 0, 1) == -1) {
- mutt_unblock_signals ();
- return (-1);
- }
+ if (!(ctx->fp = fopen(ctx->path, "r"))) {
+ mutt_perror(ctx->path);
+ return -1;
+ }
- if (ctx->magic == M_MBOX)
- rc = mbox_parse_mailbox (ctx);
- else
- rc = -1;
+ mutt_block_signals();
+ if (mbox_lock_mailbox(ctx, 0, 1) < 0) {
+ mutt_unblock_signals();
+ return -1;
+ }
- mbox_unlock_mailbox (ctx);
- mutt_unblock_signals ();
- return (rc);
+ rc = ctx->magic == M_MBOX ? mbox_parse_mailbox(ctx) : -1;
+
+ mbox_unlock_mailbox(ctx);
+ mutt_unblock_signals();
+ return rc;
}
/* check to see if the mailbox has changed on disk.
if (stat (ctx->path, &st) == 0) {
if (st.st_mtime == ctx->mtime && st.st_size == ctx->size)
- return (0);
+ return 0;
if (st.st_size == ctx->size) {
/* the file was touched, but it is still the same length, so just exit */
ctx->mtime = st.st_mtime;
- return (0);
+ return 0;
}
if (st.st_size > ctx->size) {
* probably the new mail arrived: no reason to wait till we can
* parse it: we'll get it on the next pass
*/
- return (M_LOCKED);
+ return M_LOCKED;
}
unlock = 1;
}
mutt_unblock_signals ();
}
- return (M_NEW_MAIL); /* signal that new mail arrived */
+ return M_NEW_MAIL; /* signal that new mail arrived */
}
else
modified = 1;
mbox_unlock_mailbox (ctx);
mutt_unblock_signals ();
}
- return (M_REOPENED);
+ return M_REOPENED;
}
}
mutt_unblock_signals ();
mutt_error _("Mailbox was corrupted!");
- return (-1);
+ return -1;
}
-static int mbox_check_mailbox (CONTEXT* ctx, int* index_hint, int lock) {
- int rc = 0;
+static int mbox_check_mailbox(CONTEXT *ctx, int *index_hint, int lock)
+{
+ int rc = 0;
- if (lock) {
- mutt_block_signals ();
- if (mbox_lock_mailbox (ctx, 0, 0) == -1) {
- mutt_unblock_signals ();
- return M_LOCKED;
+ if (lock) {
+ mutt_block_signals();
+ if (mbox_lock_mailbox(ctx, 0, 0) < 0) {
+ mutt_unblock_signals();
+ return M_LOCKED;
+ }
}
- }
- rc = _mbox_check_mailbox (ctx, index_hint);
+ rc = _mbox_check_mailbox(ctx, index_hint);
- if (lock) {
- mutt_unblock_signals ();
- mbox_unlock_mailbox (ctx);
- }
- return rc;
+ if (lock) {
+ mutt_unblock_signals ();
+ mbox_unlock_mailbox (ctx);
+ }
+ return rc;
}
/* return values:
mx_fastclose_mailbox (ctx);
mutt_error _("Fatal error! Could not reopen mailbox!");
- return (-1);
+ return -1;
}
mutt_block_signals ();
}
else if (i < 0)
/* fatal error */
- return (-1);
+ return -1;
/* Create a temporary file to write the new version of the mailbox in. */
- fp = m_tempfile(tempfile, _POSIX_PATH_MAX, NONULL(MCore.tmpdir), NULL);
+ fp = m_tempfile(tempfile, _POSIX_PATH_MAX, NONULL(mod_core.tmpdir), NULL);
if (fp == NULL) {
mutt_error _("Could not create temporary file!");
mutt_sleep (5);
mx_fastclose_mailbox (ctx);
mutt_perror (_("Can't create temporary file"));
mutt_sleep (5);
- return (-1);
+ return -1;
}
if (fseeko (ctx->fp, offset, SEEK_SET) != 0 /* seek the append location */
char savefile[_POSIX_PATH_MAX];
snprintf(savefile, sizeof (savefile), "%s/mutt.%s-%u",
- NONULL(MCore.tmpdir), NONULL(MCore.username), (unsigned int)getpid());
+ NONULL(mod_core.tmpdir), NONULL(mod_core.username), (unsigned int)getpid());
rename (tempfile, savefile);
mutt_unblock_signals ();
mx_fastclose_mailbox (ctx);
mutt_pretty_mailbox (savefile);
mutt_error (_("Write failed! Saved partial mailbox to %s"), savefile);
mutt_sleep (5);
- return (-1);
+ return -1;
}
/* Restore the previous access/modification times */
mutt_unblock_signals ();
mx_fastclose_mailbox (ctx);
mutt_error _("Fatal error! Could not reopen mailbox!");
- return (-1);
+ return -1;
}
/* update the offsets of the rewritten messages */
unlink (tempfile); /* remove partial copy of the mailbox */
mutt_unblock_signals ();
- return (0); /* signal success */
+ return 0; /* signal success */
bail: /* Come here in case of disaster */
mutt_error _("Could not reopen mailbox!");
mx_fastclose_mailbox (ctx);
- return (-1);
+ return -1;
}
if (need_sort)
/* close a mailbox opened in write-mode */
int mbox_close_mailbox (CONTEXT * ctx)
{
- mx_unlock_file (ctx->path, fileno (ctx->fp), 1);
+ mx_unlock_file(ctx->path, fileno(ctx->fp));
if (ctx->cinfo)
mutt_slow_close_compressed (ctx);
p_delete(&old_hdrs);
ctx->quiet = 0;
- return (-1);
+ return -1;
}
/* now try to recover the old flags */
ctx->quiet = 0;
- return ((ctx->changed || msg_mod) ? M_REOPENED : M_NEW_MAIL);
+ return (ctx->changed || msg_mod) ? M_REOPENED : M_NEW_MAIL;
}
/*
if (stat (path, &st) == -1)
return -1;
- return ((st.st_size == 0));
+ return st.st_size == 0;
}
int mbox_is_magic (const char* path, struct stat* st)
char tmp[_POSIX_PATH_MAX];
if (S_ISDIR(st->st_mode))
- return (-1);
+ return -1;
if (st->st_size == 0) {
return M_MBOX;
utime (path, ×);
} else {
mutt_perror (path);
- return (-1); /* fopen failed */
+ return -1; /* fopen failed */
}
if (magic == -1 && mutt_can_read_compressed (path))
- return (M_COMPRESSED);
- return (magic);
+ return M_COMPRESSED;
+ return magic;
}
static int mbox_commit_message (MESSAGE* msg, CONTEXT* ctx) {
access,
mbox_open_mailbox,
mbox_open_new_message,
+ mbox_open_message,
NULL,
mbox_check_mailbox,
NULL,
mbox_sync_mailbox,
mbox_commit_message,
};
-