X-Git-Url: https://git.subgeniuskitty.com/unix-history/.git/blobdiff_plain/8cc6062ee4829fc4f2d3134de04c5ba75a71a2be..1cb79f9c8563547f3dd69de8ed760d267bc03763:/usr/src/lib/libcurses/delwin.c diff --git a/usr/src/lib/libcurses/delwin.c b/usr/src/lib/libcurses/delwin.c index 81aab37d46..d58a2401d9 100644 --- a/usr/src/lib/libcurses/delwin.c +++ b/usr/src/lib/libcurses/delwin.c @@ -1,9 +1,18 @@ +/* + * Copyright (c) 1980 Regents of the University of California. + * All rights reserved. The Berkeley software License Agreement + * specifies the terms and conditions for redistribution. + */ + +#ifndef lint +static char sccsid[] = "@(#)delwin.c 5.1 (Berkeley) %G%"; +#endif not lint + # include "curses.ext" /* * This routine deletes a window and releases it back to the system. * - * %G% (Berkeley) @(#)delwin.c 1.4 */ delwin(win) reg WINDOW *win; { @@ -12,8 +21,14 @@ reg WINDOW *win; { reg WINDOW *wp, *np; if (win->_orig == NULL) { + /* + * If we are the original window, delete the space for + * all the subwindows, and the array of space as well. + */ for (i = 0; i < win->_maxy && win->_y[i]; i++) - cfree(win->_y[i]); + free(win->_y[i]); + free(win->_firstch); + free(win->_lastch); wp = win->_nextp; while (wp != win) { np = wp->_nextp; @@ -21,8 +36,17 @@ reg WINDOW *win; { wp = np; } } - cfree(win->_y); - cfree(win->_firstch); - cfree(win->_lastch); - cfree(win); + else { + /* + * If we are a subwindow, take ourselves out of the + * list. NOTE: if we are a subwindow, the minimum list + * is orig followed by this subwindow, so there are + * always at least two windows in the list. + */ + for (wp = win->_nextp; wp->_nextp != win; wp = wp->_nextp) + continue; + wp->_nextp = win->_nextp; + } + free(win->_y); + free(win); }