diff --git a/src/backend/utils/adt/inet.c b/src/backend/utils/adt/inet.c
index 23b9158c4b312bd03c1c698ad3eedd6b8435cf9a..969e5f1ee771a0cd3aefa6c6f4660ba77ba2f84e 100644
--- a/src/backend/utils/adt/inet.c
+++ b/src/backend/utils/adt/inet.c
@@ -3,7 +3,7 @@
  *	is for IP V4 CIDR notation, but prepared for V6: just
  *	add the necessary bits where the comments indicate.
  *
- *	$Id: inet.c,v 1.3 1998/10/12 04:07:46 momjian Exp $
+ *	$Id: inet.c,v 1.4 1998/10/17 03:59:13 momjian Exp $
  */
 
 #include <sys/types.h>
@@ -57,9 +57,7 @@ inet_in(char *src)
 	}
 	/* First, try for an IP V4 address: */
 	ip_family(dst) = AF_INET;
-#ifdef BAD
 	bits = inet_net_pton(ip_family(dst), src, &ip_v4addr(dst), ip_addrsize(dst), NULL);
-#endif
 	if ((bits < 0) || (bits > 32))
 	{
 		/* Go for an IPV6 address here, before faulting out: */
@@ -86,7 +84,6 @@ inet_out(inet *src)
 
 	if (ip_family(src) == AF_INET)
 	{
-#ifdef BAD
 		/* It's an IP V4 address: */
 		if (inet_net_ntop(AF_INET, &ip_v4addr(src), 4, ip_bits(src),
 						  tmp, sizeof(tmp)) < 0)
@@ -94,7 +91,6 @@ inet_out(inet *src)
 			elog(ERROR, "unable to print address (%s)", strerror(errno));
 			return (NULL);
 		}
-#endif
 	}
 	else
 	{
diff --git a/src/backend/utils/adt/inet_net_pton.c b/src/backend/utils/adt/inet_net_pton.c
index 92a3de8885c383a215892deea58eb8f25d6abeda..af34a15e5980b7ec2d46cd4ddc4a71005ee17fe5 100644
--- a/src/backend/utils/adt/inet_net_pton.c
+++ b/src/backend/utils/adt/inet_net_pton.c
@@ -16,7 +16,7 @@
  */
 
 #if defined(LIBC_SCCS) && !defined(lint)
-static const char rcsid[] = "$Id: inet_net_pton.c,v 1.4 1998/10/12 15:56:34 momjian Exp $";
+static const char rcsid[] = "$Id: inet_net_pton.c,v 1.5 1998/10/17 03:59:14 momjian Exp $";
 
 #endif
 
@@ -100,34 +100,32 @@ inet_net_pton_ipv4(const char *src, u_char *dst, size_t size)
 
 	ch = *src++;
 	if (ch == '0' && (src[0] == 'x' || src[0] == 'X')
-		&& isascii(src[1]) && isxdigit(src[1]))
-	{
+	    && isascii(src[1]) && isxdigit(src[1])) {
 		/* Hexadecimal: Eat nybble string. */
 		if (size <= 0)
 			goto emsgsize;
-		tmp = 0;
 		dirty = 0;
-		src++;					/* skip x or X. */
-		while ((ch = *src++) != '\0' &&
-			   isascii(ch) && isxdigit(ch))
-		{
+		src++;	/* skip x or X. */
+		while ((ch = *src++) != '\0' && isascii(ch) && isxdigit(ch)) {
 			if (isupper(ch))
 				ch = tolower(ch);
 			n = strchr(xdigits, ch) - xdigits;
 			assert(n >= 0 && n <= 15);
-			tmp = (tmp << 4) | n;
+			if (dirty == 0)
+				tmp = n;
+			else
+				tmp = (tmp << 4) | n;
 			if (++dirty == 2) {
 				if (size-- <= 0)
 					goto emsgsize;
 				*dst++ = (u_char) tmp;
-				tmp = 0, dirty = 0;
+				dirty = 0;
 			}
 		}
-		if (dirty) {
+		if (dirty) {  /* Odd trailing nybble? */
 			if (size-- <= 0)
 				goto emsgsize;
-			tmp <<= 4;
-			*dst++ = (u_char) tmp;
+			*dst++ = (u_char) (tmp << 4);
 		}
 	}
 	else if (isascii(ch) && isdigit(ch))