From e73fe1a1b4d1700172ac73e3ef3595fa8c8b1b8f Mon Sep 17 00:00:00 2001 From: Alex Alabuzhev Date: Sun, 4 Jan 2015 17:30:05 +0000 Subject: [PATCH] =?UTF-8?q?1.=20=D0=A0=D0=B5=D1=84=D0=B0=D0=BA=D1=82=D0=BE?= =?UTF-8?q?=D1=80=D0=B8=D0=BD=D0=B3.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- far/PluginA.cpp | 16 +++++------ far/changelog | 6 ++++- far/common/make_vector.hpp | 3 ++- far/common/preprocessor.hpp | 9 +++++++ far/dialog.cpp | 12 ++++----- far/edit.cpp | 26 +++++++++--------- far/editor.cpp | 10 +++---- far/elevation.cpp | 4 +-- far/farwinapi.cpp | 8 +++--- far/fileedit.cpp | 4 +-- far/filelist.cpp | 2 +- far/fileowner.cpp | 54 +++++++++++++++++++------------------ far/flink.cpp | 2 +- far/format.cpp | 4 +-- far/headers.hpp | 1 - far/panel.cpp | 6 ++--- far/plugapi.cpp | 6 ++--- far/pluginold.hpp | 13 +++------ far/strmix.cpp | 8 +++--- far/vbuild.m4 | 2 +- far/viewer.cpp | 15 ++++++----- 21 files changed, 110 insertions(+), 101 deletions(-) diff --git a/far/PluginA.cpp b/far/PluginA.cpp index 56d6bbaafd..85b7964562 100644 --- a/far/PluginA.cpp +++ b/far/PluginA.cpp @@ -748,7 +748,7 @@ static char *InsertQuoteA(char *Str) if (*Str != '"') { - memmove(Str + 1, Str, ++l); + std::copy_n(Str, ++l, Str + 1); *Str = '"'; } @@ -1962,7 +1962,7 @@ static char* WINAPI RemoveLeadingSpacesA(char *Str) noexcept ; if (ChPtr != Str) - memmove(Str, ChPtr, strlen(ChPtr) + 1); + std::copy_n(ChPtr, strlen(ChPtr) + 1, Str); return Str; } @@ -1999,9 +1999,9 @@ static char* WINAPI TruncStrA(char *Str, int MaxLength) noexcept { if (MaxLength > 3) { - char *MovePos = Str + Length - MaxLength + 3; - memmove(Str + 3, MovePos, strlen(MovePos) + 1); - memcpy(Str, "...", 3); + const auto MovePos = Str + Length - MaxLength + 3; + std::copy_n(MovePos, strlen(MovePos) + 1, Str + 3); + std::copy_n("...", 3, Str); } Str[MaxLength] = 0; @@ -2041,9 +2041,9 @@ static char* WINAPI TruncPathStrA(char *Str, int MaxLength) noexcept if (!lpStart || (lpStart - Str > MaxLength - 5)) return TruncStrA(Str, MaxLength); - char *lpInPos = lpStart + 3 + (nLength - MaxLength); - memmove(lpStart + 3, lpInPos, strlen(lpInPos) + 1); - memcpy(lpStart, "...", 3); + const auto lpInPos = lpStart + 3 + (nLength - MaxLength); + std::copy_n(lpInPos, strlen(lpInPos) + 1, lpStart + 3); + std::copy_n("...", 3, lpStart); } return Str; } diff --git a/far/changelog b/far/changelog index ee597f4daf..b2aae2f983 100644 --- a/far/changelog +++ b/far/changelog @@ -1,4 +1,8 @@ -drkns 03.01.2015 12:36:25 +0200 - build 4232 +drkns 04.01.2015 19:27:27 +0200 - build 4233 + +1. Рефакторинг. + +drkns 03.01.2015 12:36:25 +0200 - build 4232 1. Рефакторинг. diff --git a/far/common/make_vector.hpp b/far/common/make_vector.hpp index 44fb0f59f4..889eea4ffc 100644 --- a/far/common/make_vector.hpp +++ b/far/common/make_vector.hpp @@ -52,7 +52,8 @@ VTE_GENERATE(MAKE_VECTOR_VTE) #undef MAKE_VECTOR_VTE #else -template std::vector::type>::type> make_vector(T&& value, Args&&... args) +template +std::vector::type>::type> make_vector(T&& value, Args&&... args) { return std::vector::type>::type>{std::forward(value), std::forward(args)...}; } diff --git a/far/common/preprocessor.hpp b/far/common/preprocessor.hpp index f07b2bf451..efeec935b4 100644 --- a/far/common/preprocessor.hpp +++ b/far/common/preprocessor.hpp @@ -95,3 +95,12 @@ friend inline void swap(Type& a, Type& b) noexcept { a.swap(b); } #define SCOPED_ACTION(RAII_type) \ RAII_type ADD_SUFFIX(scoped_object_, __LINE__) + +#ifdef __GNUC__ +#define DO_PRAGMA(x) _Pragma(#x) +#define PACK_PUSH(n) DO_PRAGMA(pack(n)) +#define PACK_POP() DO_PRAGMA(pack()) +#else +#define PACK_PUSH(n) __pragma(pack(push, n)) +#define PACK_POP() __pragma(pack(pop)) +#endif diff --git a/far/dialog.cpp b/far/dialog.cpp index 72518fb9d6..a959786a3c 100644 --- a/far/dialog.cpp +++ b/far/dialog.cpp @@ -251,7 +251,7 @@ static size_t ConvertItemEx2(const DialogItemEx *ItemEx, FarGetDialogItem *Item) MenuItemEx* item=ListBox->GetItemPtr(ii); listItems[ii].Flags=item->Flags; listItems[ii].Text=text; - wmemcpy(text, item->strName.data(), item->strName.size()+1); + std::copy_n(item->strName.data(), item->strName.size() + 1, text); text+=item->strName.size()+1; listItems[ii].Reserved[0]=listItems[ii].Reserved[1]=0; } @@ -262,13 +262,13 @@ static size_t ConvertItemEx2(const DialogItemEx *ItemEx, FarGetDialogItem *Item) } wchar_t* p=(wchar_t*)((char*)(Item->Item)+offsetStrings); Item->Item->Data = p; - wmemcpy(p, str.data(), sz+1); + std::copy_n(str.data(), sz + 1, p); p+=sz+1; Item->Item->History = p; - wmemcpy(p, ItemEx->strHistory.data(), ItemEx->strHistory.size()+1); + std::copy_n(ItemEx->strHistory.data(), ItemEx->strHistory.size() + 1, p); p+=ItemEx->strHistory.size()+1; Item->Item->Mask = p; - wmemcpy(p, ItemEx->strMask.data(), ItemEx->strMask.size()+1); + std::copy_n(ItemEx->strMask.data(), ItemEx->strMask.size() + 1, p); } } return size; @@ -4934,7 +4934,7 @@ intptr_t Dialog::SendMessage(intptr_t Msg,intptr_t Param1,void* Param2) if (did->PtrData) { - wmemmove(did->PtrData,Ptr,Len); + std::copy_n(Ptr, Len, did->PtrData); did->PtrData[Len]=L'\0'; } }; @@ -5661,7 +5661,7 @@ intptr_t Dialog::SendMessage(intptr_t Msg,intptr_t Param1,void* Param2) if (did->PtrData) { - wmemmove(did->PtrData,Ptr,Len); + std::copy_n(Ptr, Len, did->PtrData); did->PtrData[Len]=L'\0'; } }; diff --git a/far/edit.cpp b/far/edit.cpp index 7db0e28bc3..1bdebdbe31 100644 --- a/far/edit.cpp +++ b/far/edit.cpp @@ -1196,7 +1196,7 @@ int Edit::ProcessKey(const Manager::Key& Key) } else { - wmemmove(m_Str+m_CurPos,m_Str+m_CurPos+1,m_StrSize-m_CurPos); + std::copy_n(m_Str + m_CurPos + 1, m_StrSize - m_CurPos, m_Str + m_CurPos); m_StrSize--; m_Str=(wchar_t *)xf_realloc(m_Str,(m_StrSize+1)*sizeof(wchar_t)); } @@ -1547,7 +1547,7 @@ int Edit::InsertKey(int Key) if (!m_Flags.Check(FEDITLINE_OVERTYPE)) { - wmemmove(m_Str+m_CurPos+1,m_Str+m_CurPos,m_StrSize-m_CurPos); + std::copy_n(m_Str + m_CurPos, m_StrSize - m_CurPos, m_Str + m_CurPos + 1); if (m_SelStart!=-1) { @@ -1586,8 +1586,9 @@ int Edit::InsertKey(int Key) void Edit::GetString(wchar_t *Str,int MaxSize) const { //xwcsncpy(Str, this->Str,MaxSize); - wmemmove(Str,m_Str,std::min(m_StrSize,MaxSize-1)); - Str[std::min(m_StrSize,MaxSize-1)]=0; + const auto Size = std::min(m_StrSize, MaxSize - 1); + std::copy_n(m_Str, Size, Str); + Str[Size] = 0; Str[MaxSize-1]=0; } @@ -1739,7 +1740,7 @@ void Edit::SetBinaryString(const wchar_t *Str,int Length) m_Str=NewStr; m_StrSize=Length; - wmemcpy(m_Str,Str,Length); + std::copy_n(Str, Length, m_Str); m_Str[Length]=0; if (GetTabExpandMode() == EXPAND_ALLTABS) @@ -1917,10 +1918,10 @@ void Edit::InsertBinaryString(const wchar_t *Str,int Length) } m_Str=NewStr; - wmemcpy(m_Str + m_CurPos, Str, Length); + std::copy_n(Str, Length, m_Str + m_CurPos); SetPrevCurPos(m_CurPos); m_CurPos+=Length; - wmemcpy(m_Str + m_CurPos, TmpStr.data(), TmpStr.size()); + std::copy_n(TmpStr.data(), TmpStr.size(), m_Str + m_CurPos); m_Str[m_StrSize]=0; if (GetTabExpandMode() == EXPAND_ALLTABS) @@ -2031,15 +2032,14 @@ void Edit::InsertTab() bool Edit::ReplaceTabs() { - wchar_t *TabPtr; - int Pos=0; - if (m_Flags.Check(FEDITLINE_READONLY)) return false; - bool changed=false; + wchar_t *TabPtr; + int Pos = 0; + bool changed = false; - while ((TabPtr = wmemchr(m_Str+Pos, L'\t', m_StrSize-Pos))) + while ((TabPtr = std::find(m_Str + Pos, m_Str + m_StrSize, L'\t')) != m_Str + m_StrSize) { changed=true; Pos=(int)(TabPtr-m_Str); @@ -2303,7 +2303,7 @@ void Edit::DeleteBlock() if (To>m_StrSize)To=m_StrSize; - wmemmove(m_Str+From,m_Str+To,m_StrSize-To+1); + std::copy_n(m_Str + To, m_StrSize - To + 1, m_Str + From); m_StrSize-=To-From; if (m_CurPos>From) diff --git a/far/editor.cpp b/far/editor.cpp index 52d09a36aa..8e44231148 100644 --- a/far/editor.cpp +++ b/far/editor.cpp @@ -285,19 +285,19 @@ int Editor::GetRawData(wchar_t **DestBuf,int& SizeDestBuf,int TextFormat) while (CurPtr) { CurPtr->GetBinaryString(&SaveStr,&EndSeq,Length); - wmemcpy(PDest,SaveStr,Length); + std::copy_n(SaveStr, Length, PDest); PDest+=Length; size_t LenEndSeq; if (!TextFormat) { LenEndSeq=StrLength(EndSeq); - wmemcpy(PDest,EndSeq,LenEndSeq); + std::copy_n(EndSeq, LenEndSeq, PDest); } else { LenEndSeq=StrLength(GlobalEOL); - wmemcpy(PDest,GlobalEOL,LenEndSeq); + std::copy_n(GlobalEOL, LenEndSeq, PDest); } PDest+=LenEndSeq; @@ -4946,7 +4946,7 @@ struct Editor::EditorUndoData : ::noncopyable this->m_Str.reset(Length + 1); if (this->m_Str) - wmemmove(this->m_Str.get(), Str, Length); + std::copy_n(Str, Length, this->m_Str.get()); } else this->m_Str.reset(); @@ -7596,7 +7596,7 @@ bool Editor::SetCodePage(uintptr_t codepage, bool *BOM) auto first = Lines.begin(); if (first->m_StrSize > 0 && first->m_Str[0] == Utf::BOM_CHAR) { - wmemmove(first->m_Str, first->m_Str+1, first->m_StrSize); // with trailing L'\0' + std::copy_n(first->m_Str + 1, first->m_StrSize, first->m_Str); // with trailing L'\0' --first->m_StrSize; *BOM = true; } diff --git a/far/elevation.cpp b/far/elevation.cpp index ed07a7da86..1778b0c11b 100644 --- a/far/elevation.cpp +++ b/far/elevation.cpp @@ -731,8 +731,8 @@ int elevation::fMoveToRecycleBin(SHFILEOPSTRUCT& FileOpStruct) if(Initialize()) { if(SendCommand(C_FUNCTION_MOVETORECYCLEBIN) && Write(FileOpStruct) - && Write(FileOpStruct.pFrom,FileOpStruct.pFrom?(StrLength(FileOpStruct.pFrom)+1+1)*sizeof(WCHAR):0) // achtung! +1 - && Write(FileOpStruct.pTo,FileOpStruct.pTo?(StrLength(FileOpStruct.pTo)+1+1)*sizeof(WCHAR):0)) // achtung! +1 + && Write(FileOpStruct.pFrom, FileOpStruct.pFrom? (wcslen(FileOpStruct.pFrom) + 1 + 1) * sizeof(wchar_t) : 0) // achtung! +1 + && Write(FileOpStruct.pTo, FileOpStruct.pTo? (wcslen(FileOpStruct.pTo) + 1 + 1) * sizeof(wchar_t) : 0)) // achtung! +1 { int OpResult = 0; if(Read(OpResult) && Read(FileOpStruct.fAnyOperationsAborted)) diff --git a/far/farwinapi.cpp b/far/farwinapi.cpp index 606e138922..b38fed89df 100644 --- a/far/farwinapi.cpp +++ b/far/farwinapi.cpp @@ -1352,8 +1352,8 @@ HANDLE FindFirstStream(const string& FileName,STREAM_INFO_LEVELS InfoLevel,LPVOI Handle->NextOffset = StreamInfo->NextEntryOffset; if (StreamInfo->StreamNameLength) { - memcpy(pFsd->cStreamName,StreamInfo->StreamName,StreamInfo->StreamNameLength); - pFsd->cStreamName[StreamInfo->StreamNameLength/sizeof(WCHAR)]=L'\0'; + std::copy_n(StreamInfo->StreamName, StreamInfo->StreamNameLength/sizeof(wchar_t), pFsd->cStreamName); + pFsd->cStreamName[StreamInfo->StreamNameLength / sizeof(wchar_t)] = L'\0'; pFsd->StreamSize=StreamInfo->StreamSize; Ret=Handle; } @@ -1389,8 +1389,8 @@ BOOL FindNextStream(HANDLE hFindStream,LPVOID lpFindStreamData) Handle->NextOffset = pStreamInfo->NextEntryOffset?Handle->NextOffset+pStreamInfo->NextEntryOffset:0; if (pStreamInfo->StreamNameLength && pStreamInfo->StreamNameLength < sizeof(pFsd->cStreamName)) { - memcpy(pFsd->cStreamName,pStreamInfo->StreamName,pStreamInfo->StreamNameLength); - pFsd->cStreamName[pStreamInfo->StreamNameLength/sizeof(WCHAR)]=L'\0'; + std::copy_n(pStreamInfo->StreamName, pStreamInfo->StreamNameLength / sizeof(wchar_t), pFsd->cStreamName); + pFsd->cStreamName[pStreamInfo->StreamNameLength / sizeof(wchar_t)] = L'\0'; pFsd->StreamSize=pStreamInfo->StreamSize; Ret=TRUE; } diff --git a/far/fileedit.cpp b/far/fileedit.cpp index cddc0e5006..732e555009 100644 --- a/far/fileedit.cpp +++ b/far/fileedit.cpp @@ -1647,8 +1647,8 @@ int FileEditor::LoadFile(const string& Name,int &UserBreak) } size_t Offset = StrLength > 3 ? StrLength - 3 : 0; - const wchar_t *eol; - if ((eol=wmemchr(Str+Offset,L'\r',StrLength-Offset)) || (eol=wmemchr(Str+Offset,L'\n',StrLength-Offset))) + const auto eol = std::find_if(Str + Offset, Str + StrLength, IsEol); + if (eol != Str + StrLength) { m_editor->GlobalEOL = eol; LastLineCR=1; diff --git a/far/filelist.cpp b/far/filelist.cpp index a02076fa42..a87a39830e 100644 --- a/far/filelist.cpp +++ b/far/filelist.cpp @@ -5572,7 +5572,7 @@ void FileList::PluginToFileListItem(PluginPanelItem *pi,FileListItem *fi) if (pi->Description) { - auto Str = new wchar_t[StrLength(pi->Description)+1]; + auto Str = new wchar_t[wcslen(pi->Description)+1]; wcscpy(Str, pi->Description); fi->DizText = Str; fi->DeleteDiz=true; diff --git a/far/fileowner.cpp b/far/fileowner.cpp index 1e94bf1559..97ee6004fb 100644 --- a/far/fileowner.cpp +++ b/far/fileowner.cpp @@ -75,43 +75,45 @@ static bool SidToNameCached(PSID Sid, string& Name, const string& Computer) { bool Result = false; - class sid_cache + class sid: noncopyable { public: - typedef block_ptr sid; - - private: - struct hash + sid(PSID rhs) { - size_t operator ()(const sid& Sid) const - { - return CRC32(0, Sid.get(), GetLengthSid(Sid.get())); - } - }; + DWORD Size = GetLengthSid(rhs); + m_Data.reset(Size); + CopySid(Size, m_Data.get(), rhs); + } - struct equal + sid(sid&& rhs) { *this = std::move(rhs); } + + MOVE_OPERATOR_BY_SWAP(sid); + + void swap(sid& rhs) { - bool operator ()(const sid& Sid1, const sid& Sid2) const - { - return EqualSid(Sid1.get(), Sid2.get()) != FALSE; - } - }; + using std::swap; + swap(m_Data, rhs.m_Data); + } - public: - typedef std::unordered_map map; + bool operator==(const sid& rhs) const + { + return EqualSid(m_Data.get(), rhs.m_Data.get()) != FALSE; + } - static sid make_sid(PSID Sid) + size_t get_hash() const { - DWORD Size = GetLengthSid(Sid); - sid Copy(Size); - CopySid(Size, Copy.get(), Sid); - return Copy; - }; + return CRC32(0, m_Data.get(), GetLengthSid(m_Data.get())); + } + + private: + block_ptr m_Data; }; - static sid_cache::map SIDCache; + struct sid_hash { size_t operator()(const sid& Sid) const { return Sid.get_hash(); } }; + + static std::unordered_map SIDCache; - auto SidCopy = sid_cache::make_sid(Sid); + sid SidCopy(Sid); auto ItemIterator = SIDCache.find(SidCopy); if (ItemIterator != SIDCache.cend()) diff --git a/far/flink.cpp b/far/flink.cpp index f003760016..6f8440ca17 100644 --- a/far/flink.cpp +++ b/far/flink.cpp @@ -610,7 +610,7 @@ int MkSymLink(const string& Target, const string& LinkName, ReparsePointTypes Li strFullLink += PtrSelName; else { - strFullLink += L"Disk_" + Target[0]; + strFullLink.append(L"Disk_").append(Target, 0, 1); } } diff --git a/far/format.cpp b/far/format.cpp index 0c7b720022..a4f71d4f1b 100644 --- a/far/format.cpp +++ b/far/format.cpp @@ -152,7 +152,7 @@ BaseFormat& BaseFormat::operator<<(wchar_t Value) BaseFormat& BaseFormat::operator<<(LPCWSTR Data) { Data = NullToEmpty(Data); - return Put(Data, StrLength(Data)); + return Put(Data, wcslen(Data)); } BaseFormat& BaseFormat::operator<<(const string& String) @@ -224,7 +224,7 @@ BaseFormat& BaseFormat::ToString(T Value) { UpperBuf(Buffer, ARRAYSIZE(Buffer)); } - return Put(Buffer, StrLength(Buffer)); + return Put(Buffer, wcslen(Buffer)); } diff --git a/far/headers.hpp b/far/headers.hpp index abf30b50c8..b077c19318 100644 --- a/far/headers.hpp +++ b/far/headers.hpp @@ -56,7 +56,6 @@ THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #include #include #include -#include #include #include #include diff --git a/far/panel.cpp b/far/panel.cpp index fb329dd505..6d6e941b2a 100644 --- a/far/panel.cpp +++ b/far/panel.cpp @@ -2305,9 +2305,9 @@ int Panel::SetPluginCommand(int Command,int Param1,void* Param2) dirInfo->Name=(wchar_t*)((char*)Param2+folderOffset); dirInfo->Param=(wchar_t*)((char*)Param2+pluginDataOffset); dirInfo->File=(wchar_t*)((char*)Param2+pluginFileOffset); - wmemcpy(const_cast(dirInfo->Name),Info.ShortcutFolder.data(), Info.ShortcutFolder.size()+1); - wmemcpy(const_cast(dirInfo->Param), Info.PluginData.data(), Info.PluginData.size()+1); - wmemcpy(const_cast(dirInfo->File), Info.PluginFile.data(), Info.PluginFile.size()+1); + std::copy_n(Info.ShortcutFolder.data(), Info.ShortcutFolder.size() + 1, const_cast(dirInfo->Name)); + std::copy_n(Info.PluginData.data(), Info.PluginData.size() + 1, const_cast(dirInfo->Param)); + std::copy_n(Info.PluginFile.data(), Info.PluginFile.size() + 1, const_cast(dirInfo->File)); } Reenter--; } diff --git a/far/plugapi.cpp b/far/plugapi.cpp index 736bc7319b..d3eeef5ae6 100644 --- a/far/plugapi.cpp +++ b/far/plugapi.cpp @@ -2382,7 +2382,7 @@ static size_t apiPasteFromClipboardEx(bool Type, wchar_t *Data, size_t Size) if(Data && Size) { Size = std::min(Size, str.size() + 1); - wmemcpy(Data, str.data(), Size); + std::copy_n(str.data(), Size, Data); } return str.size() + 1; } @@ -2521,7 +2521,7 @@ intptr_t WINAPI apiMacroControl(const GUID* PluginId, FAR_MACRO_CONTROL_COMMANDS Result->ErrCode = ErrCode; Result->ErrPos = ErrPos; Result->ErrSrc = (const wchar_t *)((char*)Param2 + stringOffset); - wmemcpy(const_cast(Result->ErrSrc), ErrSrc.data(), ErrSrc.size() + 1); + std::copy_n(ErrSrc.data(), ErrSrc.size() + 1, const_cast(Result->ErrSrc)); } return Size; @@ -3026,7 +3026,7 @@ size_t WINAPI apiInputRecordToKeyName(const INPUT_RECORD* Key, wchar_t *KeyText, { if (Size <= len) len = Size - 1; - wmemcpy(KeyText, strKT.data(), len); + std::copy_n(strKT.data(), len, KeyText); KeyText[len] = 0; } else if (KeyText) diff --git a/far/pluginold.hpp b/far/pluginold.hpp index 89a5dfbe6b..38ff8d4580 100644 --- a/far/pluginold.hpp +++ b/far/pluginold.hpp @@ -7,11 +7,7 @@ namespace oldfar #pragma warning(disable:6244) #ifndef _WIN64 -#ifdef __GNUC__ -#pragma pack(2) -#else -#pragma pack(push,2) -#endif +PACK_PUSH(2) #endif const int NM=260; @@ -1761,11 +1757,8 @@ namespace oldfar }; #ifndef _WIN64 -#ifdef __GNUC__ -#pragma pack() -#else -#pragma pack(pop) -#endif +PACK_POP() #endif + #pragma warning(pop) } diff --git a/far/strmix.cpp b/far/strmix.cpp index a4da0e188a..54a25ba9d2 100644 --- a/far/strmix.cpp +++ b/far/strmix.cpp @@ -87,7 +87,7 @@ static wchar_t * InsertCustomQuote(wchar_t *Str,wchar_t QuoteChar) if (*Str != QuoteChar) { - wmemmove(Str+1,Str,++l); + std::copy_n(Str, ++l, Str + 1); *Str=QuoteChar; } @@ -268,8 +268,8 @@ wchar_t* TruncStrFromCenter(wchar_t *Str, int MaxLength) { int Len1 = (MaxLength - DotsLen) / 2; int Len2 = MaxLength - DotsLen - Len1; - wmemcpy(Str + Len1, L"...", DotsLen); - wmemmove(Str + Len1 + DotsLen, Str + Length - Len2, Len2); + std::copy_n(L"...", DotsLen, Str + Len1); + std::copy_n(Str + Length - Len2, Len2, Str + Len1 + DotsLen); } Str[MaxLength] = 0; @@ -369,7 +369,7 @@ wchar_t* RemoveLeadingSpaces(wchar_t *Str) ; if (ChPtr!=Str) - wmemmove(Str, ChPtr, wcslen(ChPtr) + 1); + std::copy_n(ChPtr, wcslen(ChPtr) + 1, Str); return Str; } diff --git a/far/vbuild.m4 b/far/vbuild.m4 index 4f9331e296..dd31ffd59b 100644 --- a/far/vbuild.m4 +++ b/far/vbuild.m4 @@ -1 +1 @@ -m4_define(BUILD,4232)m4_dnl +m4_define(BUILD,4233)m4_dnl diff --git a/far/viewer.cpp b/far/viewer.cpp index 7fe4b122b2..d8e9b35d9f 100644 --- a/far/viewer.cpp +++ b/far/viewer.cpp @@ -2681,11 +2681,12 @@ Viewer::SEARCHER_RESULT Viewer::search_hex_forward(search_data* sd) char *ps = buff; while (n1 >= slen) { - ps = static_cast(memchr(ps, search_str[0], n1-slen+1)); - if (!ps) + const auto ps_end = ps + n1 - slen + 1; + ps = std::find(ps, ps_end, search_str[0]); + if (ps == ps_end) break; - if ( slen <= 1 || 0 == memcmp(ps+1, search_str+1, slen-1) ) + if (slen <= 1 || std::equal(ps + 1, ps + slen, search_str + 1)) { sd->MatchPos = cpos + static_cast(ps - buff); return Search_Found; @@ -2750,7 +2751,7 @@ Viewer::SEARCHER_RESULT Viewer::search_hex_backward(search_data* sd) { if (*ps == last_char) { - if (slen <= 1 || 0 == memcmp(ps-slen+1, search_str, slen-1)) + if (slen <= 1 || std::equal(ps - slen + 1, ps, search_str)) { sd->MatchPos = cpos - nr + n1 - slen; return Search_Found; @@ -2832,7 +2833,7 @@ Viewer::SEARCHER_RESULT Viewer::search_text_forward(search_data* sd) } if ( buff[i] != search_str[0] || (slen > 1 && buff[i+1] != search_str[1]) - || (slen > 2 && 0 != wmemcmp(buff+i+2, search_str+2, slen-2)) + || (slen > 2 && !std::equal(buff + i + 2, buff + i + slen, search_str + 2)) ) continue; sd->MatchPos = cpos + GetStrBytesNum(t_buff, i); @@ -2915,7 +2916,7 @@ Viewer::SEARCHER_RESULT Viewer::search_text_backward(search_data* sd) } if ( buff[i] != search_str[0] || (slen > 1 && buff[i+1] != search_str[1]) - || (slen > 2 && 0 != wmemcmp(buff+i+2, search_str+2, slen-2)) + || (slen > 2 && !std::equal(buff + i + 2, buff + i + slen, search_str + 2)) ) continue; sd->MatchPos = cpos + GetStrBytesNum(t_buff, i); @@ -3598,7 +3599,7 @@ bool Viewer::vgetc(wchar_t *pCh) { vgetc_cb -= vgetc_ib; if (vgetc_cb && vgetc_ib) - memmove(vgetc_buffer, vgetc_buffer+vgetc_ib, vgetc_cb); + std::copy_n(vgetc_buffer + vgetc_ib, vgetc_cb, vgetc_buffer); vgetc_ib = 0; size_t nr = 0;