while (s < endp && (*s++ = *s2++))
;
+ if (s == endp)
+ *s = '\0';
return s1;
}
*pbits = bits;
return pos;
case '.':
+ if (++dots > 3)
+ return 0;
if (input[++pos] == '.')
return 0;
- ip |= part << (24 - 8 * dots++);
+ ip |= part << (32 - 8 * dots);
part = 0;
if (input[pos] == '*') {
- while (input[++pos] == '*') ;
+ while (input[++pos] == '*' || input[pos] == '.') ;
if (input[pos] != '\0')
return 0;
if (pbits)
*pbits = part;
goto finish;
case '*':
- while (input[++pos] == '*') ;
+ while (input[++pos] == '*' || input[pos] == ':') ;
if (input[pos] != '\0' || colon < 8)
return 0;
if (pbits)
ip->in6_16[colon + jj] = 0;
}
return pos;
- } else if (dot) {
+ } else if (dot || strchr(input, '/')) {
unsigned int addr;
int len = ircd_aton_ip4(input, &addr, pbits);
if (len) {