X-Git-Url: http://git.tuebingen.mpg.de/?p=paraslash.git;a=blobdiff_plain;f=interactive.c;h=9f2b71953c90f3148d17af0becf0b6a9f3eeaecd;hp=bc3a7c1eba8d239c11a29852d356e51a4b7585e7;hb=3889b355ca075111a717da36946c779b7474a63d;hpb=f652ce6afe7f6fd0e42814505234cbf4321a736e diff --git a/interactive.c b/interactive.c index bc3a7c1e..9f2b7195 100644 --- a/interactive.c +++ b/interactive.c @@ -1,5 +1,5 @@ /* - * Copyright (C) 2011-2013 Andre Noll + * Copyright (C) 2011-2014 Andre Noll * * Licensed under the GPL v2. For licencing details see COPYING. */ @@ -227,6 +227,7 @@ static void wipe_bottom_line(void) fprintf(i9ep->stderr_stream, "\r"); } +#ifndef RL_FREE_KEYMAP_DECLARED /** * Free all storage associated with a keymap. * @@ -237,6 +238,7 @@ static void wipe_bottom_line(void) * \param keymap The keymap to deallocate. */ void rl_free_keymap(Keymap keymap); +#endif /** * Reset the terminal and save the in-memory command line history. @@ -272,6 +274,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,24 +293,28 @@ 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 void i9e_post_select(__a_unused struct sched *s, struct task *t) +static int i9e_post_select(__a_unused struct sched *s, __a_unused struct task *t) { int ret; struct i9e_client_info *ici = i9ep->ici; @@ -361,7 +368,7 @@ rm_btrn: wipe_bottom_line(); out: i9ep->caught_sigint = false; - t->error = ret; + return ret; } static void i9e_pre_select(struct sched *s, __a_unused struct task *t)