diff options
author | Amar Tumballi <amarts@redhat.com> | 2012-04-23 11:11:43 +0530 |
---|---|---|
committer | Vijay Bellur <vijay@gluster.com> | 2012-04-25 00:45:51 -0700 |
commit | 3f35280a364bd35293d3e5804eb2a659a7f174b1 (patch) | |
tree | e400432d3460aaacbdc4e6675978bd1c2c94e4ef | |
parent | 90d5d569b5a2333094ba8741bb29fe040b695b23 (diff) |
cli: implement a fn 'cli_err()' to send error messages to 'stderr'
we were using 'cli_out()' to send all the possible msgs, which is not
very friendly with scripts, because if one want to get only valid
output with "<command> 2>/error.log 1>/proper-info.log"
Change-Id: I008ebcbd90935c41dbfc1bd2adeb094ed21116cb
Signed-off-by: Amar Tumballi <amarts@redhat.com>
BUG: 815194
Reviewed-on: http://review.gluster.com/3208
Tested-by: Gluster Build System <jenkins@build.gluster.com>
Reviewed-by: Kaushal M <kaushal@redhat.com>
Reviewed-by: Vijay Bellur <vijay@gluster.com>
-rw-r--r-- | cli/src/cli-rl.c | 36 | ||||
-rw-r--r-- | cli/src/cli-rpc-ops.c | 12 | ||||
-rw-r--r-- | cli/src/cli.c | 26 | ||||
-rw-r--r-- | cli/src/cli.h | 9 |
4 files changed, 73 insertions, 10 deletions
diff --git a/cli/src/cli-rl.c b/cli/src/cli-rl.c index 9a37a77de5e..f9bf7c81923 100644 --- a/cli/src/cli-rl.c +++ b/cli/src/cli-rl.c @@ -48,7 +48,6 @@ cli_rl_out (struct cli_state *state, const char *fmt, va_list ap) { int tmp_rl_point = rl_point; int n = rl_end; - int i = 0; int ret = 0; if (rl_end >= 0 ) { @@ -56,12 +55,7 @@ cli_rl_out (struct cli_state *state, const char *fmt, va_list ap) rl_redisplay (); } - printf ("\r"); - - for (i = 0; i <= strlen (state->prompt); i++) - printf (" "); - - printf ("\r"); + printf ("\r%*s\r", (int)strlen (state->prompt), ""); ret = vprintf (fmt, ap); @@ -77,6 +71,34 @@ cli_rl_out (struct cli_state *state, const char *fmt, va_list ap) return ret; } +int +cli_rl_err (struct cli_state *state, const char *fmt, va_list ap) +{ + int tmp_rl_point = rl_point; + int n = rl_end; + int ret = 0; + + if (rl_end >= 0 ) { + rl_kill_text (0, rl_end); + rl_redisplay (); + } + + fprintf (stderr, "\r%*s\r", (int)strlen (state->prompt), ""); + + ret = vfprintf (stderr, fmt, ap); + + fprintf (stderr, "\n"); + fflush(stderr); + + if (n) { + rl_do_undo (); + rl_point = tmp_rl_point; + rl_reset_line_state (); + } + + return ret; +} + void cli_rl_process_line (char *line) diff --git a/cli/src/cli-rpc-ops.c b/cli/src/cli-rpc-ops.c index 790330240fd..9487badb6f1 100644 --- a/cli/src/cli-rpc-ops.c +++ b/cli/src/cli-rpc-ops.c @@ -183,7 +183,11 @@ gf_cli3_1_probe_cbk (struct rpc_req *req, struct iovec *iov, goto out; } #endif - cli_out ("%s", msg); + if (!rsp.op_ret) + cli_out ("%s", msg); + else + cli_err ("%s", msg); + ret = rsp.op_ret; out: @@ -256,7 +260,11 @@ gf_cli3_1_deprobe_cbk (struct rpc_req *req, struct iovec *iov, goto out; } #endif - cli_out ("%s", msg); + if (!rsp.op_ret) + cli_out ("%s", msg); + else + cli_err ("%s", msg); + ret = rsp.op_ret; out: diff --git a/cli/src/cli.c b/cli/src/cli.c index 7a490fed2b9..6a5ecf698c9 100644 --- a/cli/src/cli.c +++ b/cli/src/cli.c @@ -450,11 +450,35 @@ cli_usage_out (const char *usage) if (!usage || usage[0] == '\0') return -1; - cli_out ("Usage: %s", usage); + cli_err ("Usage: %s", usage); return 0; } int +_cli_err (const char *fmt, ...) +{ + struct cli_state *state = NULL; + va_list ap; + int ret = 0; + + state = global_state; + + va_start (ap, fmt); + +#ifdef HAVE_READLINE + if (state->rl_enabled && !state->rl_processing) + return cli_rl_err(state, fmt, ap); +#endif + + ret = vfprintf (stderr, fmt, ap); + fprintf (stderr, "\n"); + va_end (ap); + + return ret; +} + + +int _cli_out (const char *fmt, ...) { struct cli_state *state = NULL; diff --git a/cli/src/cli.h b/cli/src/cli.h index f0048beae00..0b769812c5d 100644 --- a/cli/src/cli.h +++ b/cli/src/cli.h @@ -177,10 +177,12 @@ int cli_cmd_process_line (struct cli_state *state, const char *line); int cli_rl_enable (struct cli_state *state); int cli_rl_out (struct cli_state *state, const char *fmt, va_list ap); +int cli_rl_err (struct cli_state *state, const char *fmt, va_list ap); int cli_usage_out (const char *usage); int _cli_out (const char *fmt, ...); +int _cli_err (const char *fmt, ...); #define cli_out(fmt...) do { \ FMT_WARN (fmt); \ @@ -189,6 +191,13 @@ int _cli_out (const char *fmt, ...); \ } while (0) +#define cli_err(fmt...) do { \ + FMT_WARN (fmt); \ + \ + _cli_err(fmt); \ + \ + } while (0) + int cli_submit_request (void *req, call_frame_t *frame, rpc_clnt_prog_t *prog, |