Beispiel #1
0
static CHAR8 *str2ip6(CHAR8 *str)
{
        UINT8 i, j, p;
	size_t len;
        CHAR8 *a, *b, t;
        static UINT16 ip[8];

        for(i=0; i < 8; i++) {
                ip[i] = 0;
        }
        len = strlen(str);
        a = b = str;
        for(i=p=0; i < len; i++, b++) {
                if (*b != ':')
                        continue;
                *b = '\0';
                ip[p++] = str2ns(a);
                *b = ':';
                a = b + 1;
                if ( *(b+1) == ':' )
                        break;
        }
        a = b = (str + len);
        for(j=len, p=7; j > i; j--, a--) {
                if (*a != ':')
                        continue;
                t = *b;
                *b = '\0';
                ip[p--] = str2ns(a+1);
                *b = t;
                b = a;
        }
        return (CHAR8 *)ip;
}
Beispiel #2
0
static CHAR8 *str2ip6(CHAR8 *str)
{
	UINT8 i = 0, j = 0, p = 0;
	size_t len = 0, dotcount = 0;
	enum { MAX_IP6_DOTS = 7 };
	CHAR8 *a = NULL, *b = NULL, t = 0;
	static UINT16 ip[8];

	memset(ip, 0, sizeof(ip));

	/* Count amount of ':' to prevent overflows.
	 * max. count = 7. Returns an invalid ip6 that
	 * can be checked against
	 */
	for (a = str; *a != 0; ++a) {
		if (*a == ':')
			++dotcount;
	}
	if (dotcount > MAX_IP6_DOTS)
		return (CHAR8 *)ip;

	len = strlen(str);
	a = b = str;
	for (i = p = 0; i < len; i++, b++) {
		if (*b != ':')
			continue;
		*b = '\0';
		ip[p++] = str2ns(a);
		*b = ':';
		a = b + 1;
		if (b[1] == ':' )
			break;
	}
	a = b = (str + len);
	for (j = len, p = 7; j > i; j--, a--) {
		if (*a != ':')
			continue;
		t = *b;
		*b = '\0';
		ip[p--] = str2ns(a+1);
		*b = t;
		b = a;
	}
	return (CHAR8 *)ip;
}