From 8cf12291f42e97fdb3df7c212b6c766512677240 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Branimir=20Karad=C5=BEi=C4=87?= Date: Thu, 5 May 2016 22:55:38 -0700 Subject: [PATCH] texturev: Added Linux file association. --- tools/texturev/texturev.cpp | 44 ++++++++++++++++++++++++------------- 1 file changed, 29 insertions(+), 15 deletions(-) diff --git a/tools/texturev/texturev.cpp b/tools/texturev/texturev.cpp index cf343afbe..91dca007e 100644 --- a/tools/texturev/texturev.cpp +++ b/tools/texturev/texturev.cpp @@ -444,20 +444,6 @@ 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 @@ -466,7 +452,7 @@ void associate() char exec[MAX_PATH]; GetModuleFileNameA(GetModuleHandleA(NULL), exec, MAX_PATH); - std::string strExec = replaceAll(exec, "\\", "\\\\"); + std::string strExec = bx::replaceAll(exec, "\\", "\\\\"); std::string value; bx::stringPrintf(value, "@=\"\\\"%s\\\" \\\"%%1\\\"\"\r\n\r\n", strExec.c_str() ); @@ -513,6 +499,34 @@ void associate() } } } +#elif BX_PLATFORM_LINUX + std::string str; + str += "#/bin/bash\n\n"; + + for (uint32_t ii = 0; ii < BX_COUNTOF(s_supportedExt); ++ii) + { + const char* ext = s_supportedExt[ii]; + bx::stringPrintf(str, "xdg-mime default texturev.desktop image/%s\n", ext); + } + + str += "\n"; + + bx::CrtFileWriter writer; + bx::Error err; + if (bx::open(&writer, "/tmp/texturev.sh", false, &err) ) + { + bx::write(&writer, str.c_str(), str.length(), &err); + bx::close(&writer); + + if (err.isOk() ) + { + bx::ProcessReader reader; + if (bx::open(&reader, "/bin/bash /tmp/texturev.sh", &err) ) + { + bx::close(&reader); + } + } + } #endif // BX_PLATFORM_WINDOWS }