[doc] NEWS
[lighttpd.git] / src / data_array.c
blob69b5d030961c76b4930649045de85e4e411297f3
1 #include "first.h"
3 #include "array.h"
5 #include <string.h>
6 #include <stdlib.h>
8 static data_unset *data_array_copy(const data_unset *s) {
9 data_array *src = (data_array *)s;
10 data_array *ds = data_array_init();
12 buffer_copy_buffer(ds->key, src->key);
13 array_free(ds->value);
14 ds->value = array_init_array(src->value);
15 ds->is_index_key = src->is_index_key;
16 return (data_unset *)ds;
19 static void data_array_free(data_unset *d) {
20 data_array *ds = (data_array *)d;
22 buffer_free(ds->key);
23 array_free(ds->value);
25 free(d);
28 static void data_array_reset(data_unset *d) {
29 data_array *ds = (data_array *)d;
31 /* reused array elements */
32 buffer_reset(ds->key);
33 array_reset(ds->value);
36 static int data_array_insert_dup(data_unset *dst, data_unset *src) {
37 UNUSED(dst);
39 src->fn->free(src);
41 return 0;
44 static void data_array_print(const data_unset *d, int depth) {
45 data_array *ds = (data_array *)d;
47 array_print(ds->value, depth);
50 data_array *data_array_init(void) {
51 static const struct data_methods fn = {
52 data_array_reset,
53 data_array_copy,
54 data_array_free,
55 data_array_insert_dup,
56 data_array_print,
58 data_array *ds;
60 ds = calloc(1, sizeof(*ds));
61 force_assert(NULL != ds);
63 ds->key = buffer_init();
64 ds->value = array_init();
66 ds->type = TYPE_ARRAY;
67 ds->fn = &fn;
69 return ds;