New directory. New directory. New directory.

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

	* backends/: New directory.
	* backends/server/: New directory.
	* backends/sysdeps/: New directory.

	* include/glibtop/backend.h: New file.

	* include/glibtop/call-vector.h.in: New file. Template file
	for `call-vector.h'.
	* include/glibtop/call-vector.pl: New file. Creates 'call-vector.h'
	from `call-vector.h.in'.

	* include/glibtop/errors.h
	(GLIBTOP_ERROR_NO_SUCH_BACKEND): New error constant.
        (GLIBTOP_ERROR_NOT_IMPLEMENTED): New error constant.

	* include/glibtop/limits.h
	(GLIBTOP_BACKEND_NAME_LEN): New constant.

	* glibtop-server-private.h (glibtop_server_private):
	Added `GSList *backend_list' and removed `input', `output',
	`socket' and `pid'.

	* lib/command.c: Removed. Moved to `backends/server/'.
	* lib/read.c: Removed. Moved to `backends/server/'.
	* lib/read_data.c: Removed. Moved to `backends/server/'.
	* lib/write.c: Removed. Moved to `backends/server/'.
This commit is contained in:
Martin Baulig
2000-01-01 20:56:53 +00:00
committed by Martin Baulig
parent 8797d18587
commit 75ed7287d1
25 changed files with 460 additions and 479 deletions

View File

@@ -32,160 +32,8 @@
#include <glibtop/gnuserv.h>
/* Opens pipe to gtop server. Returns 0 on success and -1 on error. */
void
glibtop_open_l (glibtop *server, const char *program_name,
const unsigned long features, const unsigned flags)
{
int connect_type;
if (!server->_priv)
server->_priv = glibtop_calloc_r
(server, 1, sizeof (glibtop_server_private));
server->name = program_name;
/* It is important to set _GLIBTOP_INIT_STATE_OPEN here when we
* do recursive calls to glibtop_init_r (). */
server->flags |= _GLIBTOP_INIT_STATE_OPEN;
server->error_method = GLIBTOP_ERROR_METHOD_DEFAULT;
#ifdef DEBUG
fprintf (stderr, "SIZEOF: %u - %u - %u - %u - %u - %u\n",
sizeof (glibtop_command), sizeof (glibtop_response),
sizeof (glibtop_mountentry), sizeof (glibtop_union),
sizeof (glibtop_sysdeps), sizeof (glibtop_response_union));
#endif
switch (server->method) {
case GLIBTOP_METHOD_DIRECT:
server->features = 0;
break;
case GLIBTOP_METHOD_INET:
#ifdef DEBUG
fprintf (stderr, "Connecting to '%s' port %ld.\n",
server->server_host, server->server_port);
#endif
connect_type = glibtop_make_connection
(server->server_host, server->server_port,
&server->_priv->socket);
#ifdef DEBUG
fprintf (stderr, "Connect Type is %d.\n", connect_type);
#endif
server->flags |= _GLIBTOP_INIT_STATE_SERVER;
server->features = -1;
break;
case GLIBTOP_METHOD_UNIX:
#ifdef DEBUG
fprintf (stderr, "Connecting to Unix Domain Socket.\n");
#endif
connect_type = glibtop_make_connection
("unix", 0, &server->_priv->socket);
#ifdef DEBUG
fprintf (stderr, "Connect Type is %d.\n", connect_type);
#endif
server->flags |= _GLIBTOP_INIT_STATE_SERVER;
server->features = -1;
break;
case GLIBTOP_METHOD_PIPE:
#ifdef DEBUG
fprintf (stderr, "Opening pipe to server (%s).\n",
LIBGTOP_SERVER);
#endif
if (pipe (server->_priv->input) ||
pipe (server->_priv->output))
glibtop_error_io_r (server, "cannot make a pipe");
server->_priv->pid = fork ();
if (server->_priv->pid < 0) {
glibtop_error_io_r (server, "fork failed");
} else if (server->_priv->pid == 0) {
close (0); close (1);
close (server->_priv->input [0]);
close (server->_priv->output [1]);
dup2 (server->_priv->input [1], 1);
dup2 (server->_priv->output [0], 0);
execl (LIBGTOP_SERVER, "libgtop-server", NULL);
glibtop_error_io_r (server, "execl (%s)",
LIBGTOP_SERVER);
_exit (2);
}
close (server->_priv->input [1]);
close (server->_priv->output [0]);
server->flags |= _GLIBTOP_INIT_STATE_SERVER;
server->features = -1;
break;
}
/* If the server has been started, ask it for its features. */
if (server->flags & _GLIBTOP_INIT_STATE_SERVER) {
char version [BUFSIZ], buffer [BUFSIZ];
glibtop_sysdeps sysdeps;
size_t size, nbytes;
/* First check whether the server version is correct. */
sprintf (version, LIBGTOP_VERSION_STRING,
LIBGTOP_VERSION, LIBGTOP_SERVER_VERSION,
sizeof (glibtop_command),
sizeof (glibtop_response),
sizeof (glibtop_union),
sizeof (glibtop_sysdeps));
size = strlen (version) + 1;
glibtop_read_l (server, sizeof (nbytes), &nbytes);
if (nbytes != size)
glibtop_error_r (server,
"Requested %u bytes but got %u.",
size, nbytes);
glibtop_read_l (server, nbytes, buffer);
if (memcmp (version, buffer, size))
glibtop_error_r (server, "server version is not %s",
LIBGTOP_VERSION);
/* Now ask it for its features. */
glibtop_call_l (server, GLIBTOP_CMND_SYSDEPS, 0, NULL,
sizeof (glibtop_sysdeps), &sysdeps,
NULL);
server->features = sysdeps.features;
memcpy (&server->sysdeps, &sysdeps, sizeof (glibtop_sysdeps));
#ifdef DEBUG
fprintf (stderr, "Server features are %lu.\n",
server->features);
#endif
}
/* In any case, we call the open functions of our own sysdeps
* directory. */
#ifdef DEBUG
fprintf (stderr, "Calling sysdeps open function.\n");
#endif
glibtop_init_s (&server, features, flags);
}