mirror of
https://git.proxmox.com/git/mirror_zfs.git
synced 2026-05-25 03:37:45 +03:00
More consistent use of TREE_* macros in AVL comparators
Where is it appropriate and obvious, use TREE_CMP(), TREE_ISIGN() and TREE_PCMP() instead or direct comparisons. It can make the code a lot smaller, less error prone, and easier to read. Sponsored-by: TrueNAS Reviewed-by: Alexander Motin <alexander.motin@TrueNAS.com> Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov> Signed-off-by: Rob Norris <rob.norris@truenas.com> Closes #18259
This commit is contained in:
+3
-14
@@ -45,21 +45,10 @@ struct launched_process_node {
|
||||
static int
|
||||
_launched_process_node_compare(const void *x1, const void *x2)
|
||||
{
|
||||
pid_t p1;
|
||||
pid_t p2;
|
||||
const struct launched_process_node *node1 = x1;
|
||||
const struct launched_process_node *node2 = x2;
|
||||
|
||||
assert(x1 != NULL);
|
||||
assert(x2 != NULL);
|
||||
|
||||
p1 = ((const struct launched_process_node *) x1)->pid;
|
||||
p2 = ((const struct launched_process_node *) x2)->pid;
|
||||
|
||||
if (p1 < p2)
|
||||
return (-1);
|
||||
else if (p1 == p2)
|
||||
return (0);
|
||||
else
|
||||
return (1);
|
||||
return (TREE_CMP(node1->pid, node2->pid));
|
||||
}
|
||||
|
||||
static pthread_t _reap_children_tid = (pthread_t)-1;
|
||||
|
||||
+3
-19
@@ -42,26 +42,10 @@ typedef struct zed_strings_node zed_strings_node_t;
|
||||
static int
|
||||
_zed_strings_node_compare(const void *x1, const void *x2)
|
||||
{
|
||||
const char *s1;
|
||||
const char *s2;
|
||||
int rv;
|
||||
const zed_strings_node_t *n1 = x1;
|
||||
const zed_strings_node_t *n2 = x2;
|
||||
|
||||
assert(x1 != NULL);
|
||||
assert(x2 != NULL);
|
||||
|
||||
s1 = ((const zed_strings_node_t *) x1)->key;
|
||||
assert(s1 != NULL);
|
||||
s2 = ((const zed_strings_node_t *) x2)->key;
|
||||
assert(s2 != NULL);
|
||||
rv = strcmp(s1, s2);
|
||||
|
||||
if (rv < 0)
|
||||
return (-1);
|
||||
|
||||
if (rv > 0)
|
||||
return (1);
|
||||
|
||||
return (0);
|
||||
return (TREE_ISIGN(strcmp(n1->key, n2->key)));
|
||||
}
|
||||
|
||||
/*
|
||||
|
||||
+3
-5
@@ -413,14 +413,12 @@ zfs_sort(const void *larg, const void *rarg)
|
||||
|
||||
if (lstr)
|
||||
ret = TREE_ISIGN(strcmp(lstr, rstr));
|
||||
else if (lnum < rnum)
|
||||
ret = -1;
|
||||
else if (lnum > rnum)
|
||||
ret = 1;
|
||||
else
|
||||
ret = TREE_CMP(lnum, rnum);
|
||||
|
||||
if (ret != 0) {
|
||||
if (psc->sc_reverse == B_TRUE)
|
||||
ret = (ret < 0) ? 1 : -1;
|
||||
ret = -ret;
|
||||
return (ret);
|
||||
}
|
||||
}
|
||||
|
||||
+13
-19
@@ -2905,15 +2905,13 @@ us_compare(const void *larg, const void *rarg)
|
||||
uint64_t rv64 = 0;
|
||||
zfs_prop_t prop = sortcol->sc_prop;
|
||||
const char *propname = NULL;
|
||||
boolean_t reverse = sortcol->sc_reverse;
|
||||
|
||||
switch (prop) {
|
||||
case ZFS_PROP_TYPE:
|
||||
propname = "type";
|
||||
(void) nvlist_lookup_uint32(lnvl, propname, &lv32);
|
||||
(void) nvlist_lookup_uint32(rnvl, propname, &rv32);
|
||||
if (rv32 != lv32)
|
||||
rc = (rv32 < lv32) ? 1 : -1;
|
||||
rc = TREE_CMP(lv32, rv32);
|
||||
break;
|
||||
case ZFS_PROP_NAME:
|
||||
propname = "name";
|
||||
@@ -2923,8 +2921,7 @@ compare_nums:
|
||||
&lv64);
|
||||
(void) nvlist_lookup_uint64(rnvl, propname,
|
||||
&rv64);
|
||||
if (rv64 != lv64)
|
||||
rc = (rv64 < lv64) ? 1 : -1;
|
||||
rc = TREE_CMP(lv64, rv64);
|
||||
} else {
|
||||
if ((nvlist_lookup_string(lnvl, propname,
|
||||
&lvstr) == ENOENT) ||
|
||||
@@ -2932,7 +2929,7 @@ compare_nums:
|
||||
&rvstr) == ENOENT)) {
|
||||
goto compare_nums;
|
||||
}
|
||||
rc = strcmp(lvstr, rvstr);
|
||||
rc = TREE_ISIGN(strcmp(lvstr, rvstr));
|
||||
}
|
||||
break;
|
||||
case ZFS_PROP_USED:
|
||||
@@ -2945,8 +2942,7 @@ compare_nums:
|
||||
propname = "quota";
|
||||
(void) nvlist_lookup_uint64(lnvl, propname, &lv64);
|
||||
(void) nvlist_lookup_uint64(rnvl, propname, &rv64);
|
||||
if (rv64 != lv64)
|
||||
rc = (rv64 < lv64) ? 1 : -1;
|
||||
rc = TREE_CMP(lv64, rv64);
|
||||
break;
|
||||
|
||||
default:
|
||||
@@ -2954,10 +2950,9 @@ compare_nums:
|
||||
}
|
||||
|
||||
if (rc != 0) {
|
||||
if (rc < 0)
|
||||
return (reverse ? 1 : -1);
|
||||
else
|
||||
return (reverse ? -1 : 1);
|
||||
if (sortcol->sc_reverse)
|
||||
return (-rc);
|
||||
return (rc);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -2967,9 +2962,8 @@ compare_nums:
|
||||
* translation where we can have duplicate type/name combinations).
|
||||
*/
|
||||
if (nvlist_lookup_boolean_value(lnvl, "smbentity", &lvb) == 0 &&
|
||||
nvlist_lookup_boolean_value(rnvl, "smbentity", &rvb) == 0 &&
|
||||
lvb != rvb)
|
||||
return (lvb < rvb ? -1 : 1);
|
||||
nvlist_lookup_boolean_value(rnvl, "smbentity", &rvb) == 0)
|
||||
return (TREE_CMP(lvb, rvb));
|
||||
|
||||
return (0);
|
||||
}
|
||||
@@ -5497,11 +5491,11 @@ who_perm_compare(const void *larg, const void *rarg)
|
||||
zfs_deleg_who_type_t rtype = r->who_perm.who_type;
|
||||
int lweight = who_type2weight(ltype);
|
||||
int rweight = who_type2weight(rtype);
|
||||
int res = lweight - rweight;
|
||||
int res = TREE_CMP(lweight, rweight);
|
||||
if (res == 0)
|
||||
res = strncmp(l->who_perm.who_name, r->who_perm.who_name,
|
||||
ZFS_MAX_DELEG_NAME-1);
|
||||
return (TREE_ISIGN(res));
|
||||
res = TREE_ISIGN(strncmp(l->who_perm.who_name,
|
||||
r->who_perm.who_name, ZFS_MAX_DELEG_NAME-1));
|
||||
return (res);
|
||||
}
|
||||
|
||||
static int
|
||||
|
||||
Reference in New Issue
Block a user