/* Copyright (C) 2007-2010 Erik Faye-Lund and Egbert Teeselink * For conditions of distribution and use, see copyright notice in COPYING */ #ifndef SYNC_BASE_H #define SYNC_BASE_H /* configure inline keyword */ #if !defined(__STDC_VERSION__) || (__STDC_VERSION__ < 199901L) #if defined(_MSC_VER) || defined(__GNUC__) || defined(__SASC) #ifndef inline #define inline __inline #endif #else /* compiler does not support inline, make function static instead */ #define inline static #endif #endif /* configure lacking CRT features */ #ifdef _MSC_VER #define strdup _strdup #define snprintf _snprintf /* int is 32-bit for both x86 and x64 */ typedef unsigned int uint32_t; #define UINT32_MAX UINT_MAX #elif defined(__GNUC__) #include #elif defined(M68000) typedef unsigned int uint32_t; #endif /* configure socket-stack */ #ifdef _WIN32 #define WIN32_LEAN_AND_MEAN #define NOMINMAX #include #include #include #elif defined(USE_AMITCP) #include #include #include #include #define SOCKET int #define INVALID_SOCKET -1 #define select(n,r,w,e,t) WaitSelect(n,r,w,e,t,0) #define closesocket(x) CloseSocket(x) #else #include #include #include #include #include #define SOCKET int #define INVALID_SOCKET -1 #define closesocket(x) close(x) #endif #define CLIENT_GREET "hello, synctracker!" #define SERVER_GREET "hello, demo!" enum { SET_KEY = 0, DELETE_KEY = 1, GET_TRACK = 2, SET_ROW = 3, PAUSE = 4, SAVE_TRACKS = 5 }; static inline int socket_poll(SOCKET socket) { struct timeval to = { 0, 0 }; fd_set fds; FD_ZERO(&fds); #ifdef _MSC_VER #pragma warning(push) #pragma warning(disable: 4127) #endif FD_SET(socket, &fds); #ifdef _MSC_VER #pragma warning(pop) #endif return select((int)socket + 1, &fds, NULL, NULL, &to) > 0; } #include static inline int xsend(SOCKET s, const void *buf, size_t len, int flags) { #ifdef WIN32 assert(len <= INT_MAX); return send(s, (const char *)buf, (int)len, flags) != (int)len; #else return send(s, (const char *)buf, len, flags) != len; #endif } static inline int xrecv(SOCKET s, void *buf, size_t len, int flags) { #ifdef WIN32 assert(len <= INT_MAX); return recv(s, (char *)buf, (int)len, flags) != (int)len; #else return recv(s, (char *)buf, len, flags) != len; #endif } #ifdef NEED_STRDUP static inline char *rocket_strdup(const char *str) { char *ret = malloc(strlen(str) + 1); if (ret) strcpy(ret, str); return ret; } #define strdup rocket_strdup #endif #endif /* SYNC_BASE_H */