summaryrefslogtreecommitdiffstats
path: root/crypt-gpgme.c
diff options
context:
space:
mode:
authorKevin McCarthy <kevin@8t8.us>2022-05-27 14:58:23 -0700
committerKevin McCarthy <kevin@8t8.us>2022-05-27 15:37:11 -0700
commit44636260e157e8911272b102a24bedc196a50e34 (patch)
tree2936e0c76c1ac075b2258bb40542e8b4bc53e480 /crypt-gpgme.c
parent818ea32c1637c2dae20cdc3ccba1cc61dfe39c19 (diff)
Fix $pgp_sort_keys sorting.
Both gpgme and pgpkey used nonsensical comparison return values, for example: "return r > 0". Adjust numeric comparisons to use mutt_numeric_cmp() and have the comparator return the result of the actual comparison. Adjust the "trust" sorting of gpgme to be the same as classic-pgp: putting restrictions at the bottom, but reverse sorting validity, length and timestamp values so they come first in the list.
Diffstat (limited to 'crypt-gpgme.c')
-rw-r--r--crypt-gpgme.c43
1 files changed, 22 insertions, 21 deletions
diff --git a/crypt-gpgme.c b/crypt-gpgme.c
index de0c15b7..e74caecb 100644
--- a/crypt-gpgme.c
+++ b/crypt-gpgme.c
@@ -3478,9 +3478,9 @@ static int _crypt_compare_address (const void *a, const void *b)
int r;
if ((r = mutt_strcasecmp ((*s)->uid, (*t)->uid)))
- return r > 0;
+ return r;
else
- return mutt_strcasecmp (crypt_fpr_or_lkeyid (*s), crypt_fpr_or_lkeyid (*t)) > 0;
+ return mutt_strcasecmp (crypt_fpr_or_lkeyid (*s), crypt_fpr_or_lkeyid (*t));
}
static int crypt_compare_address (const void *a, const void *b)
@@ -3498,9 +3498,9 @@ static int _crypt_compare_keyid (const void *a, const void *b)
int r;
if ((r = mutt_strcasecmp (crypt_fpr_or_lkeyid (*s), crypt_fpr_or_lkeyid (*t))))
- return r > 0;
+ return r;
else
- return mutt_strcasecmp ((*s)->uid, (*t)->uid) > 0;
+ return mutt_strcasecmp ((*s)->uid, (*t)->uid);
}
static int crypt_compare_keyid (const void *a, const void *b)
@@ -3524,9 +3524,9 @@ static int _crypt_compare_date (const void *a, const void *b)
if (ts > tt)
return 1;
if (ts < tt)
- return 0;
+ return -1;
- return mutt_strcasecmp ((*s)->uid, (*t)->uid) > 0;
+ return mutt_strcasecmp ((*s)->uid, (*t)->uid);
}
static int crypt_compare_date (const void *a, const void *b)
@@ -3544,34 +3544,35 @@ static int _crypt_compare_trust (const void *a, const void *b)
unsigned long ts = 0, tt = 0;
int r;
- if ((r = (((*s)->flags & (KEYFLAG_RESTRICTIONS))
- - ((*t)->flags & (KEYFLAG_RESTRICTIONS)))))
- return r > 0;
+ if ((r = mutt_numeric_cmp (((*s)->flags & (KEYFLAG_RESTRICTIONS)),
+ ((*t)->flags & (KEYFLAG_RESTRICTIONS)))))
+ return r;
- ts = (*s)->validity;
- tt = (*t)->validity;
- if ((r = (tt - ts)))
- return r < 0;
+ /* Note: reversed */
+ if ((r = mutt_numeric_cmp ((*t)->validity, (*s)->validity)))
+ return r;
+ ts = tt = 0;
if ((*s)->kobj->subkeys)
ts = (*s)->kobj->subkeys->length;
if ((*t)->kobj->subkeys)
tt = (*t)->kobj->subkeys->length;
- if (ts != tt)
- return ts > tt;
+ /* Note: reversed */
+ if ((r = mutt_numeric_cmp (tt, ts)))
+ return r;
+ ts = tt = 0;
if ((*s)->kobj->subkeys && ((*s)->kobj->subkeys->timestamp > 0))
ts = (*s)->kobj->subkeys->timestamp;
if ((*t)->kobj->subkeys && ((*t)->kobj->subkeys->timestamp > 0))
tt = (*t)->kobj->subkeys->timestamp;
- if (ts > tt)
- return 1;
- if (ts < tt)
- return 0;
+ /* Note: reversed: */
+ if ((r = mutt_numeric_cmp (tt, ts)))
+ return r;
if ((r = mutt_strcasecmp ((*s)->uid, (*t)->uid)))
- return r > 0;
- return (mutt_strcasecmp (crypt_fpr_or_lkeyid ((*s)), crypt_fpr_or_lkeyid ((*t)))) > 0;
+ return r;
+ return mutt_strcasecmp (crypt_fpr_or_lkeyid (*s), crypt_fpr_or_lkeyid (*t));
}
static int crypt_compare_trust (const void *a, const void *b)