X-Git-Url: http://git.tuebingen.mpg.de/?p=paraslash.git;a=blobdiff_plain;f=interactive.c;h=43cb99f2781979e74b66eef640fadb7878f30aeb;hp=14186cd29026ba60fa9dd572e65b7d55ffc66256;hb=9d75ded33ce6664156acb07e311f51d55970bbea;hpb=742718c0f73774e4adf7bc5719b80bd5cdd24b26 diff --git a/interactive.c b/interactive.c index 14186cd2..43cb99f2 100644 --- a/interactive.c +++ b/interactive.c @@ -272,6 +272,7 @@ static void clear_bottom_line(void) rl_redisplay(); wipe_bottom_line(); /* wipe out the prompt */ rl_insert_text(text); + free(text); rl_point = point; } @@ -290,21 +291,25 @@ static bool input_available(void) static void i9e_line_handler(char *line) { int ret; + struct btr_node *dummy; + if (!line) { + i9ep->input_eof = true; + return; + } + if (!*line) + goto free_line; + rl_set_prompt(""); + dummy = btr_new_node(&(struct btr_node_description) + EMBRACE(.name = "dummy line handler")); + i9e_attach_to_stdout(dummy); ret = i9ep->ici->line_handler(line); if (ret < 0) PARA_WARNING_LOG("%s\n", para_strerror(-ret)); - rl_set_prompt(""); - if (line) { - if (!*line) - rl_set_prompt(i9ep->ici->prompt); - else - add_history(line); - free(line); - } else { - rl_set_prompt(""); - i9ep->input_eof = true; - } + add_history(line); + btr_remove_node(&dummy); +free_line: + free(line); } static int i9e_post_select(__a_unused struct sched *s, __a_unused struct task *t) @@ -447,8 +452,7 @@ int i9e_open(struct i9e_client_info *ici, struct sched *s) if (ret < 0) return ret; i9ep->task.pre_select = i9e_pre_select; - i9ep->task.new_post_select = i9e_post_select; - i9ep->task.post_select = NULL; + i9ep->task.post_select = i9e_post_select; sprintf(i9ep->task.status, "i9e"); register_task(s, &i9ep->task); rl_readline_name = "para_i9e";