FreeCalypso > hg > themwi-system-sw
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'; +}