extern saver_info *global_si_kludge; /* I hate C so much... */
-static void hack_environment (saver_screen_info *ssi);
+static void hack_subproc_environment (saver_screen_info *ssi);
static void
if (nice (n) == -1 && errno != 0)
{
char buf [512];
- sprintf (buf, "%s: nice(%d) failed", progname, n);
+ sprintf (buf, "%s: nice(%d) failed", blurb(), n);
perror (buf);
}
}
{
char buf [512];
sprintf (buf, "%s: setpriority(PRIO_PROCESS, %lu, %d) failed",
- progname, (unsigned long) getpid(), nice_level);
+ blurb(), (unsigned long) getpid(), nice_level);
perror (buf);
}
#else
fprintf (stderr,
"%s: don't know how to change process priority on this system.\n",
- progname);
+ blurb());
#endif
}
{
char buf [512];
- sprintf (buf, "%s: could not execute \"%s\"", progname, av[0]);
+ sprintf (buf, "%s: could not execute \"%s\"", blurb(), av[0]);
perror (buf);
if (errno == ENOENT &&
{
char buf [512];
- sprintf (buf, "%s: execvp(\"%s\") failed", progname, av[0]);
+ sprintf (buf, "%s: execvp(\"%s\") failed", blurb(), av[0]);
perror (buf);
fflush(stderr);
fflush(stdout);
if (p->verbose_p)
printf ("%s: spawning \"%s\" in pid %lu%s.\n",
- progname, command, (unsigned long) getpid (),
+ blurb(), command, (unsigned long) getpid (),
(hairy_p ? " (via shell)" : ""));
if (hairy_p)
#else /* VMS */
if (p->verbose_p)
- printf ("%s: spawning \"%s\" in pid %lu.\n", progname, command, getpid());
+ printf ("%s: spawning \"%s\" in pid %lu.\n", blurb(), command, getpid());
exec_vms_command (command);
#endif /* VMS */
show_job_list (void)
{
struct screenhack_job *job;
- fprintf(stderr, "%s: job list:\n", progname);
+ fprintf(stderr, "%s: job list:\n", blurb());
for (job = jobs; job; job = job->next)
fprintf (stderr, " %5ld: (%s) %s\n",
(long) job->pid,
{
if (p->verbose_p)
fprintf (stderr, "%s: no child %ld to signal!\n",
- progname, (long) pid);
+ blurb(), (long) pid);
goto DONE;
}
#ifdef SIGSTOP
if (p->verbose_p)
- fprintf (stderr, "%s: %s pid %lu.\n", progname,
+ fprintf (stderr, "%s: %s pid %lu.\n", blurb(),
(signal == SIGTERM ? "killing" :
signal == SIGSTOP ? "suspending" :
signal == SIGCONT ? "resuming" : "signalling"),
(unsigned long) job->pid);
#else /* !SIGSTOP */
if (p->verbose_p)
- fprintf (stderr, "%s: %s pid %lu.\n", progname, "killing",
+ fprintf (stderr, "%s: %s pid %lu.\n", blurb(), "killing",
(unsigned long) job->pid);
#endif /* !SIGSTOP */
{
if (errno == ESRCH)
fprintf (stderr, "%s: child process %lu (%s) was already dead.\n",
- progname, job->pid, job->name);
+ blurb(), job->pid, job->name);
else
{
char buf [1024];
sprintf (buf, "%s: couldn't kill child process %lu (%s)",
- progname, job->pid, job->name);
+ blurb(), job->pid, job->name);
perror (buf);
}
}
saver_info *si = global_si_kludge; /* I hate C so much... */
if (si->prefs.debug_p)
- fprintf(stderr, "%s: got SIGCHLD%s\n", progname,
+ fprintf(stderr, "%s: got SIGCHLD%s\n", blurb(),
(block_sigchld_handler ? " (blocked)" : ""));
if (block_sigchld_handler < 0)
if (si->prefs.debug_p)
{
if (kid < 0 && errno)
- fprintf (stderr, "%s: waitpid(-1) ==> %ld (%d)\n", progname,
+ fprintf (stderr, "%s: waitpid(-1) ==> %ld (%d)\n", blurb(),
(long) kid, errno);
else
- fprintf (stderr, "%s: waitpid(-1) ==> %ld\n", progname,
+ fprintf (stderr, "%s: waitpid(-1) ==> %ld\n", blurb(),
(long) kid);
}
(p->verbose_p || job->status != job_killed)))
fprintf (stderr,
"%s: child pid %lu (%s) exited abnormally (code %d).\n",
- progname, (unsigned long) kid, name, exit_status);
+ blurb(), (unsigned long) kid, name, exit_status);
else if (p->verbose_p)
printf ("%s: child pid %lu (%s) exited normally.\n",
- progname, (unsigned long) kid, name);
+ blurb(), (unsigned long) kid, name);
if (job)
job->status = job_dead;
job->status != job_killed ||
WTERMSIG (wait_status) != SIGTERM)
fprintf (stderr, "%s: child pid %lu (%s) terminated with %s.\n",
- progname, (unsigned long) kid, name,
+ blurb(), (unsigned long) kid, name,
signal_name (WTERMSIG(wait_status)));
if (job)
{
if (p->verbose_p)
fprintf (stderr, "%s: child pid %lu (%s) stopped with %s.\n",
- progname, (unsigned long) kid, name,
+ blurb(), (unsigned long) kid, name,
signal_name (WSTOPSIG (wait_status)));
if (job)
else
{
fprintf (stderr, "%s: child pid %lu (%s) died in a mysterious way!",
- progname, (unsigned long) kid, name);
+ blurb(), (unsigned long) kid, name);
if (job)
job->status = job_dead;
}
if (sigaction(SIGCHLD, &action, &old) < 0)
{
char buf [255];
- sprintf (buf, "%s: couldn't catch SIGCHLD", progname);
+ sprintf (buf, "%s: couldn't catch SIGCHLD", blurb());
perror (buf);
}
sigchld_initialized_p = True;
if (((long) signal (SIGCHLD, sigchld_handler)) == -1L)
{
char buf [255];
- sprintf (buf, "%s: couldn't catch SIGCHLD", progname);
+ sprintf (buf, "%s: couldn't catch SIGCHLD", blurb());
perror (buf);
}
# endif /* !HAVE_SIGACTION */
(si->demo_mode_p
? "%s: warning, no \"%s\" visual for \"%s\".\n"
: "%s: no \"%s\" visual; skipping \"%s\".\n"),
- progname, (vis ? vis : "???"), in);
+ blurb(), (vis ? vis : "???"), in);
}
return selected;
if (p->verbose_p)
fprintf(stderr,
"%s: no suitable visuals for these programs.\n",
- progname);
+ blurb());
return;
}
else
switch ((int) (forked = fork ()))
{
case -1:
- sprintf (buf, "%s: couldn't fork", progname);
+ sprintf (buf, "%s: couldn't fork", blurb());
perror (buf);
restore_real_vroot (si);
saver_exit (si, 1);
case 0:
close (ConnectionNumber (si->dpy)); /* close display fd */
nice_subproc (p->nice_inferior); /* change process priority */
- hack_environment (ssi); /* set $DISPLAY */
+ hack_subproc_environment (ssi); /* set $DISPLAY */
exec_screenhack (si, hack); /* this does not return */
abort();
break;
spawn_screenhack (saver_info *si, Bool first_time_p)
{
int i;
+
+ if (!monitor_powered_on_p (si))
+ {
+ if (si->prefs.verbose_p)
+ printf ("%s: server reports that monitor has powered down; "
+ "not launching a new hack.\n", blurb());
+ return;
+ }
+
for (i = 0; i < si->nscreens; i++)
{
saver_screen_info *ssi = &si->screens[i];
execvp (saved_argv [0], saved_argv); /* shouldn't return */
{
char buf [512];
- sprintf (buf, "%s: could not restart process", progname);
+ sprintf (buf, "%s: could not restart process", blurb());
perror(buf);
fflush(stderr);
}
}
static void
-hack_environment (saver_screen_info *ssi)
+hack_subproc_environment (saver_screen_info *ssi)
{
/* Store $DISPLAY into the environment, so that the $DISPLAY variable that
the spawned processes inherit is correct. First, it must be on the same
#endif /* HAVE_PUTENV */
}
+
+void
+hack_environment (saver_info *si)
+{
+#if defined(HAVE_PUTENV) && defined(DEFAULT_PATH_PREFIX)
+ static const char *def_path = DEFAULT_PATH_PREFIX;
+ if (def_path && *def_path)
+ {
+ const char *opath = getenv("PATH");
+ char *npath = (char *) malloc(strlen(def_path) + strlen(opath) + 20);
+ strcpy (npath, "PATH=");
+ strcat (npath, def_path);
+ strcat (npath, ":");
+ strcat (npath, opath);
+
+ if (putenv (npath))
+ abort ();
+ }
+#endif /* HAVE_PUTENV && DEFAULT_PATH_PREFIX */
+}
+
+
\f
/* Change the uid/gid of the screensaver process, so that it is safe for it
to run setuid root (which it needs to do on some systems to read the
else if (hack_uid_errno == 0)
{
if (p->verbose_p)
- printf ("%s: %s\n", progname, hack_uid_error);
+ printf ("%s: %s\n", blurb(), hack_uid_error);
}
else
{
char buf [255];
- sprintf (buf, "%s: %s", progname, hack_uid_error);
+ sprintf (buf, "%s: %s", blurb(), hack_uid_error);
if (hack_uid_errno == -1)
fprintf (stderr, "%s\n", buf);
else