OSDN Git Service

client: Check for RL_STATE_DONE before trying to print
authorMarcel Holtmann <marcel@holtmann.org>
Tue, 18 Dec 2012 13:52:56 +0000 (14:52 +0100)
committerMarcel Holtmann <marcel@holtmann.org>
Tue, 18 Dec 2012 14:03:58 +0000 (15:03 +0100)
client/display.c

index 197049d..bc891af 100644 (file)
 void rl_printf(const char *fmt, ...)
 {
        va_list args;
+       bool save_input;
        char *saved_line;
        int saved_point;
 
-       saved_point = rl_point;
-       saved_line = rl_copy_text(0, rl_end);
-       rl_save_prompt();
-       rl_replace_line("", 0);
-       rl_redisplay();
+       save_input = !RL_ISSTATE(RL_STATE_DONE);
+
+       if (save_input) {
+               saved_point = rl_point;
+               saved_line = rl_copy_text(0, rl_end);
+               rl_save_prompt();
+               rl_replace_line("", 0);
+               rl_redisplay();
+       }
 
        va_start(args, fmt);
        vprintf(fmt, args);
        va_end(args);
 
-       rl_restore_prompt();
-       rl_replace_line(saved_line, 0);
-       rl_point = saved_point;
-       rl_redisplay();
-       free(saved_line);
+       if (save_input) {
+               rl_restore_prompt();
+               rl_replace_line(saved_line, 0);
+               rl_point = saved_point;
+               rl_redisplay();
+               free(saved_line);
+       }
 }