Diff for /libaitcli/src/aitcli.c between versions 1.8.2.7 and 1.11.2.1

version 1.8.2.7, 2013/10/08 11:30:00 version 1.11.2.1, 2013/11/22 14:25:37
Line 506  bufHelp(int idx, void * __restrict cli_buffer) Line 506  bufHelp(int idx, void * __restrict cli_buffer)
         return RETCODE_OK;          return RETCODE_OK;
 }  }
   
   static int
   bufEndNode(int idx, void * __restrict cli_buffer)
   {
           linebuffer_t *buf = cli_buffer;
   
           if (!cli_buffer || idx < 0 || idx > MAX_BINDKEY)
                   return RETCODE_ERR;
   
           if (buf->line_level > 0) {
                   printfNL(cli_buffer, 0);
                   buf->line_level--;
                   cli_Printf(buf, "Enter to config level %d\n", buf->line_level);
           }
   
           return bufCLR(idx, cli_buffer);
   }
   
   
 /*  /*
  * cli_Printf() - Send message to CLI session   * cli_Printf() - Send message to CLI session
  *   *
Line 1041  cliInit(int fin, int fout, const char *prompt) Line 1058  cliInit(int fin, int fout, const char *prompt)
                         keys[i].key_func = bufEND;                          keys[i].key_func = bufEND;
                 if (cli_buffer->line_prompt && i == *K_TAB)                  if (cli_buffer->line_prompt && i == *K_TAB)
                         keys[i].key_func = bufComp;                          keys[i].key_func = bufComp;
                   if (cli_buffer->line_prompt && i == *K_CTRL_Z)
                           keys[i].key_func = bufEndNode;
                 if (i >= *K_SPACE && i < *K_BACKSPACE)                  if (i >= *K_SPACE && i < *K_BACKSPACE)
                         keys[i].key_func = bufCHAR;                          keys[i].key_func = bufCHAR;
                 if (i > *K_BACKSPACE && i < 0xff)                  if (i > *K_BACKSPACE && i < 0xff)
Line 1247  cliInitLine(linebuffer_t * __restrict cli_buffer) Line 1266  cliInitLine(linebuffer_t * __restrict cli_buffer)
  * cliReadLine() - Read line from opened CLI session   * cliReadLine() - Read line from opened CLI session
  *   *
  * @cli_buffer = CLI buffer   * @cli_buffer = CLI buffer
    * @timeout = Session timeout (-1 infinit)
    * @cmd_name = If timeout reached, we should call with this cmd_name (default name is "exit")
  * return: NULL if error or !=NULL readed line, must be e_free after use!   * return: NULL if error or !=NULL readed line, must be e_free after use!
 */  */
 char *  char *
