mirror of
git://git.sv.gnu.org/coreutils
synced 2026-05-22 08:22:04 -04:00
(rpl_nanosleep): Include "timespec.h" before macros
that might redefine system include files. (siginterrupt) [!HAVE_SIGINTERRUPT]: New macro. (my_usleep): Use NULL rather than (void *) 0. (rpl_nanosleep) [!defined SA_NOCLDSTOP]: Use siginterrupt to specify that system calls should be interrupted. (rpl_nanosleep): Move initialization of suspended closer to call of my_usleep.
This commit is contained in:
+14
-10
@@ -1,5 +1,5 @@
|
||||
/* Provide a replacement for the POSIX nanosleep function.
|
||||
Copyright (C) 1999, 2000, 2002, 2004 Free Software Foundation, Inc.
|
||||
Copyright (C) 1999, 2000, 2002, 2004, 2005 Free Software Foundation, Inc.
|
||||
|
||||
This program is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
@@ -34,6 +34,8 @@
|
||||
# include <unistd.h>
|
||||
#endif
|
||||
|
||||
#include "timespec.h"
|
||||
|
||||
/* Some systems (MSDOS) don't have SIGCONT.
|
||||
Using SIGTERM here turns the signal-handling code below
|
||||
into a no-op on such systems. */
|
||||
@@ -41,7 +43,9 @@
|
||||
# define SIGCONT SIGTERM
|
||||
#endif
|
||||
|
||||
#include "timespec.h"
|
||||
#if ! HAVE_SIGINTERRUPT
|
||||
# define siginterrupt(sig, flag) /* empty */
|
||||
#endif
|
||||
|
||||
static sig_atomic_t volatile suspended;
|
||||
|
||||
@@ -66,7 +70,7 @@ my_usleep (const struct timespec *ts_delay)
|
||||
tv_delay.tv_sec++;
|
||||
tv_delay.tv_usec = 0;
|
||||
}
|
||||
select (0, (void *) 0, (void *) 0, (void *) 0, &tv_delay);
|
||||
select (0, NULL, NULL, NULL, &tv_delay);
|
||||
}
|
||||
|
||||
/* FIXME: comment */
|
||||
@@ -77,16 +81,11 @@ rpl_nanosleep (const struct timespec *requested_delay,
|
||||
{
|
||||
static bool initialized;
|
||||
|
||||
#ifdef SA_NOCLDSTOP
|
||||
struct sigaction oldact, newact;
|
||||
#endif
|
||||
|
||||
suspended = 0;
|
||||
|
||||
/* set up sig handler */
|
||||
if (! initialized)
|
||||
{
|
||||
#ifdef SA_NOCLDSTOP
|
||||
struct sigaction oldact, newact;
|
||||
newact.sa_handler = sighandler;
|
||||
sigemptyset (&newact.sa_mask);
|
||||
newact.sa_flags = 0;
|
||||
@@ -96,11 +95,16 @@ rpl_nanosleep (const struct timespec *requested_delay,
|
||||
sigaction (SIGCONT, &newact, NULL);
|
||||
#else
|
||||
if (signal (SIGCONT, SIG_IGN) != SIG_IGN)
|
||||
signal (SIGCONT, sighandler);
|
||||
{
|
||||
signal (SIGCONT, sighandler);
|
||||
siginterrupt (SIGCONT, 1);
|
||||
}
|
||||
#endif
|
||||
initialized = true;
|
||||
}
|
||||
|
||||
suspended = 0;
|
||||
|
||||
my_usleep (requested_delay);
|
||||
|
||||
if (suspended)
|
||||
|
||||
Reference in New Issue
Block a user