PERFORCE change 123572 for review

Fredrik Lindberg fli at FreeBSD.org
Mon Jul 16 01:28:21 UTC 2007


http://perforce.freebsd.org/chv.cgi?CH=123572

Change 123572 by fli at 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 <netinet/in.h>
 #include <arpa/inet.h>
 
+#include <errno.h>
 #include <stdio.h>
 #include <stdlib.h>
 #include <string.h>
@@ -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;
 		}
 	}


More information about the p4-projects mailing list