aboutsummaryrefslogtreecommitdiff
path: root/lib/xwrap.c
diff options
context:
space:
mode:
Diffstat (limited to 'lib/xwrap.c')
-rw-r--r--lib/xwrap.c10
1 files changed, 7 insertions, 3 deletions
diff --git a/lib/xwrap.c b/lib/xwrap.c
index fba262b9..2027069d 100644
--- a/lib/xwrap.c
+++ b/lib/xwrap.c
@@ -791,20 +791,20 @@ double xstrtod(char *s)
// parse fractional seconds with optional s/m/h/d suffix
long xparsetime(char *arg, long zeroes, long *fraction)
{
- long l, fr;
+ long l, fr = 0, mask = 1;
char *end;
if (*arg != '.' && !isdigit(*arg)) error_exit("Not a number '%s'", arg);
l = strtoul(arg, &end, 10);
- fr = 0;
if (*end == '.') {
end++;
while (zeroes--) {
fr *= 10;
+ mask *= 10;
if (isdigit(*end)) fr += *end++-'0';
}
+ while (isdigit(*end)) end++;
}
- if (fraction) *fraction = fr;
// Parse suffix
if (*end) {
@@ -812,7 +812,11 @@ long xparsetime(char *arg, long zeroes, long *fraction)
if (i == -1 || *(end+1)) error_exit("Unknown suffix '%s'", end);
l *= ismhd[i];
+ fr *= ismhd[i];
+ l += fr/mask;
+ fr %= mask;
}
+ if (fraction) *fraction = fr;
return l;
}