- register struct ww **p;
-
- for (p = &wwhead; *p && *p != w; p = &(*p)->ww_next)
- ;
- if (*p == 0)
- return -1;
- *p = w->ww_next;
- if (curwin == w)
- curwin = wwhead;
- if (w->ww_state == WW_HASPROC)
- kill(w->ww_pid, SIGHUP);
- close(w->ww_tty);
- close(w->ww_pty);
- Wclose(w->ww_win);
- cfree(w);
- return 0;
+ wwindex[w->ww_index] = 0;
+ if (w->ww_pty >= 0)
+ (void) close(w->ww_pty);
+ if (w->ww_socket >= 0)
+ (void) close(w->ww_socket);
+ wwfree((char **)w->ww_win, w->ww_w.t);
+ wwfree((char **)w->ww_buf, w->ww_b.t);
+ if (w->ww_fmap != 0)
+ wwfree((char **)w->ww_fmap, w->ww_w.t);
+ free((char *)(w->ww_nvis + w->ww_w.t));
+ if (w->ww_ob != 0)
+ free(w->ww_ob);
+ free((char *)w);