summary refs log tree commit diff stats
path: root/src/fe-gtk/xtext.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/fe-gtk/xtext.c')
-rw-r--r--src/fe-gtk/xtext.c20
1 files changed, 18 insertions, 2 deletions
diff --git a/src/fe-gtk/xtext.c b/src/fe-gtk/xtext.c
index 203bcd60..8ca24a12 100644
--- a/src/fe-gtk/xtext.c
+++ b/src/fe-gtk/xtext.c
@@ -4729,6 +4729,7 @@ void
 gtk_xtext_append (xtext_buffer *buf, unsigned char *text, int len, time_t stamp)
 {
 	textentry *ent;
+	gboolean truncate = FALSE;
 
 	if (len == -1)
 		len = strlen (text);
@@ -4737,12 +4738,27 @@ gtk_xtext_append (xtext_buffer *buf, unsigned char *text, int len, time_t stamp)
 		len--;
 
 	if (len >= sizeof (buf->xtext->scratch_buffer))
+	{
 		len = sizeof (buf->xtext->scratch_buffer) - 1;
+		truncate = TRUE;
+	}
 
 	ent = g_malloc (len + 1 + sizeof (textentry));
 	ent->str = (unsigned char *) ent + sizeof (textentry);
-	safe_strcpy (ent->str, text, len);
-	ent->str_len = strlen (ent->str); /* Possibly truncated */
+	ent->str_len = len;
+	if (len)
+	{
+		if (!truncate)
+		{
+			memcpy (ent->str, text, len);
+			ent->str[len] = '\0';
+		}
+		else
+		{
+			safe_strcpy (ent->str, text, sizeof (buf->xtext->scratch_buffer));
+			ent->str_len = strlen (ent->str);
+		}
+	}
 	ent->indent = 0;
 	ent->left_len = -1;