<div dir="ltr"><div class="gmail_extra"><div class="gmail_quote">On Wed, Dec 21, 2016 at 9:06 AM, Rafael Avila de Espindola <span dir="ltr"><<a href="mailto:rafael.espindola@gmail.com" target="_blank">rafael.espindola@gmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">> +// Represents a non-memory-mapped file. We need this class<br>
> +// because not all files are mmap'able. For example, /dev/null<br>
> +// is not mmap'able.<br>
<br>
The comment is a bit confusing. The issue is that with the old code if<br>
you tried to "-o /dev/null", we would not try to mmap /dev/null. We<br>
would try to mmap a temp file and move it to /dev/null.<br>
<br>
Maybe the best way to do this is<br>
* Check the file type as you did.<br>
* Remember the result in a member variable.<br>
* If it is regular, use fs::createUniqueFile.<br>
* If it is not, use fs::createTemporaryFile, which can also be mmaped.<br>
* In commit, do a move if the target is regular or write the contents if<br>
  it is not.<br></blockquote><div><br></div><div>If you want do the same thing until the final rename(2) or file copy, you need to create a temporary file in the same directory as the final destination file (because the temporary file needs to be in the same file system as the final output.) But that's not always doable. For example, if the final output is /dev/null, /dev/ is not writable. So I guess this patch is reasonable, no?</div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
That should reduce the code difference between the two cases.<br>
<br>
Cheers,<br>
Rafael<br>
</blockquote></div><br></div></div>