diff -r 1a7853a4257e -r 5dee29c7c530 src/server/config/conf.c --- a/src/server/config/conf.c Thu Feb 23 13:10:04 2012 +0100 +++ b/src/server/config/conf.c Sat Feb 25 12:43:26 2012 +0100 @@ -40,13 +40,15 @@ mline.length = 0; ConfigLine *start_line; ConfigLine *end_line; - + // read file sstr_t l; while((l = cfg_readln(in)).ptr != NULL) { + void *org_ptr = l.ptr; + // put the line to the list ConfigLine *line = OBJ_NEW(parser->mp, ConfigLine); - line->line = sstrdub(l); + line->line = sstrdup_mp(parser->mp, l); // TODO: check for 0-len str line->object = NULL; line->type = LINE_OTHER; parser->lines = ucx_dlist_append(parser->lines, line); @@ -59,7 +61,10 @@ // check for multi line if(mline.ptr != NULL) { // concate lines - char *ptr = malloc(mline.length + l.length + 1); + char *ptr = ucx_mempool_malloc( + parser->mp, + mline.length + l.length + 1); + memcpy(ptr, mline.ptr, mline.length); memcpy(ptr + mline.length - 1, l.ptr, l.length); mline.length += l.length; @@ -73,7 +78,7 @@ } if(l.ptr[l.length - 1] == '\\') { if(mline.ptr == NULL) { - mline = sstrdub(l); + mline = sstrdup_mp(parser->mp, l); start_line = line; } } else { @@ -88,7 +93,7 @@ } else { ll = mline; } - + // parse int r = parser->parse(parser, start_line, end_line, ll); @@ -106,6 +111,8 @@ } } } + + free(org_ptr); } return 0; @@ -136,7 +143,7 @@ } sstr_t line = sstr(buf); - return line; + return sstrdub(line); } sstr_t s; @@ -276,7 +283,7 @@ // create directive object ConfigDirective *directive = OBJ_NEW(mp, ConfigDirective); - directive->directive_type = sstrdub(name); + directive->directive_type = sstrdup_mp(mp, name); directive->type_num = cfg_get_directive_type_num(name); directive->condition = NULL; // set later by main parsing function directive->param = NULL; @@ -296,15 +303,10 @@ // create param object ConfigParam *param = OBJ_NEW(mp, ConfigParam); - /* - * TODO: - * Wenn man sstrdub_mp statt sstrdub nimmt, wird der Inhalt von pname - * verunstaltet. Warum? - */ - param->name = sstrdub(pname); + param->name = sstrdup_mp(mp, pname); if(pvalue.length > 0) { - param->value = sstrdub(pvalue); + param->value = sstrdup_mp(mp, pvalue); } else { param->value.ptr = NULL; param->value.length = 0; @@ -370,7 +372,7 @@ // this line is to short to be correct return LINE_ERROR; } - + if(line.ptr[0] == '<') { // start or end tag // TODO: check for space between '<' and '/' @@ -452,7 +454,7 @@ // create tag object ConfigTag *tag = OBJ_NEW(mp, ConfigTag); - tag->name = sstrdub_mp(mp, name); + tag->name = sstrdup_mp(mp, name); tag->param = NULL; // parse parameters @@ -474,9 +476,9 @@ // create param object ConfigParam *param = OBJ_NEW(mp, ConfigParam); - param->name = sstrdub_mp(mp, pname); + param->name = sstrdup_mp(mp, pname); if(pvalue.length > 0) { - param->value = sstrdub_mp(mp, pvalue); + param->value = sstrdup_mp(mp, pvalue); } else { param->value.ptr = NULL; param->value.length = 0;