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
21 static const struct suffix_mult duration_suffixes[] = {
29 #if ENABLE_FLOAT_DURATION
30 duration_t FAST_FUNC parse_duration_str(char *str)
34 if (strchr(str, '.')) {
37 int len = strspn(str, "0123456789.");
48 duration = d * xatoul_sfx(str, duration_suffixes);
51 duration = xatoul_sfx(str, duration_suffixes);
56 void FAST_FUNC sleep_for_duration(duration_t duration)
60 ts.tv_sec = MAXINT(typeof(ts.tv_sec));
62 if (duration >= 0 && duration < ts.tv_sec) {
64 ts.tv_nsec = (duration - ts.tv_sec) * 1000000000;
69 } while (errno == EINTR);
72 duration_t FAST_FUNC parse_duration_str(char *str)
74 return xatou_range_sfx(*argv, 0, UINT_MAX, duration_suffixes);