diff options
Diffstat (limited to 'inany.c')
| -rw-r--r-- | inany.c | 50 |
1 files changed, 0 insertions, 50 deletions
@@ -70,53 +70,3 @@ const char *inany_ntop(const union inany_addr *src, char *dst, socklen_t size) return inet_ntop(AF_INET6, &src->a6, dst, size); } - -/** - * inany_prefix_pton() - Parse an IPv[46] address with prefix length - * @src: IPv[46] address and prefix length string in CIDR format - * @dst: Output buffer, filled with parsed address - * @prefix_len: Prefix length, to be filled in IPv6 format - * - * Return: 1 on success, 0 if no parseable address or prefix is found - */ -int inany_prefix_pton(const char *src, union inany_addr *dst, - uint8_t *prefix_len) -{ - char astr[INANY_ADDRSTRLEN] = { 0 }; - size_t alen = strcspn(src, "/"); - const char *pstr = &src[alen + 1]; - const char *p = astr; - unsigned long plen; - char *end; - - if (alen >= INANY_ADDRSTRLEN) - return 0; - - if (src[alen] != '/') - return 0; - - strncpy(astr, src, alen); - - /* Read prefix length */ - errno = 0; - plen = strtoul(pstr, &end, 10); - if (errno || *end || plen > 128) - return 0; - - /* Read address */ - if (inet_pton(AF_INET6, astr, dst)) { - if (inany_v4(dst) && plen < 96) - return 0; - *prefix_len = plen; - return 1; - } - - if (parse_inany(&p, dst) && parse_eoi(p)) { - if (plen > 32) - return 0; - *prefix_len = plen + 96; - return 1; - } - - return 0; -} |
