Annotation of embedaddon/lighttpd/src/data_config.c, revision 1.1
1.1 ! misho 1: #include "array.h"
! 2:
! 3: #include <string.h>
! 4: #include <stdio.h>
! 5: #include <stdlib.h>
! 6:
! 7: static data_unset *data_config_copy(const data_unset *s) {
! 8: data_config *src = (data_config *)s;
! 9: data_config *ds = data_config_init();
! 10:
! 11: buffer_copy_string_buffer(ds->key, src->key);
! 12: buffer_copy_string_buffer(ds->comp_key, src->comp_key);
! 13: array_free(ds->value);
! 14: ds->value = array_init_array(src->value);
! 15: return (data_unset *)ds;
! 16: }
! 17:
! 18: static void data_config_free(data_unset *d) {
! 19: data_config *ds = (data_config *)d;
! 20:
! 21: buffer_free(ds->key);
! 22: buffer_free(ds->op);
! 23: buffer_free(ds->comp_key);
! 24:
! 25: array_free(ds->value);
! 26: array_free(ds->childs);
! 27:
! 28: if (ds->string) buffer_free(ds->string);
! 29: #ifdef HAVE_PCRE_H
! 30: if (ds->regex) pcre_free(ds->regex);
! 31: if (ds->regex_study) pcre_free(ds->regex_study);
! 32: #endif
! 33:
! 34: free(d);
! 35: }
! 36:
! 37: static void data_config_reset(data_unset *d) {
! 38: data_config *ds = (data_config *)d;
! 39:
! 40: /* reused array elements */
! 41: buffer_reset(ds->key);
! 42: buffer_reset(ds->comp_key);
! 43: array_reset(ds->value);
! 44: }
! 45:
! 46: static int data_config_insert_dup(data_unset *dst, data_unset *src) {
! 47: UNUSED(dst);
! 48:
! 49: src->free(src);
! 50:
! 51: return 0;
! 52: }
! 53:
! 54: static void data_config_print(const data_unset *d, int depth) {
! 55: data_config *ds = (data_config *)d;
! 56: array *a = (array *)ds->value;
! 57: size_t i;
! 58: size_t maxlen;
! 59:
! 60: if (0 == ds->context_ndx) {
! 61: fprintf(stdout, "config {\n");
! 62: }
! 63: else {
! 64: fprintf(stdout, "$%s %s \"%s\" {\n",
! 65: ds->comp_key->ptr, ds->op->ptr, ds->string->ptr);
! 66: array_print_indent(depth + 1);
! 67: fprintf(stdout, "# block %d\n", ds->context_ndx);
! 68: }
! 69: depth ++;
! 70:
! 71: maxlen = array_get_max_key_length(a);
! 72: for (i = 0; i < a->used; i ++) {
! 73: data_unset *du = a->data[i];
! 74: size_t len = strlen(du->key->ptr);
! 75: size_t j;
! 76:
! 77: array_print_indent(depth);
! 78: fprintf(stdout, "%s", du->key->ptr);
! 79: for (j = maxlen - len; j > 0; j --) {
! 80: fprintf(stdout, " ");
! 81: }
! 82: fprintf(stdout, " = ");
! 83: du->print(du, depth);
! 84: fprintf(stdout, "\n");
! 85: }
! 86:
! 87: if (ds->childs) {
! 88: fprintf(stdout, "\n");
! 89: for (i = 0; i < ds->childs->used; i ++) {
! 90: data_unset *du = ds->childs->data[i];
! 91:
! 92: /* only the 1st block of chaining */
! 93: if (NULL == ((data_config *)du)->prev) {
! 94: fprintf(stdout, "\n");
! 95: array_print_indent(depth);
! 96: du->print(du, depth);
! 97: fprintf(stdout, "\n");
! 98: }
! 99: }
! 100: }
! 101:
! 102: depth --;
! 103: array_print_indent(depth);
! 104: fprintf(stdout, "}");
! 105: if (0 != ds->context_ndx) {
! 106: fprintf(stdout, " # end of $%s %s \"%s\"",
! 107: ds->comp_key->ptr, ds->op->ptr, ds->string->ptr);
! 108: }
! 109:
! 110: if (ds->next) {
! 111: fprintf(stdout, "\n");
! 112: array_print_indent(depth);
! 113: fprintf(stdout, "else ");
! 114: ds->next->print((data_unset *)ds->next, depth);
! 115: }
! 116: }
! 117:
! 118: data_config *data_config_init(void) {
! 119: data_config *ds;
! 120:
! 121: ds = calloc(1, sizeof(*ds));
! 122:
! 123: ds->key = buffer_init();
! 124: ds->op = buffer_init();
! 125: ds->comp_key = buffer_init();
! 126: ds->value = array_init();
! 127: ds->childs = array_init();
! 128: ds->childs->is_weakref = 1;
! 129:
! 130: ds->copy = data_config_copy;
! 131: ds->free = data_config_free;
! 132: ds->reset = data_config_reset;
! 133: ds->insert_dup = data_config_insert_dup;
! 134: ds->print = data_config_print;
! 135: ds->type = TYPE_CONFIG;
! 136:
! 137: return ds;
! 138: }
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>