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>