diff options
Diffstat (limited to 'source/core')
| -rw-r--r-- | source/core/platform.cpp | 15 | ||||
| -rw-r--r-- | source/core/slang-string.cpp | 18 |
2 files changed, 29 insertions, 4 deletions
diff --git a/source/core/platform.cpp b/source/core/platform.cpp index dbb536b0f..374606e4a 100644 --- a/source/core/platform.cpp +++ b/source/core/platform.cpp @@ -8,6 +8,7 @@ #undef WIN32_LEAN_AND_MEAN #undef NOMINMAX #else + #include "slang-string.h" #include <dlfcn.h> #endif @@ -27,7 +28,19 @@ namespace Slang } #else { - void* h = dlopen(name, RTLD_LOCAL); + String fullName; + fullName.append("lib"); + fullName.append(name); + fullName.append(".so"); + + void* h = dlopen(fullName.Buffer(), RTLD_NOW|RTLD_LOCAL); + if(!h) + { + if(auto msg = dlerror()) + { + fprintf(stderr, "error: %s\n", msg); + } + } result.handle = (Handle) h; } diff --git a/source/core/slang-string.cpp b/source/core/slang-string.cpp index 5a3d8e4f9..460a077b5 100644 --- a/source/core/slang-string.cpp +++ b/source/core/slang-string.cpp @@ -172,14 +172,26 @@ namespace Slang else { List<char> buf; - Slang::Encoding::UTF16->GetBytes(buf, *this); + switch(sizeof(wchar_t)) + { + case 2: + Slang::Encoding::UTF16->GetBytes(buf, *this); + break; + + case 4: + Slang::Encoding::UTF32->GetBytes(buf, *this); + break; + + default: + break; + } auto length = buf.Count() / sizeof(wchar_t); if (outLength) *outLength = length; - buf.Add(0); - buf.Add(0); + for(int ii = 0; ii < sizeof(wchar_t); ++ii) + buf.Add(0); wchar_t* beginData = (wchar_t*)buf.Buffer(); wchar_t* endData = beginData + length; |
