diff options
Diffstat (limited to 'win32')
| -rw-r--r-- | win32/ScintillaWin.cxx | 33 | 
1 files changed, 20 insertions, 13 deletions
| diff --git a/win32/ScintillaWin.cxx b/win32/ScintillaWin.cxx index 3bdc4a1cc..dca98d5ed 100644 --- a/win32/ScintillaWin.cxx +++ b/win32/ScintillaWin.cxx @@ -16,6 +16,7 @@  #include <string>  #include <vector>  #include <map> +#include <algorithm>  #undef _WIN32_WINNT  #define _WIN32_WINNT 0x0500 @@ -2267,20 +2268,24 @@ void ScintillaWin::CopyToClipboard(const SelectionText &selectedText) {  	// Default Scintilla behaviour in Unicode mode  	if (IsUnicodeMode()) { -		int uchars = UTF16Length(selectedText.s, selectedText.len); +		int uchars = UTF16Length(selectedText.Data(), +			static_cast<int>(selectedText.LengthWithTerminator()));  		uniText.Allocate(2 * uchars);  		if (uniText) { -			UTF16FromUTF8(selectedText.s, selectedText.len, static_cast<wchar_t *>(uniText.ptr), uchars); +			UTF16FromUTF8(selectedText.Data(), static_cast<int>(selectedText.LengthWithTerminator()), +				static_cast<wchar_t *>(uniText.ptr), uchars);  		}  	} else {  		// Not Unicode mode  		// Convert to Unicode using the current Scintilla code page  		UINT cpSrc = CodePageFromCharSet(  					selectedText.characterSet, selectedText.codePage); -		int uLen = ::MultiByteToWideChar(cpSrc, 0, selectedText.s, selectedText.len, 0, 0); +		int uLen = ::MultiByteToWideChar(cpSrc, 0, selectedText.Data(), +			static_cast<int>(selectedText.LengthWithTerminator()), 0, 0);  		uniText.Allocate(2 * uLen);  		if (uniText) { -			::MultiByteToWideChar(cpSrc, 0, selectedText.s, selectedText.len, +			::MultiByteToWideChar(cpSrc, 0, selectedText.Data(), +				static_cast<int>(selectedText.LengthWithTerminator()),  				static_cast<wchar_t *>(uniText.ptr), uLen);  		}  	} @@ -2292,10 +2297,11 @@ void ScintillaWin::CopyToClipboard(const SelectionText &selectedText) {  			// paste the text  			// Windows NT, 2k, XP automatically generates CF_TEXT  			GlobalMemory ansiText; -			ansiText.Allocate(selectedText.len); +			ansiText.Allocate(selectedText.LengthWithTerminator());  			if (ansiText) {  				::WideCharToMultiByte(CP_ACP, 0, static_cast<wchar_t *>(uniText.ptr), -1, -					static_cast<char *>(ansiText.ptr), selectedText.len, NULL, NULL); +					static_cast<char *>(ansiText.ptr), +					static_cast<int>(selectedText.LengthWithTerminator()), NULL, NULL);  				ansiText.SetClip(CF_TEXT);  			}  		} @@ -2303,9 +2309,9 @@ void ScintillaWin::CopyToClipboard(const SelectionText &selectedText) {  	} else {  		// There was a failure - try to copy at least ANSI text  		GlobalMemory ansiText; -		ansiText.Allocate(selectedText.len); +		ansiText.Allocate(selectedText.LengthWithTerminator());  		if (ansiText) { -			memcpy(static_cast<char *>(ansiText.ptr), selectedText.s, selectedText.len); +			memcpy(static_cast<char *>(ansiText.ptr), selectedText.Data(), selectedText.LengthWithTerminator());  			ansiText.SetClip(CF_TEXT);  		}  	} @@ -2619,7 +2625,7 @@ STDMETHODIMP ScintillaWin::Drop(LPDATAOBJECT pIDataSource, DWORD grfKeyState,  		::ScreenToClient(MainHWND(), &rpt);  		SelectionPosition movePos = SPositionFromLocation(Point(rpt.x, rpt.y), false, false, UserVirtualSpace()); -		DropAt(movePos, &data[0], *pdwEffect == DROPEFFECT_MOVE, hrRectangular == S_OK); +		DropAt(movePos, &data[0], data.size() - 1, *pdwEffect == DROPEFFECT_MOVE, hrRectangular == S_OK);  		// Free data  		if (medium.pUnkForRelease != NULL) @@ -2652,15 +2658,16 @@ STDMETHODIMP ScintillaWin::GetData(FORMATETC *pFEIn, STGMEDIUM *pSTM) {  	GlobalMemory text;  	if (pFEIn->cfFormat == CF_UNICODETEXT) { -		int uchars = UTF16Length(drag.s, drag.len); +		int uchars = UTF16Length(drag.Data(), static_cast<int>(drag.LengthWithTerminator()));  		text.Allocate(2 * uchars);  		if (text) { -			UTF16FromUTF8(drag.s, drag.len, static_cast<wchar_t *>(text.ptr), uchars); +			UTF16FromUTF8(drag.Data(), static_cast<int>(drag.LengthWithTerminator()), +				static_cast<wchar_t *>(text.ptr), uchars);  		}  	} else { -		text.Allocate(drag.len); +		text.Allocate(drag.LengthWithTerminator());  		if (text) { -			memcpy(static_cast<char *>(text.ptr), drag.s, drag.len); +			memcpy(static_cast<char *>(text.ptr), drag.Data(), drag.LengthWithTerminator());  		}  	}  	pSTM->hGlobal = text ? text.Unlock() : 0; | 
