summaryrefslogtreecommitdiff
path: root/lib/open.c
diff options
context:
space:
mode:
authorMartin Baulig <martin@src.gnome.org>1998-06-02 16:20:15 +0000
committerMartin Baulig <martin@src.gnome.org>1998-06-02 16:20:15 +0000
commit7f39d62371933fab64a352845379a1ad158d77b8 (patch)
tree6549acc01dc0bdd95cc69293993f63ca947ae326 /lib/open.c
parent6f179a314134e9db75853ce39ffe9a6741793c76 (diff)
downloadlibgtop-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.c134
1 files changed, 78 insertions, 56 deletions
diff --git a/lib/open.c b/lib/open.c
index 7dbe3131..0bc6f9fd 100644
--- a/lib/open.c
+++ b/lib/open.c
@@ -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);
}