annotate lib/nanosleep.c @ 2270:cf5eb0c29b04

#undef nanosleep. (rpl_nanosleep): Rename from nanosleep.
author Jim Meyering <jim@meyering.net>
date Thu, 10 Feb 2000 09:38:43 +0000
parents 9aca0b7cb4cc
children 12885d185e68
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
2052
3c79d37078c2 *** empty log message ***
Jim Meyering <jim@meyering.net>
parents:
diff changeset
1 /* Provide a replacement for the POSIX nanosleep function.
2077
5b94c298db41 Include nanosleep.h.
Jim Meyering <jim@meyering.net>
parents: 2058
diff changeset
2 Copyright (C) 1999, 2000 Free Software Foundation, Inc.
2052
3c79d37078c2 *** empty log message ***
Jim Meyering <jim@meyering.net>
parents:
diff changeset
3
3c79d37078c2 *** empty log message ***
Jim Meyering <jim@meyering.net>
parents:
diff changeset
4 This program is free software; you can redistribute it and/or modify
3c79d37078c2 *** empty log message ***
Jim Meyering <jim@meyering.net>
parents:
diff changeset
5 it under the terms of the GNU General Public License as published by
3c79d37078c2 *** empty log message ***
Jim Meyering <jim@meyering.net>
parents:
diff changeset
6 the Free Software Foundation; either version 2, or (at your option)
3c79d37078c2 *** empty log message ***
Jim Meyering <jim@meyering.net>
parents:
diff changeset
7 any later version.
3c79d37078c2 *** empty log message ***
Jim Meyering <jim@meyering.net>
parents:
diff changeset
8
3c79d37078c2 *** empty log message ***
Jim Meyering <jim@meyering.net>
parents:
diff changeset
9 This program is distributed in the hope that it will be useful,
3c79d37078c2 *** empty log message ***
Jim Meyering <jim@meyering.net>
parents:
diff changeset
10 but WITHOUT ANY WARRANTY; without even the implied warranty of
3c79d37078c2 *** empty log message ***
Jim Meyering <jim@meyering.net>
parents:
diff changeset
11 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
3c79d37078c2 *** empty log message ***
Jim Meyering <jim@meyering.net>
parents:
diff changeset
12 GNU General Public License for more details.
3c79d37078c2 *** empty log message ***
Jim Meyering <jim@meyering.net>
parents:
diff changeset
13
3c79d37078c2 *** empty log message ***
Jim Meyering <jim@meyering.net>
parents:
diff changeset
14 You should have received a copy of the GNU General Public License
3c79d37078c2 *** empty log message ***
Jim Meyering <jim@meyering.net>
parents:
diff changeset
15 along with this program; if not, write to the Free Software Foundation,
3c79d37078c2 *** empty log message ***
Jim Meyering <jim@meyering.net>
parents:
diff changeset
16 Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
3c79d37078c2 *** empty log message ***
Jim Meyering <jim@meyering.net>
parents:
diff changeset
17
3c79d37078c2 *** empty log message ***
Jim Meyering <jim@meyering.net>
parents:
diff changeset
18 /* written by Jim Meyering */
3c79d37078c2 *** empty log message ***
Jim Meyering <jim@meyering.net>
parents:
diff changeset
19
3c79d37078c2 *** empty log message ***
Jim Meyering <jim@meyering.net>
parents:
diff changeset
20 #include <config.h>
2270
cf5eb0c29b04 #undef nanosleep.
Jim Meyering <jim@meyering.net>
parents: 2151
diff changeset
21
cf5eb0c29b04 #undef nanosleep.
Jim Meyering <jim@meyering.net>
parents: 2151
diff changeset
22 /* Undefine nanosleep here so any prototype is not redefined to be a
cf5eb0c29b04 #undef nanosleep.
Jim Meyering <jim@meyering.net>
parents: 2151
diff changeset
23 prototype for rpl_nanosleep. (they'd conflict e.g., on alpha-dec-osf3.2) */
cf5eb0c29b04 #undef nanosleep.
Jim Meyering <jim@meyering.net>
parents: 2151
diff changeset
24 #undef nanosleep
cf5eb0c29b04 #undef nanosleep.
Jim Meyering <jim@meyering.net>
parents: 2151
diff changeset
25
2053
0d23f740f281 *** empty log message ***
Jim Meyering <jim@meyering.net>
parents: 2052
diff changeset
26 #include <stdio.h>
2052
3c79d37078c2 *** empty log message ***
Jim Meyering <jim@meyering.net>
parents:
diff changeset
27 #include <sys/types.h>
2053
0d23f740f281 *** empty log message ***
Jim Meyering <jim@meyering.net>
parents: 2052
diff changeset
28 #include <signal.h>
2052
3c79d37078c2 *** empty log message ***
Jim Meyering <jim@meyering.net>
parents:
diff changeset
29
2057
50da17269b1b *** empty log message ***
Jim Meyering <jim@meyering.net>
parents: 2056
diff changeset
30 #include <errno.h>
50da17269b1b *** empty log message ***
Jim Meyering <jim@meyering.net>
parents: 2056
diff changeset
31 #ifndef errno
50da17269b1b *** empty log message ***
Jim Meyering <jim@meyering.net>
parents: 2056
diff changeset
32 extern int errno;
50da17269b1b *** empty log message ***
Jim Meyering <jim@meyering.net>
parents: 2056
diff changeset
33 #endif
50da17269b1b *** empty log message ***
Jim Meyering <jim@meyering.net>
parents: 2056
diff changeset
34
2056
cf3d523888c5 *** empty log message ***
Jim Meyering <jim@meyering.net>
parents: 2053
diff changeset
35 #if HAVE_UNISTD_H
cf3d523888c5 *** empty log message ***
Jim Meyering <jim@meyering.net>
parents: 2053
diff changeset
36 # include <unistd.h>
cf3d523888c5 *** empty log message ***
Jim Meyering <jim@meyering.net>
parents: 2053
diff changeset
37 #endif
cf3d523888c5 *** empty log message ***
Jim Meyering <jim@meyering.net>
parents: 2053
diff changeset
38
2077
5b94c298db41 Include nanosleep.h.
Jim Meyering <jim@meyering.net>
parents: 2058
diff changeset
39 #include "nanosleep.h"
2052
3c79d37078c2 *** empty log message ***
Jim Meyering <jim@meyering.net>
parents:
diff changeset
40
2056
cf3d523888c5 *** empty log message ***
Jim Meyering <jim@meyering.net>
parents: 2053
diff changeset
41 static int suspended;
2058
640074e7d6cd *** empty log message ***
Jim Meyering <jim@meyering.net>
parents: 2057
diff changeset
42 int first_call = 1;
2052
3c79d37078c2 *** empty log message ***
Jim Meyering <jim@meyering.net>
parents:
diff changeset
43
2053
0d23f740f281 *** empty log message ***
Jim Meyering <jim@meyering.net>
parents: 2052
diff changeset
44 /* Handle SIGCONT. */
0d23f740f281 *** empty log message ***
Jim Meyering <jim@meyering.net>
parents: 2052
diff changeset
45
0d23f740f281 *** empty log message ***
Jim Meyering <jim@meyering.net>
parents: 2052
diff changeset
46 static void
0d23f740f281 *** empty log message ***
Jim Meyering <jim@meyering.net>
parents: 2052
diff changeset
47 sighandler (int sig)
0d23f740f281 *** empty log message ***
Jim Meyering <jim@meyering.net>
parents: 2052
diff changeset
48 {
0d23f740f281 *** empty log message ***
Jim Meyering <jim@meyering.net>
parents: 2052
diff changeset
49 suspended = 1;
0d23f740f281 *** empty log message ***
Jim Meyering <jim@meyering.net>
parents: 2052
diff changeset
50 }
0d23f740f281 *** empty log message ***
Jim Meyering <jim@meyering.net>
parents: 2052
diff changeset
51
2058
640074e7d6cd *** empty log message ***
Jim Meyering <jim@meyering.net>
parents: 2057
diff changeset
52 /* FIXME: comment */
2052
3c79d37078c2 *** empty log message ***
Jim Meyering <jim@meyering.net>
parents:
diff changeset
53
3c79d37078c2 *** empty log message ***
Jim Meyering <jim@meyering.net>
parents:
diff changeset
54 static void
2056
cf3d523888c5 *** empty log message ***
Jim Meyering <jim@meyering.net>
parents: 2053
diff changeset
55 my_usleep (const struct timespec *ts_delay)
2052
3c79d37078c2 *** empty log message ***
Jim Meyering <jim@meyering.net>
parents:
diff changeset
56 {
3c79d37078c2 *** empty log message ***
Jim Meyering <jim@meyering.net>
parents:
diff changeset
57 struct timeval tv_delay;
3c79d37078c2 *** empty log message ***
Jim Meyering <jim@meyering.net>
parents:
diff changeset
58 tv_delay.tv_sec = ts_delay->tv_sec;
2058
640074e7d6cd *** empty log message ***
Jim Meyering <jim@meyering.net>
parents: 2057
diff changeset
59 tv_delay.tv_usec = ts_delay->tv_nsec / 1000;
2056
cf3d523888c5 *** empty log message ***
Jim Meyering <jim@meyering.net>
parents: 2053
diff changeset
60 select (0, (void *) 0, (void *) 0, (void *) 0, &tv_delay);
2052
3c79d37078c2 *** empty log message ***
Jim Meyering <jim@meyering.net>
parents:
diff changeset
61 }
3c79d37078c2 *** empty log message ***
Jim Meyering <jim@meyering.net>
parents:
diff changeset
62
2058
640074e7d6cd *** empty log message ***
Jim Meyering <jim@meyering.net>
parents: 2057
diff changeset
63 /* FIXME: comment */
640074e7d6cd *** empty log message ***
Jim Meyering <jim@meyering.net>
parents: 2057
diff changeset
64
2052
3c79d37078c2 *** empty log message ***
Jim Meyering <jim@meyering.net>
parents:
diff changeset
65 int
2270
cf5eb0c29b04 #undef nanosleep.
Jim Meyering <jim@meyering.net>
parents: 2151
diff changeset
66 rpl_nanosleep (const struct timespec *requested_delay,
2052
3c79d37078c2 *** empty log message ***
Jim Meyering <jim@meyering.net>
parents:
diff changeset
67 struct timespec *remaining_delay)
3c79d37078c2 *** empty log message ***
Jim Meyering <jim@meyering.net>
parents:
diff changeset
68 {
2151
9aca0b7cb4cc (nanosleep):
Jim Meyering <jim@meyering.net>
parents: 2077
diff changeset
69 #ifdef SA_NOCLDSTOP
2053
0d23f740f281 *** empty log message ***
Jim Meyering <jim@meyering.net>
parents: 2052
diff changeset
70 struct sigaction oldact, newact;
0d23f740f281 *** empty log message ***
Jim Meyering <jim@meyering.net>
parents: 2052
diff changeset
71 #endif
0d23f740f281 *** empty log message ***
Jim Meyering <jim@meyering.net>
parents: 2052
diff changeset
72
2056
cf3d523888c5 *** empty log message ***
Jim Meyering <jim@meyering.net>
parents: 2053
diff changeset
73 suspended = 0;
2052
3c79d37078c2 *** empty log message ***
Jim Meyering <jim@meyering.net>
parents:
diff changeset
74
2058
640074e7d6cd *** empty log message ***
Jim Meyering <jim@meyering.net>
parents: 2057
diff changeset
75 /* set up sig handler */
640074e7d6cd *** empty log message ***
Jim Meyering <jim@meyering.net>
parents: 2057
diff changeset
76 if (first_call)
640074e7d6cd *** empty log message ***
Jim Meyering <jim@meyering.net>
parents: 2057
diff changeset
77 {
2151
9aca0b7cb4cc (nanosleep):
Jim Meyering <jim@meyering.net>
parents: 2077
diff changeset
78 #ifdef SA_NOCLDSTOP
2058
640074e7d6cd *** empty log message ***
Jim Meyering <jim@meyering.net>
parents: 2057
diff changeset
79 newact.sa_handler = sighandler;
640074e7d6cd *** empty log message ***
Jim Meyering <jim@meyering.net>
parents: 2057
diff changeset
80 sigemptyset (&newact.sa_mask);
640074e7d6cd *** empty log message ***
Jim Meyering <jim@meyering.net>
parents: 2057
diff changeset
81 newact.sa_flags = 0;
2053
0d23f740f281 *** empty log message ***
Jim Meyering <jim@meyering.net>
parents: 2052
diff changeset
82
2058
640074e7d6cd *** empty log message ***
Jim Meyering <jim@meyering.net>
parents: 2057
diff changeset
83 sigaction (SIGCONT, NULL, &oldact);
640074e7d6cd *** empty log message ***
Jim Meyering <jim@meyering.net>
parents: 2057
diff changeset
84 if (oldact.sa_handler != SIG_IGN)
640074e7d6cd *** empty log message ***
Jim Meyering <jim@meyering.net>
parents: 2057
diff changeset
85 sigaction (SIGCONT, &newact, NULL);
2053
0d23f740f281 *** empty log message ***
Jim Meyering <jim@meyering.net>
parents: 2052
diff changeset
86 #else
2058
640074e7d6cd *** empty log message ***
Jim Meyering <jim@meyering.net>
parents: 2057
diff changeset
87 if (signal (SIGCONT, SIG_IGN) != SIG_IGN)
640074e7d6cd *** empty log message ***
Jim Meyering <jim@meyering.net>
parents: 2057
diff changeset
88 signal (SIGCONT, sighandler);
2053
0d23f740f281 *** empty log message ***
Jim Meyering <jim@meyering.net>
parents: 2052
diff changeset
89 #endif
2058
640074e7d6cd *** empty log message ***
Jim Meyering <jim@meyering.net>
parents: 2057
diff changeset
90 first_call = 0;
640074e7d6cd *** empty log message ***
Jim Meyering <jim@meyering.net>
parents: 2057
diff changeset
91 }
2052
3c79d37078c2 *** empty log message ***
Jim Meyering <jim@meyering.net>
parents:
diff changeset
92
2056
cf3d523888c5 *** empty log message ***
Jim Meyering <jim@meyering.net>
parents: 2053
diff changeset
93 my_usleep (requested_delay);
2052
3c79d37078c2 *** empty log message ***
Jim Meyering <jim@meyering.net>
parents:
diff changeset
94
2056
cf3d523888c5 *** empty log message ***
Jim Meyering <jim@meyering.net>
parents: 2053
diff changeset
95 if (suspended)
2052
3c79d37078c2 *** empty log message ***
Jim Meyering <jim@meyering.net>
parents:
diff changeset
96 {
3c79d37078c2 *** empty log message ***
Jim Meyering <jim@meyering.net>
parents:
diff changeset
97 /* Calculate time remaining. */
3c79d37078c2 *** empty log message ***
Jim Meyering <jim@meyering.net>
parents:
diff changeset
98 /* FIXME: the code in sleep doesn't use this, so there's no
3c79d37078c2 *** empty log message ***
Jim Meyering <jim@meyering.net>
parents:
diff changeset
99 rush to implement it. */
2058
640074e7d6cd *** empty log message ***
Jim Meyering <jim@meyering.net>
parents: 2057
diff changeset
100
640074e7d6cd *** empty log message ***
Jim Meyering <jim@meyering.net>
parents: 2057
diff changeset
101 errno = EINTR;
2052
3c79d37078c2 *** empty log message ***
Jim Meyering <jim@meyering.net>
parents:
diff changeset
102 }
3c79d37078c2 *** empty log message ***
Jim Meyering <jim@meyering.net>
parents:
diff changeset
103
3c79d37078c2 *** empty log message ***
Jim Meyering <jim@meyering.net>
parents:
diff changeset
104 /* FIXME: Restore sig handler? */
3c79d37078c2 *** empty log message ***
Jim Meyering <jim@meyering.net>
parents:
diff changeset
105
2056
cf3d523888c5 *** empty log message ***
Jim Meyering <jim@meyering.net>
parents: 2053
diff changeset
106 return suspended;
2052
3c79d37078c2 *** empty log message ***
Jim Meyering <jim@meyering.net>
parents:
diff changeset
107 }