--- libaitio/src/aitio.c 2012/11/15 23:23:54 1.13 +++ libaitio/src/aitio.c 2013/03/13 14:54:39 1.14 @@ -3,7 +3,7 @@ * by Michael Pounov * * $Author: misho $ -* $Id: aitio.c,v 1.13 2012/11/15 23:23:54 misho Exp $ +* $Id: aitio.c,v 1.14 2013/03/13 14:54:39 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 @@ -46,23 +46,8 @@ SUCH DAMAGE. #include "global.h" -int io_Debug; -mpool_t *io_mpool; - - -/* Memory management */ - -void *(*io_malloc)(size_t) = malloc; -void *(*io_calloc)(size_t, size_t) = calloc; -void *(*io_realloc)(void*, size_t) = realloc; -char *(*io_strdup)(const char*) = strdup; -void (*io_free)(void*) = free; - - #pragma GCC visibility push(hidden) -int use_mm; - int io_Errno; char io_Error[STRSIZ]; @@ -90,98 +75,14 @@ io_SetErr(int eno, char *estr, ...) va_list lst; io_Errno = eno; - memset(io_Error, 0, STRSIZ); + memset(io_Error, 0, sizeof io_Error); va_start(lst, estr); - vsnprintf(io_Error, STRSIZ, estr, lst); + vsnprintf(io_Error, sizeof io_Error, estr, lst); va_end(lst); } -// io_mm_inuse() Check for memory management model -inline int -io_mm_inuse() -{ - return use_mm & IO_MPOOL; -} - -// init libaitio routine -__attribute__((constructor)) void -_io_init() -{ - ioLibInit(IO_MPOOL, 0); -} - -// fini libaitio routine -__attribute__((destructor)) void -_io_fini() -{ - ioLibFini(); -} - /* - * ioLibInit() - Init libaitio library memory management - * - * @mm = memory management (IO_SYSM or IO_MPOOL) - * @maxmem = memory limit - * return: -1 error or !=-1 used memory management model - */ -inline int -ioLibInit(int mm, u_long maxmem) -{ - switch (mm) { - case IO_MPOOL: /* mpool */ - io_mpool = mpool_init(maxmem); - if (io_mpool) { - io_malloc = mpool_xmalloc; - io_calloc = mpool_xcalloc; - io_realloc = mpool_xrealloc; - io_strdup = mpool_xstrdup; - io_free = mpool_xfree; - use_mm = mm; - break; - } else { - #undef USE_MPOOL - } - case IO_SYSM: /* system */ - io_malloc = malloc; - io_calloc = calloc; - io_realloc = realloc; - io_strdup = strdup; - io_free = free; - use_mm = mm; - break; - default: /* not supported */ - io_SetErr(EINVAL, "Not supported memory management"); - return -1; - } - - return use_mm; -} - -/* - * ioLibFini() - Finish libaitio library memory management - * - * return: none - */ -inline void -ioLibFini() -{ - switch (use_mm) { - case IO_MPOOL: - io_malloc = malloc; - io_calloc = calloc; - io_realloc = realloc; - io_strdup = strdup; - io_free = free; - use_mm = IO_SYSM; - - mpool_destroy(&io_mpool); - break; - } -} - - -/* * ioPromptRead() - Read data from input h[0] with prompt to output h[1] * * @h = file handles h[0] = input, h[1] = output, if NULL use stdin, stdout @@ -323,187 +224,6 @@ next: } /* - * ioRegexVerify() - Function for verify data match in regex expression - * - * @csRegex = Regulare expression pattern - * @csData = Data for check and verify - * @startPos = Return start positions - * @endPos = Return end positions - * return: NULL not match or error; !=NULL begin of matched data -*/ -const char * -ioRegexVerify(const char *csRegex, const char *csData, int *startPos, int *endPos) -{ - regex_t re; - regmatch_t match; - char szErr[STRSIZ]; - int ret, flg; - const char *pos; - - if (!csRegex || !csData) - return NULL; - - if ((ret = regcomp(&re, csRegex, REG_EXTENDED))) { - regerror(ret, &re, szErr, STRSIZ); - io_SetErr(ret, "%s", szErr); - regfree(&re); - return NULL; - } - - for (ret = flg = 0, pos = csData; !(ret = regexec(&re, pos, 1, &match, flg)); - pos += match.rm_eo, flg = REG_NOTBOL) { - if (startPos) - *startPos = match.rm_so; - if (endPos) - *endPos = match.rm_eo; - - pos += match.rm_so; - break; - } - - if (ret) { - regerror(ret, &re, szErr, STRSIZ); - io_SetErr(ret, "%s", szErr); - pos = NULL; - } - - regfree(&re); - return pos; -} - -/* - * ioRegexGet() - Function for get data match in regex expression - * - * @csRegex = Regulare expression pattern - * @csData = Data from get - * @psString = Returned string if match - * @strLen = Length of string - * return: 0 not match; >0 count of returned chars -*/ -int -ioRegexGet(const char *csRegex, const char *csData, char * __restrict psString, int strLen) -{ - int sp, ep, len; - const char *str; - - if (!csRegex || !csData) - return -1; - - str = ioRegexVerify(csRegex, csData, &sp, &ep); - if (!str) - return 0; - - len = ep - sp; - if (psString && strLen) { - memset(psString, 0, strLen); - strncpy(psString, str, strLen <= len ? strLen - 1 : len); - } - - return len; -} - -/* - * ioRegexReplace() - Function for replace data match in regex expression with newdata - * - * @csRegex = Regulare expression pattern - * @csData = Source data - * @csNew = Data for replace - * return: NULL not match or error; !=NULL allocated new string, must be io_free after use! -*/ -char * -ioRegexReplace(const char *csRegex, const char *csData, const char *csNew) -{ - int sp, ep, len; - char *str = NULL; - - if (!csRegex || !csData) - return NULL; - - if (!ioRegexVerify(csRegex, csData, &sp, &ep)) - return NULL; - - // ___ before match - len = sp + 1; - str = io_malloc(len); - if (!str) { - LOGERR; - return NULL; - } else - strlcpy(str, csData, len); - // * replace match * - if (csNew) { - len += strlen(csNew); - str = io_realloc(str, len); - if (!str) { - LOGERR; - return NULL; - } else - strlcat(str, csNew, len); - } - // after match ___ - len += strlen(csData) - ep; - str = io_realloc(str, len); - if (!str) { - LOGERR; - return NULL; - } else - strlcat(str, csData + ep, len); - - return str; -} - -/* - * ioStrAst() - Function for evaluate string like asterisk variable "{text[:[-]#[:#]]}" - * - * @csString = Input string - * return: NULL error, !=NULL Allocated new string evaluated from input string, must be io_free() -*/ -char * -ioStrAst(const char *csString) -{ - char *ext, *str, *out = NULL; - int e[2] = { 0 }; - - if (!csString) - return NULL; - - if (!strchr(csString, '{') || !strrchr(csString, '}')) { - memset(io_Error, 0, STRSIZ); - snprintf(io_Error, STRSIZ, "Invalid input string format ... " - "must be like {text[:[-]#[:#]]}"); - io_Errno = EINVAL; - return NULL; - } else { - str = io_strdup(strchr(csString, '{') + 1); - *strrchr(str, '}') = 0; - } - - if ((ext = strchr(str, ':'))) { - *ext++ = 0; - e[0] = strtol(ext, NULL, 0); - if ((ext = strchr(ext, ':'))) - e[1] = strtol(++ext, NULL, 0); - - /* make cut prefix */ - if (e[0] >= 0) - ext = str + e[0]; - else - ext = str + strlen(str) + e[0]; - /* make cut suffix */ - if (e[1] > 0) - *(ext + e[1]) = 0; - } else - /* ok, clear show */ - ext = str; - - out = io_strdup(ext); - io_free(str); - - return out; -} - - -/* * ioMkDir() - Function for racursive directory creation and validation * * @csDir = Full directory path @@ -519,7 +239,7 @@ ioMkDir(const char *csDir, int mode) if (!csDir) return cx; - str = io_strdup(csDir); + str = e_strdup(csDir); if (!str) { LOGERR; return cx; @@ -547,7 +267,7 @@ ioMkDir(const char *csDir, int mode) } end: chdir(szOld); - io_free(str); + e_free(str); return cx; }