<div dir="ltr"><div class="gmail_extra"><div class="gmail_quote">On Mon, Apr 11, 2016 at 7:45 PM, Eric Niebler via cfe-dev <span dir="ltr"><<a href="mailto:cfe-dev@lists.llvm.org">cfe-dev@lists.llvm.org</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-style:solid;border-left-color:rgb(204,204,204);padding-left:1ex">



<div style="word-wrap:break-word;color:rgb(0,0,0);font-size:14px;font-family:calibri,sans-serif">
<span><span class="gmail-">
<div>
<div>On 4/11/16, 4:12 PM, "Jason Haslam" <<a href="mailto:jason.haslam@gmail.com">jason.haslam@gmail.com</a>> wrote:</div>
</div>
<div><br>
</div>
</span><blockquote>
<div>
<div style="word-wrap:break-word">
<div>
<blockquote type="cite"><span class="gmail-">
<div>On Apr 7, 2016, at 5:44 PM, Eric Niebler via cfe-dev <<a href="mailto:cfe-dev@lists.llvm.org">cfe-dev@lists.llvm.org</a>> wrote:</div>
<br>
</span><div>
<div style="word-wrap:break-word;font-size:14px;font-family:calibri,sans-serif">
<span><span class="gmail-">
<div>
<div>On 4/7/16, 11:37 AM, "<a href="mailto:clattner@apple.com">clattner@apple.com</a> on behalf of Chris Lattner" <<a href="mailto:clattner@apple.com">clattner@apple.com</a>> wrote:</div>
</div>
<div><br>
</div>
</span><blockquote>
<div>
<div style="word-wrap:break-word">
<br>
<div>
<blockquote type="cite"><span class="gmail-">
<div>On Apr 5, 2016, at 4:03 PM, Eric Niebler via cfe-dev <<a href="mailto:cfe-dev@lists.llvm.org">cfe-dev@lists.llvm.org</a>> wrote:</div>
<br>
</span><div>
<div style="word-wrap:break-word;font-size:14px;font-family:calibri,sans-serif">
<div>
<div><span class="gmail-">
<div>Hi all,</div>
<div><br>
</div>
<div>I have an initial cut at patch that issues a warning when a file is #included on a case-insensitive file system that would not be found on a case-sensitive system. Is there interest?</div>
<div><br>
</div>
</span><div>Since this is a hard problem to solve perfectly, I have opted for a strategy that is efficient and conservative about issuing diagnostics. That is, it shouldn't give false positives, but it will fail to diagnose some non-portable paths. On *nix
 systems, the low-level APIs that stat and open files get an extra call to ::realpath, and the result is cached along with the rest of the file metadata. […]</div>
</div>
</div>
</div>
</div>
</blockquote>
</div>
</div>
</div>
</blockquote>
</span></div>
</div>
</blockquote>
</div><span class="gmail-">
<br>
<div>I was working on a similar patch a few years ago (<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__lists.llvm.org_pipermail_cfe-2Ddev_2012-2DJuly_023090.html&d=CwMFaQ&c=5VD0RTtNlTh3ycd41b3MUw&r=t4UJXwtMcIwGvgOaMqGzrQ&m=c8D9-z1QyfRWobwgBlnojB0yAu4P3Ve2-Wk9Z4vAxjg&s=5yrhYcvssUCiHzENOa2jFtUbhJNW1jTrGLKAnlJLkuQ&e=">http://lists.llvm.org/pipermail/cfe-dev/2012-July/023090.html</a> is
 the start of a very long thread). Does realpath really give the real case on unix? My understanding is that it doesn’t. I had to resort to reading the directory listings and comparing entries. And of course readdir is even slower. I could only ever get decent
 performance by aggressively caching the directory listings. In the end it got too complicated and wasn’t entirely convinced that performance would ever be good enough to warrant the addition. I was mostly interested in Mac though. Maybe it’s a different story
 on Windows.</div>
<div><br>
</div>
</span></div>
</div>
</blockquote>
</span>
<div><br>
</div>
<div><br>
</div>
<div>I haven't been able to successfully mount a case-insensitive file system on my Linux VM,</div></div></blockquote><div><br></div><div>This should do it:</div><div><br></div><div><div>  fallocate -l 3g mydisk</div><div>  mkfs.vfat mydisk</div><div>  mkdir mountdir</div><div>  sudo mount mydisk mountdir</div></div><div>  </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-style:solid;border-left-color:rgb(204,204,204);padding-left:1ex"><div style="word-wrap:break-word;color:rgb(0,0,0);font-size:14px;font-family:calibri,sans-serif"><div> so I haven't specifically tested this. On Mac, realpath gets the case right, but it's not needed since it has fcntl/F_GETPATH, which I've discovered is faster. In
 my tests, realpath does <span style="font-weight:bold">not</span> get the right case on Cygwin. On *nixes that have /proc, it's possible to readlink on /proc/self/fd/$FD once the file is opened, and that
<i>should</i> give the properly cased filename. I haven't done extensive benchmarking, but that is certain to be faster than recursive directory traversal. But not all *nixes have /proc.</div>
<div><br>
</div>
<div>TL;DR this is going to be an unreliable warning. Personally, I think that's fine so long as it doesn't give false positives and doesn't slow things down too badly. I'm busy reworking the patch to that end.</div><span class="gmail-HOEnZb"><font color="#888888">
<div><br>
</div>
<div>\e</div>
<div><br>
</div>
<div>
<div>
<div><br>
</div>
<div>
<div></div>
</div>
</div>
</div>
</font></span></div>

<br>_______________________________________________<br>
cfe-dev mailing list<br>
<a href="mailto:cfe-dev@lists.llvm.org">cfe-dev@lists.llvm.org</a><br>
<a href="http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-dev" rel="noreferrer">http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-dev</a><br>
<br></blockquote></div><br></div></div>