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 13973139 : const char *ldb_options_find(struct ldb_context *ldb, const char *options[], 50 : const char *option_name) 51 : { 52 13973139 : size_t len = strlen(option_name); 53 281027 : int i; 54 : 55 13973139 : if (options == NULL) { 56 13657805 : return NULL; 57 : } 58 : 59 63296 : for (i=0; options[i]; i++) { 60 33628 : if (strncmp(option_name, options[i], len) != 0) { 61 26622 : continue; 62 : } 63 7006 : if (options[i][len] == ':' || options[i][len] == '=') { 64 7006 : return &options[i][len+1]; 65 : } 66 0 : if (options[i][len] == 0) { 67 0 : return &options[i][len]; 68 : } 69 : } 70 : 71 27656 : return NULL; 72 : } 73 : 74 755838 : const char **ldb_options_copy(TALLOC_CTX *ctx, const char *options[]) 75 : { 76 : 77 755838 : size_t num_options = 0; 78 755838 : const char **copy = NULL; 79 755838 : size_t i = 0; 80 : 81 755838 : if (options == NULL) { 82 735274 : return copy; 83 : } 84 : 85 12028 : for (i=0; options[i]; i++) { 86 6166 : num_options++; 87 : } 88 : 89 5862 : copy = talloc_zero_array(ctx, const char *, num_options + 1); 90 5862 : if (copy == NULL) { 91 0 : return copy; 92 : } 93 : 94 12028 : for (i=0; options[i]; i++) { 95 6166 : copy[i] = talloc_strdup(copy, options[i]); 96 6166 : if (copy[i] == NULL) { 97 0 : TALLOC_FREE(copy); 98 0 : return copy; 99 : } 100 : } 101 5600 : return copy; 102 : } 103 : 104 1962633 : const char **ldb_options_get(struct ldb_context *ldb) 105 : { 106 1962633 : return ldb->options; 107 : }