re2-msvc9-chrome.patch revision 1320f92c476a1ad9d19dba2a48c72b75566198e9
15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)diff --git a/AUTHORS b/AUTHORS
25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)index 3c0f928..e17d9bf 100644
35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)--- a/AUTHORS
45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)+++ b/AUTHORS
55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)@@ -8,5 +8,6 @@
65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 
75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) # Please keep the list sorted.
8868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 
95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)+Brian Gunlogson <unixman83@gmail.com>
10c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) Google Inc.
115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Stefano Rivera <stefano.rivera@gmail.com>
122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)diff --git a/CONTRIBUTORS b/CONTRIBUTORS
135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)index 7b44e04..7f6a93d 100644
145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)--- a/CONTRIBUTORS
155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)+++ b/CONTRIBUTORS
165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)@@ -26,6 +26,7 @@
175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 
185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) # Please keep the list sorted.
195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 
205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)+Brian Gunlogson <unixman83@gmail.com>
215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Dominic Battré <battre@chromium.org>
225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) John Millikin <jmillikin@gmail.com>
235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Rob Pike <r@google.com>
245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)diff --git a/re2/compile.cc b/re2/compile.cc
255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)index 9cddb71..adb45fd 100644
265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)--- a/re2/compile.cc
275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)+++ b/re2/compile.cc
285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)@@ -502,7 +502,7 @@ int Compiler::RuneByteSuffix(uint8 lo, uint8 hi, bool foldcase, int next) {
295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)     return UncachedRuneByteSuffix(lo, hi, foldcase, next);
305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   }
315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 
325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)-  uint64 key = ((uint64)next << 17) | (lo<<9) | (hi<<1) | foldcase;
335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)+  uint64 key = ((uint64)next << 17) | (lo<<9) | (hi<<1) | (foldcase ? 1ULL : 0ULL);
345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   map<uint64, int>::iterator it = rune_cache_.find(key);
355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   if (it != rune_cache_.end())
36868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)     return it->second;
37868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)diff --git a/re2/prefilter_tree.cc b/re2/prefilter_tree.cc
385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)index d8bc37a..cdcf77e 100644
395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)--- a/re2/prefilter_tree.cc
40868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)+++ b/re2/prefilter_tree.cc
41868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)@@ -8,6 +8,11 @@
425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) #include "re2/prefilter_tree.h"
435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) #include "re2/re2.h"
445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 
45c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)+#ifdef WIN32
465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)+#include <stdio.h>
475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)+#define snprintf _snprintf
48c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)+#endif
495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)+
50c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) DEFINE_int32(filtered_re2_min_atom_len,
51c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)              3,
52c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)              "Strings less than this length are not stored as atoms");
53c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)diff --git a/re2/re2.cc b/re2/re2.cc
545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)index 8d1d468..0da886d 100644
555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)--- a/re2/re2.cc
565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)+++ b/re2/re2.cc
575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)@@ -11,7 +11,13 @@
582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 
592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) #include <stdio.h>
602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) #include <string>
61c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)+#ifdef WIN32
62c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)+#define strtoll _strtoi64
63c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)+#define strtoull _strtoui64
64c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)+#define strtof strtod
652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)+#else
662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) #include <pthread.h>
675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)+#endif
685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) #include <errno.h>
695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) #include "util/util.h"
70868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) #include "util/flags.h"
71868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)@@ -31,10 +37,22 @@ const VariadicFunction2<bool, const StringPiece&, const RE2&, RE2::Arg, RE2::Par
72868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) const VariadicFunction2<bool, StringPiece*, const RE2&, RE2::Arg, RE2::ConsumeN> RE2::Consume;
73868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) const VariadicFunction2<bool, StringPiece*, const RE2&, RE2::Arg, RE2::FindAndConsumeN> RE2::FindAndConsume;
74868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 
75868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)-// This will trigger LNK2005 error in MSVC.
76868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)-#ifndef COMPILER_MSVC
775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)-const int RE2::Options::kDefaultMaxMem;  // initialized in re2.h
785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)-#endif  // COMPILER_MSVC
795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)+#define kDefaultMaxMem (8<<20)
805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)+
815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)+RE2::Options::Options()
825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)+  :  encoding_(EncodingUTF8),
83868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)+     posix_syntax_(false),
84868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)+     longest_match_(false),
85868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)+     log_errors_(true),
86868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)+     max_mem_(kDefaultMaxMem),
87868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)+     literal_(false),
88868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)+     never_nl_(false),
89868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)+     never_capture_(false),
90868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)+     case_sensitive_(true),
91868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)+     perl_classes_(false),
92868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)+     word_boundary_(false),
93868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)+     one_line_(false) {
94868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)+}
95868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 
96868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) RE2::Options::Options(RE2::CannedOptions opt)
975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   : encoding_(opt == RE2::Latin1 ? EncodingLatin1 : EncodingUTF8),
985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)diff --git a/re2/re2.h b/re2/re2.h
99c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)index 272028b..c509853 100644
1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)--- a/re2/re2.h
1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)+++ b/re2/re2.h
1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)@@ -552,28 +552,16 @@ class RE2 {
1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)     // If this happens too often, RE2 falls back on the NFA implementation.
1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 
1055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)     // For now, make the default budget something close to Code Search.
1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)+#ifndef WIN32
1075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)     static const int kDefaultMaxMem = 8<<20;
1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)+#endif
1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 
1105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)     enum Encoding {
1115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)       EncodingUTF8 = 1,
1125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)       EncodingLatin1
1135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)     };
1145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 
1155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)-    Options() :
1165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)-      encoding_(EncodingUTF8),
1175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)-      posix_syntax_(false),
1185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)-      longest_match_(false),
1195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)-      log_errors_(true),
1205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)-      max_mem_(kDefaultMaxMem),
1215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)-      literal_(false),
1225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)-      never_nl_(false),
123c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)-      never_capture_(false),
1245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)-      case_sensitive_(true),
1255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)-      perl_classes_(false),
1265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)-      word_boundary_(false),
127c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)-      one_line_(false) {
128c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)-    }
129c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)-    
130c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)+    Options();
1315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)     /*implicit*/ Options(CannedOptions);
1325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 
1335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)     Encoding encoding() const { return encoding_; }
1345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)diff --git a/re2/stringpiece.h b/re2/stringpiece.h
1355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)index ab9297c..38a5150 100644
1365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)--- a/re2/stringpiece.h
1375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)+++ b/re2/stringpiece.h
1385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)@@ -23,6 +23,9 @@
1395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) #include <cstddef>
1405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) #include <iosfwd>
1415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) #include <string>
1425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)+#ifdef WIN32
1435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)+#include <algorithm>
1445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)+#endif
1455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 
1465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) namespace re2 {
1475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 
1485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)diff --git a/re2/testing/re2_test.cc b/re2/testing/re2_test.cc
1495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)index b99cacf..911e868 100644
1505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)--- a/re2/testing/re2_test.cc
1515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)+++ b/re2/testing/re2_test.cc
1525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)@@ -6,7 +6,9 @@
153 // TODO: Test extractions for PartialMatch/Consume
154 
155 #include <sys/types.h>
156+#ifndef WIN32
157 #include <sys/mman.h>
158+#endif
159 #include <sys/stat.h>
160 #include <errno.h>
161 #include <vector>
162@@ -14,6 +16,11 @@
163 #include "re2/re2.h"
164 #include "re2/regexp.h"
165 
166+#ifdef WIN32
167+#include <stdio.h>
168+#define snprintf _snprintf
169+#endif
170+
171 DECLARE_bool(logtostderr);
172 
173 namespace re2 {
174@@ -657,6 +664,7 @@ TEST(RE2, FullMatchTypedNullArg) {
175   CHECK(!RE2::FullMatch("hello", "(.*)", (float*)NULL));
176 }
177 
178+#ifndef WIN32
179 // Check that numeric parsing code does not read past the end of
180 // the number being parsed.
181 TEST(RE2, NULTerminated) {
182@@ -678,6 +686,7 @@ TEST(RE2, NULTerminated) {
183   CHECK(RE2::FullMatch(StringPiece(v + pagesize - 1, 1), "(.*)", &x));
184   CHECK_EQ(x, 1);
185 }
186+#endif
187 
188 TEST(RE2, FullMatchTypeTests) {
189   // Type tests
190diff --git a/util/logging.h b/util/logging.h
191index 4443f7c..d0a2d87 100644
192--- a/util/logging.h
193+++ b/util/logging.h
194@@ -7,8 +7,13 @@
195 #ifndef RE2_UTIL_LOGGING_H__
196 #define RE2_UTIL_LOGGING_H__
197 
198+#ifndef WIN32
199 #include <unistd.h>  /* for write */
200+#endif
201 #include <sstream>
202+#ifdef WIN32
203+#include <io.h>
204+#endif
205 
206 // Debug-only checking.
207 #define DCHECK(condition) assert(condition)
208diff --git a/util/mutex.h b/util/mutex.h
209index 9787bfb..e321fae 100644
210--- a/util/mutex.h
211+++ b/util/mutex.h
212@@ -12,8 +12,10 @@
213 
214 namespace re2 {
215 
216+#ifndef WIN32
217 #define HAVE_PTHREAD 1
218 #define HAVE_RWLOCK 1
219+#endif
220 
221 #if defined(NO_THREADS)
222   typedef int MutexType;      // to keep a lock-count
223@@ -32,7 +34,9 @@ namespace re2 {
224 # include <pthread.h>
225   typedef pthread_mutex_t MutexType;
226 #elif defined(WIN32)
227-# define WIN32_LEAN_AND_MEAN  // We only need minimal includes
228+# ifndef WIN32_LEAN_AND_MEAN
229+#  define WIN32_LEAN_AND_MEAN  // We only need minimal includes
230+# endif
231 # ifdef GMUTEX_TRYLOCK
232   // We need Windows NT or later for TryEnterCriticalSection().  If you
233   // don't need that functionality, you can remove these _WIN32_WINNT
234diff --git a/util/pcre.cc b/util/pcre.cc
235index 5e67e1f..1602133 100644
236--- a/util/pcre.cc
237+++ b/util/pcre.cc
238@@ -11,6 +11,11 @@
239 #include "util/flags.h"
240 #include "util/pcre.h"
241 
242+#ifdef WIN32
243+#define strtoll _strtoi64
244+#define strtoull _strtoui64
245+#endif
246+
247 #define PCREPORT(level) LOG(level)
248 
249 // Default PCRE limits.
250diff --git a/util/pcre.h b/util/pcre.h
251index 4dda95d..771ac91 100644
252--- a/util/pcre.h
253+++ b/util/pcre.h
254@@ -180,9 +180,15 @@ struct pcre_extra { int flags, match_limit, match_limit_recursion; };
255 #define PCRE_ERROR_MATCHLIMIT 2
256 #define PCRE_ERROR_RECURSIONLIMIT 3
257 #define PCRE_INFO_CAPTURECOUNT 0
258+#ifndef WIN32
259 #define pcre_compile(a,b,c,d,e) ({ (void)(a); (void)(b); *(c)=""; *(d)=0; (void)(e); ((pcre*)0); })
260 #define pcre_exec(a, b, c, d, e, f, g, h) ({ (void)(a); (void)(b); (void)(c); (void)(d); (void)(e); (void)(f); (void)(g); (void)(h); 0; })
261 #define pcre_fullinfo(a, b, c, d) ({ (void)(a); (void)(b); (void)(c); *(d) = 0; 0; })
262+#else
263+#define pcre_compile(a,b,c,d,e) NULL
264+#define pcre_exec(a, b, c, d, e, f, g, h) NULL
265+#define pcre_fullinfo(a, b, c, d) NULL
266+#endif
267 }  // namespace re2
268 #endif
269 
270diff --git a/util/test.cc b/util/test.cc
271index 0644829..2fe1bfa 100644
272--- a/util/test.cc
273+++ b/util/test.cc
274@@ -3,7 +3,9 @@
275 // license that can be found in the LICENSE file.
276 
277 #include <stdio.h>
278+#ifndef WIN32
279 #include <sys/resource.h>
280+#endif
281 #include "util/test.h"
282 
283 DEFINE_string(test_tmpdir, "/var/tmp", "temp directory");
284@@ -23,9 +25,13 @@ void RegisterTest(void (*fn)(void), const char *name) {
285 
286 namespace re2 {
287 int64 VirtualProcessSize() {
288+#ifndef WIN32
289   struct rusage ru;
290   getrusage(RUSAGE_SELF, &ru);
291   return (int64)ru.ru_maxrss*1024;
292+#else
293+  return 0;
294+#endif
295 }
296 }  // namespace re2
297 
298diff --git a/util/util.h b/util/util.h
299index c46ab1b..17ef824 100644
300--- a/util/util.h
301+++ b/util/util.h
302@@ -12,7 +12,9 @@
303 #include <stddef.h>         // For size_t
304 #include <assert.h>
305 #include <stdarg.h>
306+#ifndef WIN32
307 #include <sys/time.h>
308+#endif
309 #include <time.h>
310 #include <ctype.h>	// For isdigit, isalpha.
311 
312@@ -51,7 +53,11 @@ using std::tr1::unordered_set;
313 #else
314 
315 #include <unordered_set>
316+#ifdef WIN32
317+using std::tr1::unordered_set;
318+#else
319 using std::unordered_set;
320+#endif
321 
322 #endif
323 
324diff --git a/util/valgrind.h b/util/valgrind.h
325index ca10b1a..d097b0c 100644
326--- a/util/valgrind.h
327+++ b/util/valgrind.h
328@@ -4064,6 +4064,7 @@ typedef
329 #endif /* PLAT_ppc64_aix5 */
330 
331 
332+#ifndef WIN32
333 /* ------------------------------------------------------------------ */
334 /* ARCHITECTURE INDEPENDENT MACROS for CLIENT REQUESTS.               */
335 /*                                                                    */
336@@ -4170,7 +4171,7 @@ typedef
337                                VG_USERREQ__DISCARD_TRANSLATIONS,  \
338                                _qzz_addr, _qzz_len, 0, 0, 0);     \
339    }
340-
341+#endif
342 
343 /* These requests are for getting Valgrind itself to print something.
344    Possibly with a backtrace.  This is a really ugly hack.  The return value
345