From 2b4c25bd2cac034cdc52d29d6bb8c675c87a731c Mon Sep 17 00:00:00 2001 From: Ron Yorston Date: Sun, 5 Apr 2020 09:49:57 +0100 Subject: win32: new functions: getpeername(2), mingw_spawn_detach() Implement getpeername(2). Add mingw_spawn_detach() to allow the spawned process to detach from the console. --- win32/net.c | 12 ++++++++++++ win32/process.c | 18 +++++++++++++++--- 2 files changed, 27 insertions(+), 3 deletions(-) (limited to 'win32') diff --git a/win32/net.c b/win32/net.c index 2341119b0..01fa16a4e 100644 --- a/win32/net.c +++ b/win32/net.c @@ -99,3 +99,15 @@ int mingw_accept(int sockfd1, struct sockaddr *sa, socklen_t *sz) } return sockfd2; } + +#undef getpeername +int mingw_getpeername(int fd, struct sockaddr *sa, socklen_t *sz) +{ + SOCKET sock = (SOCKET)_get_osfhandle(fd); + + if (sock == INVALID_SOCKET) { + errno = EBADF; + return -1; + } + return getpeername(sock, sa, sz); +} diff --git a/win32/process.c b/win32/process.c index 4257fd689..67ce3c100 100644 --- a/win32/process.c +++ b/win32/process.c @@ -334,16 +334,28 @@ mingw_spawn_1(int mode, const char *cmd, char *const *argv, char *const *envp) return -1; } -pid_t FAST_FUNC -mingw_spawn(char **argv) +static pid_t +mingw_spawn_pid(int mode, char **argv) { intptr_t ret; - ret = mingw_spawn_proc((const char **)argv); + ret = mingw_spawn_1(mode, argv[0], (char *const *)argv, environ); return ret == -1 ? -1 : GetProcessId((HANDLE)ret); } +pid_t FAST_FUNC +mingw_spawn(char **argv) +{ + return mingw_spawn_pid(P_NOWAIT, argv); +} + +pid_t FAST_FUNC +mingw_spawn_detach(char **argv) +{ + return mingw_spawn_pid(P_DETACH, argv); +} + intptr_t FAST_FUNC mingw_spawn_proc(const char **argv) { -- cgit v1.2.3-55-g6feb