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

Sure? I don't know of any system non-Windows system where it does anything
though.

On Thu, Oct 30, 2014 at 2:50 PM, Nico Weber <notifications@github.com>
wrote:

> In src/util.cc:
>
> > +
> > +  for (;;) {
> > +    DWORD len;
> > +    char buf[64 << 10];
> > +    if (!::ReadFile(f, buf, sizeof(buf), &len, NULL)) {
> > +      err->assign(GetLastErrorString());
> > +      contents->clear();
> > +      return -1;
> > +    }
> > +    if (len == 0)
> > +      break;
> > +    contents->append(buf, len);
> > +  }
> > +  ::CloseHandle(f);
> > +  return 0;
> > +#else
> >    FILE* f = fopen(path.c_str(), "r");
>
> Should this now be "rb" to do the same as the windows code above?
> (shouldn't make a difference in practice on non-win)
>
> —
> Reply to this email directly or view it on GitHub
> <https://github.com/martine/ninja/pull/839/files#r19638940>.
>