MinGW fix: Use _MSC_VER instead of _WIN32 where appropriate

Use _MSC_VER (instead of _WIN32) for things that are specific for
Visual Studio.

Also remove #include <winsock2.h> from hiredis.h, as it leaks too
many symbols and defines into the global namespace, which is
undesirable for a public interface header. Anyone who uses the
the affected parts of the hiredis API needs to include the
appropriate headers anyway in order to declare struct timeval
variables.
This commit is contained in:
Marcus Geelnard 2019-05-08 14:59:06 +02:00 committed by m
parent 3af99d5fd5
commit 85fee25653
5 changed files with 17 additions and 7 deletions

View File

@ -32,11 +32,8 @@
#include "fmacros.h"
#include <stdlib.h>
#include <string.h>
#ifndef _WIN32
#ifndef _MSC_VER
#include <strings.h>
#else
#define strcasecmp stricmp
#define strncasecmp strnicmp
#endif
#include <assert.h>
#include <ctype.h>
@ -46,6 +43,7 @@
#include "dict.c"
#include "sds.h"
#include "sslio.h"
#include "win32.h"
#define _EL_ADD_READ(ctx) \
do { \

View File

@ -35,10 +35,10 @@
#define __HIREDIS_H
#include "read.h"
#include <stdarg.h> /* for va_list */
#ifndef _WIN32
#ifndef _MSC_VER
#include <sys/time.h> /* for struct timeval */
#else
#include <winsock2.h>
struct timeval; /* forward declaration */
#endif
#include <stdint.h> /* uintXX_t, etc */
#include "sds.h" /* for sds */

2
sds.h
View File

@ -34,7 +34,7 @@
#define __SDS_H
#define SDS_MAX_PREALLOC (1024*1024)
#ifdef _WIN32
#ifdef _MSC_VER
#define __attribute__(x)
#endif

View File

@ -50,7 +50,9 @@
#include <ws2tcpip.h>
#include <stddef.h>
#ifdef _MSC_VER
typedef signed long ssize_t;
#endif
/* Emulate the parts of the BSD socket API that we need (override the winsock signatures). */
int win32_getaddrinfo(const char *node, const char *service, const struct addrinfo *hints, struct addrinfo **res);

10
win32.h
View File

@ -2,10 +2,20 @@
#define _WIN32_HELPER_INCLUDE
#ifdef _MSC_VER
#include <winsock2.h> /* for struct timeval */
#ifndef inline
#define inline __inline
#endif
#ifndef strcasecmp
#define strcasecmp stricmp
#endif
#ifndef strncasecmp
#define strncasecmp strnicmp
#endif
#ifndef va_copy
#define va_copy(d,s) ((d) = (s))
#endif