diff options
Diffstat (limited to 'cli/src/cli-rl.c')
| -rw-r--r-- | cli/src/cli-rl.c | 75 |
1 files changed, 46 insertions, 29 deletions
diff --git a/cli/src/cli-rl.c b/cli/src/cli-rl.c index 5d1310858..ade1c8ebb 100644 --- a/cli/src/cli-rl.c +++ b/cli/src/cli-rl.c @@ -1,22 +1,12 @@ /* - Copyright (c) 2010 Gluster, Inc. <http://www.gluster.com> - This file is part of GlusterFS. - - GlusterFS is free software; you can redistribute it and/or modify - it under the terms of the GNU Affero General Public License as published - by the Free Software Foundation; either version 3 of the License, - or (at your option) any later version. - - GlusterFS is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Affero General Public License for more details. - - You should have received a copy of the GNU Affero General Public License - along with this program. If not, see - <http://www.gnu.org/licenses/>. -*/ + Copyright (c) 2010-2012 Red Hat, Inc. <http://www.redhat.com> + This file is part of GlusterFS. + This file is licensed to you under your choice of the GNU Lesser + General Public License, version 3 or any later version (LGPLv3 or + later), or the GNU General Public License, version 2 (GPLv2), in all + cases as published by the Free Software Foundation. +*/ #include <stdio.h> #include <string.h> #include <stdlib.h> @@ -48,7 +38,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 +45,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 +61,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) @@ -89,9 +101,14 @@ cli_rl_process_line (char *line) state->rl_processing = 1; { ret = cli_cmd_process_line (state, line); + if (ret) + gf_log (THIS->name, GF_LOG_WARNING, + "failed to process line"); + add_history (line); } state->rl_processing = 0; + } @@ -187,7 +204,7 @@ cli_rl_tokenize (const char *text) } if (i < count) { - /* symoblize that what needs to be autocompleted is + /* symbolize that what needs to be autocompleted is the full set of possible nextwords, and not extend the last word */ @@ -199,8 +216,7 @@ cli_rl_tokenize (const char *text) } out: - if (copy) - free (copy); + free (copy); if (i < count) { cli_cmd_tokens_destroy (tokens); @@ -347,9 +363,10 @@ cli_rl_input (void *_data) for (;;) { line = readline (state->prompt); if (!line) - break; + exit(0); //break; - cli_rl_process_line (line); + if (*line) + cli_rl_process_line (line); free (line); } |
