From 0b02230935e4cc71d4cae3758b25d83be798cdd6 Mon Sep 17 00:00:00 2001 From: Jari Vetoniemi Date: Wed, 22 Oct 2014 22:52:14 +0300 Subject: Call constructor of activated renderer. --- lib/internal.h | 2 +- lib/library.c | 7 +++++++ lib/renderers/curses/curses.c | 3 ++- 3 files changed, 10 insertions(+), 2 deletions(-) (limited to 'lib') 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* -- cgit v1.2.3-70-g09d2