--- libaitcli/src/aitcli.c 2012/07/22 22:37:08 1.5 +++ libaitcli/src/aitcli.c 2013/05/30 09:16:42 1.6 @@ -3,7 +3,7 @@ * by Michael Pounov * * $Author: misho $ -* $Id: aitcli.c,v 1.5 2012/07/22 22:37:08 misho Exp $ +* $Id: aitcli.c,v 1.6 2013/05/30 09:16:42 misho Exp $ * ************************************************************************** The ELWIX and AITNET software is distributed under the following @@ -12,7 +12,7 @@ terms: All of the documentation and software included in the ELWIX and AITNET Releases is copyrighted by ELWIX - Sofia/Bulgaria -Copyright 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012 +Copyright 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013 by Michael Pounov . All rights reserved. Redistribution and use in source and binary forms, with or without @@ -49,37 +49,35 @@ SUCH DAMAGE. #pragma GCC visibility push(hidden) -// ------------------------------------------------ - int cli_Errno; char cli_Error[STRSIZ]; #pragma GCC visibility pop // cli_GetErrno() Get error code of last operation -inline int +int cli_GetErrno() { return cli_Errno; } -// io_GetError() Get error text of last operation -inline const char * +// cli_GetError() Get error text of last operation +const char * cli_GetError() { return cli_Error; } // cli_SetErr() Set error to variables for internal use!!! -inline void +void cli_SetErr(int eno, char *estr, ...) { va_list lst; cli_Errno = eno; - memset(cli_Error, 0, STRSIZ); + memset(cli_Error, 0, sizeof cli_Error); va_start(lst, estr); - vsnprintf(cli_Error, STRSIZ, estr, lst); + vsnprintf(cli_Error, sizeof cli_Error, estr, lst); va_end(lst); } @@ -411,12 +409,12 @@ bufComp(int idx, void * __restrict buffer) if (!buffer || idx < 0 || idx > MAX_BINDKEY) return RETCODE_ERR; - str = io_strdup(buf->line_buf); + str = e_strdup(buf->line_buf); if (!str) return RETCODE_ERR; else { s = str; - io_TrimStr(s); + str_Trim(s); } i = j = 0; @@ -488,7 +486,7 @@ bufComp(int idx, void * __restrict buffer) } endcomp: - io_free(str); + e_free(str); return ret; } @@ -507,16 +505,16 @@ bufHelp(int idx, void * __restrict buffer) return RETCODE_OK; } -// --------------------------------------------------------------- /* - * cli_Printf() Send message to CLI session + * cli_Printf() - Send message to CLI session + * * @buffer = CLI buffer * @fmt = printf format string * @... = arguments defined in fmt * return: none */ -inline void +void cli_Printf(linebuffer_t * __restrict buffer, char *fmt, ...) { va_list lst; @@ -533,27 +531,29 @@ cli_Printf(linebuffer_t * __restrict buffer, char *fmt vfprintf(f, fmt, lst); va_end(lst); } else - cli_SetErr(EINVAL, "Error:: invalid input parameters ..."); + cli_SetErr(EINVAL, "Invalid input parameters ..."); } /* - * cli_PrintHelp() Print help screen + * cli_PrintHelp() - Print help screen + * * @buffer = CLI buffer * return: none */ -inline void +void cli_PrintHelp(linebuffer_t * __restrict buffer) { if (buffer) { bufHelp(0, buffer); clrscrEOL(buffer); } else - cli_SetErr(EINVAL, "Error:: invalid input parameters ..."); + cli_SetErr(EINVAL, "Invalid input parameters ..."); } /* - * cli_BindKey() Bind function to key + * cli_BindKey() - Bind function to key + * * @key = key structure * @buffer = CLI buffer * return: RETCODE_ERR error, RETCODE_OK ok, >0 bind at position @@ -564,7 +564,7 @@ cli_BindKey(bindkey_t * __restrict key, linebuffer_t * register int i; if (!key || !buffer) { - cli_SetErr(EINVAL, "Error:: invalid input parameters ..."); + cli_SetErr(EINVAL, "Invalid input parameters ..."); return RETCODE_ERR; } @@ -580,7 +580,8 @@ cli_BindKey(bindkey_t * __restrict key, linebuffer_t * /* - * cli_addCommand() Add command to CLI session + * cli_addCommand() - Add command to CLI session + * * @buffer = CLI buffer * @csCmd = Command name * @cliLevel = Level in CLI, -1 unprivi(view from all), 0 main config, 1 sub config ... @@ -596,11 +597,11 @@ cli_addCommand(linebuffer_t * __restrict buffer, const struct tagCommand *cmd; if (!buffer || !csCmd) { - cli_SetErr(EINVAL, "Error:: invalid input parameters ..."); + cli_SetErr(EINVAL, "Invalid input parameters ..."); return RETCODE_ERR; } - cmd = io_malloc(sizeof(struct tagCommand)); + cmd = e_malloc(sizeof(struct tagCommand)); if (!cmd) { LOGERR; return RETCODE_ERR; @@ -619,7 +620,8 @@ cli_addCommand(linebuffer_t * __restrict buffer, const } /* - * cli_delCommand() Delete command from CLI session + * cli_delCommand() - Delete command from CLI session + * * @buffer = CLI buffer * @csCmd = Command name * @cliLevel = Level in CLI, -1 unprivi(view from all), 0 main config, 1 sub config ... @@ -632,7 +634,7 @@ cli_delCommand(linebuffer_t * __restrict buffer, const int ret = RETCODE_OK; if (!buffer || !csCmd) { - cli_SetErr(EINVAL, "Error:: invalid input parameters ..."); + cli_SetErr(EINVAL, "Invalid input parameters ..."); return RETCODE_ERR; } @@ -640,7 +642,7 @@ cli_delCommand(linebuffer_t * __restrict buffer, const if (cmd->cmd_level == cliLevel && !strcmp(cmd->cmd_name, csCmd)) { ret = 1; SLIST_REMOVE(&buffer->line_cmds, cmd, tagCommand, cmd_next); - io_free(cmd); + e_free(cmd); break; } @@ -648,7 +650,8 @@ cli_delCommand(linebuffer_t * __restrict buffer, const } /* - * cli_updCommand() Update command in CLI session + * cli_updCommand() - Update command in CLI session + * * @buffer = CLI buffer * @csCmd = Command name * @cliLevel = Level in CLI, -1 unprivi(view from all), 0 main config, 1 sub config ... @@ -665,7 +668,7 @@ cli_updCommand(linebuffer_t * __restrict buffer, const int ret = RETCODE_OK; if (!buffer || !csCmd) { - cli_SetErr(EINVAL, "Error:: invalid input parameters ..."); + cli_SetErr(EINVAL, "Invalid input parameters ..."); return RETCODE_ERR; } @@ -688,7 +691,8 @@ cli_updCommand(linebuffer_t * __restrict buffer, const /* - * cli_addHistory() Add line to history + * cli_addHistory() - Add line to history + * * @buffer = CLI buffer * @str = Add custom text or if NULL use readed line from CLI buffer * return: RETCODE_ERR error, RETCODE_OK ok @@ -699,11 +703,11 @@ cli_addHistory(linebuffer_t * __restrict buffer, const struct tagHistory *h; if (!buffer) { - cli_SetErr(EINVAL, "Error:: invalid input parameters ..."); + cli_SetErr(EINVAL, "Invalid input parameters ..."); return RETCODE_ERR; } - if (!(h = io_malloc(sizeof(struct tagHistory)))) { + if (!(h = e_malloc(sizeof(struct tagHistory)))) { LOGERR; return RETCODE_ERR; } else @@ -711,19 +715,19 @@ cli_addHistory(linebuffer_t * __restrict buffer, const if (str) { if (!*str) { - io_free(h); + e_free(h); return RETCODE_OK; } h->hist_len = strlcpy(h->hist_line, str, BUFSIZ); } else { if (!*buffer->line_buf || buffer->line_len < 2) { - io_free(h); + e_free(h); return RETCODE_OK; } memcpy(h->hist_line, buffer->line_buf, (h->hist_len = buffer->line_len)); - io_TrimStr(h->hist_line); + str_Trim(h->hist_line); h->hist_len = strlen(h->hist_line); } @@ -732,7 +736,8 @@ cli_addHistory(linebuffer_t * __restrict buffer, const } /* - * cli_saveHistory() Save history to file + * cli_saveHistory() - Save history to file + * * @buffer = CLI buffer * @histfile = History filename, if NULL will be use default name * @lines = Maximum history lines to save @@ -747,7 +752,7 @@ cli_saveHistory(linebuffer_t * __restrict buffer, cons struct tagHistory *h; if (!buffer) { - cli_SetErr(EINVAL, "Error:: invalid input parameters ..."); + cli_SetErr(EINVAL, "Invalid input parameters ..."); return RETCODE_ERR; } if (!histfile) @@ -778,7 +783,8 @@ cli_saveHistory(linebuffer_t * __restrict buffer, cons } /* - * cli_loadHistory() Load history from file + * cli_loadHistory() - Load history from file + * * @buffer = CLI buffer * @histfile = History filename, if NULL will be use default name * return: RETCODE_ERR error, RETCODE_OK ok @@ -791,7 +797,7 @@ cli_loadHistory(linebuffer_t * __restrict buffer, cons struct tagHistory *h; if (!buffer) { - cli_SetErr(EINVAL, "Error:: invalid input parameters ..."); + cli_SetErr(EINVAL, "Invalid input parameters ..."); return RETCODE_ERR; } if (!histfile) @@ -807,9 +813,9 @@ cli_loadHistory(linebuffer_t * __restrict buffer, cons if (!*buf || *buf == '#') continue; else - io_TrimStr(buf); + str_Trim(buf); - if (!(h = io_malloc(sizeof(struct tagHistory)))) { + if (!(h = e_malloc(sizeof(struct tagHistory)))) { LOGERR; fclose(f); return RETCODE_ERR; @@ -826,11 +832,12 @@ cli_loadHistory(linebuffer_t * __restrict buffer, cons } /* - * cli_resetHistory() Reset history search in CLI session + * cli_resetHistory() - Reset history search in CLI session + * * @buffer = CLI buffer * return: none */ -inline void +void cli_resetHistory(linebuffer_t * __restrict buffer) { buffer->line_h = NULL; @@ -838,20 +845,21 @@ cli_resetHistory(linebuffer_t * __restrict buffer) /* - * cli_freeLine() Clear entire line + * cli_freeLine() - Clear entire line + * * @buffer = CLI buffer * return: RETCODE_ERR error, RETCODE_OK ok */ -inline int +int cli_freeLine(linebuffer_t * __restrict buffer) { int code = RETCODE_ERR; if (buffer) { if (buffer->line_buf) - io_free(buffer->line_buf); + e_free(buffer->line_buf); - buffer->line_buf = io_malloc(BUFSIZ); + buffer->line_buf = e_malloc(BUFSIZ); if (buffer->line_buf) { memset(buffer->line_buf, 0, BUFSIZ); buffer->line_eol = buffer->line_bol; @@ -861,29 +869,30 @@ cli_freeLine(linebuffer_t * __restrict buffer) } else LOGERR; } else - cli_SetErr(EINVAL, "Error:: invalid input parameters ..."); + cli_SetErr(EINVAL, "Invalid input parameters ..."); return code; } /* - * cli_setPrompt() Set new prompt for CLI session + * cli_setPrompt() - Set new prompt for CLI session + * * @buffer = CLI buffer * @prompt = new text for prompt or if NULL disable prompt * return: none */ -inline void +void cli_setPrompt(linebuffer_t * __restrict buffer, const char *prompt) { if (buffer) { if (buffer->line_prompt) { - io_free(buffer->line_prompt); + e_free(buffer->line_prompt); buffer->line_prompt = NULL; buffer->line_bol = 0; } if (prompt) { - buffer->line_prompt = io_strdup(prompt); + buffer->line_prompt = e_strdup(prompt); if (buffer->line_prompt) { buffer->line_bol = strlen(buffer->line_prompt); buffer->line_eol = buffer->line_bol; @@ -892,12 +901,13 @@ cli_setPrompt(linebuffer_t * __restrict buffer, const LOGERR; } } else - cli_SetErr(EINVAL, "Error:: invalid input parameters ..."); + cli_SetErr(EINVAL, "Invalid input parameters ..."); } /* - * cliEnd() Clear data, Free resources and close CLI session + * cliEnd() - Clear data, Free resources and close CLI session + * * @buffer = CLI buffer * return: RETCODE_ERR error, RETCODE_OK ok */ @@ -910,29 +920,30 @@ cliEnd(linebuffer_t * __restrict buffer) if (buffer) { while ((c = SLIST_FIRST(&buffer->line_cmds))) { SLIST_REMOVE_HEAD(&buffer->line_cmds, cmd_next); - io_free(c); + e_free(c); } while ((h = TAILQ_FIRST(&buffer->line_history))) { TAILQ_REMOVE(&buffer->line_history, h, hist_next); - io_free(h); + e_free(h); } if (buffer->line_prompt) - io_free(buffer->line_prompt); + e_free(buffer->line_prompt); if (buffer->line_keys) - io_free(buffer->line_keys); + e_free(buffer->line_keys); if (buffer->line_buf) - io_free(buffer->line_buf); + e_free(buffer->line_buf); - io_free(buffer); + e_free(buffer); buffer = NULL; } else - cli_SetErr(EINVAL, "Error:: invalid input parameters ..."); + cli_SetErr(EINVAL, "Invalid input parameters ..."); } /* - * cliInit() Start CLI session, allocate memory for resources and bind keys + * cliInit() - Start CLI session, allocate memory for resources and bind keys + * * @fin = Input device handle * @fout = Output device handle * @prompt = text for prompt, if NULL disable prompt @@ -946,7 +957,7 @@ cliInit(int fin, int fout, const char *prompt) register int i; /* init buffer */ - buffer = io_malloc(sizeof(linebuffer_t)); + buffer = e_malloc(sizeof(linebuffer_t)); if (!buffer) { LOGERR; return NULL; @@ -960,33 +971,33 @@ cliInit(int fin, int fout, const char *prompt) SLIST_INIT(&buffer->line_cmds); if (prompt) { - buffer->line_prompt = io_strdup(prompt); + buffer->line_prompt = e_strdup(prompt); if (!buffer->line_prompt) { LOGERR; - io_free(buffer); + e_free(buffer); return NULL; } else buffer->line_eol = buffer->line_bol = strlen(buffer->line_prompt); } } - buffer->line_buf = io_malloc(BUFSIZ); + buffer->line_buf = e_malloc(BUFSIZ); if (!buffer->line_buf) { LOGERR; if (buffer->line_prompt) - io_free(buffer->line_prompt); - io_free(buffer); + e_free(buffer->line_prompt); + e_free(buffer); return NULL; } else { memset(buffer->line_buf, 0, BUFSIZ); buffer->line_len = 1 + buffer->line_eol; } - keys = io_calloc(MAX_BINDKEY + 1, sizeof(bindkey_t)); + keys = e_calloc(MAX_BINDKEY + 1, sizeof(bindkey_t)); if (!keys) { LOGERR; if (buffer->line_prompt) - io_free(buffer->line_prompt); - io_free(buffer->line_buf); - io_free(buffer); + e_free(buffer->line_prompt); + e_free(buffer->line_buf); + e_free(buffer); return NULL; } else memset(keys, 0, sizeof(bindkey_t) * (MAX_BINDKEY + 1)); @@ -997,7 +1008,7 @@ cliInit(int fin, int fout, const char *prompt) cli_addCommand(buffer, "-------", 0, NULL, "-------------------------", NULL); /* fill key bindings */ - // ascii chars & ctrl+chars + /* ascii chars & ctrl+chars */ for (i = 0; i < 256; i++) { *keys[i].key_ch = (u_char) i; keys[i].key_len = 1; @@ -1023,14 +1034,14 @@ cliInit(int fin, int fout, const char *prompt) if (i == '?') keys[i].key_func = bufHelp; } - // alt+chars + /* alt+chars */ for (i = 256; i < 512; i++) { keys[i].key_ch[0] = 0x1b; keys[i].key_ch[1] = (u_char) i - 256; keys[i].key_len = 2; } - // 3 bytes + /* 3 bytes */ keys[i].key_len = sizeof K_F1 - 1; memcpy(keys[i].key_ch, K_F1, keys[i].key_len); i++; @@ -1143,7 +1154,7 @@ cliInit(int fin, int fout, const char *prompt) keys[i].key_func = bufBTAB; memcpy(keys[i].key_ch, K_BTAB, keys[i].key_len); i++; - // 4 bytes + /* 4 bytes */ keys[i].key_len = sizeof K_INS - 1; keys[i].key_func = bufMODE; memcpy(keys[i].key_ch, K_INS, keys[i].key_len); @@ -1158,7 +1169,7 @@ cliInit(int fin, int fout, const char *prompt) keys[i].key_len = sizeof K_PGDN - 1; memcpy(keys[i].key_ch, K_PGDN, keys[i].key_len); i++; - // 5 bytes + /* 5 bytes */ keys[i].key_len = sizeof K_F5 - 1; memcpy(keys[i].key_ch, K_F5, keys[i].key_len); i++; @@ -1189,7 +1200,8 @@ cliInit(int fin, int fout, const char *prompt) } /* - * cliInitLine() Init CLI input line terminal + * cliInitLine() - Init CLI input line terminal + * * @buffer = CLI buffer * return: none */ @@ -1208,9 +1220,10 @@ cliInitLine(linebuffer_t * __restrict buffer) } /* - * cliReadLine() Read line from opened CLI session + * cliReadLine() - Read line from opened CLI session + * * @buffer = CLI buffer - * return: NULL if error or !=NULL readed line, must be io_free after use! + * return: NULL if error or !=NULL readed line, must be e_free after use! */ char * cliReadLine(linebuffer_t * __restrict buffer) @@ -1221,7 +1234,7 @@ cliReadLine(linebuffer_t * __restrict buffer) char buf[BUFSIZ], *str = NULL; if (!buffer) { - cli_SetErr(EINVAL, "Error:: invalid input parameters ..."); + cli_SetErr(EINVAL, "Invalid input parameters ..."); return NULL; } @@ -1244,9 +1257,9 @@ cliReadLine(linebuffer_t * __restrict buffer) } if (!readLen) { if (buffer->line_buf) - str = io_strdup(buffer->line_buf); + str = e_strdup(buffer->line_buf); else - cli_SetErr(EPIPE, "Error:: unknown state ..."); + cli_SetErr(EPIPE, "Unknown state ..."); return str; } @@ -1276,13 +1289,14 @@ recheck: } if (code != RETCODE_ERR && code != RETCODE_EOF && buffer->line_buf) - str = io_strdup(buffer->line_buf); + str = e_strdup(buffer->line_buf); return str; } /* - * cliNetLoop() CLI network main loop binded to socket + * cliNetLoop() - CLI network main loop binded to socket + * * @buffer = CLI buffer * @csHistFile = History file name * @sock = client socket @@ -1303,7 +1317,7 @@ cliNetLoop(linebuffer_t * __restrict buffer, const cha return -1; case 0: if (!buffer) { - cli_SetErr(EINVAL, "Error:: invalid input parameters ..."); + cli_SetErr(EINVAL, "Invalid input parameters ..."); return -1; } else close(sock); @@ -1344,7 +1358,7 @@ cliNetLoop(linebuffer_t * __restrict buffer, const cha memset(buf, 0, BUFSIZ); if ((ret = cli_telnetRecv(sock, &a, &alen, buf, BUFSIZ)) < 0) { if (a) - io_free(a); + e_free(a); if (-2 == ret) continue; @@ -1367,7 +1381,7 @@ cliNetLoop(linebuffer_t * __restrict buffer, const cha cli_telnet_SetCmd(&Attr[attrlen++], DONT, TELOPT_LINEMODE); } if (a) - io_free(a); + e_free(a); if ((ret = write(pty, buf, ret)) == -1) { LOGERR; @@ -1397,7 +1411,8 @@ cliNetLoop(linebuffer_t * __restrict buffer, const cha } /* - * cliLoop() CLI main loop + * cliLoop() - CLI main loop + * * @buffer = CLI buffer * @csHistFile = History file name * return: RETCODE_ERR error, RETCODE_OK ok @@ -1459,7 +1474,7 @@ cliLoop(linebuffer_t * __restrict buffer, const char * cli_freeLine(buffer); cli_resetHistory(buffer); - io_free(line); + e_free(line); } while (ret < 1); cli_saveHistory(buffer, csHistFile, HISTORY_LINES);