>> Probably the test for case-insensitive file names should be >> removed altogether > > Which one? there are two of them. There should be just one such test, since it's testing the same thing and there's no point to doing the same test twice. And I notice the code has some other duplicate system calls. I installed the attached patch, which prunes away some of these duplicates. With this patch, (rename-file "a" "b/") now takes just one system call on recent GNU/Linux, whereas it used to take four (and was not atomic). However, even with this patch there are races on GNU/Linux which can lead to potential security problems. Perhaps we can't fix these races on MS-Windows but we should be able to fix them on a GNUish host. However, we will need to change the semantics of rename-file etc. slightly, since no single system call supports the cp-like target rewriting of these functions. I have a fix in mind to do that in a hopefully compatible-enough way, which I'll try to propose soon. I'll keep case-insensitive file systems in mind when I do that. This reminds me of a similar problem in GNU coreutils which I fixed a dozen years ago by adding the -T option to mv, ln, etc.