Fix the build with MSVC: nssocket() a function everywhere

Outside Linux nssocket() was a macro, and two of its callers have #ifdef
WITH_UN among its arguments. Preprocessor directives in macro arguments
are undefined behaviour: gcc and clang take them, MSVC does not. It is a
function on every system now.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
Vladimir Dubrovin 2026-10-12 22:04:01 +03:00
parent 43ae0389bf
commit 3d5da0105d
2 changed files with 8 additions and 3 deletions

View File

@ -77,6 +77,11 @@ SOCKET nssocket(struct srvparam *srv, struct sockfuncs *sf, void *state, int sid
errno = err;
return s;
}
#else
/* no network namespaces: a socket is made where it always is */
SOCKET nssocket(struct srvparam *srv, struct sockfuncs *sf, void *state, int side, int domain, int type, int protocol){
return sf->_socket(state, domain, type, protocol);
}
#endif

View File

@ -245,10 +245,10 @@ int socks5_setaddr(int family, int atyp, const unsigned char *addr, PROXYSOCKADD
#ifdef __linux__
extern int mainnsfd;
int nsopen(void);
SOCKET nssocket(struct srvparam *srv, struct sockfuncs *sf, void *state, int side, int domain, int type, int protocol);
#else
#define nssocket(srv, sf, state, side, domain, type, protocol) ((sf)->_socket((state), (domain), (type), (protocol)))
#endif
/* a function everywhere, never a macro: its callers have preprocessor
lines among its arguments */
SOCKET nssocket(struct srvparam *srv, struct sockfuncs *sf, void *state, int side, int domain, int type, int protocol);
int socksend(struct clientparam *param, SOCKET sock, unsigned char * buf, int bufsize, int to);
int socksendto(struct clientparam *param, SOCKET sock, struct sockaddr * sin, unsigned char * buf, int bufsize, int to);
int sockrecvfrom(struct clientparam *param, SOCKET sock, struct sockaddr * sin, unsigned char * buf, int bufsize, int to);