diff options
Diffstat (limited to 'lib')
| -rw-r--r-- | lib/library.c | 20 | 
1 files changed, 12 insertions, 8 deletions
diff --git a/lib/library.c b/lib/library.c index 60ca223..f28d223 100644 --- a/lib/library.c +++ b/lib/library.c @@ -43,9 +43,13 @@ load(const char *file, struct bm_renderer *renderer)      if (strcmp(renderer->api.version, BM_PLUGIN_VERSION))          goto mismatch_fail; +    if (!renderer->name) +        renderer->name = bm_strdup(name); + +    if (!renderer->file) +        renderer->file = bm_strdup(file); +      renderer->handle = handle; -    renderer->name = bm_strdup(name); -    renderer->file = bm_strdup(file);      return true;  load_fail: @@ -77,6 +81,7 @@ load_to_list(const char *file)          goto fail;      chckDlUnload(renderer->handle); +    renderer->handle = NULL;      if (!list_add_item(&renderers, renderer))          goto fail; @@ -114,8 +119,10 @@ fail:  bool  bm_init(void)  { -    static const char *rpath = INSTALL_PREFIX "/lib/bemenu"; +    if (renderers.count > 0) +        return true; +    static const char *rpath = INSTALL_PREFIX "/lib/bemenu";      const char *path = getenv("BEMENU_RENDERER");      if (path) @@ -130,7 +137,6 @@ bm_init(void)      if (tinydir_open(&dir, path) == -1)          goto fail; -    size_t registered = 0;      while (dir.has_next) {          tinydir_file file;          memset(&file, 0, sizeof(file)); @@ -139,9 +145,7 @@ bm_init(void)          if (!file.is_dir && !strncmp(file.name, "bemenu-renderer-", strlen("bemenu-renderer-"))) {              char *fpath;              if ((fpath = bm_dprintf("%s/%s", path, file.name))) { -                if (load_to_list(fpath)) -                    registered++; - +                load_to_list(fpath);                  free(fpath);              }          } @@ -150,7 +154,7 @@ bm_init(void)      }      tinydir_close(&dir); -    return (registered > 0 ? true : false); +    return (renderers.count > 0 ? true : false);  fail:      return false;  | 
