Index: libcfa/src/parseconfig.cfa
===================================================================
--- libcfa/src/parseconfig.cfa	(revision 02a22a264ae377bd69f044b224629396bed8a4e1)
+++ libcfa/src/parseconfig.cfa	(revision ba61cd9d4b23a5284257556946d3859cbbb0ede1)
@@ -55,11 +55,56 @@
 }
 
+
+struct StringBuilder {
+	int size, max_size;
+	* char string;
+};
+void ?{}( StringBuilder & sb ) with ( sb ) {				// default constructor
+	size = 1; max_size = 1; string = alloc( 1 );
+	string[0] = '\0';
+}
+void ?{}( StringBuilder & sb, int size ) { 					// initialization
+	sb.[ size, max_size ] = [ 1, size+1 ];
+	sb.string = alloc( size );
+	sb.string[0] = '\0';
+}
+void ^?{}( StringBuilder & sb ) with ( sb ) {				// destructor
+	free( string );
+	size = 0; max_size = 0; string = 0p;
+}
+
+void add_char( StringBuilder & sb, char c ) with ( sb ) {
+	if ( size == max_size ) {
+		max_size *= 2;
+		string = resize( string, max_size );
+	}
+
+	string[size-1] = c;
+	string[size] = '\0';
+	++size;
+}
+
+
 bool comments( ifstream & in, char * name ) {
+	StringBuilder sb;
+
+	char c;
 	while () {
-		in | name;
-	  if ( fail( in ) ) return true;
-	  if ( name[0] != '#' ) break;
+		in | c;
+		add_char( sb, c );
+
+	  	if ( fail( in ) ) {
+			name = alloc( sb.size );
+			strcpy( name, sb.string );
+
+		  	return true;
+	  	}
+	  if ( c != '#' ) break;
 		in | nl;	// ignore remainder of line
 	} // for
+
+	name = alloc( sb.size );
+	strcpy( name, sb.string );
+
 	return false;
 } // comments
