+ if (*replace == '/')
+ *replace = ' ';
+ }
+ prefixlen = -1;
+
+ start = line;
+ while (('\0' != *start) && (isspace (*start)))
+ start++;
+
+ /* Zero-out stack allocated values */
+ memset (addrstr, 0, 128);
+ memset (netmaskstr, 0, 128);
+ memset (bcstr, 0, 128);
+ prefixlen = 0;
+
+ if ( /* Linux */
+ (3 == SSCANF (start, "inet addr:%127s Bcast:%127s Mask:%127s", addrstr, bcstr, netmaskstr)) ||
+ (2 == SSCANF (start, "inet addr:%127s Mask:%127s", addrstr, netmaskstr)) ||
+ (2 == SSCANF (start, "inet6 addr:%127s %d", addrstr, &prefixlen)) ||
+ /* Solaris, OS X */
+ (1 == SSCANF (start, "inet %127s", addrstr)) ||
+ (1 == SSCANF (start, "inet6 %127s", addrstr)))
+ {
+ /* IPv4 */
+ if (1 == inet_pton (AF_INET, addrstr, &v4))
+ {
+ memset (&a4, 0, sizeof (a4));
+ a4.sin_family = AF_INET;
+#if HAVE_SOCKADDR_IN_SIN_LEN
+ a4.sin_len = (u_char) sizeof (struct sockaddr_in);
+#endif
+ a4.sin_addr = v4;
+
+ pass_bcaddr = NULL;
+ pass_netmask = NULL;
+ if (1 == inet_pton (AF_INET, bcstr, &v4))