diff -rupN re2_orig/re2/compile.cc re2_new/re2/compile.cc --- re2_orig/re2/compile.cc 2015-06-03 21:01:39.859724500 +0300 +++ re2_new/re2/compile.cc 2015-06-03 21:04:00.834589300 +0300 @@ -7,7 +7,10 @@ // Prog and Inst are defined in prog.h. // This file's external interface is just Regexp::CompileToProg. // The Compiler class defined in this file is private. - +#ifdef WIN32 +#include +#define snprintf _snprintf +#endif #include "re2/prog.h" #include "re2/re2.h" #include "re2/regexp.h" @@ -503,7 +506,7 @@ int Compiler::RuneByteSuffix(uint8 lo, u return UncachedRuneByteSuffix(lo, hi, foldcase, next); } - uint64 key = ((uint64)next << 17) | (lo<<9) | (hi<<1) | foldcase; + uint64 key = ((uint64)next << 17) | (lo<<9) | (hi<<1) | (foldcase ? 1ULL : 0ULL); map::iterator it = rune_cache_.find(key); if (it != rune_cache_.end()) return it->second; diff -rupN re2_orig/re2/prefilter_tree.cc re2_new/re2/prefilter_tree.cc --- re2_orig/re2/prefilter_tree.cc 2015-06-03 21:01:39.941447500 +0300 +++ re2_new/re2/prefilter_tree.cc 2015-06-03 21:04:34.520203500 +0300 @@ -7,6 +7,10 @@ #include "re2/prefilter.h" #include "re2/prefilter_tree.h" #include "re2/re2.h" +#ifdef WIN32 +#include +#define snprintf _snprintf +#endif DEFINE_int32(filtered_re2_min_atom_len, 3, diff -rupN re2_orig/re2/re2.cc re2_new/re2/re2.cc --- re2_orig/re2/re2.cc 2015-06-03 21:01:39.959349200 +0300 +++ re2_new/re2/re2.cc 2015-06-03 21:05:47.173725000 +0300 @@ -11,7 +11,13 @@ #include #include -#include +#ifdef WIN32 +#define strtoll _strtoi64 +#define strtoull _strtoui64 +#define strtof strtod +#else + #include +#endif #include #include "util/atomicops.h" #include "util/util.h" @@ -35,7 +41,7 @@ const VariadicFunction2 #include #include +#ifdef WIN32 +#include +#endif namespace re2 { diff -rupN re2_orig/util/logging.h re2_new/util/logging.h --- re2_orig/util/logging.h 2015-06-03 21:01:40.236689900 +0300 +++ re2_new/util/logging.h 2015-06-03 21:07:48.737390800 +0300 @@ -7,7 +7,11 @@ #ifndef RE2_UTIL_LOGGING_H__ #define RE2_UTIL_LOGGING_H__ -#include /* for write */ +#ifdef WIN32 + #include +#else + #include /* for write */ +#endif #include // Debug-only checking. diff -rupN re2_orig/util/mutex.h re2_new/util/mutex.h --- re2_orig/util/mutex.h 2015-06-03 21:01:40.240105400 +0300 +++ re2_new/util/mutex.h 2015-06-03 21:08:41.660376900 +0300 @@ -14,7 +14,10 @@ namespace re2 { -#define HAVE_PTHREAD 1 +#ifndef WIN32 + #define HAVE_PTHREAD 1 + #define HAVE_RWLOCK 1 +#endif #define HAVE_RWLOCK 1 #if defined(NO_THREADS) diff -rupN re2_orig/util/stringprintf.cc re2_new/util/stringprintf.cc --- re2_orig/util/stringprintf.cc 2015-06-03 21:01:40.271834700 +0300 +++ re2_new/util/stringprintf.cc 2015-06-03 21:09:07.784384200 +0300 @@ -3,6 +3,9 @@ // license that can be found in the LICENSE file. #include "util/util.h" +#ifndef va_copy +#define va_copy(d,s) ((d) = (s)) //KLUGE: for MS compilers +#endif namespace re2 { diff -rupN re2_orig/util/util.h re2_new/util/util.h --- re2_orig/util/util.h 2015-06-03 21:01:40.304059500 +0300 +++ re2_new/util/util.h 2015-06-04 14:27:55.625698100 +0300 @@ -64,12 +64,12 @@ using std::unordered_set; #ifdef WIN32 #define snprintf _snprintf_s -#define sprintf sprintf_s +//#define sprintf sprintf_s #define stricmp _stricmp #define strtof strtod /* not really correct but best we can do */ #define strtoll _strtoi64 #define strtoull _strtoui64 -#define vsnprintf vsnprintf_s +//#define vsnprintf vsnprintf_s #pragma warning(disable: 4018) // signed/unsigned mismatch #pragma warning(disable: 4244) // possible data loss in int conversion diff -rupN re2_orig/util/valgrind.h re2_new/util/valgrind.h --- re2_orig/util/valgrind.h 2015-06-03 21:01:40.315784200 +0300 +++ re2_new/util/valgrind.h 2015-06-03 21:11:07.508240700 +0300 @@ -126,6 +126,7 @@ #endif +#ifndef WIN32 /* ------------------------------------------------------------------ */ /* ARCHITECTURE SPECIFICS for SPECIAL INSTRUCTIONS. There is nothing */ /* in here of use to end-users -- skip to the next section. */ @@ -4171,6 +4172,7 @@ typedef _qzz_addr, _qzz_len, 0, 0, 0); \ } +#endif /* These requests are for getting Valgrind itself to print something. Possibly with a backtrace. This is a really ugly hack. The return value