Don't check directories always case-insensitive in rename(2)
Long-standing problem in one of the corner cases of rename(2): If we rename a directory a check is performed to see if newpath is identical to oldpath or a subdir of oldpath. This check is (accidentally? no hints anywhere in ChangeLogs or code) performed case-insensitive for as long as we use Unicode paths and NT functions. This leads to the problems described in https://cygwin.com/ml/cygwin/2016-09/msg00264.html Change this to be conditional case-sensitive as all other checks but let's take this with a grain of salt. There may be corner-cases in this corner-case which require to chek parts of the path always case-insensitive. Off the top of my head I can't construct such a case but that's no proof they don't exist :} Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
This commit is contained in:
parent
e1824aea27
commit
e3ccb68610
|
@ -11,3 +11,6 @@ Bug Fixes
|
|||
|
||||
- Fix regression in console charset handling
|
||||
Addresses: https://cygwin.com/ml/cygwin/2016-10/msg00000.html
|
||||
|
||||
- Fix case-sensitivity problem when renaming directories
|
||||
Addresses: https://cygwin.com/ml/cygwin/2016-09/msg00264.html
|
||||
|
|
|
@ -2224,7 +2224,7 @@ rename (const char *oldpath, const char *newpath)
|
|||
/* Check for newpath being identical or a subdir of oldpath. */
|
||||
if (RtlPrefixUnicodeString (oldpc.get_nt_native_path (),
|
||||
newpc.get_nt_native_path (),
|
||||
TRUE))
|
||||
oldpc.objcaseinsensitive ()))
|
||||
{
|
||||
if (newpc.get_nt_native_path ()->Length
|
||||
== oldpc.get_nt_native_path ()->Length)
|
||||
|
|
Loading…
Reference in New Issue