}
for (;;) {
+ usec_t multiplier = default_unit, k;
long long l, z = 0;
- char *e;
unsigned n = 0;
- usec_t multiplier = default_unit, k;
+ char *e;
p += strspn(p, WHITESPACE);
break;
}
+ if (*p == '-') /* Don't allow "-0" */
+ return -ERANGE;
+
errno = 0;
l = strtoll(p, &e, 10);
if (errno > 0)
if (*e == '.') {
char *b = e + 1;
+ if (*b == '-') /* Don't allow 0.-0 */
+ return -EINVAL;
+
errno = 0;
z = strtoll(b, &e, 10);
if (errno > 0)
return -errno;
-
if (z < 0)
return -ERANGE;
-
if (e == b)
return -EINVAL;
break;
}
+ if (*p == '-')
+ return -ERANGE;
+
errno = 0;
l = strtoll(p, &e, 10);
-
if (errno > 0)
return -errno;
-
if (l < 0)
return -ERANGE;
if (*e == '.') {
char *b = e + 1;
+ if (*b == '-')
+ return -EINVAL;
+
errno = 0;
z = strtoll(b, &e, 10);
if (errno > 0)
return -errno;
-
if (z < 0)
return -ERANGE;
-
if (e == b)
return -EINVAL;
assert_se(parse_sec(" . ", &u) < 0);
assert_se(parse_sec(" 5. ", &u) < 0);
assert_se(parse_sec(".s ", &u) < 0);
+ assert_se(parse_sec("-5s ", &u) < 0);
+ assert_se(parse_sec("-0.3s ", &u) < 0);
+ assert_se(parse_sec("-0.0s ", &u) < 0);
+ assert_se(parse_sec("-0.-0s ", &u) < 0);
+ assert_se(parse_sec("0.-0s ", &u) < 0);
+ assert_se(parse_sec("3.-0s ", &u) < 0);
assert_se(parse_sec(" infinity .7", &u) < 0);
assert_se(parse_sec(".3 infinity", &u) < 0);
}