| ... | @@ -423,8 +423,7 @@ fn networkShareServersEql(ns1: []const u8, ns2: []const u8) bool { | ... | @@ -423,8 +423,7 @@ fn networkShareServersEql(ns1: []const u8, ns2: []const u8) bool { |
| 423 | var it1 = mem.tokenizeScalar(u8, ns1, sep1); | 423 | var it1 = mem.tokenizeScalar(u8, ns1, sep1); |
| 424 | var it2 = mem.tokenizeScalar(u8, ns2, sep2); | 424 | var it2 = mem.tokenizeScalar(u8, ns2, sep2); |
| 425 | | 425 | |
| 426 | // TODO ASCII is wrong, we actually need full unicode support to compare paths. | 426 | return windows.eqlIgnoreCaseUtf8(it1.next().?, it2.next().?); |
| 427 | return ascii.eqlIgnoreCase(it1.next().?, it2.next().?); | | |
| 428 | } | 427 | } |
| 429 | | 428 | |
| 430 | fn compareDiskDesignators(kind: WindowsPath.Kind, p1: []const u8, p2: []const u8) bool { | 429 | fn compareDiskDesignators(kind: WindowsPath.Kind, p1: []const u8, p2: []const u8) bool { |
| ... | @@ -444,8 +443,7 @@ fn compareDiskDesignators(kind: WindowsPath.Kind, p1: []const u8, p2: []const u8 | ... | @@ -444,8 +443,7 @@ fn compareDiskDesignators(kind: WindowsPath.Kind, p1: []const u8, p2: []const u8 |
| 444 | var it1 = mem.tokenizeScalar(u8, p1, sep1); | 443 | var it1 = mem.tokenizeScalar(u8, p1, sep1); |
| 445 | var it2 = mem.tokenizeScalar(u8, p2, sep2); | 444 | var it2 = mem.tokenizeScalar(u8, p2, sep2); |
| 446 | | 445 | |
| 447 | // TODO ASCII is wrong, we actually need full unicode support to compare paths. | 446 | return windows.eqlIgnoreCaseUtf8(it1.next().?, it2.next().?) and windows.eqlIgnoreCaseUtf8(it1.next().?, it2.next().?); |
| 448 | return ascii.eqlIgnoreCase(it1.next().?, it2.next().?) and ascii.eqlIgnoreCase(it1.next().?, it2.next().?); | | |
| 449 | }, | 447 | }, |
| 450 | } | 448 | } |
| 451 | } | 449 | } |
| ... | @@ -1084,8 +1082,7 @@ pub fn relativeWindows(allocator: Allocator, from: []const u8, to: []const u8) ! | ... | @@ -1084,8 +1082,7 @@ pub fn relativeWindows(allocator: Allocator, from: []const u8, to: []const u8) ! |
| 1084 | const from_component = from_it.next() orelse return allocator.dupe(u8, to_it.rest()); | 1082 | const from_component = from_it.next() orelse return allocator.dupe(u8, to_it.rest()); |
| 1085 | const to_rest = to_it.rest(); | 1083 | const to_rest = to_it.rest(); |
| 1086 | if (to_it.next()) |to_component| { | 1084 | if (to_it.next()) |to_component| { |
| 1087 | // TODO ASCII is wrong, we actually need full unicode support to compare paths. | 1085 | if (windows.eqlIgnoreCaseUtf8(from_component, to_component)) |
| 1088 | if (ascii.eqlIgnoreCase(from_component, to_component)) | | |
| 1089 | continue; | 1086 | continue; |
| 1090 | } | 1087 | } |
| 1091 | var up_index_end = "..".len; | 1088 | var up_index_end = "..".len; |
| ... | @@ -1162,7 +1159,7 @@ test "relative" { | ... | @@ -1162,7 +1159,7 @@ test "relative" { |
| 1162 | try testRelativeWindows("c:/blah\\blah", "d:/games", "D:\\games"); | 1159 | try testRelativeWindows("c:/blah\\blah", "d:/games", "D:\\games"); |
| 1163 | try testRelativeWindows("c:/aaaa/bbbb", "c:/aaaa", ".."); | 1160 | try testRelativeWindows("c:/aaaa/bbbb", "c:/aaaa", ".."); |
| 1164 | try testRelativeWindows("c:/aaaa/bbbb", "c:/cccc", "..\\..\\cccc"); | 1161 | try testRelativeWindows("c:/aaaa/bbbb", "c:/cccc", "..\\..\\cccc"); |
| 1165 | try testRelativeWindows("c:/aaaa/bbbb", "c:/aaaa/bbbb", ""); | 1162 | try testRelativeWindows("c:/aaaa/bbbb", "C:/aaaa/bbbb", ""); |
| 1166 | try testRelativeWindows("c:/aaaa/bbbb", "c:/aaaa/cccc", "..\\cccc"); | 1163 | try testRelativeWindows("c:/aaaa/bbbb", "c:/aaaa/cccc", "..\\cccc"); |
| 1167 | try testRelativeWindows("c:/aaaa/", "c:/aaaa/cccc", "cccc"); | 1164 | try testRelativeWindows("c:/aaaa/", "c:/aaaa/cccc", "cccc"); |
| 1168 | try testRelativeWindows("c:/", "c:\\aaaa\\bbbb", "aaaa\\bbbb"); | 1165 | try testRelativeWindows("c:/", "c:\\aaaa\\bbbb", "aaaa\\bbbb"); |
| ... | @@ -1188,6 +1185,10 @@ test "relative" { | ... | @@ -1188,6 +1185,10 @@ test "relative" { |
| 1188 | try testRelativeWindows("a/b/c", "a", "..\\.."); | 1185 | try testRelativeWindows("a/b/c", "a", "..\\.."); |
| 1189 | try testRelativeWindows("a/b/c", "a\\b\\c\\d", "d"); | 1186 | try testRelativeWindows("a/b/c", "a\\b\\c\\d", "d"); |
| 1190 | | 1187 | |
| | 1188 | try testRelativeWindows("\\\\FOO\\bar\\baz", "\\\\foo\\BAR\\BAZ", ""); |
| | 1189 | // Unicode-aware case-insensitive path comparison |
| | 1190 | try testRelativeWindows("\\\\кириллица\\ελληνικά\\português", "\\\\КИРИЛЛИЦА\\ΕΛΛΗΝΙΚΆ\\PORTUGUÊS", ""); |
| | 1191 | |
| 1191 | try testRelativePosix("/var/lib", "/var", ".."); | 1192 | try testRelativePosix("/var/lib", "/var", ".."); |
| 1192 | try testRelativePosix("/var/lib", "/bin", "../../bin"); | 1193 | try testRelativePosix("/var/lib", "/bin", "../../bin"); |
| 1193 | try testRelativePosix("/var/lib", "/var/lib", ""); | 1194 | try testRelativePosix("/var/lib", "/var/lib", ""); |