diff options
author | Martin Baulig <martin@src.gnome.org> | 1998-06-02 16:20:15 +0000 |
---|---|---|
committer | Martin Baulig <martin@src.gnome.org> | 1998-06-02 16:20:15 +0000 |
commit | 7f39d62371933fab64a352845379a1ad158d77b8 (patch) | |
tree | 6549acc01dc0bdd95cc69293993f63ca947ae326 /lib/open.c | |
parent | 6f179a314134e9db75853ce39ffe9a6741793c76 (diff) | |
download | libgtop-7f39d62371933fab64a352845379a1ad158d77b8.tar.gz |
tells `glibtop_open' to use the default server and not to check the
* include/glibtop/open.h (GLIBTOP_OPEN_NO_OVERRIDE):
tells `glibtop_open' to use the default server and not
to check the environment variables.
* include/glibtop/sysdeps.h (_glibtop_sysdeps):
renamed 'dummy' member to 'features'.
* include/glibtop/command.h (GLIBTOP_CMND_SYSDEPS):
added definition here.
Diffstat (limited to 'lib/open.c')
-rw-r--r-- | lib/open.c | 134 |
1 files changed, 78 insertions, 56 deletions
@@ -21,6 +21,8 @@ #include <glibtop.h> #include <glibtop/open.h> +#include <glibtop/sysdeps.h> +#include <glibtop/command.h> #include <glibtop/xmalloc.h> /* Opens pipe to gtop server. Returns 0 on success and -1 on error. */ @@ -32,74 +34,83 @@ glibtop_open (glibtop *server, const char *program_name, char version [BUFSIZ], buffer [BUFSIZ]; char *server_command, *server_rsh, *temp; char *server_host, *server_user; + glibtop_sysdeps sysdeps; memset (server, 0, sizeof (glibtop)); server->name = program_name; - /* Try to get data from environment. */ - - temp = getenv ("LIBGTOP_SERVER") ? - getenv ("LIBGTOP_SERVER") : GTOP_SERVER; - - server_command = glibtop_malloc__r (server, strlen (temp) + 1); - - strcpy (server_command, temp); - - temp = getenv ("LIBGTOP_RSH") ? - getenv ("LIBGTOP_RSH") : "rsh"; - - server_rsh = glibtop_malloc__r (server, strlen (temp) + 1); - - strcpy (server_rsh, temp); - - /* Extract host and user information. */ - - temp = strstr (server_command, ":"); - - if (temp) { - *temp = 0; - server_host = server_command; - server_command = temp+1; - - temp = strstr (server_host, "@"); - - if (temp) { - *temp = 0; - server_user = server_host; - server_host = temp+1; - } else { - server_user = NULL; - } - - } else { - server_host = NULL; - server_user = NULL; + /* Is the user allowed to override the server ? */ + + if ((flags & GLIBTOP_OPEN_NO_OVERRIDE) == 0) { + + /* Try to get data from environment. */ + + temp = getenv ("LIBGTOP_SERVER") ? + getenv ("LIBGTOP_SERVER") : GTOP_SERVER; + + server_command = glibtop_malloc__r (server, strlen (temp) + 1); + + strcpy (server_command, temp); + + temp = getenv ("LIBGTOP_RSH") ? + getenv ("LIBGTOP_RSH") : "rsh"; + + server_rsh = glibtop_malloc__r (server, strlen (temp) + 1); + + strcpy (server_rsh, temp); + + /* Extract host and user information. */ + + temp = strstr (server_command, ":"); + + if (temp) { + *temp = 0; + server_host = server_command; + server_command = temp+1; + + temp = strstr (server_host, "@"); + + if (temp) { + *temp = 0; + server_user = server_host; + server_host = temp+1; + } else { + server_user = NULL; + } + } else { + server_host = NULL; + server_user = NULL; + } + + /* Store everything in `server'. */ + + server->server_command = server_command; + server->server_host = server_host; + server->server_user = server_user; + server->server_rsh = server_rsh; } - - /* Store everything in `server'. */ - - server->server_command = server_command; - server->server_host = server_host; - server->server_user = server_user; - server->server_rsh = server_rsh; - + /* Get server features. */ - - if (server->server_host) - glibtop_error__r (server, _("Remote server not yet supported by library\n")); - - server->features = glibtop_server_features; + + if (server->server_host == NULL) { + server->features = glibtop_server_features; + + if (server->features == 0) + return; + } /* Fork and exec server. */ if (pipe (server->input) || pipe (server->output)) - glibtop_error__r (server, _("cannot make a pipe: %s\n"), strerror (errno)); + glibtop_error__r (server, _("cannot make a pipe: %s\n"), + strerror (errno)); server->pid = fork (); if (server->pid < 0) { - glibtop_error__r (server, _("%s: fork failed: %s\n"), strerror (errno)); + glibtop_error__r (server, _("%s: fork failed: %s\n"), + strerror (errno)); } else if (server->pid == 0) { close (0); close (1); /* close (2); */ close (server->input [0]); close (server->output [1]); @@ -108,20 +119,22 @@ glibtop_open (glibtop *server, const char *program_name, if (server_host) { if (server_user) { - execl (server->server_rsh, "gtop_server", "-l", + execl (server->server_rsh, "-l", server->server_user, server->server_host, server->server_command, NULL); } else { - execl (server->server_rsh, "gtop_server", + execl (server->server_rsh, server->server_host, server_command, NULL); } } else { - execl (server->server_command, "gtop_server", NULL); + execl (server->server_command, NULL); } _exit (2); } + fprintf (stderr, "PID: %d\n", server->pid); + close (server->input [1]); close (server->output [0]); @@ -131,4 +144,13 @@ glibtop_open (glibtop *server, const char *program_name, if (memcmp (version, buffer, strlen (version))) glibtop_error__r (server, _("server version is not %s"), VERSION); + + fprintf (stderr, "Calling GLITOP_CMND_SYSDEPS ...\n"); + + glibtop_call__l (server, GLIBTOP_CMND_SYSDEPS, 0, NULL, + sizeof (glibtop_sysdeps), &sysdeps); + + server->features = sysdeps.features; + + fprintf (stderr, "Features: %lu\n", server->features); } |