Skip to content

Commit d7ef7c5

Browse files
committed
abs
1 parent befdce5 commit d7ef7c5

File tree

3 files changed

+33
-22
lines changed

3 files changed

+33
-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
@@ -2450,7 +2450,7 @@ namespace simplecpp {
24502450

24512451
bool isAbsolutePath(const std::string &path)
24522452
{
2453-
#ifdef SIMPLECPP_WINDOWS
2453+
#if defined(_WIN32) || defined(__CYGWIN__) || defined(__MINGW32__) || defined(__MSYS__)
24542454
// C:\\path\\file
24552455
// C:/path/file
24562456
if (path.length() >= 3 && std::isalpha(path[0]) && path[1] == ':' && (path[2] == '\\' || path[2] == '/'))
@@ -2460,10 +2460,12 @@ namespace simplecpp {
24602460
// //host/path/file
24612461
if (path.length() >= 2 && (path[0] == '\\' || path[0] == '/') && (path[1] == '\\' || path[1] == '/'))
24622462
return true;
2463+
#endif
24632464

2464-
return false;
2465-
#else
2465+
#if !defined(_WIN32) || defined(__MINGW32__)
24662466
return !path.empty() && path[0] == '/';
2467+
#else
2468+
return false;
24672469
#endif
24682470
}
24692471
}

test.cpp

Lines changed: 24 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -3257,36 +3257,42 @@ 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"));
32643276

3277+
// valid Unix paths
3278+
ASSERT_EQUALS(supportsUnx, simplecpp::isAbsolutePath("/foo/bar"));
3279+
ASSERT_EQUALS(supportsUnx, simplecpp::isAbsolutePath("/"));
3280+
ASSERT_EQUALS(supportsUnx, simplecpp::isAbsolutePath("//host/foo/bar"));
3281+
3282+
// invalid paths
32653283
ASSERT_EQUALS(false, simplecpp::isAbsolutePath("foo\\bar"));
32663284
ASSERT_EQUALS(false, simplecpp::isAbsolutePath("foo/bar"));
32673285
ASSERT_EQUALS(false, simplecpp::isAbsolutePath("foo.cpp"));
32683286
ASSERT_EQUALS(false, simplecpp::isAbsolutePath("C:foo.cpp"));
32693287
ASSERT_EQUALS(false, simplecpp::isAbsolutePath("C:foo\\bar.cpp"));
32703288
ASSERT_EQUALS(false, simplecpp::isAbsolutePath("bar.cpp"));
3271-
//ASSERT_EQUALS(true, simplecpp::isAbsolutePath("\\")); // TODO
32723289
ASSERT_EQUALS(false, simplecpp::isAbsolutePath("0:\\foo\\bar"));
32733290
ASSERT_EQUALS(false, simplecpp::isAbsolutePath("0:/foo/bar"));
32743291
ASSERT_EQUALS(false, simplecpp::isAbsolutePath("\\foo\\bar"));
3292+
3293+
//ASSERT_EQUALS(true, simplecpp::isAbsolutePath("\\")); // TODO
32753294
//ASSERT_EQUALS(false, simplecpp::isAbsolutePath("\\\\")); // TODO
32763295
//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
32903296
}
32913297

32923298
// crashes detected by fuzzer

0 commit comments

Comments
 (0)