Imported from ../bash-4.0-rc1.tar.gz.
[platform/upstream/bash.git] / examples / loadables / sleep.c
1 /*
2  * sleep -- sleep for fractions of a second
3  *
4  * usage: sleep seconds[.fraction]
5  */
6
7 /*
8    Copyright (C) 1999-2009 Free Software Foundation, Inc.
9
10    This file is part of GNU Bash.
11    Bash is free software: you can redistribute it and/or modify
12    it under the terms of the GNU General Public License as published by
13    the Free Software Foundation, either version 3 of the License, or
14    (at your option) any later version.
15
16    Bash is distributed in the hope that it will be useful,
17    but WITHOUT ANY WARRANTY; without even the implied warranty of
18    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
19    GNU General Public License for more details.
20
21    You should have received a copy of the GNU General Public License
22    along with Bash.  If not, see <http://www.gnu.org/licenses/>.
23 */
24
25 #include "config.h"
26
27 #include "bashtypes.h"
28
29 #if defined (TIME_WITH_SYS_TIME)
30 #  include <sys/time.h>
31 #  include <time.h>
32 #else
33 #  if defined (HAVE_SYS_TIME_H)
34 #    include <sys/time.h>
35 #  else
36 #    include <time.h>
37 #  endif
38 #endif
39
40 #if defined (HAVE_UNISTD_H)
41 #include <unistd.h>
42 #endif
43
44 #include <stdio.h>
45 #include "chartypes.h"
46
47 #include "shell.h"
48 #include "builtins.h"
49 #include "common.h"
50
51 #define RETURN(x) \
52         do { \
53                 if (sp) *sp = sec; \
54                 if (usp) *usp = usec; \
55                 return (x); \
56         } while (0)
57
58 int
59 sleep_builtin (list)
60 WORD_LIST       *list;
61 {
62         long    sec, usec;
63
64         if (list == 0) {
65                 builtin_usage();
66                 return(EX_USAGE);
67         }
68
69         if (*list->word->word == '-' || list->next) {
70                 builtin_usage ();
71                 return (EX_USAGE);
72         }
73
74         if (uconvert(list->word->word, &sec, &usec)) {
75                 fsleep(sec, usec);
76                 return(EXECUTION_SUCCESS);
77         }
78
79         builtin_error("%s: bad sleep interval", list->word->word);
80         return (EXECUTION_FAILURE);
81 }
82
83 static char *sleep_doc[] = {
84         "Suspend execution for specified period.",
85         ""
86         "sleep suspends execution for a minimum of SECONDS[.FRACTION] seconds.",
87         (char *)NULL
88 };
89
90 struct builtin sleep_struct = {
91         "sleep",
92         sleep_builtin,
93         BUILTIN_ENABLED,
94         sleep_doc,
95         "sleep seconds[.fraction]",
96         0
97 };