--- libaitio/src/aitio.c 2013/03/13 14:54:39 1.14 +++ libaitio/src/aitio.c 2016/08/10 14:01:51 1.17.8.2 @@ -3,7 +3,7 @@ * by Michael Pounov * * $Author: misho $ -* $Id: aitio.c,v 1.14 2013/03/13 14:54:39 misho Exp $ +* $Id: aitio.c,v 1.17.8.2 2016/08/10 14:01:51 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, 2013 +Copyright 2004 - 2016 by Michael Pounov . All rights reserved. Redistribution and use in source and binary forms, with or without @@ -55,21 +55,21 @@ char io_Error[STRSIZ]; // io_GetErrno() Get error code of last operation -inline int +int io_GetErrno() { return io_Errno; } // io_GetError() Get error text of last operation -inline const char * +const char * io_GetError() { return io_Error; } // io_SetErr() Set error to variables for internal use!!! -inline void +void io_SetErr(int eno, char *estr, ...) { va_list lst; @@ -121,7 +121,11 @@ ioPromptRead(int *h, const char *csPrompt, char * __re memset(szLine, 0, BUFSIZ); if (!fgets(szLine, BUFSIZ, inp)) { clearerr(inp); +#ifdef HAVE_FPURGE fpurge(out); +#else + __fpurge(out); +#endif fflush(out); return 0; } @@ -390,7 +394,7 @@ ioWatchDirLoop(const char *csDir, int (*callback)(cons * @ifExists = !=0 if filename exists return error * return: -1 error or 0 ok */ -inline int +int ioCreatePIDFile(const char *csName, int ifExists) { int fd; @@ -546,4 +550,37 @@ ioRecvFile(int s, const char *csFile, size_t recvLen, munmap(addr, recvLen); return len; +} + +/* + * ioRealFileName() - Get real file name + * + * @fname = filename + * return: =NULL error or !=NULL real filename, should be free with e_free() + */ +char * +ioRealFileName(const char *fname) +{ + char *str = NULL; + struct stat sb; + + if (!fname) + return NULL; + + str = e_malloc(MAXPATHLEN); + if (!str) { + io_SetErr(elwix_GetErrno(), "%s", elwix_GetError()); + return NULL; + } else + memset(str, 0, MAXPATHLEN); + if (readlink(fname, str, MAXPATHLEN) == -1) { + if (stat(fname, &sb) == -1) { + LOGERR; + e_free(str); + return NULL; + } else + strlcpy(str, fname, MAXPATHLEN); + } + + return str; }