--- filezilla-3.51.0/src/interface/FileZilla.cpp.orig	2020-12-12 16:02:18.374877500 +0100
+++ filezilla-3.51.0/src/interface/FileZilla.cpp	2020-12-12 16:06:17.488467800 +0100
@@ -47,8 +47,10 @@
 namespace {
 #if FZ_WINDOWS
 std::wstring const PATH_SEP = L";";
+std::wstring const DIR_SEP = L"\\";
 #else
 std::wstring const PATH_SEP = L":";
+std::wstring const DIR_SEP = L"/";
 #endif
 }
 
@@ -409,15 +411,15 @@
 			return ret;
 		}
 
-		if (!prefixSub.empty() && selfDir.size() > 5 && fz::ends_with(selfDir, std::wstring(L"/bin/"))) {
-			std::wstring path = selfDir.substr(0, selfDir.size() - 4) + prefixSub + L"/";
+		if (!prefixSub.empty() && selfDir.size() > 5 && fz::ends_with(selfDir, std::wstring(DIR_SEP + L"bin" + DIR_SEP))) {
+			std::wstring path = selfDir.substr(0, selfDir.size() - 4) + prefixSub + DIR_SEP;
 			if (testPath(path)) {
 				return ret;
 			}
 		}
 
 		// Development paths
-		if (searchSelfDir && selfDir.size() > 7 && fz::ends_with(selfDir, std::wstring(L"/.libs/"))) {
+		if (searchSelfDir && selfDir.size() > 7 && fz::ends_with(selfDir, std::wstring(DIR_SEP + L".libs" + DIR_SEP))) {
 			std::wstring path = selfDir.substr(0, selfDir.size() - 6);
 			if (FileExists(path + L"Makefile")) {
 				if (testPath(path)) {
@@ -434,8 +436,8 @@
 
 		for (auto const& segment : segments) {
 			auto const cur = CLocalPath(segment).GetPath();
-			if (cur.size() > 5 && fz::ends_with(cur, std::wstring(L"/bin/"))) {
-				std::wstring path = cur.substr(0, cur.size() - 4) + prefixSub + L"/";
+			if (cur.size() > 5 && fz::ends_with(cur, std::wstring(DIR_SEP + L"bin" + DIR_SEP))) {
+				std::wstring path = cur.substr(0, cur.size() - 4) + prefixSub + DIR_SEP;
 				if (testPath(path)) {
 					return ret;
 				}