cliReadLine(linebuffer_t * __restrict cli_buffer)cliReadLine(linebuffer_t * __restrict cli_buffer, int timeout, const char *cmd_name)
 {  {
        int code, readLen;        int code, readLen, ret;
         register int i;          register int i;
         struct pollfd fds;          struct pollfd fds;
         char buf[BUFSIZ], *str = NULL;          char buf[BUFSIZ], *str = NULL;
Line 1260  cliReadLine(linebuffer_t * __restrict cli_buffer) Line 1281  cliReadLine(linebuffer_t * __restrict cli_buffer)
         if (!cli_buffer) {          if (!cli_buffer) {
                 cli_SetErr(EINVAL, "Invalid input parameters ...");                  cli_SetErr(EINVAL, "Invalid input parameters ...");
                 return NULL;                  return NULL;
        }        } else if (timeout > 0)
                 timeout *= 1000;        /* convert from sec to ms */
   
         memset(&fds, 0, sizeof fds);          memset(&fds, 0, sizeof fds);
         fds.fd = cli_buffer->line_in;          fds.fd = cli_buffer->line_in;
Line 1268  cliReadLine(linebuffer_t * __restrict cli_buffer) Line 1290  cliReadLine(linebuffer_t * __restrict cli_buffer)
   
         printfCR(cli_buffer, 1);          printfCR(cli_buffer, 1);
         while (42) {          while (42) {
                if (poll(&fds, 1, -1) < 1) {                if ((ret = poll(&fds, 1, timeout)) < 1) {
                        LOGERR;                        if (!ret) {
                                 if (str)
                                         e_free(str);
                                 str = e_strdup(cmd_name ? cmd_name : "exit");
                         } else
                                 LOGERR;
                         return str;                          return str;
                 }                  }
   
Line 1324  recheck: Line 1351  recheck:
  * @cli_buffer = CLI buffer   * @cli_buffer = CLI buffer
  * @csHistFile = History file name   * @csHistFile = History file name
  * @sock = client socket   * @sock = client socket
    * @timeout = Session timeout (-1 infinit)
    * @cmd_name = If timeout reached, we should call with this cmd_name (default name is "exit")
  * return: RETCODE_ERR error, RETCODE_OK ok   * return: RETCODE_ERR error, RETCODE_OK ok
 */  */
 int  int
cliNetLoop(linebuffer_t * __restrict cli_buffer, const char *csHistFile, int sock)cliNetLoop(linebuffer_t * __restrict cli_buffer, const char *csHistFile, 
                 int sock, int timeout, const char *cmd_name)
 {  {
         u_char buf[BUFSIZ];          u_char buf[BUFSIZ];
         int pid, stat, pty, r, s, alen, flg, attrlen = 0, ret = 0;          int pid, stat, pty, r, s, alen, flg, attrlen = 0, ret = 0;
Line 1346  cliNetLoop(linebuffer_t * __restrict cli_buffer, const Line 1376  cliNetLoop(linebuffer_t * __restrict cli_buffer, const
                         } else                          } else
                                 close(sock);                                  close(sock);
   
                        ret = cliLoop(cli_buffer, csHistFile) < 0 ? 1 : 0;                        ret = cliLoop(cli_buffer, csHistFile, timeout, cmd_name) < 0 ? 1 : 0;
                         cliEnd(cli_buffer);                          cliEnd(cli_buffer);
   
                         _exit(ret);                          _exit(ret);
Line 1439  cliNetLoop(linebuffer_t * __restrict cli_buffer, const Line 1469  cliNetLoop(linebuffer_t * __restrict cli_buffer, const
  *   *
  * @cli_buffer = CLI buffer   * @cli_buffer = CLI buffer
  * @csHistFile = History file name   * @csHistFile = History file name
    * @timeout = Session timeout (-1 infinit)
    * @cmd_name = If timeout reached, we should call with this cmd_name (default name is "exit")
  * return: RETCODE_ERR error, RETCODE_OK ok   * return: RETCODE_ERR error, RETCODE_OK ok
 */  */
 int  int
cliLoop(linebuffer_t * __restrict cli_buffer, const char *csHistFile)cliLoop(linebuffer_t * __restrict cli_buffer, const char *csHistFile
                 int timeout, const char *cmd_name)
 {  {
         char *line, *s, *t, **app, *items[MAX_PROMPT_ITEMS];          char *line, *s, *t, **app, *items[MAX_PROMPT_ITEMS];
         register int i;          register int i;
Line 1456  cliLoop(linebuffer_t * __restrict cli_buffer, const ch Line 1489  cliLoop(linebuffer_t * __restrict cli_buffer, const ch
                 return RETCODE_ERR;                  return RETCODE_ERR;
   
         do {          do {
                line = cliReadLine(cli_buffer);                line = cliReadLine(cli_buffer, timeout, cmd_name);
                 if (!line) {                  if (!line) {
                         printfNL(cli_buffer, 0);                          printfNL(cli_buffer, 0);
                         break;                          break;
Line 1502  cliLoop(linebuffer_t * __restrict cli_buffer, const ch Line 1535  cliLoop(linebuffer_t * __restrict cli_buffer, const ch
                 cli_freeLine(cli_buffer);                  cli_freeLine(cli_buffer);
                 cli_resetHistory(cli_buffer);                  cli_resetHistory(cli_buffer);
                 e_free(line);                  e_free(line);
        } while (ret < 1);        } while (cli_buffer->line_kill || ret < 1);
   
         cli_saveHistory(cli_buffer, csHistFile, HISTORY_LINES);          cli_saveHistory(cli_buffer, csHistFile, HISTORY_LINES);
         return ret;          return ret;

Removed from v.1.8.2.7  
changed lines
  Added in v.1.11.2.1


FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>