--- libelwix/src/elwix.c 2013/01/17 10:05:35 1.1.1.1 +++ libelwix/src/elwix.c 2016/08/11 13:19:16 1.8.8.1 @@ -3,7 +3,7 @@ * by Michael Pounov * * $Author: misho $ -* $Id: elwix.c,v 1.1.1.1 2013/01/17 10:05:35 misho Exp $ +* $Id: elwix.c,v 1.8.8.1 2016/08/11 13:19:16 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 @@ -71,35 +71,35 @@ char elwix_Error[STRSIZ]; // elwix_SetProg() Set program memory pool name -inline void +void elwix_SetProg(const char *csProgName) { strlcpy((char*) elwix_Prog, csProgName, sizeof elwix_Prog); } // elwix_GetProg() Get program memory pool name -inline const char * +const char * elwix_GetProg() { return elwix_Prog; } // elwix_GetErrno() Get error code of last operation -inline int +int elwix_GetErrno() { return elwix_Errno; } // elwix_GetError() Get error text of last operation -inline const char * +const char * elwix_GetError() { return elwix_Error; } // elwix_SetErr() Set error to variables for internal use!!! -inline void +void elwix_SetErr(int eno, char *estr, ...) { va_list lst; @@ -112,22 +112,23 @@ elwix_SetErr(int eno, char *estr, ...) } // elwix_mm_inuse() Check for memory management model -inline int +int elwix_mm_inuse() { return use_mm & ELWIX_MPOOL; } +#pragma GCC visibility push(hidden) // init libelwix routine -__attribute__((constructor)) void +__attribute__((constructor)) static void _elwix_init() { - elwixInit(ELWIX_MPOOL, 0); + elwixInit(MEMMGR, 0); } // fini libelwix routine -__attribute__((destructor)) void +__attribute__((destructor)) static void _elwix_fini() { elwixFini(); @@ -173,7 +174,7 @@ elwixInit(int mm, u_long maxmem) } /* - * elwixFini() - Finish libaitio library memory management + * elwixFini() - Finish libelwix library memory management * * return: none */ @@ -193,3 +194,85 @@ elwixFini() break; } } +#pragma GCC visibility pop + +/* + * elwix_byteOrder() - Detect platform byte order + * + * return: 1 = little endian or 0 big endian + */ +int +elwix_byteOrder() +{ + int x = 1; + + return *(char*) &x; +} + +#ifndef strlcpy +/* + * Copy src to string dst of size siz. At most siz-1 characters + * will be copied. Always NUL terminates (unless siz == 0). + * Returns strlen(src); if retval >= siz, truncation occurred. + */ +size_t +strlcpy(char *dst, const char *src, size_t siz) +{ + char *d = dst; + const char *s = src; + register size_t n = siz; + + /* Copy as many bytes as will fit */ + if (n) + while (--n) + if ((*d++ = *s++) == '\0') + break; + + /* Not enough room in dst, add NUL and traverse rest of src */ + if (!n) { + if (siz) + *d = '\0'; /* NUL-terminate dst */ + while (*s++); + } + + return (s - src - 1); /* count does not include NUL */ +} +#endif + +#ifndef strlcat +/* + * Appends src to string dst of size siz (unlike strncat, siz is the + * full size of dst, not space left). At most siz-1 characters + * will be copied. Always NUL terminates (unless siz <= strlen(dst)). + * Returns strlen(src) + MIN(siz, strlen(initial dst)). + * If retval >= siz, truncation occurred. + */ +size_t +strlcat(char *dst, const char *src, size_t siz) +{ + char *d = dst; + const char *s = src; + register size_t n = siz; + size_t dlen; + + /* Find the end of dst and adjust bytes left but don't go past end */ + while (n-- && *d != '\0') + d++; + + dlen = d - dst; + n = siz - dlen; + if (!n) + return (dlen + strlen(s)); + + while (*s != '\0') { + if (n != 1) { + *d++ = *s; + n--; + } + s++; + } + *d = '\0'; + + return (dlen + (s - src)); /* count does not include NUL */ +} +#endif