src/server/config/conf.c

changeset 25
5dee29c7c530
parent 23
a2c8fc23c90e
child 36
450d2d5f4735
--- 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;

mercurial