Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 29 Jul 2015 06:23:07 +0000 (UTC)
From:      Baptiste Daroussin <bapt@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org
Subject:   svn commit: r285997 - head/usr.sbin/pw
Message-ID:  <201507290623.t6T6N7lq073984@repo.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: bapt
Date: Wed Jul 29 06:23:06 2015
New Revision: 285997
URL: https://svnweb.freebsd.org/changeset/base/285997

Log:
  Actually add the new code

Added:
  head/usr.sbin/pw/strtounum.c   (contents, props changed)

Added: head/usr.sbin/pw/strtounum.c
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ head/usr.sbin/pw/strtounum.c	Wed Jul 29 06:23:06 2015	(r285997)
@@ -0,0 +1,73 @@
+/*-
+ * Copyright (C) Baptiste Daroussin <bapt@FreeBSD.org>
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY DAVID L. NUGENT AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED.  IN NO EVENT SHALL DAVID L. NUGENT OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+
+#include <sys/cdefs.h>
+__FBSDID("$FreeBSD$");
+
+#include <errno.h>
+#include <inttypes.h>
+#include <limits.h>
+#include <stdlib.h>
+
+#include "pw.h"
+
+#define INVALID		"invalid"
+#define TOOSMALL	"too small"
+#define	TOOLARGE	"too large"
+
+uintmax_t
+strtounum(const char *numstr, uintmax_t minval, uintmax_t maxval,
+    const char **errstrp)
+{
+	uintmax_t ret = 0;
+	char *ep;
+
+	if (minval > maxval) {
+		errno = EINVAL;
+		if (errstrp != NULL)
+			*errstrp = INVALID;
+		return (0);
+	}
+
+	ret = strtoumax(numstr, &ep, 10);
+	if (errno == EINVAL || numstr == ep || *ep != '\0') {
+		errno = EINVAL;
+		if (errstrp != NULL)
+			*errstrp = INVALID;
+		return (0);
+	} else if ((ret == 0 && errno == ERANGE) || ret < minval) {
+		errno = ERANGE;
+		if (errstrp != NULL)
+			*errstrp = TOOSMALL;
+		return (0);
+	} else if ((ret == UINTMAX_MAX && errno == ERANGE) || ret > maxval) {
+		errno = ERANGE;
+		if (errstrp != NULL)
+			*errstrp = TOOLARGE;
+		return (0);
+	}
+
+	return (ret);
+}



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201507290623.t6T6N7lq073984>