]> jfr.im git - solanum.git/commitdiff
Use bsearch to check privset membership
authorEd Kellett <redacted>
Fri, 29 Jan 2021 12:54:37 +0000 (12:54 +0000)
committerEd Kellett <redacted>
Mon, 1 Mar 2021 15:45:03 +0000 (15:45 +0000)
I don't really care if it's faster, I just prefer it

ircd/privilege.c

index d7226f973bb9ee00537eb7379f6d147f7ac2c558..1bb645810debce3e4ad9c090c913c3915567f20f 100644 (file)
 
 static rb_dlink_list privilegeset_list = {NULL, NULL, 0};
 
-bool
-privilegeset_in_set(const struct PrivilegeSet *set, const char *priv)
-{
-       s_assert(set != NULL);
-       s_assert(priv != NULL);
-
-       if (set->privs == NULL)
-               return false;
-
-       for (const char **s = set->privs; *s != NULL; s++)
-               if (strcmp(*s, priv) == 0) return true;
-
-       return false;
-}
-
 static struct PrivilegeSet *
 privilegeset_get_any(const char *name)
 {
@@ -238,6 +223,16 @@ privilegeset_clear(struct PrivilegeSet *set)
        set->stored_size = 0;
 }
 
+bool
+privilegeset_in_set(const struct PrivilegeSet *set, const char *priv)
+{
+       s_assert(set != NULL);
+       s_assert(priv != NULL);
+
+       const char **found = bsearch(&priv, set->privs, set->size, sizeof *set->privs, privilegeset_cmp_priv);
+       return found != NULL;
+}
+
 struct PrivilegeSet *
 privilegeset_set_new(const char *name, const char *privs, PrivilegeFlags flags)
 {