bool ClipboardSetText(HWND owner, const UString &s) { CClipboard clipboard; if (!clipboard.Open(owner)) return false; #ifdef _WIN32 if (!::EmptyClipboard()) return false; bool res; res = ClipboardSetData(CF_UNICODETEXT, (const wchar_t *)s, (s.Length() + 1) * sizeof(wchar_t)); #ifndef _UNICODE AString a; a = UnicodeStringToMultiByte(s, CP_ACP); res |= ClipboardSetData(CF_TEXT, (const char *)a, (a.Length() + 1) * sizeof(char)); a = UnicodeStringToMultiByte(s, CP_OEMCP); res |= ClipboardSetData(CF_OEMTEXT, (const char *)a, (a.Length() + 1) * sizeof(char)); #endif return res; #else wxTheClipboard->Clear(); // This data objects are held by the clipboard, // so do not delete them in the app. wxString ws(s); wxTheClipboard->SetData( new wxTextDataObject(ws) ); return true; #endif }
NResult::EEnum Execute(const CFileInfo &oldFileInfo, const CFileInfo &newFileInfo) { const int kYSize = 20; const int kXSize = 76; CFileInfoStrings oldFileInfoStrings; CFileInfoStrings newFileInfoStrings; SetFileInfoStrings(oldFileInfo, oldFileInfoStrings); SetFileInfoStrings(newFileInfo, newFileInfoStrings); AString oldName = UnicodeStringToMultiByte(oldFileInfo.Name, CP_OEMCP); AString newName = UnicodeStringToMultiByte(newFileInfo.Name, CP_OEMCP); struct CInitDialogItem initItems[]={ { DI_DOUBLEBOX, 3, 1, kXSize - 4, kYSize - 2, false, false, 0, false, NMessageID::kOverwriteTitle, NULL, NULL }, { DI_TEXT, 5, 2, 0, 0, false, false, 0, false, NMessageID::kOverwriteMessage1, NULL, NULL }, { DI_TEXT, 3, 3, 0, 0, false, false, DIF_BOXCOLOR|DIF_SEPARATOR, false, -1, "", NULL }, { DI_TEXT, 5, 4, 0, 0, false, false, 0, false, NMessageID::kOverwriteMessageWouldYouLike, NULL, NULL }, { DI_TEXT, 7, 6, 0, 0, false, false, 0, false, -1, oldName, NULL }, { DI_TEXT, 7, 7, 0, 0, false, false, 0, false, -1, oldFileInfoStrings.Size, NULL }, { DI_TEXT, 7, 8, 0, 0, false, false, 0, false, -1, oldFileInfoStrings.Time, NULL }, { DI_TEXT, 5, 10, 0, 0, false, false, 0, false, NMessageID::kOverwriteMessageWithtTisOne, NULL, NULL }, { DI_TEXT, 7, 12, 0, 0, false, false, 0, false, -1, newName, NULL }, { DI_TEXT, 7, 13, 0, 0, false, false, 0, false, -1, newFileInfoStrings.Size, NULL }, { DI_TEXT, 7, 14, 0, 0, false, false, 0, false, -1, newFileInfoStrings.Time, NULL }, { DI_TEXT, 3, kYSize - 5, 0, 0, false, false, DIF_BOXCOLOR|DIF_SEPARATOR, false, -1, "", NULL }, { DI_BUTTON, 0, kYSize - 4, 0, 0, true, false, DIF_CENTERGROUP, true, NMessageID::kOverwriteYes, NULL, NULL }, { DI_BUTTON, 0, kYSize - 4, 0, 0, false, false, DIF_CENTERGROUP, false, NMessageID::kOverwriteYesToAll, NULL, NULL }, { DI_BUTTON, 0, kYSize - 4, 0, 0, false, false, DIF_CENTERGROUP, false, NMessageID::kOverwriteNo, NULL, NULL }, { DI_BUTTON, 0, kYSize - 4, 0, 0, false, false, DIF_CENTERGROUP, false, NMessageID::kOverwriteNoToAll, NULL, NULL }, { DI_BUTTON, 0, kYSize - 3, 0, 0, false, false, DIF_CENTERGROUP, false, NMessageID::kOverwriteAutoRename, NULL, NULL }, { DI_BUTTON, 0, kYSize - 3, 0, 0, false, false, DIF_CENTERGROUP, false, NMessageID::kOverwriteCancel, NULL, NULL } }; const int kNumDialogItems = ARRAY_SIZE(initItems); FarDialogItem aDialogItems[kNumDialogItems]; g_StartupInfo.InitDialogItems(initItems, aDialogItems, kNumDialogItems); int anAskCode = g_StartupInfo.ShowDialog(kXSize, kYSize, NULL, aDialogItems, kNumDialogItems); const int kButtonStartPos = kNumDialogItems - 6; if (anAskCode >= kButtonStartPos && anAskCode < kNumDialogItems) return NResult::EEnum(anAskCode - kButtonStartPos); return NResult::kCancel; }
int MyStringCollate(const wchar_t *s1, const wchar_t *s2) { int res = CompareStringW( LOCALE_USER_DEFAULT, SORT_STRINGSORT, s1, -1, s2, -1); #ifdef _UNICODE return ConvertCompareResult(res); #else if (res != 0 || ::GetLastError() != ERROR_CALL_NOT_IMPLEMENTED) return ConvertCompareResult(res); return MyStringCollate(UnicodeStringToMultiByte(s1), UnicodeStringToMultiByte(s2)); #endif }
void ShowErrorMessage(DWORD errorCode) { UString message = NError::MyFormatMessageW(errorCode); message.Replace(L"\x0D", L""); message.Replace(L"\x0A", L" "); g_StartupInfo.ShowMessage(UnicodeStringToMultiByte(message, CP_OEMCP)); }
HANDLE CFindChangeNotification::FindFirst(LPCWSTR pathName, bool watchSubtree, DWORD notifyFilter) { if (g_IsNT) return (_handle = ::FindFirstChangeNotificationW(pathName, BoolToBOOL(watchSubtree), notifyFilter)); return FindFirst(UnicodeStringToMultiByte(pathName, GetCurrentCodePage()), watchSubtree, notifyFilter); }
bool CFindFile::FindFirst(LPCWSTR wildcard, CFileInfoW &fileInfo) { if (!Close()) return false; if (g_IsNT) { WIN32_FIND_DATAW fd; _handle = ::FindFirstFileW(wildcard, &fd); #ifdef WIN_LONG_PATH if (_handle == INVALID_HANDLE_VALUE) { UString longPath; if (GetLongPath(wildcard, longPath)) _handle = ::FindFirstFileW(longPath, &fd); } #endif if (_handle != INVALID_HANDLE_VALUE) ConvertWIN32_FIND_DATA_To_FileInfo(fd, fileInfo); } else { WIN32_FIND_DATAA fd; _handle = ::FindFirstFileA(UnicodeStringToMultiByte(wildcard, GetCurrentCodePage()), &fd); if (_handle != INVALID_HANDLE_VALUE) ConvertWIN32_FIND_DATA_To_FileInfo(fd, fileInfo); } return (_handle != INVALID_HANDLE_VALUE); }
bool CFileBase::Create(LPCWSTR fileName, DWORD desiredAccess, DWORD shareMode, DWORD creationDisposition, DWORD flagsAndAttributes,bool ignoreSymbolicLink) { Close(); return Create(UnicodeStringToMultiByte(fileName, CP_ACP), desiredAccess, shareMode, creationDisposition, flagsAndAttributes,ignoreSymbolicLink); }
static bool ParseUtf16zString2(const Byte *p, UInt32 size, AString &res) { UString s; if (!ParseUtf16zString(p, size, s)) return false; res = UnicodeStringToMultiByte(s); return true; }
void test_mbs(void) { wchar_t wstr1[256] = { L'e', 0xE8, // latin small letter e with grave 0xE9, // latin small letter e with acute L'a', 0xE0, // latin small letter a with grave 0x20AC, // euro sign L'b', 0 }; wchar_t wstr2[256]; char astr[256]; extern int global_use_utf16_conversion; global_use_utf16_conversion = 1; size_t len1 = wcslen(wstr1); printf("wstr1 - %d - '%ls'\n",(int)len1,wstr1); size_t len0 = wcstombs(astr,wstr1,sizeof(astr)); printf("astr - %d - '%s'\n",(int)len0,astr); size_t len2 = mbstowcs(wstr2,astr,sizeof(wstr2)/sizeof(*wstr2)); printf("wstr - %d - '%ls'\n",(int)len2,wstr2); if (wcscmp(wstr1,wstr2) != 0) { printf("ERROR during conversions wcs -> mbs -> wcs\n"); exit(EXIT_FAILURE); } char *ptr = astr; size_t len = 0; while (*ptr) { ptr = CharNextA(ptr); len += 1; } if (len != len1) { printf("ERROR CharNextA : len=%d, len1=%d\n",(int)len,(int)len1); exit(EXIT_FAILURE); } UString ustr(wstr1); assert(ustr.Length() == (int)len1); AString ansistr(astr); assert(ansistr.Length() == (int)len0); ansistr = UnicodeStringToMultiByte(ustr); assert(ansistr.Length() == (int)len0); assert(strcmp(ansistr,astr) == 0); assert(wcscmp(ustr,wstr1) == 0); UString ustr2 = MultiByteToUnicodeString(astr); assert(ustr2.Length() == (int)len1); assert(wcscmp(ustr2,wstr1) == 0); }
bool ClipboardSetText(HWND owner, const UString &s) { CClipboard clipboard; if (!clipboard.Open(owner)) return false; if (!::EmptyClipboard()) return false; bool res; res = ClipboardSetData(CF_UNICODETEXT, (const wchar_t *)s, (s.Length() + 1) * sizeof(wchar_t)); #ifndef _UNICODE AString a; a = UnicodeStringToMultiByte(s, CP_ACP); res |= ClipboardSetData(CF_TEXT, (const char *)a, (a.Length() + 1) * sizeof(char)); a = UnicodeStringToMultiByte(s, CP_OEMCP); res |= ClipboardSetData(CF_OEMTEXT, (const char *)a, (a.Length() + 1) * sizeof(char)); #endif return res; }
wchar_t * MyStringLower(wchar_t *s) { if (s == 0) return 0; wchar_t *res = CharLowerW(s); if (res != 0 || ::GetLastError() != ERROR_CALL_NOT_IMPLEMENTED) return res; AString a = UnicodeStringToMultiByte(s); a.MakeLower(); return MyStringCopy(s, (const wchar_t *)MultiByteToUnicodeString(a)); }
CStdOutStream & CStdOutStream::operator<<(const wchar_t *s) { int codePage = g_CodePage; if (codePage == -1) codePage = CP_OEMCP; AString dest; if (codePage == CP_UTF8) ConvertUnicodeToUTF8(s, dest); else dest = UnicodeStringToMultiByte(s, (UINT)codePage); *this << (const char *)dest; return *this; }
bool CFileBase::Create(LPCWSTR fileName, DWORD desiredAccess, DWORD shareMode, DWORD creationDisposition, DWORD flagsAndAttributes) { if (g_IsNT) { Close(); _handle = ::CreateFileW(fileName, desiredAccess, shareMode, (LPSECURITY_ATTRIBUTES)NULL, creationDisposition, flagsAndAttributes, (HANDLE) NULL); return (_fileIsOpen = (_handle != INVALID_HANDLE_VALUE)); } return Create(UnicodeStringToMultiByte(fileName, ::AreFileApisANSI() ? CP_ACP : CP_OEMCP), desiredAccess, shareMode, creationDisposition, flagsAndAttributes); }
bool CStdInStream::Open(LPCTSTR fileName) throw() { Close(); // _stream = _tfopen(fileName, kFileOpenMode); #ifdef _UNICODE AString aStr = UnicodeStringToMultiByte(fileName, CP_ACP); // FIXME const char * name = nameWindowToUnix(aStr); #else const char * name = nameWindowToUnix(fileName); #endif _stream = fopen(name, "r"); _streamIsOpen = (_stream != 0); return _streamIsOpen; }
bool CFindFile::FindFirst(CFSTR cfWildcard, CFileInfo &fi, bool ignoreLink) { if (!Close()) return false; AString Awildcard = UnicodeStringToMultiByte(cfWildcard, CP_ACP); const char * wildcard = (const char *)Awildcard; if ((!wildcard) || (wildcard[0]==0)) { SetLastError(ERROR_PATH_NOT_FOUND); return false; } my_windows_split_path(nameWindowToUnix(wildcard),_directory,_pattern); TRACEN((printf("CFindFile::FindFirst : %s (dirname=%s,pattern=%s)\n",wildcard,(const char *)_directory,(const char *)_pattern))) _dirp = ::opendir((const char *)_directory); TRACEN((printf("CFindFile::FindFirst : opendir=%p\n",_dirp))) if ((_dirp == 0) && (global_use_utf16_conversion)) { // Try to recover the original filename UString ustr = MultiByteToUnicodeString(_directory, 0); AString resultString; bool is_good = originalFilename(ustr, resultString); if (is_good) { _dirp = ::opendir((const char *)resultString); _directory = resultString; } } if (_dirp == 0) return false; struct dirent *dp; while ((dp = readdir(_dirp)) != NULL) { if (filter_pattern(dp->d_name,(const char *)_pattern,0) == 1) { int retf = fillin_CFileInfo(fi,(const char *)_directory,dp->d_name,ignoreLink); if (retf) { TRACEN((printf("CFindFile::FindFirst : closedir-1(dirp=%p)\n",_dirp))) closedir(_dirp); _dirp = 0; SetLastError( ERROR_NO_MORE_FILES ); return false; } TRACEN((printf("CFindFile::FindFirst -%s- true\n",dp->d_name))) return true; } }
bool DoesFileOrDirExist(LPCWSTR name) { AString Aname = UnicodeStringToMultiByte(name, CP_ACP); bool bret = DoesFileOrDirExist((LPCSTR)Aname); if (bret) return bret; // Try to recover the original filename AString resultString; bool is_good = originalFilename(name, resultString); if (is_good) { bret = DoesFileOrDirExist((const char *)resultString); } return bret; }
HANDLE CFindChangeNotification::FindFirst(LPCWSTR pathName, bool watchSubtree, DWORD notifyFilter) { if (!g_IsNT) return FindFirst(UnicodeStringToMultiByte(pathName, GetCurrentCodePage()), watchSubtree, notifyFilter); _handle = ::FindFirstChangeNotificationW(pathName, BoolToBOOL(watchSubtree), notifyFilter); #ifdef WIN_LONG_PATH if (!IsHandleAllocated()) { UString longPath; if (GetLongPath(pathName, longPath)) _handle = ::FindFirstChangeNotificationW(longPath, BoolToBOOL(watchSubtree), notifyFilter); } #endif return _handle; }
bool CFindFile::FindFirst(LPCWSTR wildcard, CFileInfoW &fileInfo) { if (!Close()) return false; CFileInfo fileInfo0; AString Awildcard = UnicodeStringToMultiByte(wildcard, CP_ACP); bool bret = FindFirst((LPCSTR)Awildcard, fileInfo0); if (bret) { fileInfo.Attrib = fileInfo0.Attrib; fileInfo.CTime = fileInfo0.CTime; fileInfo.ATime = fileInfo0.ATime; fileInfo.MTime = fileInfo0.MTime; fileInfo.Size = fileInfo0.Size; fileInfo.IsDevice = fileInfo0.IsDevice; fileInfo.Name = GetUnicodeString(fileInfo0.Name, CP_ACP); } return bret; }
bool CFindFile::FindFirst(LPCWSTR wildcard, CFileInfoW &fileInfo) { Close(); if (g_IsNT) { WIN32_FIND_DATAW findData; _handle = ::FindFirstFileW(wildcard, &findData); if (_handleAllocated = (_handle != INVALID_HANDLE_VALUE)) ConvertWIN32_FIND_DATA_To_FileInfo(findData, fileInfo); } else { WIN32_FIND_DATAA findData; _handle = ::FindFirstFileA(UnicodeStringToMultiByte(wildcard, GetCurrentCodePage()), &findData); if (_handleAllocated = (_handle != INVALID_HANDLE_VALUE)) ConvertWIN32_FIND_DATA_To_FileInfo(findData, fileInfo); } return _handleAllocated; }
bool CFileBase::Create(LPCWSTR fileName, DWORD desiredAccess, DWORD shareMode, DWORD creationDisposition, DWORD flagsAndAttributes) { if (!g_IsNT) return Create(UnicodeStringToMultiByte(fileName, ::AreFileApisANSI() ? CP_ACP : CP_OEMCP), desiredAccess, shareMode, creationDisposition, flagsAndAttributes); if (!Close()) return false; _handle = ::CreateFileW(NtPath(fileName), desiredAccess, shareMode, (LPSECURITY_ATTRIBUTES)NULL, creationDisposition, flagsAndAttributes | FILE_FLAG_POSIX_SEMANTICS, (HANDLE)NULL); #ifdef WIN_LONG_PATH if (_handle == INVALID_HANDLE_VALUE) { UString longPath; if (GetLongPath(fileName, longPath)) _handle = ::CreateFileW(longPath, desiredAccess, shareMode, (LPSECURITY_ATTRIBUTES)NULL, creationDisposition, flagsAndAttributes | FILE_FLAG_POSIX_SEMANTICS, (HANDLE)NULL); } #endif return (_handle != INVALID_HANDLE_VALUE); }
AString fs2fas(CFSTR s) { return UnicodeStringToMultiByte(s, GetCurrentCodePage()); }
STDMETHODIMP CHandler::UpdateItems(ISequentialOutStream *outStream, UInt32 numItems, IArchiveUpdateCallback *updateCallback) { if (numItems != 1) return E_INVALIDARG; UInt64 size; Int32 newData; Int32 newProperties; UInt32 indexInArchive; UInt32 itemIndex = 0; if (!updateCallback) return E_FAIL; RINOK(updateCallback->GetUpdateItemInfo(0, &newData, &newProperties, &indexInArchive)); CItem newItem = m_Item; newItem.ExtraFlags = 0; newItem.Flags = 0; if (IntToBool(newProperties)) { FILETIME utcTime; UString name; { NCOM::CPropVariant prop; RINOK(updateCallback->GetProperty(itemIndex, kpidMTime, &prop)); if (prop.vt != VT_FILETIME) return E_INVALIDARG; utcTime = prop.filetime; } { NCOM::CPropVariant prop; RINOK(updateCallback->GetProperty(itemIndex, kpidPath, &prop)); if (prop.vt == VT_EMPTY) name.Empty(); else if (prop.vt != VT_BSTR) return E_INVALIDARG; else name = prop.bstrVal; } { NCOM::CPropVariant prop; RINOK(updateCallback->GetProperty(itemIndex, kpidIsDir, &prop)); if (prop.vt == VT_BOOL) { if (prop.boolVal != VARIANT_FALSE) return E_INVALIDARG; } else if (prop.vt != VT_EMPTY) return E_INVALIDARG; } if(!FileTimeToUnixTime(utcTime, newItem.Time)) return E_INVALIDARG; newItem.Name = UnicodeStringToMultiByte(name, CP_ACP); int dirDelimiterPos = newItem.Name.ReverseFind(CHAR_PATH_SEPARATOR); if (dirDelimiterPos >= 0) newItem.Name = newItem.Name.Mid(dirDelimiterPos + 1); newItem.SetNameIsPresentFlag(!newItem.Name.IsEmpty()); } if (IntToBool(newData)) { { NCOM::CPropVariant prop; RINOK(updateCallback->GetProperty(itemIndex, kpidSize, &prop)); if (prop.vt != VT_UI8) return E_INVALIDARG; size = prop.uhVal.QuadPart; } newItem.UnPackSize32 = (UInt32)size; UInt32 level = m_Level; if (level == 0xFFFFFFFF) level = 5; if (m_Method.NumPasses == 0xFFFFFFFF) m_Method.NumPasses = (level >= 9 ? kNumPassesX9 : (level >= 7 ? kNumPassesX7 : kNumPassesX1)); if (m_Method.NumFastBytes == 0xFFFFFFFF) m_Method.NumFastBytes = (level >= 9 ? kNumFastBytesX9 : (level >= 7 ? kNumFastBytesX7 : kNumFastBytesX1)); if (m_Method.Algo == 0xFFFFFFFF) m_Method.Algo = (level >= 5 ? kAlgoX5 : kAlgoX1); return UpdateArchive( EXTERNAL_CODECS_VARS m_Stream, size, outStream, newItem, m_Method, itemIndex, updateCallback); } if (indexInArchive != 0) return E_INVALIDARG; if (IntToBool(newProperties)) { COutArchive outArchive; outArchive.Create(outStream); outArchive.WriteHeader(newItem); RINOK(m_Stream->Seek(m_StreamStartPosition + m_DataOffset, STREAM_SEEK_SET, NULL)); } else { RINOK(m_Stream->Seek(m_StreamStartPosition, STREAM_SEEK_SET, NULL)); } return CopyStreams(m_Stream, outStream); }
AString GUIDToStringA(REFGUID guid) { return UnicodeStringToMultiByte(GUIDToStringW(guid)); }
AString UnicodeStringToMultiByte(const UString &srcString, UINT codePage) { bool defaultCharWasUsed; return UnicodeStringToMultiByte(srcString, codePage, '_', defaultCharWasUsed); }
CStdOutStream & CStdOutStream::operator<<(const wchar_t *string) { *this << (const char *)UnicodeStringToMultiByte(string, CP_OEMCP); return *this; }
CSysString GetSysPath(LPCWSTR sysPath) { return UnicodeStringToMultiByte(sysPath, GetCurrentCodePage()); }
bool MySetWindowText(HWND wnd, LPCWSTR s) { if (g_IsNT) return BOOLToBool(::SetWindowTextW(wnd, s)); return BOOLToBool(::SetWindowTextA(wnd, UnicodeStringToMultiByte(s))); }
bool CLibrary::Load(LPCTSTR lpLibFileName) { if(!Free()) return false; void *handler = 0; char name[MAX_PATHNAME_LEN+1]; #ifdef _UNICODE AString name2 = UnicodeStringToMultiByte(lpLibFileName); strcpy(name,nameWindowToUnix((const char *)name2)); #else strcpy(name,nameWindowToUnix(lpLibFileName)); #endif // replace ".dll" with ".so" size_t len = strlen(name); if ((len >=4) && (strcmp(name+len-4,".dll") == 0)) { strcpy(name+len-4,".so"); } #ifdef __ANDROID__ char tmp[MAX_PATHNAME_LEN+1]; if (strncmp(name, "./", 2) == 0) { strcpy(tmp, name+2); sprintf(name, "lib%s", tmp); } #endif TRACEN((printf("CLibrary::Load(this=%p,%ls) => %s\n",(void *)this,lpLibFileName,name))) #ifdef __APPLE_CC__ NSObjectFileImage image; NSObjectFileImageReturnCode nsret; nsret = NSCreateObjectFileImageFromFile (name, &image); if (nsret == NSObjectFileImageSuccess) { TRACEN((printf("NSCreateObjectFileImageFromFile(%s) : OK\n",name))) handler = (HMODULE)NSLinkModule(image,name,NSLINKMODULE_OPTION_RETURN_ON_ERROR | NSLINKMODULE_OPTION_PRIVATE | NSLINKMODULE_OPTION_BINDNOW); } else { TRACEN((printf("NSCreateObjectFileImageFromFile(%s) : ERROR\n",name))) } #elif ENV_BEOS // normalize path (remove things like "./", "..", etc..), otherwise it won't work BPath p(name, NULL, true); status_t err = B_OK; image_id image = load_add_on(p.Path()); TRACEN((printf("load_add_on(%s)=%d\n",p.Path(),(int)image))) if (image < 0) { err = (image_id)handler; handler = 0; } else { err = 0; handler = (HMODULE)image; } #else int options_dlopen = 0; #ifdef RTLD_LOCAL options_dlopen |= RTLD_LOCAL; #endif #ifdef RTLD_NOW options_dlopen |= RTLD_NOW; #endif #ifdef RTLD_GROUP #if ! (defined(hpux) || defined(__hpux)) options_dlopen |= RTLD_GROUP; // mainly for solaris but not for HPUX #endif #endif TRACEN((printf("CLibrary::Load - dlopen(%s,0x%d)\n",name,options_dlopen))) handler = dlopen(name,options_dlopen); #endif // __APPLE_CC__ TRACEN((printf("CLibrary::Load(%s) => %p\n",name,handler))) if (handler) { // Call DllMain() like in Windows : useless now // Propagate the value of global_use_utf16_conversion into the plugins int *tmp = (int *)local_GetProcAddress(handler,"global_use_utf16_conversion"); if (tmp) *tmp = global_use_utf16_conversion; #ifdef ENV_HAVE_LSTAT tmp = (int *)local_GetProcAddress(handler,"global_use_lstat"); if (tmp) *tmp = global_use_lstat; #endif // test construtors calls void (*fctTest)(void) = (void (*)(void))local_GetProcAddress(handler,"sync_TestConstructor"); if (fctTest) fctTest(); } else { #ifdef __APPLE_CC__ NSLinkEditErrors c; int num_err; const char *file,*err; NSLinkEditError(&c,&num_err,&file,&err); printf("Can't load '%ls' (%s)\n", lpLibFileName,err); #elif ENV_BEOS printf("Can't load '%ls' (%s)\n", lpLibFileName,strerror(err)); #else printf("Can't load '%ls' (%s)\n", lpLibFileName,dlerror()); #endif } _module = handler; TRACEN((printf("CLibrary::Load(this=%p,%ls) => _module=%p\n",(void *)this,lpLibFileName,_module))) return true; }
FString us2fs(const wchar_t *s) { return UnicodeStringToMultiByte(s, GetCurrentCodePage()); }
void PrintErrorMessage(const char *message, const wchar_t *text) { PrintErrorMessage(message, UnicodeStringToMultiByte(text, CP_OEMCP)); }