ndr: inline search for ndr_token_peek()
authorDouglas Bagnall <douglas.bagnall@catalyst.net.nz>
Fri, 26 Feb 2016 03:58:09 +0000 (16:58 +1300)
committerAndrew Bartlett <abartlet@samba.org>
Tue, 22 Mar 2016 07:00:31 +0000 (08:00 +0100)
This is often a hot path, particularly with complex structures like
nt-acls.

Signed-off-by: Douglas Bagnall <douglas.bagnall@catalyst.net.nz>
Reviewed-by: Andrew Bartlett <abartlet@samba.org>
Reviewed-by: Garming Sam <garming@catalyst.net.nz>
librpc/ndr/ndr.c

index b21c8fe7e83f5d5634d56a87c186f709f288ac06..89bacf7de5f2cbcef94817954b1f12817d19ed2c 100644 (file)
@@ -954,15 +954,13 @@ _PUBLIC_ enum ndr_err_code ndr_token_retrieve(struct ndr_token_list **list, cons
 */
 _PUBLIC_ uint32_t ndr_token_peek(struct ndr_token_list **list, const void *key)
 {
-       enum ndr_err_code status;
-       uint32_t v;
-
-       status = ndr_token_retrieve_cmp_fn(list, key, &v, NULL, false);
-       if (!NDR_ERR_CODE_IS_SUCCESS(status)) {
-               return 0;
+       struct ndr_token_list *tok;
+       for (tok = *list; tok; tok = tok->next) {
+               if (tok->key == key) {
+                       return tok->value;
+               }
        }
-
-       return v;
+       return 0;
 }
 
 /*