From 362a21d3a129b90149f6ef645c127f5e86e0ba61 Mon Sep 17 00:00:00 2001 From: Mike Kaganski Date: Tue, 26 Sep 2017 11:28:57 +0300 Subject: Use explicit function names for fooA/fooW WinAPI; prefer fooW We should only use generic foo function name when it takes params that are also dependent on UNICODE define, like LoadCursor( nullptr, IDC_ARROW ) where IDC_ARROW is defined in MSVC headers synchronised with LoadCursor definition. We should always use Unicode API for any file paths operations, because otherwise we will get "?" for any character in path that is not in current non-unicode codepage, which will result in failed file operations. Change-Id: I3a7f453ca0f893002d8a9764318919709fd8b633 Reviewed-on: https://gerrit.libreoffice.org/42935 Tested-by: Jenkins Reviewed-by: Mike Kaganski --- dtrans/source/win32/dnd/source.cxx | 2 +- dtrans/source/win32/dnd/target.cxx | 12 ++++++------ dtrans/source/win32/dtobj/DTransHelper.cxx | 2 +- dtrans/source/win32/dtobj/DataFmtTransl.cxx | 8 ++++---- dtrans/source/win32/misc/ImplHelper.cxx | 22 +++++++++------------- 5 files changed, 21 insertions(+), 25 deletions(-) (limited to 'dtrans/source/win32') diff --git a/dtrans/source/win32/dnd/source.cxx b/dtrans/source/win32/dnd/source.cxx index b6d1d9a628bd..06c8e4977def 100644 --- a/dtrans/source/win32/dnd/source.cxx +++ b/dtrans/source/win32/dnd/source.cxx @@ -314,7 +314,7 @@ unsigned __stdcall DndOleSTAFunc(LPVOID pParams) // We force the creation of a thread message queue. This is necessary // for a later call to AttachThreadInput MSG msgtemp; - PeekMessage( &msgtemp, nullptr, WM_USER, WM_USER, PM_NOREMOVE); + PeekMessageW( &msgtemp, nullptr, WM_USER, WM_USER, PM_NOREMOVE); DWORD threadId= GetCurrentThreadId(); diff --git a/dtrans/source/win32/dnd/target.cxx b/dtrans/source/win32/dnd/target.cxx index b797d4e769d8..ab3c554ea5bc 100644 --- a/dtrans/source/win32/dnd/target.cxx +++ b/dtrans/source/win32/dnd/target.cxx @@ -76,7 +76,7 @@ void SAL_CALL DropTarget::disposing() if( m_threadIdTarget) { // Call RevokeDragDrop and wait for the OLE thread to die; - PostThreadMessage( m_threadIdTarget, WM_REVOKEDRAGDROP, reinterpret_cast(this), 0); + PostThreadMessageW( m_threadIdTarget, WM_REVOKEDRAGDROP, reinterpret_cast(this), 0); WaitForSingleObject( m_hOleThread, INFINITE); CloseHandle( m_hOleThread); //OSL_ENSURE( SUCCEEDED( hr), "HWND not valid!" ); @@ -142,13 +142,13 @@ void SAL_CALL DropTarget::initialize( const Sequence< Any >& aArguments ) m_threadIdWindow= GetWindowThreadProcessId( m_hWnd, nullptr); // The event is set by the thread that we will create momentarily. // It indicates that the thread is ready to receive messages. - HANDLE m_evtThreadReady= CreateEvent( nullptr, FALSE, FALSE, nullptr); + HANDLE m_evtThreadReady= CreateEventW( nullptr, FALSE, FALSE, nullptr); m_hOleThread= CreateThread( nullptr, 0, DndTargetOleSTAFunc, &m_evtThreadReady, 0, &m_threadIdTarget); WaitForSingleObject( m_evtThreadReady, INFINITE); CloseHandle( m_evtThreadReady); - PostThreadMessage( m_threadIdTarget, WM_REGISTERDRAGDROP, reinterpret_cast(this), 0); + PostThreadMessageW( m_threadIdTarget, WM_REGISTERDRAGDROP, reinterpret_cast(this), 0); } else if( hr == S_OK || hr == S_FALSE) { @@ -197,7 +197,7 @@ DWORD WINAPI DndTargetOleSTAFunc(LPVOID pParams) { MSG msg; // force the creation of a message queue - PeekMessage( &msg, nullptr, 0, 0, PM_NOREMOVE); + PeekMessageW( &msg, nullptr, 0, 0, PM_NOREMOVE); // Signal the creator ( DropTarget::initialize) that the thread is // ready to receive messages. SetEvent( *static_cast(pParams)); @@ -206,7 +206,7 @@ DWORD WINAPI DndTargetOleSTAFunc(LPVOID pParams) DWORD threadId= GetCurrentThreadId(); // We force the creation of a thread message queue. This is necessary // for a later call to AttachThreadInput - while( GetMessage(&msg, nullptr, 0, 0) ) + while( GetMessageW(&msg, nullptr, 0, 0) ) { if( msg.message == WM_REGISTERDRAGDROP) { @@ -238,7 +238,7 @@ DWORD WINAPI DndTargetOleSTAFunc(LPVOID pParams) break; } TranslateMessage( &msg); - DispatchMessage( &msg); + DispatchMessageW( &msg); } OleUninitialize(); } diff --git a/dtrans/source/win32/dtobj/DTransHelper.cxx b/dtrans/source/win32/dtobj/DTransHelper.cxx index 49151f4d4fd1..552ec1368f1a 100644 --- a/dtrans/source/win32/dtobj/DTransHelper.cxx +++ b/dtrans/source/win32/dtobj/DTransHelper.cxx @@ -177,7 +177,7 @@ sal_uInt32 SAL_CALL CStgTransferHelper::memSize( CLIPFORMAT cf ) const HGLOBAL hGlob; GetHGlobalFromStream( m_lpStream, &hGlob ); - if ( CF_TEXT == cf || RegisterClipboardFormat( "HTML Format" ) == cf ) + if ( CF_TEXT == cf || RegisterClipboardFormatW( L"HTML Format" ) == cf ) { sal_Char* pText = static_cast< sal_Char* >( GlobalLock( hGlob ) ); if ( pText ) diff --git a/dtrans/source/win32/dtobj/DataFmtTransl.cxx b/dtrans/source/win32/dtobj/DataFmtTransl.cxx index 9c6f40047967..c72f2646563b 100644 --- a/dtrans/source/win32/dtobj/DataFmtTransl.cxx +++ b/dtrans/source/win32/dtobj/DataFmtTransl.cxx @@ -87,7 +87,7 @@ CFormatEtc CDataFormatTranslator::getFormatEtcFromDataFlavor( const DataFlavor& aFormat >>= aClipFmtName; OSL_ASSERT( aClipFmtName.getLength( ) ); - cf = RegisterClipboardFormatW( reinterpret_cast(aClipFmtName.getStr( )) ); + cf = RegisterClipboardFormatW( SAL_W(aClipFmtName.getStr( )) ); OSL_ENSURE( CF_INVALID != cf, "RegisterClipboardFormat failed" ); } @@ -163,7 +163,7 @@ CFormatEtc SAL_CALL CDataFormatTranslator::getFormatEtcForClipformatName( const if ( !aClipFmtName.getLength( ) ) return CFormatEtc( CF_INVALID ); - CLIPFORMAT cf = sal::static_int_cast(RegisterClipboardFormatW( reinterpret_cast(aClipFmtName.getStr( )) )); + CLIPFORMAT cf = sal::static_int_cast(RegisterClipboardFormatW( SAL_W(aClipFmtName.getStr( )) )); return getFormatEtcForClipformat( cf ); } @@ -172,7 +172,7 @@ OUString CDataFormatTranslator::getClipboardFormatName( CLIPFORMAT aClipformat ) OSL_PRECOND( CF_INVALID != aClipformat, "Invalid clipboard format" ); sal_Unicode wBuff[ MAX_CLIPFORMAT_NAME + 1 ]; // Null terminator isn't counted, apparently. - sal_Int32 nLen = GetClipboardFormatNameW( aClipformat, reinterpret_cast(wBuff), MAX_CLIPFORMAT_NAME ); + sal_Int32 nLen = GetClipboardFormatNameW( aClipformat, SAL_W(wBuff), MAX_CLIPFORMAT_NAME ); return OUString( wBuff, nLen ); } @@ -204,7 +204,7 @@ CFormatEtc SAL_CALL CDataFormatTranslator::getFormatEtcForClipformat( CLIPFORMAT of which FileContents it wants to paste see MSDN: "Handling Shell Data Transfer Scenarios" */ - if ( cf == RegisterClipboardFormatA( CFSTR_FILECONTENTS ) ) + if ( cf == RegisterClipboardFormat( CFSTR_FILECONTENTS ) ) fetc.setLindex( 0 ); return fetc; diff --git a/dtrans/source/win32/misc/ImplHelper.cxx b/dtrans/source/win32/misc/ImplHelper.cxx index 8047ffc9a424..f9d5a07a7f28 100644 --- a/dtrans/source/win32/misc/ImplHelper.cxx +++ b/dtrans/source/win32/misc/ImplHelper.cxx @@ -92,27 +92,23 @@ OUString SAL_CALL getWinCPFromLocaleId( LCID lcid, LCTYPE lctype ) else OSL_ASSERT( false ); - // we use the GetLocaleInfoA because don't want to provide - // a unicode wrapper function for Win9x in sal/systools - char buff[6]; - sal_Int32 nResult = GetLocaleInfoA( - lcid, lctype | LOCALE_USE_CP_ACP, buff, sizeof( buff ) ); + // First, get required buffer size, in characters + int nResult = GetLocaleInfoW( + lcid, lctype, nullptr, 0 ); OSL_ASSERT( nResult ); if ( nResult ) { - sal_Int32 len = MultiByteToWideChar( - CP_ACP, 0, buff, -1, nullptr, 0 ); + std::unique_ptr buff( new wchar_t[nResult] ); + // Now get the actual data + nResult = GetLocaleInfoW( lcid, lctype, buff.get(), nResult ); - OSL_ASSERT( len > 0 ); + OSL_ASSERT(nResult); - std::vector< sal_Unicode > lpwchBuff(len); + if (nResult) + winCP = SAL_U( buff.get() ); - len = MultiByteToWideChar( - CP_ACP, 0, buff, -1, reinterpret_cast(&lpwchBuff[0]), len ); - - winCP = OUString( &lpwchBuff[0], (len - 1) ); } return winCP; -- cgit