Date: Sat, 3 Oct 2020 08:07:20 +0000 (UTC) From: Alexey Dokuchaev <danfe@FreeBSD.org> To: ports-committers@freebsd.org, svn-ports-all@freebsd.org, svn-ports-head@freebsd.org Subject: svn commit: r551260 - in head/mail/mailutils: . files Message-ID: <202010030807.09387Klu031404@repo.freebsd.org>
next in thread | raw e-mail | index | archive | help
Author: danfe Date: Sat Oct 3 08:07:20 2020 New Revision: 551260 URL: https://svnweb.freebsd.org/changeset/ports/551260 Log: Backport some IMAP-related fixes from the upstream repository. Requested by: maintainer Added: head/mail/mailutils/files/patch-libmailutils_base_amd.c (contents, props changed) head/mail/mailutils/files/patch-libproto_maildir_mbox.c (contents, props changed) Modified: head/mail/mailutils/Makefile Modified: head/mail/mailutils/Makefile ============================================================================== --- head/mail/mailutils/Makefile Sat Oct 3 08:05:56 2020 (r551259) +++ head/mail/mailutils/Makefile Sat Oct 3 08:07:20 2020 (r551260) @@ -3,6 +3,7 @@ PORTNAME= mailutils PORTVERSION= 3.10 +PORTREVISION= 1 CATEGORIES= mail MASTER_SITES= GNU GNU_ALPHA Added: head/mail/mailutils/files/patch-libmailutils_base_amd.c ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ head/mail/mailutils/files/patch-libmailutils_base_amd.c Sat Oct 3 08:07:20 2020 (r551260) @@ -0,0 +1,47 @@ +--- libmailutils/base/amd.c.orig 2020-08-11 05:57:13 UTC ++++ libmailutils/base/amd.c +@@ -254,18 +254,22 @@ amd_msg_bsearch (struct _amd_data *amd, mu_off_t first + mu_off_t mid; + int rc; + +- if (last < first) +- return 1; +- +- mid = (first + last) / 2; +- rc = amd->msg_cmp (amd->msg_array[mid], msg); +- if (rc > 0) +- return amd_msg_bsearch (amd, first, mid-1, msg, pret); +- *pret = mid; +- if (rc < 0) +- return amd_msg_bsearch (amd, mid+1, last, msg, pret); +- /* else */ +- return 0; ++ while (first <= last) ++ { ++ mid = (first + last) / 2; ++ rc = amd->msg_cmp (amd->msg_array[mid], msg); ++ if (rc > 0) ++ last = mid - 1; ++ else ++ { ++ *pret = mid; ++ if (rc < 0) ++ first = mid + 1; ++ else ++ return 0; ++ } ++ } ++ return 1; + } + + /* Search for message MSG in the message array of AMD. +@@ -318,8 +322,7 @@ amd_msg_lookup (struct _amd_data *amd, struct _amd_mes + } + + rc = amd_msg_bsearch (amd, 0, amd->msg_count - 1, msg, &i); +- if (rc == 0) +- *pret = i + 1; ++ *pret = i + 1; + return rc; + } + Added: head/mail/mailutils/files/patch-libproto_maildir_mbox.c ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ head/mail/mailutils/files/patch-libproto_maildir_mbox.c Sat Oct 3 08:07:20 2020 (r551260) @@ -0,0 +1,91 @@ +--- libproto/maildir/mbox.c.orig 2020-05-28 14:03:57 UTC ++++ libproto/maildir/mbox.c +@@ -134,41 +134,67 @@ maildir_name_info_ptr (char *name) + return p + 3; + return NULL; + } +- + ++/* ++ * Compare two maildir messages A and B. The purpose is to determine ++ * which one was delivered prior to another. ++ * ++ * Compare seconds, microseconds and number of deliveries, in that ++ * order. If all match (shouldn't happen), resort to lexicographical ++ * comparison. ++ */ + static int + maildir_message_cmp (struct _amd_message *a, struct _amd_message *b) + { +- char *name_a, *name_b; +- unsigned long na = strtoul (((struct _maildir_message *) a)->file_name, +- &name_a, 10); +- unsigned long nb = strtoul (((struct _maildir_message *) b)->file_name, +- &name_b, 10); +- int rc; ++ char *name_a = ((struct _maildir_message *) a)->file_name; ++ char *name_b = ((struct _maildir_message *) b)->file_name; ++ char *pa, *pb; ++ unsigned long la, lb; ++ int d; + +- if (na > nb) ++ la = strtoul (name_a, &name_a, 10); ++ lb = strtoul (name_b, &name_b, 10); ++ ++ if (la > lb) + return 1; +- if (na < nb) ++ if (la < lb) + return -1; + +- /* If timestamps are equal, compare rests of the filenames up to the +- info marker */ ++ if ((d = (*name_a - *name_b)) != 0) ++ return d; ++ ++ name_a++; ++ name_b++; + +- if (name_a && !name_b) +- return 1; +- else if (!name_a) ++ if ((pa = strchr (name_a, 'M')) != 0 && (pb = strchr (name_b, 'M')) != 0) + { +- if (name_b) ++ la = strtoul (name_a, &name_a, 10); ++ lb = strtoul (name_b, &name_b, 10); ++ ++ if (la > lb) ++ return 1; ++ if (la < lb) + return -1; +- else +- return 0; + } +- ++ ++ if ((pa = strchr (name_a, 'Q')) != 0 && (pb = strchr (name_b, 'Q')) != 0) ++ { ++ la = strtoul (name_a, &name_a, 10); ++ lb = strtoul (name_b, &name_b, 10); ++ ++ if (la > lb) ++ return 1; ++ if (la < lb) ++ return -1; ++ } ++ + for (; *name_a && *name_a != ':' && *name_b && *name_b != ':'; + name_a++, name_b++) +- if ((rc = (*name_a - *name_b))) +- return rc; +- ++ { ++ if ((d = (*name_a - *name_b)) != 0) ++ return d; ++ } ++ + if ((*name_a == ':' || *name_a == 0) && (*name_b == ':' || *name_b == 0)) + return 0; +
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?202010030807.09387Klu031404>