|
|
| version 1.13.2.3, 2012/05/23 14:06:08 | version 1.18.4.1, 2012/11/16 13:14:11 |
|---|---|
| Line 303 io_FreeNullTerm(char *** __restrict arr) | Line 303 io_FreeNullTerm(char *** __restrict arr) |
| } | } |
| /* | /* |
| * io_argsNum() Parse and calculate number of arguments | |
| * | |
| * @csArgs = Input arguments line | |
| * @csDelim = Delimiter(s) for separate | |
| * return: 0 error format; -1 error:: can`t read; >0 ok, number of items | |
| */ | |
| inline int | |
| io_argsNum(const char *csArgs, const char *csDelim) | |
| { | |
| register int res; | |
| char *pos; | |
| assert(csArgs); | |
| assert(csDelim); | |
| if (!csArgs || !csDelim) | |
| return -1; | |
| for (res = 1, pos = (char*) csArgs; (pos = strpbrk(pos, csDelim)); res++, pos++); | |
| return res; | |
| } | |
| /* | |
| * io_MakeAV() Parse and make attribute/value pair | |
| * | |
| * @csArgs = Input argument line | |
| * @csDelim = Delimiter for separate | |
| * @psAttr = Output Attribute | |
| * @attrLen = Size of attribute array | |
| * @psValue = Output Value, if ==NULL this element not present value or not wanted for return | |
| * @valLen = Size of value array | |
| * return: 0 error format; -1 error:: can`t read; >0 ok, number of readed items | |
| */ | |
| int | |
| io_MakeAV(const char * __restrict csArgs, const char *csDelim, | |
| char * __restrict psAttr, int attrLen, char * __restrict psValue, int valLen) | |
| { | |
| register int ret = 0; | |
| char *pos, *psBuf; | |
| if (!csArgs || !csDelim || !psAttr || !attrLen) | |
| return -1; | |
| if (psValue && !valLen) | |
| return -1; | |
| else | |
| memset(psValue, 0, valLen); | |
| psBuf = io_strdup(csArgs); | |
| if (!psBuf) { | |
| LOGERR; | |
| return -1; | |
| } | |
| pos = strpbrk(psBuf, csDelim); | |
| if (pos) | |
| *pos++ = 0; | |
| ret++; | |
| strlcpy(psAttr, psBuf, attrLen); | |
| if (pos && *pos) { | |
| ret++; | |
| if (psValue) | |
| strlcpy(psValue, pos, valLen); | |
| } | |
| io_free(psBuf); | |
| return ret; | |
| } | |
| /* | |
| * io_MakeAV2() Parse and make attribute/value pair over input string | |
| * | |
| * @csArgs = Input argument line, will be modified! | |
| * @csDelim = Delimiter for separate | |
| * @psAttr = Output Attribute | |
| * @psValue = Output Value, if ==NULL this element not present value or not wanted for return | |
| * return: 0 error format; -1 error:: can`t read; >0 ok, number of readed items | |
| */ | |
| int | |
| io_MakeAV2(char * __restrict psArgs, const char *csDelim, | |
| char ** __restrict psAttr, char ** __restrict psValue) | |
| { | |
| register int ret = 0; | |
| char *pos; | |
| if (!psArgs || !csDelim) | |
| return -1; | |
| pos = strpbrk(psArgs, csDelim); | |
| if (pos) { | |
| *pos++ = 0; | |
| ret++; | |
| if (psAttr) | |
| *psAttr = psArgs; | |
| } else | |
| return 0; | |
| if (psValue) { | |
| if (pos && *pos) { | |
| ret++; | |
| *psValue = pos; | |
| } else | |
| *psValue = NULL; | |
| } | |
| return ret; | |
| } | |
| /* | |
| * io_Path2File() - Parse and make path/filename pair | * io_Path2File() - Parse and make path/filename pair |
| * | * |
| * @csArgs = Input argument line | * @csArgs = Input argument line |
| Line 486 io_gethostbyname(const char *psHost, u_short port, io_ | Line 593 io_gethostbyname(const char *psHost, u_short port, io_ |
| if (!psHost || !addr) | if (!psHost || !addr) |
| return NULL; | return NULL; |
| else | |
| memset(addr, 0, sizeof(io_sockaddr_t)); | |
| if (*psHost != '/') { | if (*psHost != '/') { |
| /* resolver */ | /* resolver */ |
| Line 498 io_gethostbyname(const char *psHost, u_short port, io_ | Line 603 io_gethostbyname(const char *psHost, u_short port, io_ |
| if (!host) { | if (!host) { |
| io_SetErr(EINVAL, "Resolver #%d - %s", h_errno, hstrerror(h_errno)); | io_SetErr(EINVAL, "Resolver #%d - %s", h_errno, hstrerror(h_errno)); |
| return NULL; | return NULL; |
| } else | } else { |
| memset(addr, 0, sizeof(io_sockaddr_t)); | |
| addr->sa.sa_family = host->h_addrtype; | addr->sa.sa_family = host->h_addrtype; |
| } else | } |
| } else { | |
| memset(addr, 0, sizeof(io_sockaddr_t)); | |
| addr->sa.sa_family = AF_LOCAL; | addr->sa.sa_family = AF_LOCAL; |
| } | |
| switch (addr->sa.sa_family) { | switch (addr->sa.sa_family) { |
| case AF_INET: | case AF_INET: |
| Line 528 io_gethostbyname(const char *psHost, u_short port, io_ | Line 638 io_gethostbyname(const char *psHost, u_short port, io_ |
| } | } |
| return NULL; | return NULL; |
| } | |
| /* | |
| * io_addrcmp() - Compare network addresses | |
| * | |
| * @a = 1st address | |
| * @b = 2nd address | |
| * return: 0 is equal or !=0 is different | |
| */ | |
| int | |
| io_addrcmp(io_sockaddr_t * __restrict a, io_sockaddr_t * __restrict b) | |
| { | |
| if (a && b && a->sa.sa_family == b->sa.sa_family) | |
| switch (a->sa.sa_family) { | |
| case AF_LOCAL: | |
| return strcmp(a->sun.sun_path, b->sun.sun_path); | |
| case AF_INET: | |
| return memcmp(&a->sin.sin_addr, &b->sin.sin_addr, | |
| sizeof a->sin.sin_addr); | |
| case AF_INET6: | |
| return memcmp(&a->sin6.sin6_addr, &b->sin6.sin6_addr, | |
| sizeof a->sin6.sin6_addr); | |
| case AF_LINK: | |
| return memcmp(&a->sdl.sdl_data, &b->sdl.sdl_data, | |
| sizeof a->sdl.sdl_data); | |
| } | |
| return (int) !!(a - b); | |
| } | |
| /* | |
| * io_usleep() - usleep() replacement for ELWIX | |
| * | |
| * @usec = microseconds for sleep | |
| * return: -1 interrupted by signal or 0 ok | |
| */ | |
| inline int | |
| io_usleep(u_int usec) | |
| { | |
| struct timeval tv = { (time_t) (usec / 1000000), (long) (usec % 1000000) }; | |
| return select(0, NULL, NULL, NULL, &tv); | |
| } | } |