mirror of
https://github.com/jart/cosmopolitan.git
synced 2025-02-07 06:53:33 +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 "/..$"
|
||||
while (j && p[j - 1] == '\\')
|
||||
--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] != '\\')
|
||||
--j;
|
||||
} else {
|
||||
|
|
|
@ -51,4 +51,34 @@ TEST(mkntpath, testRemoveDoubleSlash) {
|
|||
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() */
|
||||
|
|
Loading…
Reference in a new issue