summary | shortlog | log | commit | commitdiff | tree
raw | patch | inline | side by side (parent: 147e384)
raw | patch | inline | side by side (parent: 147e384)
author | Max Kellermann <max@duempel.org> | |
Mon, 6 Oct 2008 12:55:31 +0000 (14:55 +0200) | ||
committer | Max Kellermann <max@duempel.org> | |
Mon, 6 Oct 2008 12:55:31 +0000 (14:55 +0200) |
memmove() handles overlapping buffers well, we can use it to get room
for the inserted character.
for the inserted character.
src/wreadln.c | patch | blob | history |
diff --git a/src/wreadln.c b/src/wreadln.c
index f10b8c23f96c125f890b7ddc187ae4415c869ac2..0bfc414086a7ac541b990d776492a74f146576c0 100644 (file)
--- a/src/wreadln.c
+++ b/src/wreadln.c
{
if (strlen(wr->line + wr->cursor)) { /* if the cursor is */
/* not at the last pos */
- gchar *tmp = NULL;
gsize rest = strlen(wr->line + wr->cursor) + 1;
- tmp = g_malloc0(rest);
- g_strlcpy (tmp, wr->line + wr->cursor, rest);
+ memmove(wr->line + wr->cursor + 1,
+ wr->line + wr->cursor, rest);
wr->line[wr->cursor] = key;
- wr->line[wr->cursor + 1] = 0;
- g_strlcat(&wr->line[wr->cursor + 1], tmp, rest);
- g_free(tmp);
- cursor_move_right(wr);
} else {
wr->line[wr->cursor + 1] = 0;
wr->line[wr->cursor] = key;