diff options
Diffstat (limited to 'lib')
| -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*  | 
