annotate lib/sleep.c @ 17463:203c036eb0c6

bootstrap: support checksum utils without a --status option * build-aux/bootstrap: Only look for sha1sum if updating po files. Add sha1 to the list of supported checksum utils since it's now supported through adjustments below. (update_po_files): Remove the use of --status in a way that will suppress all error messages, but since this is only used to minimize updates, it shouldn't cause an issue. Exit early if there is a problem updating the po file checksums. (find_tool): Remove the check for --version support as this is optional as per commit 86186b17. Don't even check for the presence of the command as if that is needed, it's supported through configuring prerequisites in bootstrap.conf. Prompt that when a tool isn't found, one can define an environment variable to add to the hardcoded search list.
author Pádraig Brady <P@draigBrady.com>
date Thu, 08 Aug 2013 11:08:49 +0100 (2013-08-08)
parents e542fd46ad6f
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
8786
b7c6961fb530 New module 'sleep'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
1 /* Pausing execution of the current thread.
17249
e542fd46ad6f maint: update all copyright year number ranges
Eric Blake <eblake@redhat.com>
parents: 16358
diff changeset
2 Copyright (C) 2007, 2009-2013 Free Software Foundation, Inc.
8786
b7c6961fb530 New module 'sleep'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
3 Written by Bruno Haible <bruno@clisp.org>, 2007.
b7c6961fb530 New module 'sleep'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
4
9309
bbbbbf4cd1c5 Change copyright notice from GPLv2+ to GPLv3+.
Bruno Haible <bruno@clisp.org>
parents: 8786
diff changeset
5 This program is free software: you can redistribute it and/or modify
8786
b7c6961fb530 New module 'sleep'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
6 it under the terms of the GNU General Public License as published by
9309
bbbbbf4cd1c5 Change copyright notice from GPLv2+ to GPLv3+.
Bruno Haible <bruno@clisp.org>
parents: 8786
diff changeset
7 the Free Software Foundation; either version 3 of the License, or
bbbbbf4cd1c5 Change copyright notice from GPLv2+ to GPLv3+.
Bruno Haible <bruno@clisp.org>
parents: 8786
diff changeset
8 (at your option) any later version.
8786
b7c6961fb530 New module 'sleep'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
9
b7c6961fb530 New module 'sleep'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
10 This program is distributed in the hope that it will be useful,
b7c6961fb530 New module 'sleep'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
11 but WITHOUT ANY WARRANTY; without even the implied warranty of
b7c6961fb530 New module 'sleep'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
b7c6961fb530 New module 'sleep'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
13 GNU General Public License for more details.
b7c6961fb530 New module 'sleep'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
14
b7c6961fb530 New module 'sleep'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
15 You should have received a copy of the GNU General Public License
9309
bbbbbf4cd1c5 Change copyright notice from GPLv2+ to GPLv3+.
Bruno Haible <bruno@clisp.org>
parents: 8786
diff changeset
16 along with this program. If not, see <http://www.gnu.org/licenses/>. */
8786
b7c6961fb530 New module 'sleep'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
17
b7c6961fb530 New module 'sleep'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
18 #include <config.h>
b7c6961fb530 New module 'sleep'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
19
b7c6961fb530 New module 'sleep'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
20 /* Specification. */
b7c6961fb530 New module 'sleep'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
21 #include <unistd.h>
b7c6961fb530 New module 'sleep'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
22
12326
25e64e77bb53 sleep: work around cygwin bug
Eric Blake <ebb9@byu.net>
parents: 9309
diff changeset
23 #include <limits.h>
25e64e77bb53 sleep: work around cygwin bug
Eric Blake <ebb9@byu.net>
parents: 9309
diff changeset
24
25e64e77bb53 sleep: work around cygwin bug
Eric Blake <ebb9@byu.net>
parents: 9309
diff changeset
25 #include "verify.h"
25e64e77bb53 sleep: work around cygwin bug
Eric Blake <ebb9@byu.net>
parents: 9309
diff changeset
26
8786
b7c6961fb530 New module 'sleep'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
27 #if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__
b7c6961fb530 New module 'sleep'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
28
b7c6961fb530 New module 'sleep'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
29 # define WIN32_LEAN_AND_MEAN /* avoid including junk */
b7c6961fb530 New module 'sleep'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
30 # include <windows.h>
b7c6961fb530 New module 'sleep'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
31
b7c6961fb530 New module 'sleep'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
32 unsigned int
b7c6961fb530 New module 'sleep'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
33 sleep (unsigned int seconds)
b7c6961fb530 New module 'sleep'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
34 {
b7c6961fb530 New module 'sleep'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
35 unsigned int remaining;
b7c6961fb530 New module 'sleep'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
36
b7c6961fb530 New module 'sleep'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
37 /* Sleep for 1 second many times, because
16358
a712776b11ce maint: spelling fixes
Paul Eggert <eggert@cs.ucla.edu>
parents: 16201
diff changeset
38 1. Sleep is not interruptible by Ctrl-C,
8786
b7c6961fb530 New module 'sleep'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
39 2. we want to avoid arithmetic overflow while multiplying with 1000. */
b7c6961fb530 New module 'sleep'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
40 for (remaining = seconds; remaining > 0; remaining--)
b7c6961fb530 New module 'sleep'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
41 Sleep (1000);
b7c6961fb530 New module 'sleep'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
42
b7c6961fb530 New module 'sleep'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
43 return remaining;
b7c6961fb530 New module 'sleep'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
44 }
b7c6961fb530 New module 'sleep'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
45
12326
25e64e77bb53 sleep: work around cygwin bug
Eric Blake <ebb9@byu.net>
parents: 9309
diff changeset
46 #elif HAVE_SLEEP
25e64e77bb53 sleep: work around cygwin bug
Eric Blake <ebb9@byu.net>
parents: 9309
diff changeset
47
25e64e77bb53 sleep: work around cygwin bug
Eric Blake <ebb9@byu.net>
parents: 9309
diff changeset
48 # undef sleep
25e64e77bb53 sleep: work around cygwin bug
Eric Blake <ebb9@byu.net>
parents: 9309
diff changeset
49
25e64e77bb53 sleep: work around cygwin bug
Eric Blake <ebb9@byu.net>
parents: 9309
diff changeset
50 /* Guarantee unlimited sleep and a reasonable return value. Cygwin
25e64e77bb53 sleep: work around cygwin bug
Eric Blake <ebb9@byu.net>
parents: 9309
diff changeset
51 1.5.x rejects attempts to sleep more than 49.7 days (2**32
25e64e77bb53 sleep: work around cygwin bug
Eric Blake <ebb9@byu.net>
parents: 9309
diff changeset
52 milliseconds), but uses uninitialized memory which results in a
13852
299859ce1b75 sleep, nanosleep: Work around Linux 2.6.9 nanosleep bug.
Bruno Haible <bruno@clisp.org>
parents: 12559
diff changeset
53 garbage answer. Similarly, Linux 2.6.9 with glibc 2.3.4 has a too
299859ce1b75 sleep, nanosleep: Work around Linux 2.6.9 nanosleep bug.
Bruno Haible <bruno@clisp.org>
parents: 12559
diff changeset
54 small return value when asked to sleep more than 24.85 days. */
12326
25e64e77bb53 sleep: work around cygwin bug
Eric Blake <ebb9@byu.net>
parents: 9309
diff changeset
55 unsigned int
25e64e77bb53 sleep: work around cygwin bug
Eric Blake <ebb9@byu.net>
parents: 9309
diff changeset
56 rpl_sleep (unsigned int seconds)
25e64e77bb53 sleep: work around cygwin bug
Eric Blake <ebb9@byu.net>
parents: 9309
diff changeset
57 {
25e64e77bb53 sleep: work around cygwin bug
Eric Blake <ebb9@byu.net>
parents: 9309
diff changeset
58 /* This requires int larger than 16 bits. */
13852
299859ce1b75 sleep, nanosleep: Work around Linux 2.6.9 nanosleep bug.
Bruno Haible <bruno@clisp.org>
parents: 12559
diff changeset
59 verify (UINT_MAX / 24 / 24 / 60 / 60);
299859ce1b75 sleep, nanosleep: Work around Linux 2.6.9 nanosleep bug.
Bruno Haible <bruno@clisp.org>
parents: 12559
diff changeset
60 const unsigned int limit = 24 * 24 * 60 * 60;
12326
25e64e77bb53 sleep: work around cygwin bug
Eric Blake <ebb9@byu.net>
parents: 9309
diff changeset
61 while (limit < seconds)
25e64e77bb53 sleep: work around cygwin bug
Eric Blake <ebb9@byu.net>
parents: 9309
diff changeset
62 {
25e64e77bb53 sleep: work around cygwin bug
Eric Blake <ebb9@byu.net>
parents: 9309
diff changeset
63 unsigned int result;
25e64e77bb53 sleep: work around cygwin bug
Eric Blake <ebb9@byu.net>
parents: 9309
diff changeset
64 seconds -= limit;
25e64e77bb53 sleep: work around cygwin bug
Eric Blake <ebb9@byu.net>
parents: 9309
diff changeset
65 result = sleep (limit);
25e64e77bb53 sleep: work around cygwin bug
Eric Blake <ebb9@byu.net>
parents: 9309
diff changeset
66 if (result)
25e64e77bb53 sleep: work around cygwin bug
Eric Blake <ebb9@byu.net>
parents: 9309
diff changeset
67 return seconds + result;
25e64e77bb53 sleep: work around cygwin bug
Eric Blake <ebb9@byu.net>
parents: 9309
diff changeset
68 }
25e64e77bb53 sleep: work around cygwin bug
Eric Blake <ebb9@byu.net>
parents: 9309
diff changeset
69 return sleep (seconds);
25e64e77bb53 sleep: work around cygwin bug
Eric Blake <ebb9@byu.net>
parents: 9309
diff changeset
70 }
25e64e77bb53 sleep: work around cygwin bug
Eric Blake <ebb9@byu.net>
parents: 9309
diff changeset
71
25e64e77bb53 sleep: work around cygwin bug
Eric Blake <ebb9@byu.net>
parents: 9309
diff changeset
72 #else /* !HAVE_SLEEP */
8786
b7c6961fb530 New module 'sleep'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
73
b7c6961fb530 New module 'sleep'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
74 #error "Please port gnulib sleep.c to your platform, possibly using usleep() or select(), then report this to bug-gnulib."
b7c6961fb530 New module 'sleep'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
75
b7c6961fb530 New module 'sleep'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
76 #endif