diff --git a/src/cpp.c b/src/cpp.c
index f4045fe49606ba842c20c37bd6415d954ecd7877..92e05e01077e6cb8ca14897ff50aefa5f2c7ee92 100644
--- a/src/cpp.c
+++ b/src/cpp.c
@@ -5,10 +5,10 @@
 \*/
 
 /*
- * $Id: cpp.c,v 1.34 1999/02/20 17:42:32 grubba Exp $
+ * $Id: cpp.c,v 1.35 1999/02/22 00:25:42 grubba Exp $
  */
 #include "global.h"
-#include "dynamic_buffer.h"
+/* #include "dynamic_buffer.h" */
 #include "language.h"
 #include "lex.h"
 #include "stralloc.h"
@@ -39,20 +39,20 @@
 #define CPP_NO_EXPAND 64
 
 #define OUTP() (!(flags & (CPP_NO_OUTPUT | CPP_REALLY_NO_OUTPUT)))
-#define PUTNL() low_my_putchar('\n', &this->buf)
+#define PUTNL() string_builder_putchar(&this->buf, '\n')
 #define GOBBLE(X) (data[pos]==(X)?++pos,1:0)
 #define PUTC(C) do { \
- int c_=(C); if(OUTP() || c_=='\n') low_my_putchar(c_, &this->buf); }while(0)
+ int c_=(C); if(OUTP() || c_=='\n') string_builder_putchar(&this->buf, c_); }while(0)
 
 #define STRCAT(STR,LEN) do {				\
   INT32 x_,len_=(LEN);					\
   char *str_=(STR);					\
   if(OUTP())						\
-    low_my_binary_strcat(str_,len_, &this->buf);	\
+    string_builder_binary_strcat(&this->buf, str_,len_);	\
   else							\
     for(x_=0;x_<len_;x_++)				\
       if(str_[x_]=='\n')				\
-        low_my_putchar('\n',&this->buf);		\
+        string_builder_putchar(&this->buf, '\n');		\
 }while(0)
 
 #define CHECKWORD(X) \
@@ -93,7 +93,7 @@ struct define;
 typedef void (*magic_define_fun)(struct cpp *,
 				 struct define *,
 				 struct define_argument *,
-				 dynamic_buffer *);
+				 struct string_builder *);
 
 
 struct define
@@ -116,7 +116,7 @@ struct cpp
   INT32 current_line;
   INT32 compile_errors;
   struct pike_string *current_file;
-  dynamic_buffer buf;
+  struct string_builder buf;
 };
 
 struct define *defined_macro =0;
@@ -324,7 +324,7 @@ static void simple_add_define(struct cpp *this,
     break;					\
     						\
   default:					\
-    C=data[pos];				\
+    C=((unsigned char *)data)[pos];		\
   }						\
 }while (0)
 
@@ -357,12 +357,12 @@ while(1)					\
       continue;					\
     }						\
     READCHAR(tmp);				\
-    low_my_putchar(tmp, &nf);			\
+    string_builder_putchar(&nf, tmp);		\
     continue;					\
   }						\
 						\
   default:					\
-    low_my_putchar(data[pos], &nf);		\
+    string_builder_putchar(&nf, ((unsigned char *)data)[pos]);	\
     continue;					\
   }						\
   pos++;					\
@@ -374,7 +374,7 @@ while(1)					\
  */
 #define FIXSTRING(nf,outp)	do {			\
 int trailing_newlines=0;				\
-if(outp) low_my_putchar('"', &nf);			\
+if(outp) string_builder_putchar(&nf, '"');		\
 while(1)						\
 {							\
   if(pos>=len)						\
@@ -398,16 +398,16 @@ while(1)						\
       this->current_line++;				\
       continue;						\
     }							\
-    if(outp) low_my_putchar('\\', &nf);		        \
+    if(outp) string_builder_putchar(&nf, '\\');	        \
     pos++;                                              \
 							\
   default:						\
-    if(outp) low_my_putchar(data[pos-1], &nf);		\
+    if(outp) string_builder_putchar(&nf, ((unsigned char *)data)[pos-1]);	\
     continue;						\
   }							\
   break;						\
 }							\
