X-Git-Url: https://ncurses.scripts.mit.edu/?p=ncurses.git;a=blobdiff_plain;f=ncurses%2Fbase%2Flib_window.c;h=d755e88d66a38a6bb6c6c93a8b41c53966606b30;hp=c740ea13d798f02d55189d7fe368d7350868b99e;hb=2e68dc325852af56f2ec6c315b323a4f9c3d62c9;hpb=3a0d9d27e0cf115ff9dcc6163c251bccaa62bd7d diff --git a/ncurses/base/lib_window.c b/ncurses/base/lib_window.c index c740ea13..d755e88d 100644 --- a/ncurses/base/lib_window.c +++ b/ncurses/base/lib_window.c @@ -1,5 +1,5 @@ /**************************************************************************** - * Copyright (c) 1998-2008,2009 Free Software Foundation, Inc. * + * Copyright (c) 1998-2010,2016 Free Software Foundation, Inc. * * * * Permission is hereby granted, free of charge, to any person obtaining a * * copy of this software and associated documentation files (the * @@ -39,7 +39,7 @@ #include -MODULE_ID("$Id: lib_window.c,v 1.27 2009/10/24 22:12:46 tom Exp $") +MODULE_ID("$Id: lib_window.c,v 1.30 2016/05/28 23:11:26 tom Exp $") NCURSES_EXPORT(void) _nc_synchook(WINDOW *win) @@ -56,26 +56,25 @@ mvderwin(WINDOW *win, int y, int x) /* move a derived window */ { WINDOW *orig; - int i; + int rc = ERR; T((T_CALLED("mvderwin(%p,%d,%d)"), (void *) win, y, x)); - if (win && (orig = win->_parent)) { - if (win->_parx == x && win->_pary == y) - returnCode(OK); - if (x < 0 || y < 0) - returnCode(ERR); - if ((x + getmaxx(win) > getmaxx(orig)) || - (y + getmaxy(win) > getmaxy(orig))) - returnCode(ERR); - } else - returnCode(ERR); - wsyncup(win); - win->_parx = x; - win->_pary = y; - for (i = 0; i < getmaxy(win); i++) - win->_line[i].text = &(orig->_line[y++].text[x]); - returnCode(OK); + if (win != 0 + && (orig = win->_parent) != 0 + && (x >= 0 && y >= 0) + && (x + getmaxx(win) <= getmaxx(orig)) + && (y + getmaxy(win) <= getmaxy(orig))) { + int i; + + wsyncup(win); + win->_parx = x; + win->_pary = y; + for (i = 0; i < getmaxy(win); i++) + win->_line[i].text = &(orig->_line[y++].text[x]); + rc = OK; + } + returnCode(rc); } NCURSES_EXPORT(int) @@ -179,8 +178,6 @@ dupwin(WINDOW *win) /* make an exact duplicate of the given window */ { WINDOW *nwin = 0; - size_t linesize; - int i; T((T_CALLED("dupwin(%p)"), (void *) win)); @@ -202,6 +199,8 @@ dupwin(WINDOW *win) } if (nwin != 0) { + int i; + size_t linesize; nwin->_curx = win->_curx; nwin->_cury = win->_cury; @@ -241,7 +240,7 @@ dupwin(WINDOW *win) if (win->_flags & _ISPAD) nwin->_pad = win->_pad; - linesize = (win->_maxx + 1) * sizeof(NCURSES_CH_T); + linesize = (unsigned) (win->_maxx + 1) * sizeof(NCURSES_CH_T); for (i = 0; i <= nwin->_maxy; i++) { memcpy(nwin->_line[i].text, win->_line[i].text, linesize); nwin->_line[i].firstchar = win->_line[i].firstchar;