# HG changeset patch # User Mychaela Falconia # Date 1656265839 28800 # Node ID d712d518059ed3498b5058045b184db283779de9 # Parent b1c364729a93da726a1bc490530662aa7b916278 libutil: add functions for number string parsing/preening diff -r b1c364729a93 -r d712d518059e libutil/Makefile --- 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} diff -r b1c364729a93 -r d712d518059e libutil/numstring.c --- /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 + +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'; +}