version 1.18, 2012/09/19 15:19:53
|
version 1.20, 2012/12/19 11:03:04
|
Line 641 io_gethostbyname(const char *psHost, u_short port, io_
|
Line 641 io_gethostbyname(const char *psHost, u_short port, io_
|
} |
} |
|
|
/* |
/* |
|
* io_addrcmp() - Compare network addresses |
|
* |
|
* @a = 1st address |
|
* @b = 2nd address |
|
* @p = compare and ports, if family is AF_INET or AF_INET6 |
|
* return: 0 is equal or !=0 is different |
|
*/ |
|
int |
|
io_addrcmp(io_sockaddr_t * __restrict a, io_sockaddr_t * __restrict b, int p) |
|
{ |
|
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: |
|
if (p && (a->sin.sin_port - b->sin.sin_port)) |
|
return (int) !!(a->sin.sin_port - b->sin.sin_port); |
|
else |
|
return memcmp(&a->sin.sin_addr, &b->sin.sin_addr, |
|
sizeof a->sin.sin_addr); |
|
case AF_INET6: |
|
if (p && (a->sin6.sin6_port - b->sin6.sin6_port)) |
|
return (int) !!(a->sin6.sin6_port - b->sin6.sin6_port); |
|
else |
|
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 |
* io_usleep() - usleep() replacement for ELWIX |
* |
* |
* @usec = microseconds for sleep |
* @usec = microseconds for sleep |
Line 652 io_usleep(u_int usec)
|
Line 687 io_usleep(u_int usec)
|
struct timeval tv = { (time_t) (usec / 1000000), (long) (usec % 1000000) }; |
struct timeval tv = { (time_t) (usec / 1000000), (long) (usec % 1000000) }; |
|
|
return select(0, NULL, NULL, NULL, &tv); |
return select(0, NULL, NULL, NULL, &tv); |
|
} |
|
|
|
/* |
|
* io_AV2Path() - Attribute/Value pair store to file |
|
* |
|
* @csPath = Directory |
|
* @csAttr = Attribute |
|
* @csVal = Value |
|
* @update = Update if a/v exists |
|
* @perm = File permissions, if =0 set default perm=0600 |
|
* return: -1 error or >-1 written bytes |
|
*/ |
|
int |
|
io_AV2Path(const char *csPath, const char *csAttr, const char *csVal, |
|
int update, int perm) |
|
{ |
|
int fd, wlen = 0; |
|
char szFile[MAXPATHLEN]; |
|
|
|
if (!csAttr) |
|
return -1; |
|
else |
|
memset(szFile, 0, sizeof szFile); |
|
snprintf(szFile, sizeof szFile, "%s/%s.av", csPath ? csPath : ".", csAttr); |
|
|
|
wlen = O_CREAT | O_WRONLY; |
|
if (!update) |
|
wlen |= O_EXCL; |
|
fd = open(szFile, wlen, perm ? perm : 0600); |
|
if (fd == -1) { |
|
LOGERR; |
|
return -1; |
|
} else |
|
wlen ^= wlen; |
|
|
|
if (csVal) |
|
if ((wlen = write(fd, csVal, strlen(csVal))) == -1) { |
|
LOGERR; |
|
close(fd); |
|
unlink(szFile); |
|
return -1; |
|
} |
|
|
|
close(fd); |
|
return wlen; |
|
} |
|
|
|
/* |
|
* io_Path2AV() - Get stored Attribute/Value |
|
* |
|
* @csPath = Directory |
|
* @csAttr = Attribute |
|
* @psVal = Value |
|
* @valLen = Value length |
|
* @del = Delete a/v pair after read |
|
* return: -1 error or >-1 readed bytes |
|
*/ |
|
int |
|
io_Path2AV(const char *csPath, const char *csAttr, char *psVal, int valLen, int del) |
|
{ |
|
int fd, rlen = 0; |
|
char szFile[MAXPATHLEN]; |
|
|
|
if (!csAttr) |
|
return -1; |
|
else |
|
memset(szFile, 0, sizeof szFile); |
|
snprintf(szFile, sizeof szFile, "%s/%s.av", csPath ? csPath : ".", csAttr); |
|
|
|
if (psVal && valLen) { |
|
fd = open(szFile, O_RDONLY); |
|
if (fd == -1) { |
|
LOGERR; |
|
return -1; |
|
} else |
|
rlen ^= rlen; |
|
|
|
memset(psVal, 0, valLen); |
|
rlen = read(fd, psVal, valLen - 1); |
|
if (rlen == -1) { |
|
LOGERR; |
|
close(fd); |
|
return -1; |
|
} |
|
|
|
close(fd); |
|
} |
|
|
|
if (del) |
|
unlink(szFile); |
|
return rlen; |
} |
} |