return (0);
}
-static double parse_float(const char **p_inout, double min, double max,
- const char *what)
-{
- const char *p;
- char *q;
- double x;
- int err;
-
- err = errno; errno = 0;
- p = *p_inout;
- x = strtod(p, &q);
- if (errno || x < min || x > max) bail("bad %s `%s'", what, p);
- *p_inout = q; errno = err;
- return (x);
-}
-
-static long parse_int(const char **p_inout, long min, long max,
- const char *what)
-{
- const char *p;
- char *q;
- long x;
- int err;
-
- err = errno; errno = 0;
- p = *p_inout;
- x = strtoul(p, &q, 0);
- if (errno || x < min || x > max) bail("bad %s `%s'", what, p);
- *p_inout = q; errno = err;
- return (x);
-}
-
#define PRF_HYPHEN 1u
static int parse_range(const char *p, unsigned f,
secaddr *start_out, secaddr *end_out)
(STRNCMP(p, ==, s "=", sizeof(s)) && (p += sizeof(s), 1))
for (;;) {
if (SKIP_PREFIX("cf"))
- clear_factor = parse_float(&p, 0, DBL_MAX, "clear factor");
+ clear_factor = parse_float(&p, PNF_JUNK, 0, DBL_MAX,
+ "clear factor");
else if (SKIP_PREFIX("cmin"))
- clear_min = parse_int(&p, 1, SECLIMIT, "clear minimum");
+ clear_min = parse_int(&p, PNF_JUNK, 1, SECLIMIT,
+ "clear minimum");
else if (SKIP_PREFIX("cmax"))
- clear_max = parse_int(&p, 1, SECLIMIT, "clear maximum");
+ clear_max = parse_int(&p, PNF_JUNK, 1, SECLIMIT,
+ "clear maximum");
else if (SKIP_PREFIX("sf"))
- step_factor = parse_float(&p, 0, DBL_MAX, "step factor");
+ step_factor = parse_float(&p, PNF_JUNK, 0, DBL_MAX,
+ "step factor");
else if (SKIP_PREFIX("smin"))
- step_min = parse_int(&p, 1, SECLIMIT - 1, "step minimum");
+ step_min = parse_int(&p, PNF_JUNK, 1, SECLIMIT - 1,
+ "step minimum");
else if (SKIP_PREFIX("smax"))
- step_max = parse_int(&p, 1, SECLIMIT - 1, "step maximum");
+ step_max = parse_int(&p, PNF_JUNK, 1, SECLIMIT - 1,
+ "step maximum");
else if (SKIP_PREFIX("retry"))
- max_retries = parse_int(&p, 0, INT_MAX, "retries");
+ max_retries = parse_int(&p, PNF_JUNK, 0, INT_MAX, "retries");
else if (SKIP_PREFIX("alpha"))
- alpha = parse_float(&p, 0, 1, "average decay factor");
+ alpha = parse_float(&p, PNF_JUNK, 0, 1, "average decay factor");
else if (SKIP_PREFIX("_badwait"))
- bad_block_delay = parse_float(&p, 0, DBL_MAX, "bad-block delay");
+ bad_block_delay = parse_float(&p, PNF_JUNK, 0, DBL_MAX,
+ "bad-block delay");
else if (SKIP_PREFIX("_blkwait"))
- good_block_delay = parse_float(&p, 0, DBL_MAX, "good block delay");
+ good_block_delay = parse_float(&p, PNF_JUNK, 0, DBL_MAX,
+ "good block delay");
else
bail("unknown bad blocks parameter `%s'", p);
if (!*p) break;
exit(2);
}
+double parse_float(const char **p_inout, unsigned f,
+ double min, double max, const char *what)
+{
+ const char *p;
+ char *q;
+ double x;
+ int err;
+
+ err = errno; errno = 0;
+ p = *p_inout;
+ x = strtod(p, &q);
+ if (errno || x < min || x > max || (!(f&PNF_JUNK) && *q))
+ bail("bad %s `%s'", what, p);
+ *p_inout = q; errno = err;
+ return (x);
+}
+
+long parse_int(const char **p_inout, unsigned f,
+ long min, long max, const char *what)
+{
+ const char *p;
+ char *q;
+ long x;
+ int err;
+
+ err = errno; errno = 0;
+ p = *p_inout;
+ x = strtoul(p, &q, 0);
+ if (errno || x < min || x > max || (!(f&PNF_JUNK) && *q))
+ bail("bad %s `%s'", what, p);
+ *p_inout = q; errno = err;
+ return (x);
+}
+
void sit(double t)
{
struct timeval tv;