mirror of
https://github.com/jart/cosmopolitan.git
synced 2025-02-12 01:08:00 +00:00
parent
11d9fb521d
commit
914d521090
2 changed files with 43 additions and 0 deletions
|
@ -55,6 +55,19 @@ textwindows size_t __normntpath(char16_t *p, size_t n) {
|
||||||
// matched "/../" or "/..$"
|
// matched "/../" or "/..$"
|
||||||
while (j && p[j - 1] == '\\')
|
while (j && p[j - 1] == '\\')
|
||||||
--j;
|
--j;
|
||||||
|
if (j && p[j - 1] == '.') {
|
||||||
|
// matched "." before
|
||||||
|
if (j >= 2 && p[j - 2] == '.' && //
|
||||||
|
(j == 2 || p[j - 3] == '\\')) {
|
||||||
|
// matched "^.." or "/.." before
|
||||||
|
p[++j] = '.';
|
||||||
|
++j;
|
||||||
|
continue;
|
||||||
|
} else if (j == 1 || p[j - 2] == '\\') {
|
||||||
|
// matched "^." or "/." before
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
}
|
||||||
while (j && p[j - 1] != '\\')
|
while (j && p[j - 1] != '\\')
|
||||||
--j;
|
--j;
|
||||||
} else {
|
} else {
|
||||||
|
|
|
@ -51,4 +51,34 @@ TEST(mkntpath, testRemoveDoubleSlash) {
|
||||||
EXPECT_STREQ(u"C:\\Users\\jart\\.config", p);
|
EXPECT_STREQ(u"C:\\Users\\jart\\.config", p);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
TEST(mkntpath, testRelativeCurrentParent) {
|
||||||
|
EXPECT_EQ(3, __mkntpath("./../", p));
|
||||||
|
EXPECT_STREQ(u"..\\", p);
|
||||||
|
}
|
||||||
|
|
||||||
|
TEST(mkntpath, testRelativeParentParent) {
|
||||||
|
EXPECT_EQ(6, __mkntpath("../../", p));
|
||||||
|
EXPECT_STREQ(u"..\\..\\", p);
|
||||||
|
}
|
||||||
|
|
||||||
|
TEST(mkntpath, testRelativeParentParentParent) {
|
||||||
|
EXPECT_EQ(9, __mkntpath("../../../", p));
|
||||||
|
EXPECT_STREQ(u"..\\..\\..\\", p);
|
||||||
|
}
|
||||||
|
|
||||||
|
TEST(mkntpath, testRelativeDirParent) {
|
||||||
|
EXPECT_EQ(2, __mkntpath("abc/../", p));
|
||||||
|
EXPECT_STREQ(u".\\", p);
|
||||||
|
}
|
||||||
|
|
||||||
|
TEST(mkntpath, testRelativeDirCurrent) {
|
||||||
|
EXPECT_EQ(4, __mkntpath("abc/./", p));
|
||||||
|
EXPECT_STREQ(u"abc\\", p);
|
||||||
|
}
|
||||||
|
|
||||||
|
TEST(mkntpath, testRelativeDirDirParent) {
|
||||||
|
EXPECT_EQ(4, __mkntpath("abc/def/../", p));
|
||||||
|
EXPECT_STREQ(u"abc\\", p);
|
||||||
|
}
|
||||||
|
|
||||||
#endif /* SupportsWindows() */
|
#endif /* SupportsWindows() */
|
||||||
|
|
Loading…
Reference in a new issue