Implement optional syslog logging using ordinary
bb_xx_msg calls, and convert networking/* to it.
The rest of bbox will be converted gradually.

diff --git a/networking/zcip.c b/networking/zcip.c
index 3a08382..5d2a5f7 100644
--- a/networking/zcip.c
+++ b/networking/zcip.c
@@ -124,10 +124,7 @@
 
 	// send it
 	if (sendto(fd, &p, sizeof (p), 0, saddr, sizeof (*saddr)) < 0) {
-		if (FOREGROUND)
-			perror("sendto");
-		else
-			syslog(LOG_ERR, "sendto: %s", strerror(errno));
+		bb_perror_msg("sendto");
 		//return -errno;
 	}
 	// Currently all callers ignore errors, that's why returns are
@@ -148,8 +145,7 @@
 		if (ip != NULL) {
 			char *addr = inet_ntoa(*ip);
 			setenv("ip", addr, 1);
-			if (!FOREGROUND)
-				syslog(LOG_INFO, "%s %s %s", arg, intf, addr);
+			bb_info_msg("%s %s %s", arg, intf, addr);
 		}
 
 		pid = vfork();
@@ -158,10 +154,7 @@
 			goto bad;
 		} else if (pid == 0) {		// child
 			execl(script, script, arg, NULL);
-			if (FOREGROUND)
-				perror("execl");
-			else
-				syslog(LOG_ERR, "execl: %s", strerror(errno));
+			bb_perror_msg("execl");
 			_exit(EXIT_FAILURE);
 		}
 
@@ -170,24 +163,15 @@
 			goto bad;
 		}
 		if (WEXITSTATUS(status) != 0) {
-			if (FOREGROUND)
-				bb_error_msg("script %s failed, exit=%d",
-					script, WEXITSTATUS(status));
-			else
-				syslog(LOG_ERR, "script %s failed, exit=%d",
-					script, WEXITSTATUS(status));
+			bb_error_msg("script %s failed, exit=%d",
+				script, WEXITSTATUS(status));
 			return -errno;
 		}
 	}
 	return 0;
 bad:
 	status = -errno;
-	if (FOREGROUND)
-		bb_perror_msg("%s %s, %s",
-			arg, intf, why);
-	else
-		syslog(LOG_ERR, "%s %s, %s: %s",
-			arg, intf, why, strerror(errno));
+	bb_perror_msg("%s %s, %s", arg, intf, why);
 	return status;
 }
 
@@ -235,6 +219,11 @@
 	char *r_opt;
 	bb_opt_complementally = "vv:vf"; // -v accumulates and implies -f
 	opts = bb_getopt_ulflags(argc, argv, "fqr:v", &r_opt, &verbose);
+	if (!FOREGROUND) {
+		/* Do it early, before all bb_xx_msg calls */
+		logmode = LOGMODE_SYSLOG;
+		openlog(bb_applet_name, 0, LOG_DAEMON);
+	}
 	if (opts & 4) { // -r n.n.n.n
 		if (inet_aton(r_opt, &ip) == 0
 		|| (ntohl(ip.s_addr) & IN_CLASSB_NET) != LINKLOCAL_ADDR) {
@@ -285,9 +274,9 @@
 
 	// daemonize now; don't delay system startup
 	if (!FOREGROUND) {
-		xdaemon(0, verbose);
-		openlog(bb_applet_name, 0, LOG_DAEMON);
-		syslog(LOG_INFO, "start, interface %s", intf);
+		setsid();
+		xdaemon(0, 0);
+		bb_info_msg("start, interface %s", intf);
 	}
 
 	// run the dynamic address negotiation protocol,
@@ -557,10 +546,6 @@
 		} // switch poll
 	}
 bad:
-	if (FOREGROUND)
-		perror(why);
-	else
-		syslog(LOG_ERR, "%s %s, %s error: %s",
-			bb_applet_name, intf, why, strerror(errno));
+	bb_perror_msg("%s, %s", intf, why);
 	return EXIT_FAILURE;
 }