Mercurial > dwindows
changeset 2239:95ad22a4da2d
Bump version to 3.2 now that we are post 3.1 release.
Rename the fallback sockpipe() macro to oldsockpipe() which is now always available.
If compiled with domain socket support and domain sockets fail to create, fallback to oldsockpipe().
This hopefully will let us just have a single build for Vista to 10 with domain socket support.
author | bsmith@81767d24-ef19-dc11-ae90-00e081727c95 |
---|---|
date | Fri, 15 Jan 2021 19:22:27 +0000 |
parents | a0784aa36bde |
children | 7f6939857cca |
files | Version dw.h dwcompat.h |
diffstat | 3 files changed, 39 insertions(+), 31 deletions(-) [+] |
line wrap: on
line diff
--- a/Version Wed Jan 06 17:52:51 2021 +0000 +++ b/Version Fri Jan 15 19:22:27 2021 +0000 @@ -1,3 +1,3 @@ # Set these here to change the version for all platforms DW_MAJOR_VERSION=3 -DW_MINOR_VERSION=1 +DW_MINOR_VERSION=2
--- a/dw.h Wed Jan 06 17:52:51 2021 +0000 +++ b/dw.h Fri Jan 15 19:22:27 2021 +0000 @@ -9,7 +9,7 @@ /* Dynamic Windows version numbers */ #define DW_MAJOR_VERSION 3 -#define DW_MINOR_VERSION 1 +#define DW_MINOR_VERSION 2 #define DW_SUB_VERSION 0 #define DW_HOME_URL "http://dwindows.netlabs.org"
--- a/dwcompat.h Wed Jan 06 17:52:51 2021 +0000 +++ b/dwcompat.h Fri Jan 15 19:22:27 2021 +0000 @@ -369,25 +369,7 @@ #define sockshutdown() #endif -#ifdef HAVE_PIPE -#define sockpipe(pipes) { if(pipe(pipes) < 0) pipes[0] = pipes[1] = -1; } -#elif !defined(NO_DOMAIN_SOCKETS) -#define sockpipe(pipes) { \ - struct sockaddr_un un; \ - int tmpsock = socket(AF_UNIX, SOCK_STREAM, 0); \ - pipes[1] = socket(AF_UNIX, SOCK_STREAM, 0); \ - memset(&un, 0, sizeof(un)); \ - un.sun_family=AF_UNIX; \ - sprintf(un.sun_path, PIPENAME, PIPEROOT, (int)getpid(), pipes[1]); \ - unlink(un.sun_path); \ - bind(tmpsock, (struct sockaddr *)&un, sizeof(un)); \ - listen(tmpsock, 0); \ - connect(pipes[1], (struct sockaddr *)&un, sizeof(un)); \ - pipes[0] = accept(tmpsock, 0, 0); \ - sockclose(tmpsock); \ - } -#else -#define sockpipe(pipes) { \ +#define oldsockpipe(pipes) { \ struct sockaddr_in server_addr; \ struct sockaddr_in listen_addr = { 0 }; \ int tmpsock, len = sizeof(struct sockaddr_in); \ @@ -400,18 +382,44 @@ server_addr.sin_port = 0; \ server_addr.sin_addr.s_addr = INADDR_ANY; \ if ((tmpsock = socket(AF_INET, SOCK_STREAM, 0)) > -1 && bind(tmpsock, (struct sockaddr *)&server_addr, sizeof(server_addr)) > -1 && listen(tmpsock, 0) > -1) \ - { \ - memset(&listen_addr, 0, sizeof(listen_addr)); \ - getsockname(tmpsock, (struct sockaddr *)&listen_addr, &len); \ - server_addr.sin_family = AF_INET; \ - server_addr.sin_port = listen_addr.sin_port; \ - server_addr.sin_addr.s_addr = *((unsigned long *)he->h_addr); \ - if((pipes[1] = socket(AF_INET, SOCK_STREAM, 0)) > -1 && !connect(pipes[1], (struct sockaddr *)&server_addr, sizeof(server_addr))) \ - pipes[0] = accept(tmpsock, 0, 0); \ - } \ - sockclose(tmpsock); \ + { \ + memset(&listen_addr, 0, sizeof(listen_addr)); \ + getsockname(tmpsock, (struct sockaddr *)&listen_addr, &len); \ + server_addr.sin_family = AF_INET; \ + server_addr.sin_port = listen_addr.sin_port; \ + server_addr.sin_addr.s_addr = *((unsigned long *)he->h_addr); \ + if((pipes[1] = socket(AF_INET, SOCK_STREAM, 0)) > -1 && !connect(pipes[1], (struct sockaddr *)&server_addr, sizeof(server_addr))) \ + pipes[0] = accept(tmpsock, 0, 0); \ + } \ + if(tmpsock > -1) \ + sockclose(tmpsock); \ } \ } + +#ifdef HAVE_PIPE +#define sockpipe(pipes) { if(pipe(pipes) < 0) pipes[0] = pipes[1] = -1; } +#elif !defined(NO_DOMAIN_SOCKETS) +#define sockpipe(pipes) { \ + struct sockaddr_un un; \ + int tmpsock = socket(AF_UNIX, SOCK_STREAM, 0); \ + pipes[0] = pipes[1] = -1; \ + if(tmpsock > -1 && (pipes[1] = socket(AF_UNIX, SOCK_STREAM, 0)) > -1) \ + { \ + memset(&un, 0, sizeof(un)); \ + un.sun_family=AF_UNIX; \ + sprintf(un.sun_path, PIPENAME, PIPEROOT, (int)getpid(), pipes[1]); \ + unlink(un.sun_path); \ + bind(tmpsock, (struct sockaddr *)&un, sizeof(un)); \ + listen(tmpsock, 0); \ + connect(pipes[1], (struct sockaddr *)&un, sizeof(un)); \ + pipes[0] = accept(tmpsock, 0, 0); \ + } else \ + oldsockpipe(pipes); \ + if(tmpsock > -1) \ + sockclose(tmpsock); \ + } +#else +#define sockpipe(pipes) oldsockpipe(pipes) #endif /* Ok Windows and OS/2 both seem to be missing this */