Selaa lähdekoodia

device: windows: relax path checks

To be able to launch crown-* from MinGW shell etc.

Fixes: #182
Daniele Bartolini 1 vuosi sitten
vanhempi
sitoutus
ed8245cb64
3 muutettua tiedostoa jossa 18 lisäystä ja 17 poistoa
  1. 1 0
      docs/changelog.rst
  2. 4 5
      src/core/filesystem/path.cpp
  3. 13 12
      src/core/unit_tests.cpp

+ 1 - 0
docs/changelog.rst

@@ -8,6 +8,7 @@ Changelog
 
 * Improved ``graph`` command with the ability to add multiple fields, customize colors and limit the number of samples shown.
 * Windows: fixed xinput.dll not found on some systems.
+* Windows: fixed console output and absolute paths when launched under MinGW.
 
 0.50.0 --- 10 Oct 2024
 ----------------------

+ 4 - 5
src/core/filesystem/path.cpp

@@ -24,10 +24,8 @@ namespace path
 	{
 		CE_ENSURE(NULL != path);
 #if CROWN_PLATFORM_WINDOWS
-		return strlen32(path) > 2
-			&& isalpha(path[0])
-			&& path[1] == ':'
-			&& path[2] == PATH_SEPARATOR
+		return (strlen32(path) > 2 && isalpha(path[0]) && path[1] == ':' && path[2] == PATH_SEPARATOR)
+			|| (strlen32(path) > 1 && path[0] == '/' && isalpha(path[1]))
 			;
 #else
 		return strlen32(path) > 0
@@ -46,7 +44,8 @@ namespace path
 	{
 		CE_ENSURE(NULL != path);
 #if CROWN_PLATFORM_WINDOWS
-		return is_absolute(path) && strlen32(path) == 3;
+		return is_absolute(path)
+			&& ((strlen(path) == 2 && path[0] == '/') || strlen32(path) == 3 && isalpha(path[0]));
 #else
 		return is_absolute(path) && strlen32(path) == 1;
 #endif

+ 13 - 12
src/core/unit_tests.cpp

@@ -1376,22 +1376,23 @@ static void test_path()
 {
 #if CROWN_PLATFORM_WINDOWS
 	{
-		const bool a = path::is_absolute("C:\\Users\\foo");
-		ENSURE(a == true);
-		const bool b = path::is_absolute("Users\\foo");
-		ENSURE(b == false);
+		ENSURE(path::is_absolute("C:\\Users\\foo"));
+		ENSURE(path::is_absolute("/c/Users/foo"));
+		ENSURE(!path::is_absolute("Users\\foo"));
+		ENSURE(!path::is_absolute("Users/foo"));
 	}
 	{
-		const bool a = path::is_relative("D:\\Users\\foo");
-		ENSURE(a == false);
-		const bool b = path::is_relative("Users\\foo");
-		ENSURE(b == true);
+		ENSURE(!path::is_relative("D:\\Users\\foo"));
+		ENSURE(!path::is_relative("/d/Users/foo"));
+		ENSURE(path::is_relative("Users\\foo"));
+		ENSURE(path::is_relative("Users/foo"));
 	}
 	{
-		const bool a = path::is_root("E:\\");
-		ENSURE(a == true);
-		const bool b = path::is_root("E:\\Users");
-		ENSURE(b == false);
+		ENSURE(path::is_root("E:\\"));
+		ENSURE(path::is_root("/c"));
+		ENSURE(!path::is_root("/home"));
+		ENSURE(!path::is_root("E:\\Users"));
+		ENSURE(!path::is_root("/c/Users"));
 	}
 	{
 		ENSURE(path::has_trailing_separator("C:\\Users\\foo\\"));