FreeCalypso > hg > themwi-system-sw
changeset 19:40e5097437fa
libutil: add grok_imsi_user_arg()
author | Mychaela Falconia <falcon@freecalypso.org> |
---|---|
date | Sun, 26 Jun 2022 22:38:42 -0800 |
parents | 87c077b23996 |
children | b13acb024fc6 |
files | libutil/Makefile libutil/imsi_entry.c |
diffstat | 2 files changed, 55 insertions(+), 1 deletions(-) [+] |
line wrap: on
line diff
--- a/libutil/Makefile Sun Jun 26 18:28:08 2022 -0800 +++ b/libutil/Makefile Sun Jun 26 22:38:42 2022 -0800 @@ -1,6 +1,6 @@ CC= gcc CFLAGS= -O2 -OBJS= mncc_utils.o nanp_valid.o numstring.o sockinit.o +OBJS= imsi_entry.o 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/imsi_entry.c Sun Jun 26 22:38:42 2022 -0800 @@ -0,0 +1,54 @@ +/* + * The library function implemented in this module supports IMSI entry + * at UI level, either in the standard form (long string of digits) + * or in the shorthand notation introduced in fc-sim-tools. + */ + +#include <ctype.h> +#include <string.h> +#include <strings.h> + +grok_imsi_user_arg(arg, dest) + char *arg, *dest; +{ + char *cp, *dp; + int n, tail_len, remain; + + if (!isdigit(*arg)) + return(-1); + cp = arg; + dp = dest; + n = 0; + while (isdigit(*cp)) { + if (n >= 15) + return(-1); + *dp++ = *cp++; + n++; + } + if (!*cp) { + if (n < 6) + return(-1); + *dp = '\0'; + return(0); + } + if (*cp != '-') + return(-1); + cp++; + tail_len = strlen(cp); + if (!tail_len) + return(-1); + remain = 15 - n; + if (remain < tail_len + 1) + return(-1); + while (remain > tail_len) { + *dp++ = '0'; + remain--; + } + while (*cp) { + if (!isdigit(*cp)) + return(-1); + *dp++ = *cp++; + } + *dp = '\0'; + return(0); +}