Removed external declaration. New static variable. This maps backend names
2000-02-22 Martin Baulig <martin@home-of-linux.org> * lib/init-backends.c (glibtop_backend_*): Removed external declaration. * lib/open-backends.c (backend_init_table): New static variable. This maps backend names to their `glibtop_backend_info' structure. (glibtop_open_backend_l): Make this working for the non-gmodule case. * lib/close.c (close_backend): Likewise.
This commit is contained in:
committed by
Martin Baulig
parent
df3901571d
commit
6c6d8e006e
@@ -1,7 +1,10 @@
|
|||||||
2000-02-22 Martin Baulig <martin@home-of-linux.org>
|
2000-02-22 Martin Baulig <martin@home-of-linux.org>
|
||||||
|
|
||||||
* lib/init-backends.c (glibtop_backend_*): Removed external
|
* lib/init-backends.c (glibtop_backend_*): Removed external declaration.
|
||||||
declaration.
|
* lib/open-backends.c (backend_init_table): New static variable. This maps
|
||||||
|
backend names to their `glibtop_backend_info' structure.
|
||||||
|
(glibtop_open_backend_l): Make this working for the non-gmodule case.
|
||||||
|
* lib/close.c (close_backend): Likewise.
|
||||||
|
|
||||||
* acconfig.h (LIBGTOP_HAVE_SYSDEPS): Added.
|
* acconfig.h (LIBGTOP_HAVE_SYSDEPS): Added.
|
||||||
(LIBGTOP_NEED_SERVER): Added.
|
(LIBGTOP_NEED_SERVER): Added.
|
||||||
|
@@ -46,10 +46,12 @@ close_backend (gpointer value, gpointer user_data)
|
|||||||
|
|
||||||
/* Note that two or more servers may open the same backend. */
|
/* Note that two or more servers may open the same backend. */
|
||||||
backend->_priv_module->refcount--;
|
backend->_priv_module->refcount--;
|
||||||
|
#if LIBGTOP_USE_GMODULE
|
||||||
if (!backend->_priv_module->refcount) {
|
if (!backend->_priv_module->refcount) {
|
||||||
g_module_close (backend->_priv_module->module);
|
g_module_close (backend->_priv_module->module);
|
||||||
g_free (backend->_priv_module);
|
g_free (backend->_priv_module);
|
||||||
}
|
}
|
||||||
|
#endif /* LIBGTOP_USE_GMODULE */
|
||||||
|
|
||||||
g_free (backend);
|
g_free (backend);
|
||||||
}
|
}
|
||||||
|
@@ -29,6 +29,8 @@
|
|||||||
|
|
||||||
#include <glibtop/backend.h>
|
#include <glibtop/backend.h>
|
||||||
|
|
||||||
|
#if LIBGTOP_USE_GMODULE
|
||||||
|
|
||||||
#include <gmodule.h>
|
#include <gmodule.h>
|
||||||
|
|
||||||
static void
|
static void
|
||||||
@@ -65,6 +67,42 @@ load_extra_libs (glibtop *server, glibtop_backend_entry *entry)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#else /* not LIBGTOP_USE_GMODULE */
|
||||||
|
|
||||||
|
extern glibtop_backend_info LibGTopBackendInfo_Sysdeps;
|
||||||
|
extern glibtop_backend_info LibGTopBackendInfo_Common;
|
||||||
|
extern glibtop_backend_info LibGTopBackendInfo_Server;
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
const char *name;
|
||||||
|
glibtop_backend_info *backend_info;
|
||||||
|
} backend_init_table_entry;
|
||||||
|
|
||||||
|
static backend_init_table_entry backend_init_table [] = {
|
||||||
|
#ifdef LIBGTOP_HAVE_SYSDEPS
|
||||||
|
{ "glibtop-backend-sysdeps", &LibGTopBackendInfo_Sysdeps },
|
||||||
|
#endif
|
||||||
|
{ "glibtop-backend-common", &LibGTopBackendInfo_Sysdeps },
|
||||||
|
#ifdef LIBGTOP_NEED_SERVER
|
||||||
|
{ "glibtop-backend-server", &LibGTopBackendInfo_Server },
|
||||||
|
#endif
|
||||||
|
{ NULL, NULL }
|
||||||
|
};
|
||||||
|
|
||||||
|
static glibtop_backend_info *
|
||||||
|
find_backend_by_name (const char *backend_name)
|
||||||
|
{
|
||||||
|
backend_init_table_entry *table;
|
||||||
|
|
||||||
|
for (table = backend_init_table; table->name; table++)
|
||||||
|
if (!strcmp (backend_name, table->name))
|
||||||
|
return table->backend_info;
|
||||||
|
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif /* LIBGTOP_USE_GMODULE */
|
||||||
|
|
||||||
int
|
int
|
||||||
glibtop_open_backend_l (glibtop *server, const char *backend_name,
|
glibtop_open_backend_l (glibtop *server, const char *backend_name,
|
||||||
u_int64_t features, const char **backend_args)
|
u_int64_t features, const char **backend_args)
|
||||||
@@ -79,6 +117,7 @@ glibtop_open_backend_l (glibtop *server, const char *backend_name,
|
|||||||
if (!entry->_priv) {
|
if (!entry->_priv) {
|
||||||
entry->_priv = g_new0 (glibtop_backend_module, 1);
|
entry->_priv = g_new0 (glibtop_backend_module, 1);
|
||||||
|
|
||||||
|
#if LIBGTOP_USE_GMODULE
|
||||||
if (entry->extra_libs) {
|
if (entry->extra_libs) {
|
||||||
int retval;
|
int retval;
|
||||||
|
|
||||||
@@ -108,6 +147,11 @@ glibtop_open_backend_l (glibtop *server, const char *backend_name,
|
|||||||
|
|
||||||
return -GLIBTOP_ERROR_NO_SUCH_BACKEND;
|
return -GLIBTOP_ERROR_NO_SUCH_BACKEND;
|
||||||
}
|
}
|
||||||
|
#else /* not LIBGTOP_USE_GMODULE */
|
||||||
|
entry->info = find_backend_by_name (backend_name);
|
||||||
|
if (!entry->info)
|
||||||
|
return -GLIBTOP_ERROR_NO_SUCH_BACKEND;
|
||||||
|
#endif /* not LIBGTOP_USE_GMODULE */
|
||||||
}
|
}
|
||||||
|
|
||||||
entry->_priv->refcount++;
|
entry->_priv->refcount++;
|
||||||
@@ -119,6 +163,10 @@ glibtop_open_backend_l (glibtop *server, const char *backend_name,
|
|||||||
backend->_priv_module = entry->_priv;
|
backend->_priv_module = entry->_priv;
|
||||||
backend->info = info;
|
backend->info = info;
|
||||||
|
|
||||||
|
if (!server->_priv)
|
||||||
|
server->_priv = glibtop_calloc_r
|
||||||
|
(server, 1, sizeof (glibtop_server_private));
|
||||||
|
|
||||||
if (info->open) {
|
if (info->open) {
|
||||||
int retval;
|
int retval;
|
||||||
|
|
||||||
@@ -130,10 +178,6 @@ glibtop_open_backend_l (glibtop *server, const char *backend_name,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!server->_priv)
|
|
||||||
server->_priv = glibtop_calloc_r
|
|
||||||
(server, 1, sizeof (glibtop_server_private));
|
|
||||||
|
|
||||||
server->_priv->backend_list = g_slist_append
|
server->_priv->backend_list = g_slist_append
|
||||||
(server->_priv->backend_list, backend);
|
(server->_priv->backend_list, backend);
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user