aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKirill Ponomarev <krion@FreeBSD.org>2005-02-06 16:58:43 +0800
committerKirill Ponomarev <krion@FreeBSD.org>2005-02-06 16:58:43 +0800
commit82728efb9c82b68995eb74e822601507527f5b7b (patch)
tree83760f92ba675046240ba87b1a766f831b0fe780
parentb60af5c29dfc41d5d1eaaac7c5082efe60ce1892 (diff)
downloadfreebsd-ports-gnome-82728efb9c82b68995eb74e822601507527f5b7b.tar.gz
freebsd-ports-gnome-82728efb9c82b68995eb74e822601507527f5b7b.tar.zst
freebsd-ports-gnome-82728efb9c82b68995eb74e822601507527f5b7b.zip
Update to version 1.5.7
PR: ports/77161 Submitted by: maintainer
-rw-r--r--mail/mutt-devel/Makefile83
-rw-r--r--mail/mutt-devel/distinfo28
-rw-r--r--mail/mutt-devel/files/extra-patch-edit-threads9
-rw-r--r--mail/mutt-devel/files/extra-patch-maildir-header-cache1460
-rw-r--r--mail/mutt-devel/files/extra-patch-maildir-mtime57
-rw-r--r--mail/mutt-devel/files/extra-patch-maildir-mtime-nntp113
-rw-r--r--mail/mutt-devel/files/extra-patch-nntp.c31
-rw-r--r--mail/mutt-devel/files/extra-patch-nodoc-contrib8
-rw-r--r--mail/mutt-devel/files/extra-patch-sidebar10
-rw-r--r--mail/mutt-devel/files/patch-0562
-rw-r--r--mail/mutt-devel/files/patch-Makefile.in11
-rw-r--r--mail/mutt-devel/files/patch-doc-manual.sgml.head16
-rw-r--r--mail/mutt-devel/files/patch-hcache-db11
-rw-r--r--mail/mutt-devel/files/patch-init.c21
-rw-r--r--mail/mutt-devel/files/patch-mktemp8
-rw-r--r--mail/mutt-devel/files/patch-pgp.c11
-rw-r--r--mail/mutt-devel/files/patch-smime-recvattach39
-rw-r--r--mail/mutt-devel/files/patch-threadcomplete8
-rw-r--r--mail/mutt-devel/files/patch-threadsubject51
-rw-r--r--mail/mutt-devel/files/patch-z22
-rw-r--r--mail/mutt-devel/scripts/generate-plist12
21 files changed, 318 insertions, 1753 deletions
diff --git a/mail/mutt-devel/Makefile b/mail/mutt-devel/Makefile
index 0ff5860256dc..b6c93c560b94 100644
--- a/mail/mutt-devel/Makefile
+++ b/mail/mutt-devel/Makefile
@@ -47,7 +47,10 @@
# WITH_MUTT_QUOTE_PATCH
# This is a default knob and can be disabled by WITHOUT_MUTT_QUOTE_PATCH
#
-# If you want to have the Maildir/IMAP header cache define:
+# If you want to have the IMAP header cache define:
+# WITH_MUTT_IMAP_HEADER_CACHE
+#
+# If you want to have the Maildir and the IMAP header cache define:
# WITH_MUTT_MAILDIR_HEADER_CACHE
#
# If you want to make SMIME outlook compatible define:
@@ -55,10 +58,6 @@
# This is a default knob and can be disabled by
# WITHOUT_MUTT_SMIME_OUTLOOK_COMPAT
#
-# If you want to use enhanced pgp features define:
-# WITH_MUTT_PGP_PATCH
-# This is a default knob and can be disabled by WITHOUT_MUTT_PGP_PATCH
-#
# If you want to read and post news with mutt define:
# WITH_MUTT_NNTP
#
@@ -93,8 +92,8 @@
#
PORTNAME= mutt-devel
-PORTVERSION= 1.5.6
-PORTREVISION= 11
+PORTVERSION= 1.5.7
+PORTREVISION= 0
CATEGORIES+= mail ipv6
.if defined(WITH_MUTT_NNTP)
CATEGORIES+= news
@@ -102,8 +101,13 @@ CATEGORIES+= news
MASTER_SITES= ftp://ftp.mutt.org/mutt/devel/ \
ftp://ftp.fu-berlin.de/pub/unix/mail/mutt/devel/ \
ftp://ftp.demon.co.uk/pub/mirrors/mutt/devel/ \
- ftp://ftp.parodius.com/pub/mutt/devel/
-DISTNAME= mutt-${PORTVERSION}i
+ ftp://ftp.parodius.com/pub/mutt/devel/ \
+ http://www.mutt.org.ua/download/mutt-${VVV_PATCH_VERSION}/:vvv \
+ http://www2.mutt.org.ua/download/mutt-${VVV_PATCH_VERSION}/:vvv \
+ http://www3.mutt.org.ua/download/mutt-${VVV_PATCH_VERSION}/:vvv \
+ ftp://ftp.mutt.org.ua/pub/mutt/mutt-${VVV_PATCH_VERSION}/:vvv \
+ ftp://ftp3.mutt.org.ua/pub/mutt/mutt-${VVV_PATCH_VERSION}/:vvv \
+ http://www.spinnaker.de/mutt/compressed/:rr
PATCH_SITES+= http://www.mutt.org.ua/download/mutt-${VVV_PATCH_VERSION}/:vvv \
http://www2.mutt.org.ua/download/mutt-${VVV_PATCH_VERSION}/:vvv \
@@ -112,6 +116,7 @@ PATCH_SITES+= http://www.mutt.org.ua/download/mutt-${VVV_PATCH_VERSION}/:vvv \
ftp://ftp3.mutt.org.ua/pub/mutt/mutt-${VVV_PATCH_VERSION}/:vvv \
http://cedricduval.free.fr/mutt/patches/download/:cd \
http://home.woolridge.ca/mutt/patches/:dw \
+ http://www.spinnaker.de/mutt/compressed/:rr \
http://thomer.com/mutt/:thomer
MAINTAINER?= udo.schweigert@siemens.com
@@ -145,14 +150,22 @@ SCRIPTS_ENV= WRKDIR="${WRKDIR}"
.include <bsd.port.pre.mk>
+DISTNAME= mutt-${PORTVERSION}i
+EXTRACT_ONLY= ${DISTNAME}${EXTRACT_SUFX}
+DISTFILES= ${DISTNAME}${EXTRACT_SUFX}
+
CD_PATCH_VERSION= 1.5.5.1
CD_IFDEF_PATCH_VERSION= 1.5.4
+DW_PATCH_VERSION= 1.5.6
.if !defined(VVV_PATCH_VERSION)
VVV_PATCH_VERSION= ${PORTVERSION}
.endif
.if !defined(CD_PATCH_VERSION)
CD_PATCH_VERSION= ${PORTVERSION}
.endif
+.if !defined(RR_PATCH_VERSION)
+RR_PATCH_VERSION= ${PORTVERSION}
+.endif
.if !defined(CD_IFDEF_PATCH_VERSION)
CD_IFDEF_PATCH_VERSION= ${CD_PATCH_VERSION}
.endif
@@ -162,16 +175,16 @@ DW_PATCH_VERSION= ${PORTVERSION}
.if !defined(DW_MBOX_PATCH_VERSION)
DW_MBOX_PATCH_VERSION= ${DW_PATCH_VERSION}
.endif
-.if defined(WITH_MUTT_IMAP_HEADER_CACHE)
-WITH_MUTT_MAILDIR_HEADER_CACHE= yes
+.if defined(WITH_MUTT_MAILDIR_HEADER_CACHE)
+WITH_MUTT_IMAP_HEADER_CACHE= yes
+.endif
+.if defined(WITH_MUTT_SIGNATURE_MENU)
+.error The WITH_MUTT_SIGNATURE_MENU does not work at the moment
.endif
.if defined(WITH_MUTT_SIDEBAR_PATCH)
.if defined(WITH_MUTT_NNTP)
.error The WITH_MUTT_SIDEBAR_PATCH and WITH_MUTT_NNTP are not compatible
.endif
-.if defined(WITH_MUTT_MAILDIR_MTIME_PATCH)
-.error The WITH_MUTT_SIDEBAR_PATCH and WITH_MUTT_MAILDIR_MTIME_PATCH are not compatible
-.endif
.if defined(WITH_MUTT_SIGNATURE_MENU)
.error The WITH_MUTT_SIDEBAR_PATCH and WITH_MUTT_SIGNATURE_MENU are not compatible
.endif
@@ -243,7 +256,7 @@ LIB_DEPENDS+= slang.1:${PORTSDIR}/devel/libslang
.if defined(WITH_MUTT_CYRUS_SASL2)
LIB_DEPENDS+= sasl2.2:${PORTSDIR}/security/cyrus-sasl2
.endif
-.if defined(WITH_MUTT_MAILDIR_HEADER_CACHE)
+.if defined(WITH_MUTT_IMAP_HEADER_CACHE)
LIB_DEPENDS+= db-4.2.2:${PORTSDIR}/databases/db42
CFLAGS+= -I${LOCALBASE}/include/db42
.endif
@@ -269,20 +282,15 @@ pre-configure::
@${PATCH} ${PATCH_ARGS} < ${PATCHDIR}/extra-patch-maildir-mtime
.endif
.endif
-.if defined(WITH_MUTT_NNTP)
-pre-configure::
- @${PATCH} ${PATCH_ARGS} < ${PATCHDIR}/extra-patch-nntp.c
-.endif
-.if ! defined(WITHOUT_MUTT_PGP_PATCH)
-SGML_NEEDED= yes
+.if defined(WITH_MUTT_EDIT_THREADS)
pre-configure::
- @${PATCH} ${PATCH_ARGS} < ${PATCHDIR}/extra-patch-pgp-dw
+ @${PATCH} ${PATCH_ARGS} < ${PATCHDIR}/extra-patch-edit-threads
.endif
-.if defined(WITH_MUTT_EDIT_THREADS)
+.if defined(WITH_MUTT_SIDEBAR_PATCH)
pre-configure::
- @${PATCH} ${PATCH_ARGS} < ${PATCHDIR}/extra-patch-edit-threads
+ @${PATCH} ${PATCH_ARGS} < ${PATCHDIR}/extra-patch-sidebar
.endif
.if defined(WITH_MUTT_ASPELL)
@@ -297,7 +305,6 @@ CONFIGURE_ARGS+= --enable-locales-fix
CONFIGURE_ARGS+= --with-curses=${LOCALBASE}
.elif defined(MUTT_USES_SLANG)
CONFIGURE_ARGS+= --with-slang=${LOCALBASE}
-PATCHFILES+= patch-${VVV_PATCH_VERSION}.vvv.slang.gz:vvv
.endif
.if defined(WITH_MUTT_CYRUS_SASL2)
CONFIGURE_ARGS+= --with-sasl2=${LOCALBASE}
@@ -319,14 +326,24 @@ CONFIGURE_ARGS+= --without-idn
PATCH_DIST_STRIP= -p1
.if ! defined (WITHOUT_MUTT_COMPRESSED_FOLDERS)
-PATCHFILES+= patch-${VVV_PATCH_VERSION}.rr.compressed.gz:vvv
+DISTFILES+= patch-${RR_PATCH_VERSION}.rr.compressed.1.gz:rr
CONFIGURE_ARGS+= --enable-compressed
SGML_NEEDED= yes
+pre-patch::
+ @${GUNZIP_CMD} -c ${DISTDIR}/${DIST_SUBDIR}/patch-${RR_PATCH_VERSION}.rr.compressed.1.gz > ${WRKDIR}/patch-compressed
+ @${REINPLACE_CMD} -E '/^diff.*\/doc\/manual.txt$$/,/^diff/d' \
+ ${WRKDIR}/patch-compressed
+ @${PATCH} ${PATCH_ARGS} -p1 < ${WRKDIR}/patch-compressed
.endif
.if defined(WITH_MUTT_NNTP)
-PATCHFILES+= patch-${VVV_PATCH_VERSION}.vvv.nntp.gz:vvv
+DISTFILES+= patch-${VVV_PATCH_VERSION}.vvv.nntp.gz:vvv
CONFIGURE_ARGS+= --enable-nntp
SGML_NEEDED= yes
+pre-patch::
+ @${GUNZIP_CMD} -c ${DISTDIR}/${DIST_SUBDIR}/patch-${VVV_PATCH_VERSION}.vvv.nntp.gz > ${WRKDIR}/patch-nntp
+ @${REINPLACE_CMD} -E '/^diff.*\/doc\/manual.txt$$/,/^diff/d' \
+ ${WRKDIR}/patch-nntp
+ @${PATCH} ${PATCH_ARGS} -p1 < ${WRKDIR}/patch-nntp
.endif
.if ! defined(WITHOUT_MUTT_QUOTE_PATCH)
PATCHFILES+= patch-${VVV_PATCH_VERSION}.vvv.initials.gz:vvv \
@@ -349,12 +366,12 @@ SGML_NEEDED= yes
PATCHFILES+= p0-patch-${DW_MBOX_PATCH_VERSION}.dw.mbox-hook.1:dw
.endif
.if defined(WITH_MUTT_SIDEBAR_PATCH)
-PATCHFILES+= patch-1.5.6i.sidebar.20041122.txt:thomer
+PATCHFILES+= patch-1.5.7i.sidebar.20050203.txt:thomer
.endif
WRKSRC= ${WRKDIR}/${DISTNAME:S/i$//}
MAN1= mutt.1 mutt_dotlock.1
-MAN5= muttrc.5 mbox.5
+MAN5= muttrc.5 mbox.5 mmdf.5
post-patch::
@${REINPLACE_CMD} -e 's,/usr/bin/gpg,${LOCALBASE}/bin/gpg,g' \
@@ -377,9 +394,12 @@ SCRIPTS_ENV+= MUTT_COMPRESSED_FOLDERS="yes"
.if ! defined(WITHOUT_MUTT_QUOTE_PATCH)
SCRIPTS_ENV+= MUTT_QUOTE_PATCH="yes"
.endif
+.if defined(WITH_MUTT_IMAP_HEADER_CACHE)
+SCRIPTS_ENV+= MUTT_IMAP_HEADER_CACHE="yes"
+CONFIGURE_ARGS+= --enable-hcache --without-gdbm --with-bdb
+.endif
.if defined(WITH_MUTT_MAILDIR_HEADER_CACHE)
SCRIPTS_ENV+= MUTT_MAILDIR_HEADER_CACHE="yes"
-CONFIGURE_ARGS+= --enable-hcache --without-gdbm --with-bdb
.endif
.if defined(WITH_MUTT_SIDEBAR_PATCH)
SCRIPTS_ENV+= MUTT_SIDEBAR_PATCH="yes"
@@ -393,9 +413,6 @@ SCRIPTS_ENV+= MUTT_SIGNATURE_MENU="yes"
.if defined(WITH_MUTT_IFDEF_PATCH)
SCRIPTS_ENV+= MUTT_IFDEF_PATCH="yes"
.endif
-.if ! defined(WITHOUT_MUTT_PGP_PATCH)
-SCRIPTS_ENV+= MUTT_PGP_PATCH="yes"
-.endif
.if ! defined(WITHOUT_MUTT_HTML)
SCRIPTS_ENV+= MUTT_HTML="yes"
.endif
diff --git a/mail/mutt-devel/distinfo b/mail/mutt-devel/distinfo
index bd2d8f724f7e..add8005e8a52 100644
--- a/mail/mutt-devel/distinfo
+++ b/mail/mutt-devel/distinfo
@@ -1,20 +1,16 @@
-MD5 (mutt/mutt-1.5.6i.tar.gz) = aa1433635d7c86beba1675a3408b0324
-SIZE (mutt/mutt-1.5.6i.tar.gz) = 2910730
-MD5 (mutt/patch-1.5.6.vvv.slang.gz) = 11dccb4b178d63d0dbf51afcea3b30c8
-SIZE (mutt/patch-1.5.6.vvv.slang.gz) = 347
-MD5 (mutt/patch-1.5.6.rr.compressed.gz) = 0d57a62f17c93eb1d2eff60e070933b3
-SIZE (mutt/patch-1.5.6.rr.compressed.gz) = 10077
-MD5 (mutt/patch-1.5.6.vvv.nntp.gz) = b32ef18006ce8a211ad2d1dabc62bfcb
-SIZE (mutt/patch-1.5.6.vvv.nntp.gz) = 106691
-MD5 (mutt/patch-1.5.6.vvv.initials.gz) = eecaa646227609b52e5267178b3bc462
-SIZE (mutt/patch-1.5.6.vvv.initials.gz) = 667
-MD5 (mutt/patch-1.5.6.vvv.quote.gz) = f262968775cf5c37ba49b29248fcf170
-SIZE (mutt/patch-1.5.6.vvv.quote.gz) = 1558
-MD5 (mutt/patch-1.5.5.1.cd.signatures_menu.2.1) = 22caeffb4a612f5fa6e1f585b40c51a6
-SIZE (mutt/patch-1.5.5.1.cd.signatures_menu.2.1) = 22637
+MD5 (mutt/mutt-1.5.7i.tar.gz) = 395c699f1d00ee193f8f145b82d6afb7
+SIZE (mutt/mutt-1.5.7i.tar.gz) = 2990425
+MD5 (mutt/patch-1.5.7.rr.compressed.1.gz) = d001ab9fe475063a9d640a75f8dbbad5
+SIZE (mutt/patch-1.5.7.rr.compressed.1.gz) = 13770
+MD5 (mutt/patch-1.5.7.vvv.nntp.gz) = e2ad220c76ced7b519cea60ef67cc827
+SIZE (mutt/patch-1.5.7.vvv.nntp.gz) = 91881
+MD5 (mutt/patch-1.5.7.vvv.initials.gz) = 08e1772a0682a507ac5806c6d019c3b9
+SIZE (mutt/patch-1.5.7.vvv.initials.gz) = 699
+MD5 (mutt/patch-1.5.7.vvv.quote.gz) = 011d98d05d4d0866ea3a913935784e0f
+SIZE (mutt/patch-1.5.7.vvv.quote.gz) = 1627
MD5 (mutt/patch-1.5.4.cd.ifdef.1) = a545036cdb55519154d0b35465f52daa
SIZE (mutt/patch-1.5.4.cd.ifdef.1) = 3545
MD5 (mutt/p0-patch-1.5.6.dw.mbox-hook.1) = 9e29a6778ab07a4de3442691e4573fea
SIZE (mutt/p0-patch-1.5.6.dw.mbox-hook.1) = 6405
-MD5 (mutt/patch-1.5.6i.sidebar.20041122.txt) = 3c5f1be18b9fb2be693c8c717f6b940c
-SIZE (mutt/patch-1.5.6i.sidebar.20041122.txt) = 46178
+MD5 (mutt/patch-1.5.7i.sidebar.20050203.txt) = e36f06d15f63e94f746c572900bfb9fa
+SIZE (mutt/patch-1.5.7i.sidebar.20050203.txt) = 46003
diff --git a/mail/mutt-devel/files/extra-patch-edit-threads b/mail/mutt-devel/files/extra-patch-edit-threads
index 8e1f85a9a7cd..4007238333da 100644
--- a/mail/mutt-devel/files/extra-patch-edit-threads
+++ b/mail/mutt-devel/files/extra-patch-edit-threads
@@ -42,15 +42,6 @@ diff -ru work.old/mutt-1.5.6/config.h.in work/mutt-1.5.6/config.h.in
diff -ru work.old/mutt-1.5.6/configure work/mutt-1.5.6/configure
--- configure Sun Feb 1 19:22:06 2004
+++ configure Tue Feb 10 14:40:41 2004
-@@ -40,6 +40,8 @@
- ac_help="$ac_help
- --with-gss[=PFX] Compile in GSSAPI authentication for IMAP"
- ac_help="$ac_help
-+ --enable-imap-edit-threads Enable editing threads support for IMAP"
-+ac_help="$ac_help
- --with-ssl[=PFX] Compile in SSL support for POP/IMAP"
- ac_help="$ac_help
- --with-nss[=PFX] Compile in SSL support for POP/IMAP via NSS"
@@ -5383,6 +5385,23 @@
else
USE_GSS_TRUE='#'
diff --git a/mail/mutt-devel/files/extra-patch-maildir-header-cache b/mail/mutt-devel/files/extra-patch-maildir-header-cache
index 4798bc175aa1..40df28ed3937 100644
--- a/mail/mutt-devel/files/extra-patch-maildir-header-cache
+++ b/mail/mutt-devel/files/extra-patch-maildir-header-cache
@@ -2,1325 +2,44 @@ diff -Nru a/PATCHES b/PATCHES
--- a/PATCHES
+++ b/PATCHES
@@ -0,0 +1 @@
-+patch-1.5.6.tg.hcache.11
-diff -Nru a/configure.in b/configure.in
---- a/configure.in 2004-08-18 09:43:09 +02:00
-+++ b/configure.in 2004-10-14 07:21:52 +02:00
-@@ -692,11 +692,6 @@
- AC_CHECK_FUNCS(idna_to_ascii_lz idna_to_ascii_from_locale)
- fi
-
--if test "$need_md5" = "yes"
--then
-- MUTT_LIB_OBJECTS="$MUTT_LIB_OBJECTS md5c.o"
--fi
--
- dnl -- end socket --
-
- AC_ARG_ENABLE(debug, [ --enable-debug Enable debugging support],
-@@ -767,6 +762,96 @@
- NOTE: this requires significant more memory when defined.])
-
- fi])
-+
-+dnl -- start cache --
-+AC_ARG_ENABLE(hcache, [ --enable-hcache Enable header caching],
-+[if test x$enableval = xyes; then
-+ AC_DEFINE(USE_HCACHE, 1, [Enable header caching])
-+ MUTT_LIB_OBJECTS="$MUTT_LIB_OBJECTS hcache.o"
-+
-+ OLDCPPFLAGS="$CPPFLAGS"
-+ OLDLIBS="$LIBS"
-+
-+ need_md5="yes"
-+ ac_prefer_gdbm=yes
-+ AC_ARG_WITH(gdbm, [ --without-gdbm Get rid of gdbm even if it is available ],
-+ ac_prefer_gdbm=$withval)
-+ if test x$ac_prefer_gdbm != xno; then
-+ CPPFLAGS="$OLDCPPFLAGS"
-+ LIBS="$OLDLIBS -lgdbm";
-+ AC_CACHE_CHECK(for gdbm_open, ac_cv_gdbmopen,[
-+ ac_cv_gdbmopen=no
-+ AC_TRY_LINK([#include <gdbm.h>],[gdbm_open(0,0,0,0,0);],[ac_cv_gdbmopen=yes])
-+ ])
-+ fi
-+
-+ ac_bdb_prefix=yes
-+ AC_ARG_WITH(bdb, [ --with-bdb[=DIR] Use BerkeleyDB4 if gdbm is not available ],
-+ ac_bdb_prefix=$withval)
-+ if test x$ac_bdb_prefix != xno -a x$ac_cv_gdbmopen != xyes; then
-+ test x$ac_bdb_prefix = xyes && ac_bdb_prefix="$mutt_cv_prefix /opt/csw/bdb4 /opt /usr/local /usr"
-+ for d in $ac_bdb_prefix; do
-+ bdbpfx="$bdbpfx $d"
-+ for v in BerkeleyDB.4.3 BerkeleyDB.4.2 BerkeleyDB.4.1; do
-+ bdbpfx="$bdbpfx $d/$v"
-+ done
-+ done
-+ BDB_VERSIONS="db-4.2 db4.2 db42 ''"
-+ AC_MSG_CHECKING([for BerkeleyDB > 4.0])
-+ for d in $bdbpfx; do
-+ BDB_INCLUDE_DIR=""
-+ BDB_LIB_DIR=""
-+ for v in / $BDB_VERSIONS; do
-+ if test -r "$d/include/$v/db.h"; then
-+ BDB_INCLUDE_DIR="$d/include/$v"
-+ if test -d "$d/lib/$v"; then
-+ BDB_LIB_DIR="$d/lib/$v"
-+ for l in `echo $BDB_VERSIONS`; do
-+ CPPFLAGS="-I$BDB_INCLUDE_DIR $OLDCPPFLAGS"
-+ LIBS="$OLDLIBS -L$BDB_LIB_DIR -l$l"
-+ AC_TRY_LINK([
-+ #include <stdlib.h>
-+ #include <db.h>
-+ ],[
-+ DB *db = NULL;
-+ db->open(db,NULL,NULL,NULL,0,0,0);
-+ ],[
-+ ac_cv_dbcreate=yes
-+ BDB_LIB="$l"
-+ break
-+ ])
-+ done
-+ test x$ac_dbcreate = xyes && break
-+ fi
-+ fi
-+ done
-+ test x$BDB_LIB != x && break
-+ done
-+ if test x$ac_cv_dbcreate = xyes; then
-+ AC_MSG_RESULT(yes)
-+ else
-+ AC_MSG_RESULT(no)
-+ fi
-+ fi
-+
-+ if test x$ac_cv_gdbmopen = xyes; then
-+ CPPFLAGS="$OLDCPPFLAGS"
-+ LIBS="$OLDLIBS -lgdbm";
-+ AC_DEFINE(HAVE_GDBM, 1, [GDBM Support])
-+ elif test x$ac_cv_dbcreate = xyes; then
-+ CPPFLAGS="-I$BDB_INCLUDE_DIR $OLDCPPFLAGS"
-+ LIBS="$OLDLIBS -L$BDB_LIB_DIR -l$BDB_LIB"
-+ AC_DEFINE(HAVE_DB4, 1, [Sleepycat DB4 Support])
-+ else
-+ AC_MSG_ERROR(You need Sleepycat DB4 or GDBM for --enable-hcache)
-+ fi
-+fi])
-+dnl -- end cache --
-+
-+if test "$need_md5" = "yes"
-+then
-+ MUTT_LIB_OBJECTS="$MUTT_LIB_OBJECTS md5c.o"
-+fi
-
- AC_SUBST(MUTTLIBS)
- AC_SUBST(MUTT_LIB_OBJECTS)
-diff -Nru a/globals.h b/globals.h
---- a/globals.h 2004-08-18 09:43:11 +02:00
-+++ b/globals.h 2004-08-26 22:32:53 +02:00
-@@ -63,6 +63,10 @@
- WHERE char *Locale;
- WHERE char *MailcapPath;
- WHERE char *Maildir;
-+#if USE_HCACHE
-+WHERE char *HeaderCache;
-+WHERE char *HeaderCachePageSize;
-+#endif
- WHERE char *MhFlagged;
- WHERE char *MhReplied;
- WHERE char *MhUnseen;
++patch-1.5.7.tg.hcache.1
diff -Nru a/hcache.c b/hcache.c
---- /dev/null Wed Dec 31 16:00:00 196900
-+++ b/hcache.c 2004-11-09 00:09:22 +01:00
-@@ -0,0 +1,880 @@
-+/*
-+ * Copyright (C) 2004 Thomas Glanzmann <sithglan@stud.uni-erlangen.de>
-+ * Copyright (C) 2004 Tobias Werth <sitowert@stud.uni-erlangen.de>
-+ * Copyright (C) 2004 Brian Fundakowski Feldman <green@FreeBSD.org>
-+ *
-+ * This program is free software; you can redistribute it and/or modify
-+ * it under the terms of the GNU General Public License as published by
-+ * the Free Software Foundation; either version 2 of the License, or
-+ * (at your option) any later version.
-+ *
-+ * This program is distributed in the hope that it will be useful,
-+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
-+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-+ * GNU General Public License for more details.
-+ *
-+ * You should have received a copy of the GNU General Public License
-+ * along with this program; if not, write to the Free Software
-+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111, USA.
-+ */
-+
-+#if HAVE_CONFIG_H
-+#include "config.h"
-+#endif /* HAVE_CONFIG_H */
-+
-+#if HAVE_GDBM
-+#include <gdbm.h>
-+#elif HAVE_DB4
-+#include <db.h>
-+#endif
-+
-+#include <errno.h>
-+#include <fcntl.h>
-+#include "mutt.h"
-+#ifdef USE_IMAP
-+#include "message.h"
-+#endif
-+#include "mime.h"
-+#include "mx.h"
-+#include "lib.h"
-+#include "md5.h"
-+
-+#if HAVE_GDBM
-+static struct
-+header_cache
-+{
-+ GDBM_FILE db;
-+ char *folder;
-+ unsigned int crc;
-+} HEADER_CACHE;
-+#elif HAVE_DB4
-+static struct
-+header_cache
-+{
-+ DB_ENV *env;
-+ DB *db;
-+ unsigned int crc;
-+ int fd;
-+ char lockfile[_POSIX_PATH_MAX];
-+} HEADER_CACHE;
-+#endif
-+
-+typedef union
-+{
-+ struct timeval timeval;
-+ unsigned long long uid_validity;
-+} validate;
-+
-+static void *
-+lazy_malloc(size_t siz)
-+{
-+ if (0 < siz && siz < 4096) {
-+ siz = 4096;
-+ }
-+
-+ return safe_malloc(siz);
-+}
-+
-+static void
-+lazy_realloc(void *ptr, size_t siz)
-+{
-+ void **p = (void **)ptr;
-+
-+ if ( p != NULL
-+ && 0 < siz
-+ && siz < 4096) {
-+ return;
-+ }
-+
-+ safe_realloc(ptr, siz);
-+}
-+
-+static unsigned char *
-+dump_int(unsigned int i, unsigned char *d, int *off)
-+{
-+ lazy_realloc(&d, *off + sizeof(int));
-+ memcpy(d + *off, &i, sizeof(int));
-+ (*off) += sizeof(int);
-+
-+ return d;
-+}
-+
-+static void
-+restore_int(unsigned int *i, const unsigned char *d, int *off)
-+{
-+ memcpy(i, d + *off, sizeof(int));
-+ (*off) += sizeof(int);
-+}
-+
-+static unsigned char *
-+dump_char(char *c, unsigned char *d, int *off)
-+{
-+ unsigned int size;
-+
-+ if (c == NULL) {
-+ size = 0;
-+ d = dump_int(size, d, off);
-+ return d;
-+ }
-+
-+ size = mutt_strlen(c) + 1;
-+ d = dump_int(size, d, off);
-+ lazy_realloc(&d, *off + size);
-+ memcpy(d + *off, c, size);
-+ *off += size;
-+
-+ return d;
-+}
-+
-+static unsigned char *
-+dump_char_size(char *c, unsigned char *d, int *off, ssize_t size)
-+{
-+ if (c == NULL) {
-+ size = 0;
-+ d = dump_int(size, d, off);
-+ return d;
-+ }
-+
-+ d = dump_int(size, d, off);
-+ lazy_realloc(&d, *off + size);
-+ memcpy(d + *off, c, size);
-+ *off += size;
-+
-+ return d;
-+}
-+
-+static void
-+restore_char(char **c, const unsigned char *d, int *off)
-+{
-+ unsigned int size;
-+ restore_int(&size, d, off);
-+
-+ if (size == 0) {
-+ *c = NULL;
-+ return;
-+ }
-+
-+ *c = safe_malloc(size);
-+ memcpy(*c, d + *off, size);
-+ *off += size;
-+}
-+
-+static unsigned char *
-+dump_address(ADDRESS *a, unsigned char *d, int *off)
-+{
-+ unsigned int counter = 0;
-+ unsigned int start_off = *off;
-+
-+ d = dump_int(0xdeadbeef, d, off);
-+
-+ while (a) {
-+#ifdef EXACT_ADDRESS
-+ d = dump_char(a->val, d, off);
-+#endif
-+ d = dump_char(a->personal, d, off);
-+ d = dump_char(a->mailbox, d, off);
-+ d = dump_int(a->group, d, off);
-+ a = a->next;
-+ counter++;
-+ }
-+
-+ memcpy(d + start_off, &counter, sizeof(int));
-+
-+ return d;
-+}
-+
-+static void
-+restore_address(ADDRESS **a, const unsigned char *d, int *off)
-+{
-+ unsigned int counter;
-+
-+ restore_int(&counter, d, off);
-+
-+ while (counter) {
-+ *a = safe_malloc(sizeof(ADDRESS));
-+#ifdef EXACT_ADDRESS
-+ restore_char(&(*a)->val, d, off);
-+#endif
-+ restore_char(&(*a)->personal, d, off);
-+ restore_char(&(*a)->mailbox, d, off);
-+ restore_int((unsigned int *)&(*a)->group, d, off);
-+ a = &(*a)->next;
-+ counter--;
-+ }
-+
-+ *a = NULL;
-+}
-+
-+static unsigned char *
-+dump_list(LIST *l, unsigned char *d, int *off)
-+{
-+ unsigned int counter = 0;
-+ unsigned int start_off = *off;
-+
-+ d = dump_int(0xdeadbeef, d, off);
-+
-+ while (l) {
-+ d = dump_char(l->data, d, off);
-+ l = l->next;
-+ counter++;
-+ }
-+
-+ memcpy(d + start_off, &counter, sizeof(int));
-+
-+ return d;
-+}
-+
-+static void
-+restore_list(LIST **l, const unsigned char *d, int *off)
-+{
-+ unsigned int counter;
-+
-+ restore_int(&counter, d, off);
-+
-+ while (counter) {
-+ *l = safe_malloc(sizeof(LIST));
-+ restore_char(&(*l)->data, d, off);
-+ l = &(*l)->next;
-+ counter--;
-+ }
-+
-+ *l = NULL;
-+}
-+
-+static unsigned char *
-+dump_buffer(BUFFER *b, unsigned char *d, int *off)
-+{
-+ if (! b) {
-+ d = dump_int(0, d, off);
-+ return d;
-+ } else {
-+ d = dump_int(1, d, off);
-+ }
-+
-+ d = dump_char_size(b->data, d, off, b->dsize + 1);
-+ d = dump_int(b->dptr - b->data, d, off);
-+ d = dump_int(b->dsize, d, off);
-+ d = dump_int(b->destroy, d, off);
-+
-+ return d;
-+}
-+
-+static void
-+restore_buffer(BUFFER **b, const unsigned char *d, int *off)
-+{
-+ unsigned int used;
-+ unsigned int offset;
-+ restore_int(&used, d, off);
-+ if (! used) {
-+ return;
-+ }
-+
-+ *b = safe_malloc(sizeof(BUFFER));
-+
-+ restore_char(& (*b)->data, d, off);
-+ restore_int(& offset, d, off);
-+ (*b)->dptr = (*b)->data + offset;
-+ restore_int(& (*b)->dsize, d, off);
-+ restore_int((unsigned int *) & (*b)->destroy, d, off);
-+}
-+
-+static unsigned char *
-+dump_parameter(PARAMETER *p, unsigned char *d, int *off)
-+{
-+ unsigned int counter = 0;
-+ unsigned int start_off = *off;
-+
-+ d = dump_int(0xdeadbeef, d, off);
-+
-+ while (p) {
-+ d = dump_char(p->attribute, d, off);
-+ d = dump_char(p->value, d, off);
-+ p = p->next;
-+ counter++;
-+ }
-+
-+ memcpy(d + start_off, &counter, sizeof(int));
-+
-+ return d;
-+}
-+
-+static void
-+restore_parameter(PARAMETER **p, const unsigned char *d, int *off)
-+{
-+ unsigned int counter;
-+
-+ restore_int(&counter, d, off);
-+
-+ while (counter) {
-+ *p = safe_malloc(sizeof(PARAMETER));
-+ restore_char(&(*p)->attribute, d, off);
-+ restore_char(&(*p)->value, d, off);
-+ p = &(*p)->next;
-+ counter--;
-+ }
-+
-+ *p = NULL;
-+}
-+
-+static unsigned char *
-+dump_body(BODY *c, unsigned char *d, int *off)
-+{
-+ lazy_realloc(&d, *off + sizeof(BODY));
-+ memcpy(d + *off, c, sizeof(BODY));
-+ *off += sizeof(BODY);
-+
-+ d = dump_char(c->xtype, d, off);
-+ d = dump_char(c->subtype, d, off);
-+
-+ d = dump_parameter(c->parameter, d, off);
-+
-+ d = dump_char(c->description, d, off);
-+ d = dump_char(c->form_name, d, off);
-+ d = dump_char(c->filename, d, off);
-+ d = dump_char(c->d_filename, d, off);
-+
-+ return d;
-+}
-+
-+static void
-+restore_body(BODY *c, const unsigned char *d, int *off)
-+{
-+ memcpy(c, d + *off, sizeof(BODY));
-+ *off += sizeof(BODY);
-+
-+ restore_char(& c->xtype, d, off);
-+ restore_char(& c->subtype, d, off);
-+
-+ restore_parameter(& c->parameter, d, off);
-+
-+ restore_char(& c->description, d, off);
-+ restore_char(& c->form_name, d, off);
-+ restore_char(& c->filename, d, off);
-+ restore_char(& c->d_filename, d, off);
-+}
-+
-+static unsigned char *
-+dump_envelope(ENVELOPE *e, unsigned char *d, int *off)
-+{
-+ d = dump_address(e->return_path, d, off);
-+ d = dump_address(e->from, d, off);
-+ d = dump_address(e->to, d, off);
-+ d = dump_address(e->cc, d, off);
-+ d = dump_address(e->bcc, d, off);
-+ d = dump_address(e->sender, d, off);
-+ d = dump_address(e->reply_to, d, off);
-+ d = dump_address(e->mail_followup_to, d, off);
-+
-+ d = dump_char(e->subject, d, off);
-+ if (e->real_subj) {
-+ d = dump_int(e->real_subj - e->subject, d, off);
-+ } else {
-+ d = dump_int(-1, d, off);
-+ }
-+ d = dump_char(e->message_id, d, off);
-+ d = dump_char(e->supersedes, d, off);
-+ d = dump_char(e->date, d, off);
-+ d = dump_char(e->x_label, d, off);
-+
-+ d = dump_list(e->references, d, off);
-+ d = dump_list(e->in_reply_to, d, off);
-+ d = dump_list(e->userhdrs, d, off);
-+
-+ return d;
-+}
-+
-+static void
-+restore_envelope(ENVELOPE *e, const unsigned char *d, int *off)
-+{
-+ int real_subj_off;
-+
-+ restore_address(& e->return_path, d, off);
-+ restore_address(& e->from, d, off);
-+ restore_address(& e->to, d, off);
-+ restore_address(& e->cc, d, off);
-+ restore_address(& e->bcc, d, off);
-+ restore_address(& e->sender, d, off);
-+ restore_address(& e->reply_to, d, off);
-+ restore_address(& e->mail_followup_to, d, off);
-+
-+ restore_char(& e->subject, d, off);
-+ restore_int((unsigned int *) (& real_subj_off), d, off);
-+ if (0 <= real_subj_off) {
-+ e->real_subj = e->subject + real_subj_off;
-+ } else {
-+ e->real_subj = NULL;
-+ }
-+ restore_char(& e->message_id, d, off);
-+ restore_char(& e->supersedes, d, off);
-+ restore_char(& e->date, d, off);
-+ restore_char(& e->x_label, d, off);
-+
-+ restore_list(& e->references, d, off);
-+ restore_list(& e->in_reply_to, d, off);
-+ restore_list(& e->userhdrs, d, off);
-+}
-+
-+static
-+unsigned int crc32(unsigned int crc, unsigned char const *p, size_t len)
-+{
-+ int i;
-+ while (len--) {
-+ crc ^= *p++;
-+ for (i = 0; i < 8; i++)
-+ crc = (crc >> 1) ^ ((crc & 1) ? 0xedb88320 : 0);
-+ }
-+ return crc;
-+}
-+
-+static int
-+generate_crc32()
-+{
-+ int crc = 0;
-+
-+ crc = crc32(crc, (unsigned char const *) "sithglan@stud.uni-erlangen.de[sithglan]|hcache.c|20041108231548|29613", mutt_strlen("sithglan@stud.uni-erlangen.de[sithglan]|hcache.c|20041108231548|29613"));
-+
-+#if HAVE_LANGINFO_CODESET
-+ crc = crc32(crc, (unsigned char const *) Charset, mutt_strlen(Charset));
-+ crc = crc32(crc, (unsigned char const *) "HAVE_LANGINFO_CODESET", mutt_strlen("HAVE_LANGINFO_CODESET"));
-+#endif
-+
-+#if EXACT_ADDRESS
-+ crc = crc32(crc, (unsigned char const *) "EXACT_ADDRESS", mutt_strlen("EXACT_ADDRESS"));
-+#endif
-+
-+#ifdef USE_POP
-+ crc = crc32(crc, (unsigned char const *) "USE_POP", mutt_strlen("USE_POP"));
-+#endif
-+
-+#ifdef MIXMASTER
-+ crc = crc32(crc, (unsigned char const *) "MIXMASTER", mutt_strlen("MIXMASTER"));
-+#endif
-+
-+#ifdef USE_IMAP
-+ crc = crc32(crc, (unsigned char const *) "USE_IMAP", mutt_strlen("USE_IMAP"));
-+#endif
-+ return crc;
-+}
-+
-+static int
-+crc32_matches(const char *d, unsigned int crc)
-+{
-+ int off = sizeof(validate);
-+ unsigned int mycrc = 0;
-+
-+ if (! d) {
-+ return 0;
-+ }
-+
-+ restore_int(&mycrc, (unsigned char *) d, &off);
-+
-+ return (crc == mycrc);
-+}
-+
-+/* Append md5sumed folder to path if path is a directory. */
-+static const char *
-+mutt_hcache_per_folder(const char *path, const char *folder)
-+{
-+ static char mutt_hcache_per_folder_path[_POSIX_PATH_MAX];
-+ struct stat path_stat;
-+ MD5_CTX md5;
-+ unsigned char md5sum[16];
-+ int ret;
-+
-+ ret = stat(path, &path_stat);
-+ if (ret < 0) {
-+ return path;
-+ }
-+
-+ if (! S_ISDIR(path_stat.st_mode)) {
-+ return path;
-+ }
-+
-+ MD5Init(&md5);
-+ MD5Update(&md5, (unsigned char *) folder, strlen(folder));
-+ MD5Final(md5sum, &md5);
-+
-+ ret = snprintf(mutt_hcache_per_folder_path, _POSIX_PATH_MAX,
-+ "%s/%02x%02x%02x%02x%02x%02x%02x%02x"
-+ "%02x%02x%02x%02x%02x%02x%02x%02x",
-+ path, md5sum[0], md5sum[1], md5sum[2], md5sum[3],
-+ md5sum[4], md5sum[5], md5sum[6], md5sum[7], md5sum[8],
-+ md5sum[9], md5sum[10], md5sum[11], md5sum[12],
-+ md5sum[13], md5sum[14], md5sum[15]);
-+
-+ if (ret <= 0) {
-+ return path;
-+ }
-+
-+ return mutt_hcache_per_folder_path;
-+}
-+
-+/* This function transforms a header into a char so that it is useable by
-+ * db_store */
-+static void *
-+mutt_hcache_dump(void *_db, HEADER *h, int *off, unsigned long long uid_validity)
-+{
-+ struct header_cache *db = _db;
-+ unsigned char *d = NULL;
-+ *off = 0;
-+
-+ d = lazy_malloc(sizeof(validate));
-+
-+ if (uid_validity) {
-+ memcpy(d, &uid_validity, sizeof(long long));
-+ } else {
-+ struct timeval now;
-+ gettimeofday(&now, NULL);
-+ memcpy(d, &now, sizeof(struct timeval));
-+ }
-+ *off += sizeof(validate);
-+
-+ d = dump_int(db->crc, d, off);
-+
-+ lazy_realloc(&d, *off + sizeof(HEADER));
-+ memcpy(d + *off, h, sizeof(HEADER));
-+ *off += sizeof(HEADER);
-+
-+ d = dump_envelope(h->env, d, off);
-+ d = dump_body(h->content, d, off);
-+ d = dump_char(h->maildir_flags, d, off);
-+
-+ return d;
-+}
-+
-+HEADER *
-+mutt_hcache_restore(const unsigned char *d, HEADER **oh)
-+{
-+ int off = 0;
-+ HEADER *h = mutt_new_header();
-+
-+ /* skip validate */
-+ off += sizeof(validate);
-+
-+ /* skip crc */
-+ off += sizeof(unsigned int);
-+
-+ memcpy(h, d + off, sizeof(HEADER));
-+ off += sizeof(HEADER);
-+
-+ h->env = mutt_new_envelope();
-+ restore_envelope(h->env, d, &off);
-+
-+ h->content = mutt_new_body();
-+ restore_body(h->content, d, &off);
-+
-+ restore_char(&h->maildir_flags, d, &off);
-+
-+ /* this is needed for maildir style mailboxes */
-+ if (oh) {
-+ h->old = (*oh)->old;
-+ h->path = safe_strdup((*oh)->path);
-+ mutt_free_header (oh);
-+ }
-+
-+ return h;
-+}
-+
-+#if HAVE_GDBM
-+
-+void *
-+mutt_hcache_open(const char *path, const char *folder)
-+{
-+ struct header_cache *h = safe_calloc(1, sizeof(HEADER_CACHE));
-+ int pagesize = atoi(HeaderCachePageSize) ? atoi(HeaderCachePageSize) : 16384;
-+ h->db = NULL;
-+ h->folder = safe_strdup (folder);
-+ h->crc = generate_crc32();
-+
-+ if (! path || path[0] == '\0') {
-+ FREE(& h->folder);
-+ FREE(& h);
-+ return NULL;
-+ }
-+
-+ path = mutt_hcache_per_folder(path, folder);
-+
-+ h->db = gdbm_open((char *) path, pagesize, GDBM_WRCREAT, 00600, NULL);
-+ if (h->db) {
-+ return h;
-+ }
-+
-+ /* if rw failed try ro */
-+ h->db = gdbm_open((char *) path, pagesize, GDBM_READER, 00600, NULL);
-+ if(h->db) {
-+ return h;
-+ } else {
-+ FREE(& h->folder);
-+ FREE(& h);
-+
-+ return NULL;
-+ }
-+}
-+
-+void
-+mutt_hcache_close(void *db)
-+{
-+ struct header_cache *h = db;
-+
-+ if (! h) {
-+ return;
-+ }
-+
-+ gdbm_close(h->db);
-+ FREE(& h->folder);
-+ FREE(& h);
-+}
-+
-+void *
-+mutt_hcache_fetch(void *db, const char *filename, size_t (*keylen)(const char *fn))
-+{
-+ struct header_cache *h = db;
-+ datum key;
-+ datum data;
-+ char path[_POSIX_PATH_MAX];
-+
-+ if (! h) {
-+ return NULL;
-+ }
-+
-+ strncpy(path, h->folder, sizeof(path));
-+ strncat(path, filename, sizeof(path) - mutt_strlen(path));
-+
-+ key.dptr = path;
-+ key.dsize = keylen(path);
-+
-+ data = gdbm_fetch(h->db, key);
-+
-+ if (! crc32_matches(data.dptr, h->crc)) {
-+ free(data.dptr);
-+ return NULL;
-+ }
-+
-+ return data.dptr;
-+}
-+
-+int
-+mutt_hcache_store(void *db, const char *filename, HEADER *header, unsigned long long uid_validity, size_t (*keylen)(const char *fn))
-+{
-+ struct header_cache *h = db;
-+ datum key;
-+ datum data;
-+ char path[_POSIX_PATH_MAX];
-+ int ret;
-+
-+ if (! h) {
-+ return -1;
-+ }
-+
-+ strncpy(path, h->folder, sizeof(path));
-+ strncat(path, filename, sizeof(path) - mutt_strlen(path));
-+
-+ key.dptr = path;
-+ key.dsize = keylen(path);
-+
-+ data.dptr = mutt_hcache_dump(db, header, &data.dsize, uid_validity);
-+
-+ ret = gdbm_store(h->db, key, data, GDBM_REPLACE);
-+
-+ FREE(& data.dptr);
-+
-+ return ret;
-+}
-+
-+int
-+mutt_hcache_delete(void *db, const char *filename, size_t (*keylen)(const char *fn))
-+{
-+ datum key;
-+ struct header_cache *h = db;
-+ char path[_POSIX_PATH_MAX];
-+
-+ if (! h) {
-+ return -1;
-+ }
-+
-+ strncpy(path, h->folder, sizeof(path));
-+ strncat(path, filename, sizeof(path) - mutt_strlen(path));
-+
-+ key.dptr = path;
-+ key.dsize = keylen(path);
-+
-+ return gdbm_delete(h->db, key);
-+}
-+#elif HAVE_DB4
-+
-+static void
-+mutt_hcache_dbt_init(DBT *dbt, void *data, size_t len)
-+{
-+ dbt->data = data;
-+ dbt->size = dbt->ulen = len;
-+ dbt->dlen = dbt->doff = 0;
-+ dbt->flags = DB_DBT_USERMEM;
-+}
-+
-+static void
-+mutt_hcache_dbt_empty_init(DBT *dbt)
-+{
-+ dbt->data = NULL;
-+ dbt->size = dbt->ulen = dbt->dlen = dbt->doff = 0;
-+ dbt->flags = 0;
-+}
-+
-+void *
-+mutt_hcache_open(const char *path, const char *folder)
-+{
-+ struct stat sb;
-+ u_int32_t createflags = DB_CREATE;
-+ int ret;
-+ struct header_cache *h = calloc(1, sizeof(HEADER_CACHE));
-+ int pagesize = atoi(HeaderCachePageSize);
-+
-+
-+ h->crc = generate_crc32();
-+
-+ if (! path || path[0] == '\0') {
-+ FREE(& h);
-+ return NULL;
-+ }
-+
-+ path = mutt_hcache_per_folder(path, folder);
-+
-+ snprintf (h->lockfile, _POSIX_PATH_MAX, "%s-lock-hack", path);
-+
-+ h->fd = open(h->lockfile, O_WRONLY | O_CREAT, S_IRUSR | S_IWUSR);
-+ if (h->fd < 0) {
-+ FREE (&h);
-+ return NULL;
-+ }
-+
-+ if (mx_lock_file(h->lockfile, h->fd, 1, 0, 5)) {
-+ close(h->fd);
-+ FREE (&h);
-+ return NULL;
-+ }
-+
-+ ret = db_env_create(&h->env, 0);
-+ if (ret) {
-+ mx_unlock_file(h->lockfile, h->fd, 0);
-+ close(h->fd);
-+ FREE(& h);
-+ return NULL;
-+ }
-+
-+ ret = h->env->open(h->env, NULL, DB_INIT_MPOOL | DB_CREATE | DB_PRIVATE, 0600);
-+ if (! ret) {
-+ ret = db_create(&h->db, h->env, 0);
-+ if (ret) {
-+ h->env->close(h->env, 0);
-+ mx_unlock_file(h->lockfile, h->fd, 0);
-+ close(h->fd);
-+ FREE(& h);
-+ return NULL;
-+ }
-+ }
-+
-+ if (stat(path, &sb) != 0 && errno == ENOENT) {
-+ createflags |= DB_EXCL;
-+ h->db->set_pagesize(h->db, pagesize);
-+ }
-+
-+ ret = h->db->open(h->db, NULL, path, folder, DB_BTREE, createflags, 0600);
-+ if (ret) {
-+ h->db->close(h->db, 0);
-+ h->env->close(h->env, 0);
-+ mx_unlock_file(h->lockfile, h->fd, 0);
-+ close(h->fd);
-+ FREE(& h);
-+ return NULL;
-+ }
-+
-+ return h;
-+}
-+
-+void
-+mutt_hcache_close(void *db)
-+{
-+ struct header_cache *h = db;
-+ int ret;
-+
-+ if (! h) {
-+ return;
-+ }
-+
-+ h->db->close(h->db, 0);
-+ h->env->close(h->env, 0);
-+ mx_unlock_file(h->lockfile, h->fd, 0);
-+ close(h->fd);
-+ FREE(& h);
-+}
-+
-+void *
-+mutt_hcache_fetch(void *db, const char *filename, size_t (*keylen)(const char *fn))
-+{
-+ DBT key;
-+ DBT data;
-+ struct header_cache *h = db;
-+
-+ if (! h) {
-+ return NULL;
-+ }
-+
-+ filename++; /* skip '/' */
-+
-+ mutt_hcache_dbt_init(&key, (void *) filename, keylen(filename));
-+ mutt_hcache_dbt_empty_init(&data);
-+ data.flags = DB_DBT_MALLOC;
-+
-+ h->db->get(h->db, NULL, &key, &data, 0);
-+
-+ if (! crc32_matches(data.data, h->crc)) {
-+ free(data.data);
-+ return NULL;
-+ }
-+
-+ return data.data;
-+}
-+
-+int
-+mutt_hcache_store(void *db, const char *filename, HEADER *header, unsigned long long uid_validity, size_t (*keylen)(const char *fn))
-+{
-+ DBT key;
-+ DBT data;
-+ int ret;
-+ struct header_cache *h = db;
-+
-+ if (! h) {
-+ return -1;
-+ }
-+
-+ filename++; /* skip '/' */
-+
-+ mutt_hcache_dbt_init(&key, (void *) filename, keylen(filename));
-+
-+ mutt_hcache_dbt_empty_init(&data);
-+ data.flags = DB_DBT_USERMEM;
-+ data.data = mutt_hcache_dump(db, header, (signed int *) &data.size, uid_validity);
-+ data.ulen = data.size;
-+
-+ ret = h->db->put(h->db, NULL, &key, &data, 0);
-+
-+ FREE(& data.data);
-+
-+ return ret;
-+}
-+
-+int
-+mutt_hcache_delete(void *db, const char *filename, size_t (*keylen)(const char *fn))
-+{
-+ DBT key;
-+ struct header_cache *h = db;
-+
-+ if (! h) {
-+ return -1;
-+ }
-+
-+ filename++; /* skip '/' */
-+
-+ mutt_hcache_dbt_init(&key, (void *) filename, keylen(filename));
-+ return h->db->del(h->db, NULL, &key, 0);
-+}
-+#endif
-diff -Nru a/imap/imap.c b/imap/imap.c
---- a/imap/imap.c 2004-08-18 09:43:27 +02:00
-+++ b/imap/imap.c 2004-08-17 00:34:10 +02:00
-@@ -602,6 +602,17 @@
- if ((pc = imap_get_flags (&(idata->flags), pc)) == NULL)
- goto fail;
- }
-+#ifdef USE_HCACHE
-+ /* save UIDVALIDITY for the header cache */
-+ else if (ascii_strncasecmp("OK [UIDVALIDITY", pc, 14) == 0)
-+ {
-+ dprint(2, (debugfile, "Getting mailbox UIDVALIDITY\n"));
-+ pc += 3;
-+ pc = imap_next_word(pc);
-+
-+ sscanf(pc, "%u", &(idata->uid_validity));
-+ }
-+#endif
- else
- {
- pc = imap_next_word (pc);
-diff -Nru a/imap/imap_private.h b/imap/imap_private.h
---- a/imap/imap_private.h 2004-08-18 09:43:27 +02:00
-+++ b/imap/imap_private.h 2004-07-24 12:39:31 +02:00
-@@ -179,6 +179,9 @@
- unsigned int newMailCount;
- IMAP_CACHE cache[IMAP_CACHE_LEN];
- int noclose : 1;
-+#ifdef USE_HCACHE
-+ unsigned long long uid_validity;
-+#endif
-
- /* all folder flags - system flags AND keywords */
- LIST *flags;
-diff -Nru a/imap/message.c b/imap/message.c
---- a/imap/message.c 2004-08-18 09:43:27 +02:00
-+++ b/imap/message.c 2004-08-06 02:09:41 +02:00
-@@ -39,6 +39,12 @@
- static int msg_parse_fetch (IMAP_HEADER* h, char* s);
- static char* msg_parse_flags (IMAP_HEADER* h, char* s);
-
-+#if USE_HCACHE
-+static int msg_fetch_header_fetch (CONTEXT* ctx, IMAP_HEADER* h, char* buf,
-+ FILE* fp);
-+static size_t imap_hcache_keylen (const char *fn);
-+#endif /* USE_HCACHE */
-+
- /* imap_read_headers:
- * Changed to read many headers instead of just one. It will return the
- * msgno of the last message read. It will return a value other than
-@@ -57,8 +63,18 @@
- int fetchlast = 0;
- const char *want_headers = "DATE FROM SUBJECT TO CC MESSAGE-ID REFERENCES CONTENT-TYPE IN-REPLY-TO REPLY-TO LINES X-LABEL";
-
-+#if USE_HCACHE
-+ void *hc = NULL;
-+ unsigned long long *uid_validity = NULL;
-+ char uid_buf[64];
-+#endif /* USE_HCACHE */
-+
- ctx = idata->ctx;
-
-+#if USE_HCACHE
-+ hc = mutt_hcache_open (HeaderCache, ctx->path);
-+#endif /* USE_HCACHE */
-+
- if (mutt_bit_isset (idata->capabilities,IMAP4REV1))
- {
- snprintf (hdrreq, sizeof (hdrreq), "BODY.PEEK[HEADER.FIELDS (%s)]",
-@@ -73,6 +89,9 @@
- { /* Unable to fetch headers for lower versions */
- mutt_error _("Unable to fetch headers from this IMAP server version.");
- mutt_sleep (2); /* pause a moment to let the user see the error */
-+#if USE_HCACHE
-+ mutt_hcache_close (hc);
-+#endif /* USE_HCACHE */
- return -1;
- }
-
-@@ -83,6 +102,9 @@
- {
- mutt_error (_("Could not create temporary file %s"), tempfile);
- mutt_sleep (2);
-+#if USE_HCACHE
-+ mutt_hcache_close (hc);
-+#endif /* USE_HCACHE */
- return -1;
- }
- unlink (tempfile);
-@@ -95,14 +117,88 @@
- idata->reopen &= ~IMAP_NEWMAIL_PENDING;
- idata->newMailCount = 0;
-
-+#if USE_HCACHE
-+ snprintf (buf, sizeof (buf),
-+ "FETCH %d:%d (UID FLAGS)", msgbegin + 1, msgend + 1);
-+ fetchlast = msgend + 1;
-+
-+ imap_cmd_start (idata, buf);
-+
-+ for (msgno = msgbegin; msgno <= msgend ; msgno++)
-+ {
-+ if (ReadInc && (!msgno || ((msgno+1) % ReadInc == 0)))
-+ mutt_message (_("Evaluating cache... [%d/%d]"), msgno + 1,
-+ msgend + 1);
-+
-+ rewind (fp);
-+ memset (&h, 0, sizeof (h));
-+ h.data = safe_calloc (1, sizeof (IMAP_HEADER_DATA));
-+ do
-+ {
-+ mfhrc = 0;
-+
-+ rc = imap_cmd_step (idata);
-+ if (rc != IMAP_CMD_CONTINUE)
-+ break;
-+
-+ if ((mfhrc = msg_fetch_header_fetch (idata->ctx, &h, idata->cmd.buf, fp)) == -1)
-+ continue;
-+ else if (mfhrc < 0)
-+ break;
-+
-+ /* make sure we don't get remnants from older larger message headers */
-+ fputs ("\n\n", fp);
-+
-+ sprintf(uid_buf, "/%u", h.data->uid); /* XXX --tg 21:41 04-07-11 */
-+ uid_validity = (unsigned long long *) mutt_hcache_fetch (hc, uid_buf, &imap_hcache_keylen);
-+
-+ if (uid_validity != NULL
-+ && *uid_validity == idata->uid_validity) {
-+ ctx->hdrs[msgno] = mutt_hcache_restore((unsigned char *) uid_validity, 0);
-+ ctx->hdrs[msgno]->index = h.sid - 1;
-+ if (h.sid != ctx->msgcount + 1)
-+ dprint (1, (debugfile, "imap_read_headers: msgcount and sequence ID are inconsistent!"));
-+ /* messages which have not been expunged are ACTIVE (borrowed from mh
-+ * folders) */
-+ ctx->hdrs[msgno]->active = 1;
-+ ctx->hdrs[msgno]->read = h.read;
-+ ctx->hdrs[msgno]->old = h.old;
-+ ctx->hdrs[msgno]->deleted = h.deleted;
-+ ctx->hdrs[msgno]->flagged = h.flagged;
-+ ctx->hdrs[msgno]->replied = h.replied;
-+ ctx->hdrs[msgno]->changed = h.changed;
-+ /* ctx->hdrs[msgno]->received is restored from mutt_hcache_restore */
-+ ctx->hdrs[msgno]->data = (void *) (h.data);
-+
-+ ctx->msgcount++;
-+ }
-+ rewind (fp);
-+
-+ FREE(&uid_validity);
-+
-+ }
-+ while ((rc != IMAP_CMD_OK) && ((mfhrc == -1) ||
-+ ((msgno + 1) >= fetchlast)));
-+ }
-+
-+ fetchlast = msgbegin;
-+#endif /* USE_HCACHE */
-+
- for (msgno = msgbegin; msgno <= msgend ; msgno++)
- {
- if (ReadInc && (!msgno || ((msgno+1) % ReadInc == 0)))
- mutt_message (_("Fetching message headers... [%d/%d]"), msgno + 1,
- msgend + 1);
+--- a/hcache.c 2005-02-03 21:24:02 +01:00
++++ b/hcache.c 2005-02-03 21:49:22 +01:00
+@@ -662,7 +662,7 @@
+ safe_strcat (path, sizeof (path), filename);
-+ if (ctx->hdrs[msgno])
-+ continue;
-+
- if (msgno + 1 > fetchlast)
- {
-+ fetchlast = msgno + 1;
-+ while((fetchlast <= msgend) && (! ctx->hdrs[fetchlast]))
-+ fetchlast++;
-+
- /*
- * Make one request for everything. This makes fetching headers an
- * order of magnitude faster if you have a large mailbox.
-@@ -112,11 +208,9 @@
- */
- snprintf (buf, sizeof (buf),
- "FETCH %d:%d (UID FLAGS INTERNALDATE RFC822.SIZE %s)", msgno + 1,
-- msgend + 1, hdrreq);
-+ fetchlast, hdrreq);
+ key.dptr = path;
+- key.dsize = keylen(path);
++ key.dsize = strlen(h->folder) + keylen(path + strlen(h->folder));
- imap_cmd_start (idata, buf);
--
-- fetchlast = msgend + 1;
- }
+ data = gdbm_fetch(h->db, key);
- /* freshen fp, h */
-@@ -170,6 +264,11 @@
- /* content built as a side-effect of mutt_read_rfc822_header */
- ctx->hdrs[msgno]->content->length = h.content_length;
+@@ -691,7 +691,7 @@
+ safe_strcat (path, sizeof (path), filename);
-+#if USE_HCACHE
-+ sprintf(uid_buf, "/%u", h.data->uid);
-+ mutt_hcache_store(hc, uid_buf, ctx->hdrs[msgno], idata->uid_validity, &imap_hcache_keylen);
-+#endif /* USE_HCACHE */
-+
- ctx->msgcount++;
- }
- while ((rc != IMAP_CMD_OK) && ((mfhrc == -1) ||
-@@ -179,7 +278,9 @@
- {
- imap_free_header_data ((void**) &h.data);
- fclose (fp);
--
-+#if USE_HCACHE
-+ mutt_hcache_close (hc);
-+#endif /* USE_HCACHE */
- return -1;
- }
-
-@@ -194,6 +295,10 @@
- }
- }
+ key.dptr = path;
+- key.dsize = keylen(path);
++ key.dsize = strlen(h->folder) + keylen(path + strlen(h->folder));
-+#if USE_HCACHE
-+ mutt_hcache_close (hc);
-+#endif /* USE_HCACHE */
-+
- fclose(fp);
+ data.dptr = mutt_hcache_dump(db, header, &data.dsize, uid_validity);
- if (ctx->msgcount > oldmsgcount)
-@@ -724,6 +829,7 @@
- return s;
- }
+@@ -717,7 +717,7 @@
+ safe_strcat (path, sizeof (path), filename);
-+
- /* msg_fetch_header: import IMAP FETCH response into an IMAP_HEADER.
- * Expects string beginning with * n FETCH.
- * Returns:
-@@ -782,6 +888,56 @@
+ key.dptr = path;
+- key.dsize = keylen(path);
++ key.dsize = strlen(h->folder) + keylen(path + strlen(h->folder));
- return rc;
+ return gdbm_delete(h->db, key);
}
-+
-+#if USE_HCACHE
-+static size_t imap_hcache_keylen (const char *fn)
-+{
-+ return mutt_strlen(fn);
-+}
-+
-+/* msg_fetch_header: import IMAP FETCH response into an IMAP_HEADER.
-+ * Expects string beginning with * n FETCH.
-+ * Returns:
-+ * 0 on success
-+ * -1 if the string is not a fetch response
-+ * -2 if the string is a corrupt fetch response */
-+static int msg_fetch_header_fetch (CONTEXT* ctx, IMAP_HEADER* h, char* buf, FILE* fp)
-+{
-+ IMAP_DATA* idata;
-+ long bytes;
-+ int rc = -1; /* default now is that string isn't FETCH response*/
-+
-+ idata = (IMAP_DATA*) ctx->data;
-+
-+ if (buf[0] != '*')
-+ return rc;
-+
-+ /* skip to message number */
-+ buf = imap_next_word (buf);
-+ h->sid = atoi (buf);
-+
-+ /* find FETCH tag */
-+ buf = imap_next_word (buf);
-+ if (ascii_strncasecmp ("FETCH", buf, 5))
-+ return rc;
-+
-+ rc = -2; /* we've got a FETCH response, for better or worse */
-+ if (!(buf = strchr (buf, '(')))
-+ return rc;
-+ buf++;
-+
-+ if (msg_parse_fetch (h, buf) < 0) {
-+ return -2;
-+ }
-+
-+ if (!(buf = strchr (buf, ')')))
-+ return rc;
-+ buf++;
-+
-+ return 0;
-+}
-+#endif /* USE_HCACHE */
-+
-
- /* msg_has_flag: do a caseless comparison of the flag against a flag list,
- * return 1 if found or flag list has '\*', 0 otherwise */
diff -Nru a/init.h b/init.h
---- a/init.h 2004-08-18 09:43:12 +02:00
-+++ b/init.h 2004-09-20 22:58:42 +02:00
-@@ -981,6 +981,34 @@
- ** \fBDON'T CHANGE THIS SETTING UNLESS YOU ARE REALLY SURE WHAT YOU ARE
- ** DOING!\fP
+--- a/init.h 2005-01-27 19:54:12 +01:00
++++ b/init.h 2005-02-03 21:33:16 +01:00
+@@ -1032,6 +1032,13 @@
+ ** global header cache for all folders is used. Per default it is unset and so
+ ** no header caching will be used.
*/
-+#if USE_HCACHE
-+
-+ { "header_cache", DT_PATH, R_NONE, UL &HeaderCache, 0 },
-+ /*
-+ ** .pp
-+ ** The header_cache variable points to the header cache database. If
-+ ** header_cache points to a directory there will be created one header cache
-+ ** database per folder within this directory. If it doesn't point to a directory a
-+ ** global header cache for all folders is used. Per default it is unset and so
-+ ** no header caching will be used.
-+ */
+ { "maildir_header_cache_verify", DT_BOOL, R_NONE, OPTHCACHEVERIFY, 1 },
+ /*
+ ** .pp
@@ -1328,51 +47,28 @@ diff -Nru a/init.h b/init.h
+ ** files when the header cache is in use. This incurs one stat(2) per
+ ** message every time the folder is opened.
+ */
-+ { "header_cache_pagesize", DT_STR, R_NONE, UL &HeaderCachePageSize, UL "16384" },
-+ /*
-+ ** .pp
-+ ** Change the maildir header cache database page size. Too large
-+ ** or too small of a page size for the common header can waste
-+ ** space, memory effectiveness, or CPU time. The default should be more or
-+ ** less the best you can get. For details google after mutt maildir header
-+ ** cache (first hit).
-+ */
-+#endif /* USE_HCACHE */
- { "maildir_trash", DT_BOOL, R_NONE, OPTMAILDIRTRASH, 0 },
+ { "header_cache_pagesize", DT_STR, R_NONE, UL &HeaderCachePageSize, UL "16384" },
/*
** .pp
-diff -Nru a/main.c b/main.c
---- a/main.c 2004-08-18 09:43:12 +02:00
-+++ b/main.c 2004-07-24 12:39:30 +02:00
-@@ -411,6 +411,12 @@
- "-HAVE_GETADDRINFO "
- #endif
-
-+#if USE_HCACHE
-+ "+USE_HCACHE "
-+#else
-+ "-USE_HCACHE "
-+#endif
-+
- );
-
- #ifdef ISPELL
diff -Nru a/mh.c b/mh.c
---- a/mh.c 2004-08-18 09:43:13 +02:00
-+++ b/mh.c 2004-09-03 14:33:12 +02:00
-@@ -779,30 +779,79 @@
+--- a/mh.c 2005-01-27 19:48:04 +01:00
++++ b/mh.c 2005-02-03 21:35:59 +01:00
+@@ -787,6 +787,14 @@
return r;
}
+#if USE_HCACHE
+static size_t maildir_hcache_keylen (const char *fn)
+{
-+ const char * p = strchr (fn, ':');
++ const char * p = strrchr (fn, ':');
+ return p ? (size_t) (p - fn) : mutt_strlen(fn);
+}
+#endif
-
- /*
++
+ #ifdef USE_INODESORT
+ /*
+ * Merge two maildir lists according to the inode numbers.
+@@ -882,27 +890,67 @@
* This function does the second parsing pass for a maildir-style
* folder.
*/
@@ -1381,21 +77,11 @@ diff -Nru a/mh.c b/mh.c
{
struct maildir *p;
char fn[_POSIX_PATH_MAX];
-+ int count;
+ int count;
-- for (p = md; p; p = p->next)
-- if (p && p->h && !p->header_parsed)
-- {
-- snprintf (fn, sizeof (fn), "%s/%s", ctx->path, p->h->path);
-- if (maildir_parse_message (ctx->magic, fn, p->h->old, p->h))
-- p->header_parsed = 1;
-- else
-- mutt_free_header (&p->h);
-- }
+#if USE_HCACHE
+ void *hc = NULL;
+ void *data;
-+ unsigned int size;
+ struct timeval *when = NULL;
+ struct stat lastchanged;
+ int ret;
@@ -1403,26 +89,40 @@ diff -Nru a/mh.c b/mh.c
+ hc = mutt_hcache_open (HeaderCache, ctx->path);
+#endif
+
-+ for (p = md, count = 0; p; p = p->next, count++)
+ for (p = md, count = 0; p; p = p->next, count++)
+- if (p && p->h && !p->header_parsed)
+- {
+- if (!ctx->quiet && ReadInc && ((count % ReadInc) == 0 || count == 1))
+- mutt_message (_("Reading %s... %d"), ctx->path, count);
+- snprintf (fn, sizeof (fn), "%s/%s", ctx->path, p->h->path);
+- if (maildir_parse_message (ctx->magic, fn, p->h->old, p->h))
+- p->header_parsed = 1;
+- else
+- mutt_free_header (&p->h);
+- }
+-}
+ {
+ if (! (p && p->h && !p->header_parsed))
-+ continue;
-+
++ continue;
+
++ if (!ctx->quiet && ReadInc && ((count % ReadInc) == 0 || count == 1))
++ mutt_message (_("Reading %s... %d"), ctx->path, count);
+
+#if USE_HCACHE
-+ data = mutt_hcache_fetch (hc, p->h->path + 3, &maildir_hcache_keylen);
-+ when = (struct timeval *) data;
++ data = mutt_hcache_fetch (hc, p->h->path + 3, &maildir_hcache_keylen);
++ when = (struct timeval *) data;
+#endif
+
+ snprintf (fn, sizeof (fn), "%s/%s", ctx->path, p->h->path);
+
+#if USE_HCACHE
-+ if (option(OPTHCACHEVERIFY)) {
++ if (option(OPTHCACHEVERIFY))
+ ret = stat(fn, &lastchanged);
-+ } else {
++ 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);
@@ -1432,7 +132,6 @@ diff -Nru a/mh.c b/mh.c
+ if (maildir_parse_message (ctx->magic, fn, p->h->old, p->h))
+ {
+ p->header_parsed = 1;
-+ maildir_parse_flags (p->h, fn);
+#if USE_HCACHE
+ mutt_hcache_store (hc, p->h->path + 3, p->h, 0, &maildir_hcache_keylen);
+#endif
@@ -1445,14 +144,11 @@ diff -Nru a/mh.c b/mh.c
+#if USE_HCACHE
+ mutt_hcache_close (hc);
+#endif
- }
++}
--
--
/* Read a MH/maildir style mailbox.
*
- * args:
-@@ -1293,6 +1342,9 @@
+@@ -1399,6 +1447,9 @@
{
char path[_POSIX_PATH_MAX], tmp[_POSIX_PATH_MAX];
int i, j;
@@ -1462,7 +158,7 @@ diff -Nru a/mh.c b/mh.c
if (ctx->magic == M_MH)
i = mh_check_mailbox (ctx, index_hint);
-@@ -1302,6 +1354,11 @@
+@@ -1408,6 +1459,11 @@
if (i != 0)
return i;
@@ -1474,7 +170,7 @@ diff -Nru a/mh.c b/mh.c
for (i = 0; i < ctx->msgcount; i++)
{
if (ctx->hdrs[i]->deleted
-@@ -1310,7 +1367,13 @@
+@@ -1416,7 +1472,13 @@
snprintf (path, sizeof (path), "%s/%s", ctx->path, ctx->hdrs[i]->path);
if (ctx->magic == M_MAILDIR
|| (option (OPTMHPURGE) && ctx->magic == M_MH))
@@ -1488,7 +184,7 @@ diff -Nru a/mh.c b/mh.c
else if (ctx->magic == M_MH)
{
/* MH just moves files out of the way when you delete them */
-@@ -1332,16 +1395,21 @@
+@@ -1438,16 +1500,21 @@
if (ctx->magic == M_MAILDIR)
{
if (maildir_sync_message (ctx, i) == -1)
@@ -1512,7 +208,7 @@ diff -Nru a/mh.c b/mh.c
if (ctx->magic == M_MH)
mh_update_sequences (ctx);
-@@ -1362,6 +1430,13 @@
+@@ -1468,6 +1535,13 @@
}
return 0;
@@ -1527,9 +223,9 @@ diff -Nru a/mh.c b/mh.c
static char *maildir_canon_filename (char *dest, const char *src, size_t l)
diff -Nru a/mutt.h b/mutt.h
---- a/mutt.h 2004-08-18 09:43:13 +02:00
-+++ b/mutt.h 2004-07-24 12:39:30 +02:00
-@@ -345,6 +345,9 @@
+--- a/mutt.h 2005-01-27 19:53:51 +01:00
++++ b/mutt.h 2005-02-03 21:32:14 +01:00
+@@ -353,6 +353,9 @@
OPTFORCENAME,
OPTFORWDECODE,
OPTFORWQUOTE,
@@ -1539,23 +235,3 @@ diff -Nru a/mutt.h b/mutt.h
OPTHDRS,
OPTHEADER,
OPTHELP,
-diff -Nru a/protos.h b/protos.h
---- a/protos.h 2004-08-18 09:43:16 +02:00
-+++ b/protos.h 2004-08-09 08:05:48 +02:00
-@@ -99,6 +99,16 @@
- ENVELOPE *mutt_read_rfc822_header (FILE *, HEADER *, short, short);
- HEADER *mutt_dup_header (HEADER *);
-
-+#if USE_HCACHE
-+void *mutt_hcache_open(const char *path, const char *folder);
-+void mutt_hcache_close(void *db);
-+HEADER *mutt_hcache_restore(const unsigned char *d, HEADER **oh);
-+void *mutt_hcache_fetch(void *db, const char *filename, size_t (*keylen)(const char *fn));
-+int mutt_hcache_store(void *db, const char *filename, HEADER *h, unsigned long long uid_validity, size_t (*keylen)(const char *fn));
-+int mutt_hcache_delete(void *db, const char *filename, size_t (*keylen)(const char *fn));
-+#endif /* USE_HCACHE */
-+
-+
- ATTACHPTR **mutt_gen_attach_list (BODY *, int, ATTACHPTR **, short *, short *, int, int);
-
- time_t mutt_decrease_mtime (const char *, struct stat *);
diff --git a/mail/mutt-devel/files/extra-patch-maildir-mtime b/mail/mutt-devel/files/extra-patch-maildir-mtime
index f93fd5f87d59..09884c69b28b 100644
--- a/mail/mutt-devel/files/extra-patch-maildir-mtime
+++ b/mail/mutt-devel/files/extra-patch-maildir-mtime
@@ -1,7 +1,7 @@
--- PATCHES Dec 2002 17:44:54 -0000 3.6
+++ PATCHES Feb 2004 13:19:42 -0000
@@ -0,0 +1 @@
-+patch-1.5.6.dw.maildir-mtime.1
++patch-1.5.7.ust.maildir-mtime.1
--- browser.c Sep 2003 13:03:25 -0000 3.9
+++ browser.c Feb 2004 13:19:42 -0000
@@ -29,2 +29,3 @@
@@ -42,21 +42,49 @@
- add_folder (menu, state, buffer, &s, tmp->new);
+ add_folder (menu, state, buffer, &s, tmp);
}
---- buffy.c Feb 2004 17:50:43 -0000 3.9
-+++ buffy.c Feb 2004 13:19:42 -0000
-@@ -229,2 +229,3 @@ int mutt_parse_mailboxes (BUFFER *path,
+--- buffy.c.orig Sat Oct 30 23:40:07 2004
++++ buffy.c Sat Feb 5 13:57:07 2005
+@@ -227,6 +227,7 @@
+ (*tmp)->new = 0;
+ (*tmp)->notified = 1;
(*tmp)->newly_created = 0;
+ (*tmp)->mtime = 0;
-@@ -260,2 +261,3 @@ int mutt_buffy_check (int force)
+ #ifdef BUFFY_SIZE
+ /* for buffy_size, it is important that if the folder is new (tested by
+@@ -258,6 +259,7 @@
+ {
+ BUFFY *tmp;
struct stat sb;
+ struct stat smd;
struct dirent *de;
-@@ -299,2 +301,3 @@ int mutt_buffy_check (int force)
+ DIR *dirp;
+ char path[_POSIX_PATH_MAX];
+@@ -297,6 +299,7 @@
+ for (tmp = Incoming; tmp; tmp = tmp->next)
+ {
tmp->new = 0;
+ tmp->mtime = 0;
-@@ -383,6 +386,13 @@ int mutt_buffy_check (int force)
+ #ifdef USE_IMAP
+ if (mx_is_imap (tmp->path))
+@@ -370,21 +373,31 @@
+ case M_MAILDIR:
+
+ snprintf (path, sizeof (path), "%s/new", tmp->path);
++ stat (path, &smd);
++ tmp->mtime = smd.st_mtime;
+ if ((dirp = opendir (path)) == NULL)
+ {
+ tmp->magic = 0;
+ break;
+ }
++
+ while ((de = readdir (dirp)) != NULL)
+ {
+ char *p;
+ if (*de->d_name != '.' &&
+ (!(p = strstr (de->d_name, ":2,")) || !strchr (p + 3, 'T')))
{
- /* one new and undeleted message is enough */
- BuffyCount++;
@@ -74,6 +102,21 @@
+ tmp->mtime = smd.st_mtime;
+ }
}
+ }
+ closedir (dirp);
+@@ -414,6 +427,12 @@
+ #ifdef BUFFY_SIZE
+ else if (Context && Context->path)
+ tmp->size = (long) sb.st_size; /* update the size */
++#else
++ else if(tmp->magic == M_MAILDIR) {
++ snprintf (path, sizeof (path), "%s/new", tmp->path);
++ stat (path, &smd);
++ tmp->mtime = smd.st_mtime;
++ }
+ #endif
+
+ if (!tmp->new)
--- buffy.h Dec 2002 11:19:39 -0000 3.2
+++ buffy.h Feb 2004 13:19:42 -0000
@@ -29,2 +29,3 @@ typedef struct buffy_t
diff --git a/mail/mutt-devel/files/extra-patch-maildir-mtime-nntp b/mail/mutt-devel/files/extra-patch-maildir-mtime-nntp
index 3f7c00659da3..68a5a0911e3c 100644
--- a/mail/mutt-devel/files/extra-patch-maildir-mtime-nntp
+++ b/mail/mutt-devel/files/extra-patch-maildir-mtime-nntp
@@ -1,9 +1,9 @@
--- PATCHES Dec 2002 17:44:54 -0000 3.6
+++ PATCHES Feb 2004 13:19:42 -0000
@@ -0,0 +1 @@
-+patch-1.5.6.dw.maildir-mtime.1
---- browser.c.orig Mon Aug 2 18:54:46 2004
-+++ browser.c Mon Aug 2 19:00:01 2004
++patch-1.5.7.ust.maildir-mtime.1
+--- browser.c.orig Sat Feb 5 23:45:00 2005
++++ browser.c Sat Feb 5 23:47:50 2005
@@ -30,6 +30,7 @@
#ifdef USE_NNTP
#include "nntp.h"
@@ -58,44 +58,44 @@
{
if ((data = (NNTP_DATA *) tmp->data) != NULL && (data->new ||
(data->subscribed && (!option (OPTSHOWONLYUNREAD) || data->unread))))
-- add_folder (menu, state, data->group, NULL, data, data->new);
-+ add_folder (menu, state, data->group, NULL, data, tmp);
+- add_folder (menu, state, data->group, NULL, data, data->new);
++ add_folder (menu, state, data->group, NULL, data, tmp);
}
}
else
@@ -608,21 +614,21 @@
#ifdef USE_IMAP
- if (mx_is_imap (tmp->path))
- {
-- add_folder (menu, state, tmp->path, NULL, NULL, tmp->new);
-+ add_folder (menu, state, tmp->path, NULL, NULL, tmp);
- continue;
- }
+ if (mx_is_imap (tmp->path))
+ {
+- add_folder (menu, state, tmp->path, NULL, NULL, tmp->new);
++ add_folder (menu, state, tmp->path, NULL, NULL, tmp);
+ continue;
+ }
#endif
#ifdef USE_POP
- if (mx_is_pop (tmp->path))
- {
-- add_folder (menu, state, tmp->path, NULL, NULL, tmp->new);
-+ add_folder (menu, state, tmp->path, NULL, NULL, tmp);
- continue;
- }
+ if (mx_is_pop (tmp->path))
+ {
+- add_folder (menu, state, tmp->path, NULL, NULL, tmp->new);
++ add_folder (menu, state, tmp->path, NULL, NULL, tmp);
+ continue;
+ }
#endif
#ifdef USE_NNTP
- if (mx_is_nntp (tmp->path))
- {
-- add_folder (menu, state, tmp->path, NULL, NULL, tmp->new);
-+ add_folder (menu, state, tmp->path, NULL, NULL, tmp);
- continue;
- }
+ if (mx_is_nntp (tmp->path))
+ {
+- add_folder (menu, state, tmp->path, NULL, NULL, tmp->new);
++ add_folder (menu, state, tmp->path, NULL, NULL, tmp);
+ continue;
+ }
#endif
@@ -636,7 +642,7 @@
- strfcpy (buffer, NONULL(tmp->path), sizeof (buffer));
- mutt_pretty_mailbox (buffer);
+ strfcpy (buffer, NONULL(tmp->path), sizeof (buffer));
+ mutt_pretty_mailbox (buffer);
-- add_folder (menu, state, buffer, &s, NULL, tmp->new);
-+ add_folder (menu, state, buffer, &s, NULL, tmp);
- }
- while ((tmp = tmp->next));
+- add_folder (menu, state, buffer, &s, NULL, tmp->new);
++ add_folder (menu, state, buffer, &s, NULL, tmp);
+ }
+ while ((tmp = tmp->next));
}
@@ -1555,7 +1561,7 @@
if (regexec (rx, nd->group, 0, NULL, 0) == 0)
@@ -106,21 +106,49 @@
}
}
}
---- buffy.c Feb 2004 17:50:43 -0000 3.9
-+++ buffy.c Feb 2004 13:19:42 -0000
-@@ -229,2 +229,3 @@ int mutt_parse_mailboxes (BUFFER *path,
+--- buffy.c.orig Sat Oct 30 23:40:07 2004
++++ buffy.c Sat Feb 5 13:57:07 2005
+@@ -227,6 +227,7 @@
+ (*tmp)->new = 0;
+ (*tmp)->notified = 1;
(*tmp)->newly_created = 0;
+ (*tmp)->mtime = 0;
-@@ -260,2 +261,3 @@ int mutt_buffy_check (int force)
+ #ifdef BUFFY_SIZE
+ /* for buffy_size, it is important that if the folder is new (tested by
+@@ -258,6 +259,7 @@
+ {
+ BUFFY *tmp;
struct stat sb;
+ struct stat smd;
struct dirent *de;
-@@ -299,2 +301,3 @@ int mutt_buffy_check (int force)
+ DIR *dirp;
+ char path[_POSIX_PATH_MAX];
+@@ -297,6 +299,7 @@
+ for (tmp = Incoming; tmp; tmp = tmp->next)
+ {
tmp->new = 0;
+ tmp->mtime = 0;
-@@ -383,6 +386,13 @@ int mutt_buffy_check (int force)
+ #ifdef USE_IMAP
+ if (mx_is_imap (tmp->path))
+@@ -370,21 +373,31 @@
+ case M_MAILDIR:
+
+ snprintf (path, sizeof (path), "%s/new", tmp->path);
++ stat (path, &smd);
++ tmp->mtime = smd.st_mtime;
+ if ((dirp = opendir (path)) == NULL)
+ {
+ tmp->magic = 0;
+ break;
+ }
++
+ while ((de = readdir (dirp)) != NULL)
+ {
+ char *p;
+ if (*de->d_name != '.' &&
+ (!(p = strstr (de->d_name, ":2,")) || !strchr (p + 3, 'T')))
{
- /* one new and undeleted message is enough */
- BuffyCount++;
@@ -138,6 +166,21 @@
+ tmp->mtime = smd.st_mtime;
+ }
}
+ }
+ closedir (dirp);
+@@ -414,6 +427,12 @@
+ #ifdef BUFFY_SIZE
+ else if (Context && Context->path)
+ tmp->size = (long) sb.st_size; /* update the size */
++#else
++ else if(tmp->magic == M_MAILDIR) {
++ snprintf (path, sizeof (path), "%s/new", tmp->path);
++ stat (path, &smd);
++ tmp->mtime = smd.st_mtime;
++ }
+ #endif
+
+ if (!tmp->new)
--- buffy.h Dec 2002 11:19:39 -0000 3.2
+++ buffy.h Feb 2004 13:19:42 -0000
@@ -29,2 +29,3 @@ typedef struct buffy_t
diff --git a/mail/mutt-devel/files/extra-patch-nntp.c b/mail/mutt-devel/files/extra-patch-nntp.c
deleted file mode 100644
index 007938754dce..000000000000
--- a/mail/mutt-devel/files/extra-patch-nntp.c
+++ /dev/null
@@ -1,31 +0,0 @@
---- nntp.c.orig Mon Aug 2 15:11:21 2004
-+++ nntp.c Mon Aug 2 15:12:31 2004
-@@ -1064,13 +1064,12 @@
- {
- char buf[LONG_STRING];
- CONNECTION* conn;
-- CONNECTION* tmp;
-
- conn = mutt_socket_head ();
-
- while (conn)
- {
-- tmp = conn;
-+ CONNECTION *next = conn->next;
-
- if (conn->account.type == M_ACCT_TYPE_NNTP)
- {
-@@ -1079,11 +1078,10 @@
- mutt_socket_readln (buf, sizeof (buf), conn);
- mutt_clear_error ();
- mutt_socket_close (conn);
--
-- mutt_socket_free (tmp);
-+ mutt_socket_free (conn);
- }
-
-- conn = conn->next;
-+ conn = next;
- }
- }
-
diff --git a/mail/mutt-devel/files/extra-patch-nodoc-contrib b/mail/mutt-devel/files/extra-patch-nodoc-contrib
index 0646626e9ff8..269406cec9da 100644
--- a/mail/mutt-devel/files/extra-patch-nodoc-contrib
+++ b/mail/mutt-devel/files/extra-patch-nodoc-contrib
@@ -9,12 +9,12 @@
if NEEDS_PGPEWRAP
bin_SCRIPTS = pgpewrap muttbug flea
---- doc/Makefile.in.orig2 Wed Oct 2 17:38:36 2002
-+++ doc/Makefile.in Wed Oct 2 17:40:59 2002
-@@ -89,14 +89,6 @@
- $(DESTDIR)$(mandir)/man1/mutt_dotlock.1
+--- doc/Makefile.in.orig Fri Feb 4 13:46:04 2005
++++ doc/Makefile.in Fri Feb 4 13:47:49 2005
+@@ -92,14 +92,6 @@
./instdoc muttrc.man $(DESTDIR)$(mandir)/man5/muttrc.5
./instdoc $(srcdir)/mbox.man $(DESTDIR)$(mandir)/man5/mbox.5
+ ./instdoc $(srcdir)/mmdf.man $(DESTDIR)$(mandir)/man5/mmdf.5
- $(top_srcdir)/mkinstalldirs $(DESTDIR)$(docdir)
- for f in $(srcdir_DOCFILES) ; do \
- $(INSTALL) -m 644 $(srcdir)/$$f $(DESTDIR)$(docdir) ; \
diff --git a/mail/mutt-devel/files/extra-patch-sidebar b/mail/mutt-devel/files/extra-patch-sidebar
new file mode 100644
index 000000000000..a3a2209fb93b
--- /dev/null
+++ b/mail/mutt-devel/files/extra-patch-sidebar
@@ -0,0 +1,10 @@
+--- Makefile.am.orig Fri Feb 4 18:12:14 2005
++++ Makefile.am Fri Feb 4 18:17:17 2005
+@@ -195,6 +195,7 @@
+ $(srcdir)/init.h | ./makedoc -c | cat Muttrc.head - > Muttrc
+ touch stamp-doc-rc
+
++mutt_SOURCES += sidebar.c
+
+ .PHONY: commit pclean check-security commit-real commit-changelog
+ .PHONY: changelog ChangeLog
diff --git a/mail/mutt-devel/files/patch-05 b/mail/mutt-devel/files/patch-05
index c6ffc222301d..bfbb5aa3ab9b 100644
--- a/mail/mutt-devel/files/patch-05
+++ b/mail/mutt-devel/files/patch-05
@@ -41,65 +41,3 @@
p = strchr (letters, ch.ch);
if (p)
{
---- browser.c.orig Fri Sep 24 01:08:08 1999
-+++ browser.c Sun Sep 26 23:46:25 1999
-@@ -750,7 +750,7 @@
- switch (mutt_multi_choice ((reverse) ?
- _("Reverse sort by (d)ate, (a)lpha, si(z)e or do(n)'t sort? ") :
- _("Sort by (d)ate, (a)lpha, si(z)e or do(n)'t sort? "),
-- _("dazn")))
-+ N_("dazn")))
- {
- case -1: /* abort */
- resort = 0;
---- commands.c.orig Wed Jul 7 02:56:24 1999
-+++ commands.c Sun Sep 26 23:46:25 1999
-@@ -337,7 +337,7 @@
- switch (mutt_multi_choice (reverse ?
- _("Rev-Sort (d)ate/(f)rm/(r)ecv/(s)ubj/t(o)/(t)hread/(u)nsort/si(z)e/s(c)ore?: ") :
- _("Sort (d)ate/(f)rm/(r)ecv/(s)ubj/t(o)/(t)hread/(u)nsort/si(z)e/s(c)ore?: "),
-- _("dfrsotuzc")))
-+ N_("dfrsotuzc")))
- {
- case -1: /* abort - don't resort */
- return -1;
---- compose.c.orig Wed Dec 11 12:20:04 2002
-+++ compose.c Tue Dec 17 19:57:50 2002
-@@ -173,7 +173,7 @@
- char input_signas[SHORT_STRING];
-
- switch (mutt_multi_choice (_("PGP (e)ncrypt, (s)ign, sign (a)s, (b)oth, or (f)orget it? "),
-- _("esabf")))
-+ N_("esabf")))
- {
- case 1: /* (e)ncrypt */
- msg->security |= PGPENCRYPT;
-@@ -229,7 +229,7 @@
- char *p;
-
- switch (mutt_multi_choice (_("S/MIME (e)ncrypt, (s)ign, encrypt (w)ith, sign (a)s, (b)oth, or (f)orget it? "),
-- _("eswabf")))
-+ N_("eswabf")))
- {
- case 1: /* (e)ncrypt */
- msg->security |= SMIMEENCRYPT;
-@@ -239,7 +239,7 @@
- msg->security |= SMIMEENCRYPT;
- switch (mutt_multi_choice (_("1: DES, 2: Triple-DES, 3: RC2-40,"
- " 4: RC2-64, 5: RC2-128, or (f)orget it? "),
-- _("12345f"))) {
-+ N_("12345f"))) {
- case 1:
- mutt_str_replace (&SmimeCryptAlg, "des");
- break;
---- muttlib.c.orig Sun Apr 9 14:39:02 2000
-+++ muttlib.c Fri May 12 11:26:58 2000
-@@ -671,7 +671,7 @@
- if (*append == 0 && access (fname, F_OK) == 0)
- {
- switch (mutt_multi_choice
-- (_("File exists, (o)verwrite, (a)ppend, or (c)ancel?"), _("oac")))
-+ (_("File exists, (o)verwrite, (a)ppend, or (c)ancel?"), N_("oac")))
- {
- case -1: /* abort */
- case 3: /* cancel */
diff --git a/mail/mutt-devel/files/patch-Makefile.in b/mail/mutt-devel/files/patch-Makefile.in
deleted file mode 100644
index 5e33d7c1abdf..000000000000
--- a/mail/mutt-devel/files/patch-Makefile.in
+++ /dev/null
@@ -1,11 +0,0 @@
---- Makefile.in.orig Tue May 9 17:15:37 2000
-+++ Makefile.in Fri May 12 13:53:08 2000
-@@ -210,7 +210,7 @@
- SOURCES = $(mutt_dotlock_SOURCES) $(pgpring_SOURCES) $(makedoc_SOURCES) $(mutt_SOURCES) $(EXTRA_mutt_SOURCES)
- OBJECTS = $(mutt_dotlock_OBJECTS) $(pgpring_OBJECTS) $(makedoc_OBJECTS) $(mutt_OBJECTS)
-
--all: all-redirect
-+all: $(BUILT_SOURCES) all-redirect
- .SUFFIXES:
- .SUFFIXES: .S .c .o .s
- $(srcdir)/Makefile.in: Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4)
diff --git a/mail/mutt-devel/files/patch-doc-manual.sgml.head b/mail/mutt-devel/files/patch-doc-manual.sgml.head
index b178a5b8dd29..f06411bc3688 100644
--- a/mail/mutt-devel/files/patch-doc-manual.sgml.head
+++ b/mail/mutt-devel/files/patch-doc-manual.sgml.head
@@ -1,5 +1,5 @@
---- doc/manual.sgml.head.orig Sun Feb 1 18:49:53 2004
-+++ doc/manual.sgml.head Wed Aug 25 14:02:33 2004
+--- doc/manual.sgml.head.orig Sat Jan 15 10:42:44 2005
++++ doc/manual.sgml.head Fri Feb 4 08:05:59 2005
@@ -125,24 +125,24 @@
<tscreen><verb>
^A or <Home> bol move to the start of the line
@@ -60,16 +60,16 @@
i ispell check spelling (if available on your system)
^F forget-passphrase wipe passphrase(s) from memory
</verb></tscreen>
-@@ -1760,7 +1760,7 @@
- ~g cryptographically signed messages
+@@ -1876,7 +1876,7 @@
~G cryptographically encrypted messages
+ ~H EXPR messages with a spam attribute matching EXPR
~h EXPR messages which contain EXPR in the message header
-~k message contains PGP key material
+~k message contains PGP key material
~i ID message which match ID in the ``Message-ID'' field
~L EXPR message is either originated or received by EXPR
~l message is addressed to a known mailing list
-@@ -1778,12 +1778,12 @@
+@@ -1894,13 +1894,13 @@
~T tagged messages
~t USER messages addressed to USER
~U unread messages
@@ -81,11 +81,13 @@
~y EXPR messages which contain EXPR in the `X-Label' field
~z [MIN]-[MAX] messages with a size in the range MIN to MAX *)
-~= duplicated messages (see $duplicate_threads)
+-~$ unreferenced messages (requires threaded view)
+~= duplicated messages (see $duplicate_threads)
++~$ unreferenced messages (requires threaded view)
</verb></tscreen>
Where EXPR, USER, ID, and SUBJECT are
-@@ -1885,10 +1885,10 @@
+@@ -2003,10 +2003,10 @@
An error margin is a sign (+ or -), followed by a digit, followed by
one of the following units:
<verb>
@@ -100,7 +102,7 @@
</verb>
As a special case, you can replace the sign by a ``*'' character,
which is equivalent to giving identical plus and minus error margins.
-@@ -2919,7 +2919,7 @@
+@@ -3044,7 +3044,7 @@
to send messages from the command line as well.
<tscreen><verb>
diff --git a/mail/mutt-devel/files/patch-hcache-db b/mail/mutt-devel/files/patch-hcache-db
new file mode 100644
index 000000000000..aa74639ee837
--- /dev/null
+++ b/mail/mutt-devel/files/patch-hcache-db
@@ -0,0 +1,11 @@
+--- configure.old Fri Jan 28 11:01:06 2005
++++ configure Fri Feb 4 09:18:42 2005
+@@ -12642,7 +12642,7 @@
+ bdbpfx="$bdbpfx $d/$v"
+ done
+ done
+- BDB_VERSIONS="db-4 db4 db-4.3 db4.3 db43 db-4.2 db4.2 db42 db-4.1 db4.1 db41 db ''"
++ BDB_VERSIONS="db-4.2 db4.2 db42 ''"
+ echo "$as_me:$LINENO: checking for BerkeleyDB > 4.0" >&5
+ echo $ECHO_N "checking for BerkeleyDB > 4.0... $ECHO_C" >&6
+ for d in $bdbpfx; do
diff --git a/mail/mutt-devel/files/patch-init.c b/mail/mutt-devel/files/patch-init.c
index 36b72f17d579..389b682cfa11 100644
--- a/mail/mutt-devel/files/patch-init.c
+++ b/mail/mutt-devel/files/patch-init.c
@@ -37,24 +37,3 @@
#ifndef DOMAIN
#define DOMAIN buffer
---- init.c.orig
-+++ init.c
-@@ -1371,17 +1371,6 @@
- pid_t pid;
- struct stat s;
-
-- if (stat (rcfile, &s) < 0)
-- {
-- snprintf (err->data, err->dsize, _("%s: stat: %s"), rcfile, strerror (errno));
-- return (-1);
-- }
-- if (!S_ISREG (s.st_mode))
-- {
-- snprintf (err->data, err->dsize, _("%s: not a regular file"), rcfile);
-- return (-1);
-- }
--
- if ((f = mutt_open_read (rcfile, &pid)) == NULL)
- {
- snprintf (err->data, err->dsize, "%s: %s", rcfile, strerror (errno));
-
diff --git a/mail/mutt-devel/files/patch-mktemp b/mail/mutt-devel/files/patch-mktemp
index 8a3d717ba0d4..247a66d7e021 100644
--- a/mail/mutt-devel/files/patch-mktemp
+++ b/mail/mutt-devel/files/patch-mktemp
@@ -1,10 +1,10 @@
---- muttlib.c.orig Thu Apr 22 14:43:58 2004
-+++ muttlib.c Thu Apr 22 14:51:01 2004
-@@ -657,7 +657,11 @@
+--- muttlib.c.orig Fri Feb 4 08:09:25 2005
++++ muttlib.c Fri Feb 4 08:13:37 2005
+@@ -664,7 +664,11 @@
void _mutt_mktemp (char *s, const char *src, int line)
{
-- snprintf (s, _POSIX_PATH_MAX, "%s/mutt-%s-%d-%d", NONULL (Tempdir), NONULL(Hostname), (int) getpid (), Counter++);
+- snprintf (s, _POSIX_PATH_MAX, "%s/mutt-%s-%d-%d-%d", NONULL (Tempdir), NONULL(Hostname), (int) getuid(), (int) getpid (), Counter++);
+ char t[7];
+ snprintf (t, 7, "-%05d", Counter++);
+ snprintf (s, _POSIX_PATH_MAX-6, "%s/mutt-%s-XXXXXXXX", NONULL(Tempdir), NONULL(Hostname));
diff --git a/mail/mutt-devel/files/patch-pgp.c b/mail/mutt-devel/files/patch-pgp.c
new file mode 100644
index 000000000000..216e21578bbc
--- /dev/null
+++ b/mail/mutt-devel/files/patch-pgp.c
@@ -0,0 +1,11 @@
+--- pgp.c.orig Thu Jan 27 21:30:04 2005
++++ pgp.c Fri Feb 4 13:14:04 2005
+@@ -209,7 +209,7 @@
+ if (armor_header)
+ {
+ char *p = mutt_skip_whitespace (buf);
+- if (*p == '\n')
++ if (*p == '\0')
+ armor_header = 0;
+ continue;
+ }
diff --git a/mail/mutt-devel/files/patch-smime-recvattach b/mail/mutt-devel/files/patch-smime-recvattach
deleted file mode 100644
index 92fa0e2df698..000000000000
--- a/mail/mutt-devel/files/patch-smime-recvattach
+++ /dev/null
@@ -1,39 +0,0 @@
-diff -u -r3.13 recvattach.c
---- recvattach.c 12 Apr 2004 20:33:33 -0000 3.13
-+++ recvattach.c 30 Aug 2004 20:26:30 -0000
-@@ -913,18 +913,33 @@
- mx_close_message (&msg);
- return;
- }
-- if ((WithCrypto & APPLICATION_SMIME) && hdr->security & APPLICATION_SMIME)
-+ if ((WithCrypto & APPLICATION_SMIME) && (hdr->security & APPLICATION_SMIME))
- {
- if (hdr->env)
- crypt_smime_getkeys (hdr->env);
-
- if (mutt_is_application_smime(hdr->content))
-+ {
- secured = ! crypt_smime_decrypt_mime (msg->fp, &fp,
- hdr->content, &cur);
-+
-+ /* S/MIME nesting */
-+ if ((mutt_is_application_smime (cur) & SMIMEOPAQUE))
-+ {
-+ BODY *_cur = cur;
-+ FILE *_fp = fp;
-+
-+ fp = NULL; cur = NULL;
-+ secured = !crypt_smime_decrypt_mime (_fp, &fp, _cur, &cur);
-+
-+ mutt_free_body (&_cur);
-+ safe_fclose (&_fp);
-+ }
-+ }
- else
- need_secured = 0;
- }
-- if ((WithCrypto & APPLICATION_PGP) && hdr->security & APPLICATION_PGP)
-+ if ((WithCrypto & APPLICATION_PGP) && (hdr->security & APPLICATION_PGP))
- {
- if (mutt_is_multipart_encrypted(hdr->content))
- secured = !crypt_pgp_decrypt_mime (msg->fp, &fp, hdr->content, &cur);
diff --git a/mail/mutt-devel/files/patch-threadcomplete b/mail/mutt-devel/files/patch-threadcomplete
index 047e231f244a..235165ffdd43 100644
--- a/mail/mutt-devel/files/patch-threadcomplete
+++ b/mail/mutt-devel/files/patch-threadcomplete
@@ -4,12 +4,12 @@ diff -Nru a/PATCHES b/PATCHES
@@ -0,0 +1 @@
+patch-1.5.6+20040904.tg.mutt-thread.3
diff -Nru a/doc/manual.sgml.head b/doc/manual.sgml.head
---- doc/manual.sgml.head 2004-07-24 12:27:29 +02:00
-+++ doc/manual.sgml.head 2004-09-04 12:40:02 +02:00
-@@ -1809,6 +1809,8 @@
- ~y EXPR messages which contain EXPR in the `X-Label' field
+--- doc/manual.sgml.head.orig Fri Feb 4 08:15:50 2005
++++ doc/manual.sgml.head Fri Feb 4 08:19:51 2005
+@@ -1903,6 +1903,8 @@
~z [MIN]-[MAX] messages with a size in the range MIN to MAX *)
~= duplicated messages (see $duplicate_threads)
+ ~$ unreferenced messages (requires threaded view)
+~(PATTERN) messages in threads containing messages matching a certain
+ pattern, e.g. all threads containing messages from you: ~(~P)
</verb></tscreen>
diff --git a/mail/mutt-devel/files/patch-threadsubject b/mail/mutt-devel/files/patch-threadsubject
deleted file mode 100644
index e18b5878e711..000000000000
--- a/mail/mutt-devel/files/patch-threadsubject
+++ /dev/null
@@ -1,51 +0,0 @@
-From:
-
-http://www.elho.net/dev/mutt/patch-1.5.6.eh.thread_subject.1
-
-diff -ru mutt-1.5.6.orig/init.h mutt-1.5.6/init.h
---- init.h 2004-02-01 18:15:17.000000000 +0100
-+++ init.h 2004-06-21 22:58:49.000000000 +0200
-@@ -704,6 +704,13 @@
- ** When set, mutt will not show the presence of missing messages in the
- ** thread tree.
- */
-+ { "hide_thread_subject", DT_BOOL, R_TREE|R_INDEX, OPTHIDETHREADSUBJECT, 1 },
-+ /*
-+ ** .pp
-+ ** When set, mutt will not show the subject of messages in the thread
-+ ** tree that have the same subject as their parent or closest previously
-+ ** displayed sibling.
-+ */
- { "hide_top_limited", DT_BOOL, R_TREE|R_INDEX, OPTHIDETOPLIMITED, 0 },
- /*
- ** .pp
-diff -ru mutt-1.5.6.orig/mutt.h mutt-1.5.6/mutt.h
---- mutt.h 2004-02-01 18:15:17.000000000 +0100
-+++ mutt.h 2004-06-21 22:48:35.000000000 +0200
-@@ -351,6 +351,7 @@
- OPTHIDDENHOST,
- OPTHIDELIMITED,
- OPTHIDEMISSING,
-+ OPTHIDETHREADSUBJECT,
- OPTHIDETOPLIMITED,
- OPTHIDETOPMISSING,
- OPTIGNORELISTREPLYTO,
-diff -ru mutt-1.5.6.orig/PATCHES mutt-1.5.6/PATCHES
---- PATCHES 2004-02-01 18:42:47.000000000 +0100
-+++ PATCHES 2004-06-21 21:54:50.000000000 +0200
-@@ -0,0 +1 @@
-+patch-1.5.6.eh.thread_subject.1
-diff -ru mutt-1.5.6.orig/thread.c mutt-1.5.6/thread.c
---- thread.c 2004-02-01 18:10:58.000000000 +0100
-+++ thread.c 2004-06-21 22:51:35.000000000 +0200
-@@ -41,6 +41,10 @@
- {
- THREAD *tmp, *tree = hdr->thread;
-
-+ /* if the user disabled subject hiding, display it */
-+ if (!option (OPTHIDETHREADSUBJECT))
-+ return (1);
-+
- /* if our subject is different from our parent's, display it */
- if (hdr->subject_changed)
- return (1);
diff --git a/mail/mutt-devel/files/patch-z b/mail/mutt-devel/files/patch-z
deleted file mode 100644
index 09f206e05456..000000000000
--- a/mail/mutt-devel/files/patch-z
+++ /dev/null
@@ -1,22 +0,0 @@
---- Makefile.am.orig2 Thu Jan 6 15:58:57 2005
-+++ Makefile.am Thu Jan 6 15:59:33 2005
-@@ -12,7 +12,7 @@
-
- SUBDIRS = m4 po intl doc contrib $(IMAP_SUBDIR)
-
--bin_SCRIPTS = muttbug flea @SMIMEAUX_TARGET@
-+bin_SCRIPTS = @SMIMEAUX_TARGET@
-
- BUILT_SOURCES = keymap_defs.h patchlist.c Muttrc
-
---- doc/Makefile.in.orig2 Thu Jan 6 15:45:57 2005
-+++ doc/Makefile.in Thu Jan 6 15:53:52 2005
-@@ -78,8 +78,6 @@
- $(top_srcdir)/mkinstalldirs $(DESTDIR)$(mandir)/man1
- $(top_srcdir)/mkinstalldirs $(DESTDIR)$(mandir)/man5
- ./instdoc $(srcdir)/mutt.man $(DESTDIR)$(mandir)/man1/mutt.1
-- ./instdoc $(srcdir)/muttbug.man $(DESTDIR)$(mandir)/man1/flea.1
-- echo ".so $(mandir)/man1/flea.1" > $(DESTDIR)$(mandir)/man1/muttbug.1
- ./instdoc $(srcdir)/dotlock.man \
- $(DESTDIR)$(mandir)/man1/mutt_dotlock.1
- ./instdoc muttrc.man $(DESTDIR)$(mandir)/man5/muttrc.5
diff --git a/mail/mutt-devel/scripts/generate-plist b/mail/mutt-devel/scripts/generate-plist
index 6077523e679a..740b8dc1bd0f 100644
--- a/mail/mutt-devel/scripts/generate-plist
+++ b/mail/mutt-devel/scripts/generate-plist
@@ -21,7 +21,9 @@ echo_signal() {
PATH=/bin:/usr/bin
cat > $tmp_first <<EOF
+bin/flea
bin/mutt
+bin/muttbug
bin/mutt_dotlock
bin/pgpewrap
bin/pgpring
@@ -131,7 +133,7 @@ EOF
fi
if [ "$MUTT_HTML" = "yes" ]; then
- html=372
+ html=380
if [ "$MUTT_COMPRESSED_FOLDERS" = "yes" ]; then
html=$(($html + 5))
fi
@@ -144,8 +146,11 @@ EOF
if [ "$MUTT_EDIT_THREADS" = "yes" ]; then
html=$(($html + 3))
fi
+ if [ "$MUTT_IMAP_HEADER_CACHE" = "yes" ]; then
+ html=$(($html + 2))
+ fi
if [ "$MUTT_MAILDIR_HEADER_CACHE" = "yes" ]; then
- html=$(($html + 3))
+ html=$(($html + 1))
fi
if [ "$MUTT_SIDEBAR_PATCH" = "yes" ]; then
html=$(($html + 2))
@@ -156,9 +161,6 @@ EOF
if [ "$MUTT_IFDEF_PATCH" = "yes" ]; then
html=$(($html + 1))
fi
- if [ "$MUTT_PGP_PATCH" = "yes" ]; then
- html=$(($html + 3))
- fi
if [ "$MUTT_SLAVE_HTML_PAGES" != "" ]; then
html=$(($html + $MUTT_SLAVE_HTML_PAGES))
fi