#include "ipv4.h"
static unsigned char parse_part(const char* str, const char** end)
{
unsigned char i = 0;
if (*str < '0' || *str > '9')
*end = 0;
else {
do {
unsigned char newi;
newi = i * 10 + *str - '0';
if (newi < i || newi > 255) { *end = 0; return 0; }
++str;
i = newi;
} while (*str >= '0' && *str <= '9');
*end = str;
}
return i;
}
int ipv4_parse(const char* str, ipv4addr addr, const char** end)
{
addr[0] = parse_part(str, end); if (*end == str) return 0;
if (**end != '.' && addr[0] == 0) {
addr[1] = addr[2] = addr[3] = 0;
return 1;
}
str = *end + 1; addr[1] = parse_part(str, end);
if (*end == str || **end != '.') return 0;
str = *end + 1; addr[2] = parse_part(str, end);
if (*end == str || **end != '.') return 0;
str = *end + 1; addr[3] = parse_part(str, end);
if (*end == str) return 0;
return 1;
}
syntax highlighted by Code2HTML, v. 0.9.1