Use strtol instead of strtonum.
authorEmil Mikulic <emikulic@gmail.com>
Thu, 9 Jun 2011 12:21:10 +0000 (22:21 +1000)
committerEmil Mikulic <emikulic@gmail.com>
Thu, 9 Jun 2011 12:21:10 +0000 (22:21 +1000)
acct.c
configure.ac
conv.c
conv.h

diff --git a/acct.c b/acct.c
index 3d98047..7c2808b 100644 (file)
--- a/acct.c
+++ b/acct.c
@@ -81,14 +81,18 @@ acct_init_localnet(const char *spec)
          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.  */
index c41baa6..ce7e3e5 100644 (file)
@@ -286,10 +286,6 @@ AC_SEARCH_LIBS(strlcat, [bsd],
  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
diff --git a/conv.c b/conv.c
index 884d8fd..9512643 100644 (file)
--- a/conv.c
+++ b/conv.c
@@ -453,55 +453,4 @@ strlcat(char * restrict dst, const char * restrict src, const size_t siz)
 }
 #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: */
diff --git a/conv.h b/conv.h
index 6d9d1b2..c505f22 100644 (file)
--- a/conv.h
+++ b/conv.h
@@ -31,9 +31,4 @@ size_t strlcpy(char *dst, const char *src, size_t siz);
 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: */