Added `void *closure' argument.

2000-11-27  Martin Baulig  <martin@home-of-linux.org>

	* include/glibtop/glibtop-backend-info.h
	(glibtop_backend_close_func_t): Added `void *closure' argument.

	* include/glibtop/call-vector.h: Changed the second argument
	of all function in the call vector from `glibtop_backend *' to
	`void *closure'.
This commit is contained in:
Martin Baulig
2000-11-26 23:29:15 +00:00
committed by Martin Baulig
parent 8a78a93e0c
commit 478be2d170
15 changed files with 74 additions and 57 deletions

View File

@@ -1,3 +1,12 @@
2000-11-27 Martin Baulig <martin@home-of-linux.org>
* include/glibtop/glibtop-backend-info.h
(glibtop_backend_close_func_t): Added `void *closure' argument.
* include/glibtop/call-vector.h: Changed the second argument
of all function in the call vector from `glibtop_backend *' to
`void *closure'.
2000-11-26 Martin Baulig <martin@home-of-linux.org>
* include/glibtop/glibtop-backend.h (glibtop_backend_open):

View File

@@ -29,7 +29,7 @@ static int
_open_common (glibtop_server *, glibtop_backend *, u_int64_t, const char **);
static int
_close_common (glibtop_server *, glibtop_backend *);
_close_common (glibtop_server *, glibtop_backend *, void *closure);
extern glibtop_call_vector glibtop_backend_common_call_vector;
@@ -53,8 +53,9 @@ _open_common (glibtop_server *server, glibtop_backend *backend,
}
static int
_close_common (glibtop_server *server, glibtop_backend *backend)
_close_common (glibtop_server *server, glibtop_backend *backend,
void *closure)
{
return -1;
return 0;
}

View File

@@ -137,16 +137,16 @@ sub output {
$func_decl = 'static '.$retval."\n";
if ($line_fields[3] eq '') {
$func_decl .= sprintf ("_glibtop_get_%s_c (glibtop_server *server, glibtop_backend *backend%s)\n",
$func_decl .= sprintf ("_glibtop_get_%s_c (glibtop_server *server, void *closure%s)\n",
$feature, $param_decl);
} elsif ($line_fields[3] eq 'array') {
$func_decl .= sprintf ("_glibtop_get_%s_c (glibtop_server *server, glibtop_backend *backend, glibtop_array *array%s)\n",
$func_decl .= sprintf ("_glibtop_get_%s_c (glibtop_server *server, void *closure, glibtop_array *array%s)\n",
$feature, $param_decl);
} elsif ($line_fields[3] =~ /^array/) {
$func_decl .= sprintf ("_glibtop_get_%s_c (glibtop_server *server, glibtop_backend *backend, glibtop_array *array, %s *buf%s)\n",
$func_decl .= sprintf ("_glibtop_get_%s_c (glibtop_server *server, void *closure, glibtop_array *array, %s *buf%s)\n",
$feature, 'glibtop_'.$feature, $param_decl);
} else {
$func_decl .= sprintf ("_glibtop_get_%s_c (glibtop_server *server, glibtop_backend *backend, %s *buf%s)\n",
$func_decl .= sprintf ("_glibtop_get_%s_c (glibtop_server *server, void *closure, %s *buf%s)\n",
$feature, 'glibtop_'.$feature, $param_decl);
}

View File

@@ -29,10 +29,7 @@ static int
_open_server (glibtop_server *, glibtop_backend *, u_int64_t, const char **);
static int
_close_server (glibtop_server *, glibtop_backend *);
static int backend_server_initialized = 0;
GQuark backend_server_quark;
_close_server (glibtop_server *, glibtop_backend *, void *);
extern glibtop_call_vector glibtop_backend_server_call_vector;
@@ -54,15 +51,9 @@ _open_server (glibtop_server *server, glibtop_backend *backend,
{
backend_server_private *priv;
if (!backend_server_initialized) {
backend_server_quark = g_quark_from_string ("backend-server-private");
backend_server_initialized = 1;
}
priv = glibtop_calloc_r (server, 1, sizeof (backend_server_private));
g_object_set_qdata (G_OBJECT (backend), backend_server_quark, priv);
glibtop_backend_set_closure_data (backend, priv);
#ifdef DEBUG
fprintf (stderr, "open_server - %p, %p, %p\n", server, backend, priv);
@@ -102,12 +93,10 @@ _open_server (glibtop_server *server, glibtop_backend *backend,
}
static int
_close_server (glibtop_server *server, glibtop_backend *backend)
_close_server (glibtop_server *server, glibtop_backend *backend,
void *closure)
{
backend_server_private *priv;
priv = g_object_steal_qdata (G_OBJECT (backend), backend_server_quark);
g_assert (priv != NULL);
backend_server_private *priv = closure;
kill (priv->pid, SIGKILL);
close (priv->input [0]);

View File

@@ -46,10 +46,8 @@ struct _backend_server_private
glibtop_server *server;
};
extern GQuark backend_server_quark;
void *
glibtop_call_i (glibtop_server *server, glibtop_backend *backend,
glibtop_call_i (glibtop_server *server, backend_server_private *priv,
unsigned command, size_t send_size, const void *send_ptr,
size_t data_size, const void *data_ptr,
size_t recv_size, void *recv_ptr,

View File

@@ -28,7 +28,7 @@
#include "command.h"
void *
glibtop_call_i (glibtop_server *server, glibtop_backend *backend,
glibtop_call_i (glibtop_server *server, backend_server_private *priv,
unsigned command, size_t send_size, const void *send_buf,
size_t data_size, const void *data_buf,
size_t recv_size, void *recv_ptr,
@@ -36,7 +36,6 @@ glibtop_call_i (glibtop_server *server, glibtop_backend *backend,
{
glibtop_command cmnd;
glibtop_response resp;
backend_server_private *priv;
#if 0
int retval;
#endif
@@ -44,9 +43,6 @@ glibtop_call_i (glibtop_server *server, glibtop_backend *backend,
memset (&cmnd, 0, sizeof (glibtop_command));
memset (&resp, 0, sizeof (glibtop_response));
priv = g_object_get_qdata (G_OBJECT (backend), backend_server_quark);
g_assert (priv != NULL);
cmnd.command = command;
/* If send_size is less than _GLIBTOP_PARAM_SIZE (normally 16 Bytes), we

View File

@@ -198,7 +198,7 @@ sub output {
$send_buf_code .= "\t_LIBGTOP_DATA_ptr = _LIBGTOP_DATA_buf;\n";
$call_code = '';
$call_code .= sprintf ("\t%sglibtop_call_i (server, backend, GLIBTOP_CMND_%s,\n",
$call_code .= sprintf ("\t%sglibtop_call_i (server, closure, GLIBTOP_CMND_%s,\n",
$call_prefix, &toupper($feature));
$call_code .= sprintf ("\t\t\t%s%s, %s,\n", $call_prefix_space,
"_LIBGTOP_SEND_len", "_LIBGTOP_SEND_buf");
@@ -257,16 +257,16 @@ sub output {
$func_decl = 'static '.$retval."\n";
if ($line_fields[3] eq '') {
$func_decl .= sprintf ("_glibtop_get_%s_c (glibtop_server *server, glibtop_backend *backend%s)\n",
$func_decl .= sprintf ("_glibtop_get_%s_c (glibtop_server *server, void *closure%s)\n",
$feature, $param_decl);
} elsif ($line_fields[3] eq 'array') {
$func_decl .= sprintf ("_glibtop_get_%s_c (glibtop_server *server, glibtop_backend *backend, glibtop_array *array%s)\n",
$func_decl .= sprintf ("_glibtop_get_%s_c (glibtop_server *server, void *closure, glibtop_array *array%s)\n",
$feature, $param_decl);
} elsif ($line_fields[3] =~ /^array/) {
$func_decl .= sprintf ("_glibtop_get_%s_c (glibtop_server *server, glibtop_backend *backend, glibtop_array *array, %s *buf%s)\n",
$func_decl .= sprintf ("_glibtop_get_%s_c (glibtop_server *server, void *closure, glibtop_array *array, %s *buf%s)\n",
$feature, 'glibtop_'.$feature, $param_decl);
} else {
$func_decl .= sprintf ("_glibtop_get_%s_c (glibtop_server *server, glibtop_backend *backend, %s *buf%s)\n",
$func_decl .= sprintf ("_glibtop_get_%s_c (glibtop_server *server, void *closure, %s *buf%s)\n",
$feature, 'glibtop_'.$feature, $param_decl);
}

View File

@@ -29,7 +29,7 @@ static int
_open_sysdeps (glibtop_server *, glibtop_backend *, u_int64_t, const char **);
static int
_close_sysdeps (glibtop_server *, glibtop_backend *);
_close_sysdeps (glibtop_server *, glibtop_backend *, void *);
extern glibtop_call_vector glibtop_backend_sysdeps_call_vector;
@@ -68,8 +68,9 @@ _open_sysdeps (glibtop_server *server, glibtop_backend *backend,
}
static int
_close_sysdeps (glibtop_server *server, glibtop_backend *backend)
_close_sysdeps (glibtop_server *server, glibtop_backend *backend,
void *closure)
{
return -1;
return 0;
}

View File

@@ -137,16 +137,16 @@ sub output {
$func_decl = 'static '.$retval."\n";
if ($line_fields[3] eq '') {
$func_decl .= sprintf ("_glibtop_get_%s_c (glibtop_server *server, glibtop_backend *backend%s)\n",
$func_decl .= sprintf ("_glibtop_get_%s_c (glibtop_server *server, void *closure%s)\n",
$feature, $param_decl);
} elsif ($line_fields[3] eq 'array') {
$func_decl .= sprintf ("_glibtop_get_%s_c (glibtop_server *server, glibtop_backend *backend, glibtop_array *array%s)\n",
$func_decl .= sprintf ("_glibtop_get_%s_c (glibtop_server *server, void *closure, glibtop_array *array%s)\n",
$feature, $param_decl);
} elsif ($line_fields[3] =~ /^array/) {
$func_decl .= sprintf ("_glibtop_get_%s_c (glibtop_server *server, glibtop_backend *backend, glibtop_array *array, %s *buf%s)\n",
$func_decl .= sprintf ("_glibtop_get_%s_c (glibtop_server *server, void *closure, glibtop_array *array, %s *buf%s)\n",
$feature, 'glibtop_'.$feature, $param_decl);
} else {
$func_decl .= sprintf ("_glibtop_get_%s_c (glibtop_server *server, glibtop_backend *backend, %s *buf%s)\n",
$func_decl .= sprintf ("_glibtop_get_%s_c (glibtop_server *server, void *closure, %s *buf%s)\n",
$feature, 'glibtop_'.$feature, $param_decl);
}

View File

@@ -31,8 +31,6 @@
#include <glibtop.h>
#include <glibtop/union.h>
#include <glibtop/backend.h>
BEGIN_LIBGTOP_DECLS
struct _glibtop_call_vector

View File

@@ -82,16 +82,16 @@ sub parse_features_def {
if ($line_fields[3] eq '') {
$func_decl_code .= sprintf
(qq[\t%s (*%s) (glibtop_server *, glibtop_backend *%s);\n], $retval, $feature, $param_decl);
(qq[\t%s (*%s) (glibtop_server *, void *%s);\n], $retval, $feature, $param_decl);
} elsif ($line_fields[3] eq 'array') {
$func_decl_code .= sprintf
(qq[\t%s (*%s) (glibtop_server *, glibtop_backend *, glibtop_array *%s);\n], $retval, $feature, $param_decl);
(qq[\t%s (*%s) (glibtop_server *, void *, glibtop_array *%s);\n], $retval, $feature, $param_decl);
} elsif ($line_fields[3] =~ /^array/) {
$func_decl_code .= sprintf
(qq[\t%s (*%s) (glibtop_server *, glibtop_backend *, glibtop_array *, %s *%s);\n], $retval, $feature, 'glibtop_'.$feature, $param_decl);
(qq[\t%s (*%s) (glibtop_server *, void *, glibtop_array *, %s *%s);\n], $retval, $feature, 'glibtop_'.$feature, $param_decl);
} else {
$func_decl_code .= sprintf
(qq[\t%s (*%s) (glibtop_server *, glibtop_backend *, %s *%s);\n], $retval, $feature, 'glibtop_'.$feature, $param_decl);
(qq[\t%s (*%s) (glibtop_server *, void *, %s *%s);\n], $retval, $feature, 'glibtop_'.$feature, $param_decl);
}
}

View File

@@ -41,7 +41,8 @@ typedef struct _glibtop_call_vector glibtop_call_vector;
typedef int (*glibtop_backend_open_func_t) (glibtop_server *, glibtop_backend *,
u_int64_t, const char **);
typedef int (*glibtop_backend_close_func_t) (glibtop_server *, glibtop_backend *);
typedef int (*glibtop_backend_close_func_t) (glibtop_server *, glibtop_backend *,
void *);
struct _glibtop_backend_info
{

View File

@@ -68,6 +68,12 @@ glibtop_backend *
glibtop_backend_get (const char *backend_name, u_int64_t features,
const char **backend_args, GError **error);
void
glibtop_backend_set_closure_data (glibtop_backend *backend, void *closure);
void *
glibtop_backend_get_closure_data (glibtop_backend *backend);
glibtop_call_vector *
glibtop_backend_get_call_vector (glibtop_backend *backend);

View File

@@ -44,6 +44,8 @@ struct _glibtop_backend_private
{
const glibtop_backend_info *info;
void *closure_data;
glibtop_server *server;
glibtop_backend_module *module;
};
@@ -260,3 +262,19 @@ glibtop_backend_get_server (glibtop_backend *backend)
return backend->_priv->server;
}
void *
glibtop_backend_get_closure_data (glibtop_backend *backend)
{
g_return_val_if_fail (GLIBTOP_IS_BACKEND (backend), NULL);
return backend->_priv->closure_data;
}
void
glibtop_backend_set_closure_data (glibtop_backend *backend, void *closure)
{
g_return_if_fail (GLIBTOP_IS_BACKEND (backend));
g_return_if_fail (backend->_priv->closure_data == NULL);
backend->_priv->closure_data = closure;
}

View File

@@ -179,23 +179,23 @@ sub output {
("\t}\n\n");
$sysdeps_code .= sprintf
("\tfor (list = client->_priv->backend_list; list; list = list->next) {\n\t\tglibtop_backend *backend = list->data;\n\t\tglibtop_call_vector *call_vector;\n\n\t\tcall_vector = glibtop_backend_get_call_vector (backend);\n\n\t\tif (call_vector && call_vector->%s) {\n\t\t\tglibtop_server *server = glibtop_backend_get_server (backend);\n\n", $feature);
("\tfor (list = client->_priv->backend_list; list; list = list->next) {\n\t\tglibtop_backend *backend = list->data;\n\t\tglibtop_call_vector *call_vector;\n\n\t\tcall_vector = glibtop_backend_get_call_vector (backend);\n\n\t\tif (call_vector && call_vector->%s) {\n\t\t\tglibtop_server *server = glibtop_backend_get_server (backend);\n\t\t\tvoid *closure = glibtop_backend_get_closure_data (backend);\n\n", $feature);
if ($line_fields[3] eq '') {
$sysdeps_code .= sprintf
("\t\t\tretval = call_vector->%s (server, backend%s);\n",
("\t\t\tretval = call_vector->%s (server, closure%s);\n",
$feature, $call_param);
} elsif ($line_fields[3] eq 'array') {
$sysdeps_code .= sprintf
("\t\t\tretval = call_vector->%s (server, backend, array%s);\n",
("\t\t\tretval = call_vector->%s (server, closure, array%s);\n",
$feature, $call_param);
} elsif ($line_fields[3] =~ /^array/) {
$sysdeps_code .= sprintf
("\t\t\tretval = call_vector->%s (server, backend, array, buf%s);\n",
("\t\t\tretval = call_vector->%s (server, closure, array, buf%s);\n",
$feature, $call_param);
} else {
$sysdeps_code .= sprintf
("\t\t\tretval = call_vector->%s (server, backend, buf%s);\n",
("\t\t\tretval = call_vector->%s (server, closure, buf%s);\n",
$feature, $call_param);
}