[OpenWrt-Devel] [PATCH 1/4] cli: suppress printing error messages when -q is specified.

Yousong Zhou yszhou4tech at gmail.com
Mon May 25 08:32:40 EDT 2015


 - Introduce cli_error() for printing local errors.
 - Convert existing fprintf(stderr, ) and perror() to cli_error().
 - N.B. error messages will still be printed if they occured before -q
   flag was parsed.

Signed-off-by: Yousong Zhou <yszhou4tech at gmail.com>
---
 cli.c |   26 ++++++++++++++++++++------
 1 file changed, 20 insertions(+), 6 deletions(-)

diff --git a/cli.c b/cli.c
index e1e0a66..e425554 100644
--- a/cli.c
+++ b/cli.c
@@ -14,6 +14,8 @@
 #include <strings.h>
 #include <string.h>
 #include <stdlib.h>
+#include <stdarg.h>
+#include <errno.h>
 #include <unistd.h>
 #include "uci.h"
 
@@ -168,6 +170,18 @@ static void cli_perror(void)
 	uci_perror(ctx, appname);
 }
 
+static void cli_error(const char *fmt, ...)
+{
+	va_list ap;
+
+	if (flags & CLI_FLAG_QUIET)
+		return;
+
+	va_start(ap, fmt);
+	vfprintf(stderr, fmt, ap);
+	va_end(ap);
+}
+
 static void uci_print_value(FILE *f, const char *v)
 {
 	fprintf(f, "'");
@@ -538,7 +552,7 @@ static int uci_batch_cmd(void)
 
 	for(i = 0; i <= MAX_ARGS; i++) {
 		if (i == MAX_ARGS) {
-			fprintf(stderr, "Too many arguments\n");
+			cli_error("Too many arguments\n");
 			return 1;
 		}
 		argv[i] = NULL;
@@ -551,7 +565,7 @@ static int uci_batch_cmd(void)
 			break;
 		argv[i] = strdup(argv[i]);
 		if (!argv[i]) {
-			perror("uci");
+			cli_error("uci: %s", strerror(errno));
 			return 1;
 		}
 	}
@@ -583,7 +597,7 @@ static int uci_batch(void)
 		if (ret == 254)
 			return 0;
 		else if (ret == 255)
-			fprintf(stderr, "Unknown command\n");
+			cli_error("Unknown command\n");
 
 		/* clean up */
 		uci_foreach_element_safe(&ctx->root, tmp, e) {
@@ -673,7 +687,7 @@ int main(int argc, char **argv)
 	input = stdin;
 	ctx = uci_alloc_context();
 	if (!ctx) {
-		fprintf(stderr, "Out of memory\n");
+		cli_error("Out of memory\n");
 		return 1;
 	}
 
@@ -688,13 +702,13 @@ int main(int argc, char **argv)
 			case 'f':
 				if (input != stdin) {
 					fclose(input);
-					perror("uci");
+					cli_error("Too many input files.\n");
 					return 1;
 				}
 
 				input = fopen(optarg, "r");
 				if (!input) {
-					perror("uci");
+					cli_error("uci: %s", strerror(errno));
 					return 1;
 				}
 				break;
-- 
1.7.10.4
_______________________________________________
openwrt-devel mailing list
openwrt-devel at lists.openwrt.org
https://lists.openwrt.org/cgi-bin/mailman/listinfo/openwrt-devel



More information about the openwrt-devel mailing list