From 382d472a8cb7f59f566ac14c2d5f67e13bb583fb Mon Sep 17 00:00:00 2001 From: kcwu Date: Sat, 19 Mar 2005 13:03:45 +0000 Subject: 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 --- mbbsd/io.c | 11 +++++++---- mbbsd/screen.c | 1 + 2 files changed, 8 insertions(+), 4 deletions(-) (limited to 'mbbsd') 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; -- cgit v1.2.3