diff -Naur iputils-s20100418.orig/Makefile iputils-s20100418/Makefile
--- iputils-s20100418.orig/Makefile	2010-04-18 00:45:45.000000000 -0400
+++ iputils-s20100418/Makefile	2010-08-04 19:52:08.438080809 -0400
@@ -16,7 +16,7 @@
 CCOPT=-D_GNU_SOURCE -O2 -Wstrict-prototypes -Wall -g
 CFLAGS=$(CCOPT) $(GLIBCFIX) $(DEFINES) 
 
-IPV4_TARGETS=tracepath ping clockdiff rdisc arping tftpd rarpd
+IPV4_TARGETS=tracepath ping arping clockdiff
 IPV6_TARGETS=tracepath6 traceroute6 ping6
 TARGETS=$(IPV4_TARGETS) $(IPV6_TARGETS)
 
diff -Naur iputils-s20100418.orig/arping.c iputils-s20100418/arping.c
--- iputils-s20100418.orig/arping.c	2010-04-18 00:45:45.000000000 -0400
+++ iputils-s20100418/arping.c	2010-08-04 19:52:08.441575956 -0400
@@ -182,12 +182,17 @@
 	if (start.tv_sec==0)
 		start = tv;
 
-	if (count-- == 0 || (timeout && MS_TDIFF(tv,start) > timeout*1000 + 500))
+	if (timeout && MS_TDIFF(tv,start) > timeout*1000 + 500)
 		finish();
 
-	if (last.tv_sec==0 || MS_TDIFF(tv,last) > 500) {
+	if ((!timeout) && (count == 0))
+		finish();
+
+	if ( count!=0  && (last.tv_sec==0 || MS_TDIFF(tv,last) > 500 ) ) {
 		send_pack(s, src, dst,
 			  (struct sockaddr_ll *)&me, (struct sockaddr_ll *)&he);
+		if (count >= 0)
+		    count--;
 		if (count == 0 && unsolicited)
 			finish();
 	}
diff -Naur iputils-s20100418.orig/doc/Makefile iputils-s20100418/doc/Makefile
--- iputils-s20100418.orig/doc/Makefile	2010-04-18 00:45:45.000000000 -0400
+++ iputils-s20100418/doc/Makefile	2010-08-04 19:52:08.441575956 -0400
@@ -6,7 +6,7 @@
 
 html: $(HTMLFILES) iputils.html
 
-man: $(MANFILES)
+man: $(MANFILES) fix_sgml2man
 
 # docbook scripts are incredibly dirty in the sense that they leak
 # lots of some strange temporary junk directories and files.
@@ -33,6 +33,9 @@
 	@set -e; cd tmp.db2man; nsgmls ../$< | sgmlspl ../docbook2man-spec.pl ;	mv $@ ..
 	@-rm -rf tmp.db2man
 
+fix_sgml2man:
+	@sed -i -e 's!\\fB\\fIdestination\\fB\\fR \[\\fB/\\fIport\\fB\\fR\]!\\fB\\fIdestination\\fB\\fR[\\fB/\\fIport\\fB\\fR]!g' tracepath.8
+
 clean:
 	@rm -rf $(MANFILES) $(HTMLFILES) iputils.html tmp.db2html tmp.db2man
 
diff -Naur iputils-s20100418.orig/doc/docbook2man-spec.pl iputils-s20100418/doc/docbook2man-spec.pl
--- iputils-s20100418.orig/doc/docbook2man-spec.pl	2010-04-18 00:45:45.000000000 -0400
+++ iputils-s20100418/doc/docbook2man-spec.pl	2010-08-04 19:52:08.438080809 -0400
@@ -428,7 +428,7 @@
 	output ' ';
 
 	if($_[0]->attribute('CHOICE')->value =~ /opt/i) {
-		output '[ ';
+		output '[';
 	}
 	bold_on();
 }
@@ -441,7 +441,7 @@
 		font_off();
 	}
 	if($_[0]->attribute('CHOICE')->value =~ /opt/i) {
-		output '] ';
+		output ']';
 	}
 }
 
