Have CanonicalizePath handle \ on Windows

Have CanonicalizePath handle \ on Windows. It's slightly slower to do so, so compensate for that by improving ReadFile to not use text mode (which is a bit slower), and then fixing the lexer to accept \r (it was previously relying on reading files in text mode to remove '\r's).

Timings:

before patch:
qpc: 1229494us
qpc: 1232420us
qpc: 1232493us
qpc: 1235035us
qpc: 1239521us
qpc: 1247100us
avg = 1234867us

with canon of \, fixing parser to accept \r and speedier ReadFile
qpc: 1196304us
qpc: 1200643us
qpc: 1187478us
qpc: 1190062us
qpc: 1182991us
qpc: 1203037us
avg = 1190128us

Done.

On Wed Oct 29 2014 at 9:17:09 PM Nico Weber <notifications@github.com>
wrote:

> In src/util_test.cc:
>
> > +
> > +  path = "foo.h"; err = "";
> > +  EXPECT_TRUE(CanonicalizePath(&path, &err));
> > +  EXPECT_EQ("foo.h", path);
> > +
> > +  path = ".\\foo.h";
> > +  EXPECT_TRUE(CanonicalizePath(&path, &err));
> > +  EXPECT_EQ("foo.h", path);
> > +
> > +  path = ".\\foo\\.\\bar.h";
> > +  EXPECT_TRUE(CanonicalizePath(&path, &err));
> > +  EXPECT_EQ("foo\\bar.h", path);
> > +
> > +  path = ".\\x\\foo\\..\\bar.h";
> > +  EXPECT_TRUE(CanonicalizePath(&path, &err));
> > +  EXPECT_EQ("x\\bar.h", path);
>
> Shouldn't this normalize to x/bar.h?
>
> —
> Reply to this email directly or view it on GitHub
> <https://github.com/martine/ninja/pull/839/files#r19587264>.
>