Mercurial > dwindows
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, ...); |