From 72da2ef9ffb49a1fc550ec91caa1468e285f87e0 Mon Sep 17 00:00:00 2001 From: George Joseph Date: Mon, 14 Nov 2016 11:16:03 -0700 Subject: cli: Fix ast_el_read_char to work with libedit >= 3.1 Libedit 3.1 is not build with unicode on as a default and so the prototype for the el_gets callback changed from expecting a char buffer to accepting a wchar buffer. If ast_el_read_char isn't changed, the cli reads garbage from teh terminal. Added a configure test for (*el_rfunc_t)(EditLine *, wchar_t *) and updated ast_el_read_char to use the HAVE_ define to detemrine whether to use char or wchar. ASTERISK-26592 #close Change-Id: I9099b46f68e06d0202ff80e53022a2b68b08871a --- main/asterisk.c | 21 ++++++++++++++++++++- 1 file changed, 20 insertions(+), 1 deletion(-) (limited to 'main') diff --git a/main/asterisk.c b/main/asterisk.c index be6c7cc32..4a6567f73 100644 --- a/main/asterisk.c +++ b/main/asterisk.c @@ -2691,7 +2691,11 @@ static void send_rasterisk_connect_commands(void) } } +#ifdef HAVE_LIBEDIT_IS_UNICODE +static int ast_el_read_char(EditLine *editline, wchar_t *cp) +#else static int ast_el_read_char(EditLine *editline, char *cp) +#endif { int num_read = 0; int lastpos = 0; @@ -2721,10 +2725,16 @@ static int ast_el_read_char(EditLine *editline, char *cp) } if (!ast_opt_exec && fds[1].revents) { - num_read = read(STDIN_FILENO, cp, 1); + char c = '\0'; + num_read = read(STDIN_FILENO, &c, 1); if (num_read < 1) { break; } else { +#ifdef HAVE_LIBEDIT_IS_UNICODE + *cp = btowc(c); +#else + *cp = c; +#endif return (num_read); } } @@ -2768,7 +2778,11 @@ static int ast_el_read_char(EditLine *editline, char *cp) console_print(buf); if ((res < EL_BUF_SIZE - 1) && ((buf[res-1] == '\n') || (res >= 2 && buf[res-2] == '\n'))) { +#ifdef HAVE_LIBEDIT_IS_UNICODE + *cp = btowc(CC_REFRESH); +#else *cp = CC_REFRESH; +#endif return(1); } else { lastpos = 1; @@ -2776,7 +2790,12 @@ static int ast_el_read_char(EditLine *editline, char *cp) } } +#ifdef HAVE_LIBEDIT_IS_UNICODE + *cp = btowc('\0'); +#else *cp = '\0'; +#endif + return (0); } -- cgit v1.2.3