Skip to content

Commit 3449de7

Browse files
committed
abs
1 parent befdce5 commit 3449de7

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
@@ -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: 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)