git: 86cdadbed44e - main - tree(3): allow the compare function to return any signed type

From: Gleb Smirnoff <glebius_at_FreeBSD.org>
Date: Thu, 07 Jul 2022 05:20:33 UTC
The branch main has been updated by glebius:

URL: https://cgit.FreeBSD.org/src/commit/?id=86cdadbed44ecd36469dfbc4f1e492dfe51fcd4e

commit 86cdadbed44ecd36469dfbc4f1e492dfe51fcd4e
Author:     Gleb Smirnoff <glebius@FreeBSD.org>
AuthorDate: 2022-07-07 05:19:08 +0000
Commit:     Gleb Smirnoff <glebius@FreeBSD.org>
CommitDate: 2022-07-07 05:19:08 +0000

    tree(3): allow the compare function to return any signed type
    
    This allows to write very short comparison function when we are
    comparing just pointer values:
    
            return ((intptr_t)((uintptr_t)a->ptr/2 - (uintptr_t)b->ptr/2));
    
    Reviewed by:            dougm, alc
    Differential revision:  https://reviews.freebsd.org/D35722
---
 sys/sys/tree.h | 10 +++++-----
 1 file changed, 5 insertions(+), 5 deletions(-)

diff --git a/sys/sys/tree.h b/sys/sys/tree.h
index 3f48c07a70b1..1529b07dfcdb 100644
--- a/sys/sys/tree.h
+++ b/sys/sys/tree.h
@@ -176,7 +176,7 @@ name##_SPLAY_INSERT(struct name *head, struct type *elm)		\
     if (SPLAY_EMPTY(head)) {						\
 	    SPLAY_LEFT(elm, field) = SPLAY_RIGHT(elm, field) = NULL;	\
     } else {								\
-	    int __comp;							\
+	    __typeof(cmp(NULL, NULL)) __comp;				\
 	    name##_SPLAY(head, elm);					\
 	    __comp = (cmp)(elm, (head)->sph_root);			\
 	    if (__comp < 0) {						\
@@ -219,7 +219,7 @@ void									\
 name##_SPLAY(struct name *head, struct type *elm)			\
 {									\
 	struct type __node, *__left, *__right, *__tmp;			\
-	int __comp;							\
+	__typeof(cmp(NULL, NULL)) __comp;				\
 \
 	SPLAY_LEFT(&__node, field) = SPLAY_RIGHT(&__node, field) = NULL;\
 	__left = __right = &__node;					\
@@ -694,7 +694,7 @@ name##_RB_INSERT(struct name *head, struct type *elm)			\
 {									\
 	struct type *tmp;						\
 	struct type *parent = NULL;					\
-	int comp = 0;							\
+	__typeof(cmp(NULL, NULL)) comp = 0;				\
 	tmp = RB_ROOT(head);						\
 	while (tmp) {							\
 		parent = tmp;						\
@@ -727,7 +727,7 @@ attr struct type *							\
 name##_RB_FIND(struct name *head, struct type *elm)			\
 {									\
 	struct type *tmp = RB_ROOT(head);				\
-	int comp;							\
+	__typeof(cmp(NULL, NULL)) comp;					\
 	while (tmp) {							\
 		comp = cmp(elm, tmp);					\
 		if (comp < 0)						\
@@ -747,7 +747,7 @@ name##_RB_NFIND(struct name *head, struct type *elm)			\
 {									\
 	struct type *tmp = RB_ROOT(head);				\
 	struct type *res = NULL;					\
-	int comp;							\
+	__typeof(cmp(NULL, NULL)) comp;					\
 	while (tmp) {							\
 		comp = cmp(elm, tmp);					\
 		if (comp < 0) {						\