FreeBSD Bugzilla – Attachment 50684 Details for
Bug 77161
maintainer-update of mail/mutt-devel
Home
|
New
|
Browse
|
Search
|
[?]
|
Reports
|
Help
|
New Account
|
Log In
Remember
[x]
|
Forgot Password
Login:
[x]
[patch]
file.diff
file.diff (text/plain), 75.51 KB, created by
Udo.Schweigert
on 2005-02-06 07:40:13 UTC
(
hide
)
Description:
file.diff
Filename:
MIME Type:
Creator:
Udo.Schweigert
Created:
2005-02-06 07:40:13 UTC
Size:
75.51 KB
patch
obsolete
>diff -ru /usr/ports/mail/mutt-devel/Makefile ./Makefile >--- /usr/ports/mail/mutt-devel/Makefile Thu Jan 13 06:06:55 2005 >+++ ./Makefile Sun Feb 6 07:54:21 2005 >@@ -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,12 @@ > 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 \ > > 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 +115,7 @@ > 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 +149,21 @@ > > .include <bsd.port.pre.mk> > >+DISTNAME= mutt-${PORTVERSION}i >+EXTRACT_ONLY= ${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 +173,16 @@ > .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 +254,7 @@ > .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 +280,15 @@ > @${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 +303,6 @@ > 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 +324,24 @@ > 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 +364,12 @@ > 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 +392,12 @@ > .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" >@@ -392,9 +410,6 @@ > .endif > .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" >diff -ru /usr/ports/mail/mutt-devel/distinfo ./distinfo >--- /usr/ports/mail/mutt-devel/distinfo Thu Jan 13 06:06:55 2005 >+++ ./distinfo Sun Feb 6 07:54:21 2005 >@@ -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 -ru /usr/ports/mail/mutt-devel/files/extra-patch-edit-threads ./files/extra-patch-edit-threads >--- /usr/ports/mail/mutt-devel/files/extra-patch-edit-threads Tue Feb 10 19:27:50 2004 >+++ ./files/extra-patch-edit-threads Fri Feb 4 09:22:54 2005 >@@ -42,15 +42,6 @@ > 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 -ru /usr/ports/mail/mutt-devel/files/extra-patch-maildir-header-cache ./files/extra-patch-maildir-header-cache >--- /usr/ports/mail/mutt-devel/files/extra-patch-maildir-header-cache Tue Nov 9 19:57:39 2004 >+++ ./files/extra-patch-maildir-header-cache Fri Feb 4 09:22:54 2005 >@@ -2,1325 +2,44 @@ > --- 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 @@ > + ** 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 @@ > { > 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 @@ > + 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 @@ > + 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 @@ > +#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 @@ > > 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 @@ > 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 @@ > 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 @@ > if (ctx->magic == M_MH) > mh_update_sequences (ctx); > >-@@ -1362,6 +1430,13 @@ >+@@ -1468,6 +1535,13 @@ > } > > return 0; >@@ -1527,9 +223,9 @@ > > 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 @@ > 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 -ru /usr/ports/mail/mutt-devel/files/extra-patch-maildir-mtime ./files/extra-patch-maildir-mtime >--- /usr/ports/mail/mutt-devel/files/extra-patch-maildir-mtime Tue Aug 3 06:51:13 2004 >+++ ./files/extra-patch-maildir-mtime Sat Feb 5 14:00:13 2005 >@@ -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 -ru /usr/ports/mail/mutt-devel/files/extra-patch-maildir-mtime-nntp ./files/extra-patch-maildir-mtime-nntp >--- /usr/ports/mail/mutt-devel/files/extra-patch-maildir-mtime-nntp Tue Aug 3 06:51:13 2004 >+++ ./files/extra-patch-maildir-mtime-nntp Sat Feb 5 23:49:29 2005 >@@ -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 -ru /usr/ports/mail/mutt-devel/files/extra-patch-nntp.c ./files/extra-patch-nntp.c >--- /usr/ports/mail/mutt-devel/files/extra-patch-nntp.c Tue Aug 3 06:51:13 2004 >+++ ./files/extra-patch-nntp.c Thu Jan 1 01:00:00 1970 >@@ -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 -ru /usr/ports/mail/mutt-devel/files/extra-patch-nodoc-contrib ./files/extra-patch-nodoc-contrib >--- /usr/ports/mail/mutt-devel/files/extra-patch-nodoc-contrib Sat Oct 5 21:03:32 2002 >+++ ./files/extra-patch-nodoc-contrib Fri Feb 4 13:52:12 2005 >@@ -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 -ru /usr/ports/mail/mutt-devel/files/extra-patch-sidebar ./files/extra-patch-sidebar >--- /usr/ports/mail/mutt-devel/files/extra-patch-sidebar Thu Jan 1 01:00:00 1970 >+++ ./files/extra-patch-sidebar Fri Feb 4 18:22:16 2005 >@@ -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 -ru /usr/ports/mail/mutt-devel/files/patch-05 ./files/patch-05 >--- /usr/ports/mail/mutt-devel/files/patch-05 Wed Jan 1 18:27:03 2003 >+++ ./files/patch-05 Fri Feb 4 09:22:54 2005 >@@ -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 -ru /usr/ports/mail/mutt-devel/files/patch-Makefile.in ./files/patch-Makefile.in >--- /usr/ports/mail/mutt-devel/files/patch-Makefile.in Sat May 13 17:36:47 2000 >+++ ./files/patch-Makefile.in Thu Jan 1 01:00:00 1970 >@@ -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 -ru /usr/ports/mail/mutt-devel/files/patch-doc-manual.sgml.head ./files/patch-doc-manual.sgml.head >--- /usr/ports/mail/mutt-devel/files/patch-doc-manual.sgml.head Sun Aug 29 16:06:34 2004 >+++ ./files/patch-doc-manual.sgml.head Fri Feb 4 09:22:54 2005 >@@ -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 -ru /usr/ports/mail/mutt-devel/files/patch-hcache-db ./files/patch-hcache-db >--- /usr/ports/mail/mutt-devel/files/patch-hcache-db Thu Jan 1 01:00:00 1970 >+++ ./files/patch-hcache-db Fri Feb 4 09:22:54 2005 >@@ -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 -ru /usr/ports/mail/mutt-devel/files/patch-init.c ./files/patch-init.c >--- /usr/ports/mail/mutt-devel/files/patch-init.c Sun Jul 4 13:11:53 2004 >+++ ./files/patch-init.c Fri Feb 4 09:22:54 2005 >@@ -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 -ru /usr/ports/mail/mutt-devel/files/patch-mktemp ./files/patch-mktemp >--- /usr/ports/mail/mutt-devel/files/patch-mktemp Tue May 11 09:36:58 2004 >+++ ./files/patch-mktemp Fri Feb 4 09:22:54 2005 >@@ -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 -ru /usr/ports/mail/mutt-devel/files/patch-pgp.c ./files/patch-pgp.c >--- /usr/ports/mail/mutt-devel/files/patch-pgp.c Thu Jan 1 01:00:00 1970 >+++ ./files/patch-pgp.c Fri Feb 4 13:41:44 2005 >@@ -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 -ru /usr/ports/mail/mutt-devel/files/patch-smime-recvattach ./files/patch-smime-recvattach >--- /usr/ports/mail/mutt-devel/files/patch-smime-recvattach Tue Aug 31 10:11:05 2004 >+++ ./files/patch-smime-recvattach Thu Jan 1 01:00:00 1970 >@@ -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 -ru /usr/ports/mail/mutt-devel/files/patch-threadcomplete ./files/patch-threadcomplete >--- /usr/ports/mail/mutt-devel/files/patch-threadcomplete Tue Oct 12 18:42:03 2004 >+++ ./files/patch-threadcomplete Fri Feb 4 09:22:54 2005 >@@ -4,12 +4,12 @@ > @@ -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 -ru /usr/ports/mail/mutt-devel/files/patch-threadsubject ./files/patch-threadsubject >--- /usr/ports/mail/mutt-devel/files/patch-threadsubject Sat Jun 26 17:40:28 2004 >+++ ./files/patch-threadsubject Thu Jan 1 01:00:00 1970 >@@ -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 -ru /usr/ports/mail/mutt-devel/files/patch-z ./files/patch-z >--- /usr/ports/mail/mutt-devel/files/patch-z Sat Jan 8 19:38:59 2005 >+++ ./files/patch-z Thu Jan 1 01:00:00 1970 >@@ -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 -ru /usr/ports/mail/mutt-devel/scripts/generate-plist ./scripts/generate-plist >--- /usr/ports/mail/mutt-devel/scripts/generate-plist Thu Jan 13 06:06:55 2005 >+++ ./scripts/generate-plist Fri Feb 4 18:23:28 2005 >@@ -21,7 +21,9 @@ > 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 @@ > fi > > if [ "$MUTT_HTML" = "yes" ]; then >- html=372 >+ html=380 > if [ "$MUTT_COMPRESSED_FOLDERS" = "yes" ]; then > html=$(($html + 5)) > fi >@@ -144,8 +146,11 @@ > 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)) >@@ -155,9 +160,6 @@ > fi > 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))
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Diff
View Attachment As Raw
Actions:
View
|
Diff
Attachments on
bug 77161
: 50684