diff options
Diffstat (limited to 'tests/server/util.c')
-rw-r--r-- | tests/server/util.c | 49 |
1 files changed, 49 insertions, 0 deletions
diff --git a/tests/server/util.c b/tests/server/util.c index a3894cb44..d88f7ef1e 100644 --- a/tests/server/util.c +++ b/tests/server/util.c @@ -96,3 +96,52 @@ void logmsg(const char *msg, ...) if(logfp) fclose(logfp); } + +#if defined(WIN32) && !defined(__CYGWIN__) +/* use instead of perror() on generic windows */ +void win32_perror (const char *msg) +{ + char buf[256]; + DWORD err = WSAGetLastError(); + + if (!FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM, NULL, err, + LANG_NEUTRAL, buf, sizeof(buf), NULL)) + snprintf(buf, sizeof(buf), "Unknown error %lu (%#lx)", err, err); + if (msg) + fprintf(stderr, "%s: ", msg); + fprintf(stderr, "%s\n", buf); +} +#endif + +#if defined(WIN32) && !defined(__CYGWIN__) +void win32_init(void) +{ + WORD wVersionRequested; + WSADATA wsaData; + int err; + wVersionRequested = MAKEWORD(2, 0); + + err = WSAStartup(wVersionRequested, &wsaData); + + if (err != 0) { + perror("Winsock init failed"); + logmsg("Error initialising winsock -- aborting\n"); + exit(1); + } + + if ( LOBYTE( wsaData.wVersion ) != 2 || + HIBYTE( wsaData.wVersion ) != 0 ) { + + WSACleanup(); + perror("Winsock init failed"); + logmsg("No suitable winsock.dll found -- aborting\n"); + exit(1); + } +} + +void win32_cleanup(void) +{ + WSACleanup(); +} +#endif + |