From owner-p4-projects@FreeBSD.ORG Mon Jul 16 01:28:21 2007 Return-Path: X-Original-To: p4-projects@freebsd.org Delivered-To: p4-projects@freebsd.org Received: by hub.freebsd.org (Postfix, from userid 32767) id 3865416A407; Mon, 16 Jul 2007 01:28:21 +0000 (UTC) X-Original-To: perforce@FreeBSD.org Delivered-To: perforce@FreeBSD.org Received: from mx1.freebsd.org (mx1.freebsd.org [69.147.83.52]) by hub.freebsd.org (Postfix) with ESMTP id EA8FD16A400 for ; Mon, 16 Jul 2007 01:28:20 +0000 (UTC) (envelope-from fli@FreeBSD.org) Received: from repoman.freebsd.org (repoman.freebsd.org [69.147.83.41]) by mx1.freebsd.org (Postfix) with ESMTP id DA12A13C4BB for ; Mon, 16 Jul 2007 01:28:20 +0000 (UTC) (envelope-from fli@FreeBSD.org) Received: from repoman.freebsd.org (localhost [127.0.0.1]) by repoman.freebsd.org (8.14.1/8.14.1) with ESMTP id l6G1SKmS091414 for ; Mon, 16 Jul 2007 01:28:20 GMT (envelope-from fli@FreeBSD.org) Received: (from perforce@localhost) by repoman.freebsd.org (8.14.1/8.14.1/Submit) id l6G1SKkA091411 for perforce@freebsd.org; Mon, 16 Jul 2007 01:28:20 GMT (envelope-from fli@FreeBSD.org) Date: Mon, 16 Jul 2007 01:28:20 GMT Message-Id: <200707160128.l6G1SKkA091411@repoman.freebsd.org> X-Authentication-Warning: repoman.freebsd.org: perforce set sender to fli@FreeBSD.org using -f From: Fredrik Lindberg To: Perforce Change Reviews Cc: Subject: PERFORCE change 123572 for review X-BeenThere: p4-projects@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: p4 projects tree changes List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 16 Jul 2007 01:28:21 -0000 http://perforce.freebsd.org/chv.cgi?CH=123572 Change 123572 by fli@fli_nexus on 2007/07/16 01:27:33 - Fix encoding of IPv6 addresses - Style fixes (long lines). Affected files ... .. //depot/projects/soc2007/fli-mdns_sd/mdnsd/stack_util.c#3 edit Differences ... ==== //depot/projects/soc2007/fli-mdns_sd/mdnsd/stack_util.c#3 (text+ko) ==== @@ -30,6 +30,7 @@ #include #include +#include #include #include #include @@ -127,6 +128,7 @@ else { if (flags & MDNS_ENC_WCHAR) { wcstombs(addr, data, INET6_ADDRSTRLEN+1); + p = addr; } r = malloc(16); /* ipv6 address */ inet_pton(AF_INET6, p, r); @@ -150,6 +152,49 @@ return (found); } +/* Create a ip6.arpa ptr record */ +static char * +ip6ptr(char *p) +{ + char *q, *s, *r; + int cnt, cols; + + cols = stroc(p, ':'); + if (cols < 2) + return (NULL); + + /* + * 74 bytes is enough to hold a ip6.arpa domain pointer + * including terminating '\0'. + */ + r = s = malloc(74); + q = p + strlen(p) - 1; + cnt = 0; + while (q >= p) { + if (s - r == 64) + break; + *s++ = *q--; + *s++ = '.'; + cnt++; + if (*q == ':') { + for (; cnt < 4; cnt++) { + *s++ = '0'; *s++ = '.'; + } + if (q != p && *(q - 1) == ':') { + while (cols++ <= 7) { + for (cnt = 0; cnt < 4; cnt++) { + *s++ = '0'; *s++ = '.'; + } + } + q--; + } + cnt = 0; + q--; + } + } + strcpy(s, "ip6.arpa."); + return (r); +} /* * (IN, PTR) resource data encoder @@ -194,48 +239,13 @@ q = strdup(p); for (i = 0; i < 4; i++) parts[i] = strsep(&p, "."); - asprintf(&r, "%s.%s.%s.%s.in-addr.arpa.", parts[3], parts[2], - parts[1], parts[0]); + asprintf(&r, "%s.%s.%s.%s.in-addr.arpa.", + parts[3], parts[2], parts[1], parts[0]); free(q); } #ifdef INET6 else if (flags & MDNS_ENC_INET6) { - char *q, *s; - int cnt, cols; - - cols = stroc(p, ':'); - if (cols < 2) - return (NULL); - /* - * 74 bytes is enough to hold a ip6.arpa domain pointer - * including terminating '\0'. - */ - r = s = malloc(74); - q = p + strlen(p) - 1; - cnt = 0; - while (q >= p) { - if (s - r == 64) - break; - *s++ = *q--; - *s++ = '.'; - cnt++; - if (*q == ':') { - for (; cnt < 4; cnt++) { - *s++ = '0'; *s++ = '.'; - } - if (q != p && *(q - 1) == ':') { - while (cols++ <= 7) { - for (cnt = 0; cnt < 4; cnt++) { - *s++ = '0'; *s++ = '.'; - } - } - q--; - } - cnt = 0; - q--; - } - } - strcpy(s, "ip6.arpa."); + r = ip6ptr(p); } #endif } @@ -310,7 +320,8 @@ for (i = 0; i < res_enc_table_size; i++) { if (res_enc_table[i].em_type == type) { - res = res_enc_table[i].em_encoder(data, flags, dlen, rlen); + res = res_enc_table[i].em_encoder(data, flags, dlen, + rlen); break; } }