projects
/
xscreensaver
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
http://www.tienza.es/crux/src/www.jwz.org/xscreensaver/xscreensaver-5.05.tar.gz
[xscreensaver]
/
driver
/
subprocs.c
diff --git
a/driver/subprocs.c
b/driver/subprocs.c
index 0bbe4a87609c836239b693642957276d33f64a89..88270d6ca0ad448ba55f374d1110faa3fb02ed5c 100644
(file)
--- a/
driver/subprocs.c
+++ b/
driver/subprocs.c
@@
-1,5
+1,5
@@
/* subprocs.c --- choosing, spawning, and killing screenhacks.
/* subprocs.c --- choosing, spawning, and killing screenhacks.
- * xscreensaver, Copyright (c) 1991-200
6
Jamie Zawinski <jwz@jwz.org>
+ * xscreensaver, Copyright (c) 1991-200
8
Jamie Zawinski <jwz@jwz.org>
*
* Permission to use, copy, modify, distribute, and sell this software and its
* documentation for any purpose is hereby granted without fee, provided that
*
* Permission to use, copy, modify, distribute, and sell this software and its
* documentation for any purpose is hereby granted without fee, provided that
@@
-93,7
+93,7
@@
no_malloc_number_to_string (long num)
num = -num;
}
num = -num;
}
- while ((num > 0) && (num_digits < sizeof(string
- 1)
))
+ while ((num > 0) && (num_digits < sizeof(string
) - 1
))
{
int digit;
digit = (int) num % 10;
{
int digit;
digit = (int) num % 10;
@@
-360,12
+360,20
@@
static int block_sigchld_handler = 0;
block_sigchld (void)
{
#ifdef HAVE_SIGACTION
block_sigchld (void)
{
#ifdef HAVE_SIGACTION
+ struct sigaction sa;
sigset_t child_set;
sigset_t child_set;
+
+ memset (&sa, 0, sizeof (sa));
+ sa.sa_handler = SIG_IGN;
+ sigaction (SIGPIPE, &sa, NULL);
+
sigemptyset (&child_set);
sigaddset (&child_set, SIGCHLD);
sigemptyset (&child_set);
sigaddset (&child_set, SIGCHLD);
- sigaddset (&child_set, SIGPIPE);
sigprocmask (SIG_BLOCK, &child_set, 0);
sigprocmask (SIG_BLOCK, &child_set, 0);
-#endif /* HAVE_SIGACTION */
+
+#else /* !HAVE_SIGACTION */
+ signal (SIGPIPE, SIG_IGN);
+#endif /* !HAVE_SIGACTION */
block_sigchld_handler++;
block_sigchld_handler++;
@@
-380,12
+388,20
@@
void
unblock_sigchld (void)
{
#ifdef HAVE_SIGACTION
unblock_sigchld (void)
{
#ifdef HAVE_SIGACTION
+ struct sigaction sa;
sigset_t child_set;
sigset_t child_set;
+
+ memset(&sa, 0, sizeof (sa));
+ sa.sa_handler = SIG_DFL;
+ sigaction(SIGPIPE, &sa, NULL);
+
sigemptyset(&child_set);
sigaddset(&child_set, SIGCHLD);
sigemptyset(&child_set);
sigaddset(&child_set, SIGCHLD);
- sigaddset(&child_set, SIGPIPE);
sigprocmask(SIG_UNBLOCK, &child_set, 0);
sigprocmask(SIG_UNBLOCK, &child_set, 0);
-#endif /* HAVE_SIGACTION */
+
+#else /* !HAVE_SIGACTION */
+ signal(SIGPIPE, SIG_DFL);
+#endif /* !HAVE_SIGACTION */
block_sigchld_handler--;
}
block_sigchld_handler--;
}
@@
-1225,9
+1241,9
@@
get_best_gl_visual (saver_screen_info *ssi)
execvp (av[0], av); /* shouldn't return. */
execvp (av[0], av); /* shouldn't return. */
- if (errno != ENOENT
|| si->prefs.verbose_p
)
+ if (errno != ENOENT
/* || si->prefs.verbose_p */
)
{
{
- /* Ignore "no such file or directory" errors
, unless verbose
.
+ /* Ignore "no such file or directory" errors.
Issue all other exec errors, though. */
sprintf (buf, "%s: running %s", blurb(), av[0]);
perror (buf);
Issue all other exec errors, though. */
sprintf (buf, "%s: running %s", blurb(), av[0]);
perror (buf);