diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/Editor.cxx | 17 | ||||
-rw-r--r-- | src/Editor.h | 1 |
2 files changed, 14 insertions, 4 deletions
diff --git a/src/Editor.cxx b/src/Editor.cxx index b8ed636d3..e6aec550a 100644 --- a/src/Editor.cxx +++ b/src/Editor.cxx @@ -6128,6 +6128,15 @@ sptr_t Editor::BytesResult(sptr_t lParam, const unsigned char *val, size_t len) return val ? len : 0; } +sptr_t Editor::BytesResult(Scintilla::sptr_t lParam, std::string_view sv) noexcept { + // No NUL termination: sv.length() is number of valid/displayed bytes + if (lParam && !sv.empty()) { + char *ptr = CharPtrFromSPtr(lParam); + memcpy(ptr, sv.data(), sv.length()); + } + return sv.length(); +} + sptr_t Editor::WndProc(Message iMessage, uptr_t wParam, sptr_t lParam) { //Platform::DebugPrintf("S start wnd proc %d %d %d\n",iMessage, wParam, lParam); @@ -6374,8 +6383,8 @@ sptr_t Editor::WndProc(Message iMessage, uptr_t wParam, sptr_t lParam) { break; case Message::GetTargetText: { - std::string text = RangeText(targetRange.start.Position(), targetRange.end.Position()); - return BytesResult(lParam, reinterpret_cast<const unsigned char *>(text.c_str()), text.length()); + const std::string text = RangeText(targetRange.start.Position(), targetRange.end.Position()); + return BytesResult(lParam, text); } case Message::ReplaceTarget: @@ -6617,8 +6626,8 @@ sptr_t Editor::WndProc(Message iMessage, uptr_t wParam, sptr_t lParam) { return pdoc->UndoActionPosition(static_cast<int>(wParam)); case Message::GetUndoActionText: { - std::string_view text = pdoc->UndoActionText(static_cast<int>(wParam)); - return BytesResult(lParam, reinterpret_cast<const unsigned char *>(text.data()), text.length()); + const std::string_view text = pdoc->UndoActionText(static_cast<int>(wParam)); + return BytesResult(lParam, text); } case Message::PushUndoActionType: diff --git a/src/Editor.h b/src/Editor.h index b1b426dff..dfc25d72d 100644 --- a/src/Editor.h +++ b/src/Editor.h @@ -668,6 +668,7 @@ protected: // ScintillaBase subclass needs access to much of Editor static Scintilla::sptr_t StringResult(Scintilla::sptr_t lParam, const char *val) noexcept; static Scintilla::sptr_t BytesResult(Scintilla::sptr_t lParam, const unsigned char *val, size_t len) noexcept; + static Scintilla::sptr_t BytesResult(Scintilla::sptr_t lParam, std::string_view sv) noexcept; // Set a variable controlling appearance to a value and invalidates the display // if a change was made. Avoids extra text and the possibility of mistyping. |