--- libaitcli/src/aitcli.c 2010/12/07 15:09:02 1.2.2.18 +++ libaitcli/src/aitcli.c 2010/12/07 16:33:46 1.2.2.21 @@ -3,7 +3,7 @@ * by Michael Pounov * * $Author: misho $ -* $Id: aitcli.c,v 1.2.2.18 2010/12/07 15:09:02 misho Exp $ +* $Id: aitcli.c,v 1.2.2.21 2010/12/07 16:33:46 misho Exp $ * *************************************************************************/ #include "global.h" @@ -507,9 +507,10 @@ cli_Printf(linebuffer_t * __restrict buffer, char *fmt inline void cli_PrintHelp(linebuffer_t * __restrict buffer) { - if (buffer) + if (buffer) { bufHelp(0, buffer); - else + clrscrEOL(buffer); + } else cli_SetErr(EINVAL, "Error:: invalid input parameters ..."); } @@ -1254,12 +1255,12 @@ int cliNetLoop(linebuffer_t * __restrict buffer, const char *csHistFile, int sock) { u_char buf[BUFSIZ]; - int pty, r, s, alen, flg, attrlen = 0, ret = 0; + int pid, stat, pty, r, s, alen, flg, attrlen = 0, ret = 0; fd_set fds; struct timeval tv = { DEFAULT_SOCK_TIMEOUT, 0 }; struct telnetAttrs *a, Attr[10]; - switch (forkpty(&pty, NULL, NULL, NULL)) { + switch ((pid = forkpty(&pty, NULL, NULL, NULL))) { case -1: LOGERR; return -1; @@ -1270,7 +1271,6 @@ cliNetLoop(linebuffer_t * __restrict buffer, const cha } else close(sock); - cliInitLine(buffer); ret = cliLoop(buffer, csHistFile) < 0 ? 1 : 0; cliEnd(buffer); @@ -1289,6 +1289,9 @@ cliNetLoop(linebuffer_t * __restrict buffer, const cha flg = 0; while (42) { + if (waitpid(pid, &stat, WNOHANG)) + break; + FD_ZERO(&fds); FD_SET(sock, &fds); FD_SET(pty, &fds); @@ -1378,6 +1381,7 @@ cliLoop(linebuffer_t * __restrict buffer, const char * struct tagCommand *cmd; /* --- main body of CLI --- */ + cliInitLine(buffer); if (cli_loadHistory(buffer, csHistFile) == RETCODE_ERR) return RETCODE_ERR; @@ -1414,9 +1418,10 @@ cliLoop(linebuffer_t * __restrict buffer, const char * cli_Printf(buffer, "\nCommand '%s' not found!\n", items[0]); ret = -1; } else - if (cmd->cmd_func) + if (cmd->cmd_func) { + cli_Printf(buffer, "\n"); ret = cmd->cmd_func(buffer, i, items); - else { + } else { clrscrEOL(buffer); printfCR(buffer, 1); }