Line data Source code
1 : /*
2 : ldb database library
3 :
4 : Copyright (C) Andrew Tridgell 2010
5 :
6 : ** NOTE! The following LGPL license applies to the ldb
7 : ** library. This does NOT imply that all of Samba is released
8 : ** under the LGPL
9 :
10 : This library is free software; you can redistribute it and/or
11 : modify it under the terms of the GNU Lesser General Public
12 : License as published by the Free Software Foundation; either
13 : version 3 of the License, or (at your option) any later version.
14 :
15 : This library is distributed in the hope that it will be useful,
16 : but WITHOUT ANY WARRANTY; without even the implied warranty of
17 : MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
18 : Lesser General Public License for more details.
19 :
20 : You should have received a copy of the GNU Lesser General Public
21 : License along with this library; if not, see <http://www.gnu.org/licenses/>.
22 : */
23 :
24 : /*
25 : * Name: ldb
26 : *
27 : * Component: ldb options[] handling
28 : *
29 : * Author: Andrew Tridgell
30 : */
31 :
32 : #include "ldb_private.h"
33 :
34 : /*
35 : find an option within an options array
36 :
37 : accepts the following forms:
38 :
39 : NAME
40 : NAME:value
41 : NAME=value
42 :
43 : returns a pointer into an element of the options[] array, or NULL is
44 : not found.
45 :
46 : For the NAME form, returns a pointer to an empty string (thus
47 : allowing for boolean options).
48 : */
49 10188506 : const char *ldb_options_find(struct ldb_context *ldb, const char *options[],
50 : const char *option_name)
51 : {
52 10188506 : size_t len = strlen(option_name);
53 : int i;
54 :
55 10188506 : if (options == NULL) {
56 10161508 : return NULL;
57 : }
58 :
59 48008 : for (i=0; options[i]; i++) {
60 26855 : if (strncmp(option_name, options[i], len) != 0) {
61 21010 : continue;
62 : }
63 5845 : if (options[i][len] == ':' || options[i][len] == '=') {
64 5845 : return &options[i][len+1];
65 : }
66 0 : if (options[i][len] == 0) {
67 0 : return &options[i][len];
68 : }
69 : }
70 :
71 21153 : return NULL;
72 : }
73 :
74 552342 : const char **ldb_options_copy(TALLOC_CTX *ctx, const char *options[])
75 : {
76 :
77 552342 : size_t num_options = 0;
78 552342 : const char **copy = NULL;
79 552342 : size_t i = 0;
80 :
81 552342 : if (options == NULL) {
82 547505 : return copy;
83 : }
84 :
85 10016 : for (i=0; options[i]; i++) {
86 5179 : num_options++;
87 : }
88 :
89 4837 : copy = talloc_zero_array(ctx, const char *, num_options + 1);
90 4837 : if (copy == NULL) {
91 0 : return copy;
92 : }
93 :
94 10016 : for (i=0; options[i]; i++) {
95 5179 : copy[i] = talloc_strdup(copy, options[i]);
96 5179 : if (copy[i] == NULL) {
97 0 : TALLOC_FREE(copy);
98 0 : return copy;
99 : }
100 : }
101 4837 : return copy;
102 : }
103 :
104 1471764 : const char **ldb_options_get(struct ldb_context *ldb)
105 : {
106 1471764 : return ldb->options;
107 : }
|