diff -urN busybox-1.8.0/sysklogd/syslogd.c busybox-1.8.0-syslogd/sysklogd/syslogd.c
--- busybox-1.8.0/sysklogd/syslogd.c	2007-11-04 06:03:17.000000000 +0000
+++ busybox-1.8.0-syslogd/sysklogd/syslogd.c	2007-11-06 11:25:01.000000000 +0000
@@ -381,8 +381,8 @@
 }
 
 /* len parameter is used only for "is there a timestamp?" check.
- * NB: some callers cheat and supply 0 when they know
- * that there is no timestamp, short-cutting the test. */
+ * NB: some callers cheat and supply len==0 when they know
+ * that there is no timestamp, short-circuiting the test. */
 static void timestamp_and_log(int pri, char *msg, int len)
 {
 	char *timestamp;
@@ -427,10 +427,10 @@
 		if (*p == '<') {
 			/* Parse the magic priority number */
 			pri = bb_strtou(p + 1, &p, 10);
-			if (*p == '>') p++;
-			if (pri & ~(LOG_FACMASK | LOG_PRIMASK)) {
+			if (*p == '>')
+				p++;
+			if (pri & ~(LOG_FACMASK | LOG_PRIMASK))
 				pri = (LOG_USER | LOG_NOTICE);
-			}
 		}
 
 		while ((c = *p++)) {
@@ -526,14 +526,32 @@
 
 	for (;;) {
 		size_t sz;
-
+ read_again:
 		sz = safe_read(sock_fd, G.recvbuf, MAX_READ - 1);
-		if (sz <= 0) {
-			//if (sz == 0)
-			//	continue; /* EOF from unix socket??? */
+		if (sz < 0) {
 			bb_perror_msg_and_die("read from /dev/log");
 		}
 
+		/* Drop trailing NULs (typically there is one NUL) */
+		while (1) {
+			if (sz == 0)
+				goto read_again;
+			/* man 3 syslog says: "A trailing newline is added when needed".
+			 * However, neither glibc nor uclibc do this:
+			 * syslog(prio, "test")   sends "test\0" to /dev/log,
+			 * syslog(prio, "test\n") sends "test\n\0",
+			 * IOW: newline is passed verbatim!
+			 * I take it to mean that it's syslogd's job
+			 * to make those look identical in the log files */
+			if (G.recvbuf[sz-1] && G.recvbuf[sz-1] != '\n')
+				break;
+			sz--;
+		}
+		/* Maybe we need to add '\n' here, not later?
+		 * It looks like stock syslogd does send '\n' over network,
+		 * but we do not (see sendto below) */
+		G.recvbuf[sz] = '\0'; /* make sure it *is* NUL terminated */
+
 		/* TODO: maybe suppress duplicates? */
 #if ENABLE_FEATURE_REMOTE_LOG
 		/* We are not modifying log messages in any way before send */
@@ -549,7 +567,6 @@
 			}
 		}
 #endif
-		G.recvbuf[sz] = '\0';
 		split_escape_and_log(G.recvbuf, sz);
 	} /* for */
 }
