JasonWoof Got questions, comments, patches, etc.? Contact Jason Woofenden
Simplify tdeletechar and tinsertblank and fix memory corruption.
[st.git] / st.c
diff --git a/st.c b/st.c
index 60243a7..263abaa 100644 (file)
--- a/st.c
+++ b/st.c
@@ -1586,37 +1586,31 @@ tclearregion(int x1, int y1, int x2, int y2) {
 
 void
 tdeletechar(int n) {
-       int src = term.c.x + n;
-       int dst = term.c.x;
-       int size = term.col - src;
+       int dst, src, size;
 
-       term.dirty[term.c.y] = 1;
+       LIMIT(n, 0, term.col - term.c.x);
 
-       if(src >= term.col) {
-               tclearregion(term.c.x, term.c.y, term.col-1, term.c.y);
-               return;
-       }
+       dst = term.c.x;
+       src = term.c.x + n;
+       size = term.col - src;
 
        memmove(&term.line[term.c.y][dst], &term.line[term.c.y][src],
-                       size * sizeof(Glyph));
+               size * sizeof(Glyph));
        tclearregion(term.col-n, term.c.y, term.col-1, term.c.y);
 }
 
 void
 tinsertblank(int n) {
-       int src = term.c.x;
-       int dst = src + n;
-       int size = term.col - dst;
+       int dst, src, size;
 
-       term.dirty[term.c.y] = 1;
+       LIMIT(n, 0, term.col - term.c.x);
 
-       if(dst >= term.col) {
-               tclearregion(term.c.x, term.c.y, term.col-1, term.c.y);
-               return;
-       }
+       dst = term.c.x + n;
+       src = term.c.x;
+       size = term.col - dst;
 
        memmove(&term.line[term.c.y][dst], &term.line[term.c.y][src],
-                       size * sizeof(Glyph));
+               size * sizeof(Glyph));
        tclearregion(src, term.c.y, dst - 1, term.c.y);
 }