[FarGroup/FarManager] master: Fix assertion in debug (b9ce97951)

0 views
Skip to first unread message

farg...@farmanager.com

unread,
Oct 2, 2022, 2:45:49 PM10/2/22
to farco...@googlegroups.com
Repository : https://github.com/FarGroup/FarManager
On branch : master
Link : https://github.com/FarGroup/FarManager/commit/b9ce979514e570c45f1c1a0626592758c76f29a5

>---------------------------------------------------------------

commit b9ce979514e570c45f1c1a0626592758c76f29a5
Author: Alex Alabuzhev <alab...@gmail.com>
Date: Sun Oct 2 19:33:55 2022 +0100

Fix assertion in debug


>---------------------------------------------------------------

b9ce979514e570c45f1c1a0626592758c76f29a5
far/viewer.cpp | 30 +++++++++++++++---------------
far/viewer.hpp | 2 +-
2 files changed, 16 insertions(+), 16 deletions(-)

diff --git a/far/viewer.cpp b/far/viewer.cpp
index a8024b6f2..ff359ec5b 100644
--- a/far/viewer.cpp
+++ b/far/viewer.cpp
@@ -2391,13 +2391,13 @@ void Viewer::Up(int nlines, bool adjust)
}
}

-int Viewer::GetStrBytesNum(string_view const Str) const
+int Viewer::GetStrBytesNum(const wchar_t* const Str, int const Length) const
{
const auto ch_size = getCharSize();
if (ch_size > 0)
- return static_cast<int>(Str.size() * ch_size);
+ return Length * ch_size;

- return static_cast<int>(encoding::get_bytes_count(m_Codepage, Str));
+ return static_cast<int>(encoding::get_bytes_count(m_Codepage, { Str, static_cast<size_t>(Length) }));
}

void Viewer::SetViewKeyBar(KeyBar *ViewKeyBar)
@@ -2796,7 +2796,7 @@ SEARCHER_RESULT Viewer::search_text_forward(search_data* sd)
int nw1 = vread(buff+nw, 3*(slen+ww), t_buff ? t_buff+nw : nullptr);
nw1 = std::max(nw1, slen+ww-1);
nw += nw1;
- to1 = to + (t_buff ? GetStrBytesNum({ t_buff, static_cast<size_t>(nw1) }) : sd->ch_size * nw1);
+ to1 = to + (t_buff ? GetStrBytesNum(t_buff, static_cast<size_t>(nw1)) : sd->ch_size * nw1);
}

const auto is_eof = (to1 >= FileSize ? 1 : 0), iLast = nw - slen - ww + ww*is_eof;
@@ -2817,8 +2817,8 @@ SEARCHER_RESULT Viewer::search_text_forward(search_data* sd)
|| (slen > 2 && !std::equal(buff + i + 2, buff + i + slen, sd->search_text.cbegin() + 2))
) continue;

- sd->MatchPos = cpos + GetStrBytesNum({ buff, static_cast<size_t>(i) });
- sd->search_len = GetStrBytesNum({ buff + i, static_cast<size_t>(slen) });
+ sd->MatchPos = cpos + GetStrBytesNum(buff, static_cast<size_t>(i));
+ sd->search_len = GetStrBytesNum(buff + i, static_cast<size_t>(slen));
return Search_Found;
}

@@ -2835,7 +2835,7 @@ SEARCHER_RESULT Viewer::search_text_forward(search_data* sd)
}
else
{
- sd->CurPos = to1 - GetStrBytesNum({ t_buff + iLast + 1, static_cast<size_t>(nw - iLast - 1) });
+ sd->CurPos = to1 - GetStrBytesNum(t_buff + iLast + 1, static_cast<size_t>(nw - iLast - 1));

if (LastSelectPos > 0 && cpos < LastSelectPos && sd->CurPos >= LastSelectPos)
return Search_NotFound;
@@ -2874,7 +2874,7 @@ SEARCHER_RESULT Viewer::search_text_backward(search_data* sd)
vseek(to1, FILE_BEGIN);
const auto nw1 = vread(buff, nb1, t_buff);
if (nw1 > slen + ww - 1)
- nb1 = GetStrBytesNum({ t_buff + nw1 - (slen + ww - 1), static_cast<size_t>(slen + ww - 1) });
+ nb1 = GetStrBytesNum(t_buff + nw1 - (slen + ww - 1), static_cast<size_t>(slen + ww - 1));
nb += nb1;
}
}
@@ -2900,8 +2900,8 @@ SEARCHER_RESULT Viewer::search_text_backward(search_data* sd)
|| (slen > 2 && !std::equal(buff + i + 2, buff + i + slen, sd->search_text.cbegin() + 2))
) continue;