-if(outp) low_my_putchar('"', &nf);			\
+if(outp) string_builder_putchar(&nf, '"');		\
 while(trailing_newlines--) PUTNL();			\
 }while(0)
 
@@ -433,7 +433,7 @@ while(1)					\
       continue;					\
     }						\
     READCHAR(tmp);				\
-    low_my_putchar(tmp, &nf);			\
+    string_builder_putchar(&nf, tmp);		\
     continue;					\
   }						\
 						\
@@ -441,7 +441,7 @@ while(1)					\
     PUTNL();					\
     this->current_line++;			\
   default:					\
-    low_my_putchar(data[pos], &nf);		\
+    string_builder_putchar(&nf, ((unsigned char *)data)[pos]);	\
     continue;					\
   }						\
   pos++;					\
@@ -450,62 +450,62 @@ while(1)					\
 
 void PUSH_STRING(char *str,
 		 INT32 len,
-		 dynamic_buffer *buf)
+		 struct string_builder *buf)
 {
   INT32 p2;
-  low_my_putchar('"', buf);
+  string_builder_putchar(buf, '"');
   for(p2=0;p2<len;p2++)
   {
     switch(str[p2])
     {
     case '\n':
-      low_my_putchar('\\', buf);
-      low_my_putchar('n', buf);
+      string_builder_putchar(buf, '\\');
+      string_builder_putchar(buf, 'n');
       break;
       
     case '\t':
-      low_my_putchar('\\', buf);
-      low_my_putchar('t', buf);
+      string_builder_putchar(buf, '\\');
+      string_builder_putchar(buf, 't');
       break;
       
     case '\r':
-      low_my_putchar('\\', buf);
-      low_my_putchar('r', buf);
+      string_builder_putchar(buf, '\\');
+      string_builder_putchar(buf, 'r');
       break;
       
     case '\b':
-      low_my_putchar('\\', buf);
-      low_my_putchar('b', buf);
+      string_builder_putchar(buf, '\\');
+      string_builder_putchar(buf, 'b');
       break;
       
     case '\\':
     case '"':
-      low_my_putchar('\\', buf);
-      low_my_putchar(str[p2], buf);
+      string_builder_putchar(buf, '\\');
+      string_builder_putchar(buf, ((unsigned char *)str)[p2]);
       break;
       
     default:
       if(isprint(EXTRACT_UCHAR(str+p2)))
       {
-	low_my_putchar(str[p2], buf);
+	string_builder_putchar(buf, ((unsigned char *)str)[p2]);
       }
       else
       {
 	int c=EXTRACT_UCHAR(str+p2);
-	low_my_putchar('\\', buf);
-	low_my_putchar(((c>>6)&7)+'0', buf);
-	low_my_putchar(((c>>3)&7)+'0', buf);
-	low_my_putchar((c&7)+'0', buf);
+	string_builder_putchar(buf, '\\');
+	string_builder_putchar(buf, ((c>>6)&7)+'0');
+	string_builder_putchar(buf, ((c>>3)&7)+'0');
+	string_builder_putchar(buf, (c&7)+'0');
 	if(EXTRACT_UCHAR(str+p2+1)>='0' && EXTRACT_UCHAR(str+p2+1)<='7')
 	{
-	  low_my_putchar('"',buf);
-	  low_my_putchar('"',buf);
+	  string_builder_putchar(buf, '"');
+	  string_builder_putchar(buf, '"');
 	}
       }
       break;
     }
   }
-  low_my_putchar('"', buf);
+  string_builder_putchar(buf, '"');
 }
 
 #define FINDTOK() 				\
