diff options
-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, |