diff options
author | kcwu <kcwu@63ad8ddf-47c3-0310-b6dd-a9e9d9715204> | 2005-03-19 21:03:45 +0800 |
---|---|---|
committer | kcwu <kcwu@63ad8ddf-47c3-0310-b6dd-a9e9d9715204> | 2005-03-19 21:03:45 +0800 |
commit | 382d472a8cb7f59f566ac14c2d5f67e13bb583fb (patch) | |
tree | 1afd0b0e6c8717ed15ebd754fb945b603db0762a /mbbsd | |
parent | 0ea0790399f3678c35020d8858899d74b4dddfcc (diff) | |
download | pttbbs-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.c | 11 | ||||
-rw-r--r-- | mbbsd/screen.c | 1 |
2 files changed, 8 insertions, 4 deletions
@@ -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; |