]> git.proxmox.com Git - qemu.git/blobdiff - readline.c
Introduce a 'client_add' monitor command accepting an open FD
[qemu.git] / readline.c
index 1868b1082b4c5e1711c00965c09272e75412b280..92f9cd1569a657a10f0a9c1e2177ca522d5c6a3c 100644 (file)
@@ -28,6 +28,7 @@
 #define IS_ESC  1
 #define IS_CSI  2
 
+#undef printf
 #define printf do_not_use_printf
 
 void readline_show_prompt(ReadLineState *rs)
@@ -196,12 +197,14 @@ static void readline_up_char(ReadLineState *rs)
 
 static void readline_down_char(ReadLineState *rs)
 {
-    if (rs->hist_entry == READLINE_MAX_CMDS - 1 || rs->hist_entry == -1)
-       return;
-    if (rs->history[++rs->hist_entry] != NULL) {
+    if (rs->hist_entry == -1)
+        return;
+    if (rs->hist_entry < READLINE_MAX_CMDS - 1 &&
+        rs->history[++rs->hist_entry] != NULL) {
        pstrcpy(rs->cmd_buf, sizeof(rs->cmd_buf),
                 rs->history[rs->hist_entry]);
     } else {
+        rs->cmd_buf[0] = 0;
        rs->hist_entry = -1;
     }
     rs->cmd_buf_index = rs->cmd_buf_size = strlen(rs->cmd_buf);
@@ -444,6 +447,11 @@ void readline_start(ReadLineState *rs, const char *prompt, int read_password,
     rs->readline_func = readline_func;
     rs->readline_opaque = opaque;
     rs->read_password = read_password;
+    readline_restart(rs);
+}
+
+void readline_restart(ReadLineState *rs)
+{
     rs->cmd_buf_index = 0;
     rs->cmd_buf_size = 0;
 }
@@ -460,9 +468,6 @@ ReadLineState *readline_init(Monitor *mon,
 {
     ReadLineState *rs = qemu_mallocz(sizeof(*rs));
 
-    if (!rs)
-        return NULL;
-
     rs->hist_entry = -1;
     rs->mon = mon;
     rs->completion_finder = completion_finder;