comparison compat.h @ 581:53639d920735

Fixes for Windows, alloca is _alloc in MSVC, added a macro in compat.h.
author bsmith@81767d24-ef19-dc11-ae90-00e081727c95
date Fri, 20 May 2005 03:55:03 +0000
parents d7c338ac926a
children ce08e7a56724
comparison
equal deleted inserted replaced
580:d7c338ac926a 581:53639d920735
140 #include <process.h> 140 #include <process.h>
141 #include <sys/stat.h> 141 #include <sys/stat.h>
142 142
143 #ifdef MSVC 143 #ifdef MSVC
144 #include "platform/dirent.h" 144 #include "platform/dirent.h"
145 #define alloca _alloca
145 #else 146 #else
146 #include <dir.h> 147 #include <dir.h>
147 #include <dirent.h> 148 #include <dirent.h>
148 #endif 149 #endif
149 150
294 } 295 }
295 #else 296 #else
296 #define sockpipe(pipes) { \ 297 #define sockpipe(pipes) { \
297 struct sockaddr_in server_addr; \ 298 struct sockaddr_in server_addr; \
298 struct sockaddr_in listen_addr = { 0 }; \ 299 struct sockaddr_in listen_addr = { 0 }; \
299 int len = sizeof(struct sockaddr_in); \ 300 int tmpsock, len = sizeof(struct sockaddr_in); \
300 struct hostent *he = gethostbyname("localhost"); \ 301 struct hostent *he = gethostbyname("localhost"); \
301 pipes[0] = pipes[1] = -1; \ 302 pipes[0] = pipes[1] = -1; \
302 if(he) \ 303 if(he) \
303 { \ 304 { \
304 memset(&server_addr, 0, sizeof(server_addr)); \ 305 memset(&server_addr, 0, sizeof(server_addr)); \
305 server_addr.sin_family = AF_INET; \ 306 server_addr.sin_family = AF_INET; \
306 server_addr.sin_port = 0; \ 307 server_addr.sin_port = 0; \
307 server_addr.sin_addr.s_addr = INADDR_ANY; \ 308 server_addr.sin_addr.s_addr = INADDR_ANY; \
308 if ((tmpsock = socket(AF_INET, SOCK_STREAM, 0)) < 0 || bind(tmpsock, (struct sockaddr *)&server_addr, sizeof(server_addr)) < 0 || listen(tmpsock, 0) < 0) \ 309 if ((tmpsock = socket(AF_INET, SOCK_STREAM, 0)) > -1 && bind(tmpsock, (struct sockaddr *)&server_addr, sizeof(server_addr)) > -1 && listen(tmpsock, 0) > -1) \
309 break; \ 310 { \
310 memset(&listen_addr, 0, sizeof(listen_addr)); \ 311 memset(&listen_addr, 0, sizeof(listen_addr)); \
311 getsockname(tmpsock, (struct sockaddr *)&listen_addr, &len); \ 312 getsockname(tmpsock, (struct sockaddr *)&listen_addr, &len); \
312 server_addr.sin_family = AF_INET; \ 313 server_addr.sin_family = AF_INET; \
313 server_addr.sin_port = listen_addr.sin_port; \ 314 server_addr.sin_port = listen_addr.sin_port; \
314 server_addr.sin_addr.s_addr = *((unsigned long *)he->h_addr); \ 315 server_addr.sin_addr.s_addr = *((unsigned long *)he->h_addr); \
315 if((pipes[1] = socket(AF_INET, SOCK_STREAM, 0)) < 0 || connect(pipes[1], (struct sockaddr *)&server_addr, sizeof(server_addr))) \ 316 if((pipes[1] = socket(AF_INET, SOCK_STREAM, 0)) > -1 && !connect(pipes[1], (struct sockaddr *)&server_addr, sizeof(server_addr))) \
316 break; \ 317 pipes[0] = accept(tmpsock, 0, 0); \
317 else \ 318 } \
318 pipes[0] = accept(tmpsock, 0, 0); \
319 sockclose(tmpsock); \ 319 sockclose(tmpsock); \
320 } 320 } \
321 }
321 #endif 322 #endif
322 323
323 #define socksprint(a, b) sockwrite(a, b, strlen(b), 0) 324 #define socksprint(a, b) sockwrite(a, b, strlen(b), 0)
324 325
325 char * API vargs(char *buf, int len, char *format, ...); 326 char * API vargs(char *buf, int len, char *format, ...);