Skip to content

Commit d8e95d7

Browse files
committed
abs
1 parent 6b50ff4 commit d8e95d7

File tree

3 files changed

+35
-22
lines changed

3 files changed

+35
-22
lines changed

.github/workflows/CI-mingw.yml

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -79,10 +79,13 @@ jobs:
7979
pacman -S --noconfirm gcc
8080
8181
- name: make test
82-
run: make -j$(nproc) test
82+
run: |
83+
# TODO: run tests with Windows paths
84+
make -j$(nproc) test
8385
8486
- name: selfcheck
8587
run: |
88+
# TODO: run tests with Windows paths
8689
make -j$(nproc) selfcheck
8790
8891
- name: Run CMake

simplecpp.cpp

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2449,7 +2449,7 @@ namespace simplecpp {
24492449

24502450
bool isAbsolutePath(const std::string &path)
24512451
{
2452-
#ifdef SIMPLECPP_WINDOWS
2452+
#if defined(_WIN32) || defined(__CYGWIN__) || defined(__MINGW32__) || defined(__MSYS__)
24532453
// C:\\path\\file
24542454
// C:/path/file
24552455
if (path.length() >= 3 && std::isalpha(path[0]) && path[1] == ':' && (path[2] == '\\' || path[2] == '/'))
@@ -2459,10 +2459,12 @@ namespace simplecpp {
24592459
// //host/path/file
24602460
if (path.length() >= 2 && (path[0] == '\\' || path[0] == '/') && (path[1] == '\\' || path[1] == '/'))
24612461
return true;
2462+
#endif
24622463

2463-
return false;
2464-
#else
2464+
#if !defined(_WIN32) || defined(__MINGW32__)
24652465
return !path.empty() && path[0] == '/';
2466+
#else
2467+
return false;
24662468
#endif
24672469
}
24682470
}

test.cpp

Lines changed: 26 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -3257,36 +3257,44 @@ static void safe_api()
32573257
}
32583258

32593259
static void isAbsolutePath() {
3260-
#ifdef _WIN32
3261-
ASSERT_EQUALS(true, simplecpp::isAbsolutePath("C:\\foo\\bar"));
3262-
ASSERT_EQUALS(true, simplecpp::isAbsolutePath("C:/foo/bar"));
3263-
ASSERT_EQUALS(true, simplecpp::isAbsolutePath("\\\\foo\\bar"));
3260+
#if defined(_WIN32) || defined(__CYGWIN__) || defined(__MINGW32__) || defined(__MSYS__)
3261+
constexpr bool supportsWin = true;
3262+
#else
3263+
constexpr bool supportsWin = false;
3264+
#endif
3265+
3266+
#if !defined(_WIN32) || defined(__MINGW32__)
3267+
constexpr bool supportsUnx = true;
3268+
#else
3269+
constexpr bool supportsUnx = false;
3270+
#endif
3271+
3272+
// valid Windows paths
3273+
ASSERT_EQUALS(supportsWin, simplecpp::isAbsolutePath("C:\\foo\\bar"));
3274+
ASSERT_EQUALS(supportsWin, simplecpp::isAbsolutePath("C:/foo/bar"));
3275+
ASSERT_EQUALS(supportsWin, simplecpp::isAbsolutePath("\\\\foo\\bar"));
3276+
3277+
// valid Unix paths
3278+
ASSERT_EQUALS(supportsUnx, simplecpp::isAbsolutePath("/foo/bar"));
3279+
ASSERT_EQUALS(supportsUnx, simplecpp::isAbsolutePath("/"));
3280+
3281+
// valid Windows and Unix paths
3282+
ASSERT_EQUALS(supportsWin || supportsUnx, simplecpp::isAbsolutePath("//host/foo/bar"));
32643283

3284+
// invalid paths
32653285
ASSERT_EQUALS(false, simplecpp::isAbsolutePath("foo\\bar"));
32663286
ASSERT_EQUALS(false, simplecpp::isAbsolutePath("foo/bar"));
32673287
ASSERT_EQUALS(false, simplecpp::isAbsolutePath("foo.cpp"));
32683288
ASSERT_EQUALS(false, simplecpp::isAbsolutePath("C:foo.cpp"));
32693289
ASSERT_EQUALS(false, simplecpp::isAbsolutePath("C:foo\\bar.cpp"));
32703290
ASSERT_EQUALS(false, simplecpp::isAbsolutePath("bar.cpp"));
3271-
//ASSERT_EQUALS(true, simplecpp::isAbsolutePath("\\")); // TODO
32723291
ASSERT_EQUALS(false, simplecpp::isAbsolutePath("0:\\foo\\bar"));
32733292
ASSERT_EQUALS(false, simplecpp::isAbsolutePath("0:/foo/bar"));
32743293
ASSERT_EQUALS(false, simplecpp::isAbsolutePath("\\foo\\bar"));
3294+
3295+
//ASSERT_EQUALS(true, simplecpp::isAbsolutePath("\\")); // TODO
32753296
//ASSERT_EQUALS(false, simplecpp::isAbsolutePath("\\\\")); // TODO
32763297
//ASSERT_EQUALS(false, simplecpp::isAbsolutePath("//")); // TODO
3277-
ASSERT_EQUALS(false, simplecpp::isAbsolutePath("/foo/bar"));
3278-
ASSERT_EQUALS(false, simplecpp::isAbsolutePath("/"));
3279-
#else
3280-
ASSERT_EQUALS(true, simplecpp::isAbsolutePath("/foo/bar"));
3281-
ASSERT_EQUALS(true, simplecpp::isAbsolutePath("/"));
3282-
ASSERT_EQUALS(true, simplecpp::isAbsolutePath("//host/foo/bar"));
3283-
3284-
ASSERT_EQUALS(false, simplecpp::isAbsolutePath("foo/bar"));
3285-
ASSERT_EQUALS(false, simplecpp::isAbsolutePath("foo.cpp"));
3286-
ASSERT_EQUALS(false, simplecpp::isAbsolutePath("C:\\foo\\bar"));
3287-
ASSERT_EQUALS(false, simplecpp::isAbsolutePath("C:/foo/bar"));
3288-
ASSERT_EQUALS(false, simplecpp::isAbsolutePath("\\\\foo\\bar"));
3289-
#endif
32903298
}
32913299

32923300
// crashes detected by fuzzer

0 commit comments

Comments
 (0)