- sd->MatchPos = cpos + GetStrBytesNum({ t_buff, static_cast<size_t>(i) });
- sd->search_len = GetStrBytesNum({ t_buff + i, static_cast<size_t>(slen) });
+ sd->MatchPos = cpos + GetStrBytesNum(t_buff, static_cast<size_t>(i));
+ sd->search_len = GetStrBytesNum(t_buff + i, static_cast<size_t>(slen));
return Search_Found;
}

@@ -2919,7 +2919,7 @@ SEARCHER_RESULT Viewer::search_text_backward(search_data* sd)
}
else
{
- sd->CurPos = cpos + GetStrBytesNum({ t_buff, static_cast<size_t>(iFirst + slen - 1) });
+ sd->CurPos = cpos + GetStrBytesNum(t_buff, static_cast<size_t>(iFirst + slen - 1));

if (cpos+nb > LastSelectPos && sd->CurPos <= LastSelectPos)
return Search_NotFound;
@@ -3014,7 +3014,7 @@ SEARCHER_RESULT Viewer::search_regex_forward(search_data* sd)
if (!sd->Rex->SearchEx({ line, static_cast<size_t>(nw) }, off, sd->RexMatch)) // doesn't match
break;

- const auto fpos = bpos + GetStrBytesNum({ t_line, static_cast<size_t>(sd->RexMatch[0].start) });
+ const auto fpos = bpos + GetStrBytesNum(t_line, sd->RexMatch[0].start);
if ( fpos < cpos )
{
off = sd->RexMatch[0].start + 1; // skip
@@ -3027,7 +3027,7 @@ SEARCHER_RESULT Viewer::search_regex_forward(search_data* sd)
else // found
{
sd->MatchPos = fpos;
- sd->search_len = GetStrBytesNum({ t_line + off + sd->RexMatch[0].start, static_cast<size_t>(sd->RexMatch[0].end - sd->RexMatch[0].start) });
+ sd->search_len = GetStrBytesNum(t_line + off + sd->RexMatch[0].start, sd->RexMatch[0].end - sd->RexMatch[0].start);
return Search_Found;
}
}
@@ -3078,8 +3078,8 @@ SEARCHER_RESULT Viewer::search_regex_backward(search_data* sd)
if (!sd->Rex->SearchEx({ line, static_cast<size_t>(nw) }, off, sd->RexMatch))
break;

- const auto fpos = bpos + GetStrBytesNum({ t_line, static_cast<size_t>(sd->RexMatch[0].start) });
- const auto flen = GetStrBytesNum({ t_line + sd->RexMatch[0].start, static_cast<size_t>(sd->RexMatch[0].end - sd->RexMatch[0].start) });
+ const auto fpos = bpos + GetStrBytesNum(t_line, sd->RexMatch[0].start);
+ const auto flen = GetStrBytesNum(t_line + sd->RexMatch[0].start, sd->RexMatch[0].end - sd->RexMatch[0].start);
if (fpos+flen > cpos)
break;

diff --git a/far/viewer.hpp b/far/viewer.hpp
index 2558bf8e3..00ea2a333 100644
--- a/far/viewer.hpp
+++ b/far/viewer.hpp
@@ -151,7 +151,7 @@ private:
bool veof() const;
wchar_t vgetc_prev();
void SetFileSize();
- int GetStrBytesNum(string_view Str) const;
+ int GetStrBytesNum(const wchar_t* Str, int Length) const; // BUGBUG not string_view, could be unrelated 🤦
bool isBinaryFile(uintptr_t cp);
void SavePosition();
intptr_t ViewerSearchDlgProc(Dialog* Dlg, intptr_t Msg,intptr_t Param1,void* Param2);


Reply all
Reply to author
Forward
0 new messages