X-Git-Url: http://git.hungrycats.org/cgi-bin/gitweb.cgi?p=xscreensaver;a=blobdiff_plain;f=driver%2Fsubprocs.c;h=0bbe4a87609c836239b693642957276d33f64a89;hp=643179829d4ad3db0fcaa64a3d2a07f964ffdf6b;hb=07faf451b99879183ed7e909e43a0e065be1ee7f;hpb=ccb7f4903325f92555a9722bba74b58346654ba0 diff --git a/driver/subprocs.c b/driver/subprocs.c index 64317982..0bbe4a87 100644 --- a/driver/subprocs.c +++ b/driver/subprocs.c @@ -1,5 +1,5 @@ /* subprocs.c --- choosing, spawning, and killing screenhacks. - * xscreensaver, Copyright (c) 1991-2005 Jamie Zawinski + * xscreensaver, Copyright (c) 1991-2006 Jamie Zawinski * * Permission to use, copy, modify, distribute, and sell this software and its * documentation for any purpose is hereby granted without fee, provided that @@ -25,6 +25,7 @@ #endif #include /* sys/resource.h needs this for timeval */ +#include /* for PATH_MAX */ #ifdef HAVE_SYS_WAIT_H # include /* for waitpid() and associated macros */ @@ -65,6 +66,7 @@ extern int kill (pid_t, int); /* signal() is in sys/signal.h... */ #define Widget void* #include "xscreensaver.h" +#include "exec.h" #include "yarandom.h" #include "visual.h" /* for id_to_visual() */ @@ -216,7 +218,10 @@ struct screenhack_job { static struct screenhack_job *jobs = 0; -/* for debugging -- nothing calls this, but it's useful to invoke from gdb. */ +/* for debugging -- nothing calls this, but it's useful to invoke from gdb. + */ +void show_job_list (void); + void show_job_list (void) { @@ -1135,14 +1140,17 @@ hack_subproc_environment (saver_screen_info *ssi) const char *odpy = DisplayString (si->dpy); char *ndpy = (char *) malloc (strlen(odpy) + 20); char *nssw = (char *) malloc (40); - char *s; + char *s, *c; strcpy (ndpy, "DISPLAY="); s = ndpy + strlen(ndpy); strcpy (s, odpy); - while (*s && *s != ':') s++; /* skip to colon */ - while (*s == ':') s++; /* skip over colons */ + /* We have to find the last colon since it is the boundary between + hostname & screen - IPv6 numeric format addresses may have many + colons before that point, and DECnet addresses always have two colons */ + c = strrchr(s,':'); /* skip to last colon */ + if (c != NULL) s = c+1; while (isdigit(*s)) s++; /* skip over dpy number */ while (*s == '.') s++; /* skip over dot */ if (s[-1] != '.') *s++ = '.'; /* put on a dot */