Mercurial > hg-old > index.cgi
comparison lib/sleep.c @ 421:3c2e1f24cc7d 3.0-beta2
Added generated files for release
author | lost@l-w.ca |
---|---|
date | Sun, 19 Sep 2010 01:33:24 -0600 |
parents | |
children |
comparison
equal
deleted
inserted
replaced
420:7366deedfa85 | 421:3c2e1f24cc7d |
---|---|
1 /* Pausing execution of the current thread. | |
2 Copyright (C) 2007, 2009, 2010 Free Software Foundation, Inc. | |
3 Written by Bruno Haible <bruno@clisp.org>, 2007. | |
4 | |
5 This program is free software: you can redistribute it and/or modify | |
6 it under the terms of the GNU General Public License as published by | |
7 the Free Software Foundation; either version 3 of the License, or | |
8 (at your option) any later version. | |
9 | |
10 This program is distributed in the hope that it will be useful, | |
11 but WITHOUT ANY WARRANTY; without even the implied warranty of | |
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
13 GNU General Public License for more details. | |
14 | |
15 You should have received a copy of the GNU General Public License | |
16 along with this program. If not, see <http://www.gnu.org/licenses/>. */ | |
17 | |
18 #include <config.h> | |
19 | |
20 /* Specification. */ | |
21 #include <unistd.h> | |
22 | |
23 #include <limits.h> | |
24 | |
25 #include "verify.h" | |
26 | |
27 #if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__ | |
28 | |
29 # define WIN32_LEAN_AND_MEAN /* avoid including junk */ | |
30 # include <windows.h> | |
31 | |
32 unsigned int | |
33 sleep (unsigned int seconds) | |
34 { | |
35 unsigned int remaining; | |
36 | |
37 /* Sleep for 1 second many times, because | |
38 1. Sleep is not interruptiple by Ctrl-C, | |
39 2. we want to avoid arithmetic overflow while multiplying with 1000. */ | |
40 for (remaining = seconds; remaining > 0; remaining--) | |
41 Sleep (1000); | |
42 | |
43 return remaining; | |
44 } | |
45 | |
46 #elif HAVE_SLEEP | |
47 | |
48 # undef sleep | |
49 | |
50 /* Guarantee unlimited sleep and a reasonable return value. Cygwin | |
51 1.5.x rejects attempts to sleep more than 49.7 days (2**32 | |
52 milliseconds), but uses uninitialized memory which results in a | |
53 garbage answer. */ | |
54 unsigned int | |
55 rpl_sleep (unsigned int seconds) | |
56 { | |
57 /* This requires int larger than 16 bits. */ | |
58 verify (UINT_MAX / 49 / 24 / 60 / 60); | |
59 const unsigned int limit = 49 * 24 * 60 * 60; | |
60 while (limit < seconds) | |
61 { | |
62 unsigned int result; | |
63 seconds -= limit; | |
64 result = sleep (limit); | |
65 if (result) | |
66 return seconds + result; | |
67 } | |
68 return sleep (seconds); | |
69 } | |
70 | |
71 #else /* !HAVE_SLEEP */ | |
72 | |
73 #error "Please port gnulib sleep.c to your platform, possibly using usleep() or select(), then report this to bug-gnulib." | |
74 | |
75 #endif |