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)