return number;
}
static int get_options(void) {
- const char *pos = getenv("SOCKET2UNIX_OPTIONS");
- if (!pos) {
+ const char *start = getenv("SOCKET2UNIX_OPTIONS");
+ if (!start) {
return OPTION_PARSED;
}
int options = OPTION_PARSED;
- while (*pos != '\0') {
+ const char *end = start + strlen(start);
+ const char *pos, *curend;
+
+ for (pos = start; pos < end; pos = curend + 1) {
size_t length;
- const char *end = strchr(pos, ',');
- if (end == NULL) {
- length = strlen(pos);
- } else {
- length = (size_t)(end - pos);
+ curend = strchr(pos, ',');
+ if (curend == NULL) {
+ curend = end;
}
+ length = (size_t)(curend - pos);
if (!strncmp("client_only", pos, length)) {
options |= OPTION_CLIENT_ONLY;
ERROR("unknown option '%s' in SOCKET2UNIX_OPTIONS\n",
option);
}
-
- if (end == NULL) {
- break;
- }
- pos = end + 1;
}
if ((options & OPTION_CLIENT_ONLY) && (options & OPTION_SERVER_ONLY)) {
int port;
if (addr->sa_family == AF_INET) {
af = "v4";
- port = ntohs(((struct sockaddr_in *)addr)->sin_port);
+ port = ntohs(((const struct sockaddr_in *)addr)->sin_port);
} else if (addr->sa_family == AF_INET6) {
af = "v6";
- port = ntohs(((struct sockaddr_in6 *)addr)->sin6_port);
+ port = ntohs(((const struct sockaddr_in6 *)addr)->sin6_port);
} else {
af = "unknown";
port = 0;
static int (*real_close)(int);
LOAD_FUNCTION(real_close, "close");
- DBG("close(%d)\n", fd);
-
struct list *entry = remove_sockfd(fd);
if (entry == NULL) {
DBG("close(%d): sockfd not found\n", fd);
return real_close(fd);
}
assert(fd == entry->orig_sockfd);
+
+ DBG("close(%d)\n", fd);
free(entry->orig_addr);
free(entry);
static int (*real_bind)(int, const struct sockaddr *, socklen_t);
LOAD_FUNCTION(real_bind, "bind");
- DBG("bind(%d, ..)\n", sockfd);
-
if (addr == NULL || addrlen < sizeof(addr->sa_family)
|| addr->sa_family == AF_UNIX
|| addr->sa_family == AF_LOCAL) {
return real_accept(sockfd, addr, addrlen);
}
- DBG("accept(%d, ..)\n", sockfd);
-
struct list *entry = find_sockfd(sockfd);
if (!entry) {
DBG("accept(%d, ..): sockfd not found\n", sockfd);
return real_connect(sockfd, addr, addrlen);
}
- DBG("connect(%d, ..)\n", sockfd);
-
if (addr == NULL || addrlen < sizeof(addr->sa_family)
|| addr->sa_family == AF_UNIX
|| addr->sa_family == AF_LOCAL) {