changeset 3:d712d518059e

libutil: add functions for number string parsing/preening
author Mychaela Falconia <falcon@freecalypso.org>
date Sun, 26 Jun 2022 09:50:39 -0800
parents b1c364729a93
children 4ad5deafaa87
files libutil/Makefile libutil/numstring.c
diffstat 2 files changed, 51 insertions(+), 1 deletions(-) [+]
line wrap: on
line diff
--- a/libutil/Makefile	Sat Jun 25 18:58:00 2022 -0800
+++ b/libutil/Makefile	Sun Jun 26 09:50:39 2022 -0800
@@ -1,6 +1,6 @@
 CC=	gcc
 CFLAGS=	-O2
-OBJS=	mncc_utils.o nanp_valid.o sockinit.o
+OBJS=	mncc_utils.o nanp_valid.o numstring.o sockinit.o
 LIB=	libutil.a
 
 all:	${LIB}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/libutil/numstring.c	Sun Jun 26 09:50:39 2022 -0800
@@ -0,0 +1,50 @@
+/*
+ * Utility functions for number string initial parsing or preening.
+ * grok_number_string() checks whether or not a user-supplied string
+ * argument is fully numeric (with possibility of allowing hyphens),
+ * and returns the number of digits.  dehyphen_number_string() copies
+ * a possibly-hyphenated number string to a new buffer with all hyphens
+ * taken out.
+ */
+
+#include <ctype.h>
+
+grok_number_string(str, allow_hyphen)
+	char *str;
+{
+	char *cp;
+	int c, n, last_hyphen;
+
+	n = 0;
+	last_hyphen = 0;
+	for (cp = str; *cp; ) {
+		c = *cp++;
+		if (isdigit(c)) {
+			n++;
+			last_hyphen = 0;
+		} else if (c == '-') {
+			if (!allow_hyphen || !n || last_hyphen)
+				return(-1);
+			last_hyphen = 1;
+		} else
+			return(-1);
+	}
+	if (last_hyphen)
+		return(-1);
+	return n;
+}
+
+dehyphen_number_string(src, dest)
+	char *src, *dest;
+{
+	char *cp, *dp;
+	int c;
+
+	dp = dest;
+	for (cp = src; *cp; ) {
+		c = *cp++;
+		if (isdigit(c))
+			*dp++ = c;
+	}
+	*dp = '\0';
+}