errx(1, "family mismatch between net and mask");
} else {
uint8_t frac, *p;
+ char *endptr;
localmask.family = localnet.family;
/* Compute the prefix length. */
- pfxlen = (int)strtonum(tokens[1], 1,
- (localnet.family == IPv6) ? 128 : 32, NULL);
+ pfxlen = (unsigned int)strtol(tokens[1], &endptr, 10);
- if (pfxlen == 0)
+ if ((pfxlen < 0) ||
+ ((localnet.family == IPv6) && (pfxlen > 128)) ||
+ ((localnet.family == IPv4) && (pfxlen > 32)) ||
+ (tokens[1][0] == '\0') ||
+ (*endptr != '\0'))
errx(1, "invalid network prefix length \"%s\"", tokens[1]);
/* Construct the network mask. */
AC_DEFINE(HAVE_STRLCAT, 1,
[Define to 1 if you have strlcat().]))
-AC_SEARCH_LIBS(strtonum, [bsd],
- AC_DEFINE(HAVE_STRTONUM, 1,
- [Define to 1 if you have strtonum(3).]))
-
AC_CONFIG_FILES([Makefile darkstat.8])
AC_OUTPUT
}
#endif
-#ifndef HAVE_STRTONUM
-/*
- * Convert an ASCII string to a decimal numerical value. An acceptable
- * range is specified, and an optional error message string.
- *
- * Implementation built from the manual page description of OpenBSD 4.6.
- */
-long long
-strtonum(const char *nptr, long long minval, long long maxval,
- const char **errstr)
-{
- long long val;
- char *p;
-
- if ((nptr == NULL) || (*nptr == '\0') || (minval > maxval)) {
- if (errstr)
- *errstr = "invalid";
- errno = EINVAL;
- return 0;
- }
-
- errno = 0;
- val = strtoll(nptr, &p, 10);
-
- if (*p != '\0') {
- if (errstr)
- *errstr = "invalid";
- errno = EINVAL;
- return 0;
- }
-
- if ((val == LLONG_MIN) || (val < minval)) {
- if (errstr)
- *errstr = "too small";
- errno = ERANGE;
- return 0;
- }
- if ((val == LLONG_MAX) || (val > maxval)) {
- if (errstr)
- *errstr = "too large";
- errno = ERANGE;
- return 0;
- }
-
- /* Correct conversion. */
- if (errstr)
- *errstr = NULL;
- return val;
-}
-#endif /* !HAVE_STRTONUM */
-
/* vim:set ts=3 sw=3 tw=78 expandtab: */
size_t strlcat(char *dst, const char *src, size_t siz);
#endif
-#ifndef HAVE_STRTONUM
-long long strtonum(const char *nptr, long long min,
- long long max, const char **estr);
-#endif
-
/* vim:set ts=3 sw=3 tw=78 expandtab: */