diff options
Diffstat (limited to 'openbsd-compat')
-rw-r--r-- | openbsd-compat/bsd-misc.c | 33 | ||||
-rw-r--r-- | openbsd-compat/bsd-misc.h | 11 |
2 files changed, 42 insertions, 2 deletions
diff --git a/openbsd-compat/bsd-misc.c b/openbsd-compat/bsd-misc.c index d7180d424..b8e9996d5 100644 --- a/openbsd-compat/bsd-misc.c +++ b/openbsd-compat/bsd-misc.c | |||
@@ -25,7 +25,7 @@ | |||
25 | #include "includes.h" | 25 | #include "includes.h" |
26 | #include "xmalloc.h" | 26 | #include "xmalloc.h" |
27 | 27 | ||
28 | RCSID("$Id: bsd-misc.c,v 1.11 2003/01/09 22:53:13 djm Exp $"); | 28 | RCSID("$Id: bsd-misc.c,v 1.12 2003/03/18 18:21:41 tim Exp $"); |
29 | 29 | ||
30 | /* | 30 | /* |
31 | * NB. duplicate __progname in case it is an alias for argv[0] | 31 | * NB. duplicate __progname in case it is an alias for argv[0] |
@@ -135,3 +135,34 @@ setgroups(size_t size, const gid_t *list) | |||
135 | } | 135 | } |
136 | #endif | 136 | #endif |
137 | 137 | ||
138 | #if !defined(HAVE_NANOSLEEP) && !defined(HAVE_NSLEEP) | ||
139 | int nanosleep(const struct timespec *req, struct timespec *rem) | ||
140 | { | ||
141 | int rc, saverrno; | ||
142 | extern int errno; | ||
143 | struct timeval tstart, tstop, tremain, time2wait; | ||
144 | |||
145 | TIMESPEC_TO_TIMEVAL(&time2wait, req) | ||
146 | (void) gettimeofday(&tstart, NULL); | ||
147 | rc = select(0, NULL, NULL, NULL, &time2wait); | ||
148 | if (rc == -1) { | ||
149 | saverrno = errno; | ||
150 | (void) gettimeofday (&tstop, NULL); | ||
151 | errno = saverrno; | ||
152 | tremain.tv_sec = time2wait.tv_sec - | ||
153 | (tstop.tv_sec - tstart.tv_sec); | ||
154 | tremain.tv_usec = time2wait.tv_usec - | ||
155 | (tstop.tv_usec - tstart.tv_usec); | ||
156 | tremain.tv_sec += tremain.tv_usec / 1000000L; | ||
157 | tremain.tv_usec %= 1000000L; | ||
158 | } else { | ||
159 | tremain.tv_sec = 0; | ||
160 | tremain.tv_usec = 0; | ||
161 | } | ||
162 | TIMEVAL_TO_TIMESPEC(&tremain, rem) | ||
163 | |||
164 | return(rc); | ||
165 | } | ||
166 | |||
167 | #endif | ||
168 | |||
diff --git a/openbsd-compat/bsd-misc.h b/openbsd-compat/bsd-misc.h index 981196044..78d9ccdd4 100644 --- a/openbsd-compat/bsd-misc.h +++ b/openbsd-compat/bsd-misc.h | |||
@@ -22,7 +22,7 @@ | |||
22 | * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | 22 | * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
23 | */ | 23 | */ |
24 | 24 | ||
25 | /* $Id: bsd-misc.h,v 1.6 2002/06/13 21:34:58 mouring Exp $ */ | 25 | /* $Id: bsd-misc.h,v 1.7 2003/03/18 18:21:41 tim Exp $ */ |
26 | 26 | ||
27 | #ifndef _BSD_MISC_H | 27 | #ifndef _BSD_MISC_H |
28 | #define _BSD_MISC_H | 28 | #define _BSD_MISC_H |
@@ -80,5 +80,14 @@ int truncate (const char *path, off_t length); | |||
80 | int setgroups(size_t size, const gid_t *list); | 80 | int setgroups(size_t size, const gid_t *list); |
81 | #endif | 81 | #endif |
82 | 82 | ||
83 | #if !defined(HAVE_NANOSLEEP) && !defined(HAVE_NSLEEP) | ||
84 | #ifndef HAVE_STRUCT_TIMESPEC | ||
85 | struct timespec { | ||
86 | time_t tv_sec; | ||
87 | long tv_nsec; | ||
88 | }; | ||
89 | #endif | ||
90 | int nanosleep(const struct timespec *req, struct timespec *rem); | ||
91 | #endif | ||
83 | 92 | ||
84 | #endif /* _BSD_MISC_H */ | 93 | #endif /* _BSD_MISC_H */ |