summaryrefslogtreecommitdiff
path: root/net-libs
diff options
context:
space:
mode:
authorV3n3RiX <venerix@koprulu.sector>2024-11-28 02:00:16 +0000
committerV3n3RiX <venerix@koprulu.sector>2024-11-28 02:00:16 +0000
commita2148b9fab4c83209816a49f091d70873b19881d (patch)
treeaeeaea24918f3a0df7fc0e4e013c68df40469897 /net-libs
parentead7697a01fd631b56240b2d58aedd98ba7f92d3 (diff)
gentoo auto-resync : 28:11:2024 - 02:00:16
Diffstat (limited to 'net-libs')
-rw-r--r--net-libs/Manifest.gzbin30710 -> 30710 bytes
-rw-r--r--net-libs/c-client/Manifest6
-rw-r--r--net-libs/c-client/c-client-2007f_p7-r1.ebuild (renamed from net-libs/c-client/c-client-2007f-r8.ebuild)64
-rw-r--r--net-libs/c-client/files/c-client-2007f_p7-c99.patch791
-rw-r--r--net-libs/c-client/metadata.xml1
-rw-r--r--net-libs/gnutls/Manifest3
-rw-r--r--net-libs/gnutls/gnutls-3.8.8.ebuild163
7 files changed, 997 insertions, 31 deletions
diff --git a/net-libs/Manifest.gz b/net-libs/Manifest.gz
index 998a47d8d114..1d1925641918 100644
--- a/net-libs/Manifest.gz
+++ b/net-libs/Manifest.gz
Binary files differ
diff --git a/net-libs/c-client/Manifest b/net-libs/c-client/Manifest
index c6d69b994362..cd92861d2c5d 100644
--- a/net-libs/c-client/Manifest
+++ b/net-libs/c-client/Manifest
@@ -6,11 +6,11 @@ AUX c-client-2007f-openssl-1.1.patch 2857 BLAKE2B 748933d521a99409234e62cfee1c98
AUX c-client-2007f-scandir-callback-types.patch 6747 BLAKE2B b300133fed2dbd9c01a0abd5ff8e64f72affdb1d5aeed4bf5089588895bc2ce6cf904c9a8660da8eb7d53e883266f38cda140d396da63d6db67c354b73492832 SHA512 1c461c7114e2cc238b8716936708df1f5faf747f79c49308d35384b27c4809577c26a77e7753668a576f68a37ee78debb8c7533820f21d0da6f40b2b2c6e2c1a
AUX c-client-2007f-topal.patch 1078 BLAKE2B 5224ac12119e25c3208865bf1904a21c9d4bd880b685bea1389cc32a30764e8673606085f2d58ec12532618807d61257e02ed2d9b178014c8ba78f9defba1f72 SHA512 f81914d9d0acf92625d2a4956aa82e9639bc36ab12c608dafb8137afe619f6acc5d9647d05a1827bfe27b21c9dd774bd458c8cfa2e5c2e449ed956daed674b00
AUX c-client-2007f_GENTOO_amd64-so-fix.patch 519 BLAKE2B f396e4d406d84b63e4f5325b1713977dfc896c77c4f43cd1deeaa9a035c601d462ae12bdc549facacb23a043189c9953f5bee055c11976814cbf046c55b76a43 SHA512 21fb5d485b0a1236572a10d0b92f9b025c8117b9a7549f43429077a6b213705b63923712fba1e52b773d935d2ca7cb58dcbe90640dc081bf794e321ece660e5c
+AUX c-client-2007f_p7-c99.patch 29137 BLAKE2B 68ec8bc07c8599bdaa0302ba43a76931558a7a4fa630cc9077f7128f90077e7908640b32aecabf70daee1a72dac77ef7f9519c36041b57ef2e8a7cc6d26a43c1 SHA512 45e6d5da8d511bb308baa52c9eb17c3c5bbfc0767966ddb797e09aabb0e047fae09fbf21a7107a4afb802bfb73f4e2a2fc6c9699955a6fec6fcaf286106bdd57
AUX c-client-2007f_p7-implicit-declaration-fix.patch 1067 BLAKE2B 32ae2ac3b19bb43bec0ca16c3507db46396ceb8628dc1cb5e7259ab39024bbd8ee029882af684e687537ff78835d1b36d9612fbcad9207a199ab2df9e9776dde SHA512 9c0276c32059e17fb17a466da4a87b2a4c8e08d0671d14e37e5dd02e52faaec179e92e7b9fa20f40bcb7ac24d3da8d22ba00b4575ccb38c7680402d888e228da
AUX c-client-2007f_p7-ldflags.patch 1557 BLAKE2B c9e2575f5e87742061b6f4deac5ce510aabcc0f28ab59a8c45235cd466495d7046ad59393df9f2ebd16e4f61e1c6235a79b8c94fcaf3e431a380814feab0d7bf SHA512 f399e030ba2d0c406ccc2f9682594060400a524cef8ed9a808b6c5e011dcc83421582f750738e5b2550596a193b8164814e3ef9f6dfa4ebe71eaf501929c4726
-DIST c-client-2007f-chappa-115-all.patch.gz 30571 BLAKE2B 707ec7718f764d5fea4142a4e0c4dd561d0a387cb72fea16de656a01bc21a0b30600dc121c8af090b76188d0131852ca6f3d40b9bba8745696faed5a79fb8c59 SHA512 f44489ec38aa6a3dc682872a6857154254c23352db81ee380dfdfad39743234d97a8bcc07a74459f7532efe2fc073cf7d9c078433e11a95de19beeb387ff8b65
DIST imap-2007f.tar.Z 2793529 BLAKE2B f5b597551ef56d284180cd49cf6b7d01a63ee60bcb513a354bd7ec63428184b854e3ea666a9f3ce1f5b27699cf81d2f1d0e66e5cfc7fee93d723bb146d113ec7 SHA512 2c728deaf66d23158c61ae55ff94f05d2a1cf0168002760321ca30c6ee1c58c0a4c7bc14ece0097ea662df6c7c49be3b91c8e5e943724c9e2736800fa9298dae
DIST uw-imap_2007f~dfsg-7.debian.tar.xz 44960 BLAKE2B 836dfd9a5922cd3043278a89c87276c974c8e91c5831a94caef6e73b2839d246bda879f67bdad88ae59888b5dc8b6ca366aa48b6d197508cd10cdc68f1e7027f SHA512 3a903062c782c942d4c7a1122be686e301ea4d4c6f6ff1dbc78ae29c7ee7b8e02fb25a903401e6a7047ddccaf6bcceba953f6cad1c1890cd6410ea909b014af6
-EBUILD c-client-2007f-r8.ebuild 4676 BLAKE2B cc3dc39196b1063657e66ac55252c010f0a89b6ea0384f19a85eb969fc2202f627828fb47b3e12a2b216d18351626fcc3d0c984596e2f9e34255669a0f7939f7 SHA512 62589b49d08e28033e598916a2d21b6aff11a759103fce6ba66ee6e1c89a16a1fd9ea49c40c7d16fda76a15c7c883fce1a1786896a20285fb3b4c001168bed80
+EBUILD c-client-2007f_p7-r1.ebuild 4724 BLAKE2B 0d4de4528a4f3e445a448d4bfe3acfd6a913b267ba8c9c260677ee28172d5e9b78f292e8614b50ac6cd4062ab9ad9bf5a782d69aa9762a56d8448ada1f8829f5 SHA512 fe1c21f6ec67bd08fc671b4a4e287984f909241b8cc9fa8e60cb5888bbb152d53d5f8e9ea75bca8021c5cc71e3f64efd94d245c07005bcf4556568ad0123245f
EBUILD c-client-2007f_p7.ebuild 4668 BLAKE2B 7fd9a91b7f6cb4369dad6f42f4e54622173620319eadebc037845567af4711da061ec4384f227c1f55115040cee713ff3c58c809c254fec56c69f728ec8687a7 SHA512 1f57b5612b8e3508a804b025cc292bb00b32b0b46eb9d238ce9ad574618c35787c3443205de123fa915d24b51eaa6dc50c1275ece76dc9ef646f12f4a8af6425
-MISC metadata.xml 481 BLAKE2B c10dea9f32197ea0f48c7d4c4de5d082640bbb424be1e8e371668bcaebfdbd878b21dbe1a43dda5d347f186874c119047485f27ea067495f2eb2d7fa7fbbdb5d SHA512 b153757f61ebba9aa79b1a57b52e3c5e7a3299c17f9ccb2b0f815b2799469c5b29dd4a598f923f9037c6804175f2014c2ec3803cd092a9b21f470b0e5e764c53
+MISC metadata.xml 343 BLAKE2B ff46114428405223982890d15ca8976a905ea862a935f56fc1ad7ebd8db8ea18e29a562eb73e1d128b6600986b691b64741222240e5a53e623647700703d27d2 SHA512 efd8320e3a9d5e1b3a4dc98481a6702768b122cdbc15ce5d0a726530e1efaf9497644d0368dd6c029304f6f728b1484341841c68adb295b45fd88c5979e52ac4
diff --git a/net-libs/c-client/c-client-2007f-r8.ebuild b/net-libs/c-client/c-client-2007f_p7-r1.ebuild
index 06e401fea14c..86326216c2a7 100644
--- a/net-libs/c-client/c-client-2007f-r8.ebuild
+++ b/net-libs/c-client/c-client-2007f_p7-r1.ebuild
@@ -1,4 +1,4 @@
-# Copyright 1999-2022 Gentoo Authors
+# Copyright 1999-2024 Gentoo Authors
# Distributed under the terms of the GNU General Public License v2
EAPI=8
@@ -7,22 +7,23 @@ inherit flag-o-matic libtool toolchain-funcs
MY_PN=imap
MY_P="${MY_PN}-${PV}"
-S=${WORKDIR}/${MY_P}
-CHAPPA_PL=115
DESCRIPTION="UW IMAP c-client library"
HOMEPAGE="http://www.washington.edu/imap/"
-SRC_URI="ftp://ftp.cac.washington.edu/imap/${MY_P}.tar.Z
- chappa? ( mirror://gentoo/${P}-chappa-${CHAPPA_PL}-all.patch.gz )"
+SRC_URI="
+ ftp://ftp.cac.washington.edu/imap/${MY_PN}-$(ver_cut 1-2).tar.Z
+ mirror://debian/pool/main/u/uw-${MY_PN}/uw-${MY_PN}_${PV/_p/"~dfsg-"}.debian.tar.xz
+"
+S="${WORKDIR}"/${MY_PN}-$(ver_cut 1-2)
LICENSE="Apache-2.0"
SLOT="0"
KEYWORDS="~alpha amd64 arm arm64 ~hppa ~loong ~mips ppc ppc64 ~riscv ~s390 sparc x86"
-IUSE="doc +ipv6 kerberos pam ssl static-libs topal chappa"
+IUSE="doc +ipv6 kerberos pam ssl static-libs topal"
RDEPEND="
ssl? (
- dev-libs/openssl:0=
+ dev-libs/openssl:=
)
kernel_linux? (
pam? ( >=sys-libs/pam-0.72 )
@@ -33,36 +34,34 @@ RDEPEND="
DEPEND="${RDEPEND}"
PATCHES=(
+ "${WORKDIR}"/debian/patches
+
# Apply a patch to only build the stuff we need for c-client
"${FILESDIR}/${PN}-2006k_GENTOO_Makefile.patch"
# Apply patch to add the compilation of a .so for PHP
# This was previously conditional, but is more widely useful.
- "${FILESDIR}/${PN}-2006k_GENTOO_amd64-so-fix.patch"
+ "${FILESDIR}/${PN}-2007f_GENTOO_amd64-so-fix.patch"
# Respect LDFLAGS
- "${FILESDIR}/${PN}-2007f-ldflags.patch"
-
- # openssl-1.1 build fix #647616
- "${FILESDIR}/${PN}-2007f-openssl-1.1.patch"
+ "${FILESDIR}/${PN}-2007f_p7-ldflags.patch"
# build fix for -Werror=implicit-function-declaration and
- # incompatible function pointer types, bug #870478
- "${FILESDIR}/${PN}-2007f-implicit-declaration-fix.patch"
+ # incompatible function pointer types, bug #870478 and bug #919252
"${FILESDIR}/${PN}-2007f-scandir-callback-types.patch"
+ "${FILESDIR}/${PN}-2007f_p7-implicit-declaration-fix.patch"
+ "${FILESDIR}/${PN}-2007f_p7-c99.patch"
)
src_prepare() {
- use topal && PATCHES+=( "${FILESDIR}/${P}-topal.patch" )
+ use topal && PATCHES+=( "${FILESDIR}/${PN}-2007f-topal.patch" )
default
- use chappa && eapply -p2 "${WORKDIR}/${P}-chappa-${CHAPPA_PL}-all.patch"
-
# Tarball packed with bad file perms
chmod -R u+rwX,go-w . || die "failed to fix permissions"
- # lots of things need -fPIC, including various platforms, and this library
+ # Lots of things need -fPIC, including various platforms, and this library
# generally should be built with it anyway.
append-flags -fPIC
@@ -96,27 +95,38 @@ src_prepare() {
-i src/osdep/unix/Makefile \
|| die "failed to fix build flags support in the Makefile"
+ sed -i -e "s:krb5-config.mit:krb5-config:" src/osdep/unix/Makefile.gss || die
+
elibtoolize
}
src_compile() {
- local mymake ipver ssltype target passwdtype
- ipver='IP=4'
+ local mymake target passwdtype
+
+ local ipver='IP=4'
if use ipv6 ; then
ipver="IP=6"
touch ip6 || die "failed to create ip6 file"
fi
- use ssl && ssltype="unix" || ssltype="none"
+
+ local ssltype="none"
+ if use ssl ; then
+ ssltype="unix"
+ fi
+
if use kernel_linux ; then
# Fall back to "slx" when USE=pam is not set. This ensures that
# we link in libcrypt to get the crypt() routine (bug #456928).
- use pam && target=lnp passwdtype=pam || target=slx passwdtype=std
+ use pam && target=lnps passwdtype=pam || target=slx passwdtype=std
fi
- use kerberos \
- && mymake="EXTRAAUTHENTICATORS=gss" \
- && EXTRALIBS="-lgssapi_krb5 -lkrb5 -lk5crypto -lcom_err" \
- # no parallel builds supported!
- emake -j1 SSLTYPE=${ssltype} $target \
+
+ if use kerberos ; then
+ mymake="EXTRAAUTHENTICATORS=gss"
+ EXTRALIBS="-lgssapi_krb5 -lkrb5 -lk5crypto -lcom_err"
+ fi
+
+ emake -j1 \
+ SSLTYPE=${ssltype} ${target} \
PASSWDTYPE=${passwdtype} ${ipver} ${mymake} \
EXTRACFLAGS="${CFLAGS}" \
EXTRALDFLAGS="${LDFLAGS}" \
diff --git a/net-libs/c-client/files/c-client-2007f_p7-c99.patch b/net-libs/c-client/files/c-client-2007f_p7-c99.patch
new file mode 100644
index 000000000000..4ee62e7d6d1a
--- /dev/null
+++ b/net-libs/c-client/files/c-client-2007f_p7-c99.patch
@@ -0,0 +1,791 @@
+https://bugs.gentoo.org/919252#c9
+--- a/src/osdep/unix/mbx.c
++++ b/src/osdep/unix/mbx.c
+@@ -209,7 +209,7 @@
+ off_t pos;
+ char c,*s,*t,hdr[HDRSIZE];
+ struct stat sbuf;
+- time_t tp[2];
++ struct utimbuf tp;
+ int error = EINVAL; /* assume invalid argument */
+ if (ld) *ld = -1; /* initially no lock */
+ if ((s = mbx_file (tmp,name)) && !stat (s,&sbuf) &&
+@@ -298,9 +298,9 @@
+ else lseek (fd,0,L_SET); /* else rewind to start */
+ /* \Marked status? */
+ if (sbuf.st_ctime > sbuf.st_atime) {
+- tp[0] = sbuf.st_atime; /* preserve atime and mtime */
+- tp[1] = sbuf.st_mtime;
+- utime (tmp,tp); /* set the times */
++ tp.actime = sbuf.st_atime; /* preserve atime and mtime */
++ tp.modtime = sbuf.st_mtime;
++ utime (tmp,&tp); /* set the times */
+ }
+ }
+ /* in case INBOX but not mbx format */
+@@ -759,22 +759,22 @@
+
+ void mbx_flag (MAILSTREAM *stream,char *sequence,char *flag,long flags)
+ {
+- time_t tp[2];
++ struct utimbuf tp;
+ struct stat sbuf;
+ unsigned long oldpid = LOCAL->lastpid;
+ /* make sure the update takes */
+ if (!stream->rdonly && LOCAL && (LOCAL->fd >= 0) && (LOCAL->ld >= 0)) {
+ fsync (LOCAL->fd);
+ fstat (LOCAL->fd,&sbuf); /* get current write time */
+- tp[1] = LOCAL->filetime = sbuf.st_mtime;
++ tp.modtime = LOCAL->filetime = sbuf.st_mtime;
+ /* we are the last flag updater */
+ LOCAL->lastpid = (unsigned long) getpid ();
+ /* update header if needed */
+ if (((LOCAL->ffuserflag < NUSERFLAGS) &&
+ stream->user_flags[LOCAL->ffuserflag]) || (oldpid != LOCAL->lastpid))
+ mbx_update_header (stream);
+- tp[0] = time (0); /* make sure read comes after all that */
+- utime (stream->mailbox,tp);
++ tp.actime = time (0); /* make sure read comes after all that */
++ utime (stream->mailbox,&tp);
+ }
+ if (LOCAL->ld >= 0) { /* unlock now */
+ unlockfd (LOCAL->ld,LOCAL->lock);
+@@ -984,7 +984,7 @@
+ long mbx_copy (MAILSTREAM *stream,char *sequence,char *mailbox,long options)
+ {
+ struct stat sbuf;
+- time_t tp[2];
++ struct utimbuf tp;
+ MESSAGECACHE *elt;
+ unsigned long i,j,k,m;
+ long ret = LONGT;
+@@ -1069,11 +1069,11 @@
+ mail_free_searchset (&source);
+ mail_free_searchset (&dest);
+ }
+- if (ret) tp[0] = time (0) - 1;/* set atime to now-1 if successful copy */
++ if (ret) tp.actime = time (0) - 1;/* set atime to now-1 if successful copy */
+ /* else preserve \Marked status */
+- else tp[0] = (sbuf.st_ctime > sbuf.st_atime) ? sbuf.st_atime : time(0);
+- tp[1] = sbuf.st_mtime; /* preserve mtime */
+- utime (file,tp); /* set the times */
++ else tp.actime = (sbuf.st_ctime > sbuf.st_atime) ? sbuf.st_atime : time(0);
++ tp.modtime = sbuf.st_mtime; /* preserve mtime */
++ utime (file,&tp); /* set the times */
+ close (fd); /* close the file */
+ MM_NOCRITICAL (stream); /* release critical */
+ unlockfd (ld,lock); /* release exclusive parse/append permission */
+@@ -1105,7 +1105,7 @@
+ struct stat sbuf;
+ int fd,ld;
+ char *flags,*date,tmp[MAILTMPLEN],file[MAILTMPLEN],lock[MAILTMPLEN];
+- time_t tp[2];
++ struct utimbuf tp;
+ FILE *df;
+ MESSAGECACHE elt;
+ long f;
+@@ -1207,11 +1207,11 @@
+ }
+ else mail_free_searchset (&dst);
+ /* set atime to now-1 if successful copy */
+- if (ret) tp[0] = time (0) - 1;
++ if (ret) tp.actime = time (0) - 1;
+ /* else preserve \Marked status */
+- else tp[0] = (sbuf.st_ctime > sbuf.st_atime) ? sbuf.st_atime : time(0);
+- tp[1] = sbuf.st_mtime; /* preserve mtime */
+- utime (file,tp); /* set the times */
++ else tp.actime = (sbuf.st_ctime > sbuf.st_atime) ? sbuf.st_atime : time(0);
++ tp.modtime = sbuf.st_mtime; /* preserve mtime */
++ utime (file,&tp); /* set the times */
+ fclose (df); /* close the file */
+ MM_NOCRITICAL (dstream); /* release critical */
+ }
+@@ -1441,10 +1441,10 @@
+ fstat (LOCAL->fd,&sbuf); /* get status again to ensure time is right */
+ LOCAL->filetime = sbuf.st_mtime;
+ if (added && !stream->rdonly){/* make sure atime updated */
+- time_t tp[2];
+- tp[0] = time (0);
+- tp[1] = LOCAL->filetime;
+- utime (stream->mailbox,tp);
++ struct utimbuf tp;
++ tp.actime = time (0);
++ tp.modtime = LOCAL->filetime;
++ utime (stream->mailbox,&tp);
+ }
+ stream->silent = silent; /* can pass up events now */
+ mail_exists (stream,nmsgs); /* notify upper level of new mailbox size */
+@@ -1691,7 +1691,7 @@
+ unsigned long mbx_rewrite (MAILSTREAM *stream,unsigned long *reclaimed,
+ long flags)
+ {
+- time_t tp[2];
++ struct utimbuf tp;
+ struct stat sbuf;
+ off_t pos,ppos;
+ int ld;
+@@ -1810,9 +1810,9 @@
+ fsync (LOCAL->fd); /* force disk update */
+ }
+ fstat (LOCAL->fd,&sbuf); /* get new write time */
+- tp[1] = LOCAL->filetime = sbuf.st_mtime;
+- tp[0] = time (0); /* reset atime to now */
+- utime (stream->mailbox,tp);
++ tp.modtime = LOCAL->filetime = sbuf.st_mtime;
++ tp.actime = time (0); /* reset atime to now */
++ utime (stream->mailbox,&tp);
+ unlockfd (ld,lock); /* release exclusive parse/append permission */
+ /* notify upper level of new mailbox size */
+ mail_exists (stream,stream->nmsgs);
+--- a/src/osdep/unix/mh.c
++++ b/src/osdep/unix/mh.c
+@@ -1276,8 +1276,8 @@
+
+ void mh_setdate (char *file,MESSAGECACHE *elt)
+ {
+- time_t tp[2];
+- tp[0] = time (0); /* atime is now */
+- tp[1] = mail_longdate (elt); /* modification time */
+- utime (file,tp); /* set the times */
++ struct utimbuf tp;
++ tp.actime = time (0); /* atime is now */
++ tp.modtime = mail_longdate (elt); /* modification time */
++ utime (file,&tp); /* set the times */
+ }
+--- a/src/osdep/unix/mmdf.c
++++ b/src/osdep/unix/mmdf.c
+@@ -366,7 +366,7 @@
+ int ret = NIL;
+ char *t,file[MAILTMPLEN];
+ struct stat sbuf;
+- time_t tp[2];
++ struct utimbuf tp;
+ errno = EINVAL; /* assume invalid argument */
+ /* must be non-empty file */
+ if ((t = dummy_file (file,name)) && !stat (t,&sbuf)) {
+@@ -377,9 +377,9 @@
+ close (fd); /* close the file */
+ /* \Marked status? */
+ if ((sbuf.st_ctime > sbuf.st_atime) || (sbuf.st_mtime > sbuf.st_atime)) {
+- tp[0] = sbuf.st_atime; /* preserve atime and mtime */
+- tp[1] = sbuf.st_mtime;
+- utime (file,tp); /* set the times */
++ tp.actime = sbuf.st_atime; /* preserve atime and mtime */
++ tp.modtime = sbuf.st_mtime;
++ utime (file,&tp); /* set the times */
+ }
+ }
+ }
+@@ -1024,7 +1024,7 @@
+ int fd;
+ char *s,file[MAILTMPLEN];
+ DOTLOCK lock;
+- time_t tp[2];
++ struct utimbuf tp;
+ unsigned long i,j;
+ MESSAGECACHE *elt;
+ long ret = T;
+@@ -1126,12 +1126,12 @@
+ mail_free_searchset (&source);
+ mail_free_searchset (&dest);
+ }
+- tp[1] = time (0); /* set mtime to now */
+- if (ret) tp[0] = tp[1] - 1; /* set atime to now-1 if successful copy */
+- else tp[0] = /* else preserve \Marked status */
++ tp.modtime = time (0); /* set mtime to now */
++ if (ret) tp.actime = tp.modtime - 1; /* set atime to now-1 if successful copy */
++ else tp.actime = /* else preserve \Marked status */
+ ((sbuf.st_ctime > sbuf.st_atime) || (sbuf.st_mtime > sbuf.st_atime)) ?
+- sbuf.st_atime : tp[1];
+- utime (file,tp); /* set the times */
++ sbuf.st_atime : tp.modtime;
++ utime (file,&tp); /* set the times */
+ mmdf_unlock (fd,NIL,&lock); /* unlock and close mailbox */
+ if (tstream) { /* update last UID if we can */
+ MMDFLOCAL *local = (MMDFLOCAL *) tstream->local;
+@@ -1165,7 +1165,7 @@
+ int fd;
+ unsigned long i;
+ char *flags,*date,buf[BUFLEN],tmp[MAILTMPLEN],file[MAILTMPLEN];
+- time_t tp[2];
++ struct utimbuf tp;
+ FILE *sf,*df;
+ MESSAGECACHE elt;
+ DOTLOCK lock;
+@@ -1279,20 +1279,20 @@
+ }
+ fstat (fd,&sbuf); /* get current file size */
+ rewind (sf);
+- tp[1] = time (0); /* set mtime to now */
++ tp.modtime = time (0); /* set mtime to now */
+ /* write all messages */
+ if (!mmdf_append_msgs (tstream,sf,df,au ? dst : NIL) ||
+ (fflush (df) == EOF) || fsync (fd)) {
+ sprintf (buf,"Message append failed: %s",strerror (errno));
+ MM_LOG (buf,ERROR);
+ ftruncate (fd,sbuf.st_size);
+- tp[0] = /* preserve \Marked status */
++ tp.actime = /* preserve \Marked status */
+ ((sbuf.st_ctime > sbuf.st_atime) || (sbuf.st_mtime > sbuf.st_atime)) ?
+- sbuf.st_atime : tp[1];
++ sbuf.st_atime : tp.modtime;
+ ret = NIL; /* return error */
+ }
+- else tp[0] = tp[1] - 1; /* set atime to now-1 if successful copy */
+- utime (file,tp); /* set the times */
++ else tp.actime = tp.modtime - 1; /* set atime to now-1 if successful copy */
++ utime (file,&tp); /* set the times */
+ fclose (sf); /* done with scratch file */
+ /* force UIDVALIDITY assignment now */
+ if (tstream && !tstream->uid_validity) tstream->uid_validity = time (0);
+@@ -1526,31 +1526,31 @@
+ {
+ if (stream) { /* need to muck with times? */
+ struct stat sbuf;
+- time_t tp[2];
++ struct utimbuf tp;
+ time_t now = time (0);
+ fstat (fd,&sbuf); /* get file times */
+ if (LOCAL->ld >= 0) { /* yes, readwrite session? */
+- tp[0] = now; /* set atime to now */
++ tp.actime = now; /* set atime to now */
+ /* set mtime to (now - 1) if necessary */
+- tp[1] = (now > sbuf.st_mtime) ? sbuf.st_mtime : now - 1;
++ tp.modtime = (now > sbuf.st_mtime) ? sbuf.st_mtime : now - 1;
+ }
+ else if (stream->recent) { /* readonly with recent messages */
+ if ((sbuf.st_atime >= sbuf.st_mtime) ||
+ (sbuf.st_atime >= sbuf.st_ctime))
+ /* keep past mtime, whack back atime */
+- tp[0] = (tp[1] = (sbuf.st_mtime < now) ? sbuf.st_mtime : now) - 1;
++ tp.actime = (tp.modtime = (sbuf.st_mtime < now) ? sbuf.st_mtime : now) - 1;
+ else now = 0; /* no time change needed */
+ }
+ /* readonly with no recent messages */
+ else if ((sbuf.st_atime < sbuf.st_mtime) ||
+ (sbuf.st_atime < sbuf.st_ctime)) {
+- tp[0] = now; /* set atime to now */
++ tp.actime = now; /* set atime to now */
+ /* set mtime to (now - 1) if necessary */
+- tp[1] = (now > sbuf.st_mtime) ? sbuf.st_mtime : now - 1;
++ tp.modtime = (now > sbuf.st_mtime) ? sbuf.st_mtime : now - 1;
+ }
+ else now = 0; /* no time change needed */
+ /* set the times, note change */
+- if (now && !utime (stream->mailbox,tp)) LOCAL->filetime = tp[1];
++ if (now && !utime (stream->mailbox,&tp)) LOCAL->filetime = tp.modtime;
+ }
+ flock (fd,LOCK_UN); /* release flock'ers */
+ if (!stream) close (fd); /* close the file if no stream */
+@@ -2238,7 +2238,7 @@
+ MESSAGECACHE *elt;
+ MMDFFILE f;
+ char *s;
+- time_t tp[2];
++ struct utimbuf tp;
+ long ret,flag;
+ unsigned long i,j;
+ unsigned long recent = stream->recent;
+@@ -2391,9 +2391,9 @@
+ mail_exists (stream,stream->nmsgs);
+ mail_recent (stream,recent);
+ /* set atime to now, mtime a second earlier */
+- tp[1] = (tp[0] = time (0)) - 1;
++ tp.modtime = (tp.actime = time (0)) - 1;
+ /* set the times, note change */
+- if (!utime (stream->mailbox,tp)) LOCAL->filetime = tp[1];
++ if (!utime (stream->mailbox,&tp)) LOCAL->filetime = tp.modtime;
+ close (LOCAL->fd); /* close and reopen file */
+ if ((LOCAL->fd = open (stream->mailbox,O_RDWR,
+ (long) mail_parameters (NIL,GET_MBXPROTECTION,NIL)))
+--- a/src/osdep/unix/mtx.c
++++ b/src/osdep/unix/mtx.c
+@@ -172,7 +172,7 @@
+ int ret = NIL;
+ char *s,file[MAILTMPLEN];
+ struct stat sbuf;
+- time_t tp[2];
++ struct utimbuf tp;
+ errno = EINVAL; /* assume invalid argument */
+ /* if file, get its status */
+ if ((s = mtx_file (file,name)) && !stat (s,&sbuf)) {
+@@ -194,9 +194,9 @@
+ close (fd); /* close the file */
+ /* \Marked status? */
+ if (sbuf.st_ctime > sbuf.st_atime) {
+- tp[0] = sbuf.st_atime; /* preserve atime and mtime */
+- tp[1] = sbuf.st_mtime;
+- utime (file,tp); /* set the times */
++ tp.actime = sbuf.st_atime; /* preserve atime and mtime */
++ tp.modtime = sbuf.st_mtime;
++ utime (file,&tp); /* set the times */
+ }
+ }
+ }
+@@ -558,14 +558,14 @@
+
+ void mtx_flag (MAILSTREAM *stream,char *sequence,char *flag,long flags)
+ {
+- time_t tp[2];
++ struct utimbuf tp;
+ struct stat sbuf;
+ if (!stream->rdonly) { /* make sure the update takes */
+ fsync (LOCAL->fd);
+ fstat (LOCAL->fd,&sbuf); /* get current write time */
+- tp[1] = LOCAL->filetime = sbuf.st_mtime;
+- tp[0] = time (0); /* make sure read comes after all that */
+- utime (stream->mailbox,tp);
++ tp.modtime = LOCAL->filetime = sbuf.st_mtime;
++ tp.actime = time (0); /* make sure read comes after all that */
++ utime (stream->mailbox,&tp);
+ }
+ }
+
+@@ -729,7 +729,7 @@
+ long mtx_expunge (MAILSTREAM *stream,char *sequence,long options)
+ {
+ long ret;
+- time_t tp[2];
++ struct utimbuf tp;
+ struct stat sbuf;
+ off_t pos = 0;
+ int ld;
+@@ -832,9 +832,9 @@
+ else MM_LOG ("No messages deleted, so no update needed",(long) NIL);
+ fsync (LOCAL->fd); /* force disk update */
+ fstat (LOCAL->fd,&sbuf); /* get new write time */
+- tp[1] = LOCAL->filetime = sbuf.st_mtime;
+- tp[0] = time (0); /* reset atime to now */
+- utime (stream->mailbox,tp);
++ tp.modtime = LOCAL->filetime = sbuf.st_mtime;
++ tp.actime = time (0); /* reset atime to now */
++ utime (stream->mailbox,&tp);
+ MM_NOCRITICAL (stream); /* release critical */
+ /* notify upper level of new mailbox size */
+ mail_exists (stream,stream->nmsgs);
+@@ -859,7 +859,7 @@
+ long mtx_copy (MAILSTREAM *stream,char *sequence,char *mailbox,long options)
+ {
+ struct stat sbuf;
+- time_t tp[2];
++ struct utimbuf tp;
+ MESSAGECACHE *elt;
+ unsigned long i,j,k;
+ long ret = LONGT;
+@@ -925,11 +925,11 @@
+ MM_LOG (LOCAL->buf,ERROR);
+ ftruncate (fd,sbuf.st_size);
+ }
+- if (ret) tp[0] = time (0) - 1;/* set atime to now-1 if successful copy */
++ if (ret) tp.actime = time (0) - 1;/* set atime to now-1 if successful copy */
+ /* else preserve \Marked status */
+- else tp[0] = (sbuf.st_ctime > sbuf.st_atime) ? sbuf.st_atime : time(0);
+- tp[1] = sbuf.st_mtime; /* preserve mtime */
+- utime (file,tp); /* set the times */
++ else tp.actime = (sbuf.st_ctime > sbuf.st_atime) ? sbuf.st_atime : time(0);
++ tp.modtime = sbuf.st_mtime; /* preserve mtime */
++ utime (file,&tp); /* set the times */
+ close (fd); /* close the file */
+ unlockfd (ld,lock); /* release exclusive parse/append permission */
+ MM_NOCRITICAL (stream); /* release critical */
+@@ -944,9 +944,9 @@
+ if (!stream->rdonly) { /* make sure the update takes */
+ fsync (LOCAL->fd);
+ fstat (LOCAL->fd,&sbuf); /* get current write time */
+- tp[1] = LOCAL->filetime = sbuf.st_mtime;
+- tp[0] = time (0); /* make sure atime remains greater */
+- utime (stream->mailbox,tp);
++ tp.modtime = LOCAL->filetime = sbuf.st_mtime;
++ tp.actime = time (0); /* make sure atime remains greater */
++ utime (stream->mailbox,&tp);
+ }
+ }
+ if (ret && mail_parameters (NIL,GET_COPYUID,NIL))
+@@ -967,7 +967,7 @@
+ struct stat sbuf;
+ int fd,ld,c;
+ char *flags,*date,tmp[MAILTMPLEN],file[MAILTMPLEN],lock[MAILTMPLEN];
+- time_t tp[2];
++ struct utimbuf tp;
+ FILE *df;
+ MESSAGECACHE elt;
+ long f;
+@@ -1058,11 +1058,11 @@
+ }
+ ret = NIL;
+ }
+- if (ret) tp[0] = time (0) - 1;/* set atime to now-1 if successful copy */
++ if (ret) tp.actime = time (0) - 1;/* set atime to now-1 if successful copy */
+ /* else preserve \Marked status */
+- else tp[0] = (sbuf.st_ctime > sbuf.st_atime) ? sbuf.st_atime : time(0);
+- tp[1] = sbuf.st_mtime; /* preserve mtime */
+- utime (file,tp); /* set the times */
++ else tp.actime = (sbuf.st_ctime > sbuf.st_atime) ? sbuf.st_atime : time(0);
++ tp.modtime = sbuf.st_mtime; /* preserve mtime */
++ utime (file,&tp); /* set the times */
+ fclose (df); /* close the file */
+ unlockfd (ld,lock); /* release exclusive parse/append permission */
+ MM_NOCRITICAL (stream); /* release critical */
+@@ -1209,10 +1209,10 @@
+ fstat (LOCAL->fd,&sbuf); /* get status again to ensure time is right */
+ LOCAL->filetime = sbuf.st_mtime;
+ if (added && !stream->rdonly){/* make sure atime updated */
+- time_t tp[2];
+- tp[0] = time (0);
+- tp[1] = LOCAL->filetime;
+- utime (stream->mailbox,tp);
++ struct utimbuf tp;
++ tp.actime = time (0);
++ tp.modtime = LOCAL->filetime;
++ utime (stream->mailbox,&tp);
+ }
+ stream->silent = silent; /* can pass up events now */
+ mail_exists (stream,nmsgs); /* notify upper level of new mailbox size */
+@@ -1287,7 +1287,7 @@
+
+ void mtx_update_status (MAILSTREAM *stream,unsigned long msgno,long syncflag)
+ {
+- time_t tp[2];
++ struct utimbuf tp;
+ struct stat sbuf;
+ MESSAGECACHE *elt = mail_elt (stream,msgno);
+ unsigned long j,k = 0;
+@@ -1310,9 +1310,9 @@
+ if (syncflag) { /* sync if requested */
+ fsync (LOCAL->fd);
+ fstat (LOCAL->fd,&sbuf); /* get new write time */
+- tp[1] = LOCAL->filetime = sbuf.st_mtime;
+- tp[0] = time (0); /* make sure read is later */
+- utime (stream->mailbox,tp);
++ tp.modtime = LOCAL->filetime = sbuf.st_mtime;
++ tp.actime = time (0); /* make sure read is later */
++ utime (stream->mailbox,&tp);
+ }
+ }
+ }
+--- a/src/osdep/unix/mx.c
++++ b/src/osdep/unix/mx.c
+@@ -1280,8 +1280,8 @@
+
+ void mx_setdate (char *file,MESSAGECACHE *elt)
+ {
+- time_t tp[2];
+- tp[0] = time (0); /* atime is now */
+- tp[1] = mail_longdate (elt); /* modification time */
+- utime (file,tp); /* set the times */
++ struct utimbuf tp;
++ tp.actime = time (0); /* atime is now */
++ tp.modtime = mail_longdate (elt); /* modification time */
++ utime (file,&tp); /* set the times */
+ }
+--- a/src/osdep/unix/tenex.c
++++ b/src/osdep/unix/tenex.c
+@@ -179,7 +179,7 @@
+ int ret = NIL;
+ char *s,file[MAILTMPLEN];
+ struct stat sbuf;
+- time_t tp[2];
++ struct utimbuf tp;
+ errno = EINVAL; /* assume invalid argument */
+ /* if file, get its status */
+ if ((s = tenex_file (file,name)) && !stat (s,&sbuf)) {
+@@ -201,9 +201,9 @@
+ close (fd); /* close the file */
+ /* \Marked status? */
+ if (sbuf.st_ctime > sbuf.st_atime) {
+- tp[0] = sbuf.st_atime; /* preserve atime and mtime */
+- tp[1] = sbuf.st_mtime;
+- utime (file,tp); /* set the times */
++ tp.actime = sbuf.st_atime; /* preserve atime and mtime */
++ tp.modtime = sbuf.st_mtime;
++ utime (file,&tp); /* set the times */
+ }
+ }
+ }
+@@ -647,14 +647,14 @@
+
+ void tenex_flag (MAILSTREAM *stream,char *sequence,char *flag,long flags)
+ {
+- time_t tp[2];
++ struct utimbuf tp;
+ struct stat sbuf;
+ if (!stream->rdonly) { /* make sure the update takes */
+ fsync (LOCAL->fd);
+ fstat (LOCAL->fd,&sbuf); /* get current write time */
+- tp[1] = LOCAL->filetime = sbuf.st_mtime;
+- tp[0] = time (0); /* make sure read comes after all that */
+- utime (stream->mailbox,tp);
++ tp.modtime = LOCAL->filetime = sbuf.st_mtime;
++ tp.actime = time (0); /* make sure read comes after all that */
++ utime (stream->mailbox,&tp);
+ }
+ }
+
+@@ -818,7 +818,7 @@
+ long tenex_expunge (MAILSTREAM *stream,char *sequence,long options)
+ {
+ long ret;
+- time_t tp[2];
++ struct utimbuf tp;
+ struct stat sbuf;
+ off_t pos = 0;
+ int ld;
+@@ -922,9 +922,9 @@
+ else MM_LOG ("No messages deleted, so no update needed",(long) NIL);
+ fsync (LOCAL->fd); /* force disk update */
+ fstat (LOCAL->fd,&sbuf); /* get new write time */
+- tp[1] = LOCAL->filetime = sbuf.st_mtime;
+- tp[0] = time (0); /* reset atime to now */
+- utime (stream->mailbox,tp);
++ tp.modtime = LOCAL->filetime = sbuf.st_mtime;
++ tp.actime = time (0); /* reset atime to now */
++ utime (stream->mailbox,&tp);
+ MM_NOCRITICAL (stream); /* release critical */
+ /* notify upper level of new mailbox size */
+ mail_exists (stream,stream->nmsgs);
+@@ -949,7 +949,7 @@
+ long tenex_copy (MAILSTREAM *stream,char *sequence,char *mailbox,long options)
+ {
+ struct stat sbuf;
+- time_t tp[2];
++ struct utimbuf tp;
+ MESSAGECACHE *elt;
+ unsigned long i,j,k;
+ long ret = LONGT;
+@@ -1015,11 +1015,11 @@
+ MM_LOG (LOCAL->buf,ERROR);
+ ftruncate (fd,sbuf.st_size);
+ }
+- if (ret) tp[0] = time (0) - 1;/* set atime to now-1 if successful copy */
++ if (ret) tp.actime = time (0) - 1;/* set atime to now-1 if successful copy */
+ /* else preserve \Marked status */
+- else tp[0] = (sbuf.st_ctime > sbuf.st_atime) ? sbuf.st_atime : time(0);
+- tp[1] = sbuf.st_mtime; /* preserve mtime */
+- utime (file,tp); /* set the times */
++ else tp.actime = (sbuf.st_ctime > sbuf.st_atime) ? sbuf.st_atime : time(0);
++ tp.modtime = sbuf.st_mtime; /* preserve mtime */
++ utime (file,&tp); /* set the times */
+ close (fd); /* close the file */
+ unlockfd (ld,lock); /* release exclusive parse/append permission */
+ MM_NOCRITICAL (stream); /* release critical */
+@@ -1034,9 +1034,9 @@
+ if (!stream->rdonly) { /* make sure the update takes */
+ fsync (LOCAL->fd);
+ fstat (LOCAL->fd,&sbuf); /* get current write time */
+- tp[1] = LOCAL->filetime = sbuf.st_mtime;
+- tp[0] = time (0); /* make sure atime remains greater */
+- utime (stream->mailbox,tp);
++ tp.modtime = LOCAL->filetime = sbuf.st_mtime;
++ tp.actime = time (0); /* make sure atime remains greater */
++ utime (stream->mailbox,&tp);
+ }
+ }
+ if (ret && mail_parameters (NIL,GET_COPYUID,NIL))
+@@ -1057,7 +1057,7 @@
+ struct stat sbuf;
+ int fd,ld,c;
+ char *flags,*date,tmp[MAILTMPLEN],file[MAILTMPLEN],lock[MAILTMPLEN];
+- time_t tp[2];
++ struct utimbuf tp;
+ FILE *df;
+ MESSAGECACHE elt;
+ long f;
+@@ -1155,11 +1155,11 @@
+ }
+ ret = NIL;
+ }
+- if (ret) tp[0] = time (0) - 1;/* set atime to now-1 if successful copy */
++ if (ret) tp.actime = time (0) - 1;/* set atime to now-1 if successful copy */
+ /* else preserve \Marked status */
+- else tp[0] = (sbuf.st_ctime > sbuf.st_atime) ? sbuf.st_atime : time(0);
+- tp[1] = sbuf.st_mtime; /* preserve mtime */
+- utime (file,tp); /* set the times */
++ else tp.actime = (sbuf.st_ctime > sbuf.st_atime) ? sbuf.st_atime : time(0);
++ tp.modtime = sbuf.st_mtime; /* preserve mtime */
++ utime (file,&tp); /* set the times */
+ fclose (df); /* close the file */
+ unlockfd (ld,lock); /* release exclusive parse/append permission */
+ MM_NOCRITICAL (stream); /* release critical */
+@@ -1321,10 +1321,10 @@
+ fstat (LOCAL->fd,&sbuf); /* get status again to ensure time is right */
+ LOCAL->filetime = sbuf.st_mtime;
+ if (added && !stream->rdonly){/* make sure atime updated */
+- time_t tp[2];
+- tp[0] = time (0);
+- tp[1] = LOCAL->filetime;
+- utime (stream->mailbox,tp);
++ struct utimbuf tp;
++ tp.actime = time (0);
++ tp.modtime = LOCAL->filetime;
++ utime (stream->mailbox,&tp);
+ }
+ stream->silent = silent; /* can pass up events now */
+ mail_exists (stream,nmsgs); /* notify upper level of new mailbox size */
+@@ -1399,7 +1399,7 @@
+
+ void tenex_update_status (MAILSTREAM *stream,unsigned long msgno,long syncflag)
+ {
+- time_t tp[2];
++ struct utimbuf tp;
+ struct stat sbuf;
+ MESSAGECACHE *elt = mail_elt (stream,msgno);
+ unsigned long j,k = 0;
+@@ -1422,9 +1422,9 @@
+ if (syncflag) { /* sync if requested */
+ fsync (LOCAL->fd);
+ fstat (LOCAL->fd,&sbuf); /* get new write time */
+- tp[1] = LOCAL->filetime = sbuf.st_mtime;
+- tp[0] = time (0); /* make sure read is later */
+- utime (stream->mailbox,tp);
++ tp.modtime = LOCAL->filetime = sbuf.st_mtime;
++ tp.actime = time (0); /* make sure read is later */
++ utime (stream->mailbox,&tp);
+ }
+ }
+ }
+--- a/src/osdep/unix/unix.c
++++ b/src/osdep/unix/unix.c
+@@ -214,7 +214,7 @@
+ DRIVER *ret = NIL;
+ char *t,file[MAILTMPLEN];
+ struct stat sbuf;
+- time_t tp[2];
++ struct utimbuf tp;
+ errno = EINVAL; /* assume invalid argument */
+ /* must be non-empty file */
+ if ((t = dummy_file (file,name)) && !stat (t,&sbuf)) {
+@@ -226,9 +226,9 @@
+ close (fd); /* close the file */
+ /* \Marked status? */
+ if ((sbuf.st_ctime > sbuf.st_atime) || (sbuf.st_mtime > sbuf.st_atime)) {
+- tp[0] = sbuf.st_atime; /* yes, preserve atime and mtime */
+- tp[1] = sbuf.st_mtime;
+- utime (file,tp); /* set the times */
++ tp.actime = sbuf.st_atime; /* yes, preserve atime and mtime */
++ tp.modtime = sbuf.st_mtime;
++ utime (file,&tp); /* set the times */
+ }
+ }
+ }
+@@ -884,7 +884,7 @@
+ int fd;
+ char *s,file[MAILTMPLEN];
+ DOTLOCK lock;
+- time_t tp[2];
++ struct utimbuf tp;
+ unsigned long i,j;
+ MESSAGECACHE *elt;
+ long ret = T;
+@@ -990,12 +990,12 @@
+ mail_free_searchset (&source);
+ mail_free_searchset (&dest);
+ }
+- tp[1] = time (0); /* set mtime to now */
+- if (ret) tp[0] = tp[1] - 1; /* set atime to now-1 if successful copy */
+- else tp[0] = /* else preserve \Marked status */
++ tp.modtime = time (0); /* set mtime to now */
++ if (ret) tp.actime = tp.modtime - 1; /* set atime to now-1 if successful copy */
++ else tp.actime = /* else preserve \Marked status */
+ ((sbuf.st_ctime > sbuf.st_atime) || (sbuf.st_mtime > sbuf.st_atime)) ?
+- sbuf.st_atime : tp[1];
+- utime (file,tp); /* set the times */
++ sbuf.st_atime : tp.modtime;
++ utime (file,&tp); /* set the times */
+ unix_unlock (fd,NIL,&lock); /* unlock and close mailbox */
+ if (tstream) { /* update last UID if we can */
+ UNIXLOCAL *local = (UNIXLOCAL *) tstream->local;
+@@ -1029,7 +1029,7 @@
+ int fd;
+ unsigned long i;
+ char *flags,*date,buf[BUFLEN],tmp[MAILTMPLEN],file[MAILTMPLEN];
+- time_t tp[2];
++ struct utimbuf tp;
+ FILE *sf,*df;
+ MESSAGECACHE elt;
+ DOTLOCK lock;
+@@ -1143,20 +1143,20 @@
+ }
+ fstat (fd,&sbuf); /* get current file size */
+ rewind (sf);
+- tp[1] = time (0); /* set mtime to now */
++ tp.modtime = time (0); /* set mtime to now */
+ /* write all messages */
+ if (!unix_append_msgs (tstream,sf,df,au ? dst : NIL) ||
+ (fflush (df) == EOF) || fsync (fd)) {
+ sprintf (buf,"Message append failed: %s",strerror (errno));
+ MM_LOG (buf,ERROR);
+ ftruncate (fd,sbuf.st_size);
+- tp[0] = /* preserve \Marked status */
++ tp.actime = /* preserve \Marked status */
+ ((sbuf.st_ctime > sbuf.st_atime) || (sbuf.st_mtime > sbuf.st_atime)) ?
+- sbuf.st_atime : tp[1];
++ sbuf.st_atime : tp.modtime;
+ ret = NIL; /* return error */
+ }
+- else tp[0] = tp[1] - 1; /* set atime to now-1 if successful copy */
+- utime (file,tp); /* set the times */
++ else tp.actime = tp.modtime - 1; /* set atime to now-1 if successful copy */
++ utime (file,&tp); /* set the times */
+ fclose (sf); /* done with scratch file */
+ /* force UIDVALIDITY assignment now */
+ if (tstream && !tstream->uid_validity) tstream->uid_validity = time (0);
+@@ -1397,31 +1397,31 @@
+ {
+ if (stream) { /* need to muck with times? */
+ struct stat sbuf;
+- time_t tp[2];
++ struct utimbuf tp;
+ time_t now = time (0);
+ fstat (fd,&sbuf); /* get file times */
+ if (LOCAL->ld >= 0) { /* yes, readwrite session? */
+- tp[0] = now; /* set atime to now */
++ tp.actime = now; /* set atime to now */
+ /* set mtime to (now - 1) if necessary */
+- tp[1] = (now > sbuf.st_mtime) ? sbuf.st_mtime : now - 1;
++ tp.modtime = (now > sbuf.st_mtime) ? sbuf.st_mtime : now - 1;
+ }
+ else if (stream->recent) { /* readonly with recent messages */
+ if ((sbuf.st_atime >= sbuf.st_mtime) ||
+ (sbuf.st_atime >= sbuf.st_ctime))
+ /* keep past mtime, whack back atime */
+- tp[0] = (tp[1] = (sbuf.st_mtime < now) ? sbuf.st_mtime : now) - 1;
++ tp.actime = (tp.modtime = (sbuf.st_mtime < now) ? sbuf.st_mtime : now) - 1;
+ else now = 0; /* no time change needed */
+ }
+ /* readonly with no recent messages */
+ else if ((sbuf.st_atime < sbuf.st_mtime) ||
+ (sbuf.st_atime < sbuf.st_ctime)) {
+- tp[0] = now; /* set atime to now */
++ tp.actime = now; /* set atime to now */
+ /* set mtime to (now - 1) if necessary */
+- tp[1] = (now > sbuf.st_mtime) ? sbuf.st_mtime : now - 1;
++ tp.modtime = (now > sbuf.st_mtime) ? sbuf.st_mtime : now - 1;
+ }
+ else now = 0; /* no time change needed */
+ /* set the times, note change */
+- if (now && !utime (stream->mailbox,tp)) LOCAL->filetime = tp[1];
++ if (now && !utime (stream->mailbox,&tp)) LOCAL->filetime = tp.modtime;
+ }
+ flock (fd,LOCK_UN); /* release flock'ers */
+ if (!stream) close (fd); /* close the file if no stream */
+@@ -2075,7 +2075,7 @@
+ MESSAGECACHE *elt;
+ UNIXFILE f;
+ char *s;
+- time_t tp[2];
++ struct utimbuf tp;
+ long ret,flag;
+ unsigned long i,j;
+ unsigned long recent = stream->recent;
+@@ -2245,9 +2245,9 @@
+ mail_exists (stream,stream->nmsgs);
+ mail_recent (stream,recent);
+ /* set atime to now, mtime a second earlier */
+- tp[1] = (tp[0] = time (0)) - 1;
++ tp.modtime = (tp.actime = time (0)) - 1;
+ /* set the times, note change */
+- if (!utime (stream->mailbox,tp)) LOCAL->filetime = tp[1];
++ if (!utime (stream->mailbox,&tp)) LOCAL->filetime = tp.modtime;
+ close (LOCAL->fd); /* close and reopen file */
+ if ((LOCAL->fd = open (stream->mailbox,O_RDWR,
+ (long) mail_parameters (NIL,GET_MBXPROTECTION,NIL)))
diff --git a/net-libs/c-client/metadata.xml b/net-libs/c-client/metadata.xml
index 34de49b3c8b9..cfcf9a905324 100644
--- a/net-libs/c-client/metadata.xml
+++ b/net-libs/c-client/metadata.xml
@@ -5,6 +5,5 @@
<use>
<flag name="doc">Install RFCs related to IMAP</flag>
<flag name="topal">Enable support for net-mail/topal for use with <pkg>mail-client/alpine</pkg></flag>
- <flag name="chappa">Enable Eduardo Chappa's patches for use with <pkg>mail-client/alpine</pkg> (mainly adds support for maildir)</flag>
</use>
</pkgmetadata>
diff --git a/net-libs/gnutls/Manifest b/net-libs/gnutls/Manifest
index 539258f7273b..fb336b12288d 100644
--- a/net-libs/gnutls/Manifest
+++ b/net-libs/gnutls/Manifest
@@ -15,6 +15,8 @@ DIST gnutls-3.8.6.tar.xz 6517476 BLAKE2B 58910e252231c02cfaa1183b38f3127f61aa991
DIST gnutls-3.8.6.tar.xz.sig 119 BLAKE2B 044d0e31a5fa402daa73e88ce140f57e30cb143324c7cce1515a3bc6c444fe2f1fa2dd954dec69de09c7b4726766e17ec05410bbbbcf5b35dda1cb0f6452a0a5 SHA512 3f9552cdf5fa96184fbe394dd484fb55e6a3577d1e048aea373b82cda335ea0f174f2fb11926dc58532c1f950cd10a6a35bc36e9fe813a1259eae5c5364920b2
DIST gnutls-3.8.7.1.tar.xz 6695404 BLAKE2B 43334190ce1e45c5302b195f17d06e767d1bea7376278bfbc6ff181a2f57423ba5f334c00ae1833938c7a7a8d15cf607ac862e57435a756ccfa98527d469fd3a SHA512 429cea78e227d838105791b28a18270c3d2418bfb951c322771e6323d5f712204d63d66a6606ce9604a92d236a8dd07d651232c717264472d27eb6de26ddc733
DIST gnutls-3.8.7.1.tar.xz.sig 580 BLAKE2B ca627d7b3f089205c94f556bee9c06428ada9e0116bb50486dc7dd70f611ae744416d96b17452749d102ccd16bf7b400577b1886a7c8be55833c9e2fde85f9ae SHA512 53ebdaa9775ae22f7eb5e7d6f5411ec667c9c880cea84e23651b6d1994fb1398c09d8efa39b21c96f8be29fa09c2436bdd732a061308956ca1650e3e1878ed57
+DIST gnutls-3.8.8.tar.xz 6696460 BLAKE2B d1498b0b9f14789599fd5b984d5370b632611f2702e9f4fc504ddba2a3e0dd4137bec858eb6150d031f9f50e6b3a3a7d905864f0a9f50a1f01e5ea8f37a44ba8 SHA512 4f617c63e8e8392e400d72c9e39989fcd782268b4a4c4e36bbfb0444a4b5bcb0f53054f04a6dce99ab89c0f38f57430c95aaaec6eb9209b8e9329140abf230c3
+DIST gnutls-3.8.8.tar.xz.sig 580 BLAKE2B 11a30f09e3a478615df2c6a0e40c0b9b2aad5794a82ae0cc871fcf3699b5d9725c9d04708c6f0b983da6e21f90a81f7550e723d0d04f97d1a16d526efbe91b1e SHA512 fdff792511e9e5de203a1dfd66bf521c12fb74a19de651ffa1f7359dafdd1dad59ae57d0f95fa363c4167f798e6b624b4ae1f84d4e0737ff690c2fb0e5a5bdce
EBUILD gnutls-3.7.8.ebuild 4504 BLAKE2B 9b3df4b7b680c2efb73182c2309b39f193a769e19d8d20cefa158a7ad4183c5d8fa4e86ab0a2b5d5cc8d47b84d954f66c1554038b22b73b7320ad401a033f543 SHA512 a341655c8b5b5952128099268ffacb17206743398b28b8c8f53cc40be41330c107434af0921fd395ebd375a04d9cdf5e14b0705dd9936972b4349f276c242649
EBUILD gnutls-3.7.9.ebuild 4512 BLAKE2B 9a1dd19f94ec1edf8f1798ffb1b10b485af6450719a15cea1216f0232927dd88dd5c47bd896cebb4e5ccffc04abd9c7c3646948837faadf6056a96b26c7e3eda SHA512 805dab1353b17e40c8dfabbe551a66e80138deb0d76249cf3838d8197def7038572d96b275b3934c09b5d01cbb42cfcdbf20adea16b4259c7c3ffaf24a7f3b64
EBUILD gnutls-3.8.0.ebuild 4561 BLAKE2B 4399f737cc5d91a608e734da1e0cf2d105f5e64f5f7d1b37c27c4a26facad5210d3c537a87e01765a1a6d8153f7db967a1453a67efb64634b562606646942863 SHA512 31faf9beaa6d9dea7d10a0db71c32a9c0fd437aab085a3f6f4e62555c8dfddb332128ce03a9563537d1e749c17d8a9a5720d30acba5ae5bd70a3a91cca17dc2c
@@ -22,4 +24,5 @@ EBUILD gnutls-3.8.3.ebuild 4677 BLAKE2B be3fc934a9679240d0204241454ae0e645a06cb4
EBUILD gnutls-3.8.5-r1.ebuild 4825 BLAKE2B d327eaaa3df3504c1e3d259bf08ec33add92031d64f03777316cc79cb8815a842a080178c103b64661c5072ef788cb0a0df8e9881faba9e04570e56f751f4f63 SHA512 801a48ee7391e2b566187f65c69d889e60fe4ef75e2b86fed335cc518cfc47b263bc2dd729a3b395909fa494c8fe7e71624bb73efe0db418465113643b58af1c
EBUILD gnutls-3.8.6-r1.ebuild 4975 BLAKE2B 876c25994a237a7cf7350cd55b6c6d24e3b8e612fa831565304bf2e40a3e1f9bdb17aba551f3451c6ed6af20411de537b31fd56ae70b607fb5e1b2c64972f4a8 SHA512 1c78635487921a1cb78fad16600db3856738bd58424c4227a12aa86980c5b03ef88c50fb148ad970e039b773955768a65504d6e0cb62c17ddfc6b4bf557ca78a
EBUILD gnutls-3.8.7.1-r1.ebuild 5216 BLAKE2B d135031bcfa83717d332fef0696a5448b9c04eef8991715f659d42934b363e939e5a2c93cacfb697fe1391590c94eef4c0cc020c76ba2aa27be3760a032d7988 SHA512 98205166b666c1350404fc5874ba33a1b22136b4e7f866c1f71f6fe44603be0fe9ffa39b5522584973871aa26d45351be2176409d17b7720e85e950bc4ccde32
+EBUILD gnutls-3.8.8.ebuild 5118 BLAKE2B bdc3e7b07870db0ed9b2bc264fcc6d00c187dcb41c06d643dd2ffb4207ae23ccda16c777302518e9c7121760943680de2aac1dcf9c207f1ddd28471abbe312cd SHA512 2033a7c08179687b674b74eeccc87c332cd3d44ce8dbee917e45fcebc2fa71bf43f27f579cad1a3d06ea5f27b97df05baf027fb5374b27c577d0b2b3307686b0
MISC metadata.xml 1181 BLAKE2B 9902770b982d606070b2e34452bd732385f9abdca7ffc89b1a3bcfce9ab471fbd35f87c7fd3aeb610046e50eec13f64ee80d1093f3f9853ec8ecf35521129766 SHA512 b910b2087b83e2dafe3093be4b0d942e2f728b62aa4b3cd8101f681d51752f84b961c8524896cd13d853b96eb5f62f74b7d30edbe84fa42a260eac9e263efcf8
diff --git a/net-libs/gnutls/gnutls-3.8.8.ebuild b/net-libs/gnutls/gnutls-3.8.8.ebuild
new file mode 100644
index 000000000000..fe1458fb6328
--- /dev/null
+++ b/net-libs/gnutls/gnutls-3.8.8.ebuild
@@ -0,0 +1,163 @@
+# Copyright 1999-2024 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+VERIFY_SIG_OPENPGP_KEY_PATH=/usr/share/openpgp-keys/gnutls.asc
+inherit autotools multilib-minimal verify-sig
+
+DESCRIPTION="A secure communications library implementing the SSL, TLS and DTLS protocols"
+HOMEPAGE="https://www.gnutls.org/"
+SRC_URI="mirror://gnupg/gnutls/v$(ver_cut 1-2)/${P}.tar.xz"
+SRC_URI+=" verify-sig? ( mirror://gnupg/gnutls/v$(ver_cut 1-2)/${P}.tar.xz.sig )"
+if [[ ${PV} == 3.8.7.1 ]] ; then
+ # Workaround for botched dist tarball
+ S="${WORKDIR}"/gnutls-3.8.7
+fi
+
+LICENSE="GPL-3 LGPL-2.1+"
+# As of 3.8.0, the C++ library is header-only, but we won't drop the subslot
+# component for it until libgnutls.so breaks ABI, to avoid pointless rebuilds.
+# Subslot format:
+# <libgnutls.so number>.<libgnutlsxx.so number>
+SLOT="0/30.30"
+KEYWORDS="~alpha ~amd64 ~arm ~arm64 ~hppa ~loong ~m68k ~mips ~ppc ~ppc64 ~riscv ~s390 ~sparc ~x86 ~amd64-linux ~x86-linux ~arm64-macos ~ppc-macos ~x64-macos ~x64-solaris"
+IUSE="brotli +cxx dane doc examples +idn nls +openssl pkcs11 seccomp sslv2 sslv3 static-libs test test-full +tls-heartbeat tools zlib zstd"
+REQUIRED_USE="test-full? ( cxx dane doc examples idn nls openssl pkcs11 seccomp tls-heartbeat tools )"
+RESTRICT="!test? ( test )"
+
+# >=nettle-3.10 as a workaround for bug #936011
+RDEPEND="
+ >=dev-libs/libtasn1-4.9:=[${MULTILIB_USEDEP}]
+ dev-libs/libunistring:=[${MULTILIB_USEDEP}]
+ >=dev-libs/nettle-3.10:=[gmp,${MULTILIB_USEDEP}]
+ >=dev-libs/gmp-5.1.3-r1:=[${MULTILIB_USEDEP}]
+ brotli? ( >=app-arch/brotli-1.0.0:=[${MULTILIB_USEDEP}] )
+ dane? ( >=net-dns/unbound-1.4.20:=[${MULTILIB_USEDEP}] )
+ nls? ( >=virtual/libintl-0-r1:=[${MULTILIB_USEDEP}] )
+ pkcs11? ( >=app-crypt/p11-kit-0.23.1[${MULTILIB_USEDEP}] )
+ idn? ( >=net-dns/libidn2-0.16-r1:=[${MULTILIB_USEDEP}] )
+ zlib? ( sys-libs/zlib[${MULTILIB_USEDEP}] )
+ zstd? ( >=app-arch/zstd-1.3.0:=[${MULTILIB_USEDEP}] )
+"
+DEPEND="
+ ${RDEPEND}
+ test? (
+ seccomp? ( sys-libs/libseccomp )
+ )
+"
+BDEPEND="
+ dev-build/gtk-doc-am
+ >=virtual/pkgconfig-0-r1
+ doc? ( dev-util/gtk-doc )
+ nls? ( sys-devel/gettext )
+ test-full? (
+ app-crypt/dieharder
+ || ( sys-libs/libfaketime >=app-misc/datefudge-1.22 )
+ dev-libs/softhsm:2[-bindist(-)]
+ net-dialup/ppp
+ net-misc/socat
+ )
+ verify-sig? ( >=sec-keys/openpgp-keys-gnutls-20240415 )
+"
+
+DOCS=( README.md doc/certtool.cfg )
+
+HTML_DOCS=()
+
+QA_CONFIG_IMPL_DECL_SKIP=(
+ # gnulib FPs
+ MIN
+ alignof
+ static_assert
+)
+
+src_prepare() {
+ default
+
+ # bug #520818
+ export TZ=UTC
+
+ use doc && HTML_DOCS+=( doc/gnutls.html )
+
+ # don't try to use system certificate store on macOS, it is
+ # confusingly ignoring our ca-certificates and more importantly
+ # fails to compile in certain configurations
+ sed -i -e 's/__APPLE__/__NO_APPLE__/' lib/system/certs.c || die
+
+ # Use sane .so versioning on FreeBSD.
+ #elibtoolize
+
+ # Switch back to elibtoolize after 3.8.7.1
+ eautoreconf
+}
+
+multilib_src_configure() {
+ LINGUAS="${LINGUAS//en/en@boldquot en@quot}"
+
+ local libconf=()
+
+ # TPM needs to be tested before being enabled
+ # Note that this may add a libltdl dep when enabled. Check configure.ac.
+ libconf+=(
+ --without-tpm
+ --without-tpm2
+ )
+
+ # hardware-accel is disabled on OSX because the asm files force
+ # GNU-stack (as doesn't support that) and when that's removed ld
+ # complains about duplicate symbols
+ [[ ${CHOST} == *-darwin* ]] && libconf+=( --disable-hardware-acceleration )
+
+ # -fanalyzer substantially slows down the build and isn't useful for
+ # us. It's useful for upstream as it's static analysis, but it's not
+ # useful when just getting something built.
+ export gl_cv_warn_c__fanalyzer=no
+
+ local myeconfargs=(
+ --disable-valgrind-tests
+ $(multilib_native_enable manpages)
+ $(multilib_native_use_enable doc gtk-doc)
+ $(multilib_native_use_enable doc)
+ $(multilib_native_use_enable seccomp seccomp-tests)
+ $(multilib_native_use_enable test tests)
+ $(multilib_native_use_enable test-full full-test-suite)
+ $(multilib_native_use_enable tools)
+ $(use_enable cxx)
+ $(use_enable dane libdane)
+ $(use_enable nls)
+ $(use_enable openssl openssl-compatibility)
+ $(use_enable sslv2 ssl2-support)
+ $(use_enable sslv3 ssl3-support)
+ $(use_enable static-libs static)
+ $(use_enable tls-heartbeat heartbeat-support)
+ $(use_with brotli)
+ $(use_with idn)
+ $(use_with pkcs11 p11-kit)
+ $(use_with zlib)
+ $(use_with zstd)
+ --disable-rpath
+ --with-default-trust-store-file="${EPREFIX}"/etc/ssl/certs/ca-certificates.crt
+ --with-unbound-root-key-file="${EPREFIX}"/etc/dnssec/root-anchors.txt
+ --without-included-libtasn1
+ $("${S}/configure" --help | grep -o -- '--without-.*-prefix')
+ )
+
+ ECONF_SOURCE="${S}" econf "${libconf[@]}" "${myeconfargs[@]}"
+
+ if [[ ${CHOST} == *-solaris* ]] ; then
+ # gnulib ends up defining its own pthread_mutexattr_gettype
+ # otherwise, which is causing versioning problems
+ echo "#define PTHREAD_IN_USE_DETECTION_HARD 1" >> config.h || die
+ fi
+}
+
+multilib_src_install_all() {
+ einstalldocs
+ find "${ED}" -type f -name '*.la' -delete || die
+
+ if use examples; then
+ docinto examples
+ dodoc doc/examples/*.c
+ fi
+}