Annotation of embedaddon/lighttpd/src/data_string.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: #include <assert.h>
! 7:
! 8: static data_unset *data_string_copy(const data_unset *s) {
! 9: data_string *src = (data_string *)s;
! 10: data_string *ds = data_string_init();
! 11:
! 12: buffer_copy_string_buffer(ds->key, src->key);
! 13: buffer_copy_string_buffer(ds->value, src->value);
! 14: ds->is_index_key = src->is_index_key;
! 15: return (data_unset *)ds;
! 16: }
! 17:
! 18: static void data_string_free(data_unset *d) {
! 19: data_string *ds = (data_string *)d;
! 20:
! 21: buffer_free(ds->key);
! 22: buffer_free(ds->value);
! 23:
! 24: free(d);
! 25: }
! 26:
! 27: static void data_string_reset(data_unset *d) {
! 28: data_string *ds = (data_string *)d;
! 29:
! 30: /* reused array elements */
! 31: buffer_reset(ds->key);
! 32: buffer_reset(ds->value);
! 33: }
! 34:
! 35: static int data_string_insert_dup(data_unset *dst, data_unset *src) {
! 36: data_string *ds_dst = (data_string *)dst;
! 37: data_string *ds_src = (data_string *)src;
! 38:
! 39: if (ds_dst->value->used) {
! 40: buffer_append_string_len(ds_dst->value, CONST_STR_LEN(", "));
! 41: buffer_append_string_buffer(ds_dst->value, ds_src->value);
! 42: } else {
! 43: buffer_copy_string_buffer(ds_dst->value, ds_src->value);
! 44: }
! 45:
! 46: src->free(src);
! 47:
! 48: return 0;
! 49: }
! 50:
! 51: static int data_response_insert_dup(data_unset *dst, data_unset *src) {
! 52: data_string *ds_dst = (data_string *)dst;
! 53: data_string *ds_src = (data_string *)src;
! 54:
! 55: if (ds_dst->value->used) {
! 56: buffer_append_string_len(ds_dst->value, CONST_STR_LEN("\r\n"));
! 57: buffer_append_string_buffer(ds_dst->value, ds_dst->key);
! 58: buffer_append_string_len(ds_dst->value, CONST_STR_LEN(": "));
! 59: buffer_append_string_buffer(ds_dst->value, ds_src->value);
! 60: } else {
! 61: buffer_copy_string_buffer(ds_dst->value, ds_src->value);
! 62: }
! 63:
! 64: src->free(src);
! 65:
! 66: return 0;
! 67: }
! 68:
! 69:
! 70: static void data_string_print(const data_unset *d, int depth) {
! 71: data_string *ds = (data_string *)d;
! 72: unsigned int i;
! 73: UNUSED(depth);
! 74:
! 75: /* empty and uninitialized strings */
! 76: if (ds->value->used < 1) {
! 77: fputs("\"\"", stdout);
! 78: return;
! 79: }
! 80:
! 81: /* print out the string as is, except prepend " with backslash */
! 82: putc('"', stdout);
! 83: for (i = 0; i < ds->value->used - 1; i++) {
! 84: unsigned char c = ds->value->ptr[i];
! 85: if (c == '"') {
! 86: fputs("\\\"", stdout);
! 87: } else {
! 88: putc(c, stdout);
! 89: }
! 90: }
! 91: putc('"', stdout);
! 92: }
! 93:
! 94:
! 95: data_string *data_string_init(void) {
! 96: data_string *ds;
! 97:
! 98: ds = calloc(1, sizeof(*ds));
! 99: assert(ds);
! 100:
! 101: ds->key = buffer_init();
! 102: ds->value = buffer_init();
! 103:
! 104: ds->copy = data_string_copy;
! 105: ds->free = data_string_free;
! 106: ds->reset = data_string_reset;
! 107: ds->insert_dup = data_string_insert_dup;
! 108: ds->print = data_string_print;
! 109: ds->type = TYPE_STRING;
! 110:
! 111: return ds;
! 112: }
! 113:
! 114: data_string *data_response_init(void) {
! 115: data_string *ds;
! 116:
! 117: ds = data_string_init();
! 118: ds->insert_dup = data_response_insert_dup;
! 119:
! 120: return ds;
! 121: }
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>