view smsc-sendmt/imsi_entry.c @ 22:7bfe3e21eaae default tip

top Makefile: add ctrl-client
author Mychaela Falconia <falcon@freecalypso.org>
date Sun, 17 Dec 2023 08:53:35 +0000
parents 7543aa173634
children
line wrap: on
line source

/*
 * 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>

int grok_imsi_user_arg(const char *arg, char *dest)
{
	const char *cp;
	char *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);
}