1 /* vi: set sw=4 ts=4: */
5 * Copyright (C) 2018 Denys Vlasenko
7 * Licensed under GPLv2, see file LICENSE in this source tree.
9 //config:config FLOAT_DURATION
10 //config: bool "Enable fractional duration arguments"
13 //config: Allow sleep N.NNN, top -d N.NNN etc.
15 //kbuild:lib-$(CONFIG_SLEEP) += duration.o
16 //kbuild:lib-$(CONFIG_TOP) += duration.o
17 //kbuild:lib-$(CONFIG_TIMEOUT) += duration.o
18 //kbuild:lib-$(CONFIG_PING) += duration.o
19 //kbuild:lib-$(CONFIG_PING6) += duration.o
23 static const struct suffix_mult duration_suffixes[] = {
31 #if ENABLE_FLOAT_DURATION
32 duration_t FAST_FUNC parse_duration_str(char *str)
36 if (strchr(str, '.')) {
39 int len = strspn(str, "0123456789.");
50 duration = d * xatoul_sfx(str, duration_suffixes);
53 duration = xatoul_sfx(str, duration_suffixes);
58 void FAST_FUNC sleep_for_duration(duration_t duration)
62 ts.tv_sec = MAXINT(typeof(ts.tv_sec));
64 if (duration >= 0 && duration < ts.tv_sec) {
66 ts.tv_nsec = (duration - ts.tv_sec) * 1000000000;
71 } while (errno == EINTR);
74 duration_t FAST_FUNC parse_duration_str(char *str)
76 return xatou_range_sfx(str, 0, UINT_MAX, duration_suffixes);