diff -ur a/config.h.in b/config.h.in
--- a/config.h.in	1998-12-29 18:37:27.000000000 -0600
+++ b/config.h.in	2014-02-03 02:35:56.661205082 -0600
@@ -5,6 +5,7 @@
    We just want to avoid a redefinition error message.  */
 #ifndef _ALL_SOURCE
 #undef _ALL_SOURCE
+#define _GNU_SOURCE
 #endif
 
 /* Define if using alloca.c.  */
diff -ur a/lib/long-options.c b/lib/long-options.c
--- a/lib/long-options.c	1998-04-26 08:22:35.000000000 -0500
+++ b/lib/long-options.c	2014-02-03 02:27:39.026223584 -0600
@@ -21,6 +21,7 @@
 #include <config.h>
 #endif
 
+#include <stdlib.h>
 #include <stdio.h>
 #include <getopt.h>
 #include "long-options.h"
diff -ur a/src/lrz.c b/src/lrz.c
--- a/src/lrz.c	1998-12-30 01:49:24.000000000 -0600
+++ b/src/lrz.c	2014-02-03 02:29:23.548219698 -0600
@@ -2319,7 +2319,7 @@
 	if (*s == '!')
 		++s;
 	io_mode(0,0);
-	execl("/bin/sh", "sh", "-c", s);
+	execl("/bin/sh", "sh", "-c", s, (void *) 0);
 	zpfatal("execl");
 	exit(1);
 }
diff -ur a/src/lsyslog.c b/src/lsyslog.c
--- a/src/lsyslog.c	1998-12-29 11:27:46.000000000 -0600
+++ b/src/lsyslog.c	2014-02-03 02:34:56.532207317 -0600
@@ -23,6 +23,7 @@
 #include "zglobal.h"
 #include <pwd.h>
 #include <stdlib.h>
+#include <stdio.h>
 #include <string.h>
 #endif
 
diff -ur a/src/lsz.c b/src/lsz.c
--- a/src/lsz.c	1998-12-29 16:07:59.000000000 -0600
+++ b/src/lsz.c	2014-02-03 02:32:24.175212982 -0600
@@ -1997,7 +1997,7 @@
 		blklen = calc_blklen (total_sent);
 		total_sent += blklen + OVERHEAD;
 		if (Verbose > 2 && blklen != old)
-			vstringf (_("blklen now %d\n"), blklen);
+			vstringf (_("blklen now %zu\n"), blklen);
 #ifdef HAVE_MMAP
 		if (mm_addr) {
 			if (zi->bytes_sent + blklen < mm_size)
diff -ur a/src/tcp.c b/src/tcp.c
--- a/src/tcp.c	1998-12-28 04:41:38.000000000 -0600
+++ b/src/tcp.c	2014-02-03 02:34:12.837208942 -0600
@@ -56,7 +56,7 @@
 	struct sockaddr_in s;
 	struct sockaddr_in t;
 	int on=1;
-	size_t len;
+	socklen_t len;
 
 	if ((sock = socket (AF_INET, SOCK_STREAM, IPPROTO_TCP)) < 0) {
 		error(1,errno,"socket");
@@ -91,7 +91,7 @@
 {
 	int so;
 	struct  sockaddr_in s;
-	size_t namelen;
+	socklen_t namelen;
 	int num=0;
 
 	namelen = sizeof(s);
diff -ur a/src/zm.c b/src/zm.c
--- a/src/zm.c	1998-12-29 10:48:38.000000000 -0600
+++ b/src/zm.c	2014-02-03 02:31:51.737214188 -0600
@@ -451,7 +451,7 @@
 	int c;
 	unsigned long crc;
 	int i;
-	VPRINTF(3,("zsdat32: %d %s", length, Zendnames[(frameend-ZCRCE)&3]));
+	VPRINTF(3,("zsdat32: %zu %s", length, Zendnames[(frameend-ZCRCE)&3]));
 
 	crc = 0xFFFFFFFFL;
 	zsendline_s(buf,length);
diff -ur a/src/zreadline.c b/src/zreadline.c
--- a/src/zreadline.c	1998-12-23 17:57:32.000000000 -0600
+++ b/src/zreadline.c	2014-02-03 02:31:01.951216039 -0600
@@ -68,13 +68,13 @@
 		else if (n==0)
 			n=1;
 		if (Verbose > 5)
-			vstringf("Calling read: alarm=%d  Readnum=%d ",
+			vstringf("Calling read: alarm=%d  Readnum=%zu ",
 			  n, readline_readnum);
 		signal(SIGALRM, zreadline_alarm_handler); 
 		alarm(n);
 	}
 	else if (Verbose > 5)
-		vstringf("Calling read: Readnum=%d ",
+		vstringf("Calling read: Readnum=%zu ",
 		  readline_readnum);
 
 	readline_ptr=readline_buffer;