Prechádzať zdrojové kódy

texturev: Fixed registry executable path string.

Branimir Karadžić 9 rokov pred
rodič
commit
7658a29e4a
1 zmenil súbory, kde vykonal 23 pridanie a 6 odobranie
  1. 23 6
      tools/texturev/texturev.cpp

+ 23 - 6
tools/texturev/texturev.cpp

@@ -221,6 +221,7 @@ struct View
 					const char* ext = strrchr(item->d_name, '.');
 					if (NULL != ext)
 					{
+						ext += 1;
 						bool supported = false;
 						for (uint32_t ii = 0; ii < BX_COUNTOF(s_supportedExt); ++ii)
 						{
@@ -443,6 +444,20 @@ void help(const char* _error = NULL)
 		);
 }
 
+std::string replaceAll(const std::string& _str, const char* _from, const char* _to)
+{
+	std::string str = _str;
+	size_t startPos = 0;
+	const size_t fromLen = strlen(_from);
+	const size_t toLen   = strlen(_to);
+	while ( (startPos = str.find(_from, startPos) ) != std::string::npos)
+	{
+		str.replace(startPos, fromLen, _to);
+		startPos += toLen;
+	}
+	return str;
+}
+
 void associate()
 {
 #if BX_PLATFORM_WINDOWS
@@ -451,22 +466,24 @@ void associate()
 	char exec[MAX_PATH];
 	GetModuleFileNameA(GetModuleHandleA(NULL), exec, MAX_PATH);
 
+	std::string fp = replaceAll(exec, "\\", "\\\\");
+
 	std::string value;
-	bx::stringPrintf(value, "@=\"\\\"%s\\\" \\\"%1\\\"\"\n\n", exec);
+	bx::stringPrintf(value, "@=\"\\\"%s\\\" \\\"%%1\\\"\"\r\n\r\n", fp.c_str() );
 
-	str += "Windows Registry Editor Version 5.00\n\n";
+	str += "Windows Registry Editor Version 5.00\r\n\r\n";
 
-	str += "[HKEY_CLASSES_ROOT\\texturev\\shell\\open\\command]\n";
+	str += "[HKEY_CLASSES_ROOT\\texturev\\shell\\open\\command]\r\n";
 	str += value;
 
-	str += "[HKEY_CLASSES_ROOT\\Applications\\texturev.exe\\shell\\open\\command]\n";
+	str += "[HKEY_CLASSES_ROOT\\Applications\\texturev.exe\\shell\\open\\command]\r\n";
 	str += value;
 
 	for (uint32_t ii = 0; ii < BX_COUNTOF(s_supportedExt); ++ii)
 	{
 		const char* ext = s_supportedExt[ii];
-		bx::stringPrintf(str, "[HKEY_CLASSES_ROOT\\.%s]\n@=\"texturev\"\n\n", ext);
-		bx::stringPrintf(str, "[HKEY_CURRENT_USER\\Software\\Classes\\.%s]\n@=\"texturev\"\n\n", ext);
+		bx::stringPrintf(str, "[HKEY_CLASSES_ROOT\\.%s]\n@=\"texturev\"\r\n\r\n", ext);
+		bx::stringPrintf(str, "[HKEY_CURRENT_USER\\Software\\Classes\\.%s]\n@=\"texturev\"\r\n\r\n", ext);
 	}
 
 	char temp[MAX_PATH];