diff options
-rw-r--r-- | lib/internal.h | 2 | ||||
-rw-r--r-- | lib/library.c | 7 | ||||
-rw-r--r-- | lib/renderers/curses/curses.c | 3 |
3 files changed, 10 insertions, 2 deletions
diff --git a/lib/internal.h b/lib/internal.h index dd232d2..d632d41 100644 --- a/lib/internal.h +++ b/lib/internal.h @@ -37,7 +37,7 @@ struct render_api { /** * Create underlying renderer. */ - void (*constructor)(void); + bool (*constructor)(void); /** * Release underlying renderer. diff --git a/lib/library.c b/lib/library.c index 6544086..e06fda2 100644 --- a/lib/library.c +++ b/lib/library.c @@ -76,7 +76,14 @@ bm_renderer_activate(struct bm_renderer *renderer) if (!load(renderer->file, renderer)) return false; + if (!renderer->api.constructor()) + goto fail; + return true; + +fail: + chckDlUnload(renderer->handle); + return false; } bool diff --git a/lib/renderers/curses/curses.c b/lib/renderers/curses/curses.c index 0ba763e..2591446 100644 --- a/lib/renderers/curses/curses.c +++ b/lib/renderers/curses/curses.c @@ -350,7 +350,7 @@ destructor(void) memset(&curses, 0, sizeof(curses)); } -static void +static bool constructor(void) { memset(&curses, 0, sizeof(curses)); @@ -363,6 +363,7 @@ constructor(void) action.sa_handler = resize_handler; sigaction(SIGWINCH, &action, &curses.winch_action); + return true; } extern const char* |