Mercurial > dovecot > core-2.2
annotate src/lib/array.c @ 23007:36e01285b5b8
lib: buffer - Improve header comment for buffer_insert() and buffer_delete().
author | Stephan Bosch <stephan.bosch@dovecot.fi> |
---|---|
date | Mon, 18 Mar 2019 00:52:37 +0100 |
parents | cb108f786fb4 |
children |
rev | line source |
---|---|
22713
cb108f786fb4
Updated copyright notices to include the year 2018.
Stephan Bosch <stephan.bosch@dovecot.fi>
parents:
21390
diff
changeset
|
1 /* Copyright (c) 2003-2018 Dovecot authors, see the included COPYING file */ |
7857
63df79ccfedb
Uninlined some of the more complex array functions.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
2 |
63df79ccfedb
Uninlined some of the more complex array functions.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
3 #include "lib.h" |
63df79ccfedb
Uninlined some of the more complex array functions.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
4 #include "array.h" |
63df79ccfedb
Uninlined some of the more complex array functions.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
5 |
9490
a6e1f054a808
Added array_sort() for type-safe array sorting.
Timo Sirainen <tss@iki.fi>
parents:
9143
diff
changeset
|
6 |
7857
63df79ccfedb
Uninlined some of the more complex array functions.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
7 void *array_idx_modifiable_i(struct array *array, unsigned int idx) |
63df79ccfedb
Uninlined some of the more complex array functions.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
8 { |
18129
0d870753d9ab
lib: Small optimization / unnecessary code removal from array_*() functions.
Timo Sirainen <tss@iki.fi>
parents:
18111
diff
changeset
|
9 return buffer_get_space_unsafe(array->buffer, idx * array->element_size, |
0d870753d9ab
lib: Small optimization / unnecessary code removal from array_*() functions.
Timo Sirainen <tss@iki.fi>
parents:
18111
diff
changeset
|
10 array->element_size); |
7857
63df79ccfedb
Uninlined some of the more complex array functions.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
11 } |
63df79ccfedb
Uninlined some of the more complex array functions.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
12 |
63df79ccfedb
Uninlined some of the more complex array functions.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
13 void array_idx_set_i(struct array *array, unsigned int idx, const void *data) |
63df79ccfedb
Uninlined some of the more complex array functions.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
14 { |
18129
0d870753d9ab
lib: Small optimization / unnecessary code removal from array_*() functions.
Timo Sirainen <tss@iki.fi>
parents:
18111
diff
changeset
|
15 buffer_write(array->buffer, idx * array->element_size, |
0d870753d9ab
lib: Small optimization / unnecessary code removal from array_*() functions.
Timo Sirainen <tss@iki.fi>
parents:
18111
diff
changeset
|
16 data, array->element_size); |
7857
63df79ccfedb
Uninlined some of the more complex array functions.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
17 } |
63df79ccfedb
Uninlined some of the more complex array functions.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
18 |
63df79ccfedb
Uninlined some of the more complex array functions.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
19 void array_idx_clear_i(struct array *array, unsigned int idx) |
63df79ccfedb
Uninlined some of the more complex array functions.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
20 { |
18129
0d870753d9ab
lib: Small optimization / unnecessary code removal from array_*() functions.
Timo Sirainen <tss@iki.fi>
parents:
18111
diff
changeset
|
21 buffer_write_zero(array->buffer, idx * array->element_size, |
0d870753d9ab
lib: Small optimization / unnecessary code removal from array_*() functions.
Timo Sirainen <tss@iki.fi>
parents:
18111
diff
changeset
|
22 array->element_size); |
7857
63df79ccfedb
Uninlined some of the more complex array functions.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
23 } |
63df79ccfedb
Uninlined some of the more complex array functions.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
24 |
7858 | 25 void *array_insert_space_i(struct array *array, unsigned int idx) |
26 { | |
27 void *data; | |
28 size_t pos; | |
29 | |
30 pos = idx * array->element_size; | |
31 buffer_copy(array->buffer, pos + array->element_size, | |
32 array->buffer, pos, (size_t)-1); | |
33 | |
34 data = buffer_get_space_unsafe(array->buffer, pos, array->element_size); | |
35 memset(data, 0, array->element_size); | |
36 return data; | |
37 } | |
38 | |
7857
63df79ccfedb
Uninlined some of the more complex array functions.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
39 bool array_cmp_i(const struct array *array1, const struct array *array2) |
63df79ccfedb
Uninlined some of the more complex array functions.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
40 { |
63df79ccfedb
Uninlined some of the more complex array functions.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
41 if (!array_is_created_i(array1) || array1->buffer->used == 0) |
63df79ccfedb
Uninlined some of the more complex array functions.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
42 return !array_is_created_i(array2) || array2->buffer->used == 0; |
63df79ccfedb
Uninlined some of the more complex array functions.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
43 |
63df79ccfedb
Uninlined some of the more complex array functions.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
44 if (!array_is_created_i(array2)) |
63df79ccfedb
Uninlined some of the more complex array functions.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
45 return FALSE; |
63df79ccfedb
Uninlined some of the more complex array functions.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
46 |
63df79ccfedb
Uninlined some of the more complex array functions.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
47 return buffer_cmp(array1->buffer, array2->buffer); |
63df79ccfedb
Uninlined some of the more complex array functions.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
48 } |
7858 | 49 |
18111
b8ac4e5a1002
lib: array - element-wise comparison via callback
Phil Carmody <phil@dovecot.fi>
parents:
17130
diff
changeset
|
50 bool array_equal_fn_i(const struct array *array1, const struct array *array2, |
b8ac4e5a1002
lib: array - element-wise comparison via callback
Phil Carmody <phil@dovecot.fi>
parents:
17130
diff
changeset
|
51 int (*cmp)(const void *, const void*)) |
b8ac4e5a1002
lib: array - element-wise comparison via callback
Phil Carmody <phil@dovecot.fi>
parents:
17130
diff
changeset
|
52 { |
21322
5ab8dc1a4a6f
global: Change string position/length from unsigned int to size_t
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
19552
diff
changeset
|
53 unsigned int count1, count2, i; |
5ab8dc1a4a6f
global: Change string position/length from unsigned int to size_t
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
19552
diff
changeset
|
54 size_t size; |
18111
b8ac4e5a1002
lib: array - element-wise comparison via callback
Phil Carmody <phil@dovecot.fi>
parents:
17130
diff
changeset
|
55 |
b8ac4e5a1002
lib: array - element-wise comparison via callback
Phil Carmody <phil@dovecot.fi>
parents:
17130
diff
changeset
|
56 if (!array_is_created_i(array1) || array1->buffer->used == 0) |
b8ac4e5a1002
lib: array - element-wise comparison via callback
Phil Carmody <phil@dovecot.fi>
parents:
17130
diff
changeset
|
57 return !array_is_created_i(array2) || array2->buffer->used == 0; |
b8ac4e5a1002
lib: array - element-wise comparison via callback
Phil Carmody <phil@dovecot.fi>
parents:
17130
diff
changeset
|
58 |
b8ac4e5a1002
lib: array - element-wise comparison via callback
Phil Carmody <phil@dovecot.fi>
parents:
17130
diff
changeset
|
59 if (!array_is_created_i(array2)) |
b8ac4e5a1002
lib: array - element-wise comparison via callback
Phil Carmody <phil@dovecot.fi>
parents:
17130
diff
changeset
|
60 return FALSE; |
b8ac4e5a1002
lib: array - element-wise comparison via callback
Phil Carmody <phil@dovecot.fi>
parents:
17130
diff
changeset
|
61 |
b8ac4e5a1002
lib: array - element-wise comparison via callback
Phil Carmody <phil@dovecot.fi>
parents:
17130
diff
changeset
|
62 count1 = array_count_i(array1); count2 = array_count_i(array2); |
b8ac4e5a1002
lib: array - element-wise comparison via callback
Phil Carmody <phil@dovecot.fi>
parents:
17130
diff
changeset
|
63 if (count1 != count2) |
b8ac4e5a1002
lib: array - element-wise comparison via callback
Phil Carmody <phil@dovecot.fi>
parents:
17130
diff
changeset
|
64 return FALSE; |
b8ac4e5a1002
lib: array - element-wise comparison via callback
Phil Carmody <phil@dovecot.fi>
parents:
17130
diff
changeset
|
65 |
b8ac4e5a1002
lib: array - element-wise comparison via callback
Phil Carmody <phil@dovecot.fi>
parents:
17130
diff
changeset
|
66 size = array1->element_size; |
b8ac4e5a1002
lib: array - element-wise comparison via callback
Phil Carmody <phil@dovecot.fi>
parents:
17130
diff
changeset
|
67 i_assert(size == array2->element_size); |
b8ac4e5a1002
lib: array - element-wise comparison via callback
Phil Carmody <phil@dovecot.fi>
parents:
17130
diff
changeset
|
68 |
b8ac4e5a1002
lib: array - element-wise comparison via callback
Phil Carmody <phil@dovecot.fi>
parents:
17130
diff
changeset
|
69 for (i = 0; i < count1; i++) { |
b8ac4e5a1002
lib: array - element-wise comparison via callback
Phil Carmody <phil@dovecot.fi>
parents:
17130
diff
changeset
|
70 if (cmp(CONST_PTR_OFFSET(array1->buffer->data, i * size), |
b8ac4e5a1002
lib: array - element-wise comparison via callback
Phil Carmody <phil@dovecot.fi>
parents:
17130
diff
changeset
|
71 CONST_PTR_OFFSET(array2->buffer->data, i * size)) != 0) |
b8ac4e5a1002
lib: array - element-wise comparison via callback
Phil Carmody <phil@dovecot.fi>
parents:
17130
diff
changeset
|
72 return FALSE; |
b8ac4e5a1002
lib: array - element-wise comparison via callback
Phil Carmody <phil@dovecot.fi>
parents:
17130
diff
changeset
|
73 } |
b8ac4e5a1002
lib: array - element-wise comparison via callback
Phil Carmody <phil@dovecot.fi>
parents:
17130
diff
changeset
|
74 return TRUE; |
b8ac4e5a1002
lib: array - element-wise comparison via callback
Phil Carmody <phil@dovecot.fi>
parents:
17130
diff
changeset
|
75 } |
b8ac4e5a1002
lib: array - element-wise comparison via callback
Phil Carmody <phil@dovecot.fi>
parents:
17130
diff
changeset
|
76 |
b8ac4e5a1002
lib: array - element-wise comparison via callback
Phil Carmody <phil@dovecot.fi>
parents:
17130
diff
changeset
|
77 bool array_equal_fn_ctx_i(const struct array *array1, const struct array *array2, |
b8ac4e5a1002
lib: array - element-wise comparison via callback
Phil Carmody <phil@dovecot.fi>
parents:
17130
diff
changeset
|
78 int (*cmp)(const void *, const void *, const void *), |
b8ac4e5a1002
lib: array - element-wise comparison via callback
Phil Carmody <phil@dovecot.fi>
parents:
17130
diff
changeset
|
79 const void *context) |
b8ac4e5a1002
lib: array - element-wise comparison via callback
Phil Carmody <phil@dovecot.fi>
parents:
17130
diff
changeset
|
80 { |
21322
5ab8dc1a4a6f
global: Change string position/length from unsigned int to size_t
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
19552
diff
changeset
|
81 unsigned int count1, count2, i; |
5ab8dc1a4a6f
global: Change string position/length from unsigned int to size_t
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
19552
diff
changeset
|
82 size_t size; |
18111
b8ac4e5a1002
lib: array - element-wise comparison via callback
Phil Carmody <phil@dovecot.fi>
parents:
17130
diff
changeset
|
83 |
b8ac4e5a1002
lib: array - element-wise comparison via callback
Phil Carmody <phil@dovecot.fi>
parents:
17130
diff
changeset
|
84 if (!array_is_created_i(array1) || array1->buffer->used == 0) |
b8ac4e5a1002
lib: array - element-wise comparison via callback
Phil Carmody <phil@dovecot.fi>
parents:
17130
diff
changeset
|
85 return !array_is_created_i(array2) || array2->buffer->used == 0; |
b8ac4e5a1002
lib: array - element-wise comparison via callback
Phil Carmody <phil@dovecot.fi>
parents:
17130
diff
changeset
|
86 |
b8ac4e5a1002
lib: array - element-wise comparison via callback
Phil Carmody <phil@dovecot.fi>
parents:
17130
diff
changeset
|
87 if (!array_is_created_i(array2)) |
b8ac4e5a1002
lib: array - element-wise comparison via callback
Phil Carmody <phil@dovecot.fi>
parents:
17130
diff
changeset
|
88 return FALSE; |
b8ac4e5a1002
lib: array - element-wise comparison via callback
Phil Carmody <phil@dovecot.fi>
parents:
17130
diff
changeset
|
89 |
b8ac4e5a1002
lib: array - element-wise comparison via callback
Phil Carmody <phil@dovecot.fi>
parents:
17130
diff
changeset
|
90 count1 = array_count_i(array1); count2 = array_count_i(array2); |
b8ac4e5a1002
lib: array - element-wise comparison via callback
Phil Carmody <phil@dovecot.fi>
parents:
17130
diff
changeset
|
91 if (count1 != count2) |
b8ac4e5a1002
lib: array - element-wise comparison via callback
Phil Carmody <phil@dovecot.fi>
parents:
17130
diff
changeset
|
92 return FALSE; |
b8ac4e5a1002
lib: array - element-wise comparison via callback
Phil Carmody <phil@dovecot.fi>
parents:
17130
diff
changeset
|
93 |
b8ac4e5a1002
lib: array - element-wise comparison via callback
Phil Carmody <phil@dovecot.fi>
parents:
17130
diff
changeset
|
94 size = array1->element_size; |
b8ac4e5a1002
lib: array - element-wise comparison via callback
Phil Carmody <phil@dovecot.fi>
parents:
17130
diff
changeset
|
95 i_assert(size == array2->element_size); |
b8ac4e5a1002
lib: array - element-wise comparison via callback
Phil Carmody <phil@dovecot.fi>
parents:
17130
diff
changeset
|
96 |
b8ac4e5a1002
lib: array - element-wise comparison via callback
Phil Carmody <phil@dovecot.fi>
parents:
17130
diff
changeset
|
97 for (i = 0; i < count1; i++) { |
b8ac4e5a1002
lib: array - element-wise comparison via callback
Phil Carmody <phil@dovecot.fi>
parents:
17130
diff
changeset
|
98 if (cmp(CONST_PTR_OFFSET(array1->buffer->data, i * size), |
b8ac4e5a1002
lib: array - element-wise comparison via callback
Phil Carmody <phil@dovecot.fi>
parents:
17130
diff
changeset
|
99 CONST_PTR_OFFSET(array2->buffer->data, i * size), context) != 0) |
b8ac4e5a1002
lib: array - element-wise comparison via callback
Phil Carmody <phil@dovecot.fi>
parents:
17130
diff
changeset
|
100 return FALSE; |
b8ac4e5a1002
lib: array - element-wise comparison via callback
Phil Carmody <phil@dovecot.fi>
parents:
17130
diff
changeset
|
101 } |
b8ac4e5a1002
lib: array - element-wise comparison via callback
Phil Carmody <phil@dovecot.fi>
parents:
17130
diff
changeset
|
102 return TRUE; |
b8ac4e5a1002
lib: array - element-wise comparison via callback
Phil Carmody <phil@dovecot.fi>
parents:
17130
diff
changeset
|
103 } |
b8ac4e5a1002
lib: array - element-wise comparison via callback
Phil Carmody <phil@dovecot.fi>
parents:
17130
diff
changeset
|
104 |
7912
81806d402514
Added more consts, ATTR_CONSTs and ATTR_PUREs.
Timo Sirainen <tss@iki.fi>
parents:
7858
diff
changeset
|
105 void array_reverse_i(struct array *array) |
7858 | 106 { |
14526
2f776ca73cef
Code cleanup: Use array_count_i() to calculate array's size internally.
Timo Sirainen <tss@iki.fi>
parents:
14133
diff
changeset
|
107 const size_t element_size = array->element_size; |
7858 | 108 unsigned int i, count = array_count_i(array); |
109 size_t size; | |
110 void *data, *tmp; | |
111 | |
112 data = buffer_get_modifiable_data(array->buffer, &size); | |
113 tmp = t_buffer_get(array->element_size); | |
114 for (i = 0; i+1 < count; i++, count--) { | |
115 memcpy(tmp, PTR_OFFSET(data, i * element_size), element_size); | |
116 memcpy(PTR_OFFSET(data, i * element_size), | |
117 PTR_OFFSET(data, (count-1) * element_size), | |
118 element_size); | |
119 memcpy(PTR_OFFSET(data, (count-1) * element_size), tmp, | |
120 element_size); | |
121 } | |
122 } | |
9490
a6e1f054a808
Added array_sort() for type-safe array sorting.
Timo Sirainen <tss@iki.fi>
parents:
9143
diff
changeset
|
123 |
a6e1f054a808
Added array_sort() for type-safe array sorting.
Timo Sirainen <tss@iki.fi>
parents:
9143
diff
changeset
|
124 void array_sort_i(struct array *array, int (*cmp)(const void *, const void *)) |
a6e1f054a808
Added array_sort() for type-safe array sorting.
Timo Sirainen <tss@iki.fi>
parents:
9143
diff
changeset
|
125 { |
a6e1f054a808
Added array_sort() for type-safe array sorting.
Timo Sirainen <tss@iki.fi>
parents:
9143
diff
changeset
|
126 unsigned int count; |
a6e1f054a808
Added array_sort() for type-safe array sorting.
Timo Sirainen <tss@iki.fi>
parents:
9143
diff
changeset
|
127 |
14526
2f776ca73cef
Code cleanup: Use array_count_i() to calculate array's size internally.
Timo Sirainen <tss@iki.fi>
parents:
14133
diff
changeset
|
128 count = array_count_i(array); |
19513
74850147fc47
lib: Avoid passing NULL to qsort() or bsearch() on empty array.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
19191
diff
changeset
|
129 if (count == 0) |
74850147fc47
lib: Avoid passing NULL to qsort() or bsearch() on empty array.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
19191
diff
changeset
|
130 return; |
9490
a6e1f054a808
Added array_sort() for type-safe array sorting.
Timo Sirainen <tss@iki.fi>
parents:
9143
diff
changeset
|
131 qsort(buffer_get_modifiable_data(array->buffer, NULL), |
a6e1f054a808
Added array_sort() for type-safe array sorting.
Timo Sirainen <tss@iki.fi>
parents:
9143
diff
changeset
|
132 count, array->element_size, cmp); |
a6e1f054a808
Added array_sort() for type-safe array sorting.
Timo Sirainen <tss@iki.fi>
parents:
9143
diff
changeset
|
133 } |
9607
55690917fefb
Added type safe array_bsearch().
Timo Sirainen <tss@iki.fi>
parents:
9490
diff
changeset
|
134 |
55690917fefb
Added type safe array_bsearch().
Timo Sirainen <tss@iki.fi>
parents:
9490
diff
changeset
|
135 void *array_bsearch_i(struct array *array, const void *key, |
55690917fefb
Added type safe array_bsearch().
Timo Sirainen <tss@iki.fi>
parents:
9490
diff
changeset
|
136 int (*cmp)(const void *, const void *)) |
55690917fefb
Added type safe array_bsearch().
Timo Sirainen <tss@iki.fi>
parents:
9490
diff
changeset
|
137 { |
55690917fefb
Added type safe array_bsearch().
Timo Sirainen <tss@iki.fi>
parents:
9490
diff
changeset
|
138 unsigned int count; |
55690917fefb
Added type safe array_bsearch().
Timo Sirainen <tss@iki.fi>
parents:
9490
diff
changeset
|
139 |
14526
2f776ca73cef
Code cleanup: Use array_count_i() to calculate array's size internally.
Timo Sirainen <tss@iki.fi>
parents:
14133
diff
changeset
|
140 count = array_count_i(array); |
9607
55690917fefb
Added type safe array_bsearch().
Timo Sirainen <tss@iki.fi>
parents:
9490
diff
changeset
|
141 return bsearch(key, array->buffer->data, |
55690917fefb
Added type safe array_bsearch().
Timo Sirainen <tss@iki.fi>
parents:
9490
diff
changeset
|
142 count, array->element_size, cmp); |
55690917fefb
Added type safe array_bsearch().
Timo Sirainen <tss@iki.fi>
parents:
9490
diff
changeset
|
143 } |
18132
1bbec03202e0
lib: array - new linear search helper
Phil Carmody <phil@dovecot.fi>
parents:
18129
diff
changeset
|
144 |
1bbec03202e0
lib: array - new linear search helper
Phil Carmody <phil@dovecot.fi>
parents:
18129
diff
changeset
|
145 const void *array_lsearch_i(const struct array *array, const void *key, |
1bbec03202e0
lib: array - new linear search helper
Phil Carmody <phil@dovecot.fi>
parents:
18129
diff
changeset
|
146 int (*cmp)(const void *, const void *)) |
1bbec03202e0
lib: array - new linear search helper
Phil Carmody <phil@dovecot.fi>
parents:
18129
diff
changeset
|
147 { |
1bbec03202e0
lib: array - new linear search helper
Phil Carmody <phil@dovecot.fi>
parents:
18129
diff
changeset
|
148 const void * const data = buffer_get_data(array->buffer, NULL); |
21322
5ab8dc1a4a6f
global: Change string position/length from unsigned int to size_t
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
19552
diff
changeset
|
149 const size_t s = array->element_size; |
18132
1bbec03202e0
lib: array - new linear search helper
Phil Carmody <phil@dovecot.fi>
parents:
18129
diff
changeset
|
150 unsigned int idx; |
1bbec03202e0
lib: array - new linear search helper
Phil Carmody <phil@dovecot.fi>
parents:
18129
diff
changeset
|
151 |
1bbec03202e0
lib: array - new linear search helper
Phil Carmody <phil@dovecot.fi>
parents:
18129
diff
changeset
|
152 for (idx = 0; idx < array_count_i(array); idx++) { |
1bbec03202e0
lib: array - new linear search helper
Phil Carmody <phil@dovecot.fi>
parents:
18129
diff
changeset
|
153 if (cmp(key, CONST_PTR_OFFSET(data, idx * s)) == 0) { |
1bbec03202e0
lib: array - new linear search helper
Phil Carmody <phil@dovecot.fi>
parents:
18129
diff
changeset
|
154 return PTR_OFFSET(data, idx * s); |
1bbec03202e0
lib: array - new linear search helper
Phil Carmody <phil@dovecot.fi>
parents:
18129
diff
changeset
|
155 } |
1bbec03202e0
lib: array - new linear search helper
Phil Carmody <phil@dovecot.fi>
parents:
18129
diff
changeset
|
156 } |
1bbec03202e0
lib: array - new linear search helper
Phil Carmody <phil@dovecot.fi>
parents:
18129
diff
changeset
|
157 |
1bbec03202e0
lib: array - new linear search helper
Phil Carmody <phil@dovecot.fi>
parents:
18129
diff
changeset
|
158 return NULL; |
1bbec03202e0
lib: array - new linear search helper
Phil Carmody <phil@dovecot.fi>
parents:
18129
diff
changeset
|
159 } |