startup: don't call delwin() with NULL, to avoid crashing on Solaris

Apparently the curses on SunOS is less forgiving than the one on GNU.
Or rather: delwin(NULL) should just return an error, it shouldn't crash.

This fixes https://savannah.gnu.org/bugs/?51053.
Reported-by: John Wiersba <jrw32982@yahoo.com>
Solved-by: John Wiersba <jrw32982@yahoo.com>
This commit is contained in:
Benno Schulenberg 2017-05-18 10:16:52 +02:00
parent e4775c2060
commit 9ce41543ed
2 changed files with 13 additions and 9 deletions

View File

@ -95,14 +95,14 @@ char *present_path = NULL;
unsigned flags[4] = {0, 0, 0, 0}; unsigned flags[4] = {0, 0, 0, 0};
/* Our flag containing the states of all global options. */ /* Our flag containing the states of all global options. */
WINDOW *topwin; WINDOW *topwin = NULL;
/* The top portion of the window, where we display the version /* The top portion of the window, where we display the version
* number of nano, the name of the current file, and whether the * number of nano, the name of the current file, and whether the
* current file has been modified. */ * current file has been modified. */
WINDOW *edit; WINDOW *edit = NULL;
/* The middle portion of the window, i.e. the edit window, where /* The middle portion of the window, i.e. the edit window, where
* we display the current file we're editing. */ * we display the current file we're editing. */
WINDOW *bottomwin; WINDOW *bottomwin = NULL;
/* The bottom portion of the window, where we display statusbar /* The bottom portion of the window, where we display statusbar
* messages, the statusbar prompt, and a list of shortcuts. */ * messages, the statusbar prompt, and a list of shortcuts. */
int editwinrows = 0; int editwinrows = 0;
@ -1728,7 +1728,8 @@ int strtomenu(const char *input)
* function unless debugging is turned on. */ * function unless debugging is turned on. */
void thanks_for_all_the_fish(void) void thanks_for_all_the_fish(void)
{ {
delwin(topwin); if (topwin != NULL)
delwin(topwin);
delwin(edit); delwin(edit);
delwin(bottomwin); delwin(bottomwin);

View File

@ -677,14 +677,17 @@ void die_save_file(const char *die_filename, struct stat *die_stat)
/* Initialize the three window portions nano uses. */ /* Initialize the three window portions nano uses. */
void window_init(void) void window_init(void)
{ {
/* First delete existing windows, in case of resizing. */ /* When resizing, first delete the existing windows. */
delwin(topwin); if (edit != NULL) {
topwin = NULL; if (topwin != NULL)
delwin(edit); delwin(topwin);
delwin(bottomwin); delwin(edit);
delwin(bottomwin);
}
/* If the terminal is very flat, don't set up a titlebar. */ /* If the terminal is very flat, don't set up a titlebar. */
if (LINES < 3) { if (LINES < 3) {
topwin = NULL;
editwinrows = 1; editwinrows = 1;
/* Set up two subwindows. If the terminal is just one line, /* Set up two subwindows. If the terminal is just one line,
* edit window and statusbar window will cover each other. */ * edit window and statusbar window will cover each other. */