zcip: fix stdout/err versus syslog output.
      Incomplete: xfunc() would not respect this. TODO.

diff --git a/networking/zcip.c b/networking/zcip.c
index 55d28e5..330ec7a 100644
--- a/networking/zcip.c
+++ b/networking/zcip.c
@@ -76,6 +76,10 @@
 	do { } while (0)
 #define VDBG	DBG
 
+static unsigned long opts;
+#define FOREGROUND (opts & 1)
+#define QUIT (opts & 2)
+
 /**
  * Pick a random link local IP address on 169.254/16, except that
  * the first and last 256 addresses are reserved.
@@ -119,7 +123,10 @@
 
 	// send it
 	if (sendto(fd, &p, sizeof (p), 0, saddr, sizeof (*saddr)) < 0) {
-		perror("sendto");
+		if (FOREGROUND)
+			perror("sendto");
+		else
+			syslog(LOG_ERR, "sendto: %s", strerror(errno));
 		return -errno;
 	}
 	return 0;
@@ -127,19 +134,20 @@
 
 /**
  * Run a script.
- * TODO: sort out stderr/syslog reporting.
+ * TODO: we need a flag to direct bb_[p]error_msg output to stderr.
  */
 static int run(char *script, char *arg, char *intf, struct in_addr *ip)
 {
 	int pid, status;
 	char *why;
 
-	if (script != NULL) {
+	if(1) { //always true: if (script != NULL)
 		VDBG("%s run %s %s\n", intf, script, arg);
 		if (ip != NULL) {
 			char *addr = inet_ntoa(*ip);
 			setenv("ip", addr, 1);
-			syslog(LOG_INFO, "%s %s %s", arg, intf, addr);
+			if (!FOREGROUND)
+				syslog(LOG_INFO, "%s %s %s", arg, intf, addr);
 		}
 
 		pid = vfork();
@@ -148,7 +156,10 @@
 			goto bad;
 		} else if (pid == 0) {		// child
 			execl(script, script, arg, NULL);
-			perror("execl");
+			if (FOREGROUND)
+				perror("execl");
+			else
+				syslog(LOG_ERR, "execl: %s", strerror(errno));
 			_exit(EXIT_FAILURE);
 		}
 
@@ -157,7 +168,11 @@
 			goto bad;
 		}
 		if (WEXITSTATUS(status) != 0) {
-			bb_error_msg("script %s failed, exit=%d\n",
+			if (FOREGROUND)
+				bb_error_msg("script %s failed, exit=%d\n",
+					script, WEXITSTATUS(status));
+			else
+				syslog(LOG_ERR, "script %s failed, exit=%d",
 					script, WEXITSTATUS(status));
 			return -errno;
 		}
@@ -165,8 +180,12 @@
 	return 0;
 bad:
 	status = -errno;
-	syslog(LOG_ERR, "%s %s, %s error: %s",
-		arg, intf, why, strerror(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));
 	return status;
 }
 
@@ -211,11 +230,7 @@
 	int fd;
 
 	// parse commandline: prog [options] ifname script
-#define FOREGROUND (opts & 1)
-#define QUIT (opts & 2)
 	char *r_opt;
-	unsigned long opts;
-
 	bb_opt_complementally = "vv"; // -v options accumulate
 	opts = bb_getopt_ulflags(argc, argv, "fqr:v", &r_opt, &verbose);
 	if (opts & 4) {