/** * mbox_unlock_mailbox - Unlock a mailbox * @param m Mailbox to unlock */ static void mbox_unlock_mailbox(struct Mailbox *m) { struct MboxAccountData *adata = mbox_adata_get(m); if (!adata) return; if (adata->locked) { fflush(adata->fp); mutt_file_unlock(fileno(adata->fp)); adata->locked = false; } }
/** * unlock_realpath - Unlock the mailbox->realpath * @param m Mailbox to unlock * * Unlock a mailbox previously locked by lock_mailbox(). */ static void unlock_realpath(struct Mailbox *m) { if (!m || !m->compress_info) return; struct CompressInfo *ci = m->compress_info; if (!ci->locked) return; mutt_file_unlock(fileno(ci->fp_lock)); ci->locked = false; mutt_file_fclose(&ci->fp_lock); }
/** * mbox_mbox_close - Implements MxOps::mbox_close() */ static int mbox_mbox_close(struct Mailbox *m) { if (!m) return -1; struct MboxAccountData *adata = mbox_adata_get(m); if (!adata) return -1; if (!adata->fp) return 0; if (adata->append) { mutt_file_unlock(fileno(adata->fp)); mutt_sig_unblock(); } mutt_file_fclose(&adata->fp); /* fix up the times so mailbox won't get confused */ if (m->peekonly && (m->path[0] != '\0') && (mutt_file_timespec_compare(&m->mtime, &adata->atime) > 0)) { #ifdef HAVE_UTIMENSAT struct timespec ts[2]; ts[0] = adata->atime; ts[1] = m->mtime; utimensat(0, m->path, ts, 0); #else struct utimbuf ut; ut.actime = adata->atime.tv_sec; ut.modtime = m->mtime.tv_sec; utime(m->path, &ut); #endif } return 0; }