fix unsigned arithmetic bug in previous change
diff --git a/ChangeLog b/ChangeLog
index 55ec542..cd0c9e2 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,8 @@
+2002-05-24  John Hughes <john@calva.com>
+
+	* stream.h, net.h: Avoid possible infinite loop caused by
+	unsigned arithmetic in preceeding change.
+
 2002-05-23  John Hughes <john@calva.com>
 
 	* acconfig.h: Add HAVE_OPTHDR and HAVE_T_OPTHDR defines.
diff --git a/net.c b/net.c
index 3465980..5ab0d67 100644
--- a/net.c
+++ b/net.c
@@ -1436,7 +1436,7 @@
 	int c = 0;
 	struct opthdr hdr;
 
-	while (len >= sizeof hdr) {
+	while (len >= (int) sizeof hdr) {
 		if (umove(tcp, addr, &hdr) < 0) break;
 		if (c++) {
 			tprintf (", ");
@@ -1448,8 +1448,10 @@
 		addr += sizeof hdr;
 		len -= sizeof hdr;
 		printsockopt (tcp, hdr.level, hdr.name, addr, hdr.len);
-		addr += hdr.len;
-		len -= hdr.len;
+		if (hdr.len > 0) {
+			addr += hdr.len;
+			len -= hdr.len;
+		}
 		tprintf ("}");
 	}
 	if (len > 0) {
diff --git a/stream.c b/stream.c
index a8ea11e..42bfcc8 100644
--- a/stream.c
+++ b/stream.c
@@ -505,7 +505,7 @@
 	int c = 0;
 	struct t_opthdr hdr;
 
-	while (len >= sizeof hdr) {
+	while (len >= (int) sizeof hdr) {
 		if (umove(tcp, addr, &hdr) < 0) break;
 		if (c++) {
 			tprintf (", ");