dsdb schema_query: reduce calls to str_list_length
authorDouglas Bagnall <douglas.bagnall@catalyst.net.nz>
Fri, 6 May 2016 03:30:15 +0000 (15:30 +1200)
committerAndrew Bartlett <abartlet@samba.org>
Mon, 9 May 2016 23:43:14 +0000 (01:43 +0200)
We were calling str_list_length(new_attrs) three times when one is
enough.

Signed-off-by: Douglas Bagnall <douglas.bagnall@catalyst.net.nz>
Reviewed-by: Andrew Bartlett <abartlet@samba.org>
source4/dsdb/schema/schema_query.c

index d448cdf5d9edec0e6eb65b7f132d1f6bb112e0b6..ad3e03f1aced9c4c0c676b71e95b7a7f0a778933 100644 (file)
@@ -240,18 +240,19 @@ const char **merge_attr_list(TALLOC_CTX *mem_ctx,
 {
        const char **ret_attrs;
        unsigned int i;
-       size_t new_len, orig_len = str_list_length(attrs);
-       if (!new_attrs) {
+       size_t new_len, new_attr_len, orig_len = str_list_length(attrs);
+       if (new_attrs == NULL || new_attrs[0] == NULL) {
                return attrs;
        }
+       new_attr_len = str_list_length(new_attrs);
 
-       ret_attrs = talloc_realloc(mem_ctx, 
-                                  attrs, const char *, orig_len + str_list_length(new_attrs) + 1);
+       ret_attrs = talloc_realloc(mem_ctx,
+                                  attrs, const char *, orig_len + new_attr_len + 1);
        if (ret_attrs) {
-               for (i=0; i < str_list_length(new_attrs); i++) {
+               for (i = 0; i < new_attr_len; i++) {
                        ret_attrs[orig_len + i] = new_attrs[i];
                }
-               new_len = orig_len + str_list_length(new_attrs);
+               new_len = orig_len + new_attr_len;
 
                ret_attrs[new_len] = NULL;
        }