The problem seems to be in the put_chars() function (buffer.c). The
buffer which is allocated by the GString is never free'd.

Also, it seems that the CRLF auto stuff is done both in the put_chars()
and put_text() (widgets.c) functions.

I have made a small patch - please check it out.

- Nikolaj
diff -rupN gtkterm-0.99.5-orig/src/buffer.c gtkterm-0.99.5/src/buffer.c
--- gtkterm-0.99.5-orig/src/buffer.c	2005-09-22 20:33:44.000000000 +0100
+++ gtkterm-0.99.5/src/buffer.c	2009-01-21 16:32:52.000000000 +0000
@@ -83,10 +83,9 @@ void put_chars(char *chars, unsigned int
 	      size += 1;
 	    }
 	}
+      chars = buffer_tmp->str;
     }
 
-  chars = buffer_tmp->str;
-
   if(buffer == NULL)
     {
       i18n_printf(_("ERROR : Buffer is not initialized !\n"));
@@ -119,6 +118,8 @@ void put_chars(char *chars, unsigned int
   
   if(write_func != NULL)
     write_func(characters, size);
+
+  g_string_free(buffer_tmp, 1);
 }
 
 void write_buffer(void)
diff -rupN gtkterm-0.99.5-orig/src/widgets.c gtkterm-0.99.5/src/widgets.c
--- gtkterm-0.99.5-orig/src/widgets.c	2005-09-22 21:13:00.000000000 +0100
+++ gtkterm-0.99.5/src/widgets.c	2009-01-21 16:30:19.000000000 +0000
@@ -438,30 +438,7 @@ void put_hexadecimal(gchar *string, guin
 
 void put_text(gchar *string, guint size)
 {
-  int pos;
-  GString *buffer_tmp;
-  gchar *in_buffer;
-  
-  buffer_tmp =  g_string_new(string);
-  in_buffer=buffer_tmp->str;
-
-  in_buffer += size;
-  for(pos=size; pos>0; pos--)
-    {
-      in_buffer--;
-      if(*in_buffer=='\r' && *(in_buffer+1) != '\n') 
-	{
-	  g_string_insert_c(buffer_tmp, pos, '\n');
-	  size += 1;
-	}
-      if(*in_buffer=='\n' && *(in_buffer-1) != '\r') 
-	{
-	  g_string_insert_c(buffer_tmp, pos-1, '\r');
-	  size += 1;
-	}
-    }
-
-  vte_terminal_feed(VTE_TERMINAL(display), buffer_tmp->str, size);
+  vte_terminal_feed(VTE_TERMINAL(display), string, size);
 }
 
 gint send_serial(gchar *string, gint len)

Reply via email to