Module Name: src Committed By: uwe Date: Sun Jan 6 04:27:53 UTC 2019
Modified Files: src/lib/libcurses: refresh.c Log Message: _wnoutrefresh - extend current position checks. Also verify that dwin->cury >= begy (ditto for x), i.e. for pads make sure that the current position is after the beginning of the displayed portion. While here refactor the checks for better readability. We should probably combine the y and x checks b/c if one of them is not in the range, the current position as a whole is not in the range and it doesn't make sense to pick and set just the y or just the x part of it. To generate a diff of this commit: cvs rdiff -u -r1.104 -r1.105 src/lib/libcurses/refresh.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
Modified files: Index: src/lib/libcurses/refresh.c diff -u src/lib/libcurses/refresh.c:1.104 src/lib/libcurses/refresh.c:1.105 --- src/lib/libcurses/refresh.c:1.104 Sun Jan 6 03:59:17 2019 +++ src/lib/libcurses/refresh.c Sun Jan 6 04:27:53 2019 @@ -1,4 +1,4 @@ -/* $NetBSD: refresh.c,v 1.104 2019/01/06 03:59:17 uwe Exp $ */ +/* $NetBSD: refresh.c,v 1.105 2019/01/06 04:27:53 uwe Exp $ */ /* * Copyright (c) 1981, 1993, 1994 @@ -34,7 +34,7 @@ #if 0 static char sccsid[] = "@(#)refresh.c 8.7 (Berkeley) 8/13/94"; #else -__RCSID("$NetBSD: refresh.c,v 1.104 2019/01/06 03:59:17 uwe Exp $"); +__RCSID("$NetBSD: refresh.c,v 1.105 2019/01/06 04:27:53 uwe Exp $"); #endif #endif /* not lint */ @@ -165,6 +165,7 @@ _wnoutrefresh(WINDOW *win, int begy, int { SCREEN *screen = win->screen; short sy, wy, wx, y_off, x_off, mx, dy_off, dx_off, endy; + int newy, newx; __LINE *wlp, *vlp, *dwlp; WINDOW *sub_win, *orig, *swin, *dwin; @@ -217,12 +218,14 @@ _wnoutrefresh(WINDOW *win, int begy, int } /* Check that cursor position on "win" is valid for "__virtscr" */ - if (dwin->cury + wbegy - begy < screen->__virtscr->maxy && - dwin->cury + wbegy - begy >= 0 && dwin->cury < maxy) - screen->__virtscr->cury = dwin->cury + wbegy - begy; - if (dwin->curx + wbegx - begx < screen->__virtscr->maxx && - dwin->curx + wbegx - begx >= 0 && dwin->curx < maxx) - screen->__virtscr->curx = dwin->curx + wbegx - begx; + newy = wbegy + dwin->cury - begy; + newx = wbegx + dwin->curx - begx; + if (begy <= dwin->cury && dwin->cury < maxy + && 0 <= newy && newy < screen->__virtscr->maxy) + screen->__virtscr->cury = newy; + if (begx <= dwin->curx && dwin->curx < maxx + && 0 <= newx && newx < screen->__virtscr->maxx) + screen->__virtscr->curx = newx; /* Copy the window flags from "win" to "__virtscr" */ if (dwin->flags & __CLEAROK) {