diff -Naur iputils-s20100418.orig/ping.c iputils-s20100418/ping.c
--- iputils-s20100418.orig/ping.c	2010-04-18 00:45:45.000000000 -0400
+++ iputils-s20100418/ping.c	2010-08-04 19:52:08.441575956 -0400
@@ -250,7 +250,7 @@
 			if (argc == 1)
 				options |= F_NUMERIC;
 		} else {
-			hp = gethostbyname(target);
+			hp = gethostbyname2(target, AF_INET);
 			if (!hp) {
 				fprintf(stderr, "ping: unknown host %s\n", target);
 				exit(2);
@@ -883,9 +883,36 @@
 		case ICMP_SR_FAILED:
 			printf("Source Route Failed\n");
 			break;
+		case ICMP_NET_UNKNOWN:
+			printf("Destination Net Unknown\n");
+			break;
+		case ICMP_HOST_UNKNOWN:
+			printf("Destination Host Unknown\n");
+			break;
+		case ICMP_HOST_ISOLATED:
+			printf("Source Host Isolated\n");
+			break;
+		case ICMP_NET_ANO:
+			printf("Destination Net Prohibited\n");
+			break;
+		case ICMP_HOST_ANO:
+			printf("Destination Host Prohibited\n");
+			break;
+		case ICMP_NET_UNR_TOS:
+			printf("Destination Net Unreachable for Type of Service\n");
+			break;
+		case ICMP_HOST_UNR_TOS:
+			printf("Destination Host Unreachable for Type of Service\n");
+			break;
 		case ICMP_PKT_FILTERED:
 			printf("Packet filtered\n");
 			break;
+		case ICMP_PREC_VIOLATION:
+			printf("Precedence Violation\n");
+			break;
+		case ICMP_PREC_CUTOFF:
+			printf("Precedence Cutoff\n");
+			break;
 		default:
 			printf("Dest Unreachable, Bad Code: %d\n", code);
 			break;
@@ -1032,7 +1059,7 @@
 				i = j;
 			i -= IPOPT_MINOFF;
 			if (i <= 0)
-				continue;
+				break;
 			if (i == old_rrlen
 			    && !strncmp((char *)cp, old_rr, i)
 			    && !(options & F_FLOOD)) {
@@ -1069,7 +1096,7 @@
 				i = j;
 			i -= 5;
 			if (i <= 0)
-				continue;
+				break;
 			flags = *++cp;
 			printf("\nTS: ");
 			cp++;
diff -Naur iputils-s20100418.orig/ping_common.c iputils-s20100418/ping_common.c
--- iputils-s20100418.orig/ping_common.c	2010-04-18 00:45:45.000000000 -0400
+++ iputils-s20100418/ping_common.c	2010-08-04 19:52:08.433579291 -0400
@@ -872,7 +872,8 @@
 		printf("%spipe %d", comma, pipesize);
 		comma = ", ";
 	}
-	if (ntransmitted > 1 && (!interval || (options&(F_FLOOD|F_ADAPTIVE)))) {
+	if (ntransmitted > 1 && nreceived &&
+		(!interval || (options&(F_FLOOD|F_ADAPTIVE)))) {
 		int ipg = (1000000*(long long)tv.tv_sec+tv.tv_usec)/(ntransmitted-1);
 		printf("%sipg/ewma %d.%03d/%d.%03d ms",
 		       comma, ipg/1000, ipg%1000, rtt/8000, (rtt/8)%1000);
diff -Naur iputils-s20100418.orig/tracepath.c iputils-s20100418/tracepath.c
--- iputils-s20100418.orig/tracepath.c	2010-04-18 00:45:45.000000000 -0400
+++ iputils-s20100418/tracepath.c	2010-08-04 19:52:08.438080809 -0400
@@ -338,9 +338,9 @@
 		base_port = atoi(p+1);
 	} else
 		base_port = 44444;
-	he = gethostbyname(argv[0]);
+	he = gethostbyname2(argv[0], AF_INET);
 	if (he == NULL) {
-		herror("gethostbyname");
+		herror("gethostbyname2");
 		exit(1);
 	}
 	memcpy(&target.sin_addr, he->h_addr, 4);
