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)