Xinqi Bao's Git
projects
/
st.git
/ blobdiff
summary
|
log
|
commit
|
diff
|
tree
raw
|
inline
| side by side
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) {
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],
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) {
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],
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);
}
tclearregion(src, term.c.y, dst - 1, term.c.y);
}