--- libaitio/src/aitio.c 2011/11/02 16:10:25 1.7.2.2 +++ libaitio/src/aitio.c 2012/05/23 11:49:35 1.10.6.1 @@ -3,7 +3,7 @@ * by Michael Pounov * * $Author: misho $ -* $Id: aitio.c,v 1.7.2.2 2011/11/02 16:10:25 misho Exp $ +* $Id: aitio.c,v 1.10.6.1 2012/05/23 11:49:35 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 +Copyright 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012 by Michael Pounov . All rights reserved. Redistribution and use in source and binary forms, with or without @@ -86,7 +86,8 @@ io_SetErr(int eno, char *estr, ...) /* - * ioPromptRead() Read data from input h[0] with prompt to output h[1] + * 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 * @csPrompt = Prompt before input, may be NULL * @psData = Readed data @@ -139,7 +140,8 @@ ioPromptRead(int *h, const char *csPrompt, char * __re } /* - * ioPromptPassword() Read password from input h[0] with prompt to output h[1] + * ioPromptPassword() - Read password from input h[0] with prompt to output h[1] + * * @h = file handles h[0] = input, h[1] = output, if NULL use stdin, stdout * @csPrompt = Prompt before input, may be NULL * @psPass = Readed password @@ -225,7 +227,8 @@ next: } /* - * ioRegexVerify() Function for verify data match in regex expression + * ioRegexVerify() - Function for verify data match in regex expression + * * @csRegex = Regulare expression pattern * @csData = Data for check and verify * @startPos = Return start positions @@ -246,7 +249,7 @@ ioRegexVerify(const char *csRegex, const char *csData, if ((ret = regcomp(&re, csRegex, REG_EXTENDED))) { regerror(ret, &re, szErr, STRSIZ); - io_SetErr(ret, "Error:: %s\n", szErr); + io_SetErr(ret, "%s", szErr); regfree(&re); return NULL; } @@ -264,7 +267,7 @@ ioRegexVerify(const char *csRegex, const char *csData, if (ret) { regerror(ret, &re, szErr, STRSIZ); - io_SetErr(ret, "Error:: %s\n", szErr); + io_SetErr(ret, "%s", szErr); pos = NULL; } @@ -273,7 +276,8 @@ ioRegexVerify(const char *csRegex, const char *csData, } /* - * ioRegexGet() Function for get data match in regex expression + * ioRegexGet() - Function for get data match in regex expression + * * @csRegex = Regulare expression pattern * @csData = Data from get * @psString = Returned string if match @@ -303,11 +307,12 @@ ioRegexGet(const char *csRegex, const char *csData, ch } /* - * ioRegexReplace() Function for replace data match in regex expression with newdata + * 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 free after use! + * return: NULL not match or error; !=NULL allocated new string, must be xfree after use! */ char * ioRegexReplace(const char *csRegex, const char *csData, const char *csNew) @@ -323,7 +328,7 @@ ioRegexReplace(const char *csRegex, const char *csData // ___ before match len = sp + 1; - str = malloc(len); + str = xmalloc(len); if (!str) { LOGERR; return NULL; @@ -332,7 +337,7 @@ ioRegexReplace(const char *csRegex, const char *csData // * replace match * if (csNew) { len += strlen(csNew); - str = realloc(str, len); + str = xrealloc(str, len); if (!str) { LOGERR; return NULL; @@ -341,7 +346,7 @@ ioRegexReplace(const char *csRegex, const char *csData } // after match ___ len += strlen(csData) - ep; - str = realloc(str, len); + str = xrealloc(str, len); if (!str) { LOGERR; return NULL; @@ -352,12 +357,13 @@ ioRegexReplace(const char *csRegex, const char *csData } /* - * ioVarAst() Function for evaluate string like asterisk variable "{text[:[-]#[:#]]}" + * 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 free() + * return: NULL error, !=NULL Allocated new string evaluated from input string, must be xfree() */ char * -ioVarAst(const char *csString) +ioStrAst(const char *csString) { char *ext, *str, *out = NULL; int e[2] = { 0 }; @@ -367,7 +373,7 @@ ioVarAst(const char *csString) if (!strchr(csString, '{') || !strrchr(csString, '}')) { memset(io_Error, 0, STRSIZ); - snprintf(io_Error, STRSIZ, "Error:: Invalid input string format ... " + snprintf(io_Error, STRSIZ, "Invalid input string format ... " "must be like {text[:[-]#[:#]]}"); io_Errno = EINVAL; return NULL; @@ -395,14 +401,15 @@ ioVarAst(const char *csString) ext = str; out = strdup(ext); - free(str); + xfree(str); return out; } /* - * ioMkDir() Function for racursive directory creation and validation + * ioMkDir() - Function for racursive directory creation and validation + * * @csDir = Full directory path * @mode = Mode for directory creation if missing dir * return: -1 error, 0 directory path exist, >0 created missing dirs @@ -444,12 +451,13 @@ ioMkDir(const char *csDir, int mode) } end: chdir(szOld); - free(str); + xfree(str); return cx; } /* - * ioWatchDirLoop() Function for watching changes in directory and fire callback + * ioWatchDirLoop() - Function for watching changes in directory and fire callback + * * @csDir = Full directory path * @callback = Callback if raise event! nOp -1 delete, 0 change/move, 1 create * return: -1 error, !=-1 ok, number of total signaled events @@ -560,7 +568,8 @@ ioWatchDirLoop(const char *csDir, int (*callback)(cons } /* - * ioCreatePIDFile() Create PID file + * ioCreatePIDFile() - Create PID file + * * @csName = PID filename * @ifExists = !=0 if filename exists return error * return: -1 error or 0 ok @@ -587,7 +596,8 @@ ioCreatePIDFile(const char *csName, int ifExists) /* - * ioSendFile() AITNET sendfile() userland implementation, not dependant from OS + * ioSendFile() - AITNET sendfile() userland implementation, not dependant from OS + * * @s = socket * @csFile = file for send * @sendLen = bytes to send, if 0 send all data @@ -653,7 +663,8 @@ ioSendFile(int s, const char *csFile, size_t sendLen, } /* - * ioRecvFile() Receive file from socket, fastest (zero-copy) way + * ioRecvFile() - Receive file from socket, fastest (zero-copy) way + * * @s = socket * @csFile = file for receive * @recvLen = receive bytes @@ -687,13 +698,7 @@ ioRecvFile(int s, const char *csFile, size_t recvLen, unlink(csFile); return 0; } - if (lseek(fd, recvLen - 1, SEEK_SET) == -1) { - LOGERR; - close(fd); - unlink(csFile); - return 0; - } - if (write(fd, "", 1) == -1) { + if (ftruncate(fd, recvLen) == -1) { LOGERR; close(fd); unlink(csFile);