Just return ERR instead of asserting if someone calls the slk routines

to affect the ripped off window before the window is actually ripped off.
This commit is contained in:
roy 2017-01-30 17:15:52 +00:00
parent 7487819a0b
commit 3c94ec04f2
1 changed files with 21 additions and 30 deletions

View File

@ -1,4 +1,4 @@
/* $NetBSD: slk.c,v 1.1 2017/01/24 17:27:30 roy Exp $ */
/* $NetBSD: slk.c,v 1.2 2017/01/30 17:15:52 roy Exp $ */
/*-
* Copyright (c) 2017 The NetBSD Foundation, Inc.
@ -31,10 +31,9 @@
#include <sys/cdefs.h>
#ifndef lint
__RCSID("$NetBSD: slk.c,v 1.1 2017/01/24 17:27:30 roy Exp $");
__RCSID("$NetBSD: slk.c,v 1.2 2017/01/30 17:15:52 roy Exp $");
#endif /* not lint */
#include <assert.h>
#include <ctype.h>
#include <stdlib.h>
#include <string.h>
@ -280,8 +279,7 @@ static int
__slk_attron(SCREEN *screen, const chtype attr)
{
assert(screen != NULL);
if (screen->slk_window == NULL)
if (screen == NULL || screen->slk_window == NULL)
return ERR;
return wattron(screen->slk_window, attr);
}
@ -294,8 +292,7 @@ static int
__slk_attr_on(SCREEN *screen, const attr_t attr, void *opt)
{
assert(screen != NULL);
if (screen->slk_window == NULL)
if (screen == NULL || screen->slk_window == NULL)
return ERR;
return wattr_on(screen->slk_window, attr, opt);
}
@ -308,8 +305,7 @@ static int
__slk_attroff(SCREEN *screen, const chtype attr)
{
assert(screen != NULL);
if (screen->slk_window == NULL)
if (screen == NULL || screen->slk_window == NULL)
return ERR;
return wattroff(screen->slk_window, attr);
}
@ -322,8 +318,7 @@ static int
__slk_attr_off(SCREEN *screen, const attr_t attr, void *opt)
{
assert(screen != NULL);
if (screen->slk_window == NULL)
if (screen == NULL || screen->slk_window == NULL)
return ERR;
return wattr_off(screen->slk_window, attr, opt);
}
@ -336,8 +331,7 @@ static int
__slk_attrset(SCREEN *screen, const chtype attr)
{
assert(screen != NULL);
if (screen->slk_window == NULL)
if (screen == NULL || screen->slk_window == NULL)
return ERR;
return wattrset(screen->slk_window, attr);
}
@ -350,8 +344,7 @@ static int
__slk_attr_set(SCREEN *screen, const attr_t attr, short pair, void *opt)
{
assert(screen != NULL);
if (screen->slk_window == NULL)
if (screen == NULL || screen->slk_window == NULL)
return ERR;
return wattr_set(screen->slk_window, attr, pair, opt);
}
@ -364,7 +357,8 @@ static int
__slk_clear(SCREEN *screen)
{
assert(screen != NULL);
if (screen == NULL)
return ERR;
screen->slk_hidden = true;
if (screen->is_term_slk) {
if (t_label_off(screen->term) == NULL)
@ -386,8 +380,7 @@ static int
__slk_color(SCREEN *screen, short pair)
{
assert(screen != NULL);
if (screen->slk_window == NULL)
if (screen == NULL || screen->slk_window == NULL)
return ERR;
return wcolor_set(screen->slk_window, pair, NULL);
}
@ -401,8 +394,7 @@ static char *
__slk_label(SCREEN *screen, int labnum)
{
assert(screen != NULL);
if (labnum < 1 || labnum > screen->slk_nlabels)
if (screen == NULL || labnum < 1 || labnum > screen->slk_nlabels)
return NULL;
return screen->slk_labels[--labnum].text;
}
@ -415,8 +407,7 @@ int
__slk_noutrefresh(SCREEN *screen)
{
assert(screen != NULL);
if (screen->slk_window == NULL)
if (screen == NULL || screen->slk_window == NULL)
return ERR;
return wnoutrefresh(screen->slk_window);
}
@ -429,7 +420,8 @@ static int
__slk_restore(SCREEN *screen)
{
assert(screen != NULL);
if (screen == NULL)
return ERR;
screen->slk_hidden = false;
if (screen->is_term_slk) {
if (t_label_on(screen->term) == NULL)
@ -461,9 +453,8 @@ __slk_set(SCREEN *screen, int labnum, const char *label, int justify)
size_t wc_len;
#endif
assert(screen != NULL);
/* Check args. */
if (labnum < 1 || labnum > screen->slk_nlabels)
if (screen == NULL || labnum < 1 || labnum > screen->slk_nlabels)
return ERR;
switch(justify) {
case SLK_JUSTIFY_LEFT:
@ -520,8 +511,7 @@ static int
__slk_touch(SCREEN *screen)
{
assert(screen != NULL);
if (screen->slk_window == NULL)
if (screen == NULL || screen->slk_window == NULL)
return ERR;
return touchwin(screen->slk_window);
}
@ -540,7 +530,8 @@ __slk_wset(SCREEN *screen, int labnum, const wchar_t *label, int justify)
char *str;
int result = ERR;
assert(screen != NULL);
if (screen == NULL)
return ERR;
olabel = label;
if ((len = wcsrtombs(NULL, &olabel, 0, &screen->sp)) == -1)
return ERR;
@ -624,7 +615,6 @@ __slk_ripoffline(WINDOW *window, int cols)
if (window == NULL)
return ERR;
assert(window->screen->slk_window == NULL);
window->screen->slk_window = window;
wattron(window,
(t_no_color_video(window->screen->term) & 1) == 0
@ -643,7 +633,8 @@ __slk_resize(SCREEN *screen, int cols)
int x = 0;
struct __slk_label *l;
assert(screen != NULL);
if (screen == NULL)
return ERR;
if (screen->is_term_slk || screen->slk_nlabels == 0)
return OK;