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:
Martin Baulig
2000-02-22 22:16:30 +00:00
committed by Martin Baulig
parent df3901571d
commit 6c6d8e006e
3 changed files with 55 additions and 6 deletions

View File

@@ -1,7 +1,10 @@
2000-02-22 Martin Baulig <martin@home-of-linux.org>
* lib/init-backends.c (glibtop_backend_*): Removed external
declaration.
* 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.
* acconfig.h (LIBGTOP_HAVE_SYSDEPS): Added.
(LIBGTOP_NEED_SERVER): Added.

View File

@@ -46,10 +46,12 @@ close_backend (gpointer value, gpointer user_data)
/* Note that two or more servers may open the same backend. */
backend->_priv_module->refcount--;
#if LIBGTOP_USE_GMODULE
if (!backend->_priv_module->refcount) {
g_module_close (backend->_priv_module->module);
g_free (backend->_priv_module);
}
#endif /* LIBGTOP_USE_GMODULE */
g_free (backend);
}

View File

@@ -29,6 +29,8 @@
#include <glibtop/backend.h>
#if LIBGTOP_USE_GMODULE
#include <gmodule.h>
static void
@@ -65,6 +67,42 @@ load_extra_libs (glibtop *server, glibtop_backend_entry *entry)
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
glibtop_open_backend_l (glibtop *server, const char *backend_name,
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) {
entry->_priv = g_new0 (glibtop_backend_module, 1);
#if LIBGTOP_USE_GMODULE
if (entry->extra_libs) {
int retval;
@@ -108,6 +147,11 @@ glibtop_open_backend_l (glibtop *server, const char *backend_name,
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++;
@@ -119,6 +163,10 @@ glibtop_open_backend_l (glibtop *server, const char *backend_name,
backend->_priv_module = entry->_priv;
backend->info = info;
if (!server->_priv)
server->_priv = glibtop_calloc_r
(server, 1, sizeof (glibtop_server_private));
if (info->open) {
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, backend);