FreeCalypso > hg > themwi-system-sw
diff libutil/imsi_entry.c @ 19:40e5097437fa
libutil: add grok_imsi_user_arg()
author | Mychaela Falconia <falcon@freecalypso.org> |
---|---|
date | Sun, 26 Jun 2022 22:38:42 -0800 |
parents | |
children |
line wrap: on
line diff
--- /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); +}