X-Git-Url: http://git.droids-corp.org/?a=blobdiff_plain;f=src%2Flib%2Fcmdline_rdline.c;h=48cf03e094b8a2219edcdbcbdecd1498166c20c2;hb=9e20c1f99fb24b22eaed433a2227c3eeaa34b245;hp=15f096d7f406350b399d8645e146e82747d09277;hpb=62115fff94ec9f1d023a3b713f178980f6bb5691;p=libcmdline.git diff --git a/src/lib/cmdline_rdline.c b/src/lib/cmdline_rdline.c index 15f096d..48cf03e 100644 --- a/src/lib/cmdline_rdline.c +++ b/src/lib/cmdline_rdline.c @@ -135,6 +135,12 @@ rdline_stop(struct rdline *rdl) rdl->status = RDLINE_INIT; } +void +rdline_quit(struct rdline *rdl) +{ + rdl->status = RDLINE_EXITED; +} + void rdline_restart(struct rdline *rdl) { @@ -163,14 +169,15 @@ display_right_buffer(struct rdline *rdl) unsigned int i; char tmp; + if (CIRBUF_IS_EMPTY(&rdl->right)) + return; + rdline_puts(rdl, vt100_clear_right); - if (!CIRBUF_IS_EMPTY(&rdl->right)) { - CIRBUF_FOREACH(&rdl->right, i, tmp) { - rdl->write_char(rdl, tmp); - } - rdline_miniprintf(rdl, vt100_multi_left, - CIRBUF_GET_LEN(&rdl->right)); + CIRBUF_FOREACH(&rdl->right, i, tmp) { + rdl->write_char(rdl, tmp); } + rdline_miniprintf(rdl, vt100_multi_left, + CIRBUF_GET_LEN(&rdl->right)); } void @@ -198,6 +205,8 @@ rdline_char_in(struct rdline *rdl, char c) char *buf; #endif + if (rdl->status == RDLINE_EXITED) + return RDLINE_RES_EXITED; if (rdl->status != RDLINE_RUNNING) return RDLINE_RES_NOT_RUNNING; @@ -413,6 +422,9 @@ rdline_char_in(struct rdline *rdl, char c) if (rdl->validate) rdl->validate(rdl, rdl->left_buf, CIRBUF_GET_LEN(&rdl->left)+2); + /* user may have stopped rdline */ + if (rdl->status == RDLINE_EXITED) + return RDLINE_RES_EXITED; return RDLINE_RES_VALIDATED; #ifndef NO_RDLINE_HISTORY