summaryrefslogtreecommitdiffstats
path: root/mbbsd
diff options
context:
space:
mode:
authorkcwu <kcwu@63ad8ddf-47c3-0310-b6dd-a9e9d9715204>2005-03-19 21:03:45 +0800
committerkcwu <kcwu@63ad8ddf-47c3-0310-b6dd-a9e9d9715204>2005-03-19 21:03:45 +0800
commit382d472a8cb7f59f566ac14c2d5f67e13bb583fb (patch)
tree1afd0b0e6c8717ed15ebd754fb945b603db0762a /mbbsd
parent0ea0790399f3678c35020d8858899d74b4dddfcc (diff)
downloadpttbbs-382d472a8cb7f59f566ac14c2d5f67e13bb583fb.tar
pttbbs-382d472a8cb7f59f566ac14c2d5f67e13bb583fb.tar.gz
pttbbs-382d472a8cb7f59f566ac14c2d5f67e13bb583fb.tar.bz2
pttbbs-382d472a8cb7f59f566ac14c2d5f67e13bb583fb.tar.lz
pttbbs-382d472a8cb7f59f566ac14c2d5f67e13bb583fb.tar.xz
pttbbs-382d472a8cb7f59f566ac14c2d5f67e13bb583fb.tar.zst
pttbbs-382d472a8cb7f59f566ac14c2d5f67e13bb583fb.zip
Backup screen without hole. Save 8~11kb for normal user.
This one is missed in r2314. git-svn-id: http://opensvn.csie.org/pttbbs/trunk/pttbbs@2658 63ad8ddf-47c3-0310-b6dd-a9e9d9715204
Diffstat (limited to 'mbbsd')
-rw-r--r--mbbsd/io.c11
-rw-r--r--mbbsd/screen.c1
2 files changed, 8 insertions, 4 deletions
diff --git a/mbbsd/io.c b/mbbsd/io.c
index 7155eda9..e10259ec 100644
--- a/mbbsd/io.c
+++ b/mbbsd/io.c
@@ -291,16 +291,19 @@ igetch(void)
if (currutmp->msgs[0].pid &&
WATERMODE(WATER_OFO) && wmofo == NOTREPLYING) {
int y, x, my_newfd;
- screenline_t *screen0 = calloc(t_lines, sizeof(screenline_t));
- memcpy(screen0, big_picture, t_lines * sizeof(screenline_t));
+ void *screen0;
+
+ screen0=malloc(screen_backupsize(t_lines, big_picture));
+ screen_backup(t_lines, big_picture, screen0);
getyx(&y, &x);
+
my_newfd = i_newfd;
i_newfd = 0;
my_write2();
- memcpy(big_picture, screen0, t_lines * sizeof(screenline_t));
+ screen_restore(t_lines, big_picture, screen0);
+ free(screen0);
i_newfd = my_newfd;
move(y, x);
- free(screen0);
redoscr();
continue;
} else if (!WATERMODE(WATER_OFO)) {
diff --git a/mbbsd/screen.c b/mbbsd/screen.c
index 7435716f..bf744931 100644
--- a/mbbsd/screen.c
+++ b/mbbsd/screen.c
@@ -505,6 +505,7 @@ standend(void)
}
}
+// XXX race: signal handler write to screen, data larger than allocated buf
void screen_backup(int len, const screenline_t *bp, void *buf)
{
int i;