From: Junio C Hamano Date: Thu, 12 Sep 2013 19:11:15 GMT Subject: Re: [PATCH 1/2] relative_path should honor dos_drive_prefix Message-ID: In-Reply-To: <5231F839.3080208@kdbg.org> Johannes Sixt writes: > Am 12.09.2013 16:13, schrieb Torsten Bögershausen: >> On 2013-09-12 11.12, Jiang Xin wrote: >>> +static int have_same_root(const char *path1, const char *path2) >>> +{ >>> + int is_abs1, is_abs2; >>> + >>> + is_abs1 = is_absolute_path(path1); >>> + is_abs2 = is_absolute_path(path2); >>> + return (is_abs1 && is_abs2 && !strncasecmp(path1, path2, 1)) || >> ^^^^^^^^^^^ >> I wonder: should strncasecmp() be replaced with strncmp_icase() ? > > I don't think so: On POSIX, it is irrelevant, because the call will only > compare a slash to a slash. On Windows, it compares the drive letters > (or a slash); it is *always* case-insensitive, even if the volume > mounted is NTFS with case-sensitivity enabled and core.ignorecase is false. Ah, you are right, of course. We could even do tolower(path1[0]) == tolower(path2[0]) which might be more explicit. For systems that need POSIX escape hatch for Apollo Domain ;-), we would need a bit more work. When both path1 and path2 begin with a double-dash, we would need to check if they match up to the next slash, so that - //host1/usr/src and //host1/usr/lib share the same root and the former can be made to ../src relative to the latter; - //host1/usr/src and //host2/usr/lib are of separate roots. or something.