diff --git a/main/asterisk.c b/main/asterisk.c index a6bc0e4650aa7c0c98435f02d5a5c2f832985a47..8d60acaa985b417bc4d3d8348a9596679958aadc 100644 --- a/main/asterisk.c +++ b/main/asterisk.c @@ -801,11 +801,18 @@ void ast_unregister_atexit(void (*func)(void)) free(ae); } -static int fdprint(int fd, const char *s) +/* Sending commands from consoles back to the daemon requires a terminating NULL */ +static int fdsend(int fd, const char *s) { return write(fd, s, strlen(s) + 1); } +/* Sending messages from the daemon back to the display requires _excluding_ the terminating NULL */ +static int fdprint(int fd, const char *s) +{ + return write(fd, s, strlen(s)); +} + /*! \brief NULL handler so we can collect the child exit status */ static void null_sig_handler(int signal) { @@ -1924,7 +1931,7 @@ static int ast_el_read_char(EditLine *el, char *cp) printf("%s", term_quit()); WELCOME_MESSAGE; if (!ast_opt_mute) - fdprint(ast_consock, "logger mute silent"); + fdsend(ast_consock, "logger mute silent"); else printf("log and verbose output currently muted ('logger mute' to unmute)\n"); break; @@ -2228,7 +2235,7 @@ static char *cli_complete(EditLine *el, int ch) if (ast_opt_remote) { snprintf(buf, sizeof(buf), "_COMMAND NUMMATCHES \"%s\" \"%s\"", lf->buffer, ptr); - fdprint(ast_consock, buf); + fdsend(ast_consock, buf); res = read(ast_consock, buf, sizeof(buf)); buf[res] = '\0'; nummatches = atoi(buf); @@ -2240,7 +2247,7 @@ static char *cli_complete(EditLine *el, int ch) if (!(mbuf = ast_malloc(maxmbuf))) return (char *)(CC_ERROR); snprintf(buf, sizeof(buf), "_COMMAND MATCHESARRAY \"%s\" \"%s\"", lf->buffer, ptr); - fdprint(ast_consock, buf); + fdsend(ast_consock, buf); res = 0; mbuf[0] = '\0'; while (!strstr(mbuf, AST_CLI_COMPLETE_EOF) && res != -1) { @@ -2425,11 +2432,11 @@ static void ast_remotecontrol(char * data) pid = -1; if (!data) { snprintf(tmp, sizeof(tmp), "core set verbose atleast %d", option_verbose); - fdprint(ast_consock, tmp); + fdsend(ast_consock, tmp); snprintf(tmp, sizeof(tmp), "core set debug atleast %d", option_debug); - fdprint(ast_consock, tmp); + fdsend(ast_consock, tmp); if (!ast_opt_mute) - fdprint(ast_consock, "logger mute silent"); + fdsend(ast_consock, "logger mute silent"); else printf("log and verbose output currently muted ('logger mute' to unmute)\n"); }