X-Git-Url: http://git.madism.org/?p=apps%2Fmadmutt.git;a=blobdiff_plain;f=mbox.c;h=3cdd76e31f5bd621e6d78a9dd0a596f94df271ed;hp=ddd144dda68739bf6b65b76d17be3afeb5222bc0;hb=c5f843d96b3889ba116e4b704e457a00bee63cb9;hpb=814a01519c9605d479201b99eb16c97b0ad8635d diff --git a/mbox.c b/mbox.c index ddd144d..3cdd76e 100644 --- a/mbox.c +++ b/mbox.c @@ -126,7 +126,7 @@ static int mmdf_parse_mailbox (CONTEXT * ctx) if (fgets (buf, sizeof (buf) - 1, ctx->fp) == NULL) break; - if (safe_strcmp (buf, MMDF_SEP) == 0) { + if (mutt_strcmp (buf, MMDF_SEP) == 0) { loc = ftell (ctx->fp); count++; @@ -170,7 +170,7 @@ static int mmdf_parse_mailbox (CONTEXT * ctx) if (0 < tmploc && tmploc < ctx->size) { if (fseek (ctx->fp, tmploc, SEEK_SET) != 0 || fgets (buf, sizeof (buf) - 1, ctx->fp) == NULL || - safe_strcmp (MMDF_SEP, buf) != 0) { + mutt_strcmp (MMDF_SEP, buf) != 0) { if (fseek (ctx->fp, loc, SEEK_SET) != 0) debug_print (1, ("fseek() failed\n")); hdr->content->length = -1; @@ -189,7 +189,7 @@ static int mmdf_parse_mailbox (CONTEXT * ctx) if (fgets (buf, sizeof (buf) - 1, ctx->fp) == NULL) break; lines++; - } while (safe_strcmp (buf, MMDF_SEP) != 0); + } while (mutt_strcmp (buf, MMDF_SEP) != 0); hdr->lines = lines; hdr->content->length = loc - hdr->content->offset; @@ -421,8 +421,8 @@ static int mbox_open_mailbox (CONTEXT * ctx) static int strict_addrcmp (const ADDRESS * a, const ADDRESS * b) { while (a && b) { - if (safe_strcmp (a->mailbox, b->mailbox) || - safe_strcmp (a->personal, b->personal)) + if (mutt_strcmp (a->mailbox, b->mailbox) || + mutt_strcmp (a->personal, b->personal)) return (0); a = a->next; @@ -437,7 +437,7 @@ static int strict_addrcmp (const ADDRESS * a, const ADDRESS * b) static int strict_cmp_lists (const LIST * a, const LIST * b) { while (a && b) { - if (safe_strcmp (a->data, b->data)) + if (mutt_strcmp (a->data, b->data)) return (0); a = a->next; @@ -452,8 +452,8 @@ static int strict_cmp_lists (const LIST * a, const LIST * b) static int strict_cmp_envelopes (const ENVELOPE * e1, const ENVELOPE * e2) { if (e1 && e2) { - if (safe_strcmp (e1->message_id, e2->message_id) || - safe_strcmp (e1->subject, e2->subject) || + if (mutt_strcmp (e1->message_id, e2->message_id) || + mutt_strcmp (e1->subject, e2->subject) || !strict_cmp_lists (e1->references, e2->references) || !strict_addrcmp (e1->from, e2->from) || !strict_addrcmp (e1->sender, e2->sender) || @@ -476,8 +476,8 @@ static int strict_cmp_envelopes (const ENVELOPE * e1, const ENVELOPE * e2) static int strict_cmp_parameters (const PARAMETER * p1, const PARAMETER * p2) { while (p1 && p2) { - if (safe_strcmp (p1->attribute, p2->attribute) || - safe_strcmp (p1->value, p2->value)) + if (mutt_strcmp (p1->attribute, p2->attribute) || + mutt_strcmp (p1->value, p2->value)) return (0); p1 = p1->next; @@ -493,8 +493,8 @@ static int strict_cmp_bodies (const BODY * b1, const BODY * b2) { if (b1->type != b2->type || b1->encoding != b2->encoding || - safe_strcmp (b1->subtype, b2->subtype) || - safe_strcmp (b1->description, b2->description) || + mutt_strcmp (b1->subtype, b2->subtype) || + mutt_strcmp (b1->description, b2->description) || !strict_cmp_parameters (b1->parameter, b2->parameter) || b1->length != b2->length) return (0); @@ -536,7 +536,7 @@ int mbox_strict_cmp_headers (const HEADER * h1, const HEADER * h2) * 0 no change * -1 error */ -int mbox_check_mailbox (CONTEXT * ctx, int *index_hint) +static int _mbox_check_mailbox (CONTEXT * ctx, int *index_hint) { struct stat st; char buffer[LONG_STRING]; @@ -578,7 +578,7 @@ int mbox_check_mailbox (CONTEXT * ctx, int *index_hint) debug_print (1, ("fseek() failed\n")); if (fgets (buffer, sizeof (buffer), ctx->fp) != NULL) { if ((ctx->magic == M_MBOX && safe_strncmp ("From ", buffer, 5) == 0) - || (ctx->magic == M_MMDF && safe_strcmp (MMDF_SEP, buffer) == 0)) { + || (ctx->magic == M_MMDF && mutt_strcmp (MMDF_SEP, buffer) == 0)) { if (fseek (ctx->fp, ctx->size, SEEK_SET) != 0) debug_print (1, ("fseek() failed\n")); if (ctx->magic == M_MBOX) @@ -630,6 +630,26 @@ int mbox_check_mailbox (CONTEXT * ctx, int *index_hint) return (-1); } +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; + } + } + + rc = _mbox_check_mailbox (ctx, index_hint); + + if (lock) { + mutt_unblock_signals (); + mbox_unlock_mailbox (ctx); + } + return rc; +} + /* return values: * 0 success * -1 failure @@ -676,7 +696,7 @@ static int _mbox_sync_mailbox (CONTEXT * ctx, int unused, int *index_hint) } /* Check to make sure that the file hasn't changed on disk */ - if ((i = mbox_check_mailbox (ctx, index_hint)) == M_NEW_MAIL + if ((i = _mbox_check_mailbox (ctx, index_hint)) == M_NEW_MAIL || i == M_REOPENED) { /* new mail arrived, or mailbox reopened */ need_sort = i; @@ -840,7 +860,7 @@ static int _mbox_sync_mailbox (CONTEXT * ctx, int unused, int *index_hint) /* do a sanity check to make sure the mailbox looks ok */ fgets (buf, sizeof (buf), ctx->fp) == NULL || (ctx->magic == M_MBOX && safe_strncmp ("From ", buf, 5) != 0) || - (ctx->magic == M_MMDF && safe_strcmp (MMDF_SEP, buf) != 0)) { + (ctx->magic == M_MMDF && mutt_strcmp (MMDF_SEP, buf) != 0)) { debug_print (1, ("message not in expected position.\n")); debug_print (1, ("LINE: %s\n", buf)); i = -1; @@ -1188,7 +1208,7 @@ int mbox_is_magic (const char* path, struct stat* st) { fgets (tmp, sizeof (tmp), f); if (safe_strncmp ("From ", tmp, 5) == 0) magic = M_MBOX; - else if (safe_strcmp (MMDF_SEP, tmp) == 0) + else if (mutt_strcmp (MMDF_SEP, tmp) == 0) magic = M_MMDF; safe_fclose (&f); #ifndef BUFFY_SIZE @@ -1221,6 +1241,7 @@ static mx_t* reg_mx (void) { fmt->mx_open_mailbox = mbox_open_mailbox; fmt->mx_open_new_message = mbox_open_new_message; fmt->mx_sync_mailbox = mbox_sync_mailbox; + fmt->mx_check_mailbox = mbox_check_mailbox; return (fmt); }