@@ -614,7 +614,7 @@ static INT32 low_cpp(struct cpp *this,
       case '{': case '}': case ':': case '?': case '`': case ';':
       case '>': case ',': case '.': case '~': case '[':
       case ']': case '|':
-	PUTC(data[pos-1]);
+	PUTC(((unsigned char *)data)[pos-1]);
       break;
       
     default:
@@ -651,7 +651,7 @@ static INT32 low_cpp(struct cpp *this,
 	if(d && !d->inside)
 	{
 	  int arg=0;
-	  dynamic_buffer tmp;
+	  struct string_builder tmp;
 	  struct define_argument arguments [MAX_ARGS];
 	  
 	  if(s) add_ref(s);
@@ -728,12 +728,12 @@ static INT32 low_cpp(struct cpp *this,
 	  if(d->args >= 0 && arg != d->args)
 	    cpp_error(this,"Wrong number of arguments to macro.");
 	  
-	  initialize_buf(&tmp);
+	  init_string_builder(&tmp, 0);
 	  if(d->magic)
 	  {
 	    d->magic(this, d, arguments, &tmp);
 	  }else{
-	    low_my_binary_strcat(d->first->str, d->first->len, &tmp);
+	    string_builder_binary_strcat(&tmp, d->first->str, d->first->len);
 	    for(e=0;e<d->num_parts;e++)
 	    {
 	      char *a;
@@ -750,7 +750,7 @@ static INT32 low_cpp(struct cpp *this,
 	      l=arguments[d->parts[e].argument&DEF_ARG_MASK].len;
 	      
 	      if(!(d->parts[e].argument & DEF_ARG_NOPRESPACE))
-		low_my_putchar(' ', &tmp);
+		string_builder_putchar(&tmp, ' ');
 	      
 	      if(d->parts[e].argument & DEF_ARG_STRINGIFY)
 	      {
@@ -767,9 +767,9 @@ static INT32 low_cpp(struct cpp *this,
 		if(d->parts[e].argument & (DEF_ARG_NOPRESPACE | DEF_ARG_NOPOSTSPACE))
 		{
 		  
-		  low_my_binary_strcat(a, l, &tmp);
+		  string_builder_binary_strcat(&tmp, a, l);
 		}else{
-		  dynamic_buffer save;
+		  struct string_builder save;
 		  INT32 line=this->current_line;
 		  save=this->buf;
 		  this->buf=tmp;
@@ -782,25 +782,24 @@ static INT32 low_cpp(struct cpp *this,
 	      }
 	      
 	      if(!(d->parts[e].argument & DEF_ARG_NOPOSTSPACE))
-		low_my_putchar(' ', &tmp);
+		string_builder_putchar(&tmp, ' ');
 	      
-	      low_my_binary_strcat(d->parts[e].postfix->str,
-				   d->parts[e].postfix->len,
-				   &tmp);
+	      string_builder_binary_strcat(&tmp, d->parts[e].postfix->str,
+					   d->parts[e].postfix->len);
 	    }
 	  }
 	  
 	  /* FIXME */
-	  for(e=0;e<(long)tmp.s.len;e++)
-	    if(tmp.s.str[e]=='\n')
-	      tmp.s.str[e]=' ';
+	  for(e=0;e<(long)tmp.s->len;e++)
+	    if(tmp.s->str[e]=='\n')
+	      tmp.s->str[e]=' ';
 
 	  if(s) d->inside=1;
 	  
-	  low_my_putchar(0, &tmp);
-	  tmp.s.len--;
+	  string_builder_putchar(&tmp, 0);
+	  tmp.s->len--;
 	  
-	  low_cpp(this, tmp.s.str, tmp.s.len, 
+	  low_cpp(this, tmp.s->str, tmp.s->len, 
 		  flags & ~(CPP_EXPECT_ENDIF | CPP_EXPECT_ELSE));
 	  
 	  if(s)
@@ -811,7 +810,7 @@ static INT32 low_cpp(struct cpp *this,
 	    free_string(s);
 	  }
 
-	  toss_buffer(&tmp);
+	  free_string_builder(&tmp);
 	  break;
 	}else{
 	  if(flags & CPP_DO_IF)
@@ -822,13 +821,13 @@ static INT32 low_cpp(struct cpp *this,
 	  }
 	}
       }else{
-	PUTC(data[pos-1]);
+	PUTC(((unsigned char *)data)[pos-1]);
       }
       break;
       
     case '0': case '1': case '2': case '3': case '4':
     case '5': case '6': case '7': case '8': case '9':
-      PUTC(data[pos-1]);
+      PUTC(((unsigned char *)data)[pos-1]);
       while(data[pos]>='0' && data[pos]<='9') PUTC(data[pos++]);
       break;
 
@@ -856,7 +855,7 @@ static INT32 low_cpp(struct cpp *this,
 	break;
       }
 
-      PUTC(data[pos-1]);
+      PUTC(((unsigned char *)data)[pos-1]);
       break;
 
   case '#':
@@ -883,22 +882,22 @@ static INT32 low_cpp(struct cpp *this,
     {
       char *foo=data+pos;
       this->current_line=STRTOL(foo, &foo, 10)-1;
-      low_my_putchar('#',&this->buf);
-      low_my_binary_strcat(data+pos, foo-(data+pos), &this->buf);
+      string_builder_putchar(&this->buf, '#');
+      string_builder_binary_strcat(&this->buf, data+pos, foo-(data+pos));
       pos=foo-data;
       SKIPSPACE();
       
       if(data[pos]=='"')
       {
-	dynamic_buffer nf;
-	initialize_buf(&nf);
+	struct string_builder nf;
+	init_string_builder(&nf, 0);
 	
 	READSTRING(nf);
 
 	free_string(this->current_file);
-	this->current_file=low_free_buf(&nf);
+	this->current_file = finish_string_builder(&nf);
 
-	low_my_putchar(' ',&this->buf);
+	string_builder_putchar(&this->buf, ' ');
 	PUSH_STRING(this->current_file->str,this->current_file->len,&this->buf);
       }
       
@@ -908,17 +907,17 @@ static INT32 low_cpp(struct cpp *this,
 
       case '"':
       {
-	dynamic_buffer nf;
-	initialize_buf(&nf);
+	struct string_builder nf;
+	init_string_builder(&nf, 0);
 	
 	READSTRING2(nf);
 	if(OUTP())
 	{
-	  PUSH_STRING(nf.s.str,
-		      nf.s.len,
+	  PUSH_STRING(nf.s->str,
+		      nf.s->len,
 		      &this->buf);
 	}
-	toss_buffer(&nf);
+	free_string_builder(&nf);
 	break;
       }
 
@@ -946,11 +945,11 @@ static INT32 low_cpp(struct cpp *this,
 	  {
 	    case '"':
 	      {
-		dynamic_buffer nf;
-		initialize_buf(&nf);
+		struct string_builder nf;
+		init_string_builder(&nf, 0);
 		pos--;
 		READSTRING(nf);
-		push_string(low_free_buf(&nf));
+		push_string(finish_string_builder(&nf));
 		ref_push_string(this->current_file);
 		push_int(1);
 		break;
@@ -1020,9 +1019,9 @@ static INT32 low_cpp(struct cpp *this,
 	      copy_shared_string(this->current_file,new_file);
 	      this->current_line=1;
 	      
-	      low_my_binary_strcat("# 1 ",4,&this->buf);
+	      string_builder_binary_strcat(&this->buf, "# 1 ", 4);
 	      PUSH_STRING(new_file->str,new_file->len, & this->buf);
-	      low_my_putchar('\n',&this->buf);
+	      string_builder_putchar(&this->buf, '\n');
 	      if(tmp2)
 	      {
 		PUSH_STRING(sp[-1].u.string->str,
@@ -1040,9 +1039,9 @@ static INT32 low_cpp(struct cpp *this,
 	      this->current_line=save_current_line;
 	      
 	      sprintf(buffer,"# %d ",this->current_line);
-	      low_my_binary_strcat(buffer,strlen(buffer),&this->buf);
+	      string_builder_binary_strcat(&this->buf, buffer, strlen(buffer));
 	      PUSH_STRING(this->current_file->str,this->current_file->len,& this->buf);
-	      low_my_putchar('\n',&this->buf);
+	      string_builder_putchar(&this->buf, '\n');
 	    }
 	  }
 
@@ -1054,23 +1053,23 @@ static INT32 low_cpp(struct cpp *this,
 
       if(WGOBBLE("if"))
       {
-	dynamic_buffer save,tmp;
+	struct string_builder save,tmp;
 	INT32 nflags=CPP_EXPECT_ELSE | CPP_EXPECT_ENDIF;
 	
 	if(!OUTP())
 	  nflags|=CPP_REALLY_NO_OUTPUT;
 	
 	save=this->buf;
-	initialize_buf(& this->buf);
+	init_string_builder(&this->buf, 0);
 	pos+=low_cpp(this,data+pos,len-pos,CPP_END_AT_NEWLINE|CPP_DO_IF);
 	tmp=this->buf;
 	this->buf=save;
 	
-	low_my_putchar(0, &tmp);
-	tmp.s.len--;
+	string_builder_putchar(&tmp, 0);
+	tmp.s->len--;
 	
-	calc(this,tmp.s.str,tmp.s.len,0);
-	toss_buffer(&tmp);
+	calc(this,tmp.s->str,tmp.s->len,0);
+	free_string_builder(&tmp);
 	if(IS_ZERO(sp-1)) nflags|=CPP_NO_OUTPUT;
 	pop_stack();
 	pos+=low_cpp(this,data+pos,len-pos,nflags);
@@ -1161,18 +1160,18 @@ static INT32 low_cpp(struct cpp *this,
 	
 	if(flags & CPP_NO_OUTPUT)
 	{
-	  dynamic_buffer save,tmp;
+	  struct string_builder save,tmp;
 	  save=this->buf;
-	  initialize_buf(& this->buf);
+	  init_string_builder(&this->buf, 0);
 	  pos+=low_cpp(this,data+pos,len-pos,CPP_END_AT_NEWLINE|CPP_DO_IF);
 	  tmp=this->buf;
 	  this->buf=save;
 	  
-	  low_my_putchar(0, &tmp);
-	  tmp.s.len--;
+	  string_builder_putchar(&tmp, 0);
+	  tmp.s->len--;
 	  
-	  calc(this,tmp.s.str,tmp.s.len,0);
-	  toss_buffer(&tmp);
+	  calc(this,tmp.s->str,tmp.s->len,0);
+	  free_string_builder(&tmp);
 	  if(!IS_ZERO(sp-1)) flags&=~CPP_NO_OUTPUT;
 	  pop_stack();
 	}else{
@@ -1202,7 +1201,7 @@ static INT32 low_cpp(struct cpp *this,
     case 'd': /* define */
       if(WGOBBLE("define"))
 	{
-	  dynamic_buffer str;
+	  struct string_builder str;
 	  INT32 namestart, tmp3, nameend, argno=-1;
 	  struct define *def;
 	  struct svalue *partbase,*argbase=sp;
@@ -1259,7 +1258,7 @@ static INT32 low_cpp(struct cpp *this,
 	  SKIPSPACE();
 
 	  partbase=sp;
-	  initialize_buf(&str);
+	  init_string_builder(&str, 0);
 	  
 	  while(1)
 	  {
@@ -1273,7 +1272,7 @@ static INT32 low_cpp(struct cpp *this,
 	    case '/':
 	      if(data[pos]=='/')
 	      {
-		low_my_putchar(' ',&str);
+		string_builder_putchar(&str, ' ');
 		FIND_EOL();
 		continue;
 	      }
@@ -1285,23 +1284,23 @@ static INT32 low_cpp(struct cpp *this,
 		continue;
 	      }
 	      
-	      low_my_putchar('/',&str);
+	      string_builder_putchar(&str, '/');
 	      continue;
 	      
 	    case '0': case '1': case '2': case '3':	case '4':
 	    case '5': case '6': case '7': case '8':	case '9':
-	      low_my_putchar(data[pos-1],&str);
+	      string_builder_putchar(&str, ((unsigned char *)data)[pos-1]);
 	      while(data[pos]>='0' && data[pos]<='9')
-		low_my_putchar(data[pos++],&str);
+		string_builder_putchar(&str, ((unsigned char *)data)[pos++]);
 	      continue;
 	      
 	    case '#':
 	      if(GOBBLE('#'))
 	      {
 		extra=DEF_ARG_NOPRESPACE;
-		while(str.s.len && isspace(((unsigned char *)str.s.str)[str.s.len-1]))
-		  str.s.len--;
-		if(!str.s.len && sp-partbase>1)
+		while(str.s->len && isspace(((unsigned char *)str.s->str)[str.s->len-1]))
+		  str.s->len--;
+		if(!str.s->len && sp-partbase>1)
 		{
 #ifdef PIKE_DEBUG
 		  if(sp[-1].type != T_INT)
@@ -1331,8 +1330,8 @@ static INT32 low_cpp(struct cpp *this,
 		      if(argbase[e].u.string == s)
 		      {
 			check_stack(2);
-			push_string(low_free_buf(&str));
-			initialize_buf(&str);
+			push_string(finish_string_builder(&str));
+			init_string_builder(&str, 0);
 			push_int(e | extra);
 			extra=0;
 			break;
@@ -1341,9 +1340,9 @@ static INT32 low_cpp(struct cpp *this,
 		    if(e!=argno) continue;
 		  }
 		}
-		low_my_binary_strcat(data+tmp3,pos-tmp3, &str);
+		string_builder_binary_strcat(&str, data+tmp3, pos-tmp3);
 	      }else{
-		low_my_putchar(data[pos-1],&str);
+		string_builder_putchar(&str, ((unsigned char *)data)[pos-1]);
 	      }
 	      extra=0;
 	      continue;
@@ -1355,7 +1354,7 @@ static INT32 low_cpp(struct cpp *this,
 	    case '\'':
 	      tmp3=pos-1;
 	      FIND_END_OF_CHAR();
-	      low_my_binary_strcat(data+tmp3, pos-tmp3, &str);
+	      string_builder_binary_strcat(&str, data+tmp3, pos-tmp3);
 	      continue;
 	      
 	    case '\\':
@@ -1372,7 +1371,7 @@ static INT32 low_cpp(struct cpp *this,
 	    case 0:
 		break;
 	    }
-	    push_string(low_free_buf(&str));
+	    push_string(finish_string_builder(&str));
 	    break;
 	  }
 
@@ -1534,10 +1533,10 @@ static INT32 calcC(struct cpp *this,char *data,INT32 len,INT32 pos)
 
   case '"':
   {
-    dynamic_buffer s;
-    initialize_buf(&s);
+    struct string_builder s;
+    init_string_builder(&s, 0);
     READSTRING(s);
-    push_string(low_free_buf(&s));
+    push_string(finish_string_builder(&s));
     break;
   }
   
@@ -1888,17 +1887,17 @@ void free_one_define(struct hash_entry *h)
 static void insert_current_line(struct cpp *this,
 				struct define *def,
 				struct define_argument *args,
-				dynamic_buffer *tmp)
+				struct string_builder *tmp)
 {
   char buf[20];
   sprintf(buf," %ld ",(long)this->current_line);
-  low_my_binary_strcat(buf, strlen(buf),tmp);
+  string_builder_binary_strcat(tmp, buf, strlen(buf));
 }
 
 static void insert_current_file_as_string(struct cpp *this,
 					  struct define *def,
 					  struct define_argument *args,
-					  dynamic_buffer *tmp)
+					  struct string_builder *tmp)
 {
   PUSH_STRING(this->current_file->str, this->current_file->len, tmp);
 }
@@ -1906,7 +1905,7 @@ static void insert_current_file_as_string(struct cpp *this,
 static void insert_current_time_as_string(struct cpp *this,
 					  struct define *def,
 					  struct define_argument *args,
-					  dynamic_buffer *tmp)
+					  struct string_builder *tmp)
 {
   time_t tmp2;
   char *buf;
@@ -1919,7 +1918,7 @@ static void insert_current_time_as_string(struct cpp *this,
 static void insert_current_date_as_string(struct cpp *this,
 					  struct define *def,
 					  struct define_argument *args,
-					  dynamic_buffer *tmp)
+					  struct string_builder *tmp)
 {
   time_t tmp2;
   char *buf;
@@ -1933,22 +1932,22 @@ static void insert_current_date_as_string(struct cpp *this,
 static void check_defined(struct cpp *this,
 			  struct define *def,
 			  struct define_argument *args,
-			  dynamic_buffer *tmp)
+			  struct string_builder *tmp)
 {
   struct pike_string *s;
   s=binary_findstring(args[0].arg, args[0].len);
   if(s && find_define(s))
   {
-    low_my_binary_strcat(" 1 ", 3,tmp);
+    string_builder_binary_strcat(tmp, " 1 ", 3);
   }else{
-    low_my_binary_strcat(" 0 ", 3,tmp);
+    string_builder_binary_strcat(tmp, " 0 ", 3);
   }
 }
 
 static void dumpdef(struct cpp *this,
 		    struct define *def,
 		    struct define_argument *args,
-		    dynamic_buffer *tmp)
+		    struct string_builder *tmp)
 {
   struct pike_string *s;
   struct define *d;
@@ -1960,31 +1959,31 @@ static void dumpdef(struct cpp *this,
     PUSH_STRING(d->link.s->str,d->link.s->len, tmp);
     if(d->magic)
     {
-      low_my_binary_strcat(" defined magically ",19, tmp);
+      string_builder_binary_strcat(tmp, " defined magically ", 19);
     }else{
-      low_my_binary_strcat(" defined as ",12, tmp);
+      string_builder_binary_strcat(tmp, " defined as ", 12);
       
       if(d->first)
 	PUSH_STRING(d->first->str, d->first->len, tmp);
       for(e=0;e<d->num_parts;e++)
       {
 	if(!(d->parts[e].argument & DEF_ARG_NOPRESPACE))
-	  low_my_putchar(' ',tmp);
+	  string_builder_putchar(tmp, ' ');
 	
 	if(d->parts[e].argument & DEF_ARG_STRINGIFY)
-	  low_my_putchar('#',tmp);
+	  string_builder_putchar(tmp, '#');
 	
 	sprintf(buffer,"%ld",(long)(d->parts[e].argument & DEF_ARG_MASK));
-	low_my_binary_strcat(buffer,strlen(buffer), tmp);
+	string_builder_binary_strcat(tmp, buffer, strlen(buffer));
 	
 	if(!(d->parts[e].argument & DEF_ARG_NOPOSTSPACE))
-	  low_my_putchar(' ',tmp);
+	  string_builder_putchar(tmp, ' ');
 	
 	PUSH_STRING(d->parts[e].postfix->str, d->parts[e].postfix->len, tmp);
       } 
     }
   }else{
-    low_my_binary_strcat(" 0 ",3, tmp);
+    string_builder_binary_strcat(tmp, " 0 ", 3);
   }
 }
 
@@ -1993,7 +1992,7 @@ static int do_safe_index_call(struct pike_string *s);
 static void check_constant(struct cpp *this,
 			  struct define *def,
 			  struct define_argument *args,
-			  dynamic_buffer *tmp)
+			  struct string_builder *tmp)
 {
   struct svalue *save_stack=sp;
   struct svalue *sv;
@@ -2059,7 +2058,7 @@ static void check_constant(struct cpp *this,
 
   pop_n_elems(sp-save_stack);
 
-  low_my_binary_strcat(res?" 1 ":" 0 ", 3,tmp);
+  string_builder_binary_strcat(tmp, res?" 1 ":" 0 ", 3);
 }
 
 
@@ -2101,7 +2100,7 @@ void f_cpp(INT32 args)
     this.current_file=make_shared_string("-");
   }
   
-  initialize_buf(&this.buf);
+  init_string_builder(&this.buf, 0);
   this.current_line=1;
   this.compile_errors=0;
   this.defines=0;
@@ -2129,11 +2128,11 @@ void f_cpp(INT32 args)
   for (tmpf=pike_predefs; tmpf; tmpf=tmpf->next)
     simple_add_define(&this, tmpf->name, tmpf->value);
 
-  low_my_binary_strcat("# 1 ",4,&this.buf);
-  PUSH_STRING(this.current_file->str,this.current_file->len,&this.buf);
-  low_my_putchar('\n',&this.buf);
+  string_builder_binary_strcat(&this.buf, "# 1 ", 4);
+  PUSH_STRING(this.current_file->str, this.current_file->len, &this.buf);
+  string_builder_putchar(&this.buf, '\n');
 
-  low_cpp(&this, sp[-args].u.string->str, sp[-args].u.string->len,0);
+  low_cpp(&this, sp[-args].u.string->str, sp[-args].u.string->len, 0);
   if(this.defines)
     free_hashtable(this.defines, free_one_define);
 
@@ -2141,11 +2140,11 @@ void f_cpp(INT32 args)
 
   if(this.compile_errors)
   {
-    toss_buffer(&this.buf);
+    free_string_builder(&this.buf);
     error("Cpp() failed\n");
   }else{
     pop_n_elems(args);
-    push_string(low_free_buf(&this.buf));
+    push_string(finish_string_builder(&this.buf));
   }
 }