@@ -443,10 +443,10 @@ static void FreeUnicodeArrayMagic(const wchar_t* const* Array)
443443
444444 for (const auto & i: std::span (Array, Size))
445445 {
446- delete[] i ;
446+ std::unique_ptr< wchar_t const []>{i} ;
447447 }
448448
449- delete[] RealPtr;
449+ std::unique_ptr< wchar_t const * const []>{ RealPtr} ;
450450}
451451
452452static DWORD OldKeyToKey (DWORD dOldKey)
@@ -539,11 +539,11 @@ static void FreeUnicodeInfoPanelLines(std::span<const InfoPanelLine> const Lines
539539{
540540 for (const auto & i: Lines)
541541 {
542- delete[] i.Text ;
543- delete[] i.Data ;
542+ std::unique_ptr< wchar_t const []>{ i.Text } ;
543+ std::unique_ptr< wchar_t const []>{ i.Data } ;
544544 }
545545
546- delete[] Lines.data ();
546+ std::unique_ptr<InfoPanelLine const []>{ Lines.data ()} ;
547547}
548548
549549static void ConvertPanelModeToUnicode (const oldfar::PanelMode& Mode, PanelMode& UnicodeMode)
@@ -581,13 +581,13 @@ static void FreeUnicodePanelModes(std::span<PanelMode const> const Modes)
581581{
582582 for (const auto & i: Modes)
583583 {
584- delete[] i.ColumnTypes ;
585- delete[] i.ColumnWidths ;
584+ std::unique_ptr< wchar_t const []>{ i.ColumnTypes } ;
585+ std::unique_ptr< wchar_t const []>{ i.ColumnWidths } ;
586586 FreeUnicodeArrayMagic (i.ColumnTitles );
587- delete[] i.StatusColumnTypes ;
588- delete[] i.StatusColumnWidths ;
587+ std::unique_ptr< wchar_t const []>{ i.StatusColumnTypes } ;
588+ std::unique_ptr< wchar_t const []>{ i.StatusColumnWidths } ;
589589 }
590- delete[] Modes.data ();
590+ std::unique_ptr<PanelMode const []>{ Modes.data ()} ;
591591}
592592
593593static void ConvertKeyBarTitlesA (const oldfar::KeyBarTitles& kbtA, KeyBarTitles& kbtW, bool FullStruct = true )
@@ -663,15 +663,15 @@ static void FreeUnicodeKeyBarTitles(const KeyBarTitles& kbtW)
663663{
664664 for (const auto & Item: std::span (kbtW.Labels , kbtW.CountLabels ))
665665 {
666- delete[] Item.Text ;
666+ std::unique_ptr< wchar_t const []>{ Item.Text } ;
667667 }
668668
669- delete[] kbtW.Labels ;
669+ std::unique_ptr<KeyBarLabel[]>{ kbtW.Labels } ;
670670}
671671
672672static void WINAPI FreeUserData (void * UserData, const FarPanelItemFreeInfo*)
673673{
674- delete[] static_cast <char *>(UserData);
674+ std::unique_ptr< char []>{ static_cast <char *>(UserData)} ;
675675}
676676
677677static const std::array PluginPanelItemFlagsMap
@@ -792,25 +792,27 @@ static void FreeUnicodePanelItem(PluginPanelItem *PanelItem, size_t ItemsNumber)
792792{
793793 FreePluginPanelItemsData ({ PanelItem, ItemsNumber });
794794
795- delete[] PanelItem;
795+ std::unique_ptr<PluginPanelItem[]>{ PanelItem} ;
796796}
797797
798798static void FreePanelItemA (std::span<const oldfar::PluginPanelItem> const PanelItem)
799799{
800800 for (const auto & Item: PanelItem)
801801 {
802- delete[] Item.Description ;
803- delete[] Item.Owner ;
802+ std::unique_ptr< char []>{ Item.Description } ;
803+ std::unique_ptr< char []>{ Item.Owner } ;
804804
805- DeleteRawArray (std::span (Item.CustomColumnData , Item.CustomColumnNumber ));
805+ for (auto & i: std::span (Item.CustomColumnData , Item.CustomColumnNumber ))
806+ std::unique_ptr<char []>{i};
807+ std::unique_ptr<char *[]>{Item.CustomColumnData };
806808
807809 if (Item.Flags & oldfar::PPIF_USERDATA)
808810 {
809- delete[] std::bit_cast<char *>(Item.UserData );
811+ std::unique_ptr< char []>{ std::bit_cast<char *>(Item.UserData )} ;
810812 }
811813 }
812814
813- delete[] PanelItem.data ();
815+ std::unique_ptr<oldfar::PluginPanelItem const []>{ PanelItem.data ()} ;
814816}
815817
816818static char *InsertQuoteA (char *Str)
@@ -1138,9 +1140,9 @@ static void FreeUnicodeDialogItem(FarDialogItem const& di)
11381140 case DI_FIXEDIT:
11391141
11401142 if (di.Flags &DIF_HISTORY)
1141- delete[] di.History ;
1143+ std::unique_ptr< wchar_t const []>{ di.History } ;
11421144 else if (di.Flags &DIF_MASKEDIT)
1143- delete[] di.Mask ;
1145+ std::unique_ptr< wchar_t const []>{ di.Mask } ;
11441146 break ;
11451147
11461148 case DI_LISTBOX:
@@ -1151,37 +1153,37 @@ static void FreeUnicodeDialogItem(FarDialogItem const& di)
11511153 {
11521154 for (const auto & i: std::span (di.ListItems ->Items , di.ListItems ->ItemsNumber ))
11531155 {
1154- delete[] i.Text ;
1156+ std::unique_ptr< wchar_t const []>{ i.Text } ;
11551157 }
11561158
1157- delete[] di.ListItems ->Items ;
1159+ std::unique_ptr<FarListItem[]>{ di.ListItems ->Items } ;
11581160 di.ListItems ->Items = nullptr ;
11591161 }
11601162 }
11611163 break ;
11621164
11631165 case DI_USERCONTROL:
1164- delete[] di.VBuf ;
1166+ std::unique_ptr<FAR_CHAR_INFO[]>{ di.VBuf } ;
11651167 break ;
11661168
11671169 default :
11681170 break ;
11691171 }
11701172
1171- delete[] di.Data ;
1173+ std::unique_ptr< wchar_t const []>{ di.Data } ;
11721174}
11731175
11741176static void FreeAnsiDialogItem (oldfar::FarDialogItem &diA)
11751177{
11761178 if ((diA.Type == oldfar::DI_EDIT || diA.Type == oldfar::DI_FIXEDIT) && (diA.Flags &oldfar::DIF_HISTORY || diA.Flags &oldfar::DIF_MASKEDIT))
11771179 {
1178- delete[] diA.History ;
1180+ std::unique_ptr< char const []>{ diA.History } ;
11791181 diA.History = nullptr ;
11801182 }
11811183
11821184 if ((diA.Type == oldfar::DI_EDIT || diA.Type == oldfar::DI_COMBOBOX) && diA.Flags &oldfar::DIF_VAREDIT)
11831185 {
1184- delete[] diA.Ptr .PtrData ;
1186+ std::unique_ptr< char []>{ diA.Ptr .PtrData } ;
11851187 diA.Ptr .PtrData = nullptr ;
11861188 }
11871189}
@@ -1878,7 +1880,7 @@ static char* WINAPI PasteFromClipboardA() noexcept
18781880static void WINAPI DeleteBufferA (void * Buffer) noexcept
18791881{
18801882 // noexcept
1881- delete[] static_cast <char *>(Buffer);
1883+ std::unique_ptr< char []>{ static_cast <char *>(Buffer)} ;
18821884}
18831885
18841886static int WINAPI ProcessNameA (const char *Param1, char *Param2, DWORD Flags) noexcept
@@ -2390,7 +2392,7 @@ static int WINAPI FarMenuFnA(intptr_t PluginNumber, int X, int Y, int MaxHeight,
23902392
23912393 for (const auto & i: mi)
23922394 {
2393- delete[] i.Text ;
2395+ std::unique_ptr< wchar_t const []>{ i.Text } ;
23942396 }
23952397
23962398 return ret;
@@ -2824,7 +2826,7 @@ static intptr_t WINAPI FarSendDlgMessageA(HANDLE hDlg, int OldMsg, int Param1, v
28242826
28252827 for (const auto & i: Items)
28262828 {
2827- delete[] i.Text ;
2829+ std::unique_ptr< wchar_t const []>{ i.Text } ;
28282830 }
28292831
28302832 return ret;
@@ -2847,7 +2849,7 @@ static intptr_t WINAPI FarSendDlgMessageA(HANDLE hDlg, int OldMsg, int Param1, v
28472849
28482850 intptr_t ret = pluginapi::apiSendDlgMessage (hDlg, DM_LISTUPDATE, Param1, Param2? &newui : nullptr );
28492851
2850- delete[] newui.Item .Text ;
2852+ std::unique_ptr< wchar_t const []>{ newui.Item .Text } ;
28512853
28522854 return ret;
28532855 }
@@ -2864,7 +2866,7 @@ static intptr_t WINAPI FarSendDlgMessageA(HANDLE hDlg, int OldMsg, int Param1, v
28642866
28652867 intptr_t ret = pluginapi::apiSendDlgMessage (hDlg, DM_LISTINSERT, Param1, Param2? &newli : nullptr );
28662868
2867- delete[] newli.Item .Text ;
2869+ std::unique_ptr< wchar_t const []>{ newli.Item .Text } ;
28682870
28692871 return ret;
28702872 }
@@ -2883,7 +2885,7 @@ static intptr_t WINAPI FarSendDlgMessageA(HANDLE hDlg, int OldMsg, int Param1, v
28832885
28842886 intptr_t ret = pluginapi::apiSendDlgMessage (hDlg, DM_LISTFINDSTRING, Param1, Param2? &newlf : nullptr );
28852887
2886- delete[] newlf.Pattern ;
2888+ std::unique_ptr< wchar_t const []>{ newlf.Pattern } ;
28872889
28882890 return ret;
28892891 }
@@ -2999,7 +3001,7 @@ static intptr_t WINAPI FarSendDlgMessageA(HANDLE hDlg, int OldMsg, int Param1, v
29993001 else
30003002 {
30013003 FarDialogItem& di = CurrentDialogItem (hDlg,Param1);
3002- delete[] di.History ;
3004+ std::unique_ptr< wchar_t const []>{ di.History } ;
30033005 di.History = AnsiToUnicode (static_cast <const char *>(Param2));
30043006 return pluginapi::apiSendDlgMessage (hDlg, DM_SETHISTORY, Param1, const_cast <wchar_t *>(di.History ));
30053007 }
@@ -3035,10 +3037,10 @@ static intptr_t WINAPI FarSendDlgMessageA(HANDLE hDlg, int OldMsg, int Param1, v
30353037 {
30363038 for (const auto & i: std::span (newlist.Items , newlist.ItemsNumber ))
30373039 {
3038- delete[] i.Text ;
3040+ std::unique_ptr< wchar_t const []>{ i.Text } ;
30393041 }
30403042
3041- delete[] newlist.Items ;
3043+ std::unique_ptr<FarListItem[]>{ newlist.Items } ;
30423044 }
30433045
30443046 return ret;
@@ -3746,7 +3748,7 @@ static intptr_t WINAPI FarAdvControlA(intptr_t ModuleNumber, oldfar::ADVANCED_CO
37463748 kmA->MacroResult .ErrMsg3 = " " ;
37473749 [[fallthrough]];
37483750 case MSSC_POST:
3749- delete[] mtW.SequenceText ;
3751+ std::unique_ptr< wchar_t const []>{ mtW.SequenceText } ;
37503752 break ;
37513753 }
37523754 }
@@ -4275,8 +4277,8 @@ static int WINAPI FarEditorControlA(oldfar::EDITOR_CONTROL_COMMANDS OldCommand,
42754277
42764278 const auto ret = static_cast <int >(pluginapi::apiEditorControl (-1 , ECTL_SETSTRING, 0 , Param? &newss : nullptr ));
42774279
4278- delete[] newss.StringText ;
4279- delete[] newss.StringEOL ;
4280+ std::unique_ptr< wchar_t const []>{ newss.StringText } ;
4281+ std::unique_ptr< wchar_t const []>{ newss.StringEOL } ;
42804282
42814283 return ret;
42824284 }
@@ -5469,18 +5471,18 @@ WARNING_POP()
54695471 {
54705472 for (const auto & i: std::span (Item.Strings , Item.Count ))
54715473 {
5472- delete[] i ;
5474+ std::unique_ptr< wchar_t const []>{i} ;
54735475 }
54745476
5475- delete[] Item.Guids ;
5476- delete[] Item.Strings ;
5477+ std::unique_ptr<UUID const []>{ Item.Guids } ;
5478+ std::unique_ptr< wchar_t const * const []>{ Item.Strings } ;
54775479 };
54785480
54795481 DeleteItems (PI.DiskMenu );
54805482 DeleteItems (PI.PluginMenu );
54815483 DeleteItems (PI.PluginConfig );
54825484
5483- delete[] PI.CommandPrefix ;
5485+ std::unique_ptr< wchar_t const []>{ PI.CommandPrefix } ;
54845486
54855487 PI = {};
54865488 }
@@ -5538,19 +5540,23 @@ WARNING_POP()
55385540
55395541 void FreeOpenPanelInfo ()
55405542 {
5541- delete[] OPI.CurDir ;
5542- delete[] OPI.HostFile ;
5543- delete[] OPI.Format ;
5544- delete[] OPI.PanelTitle ;
5543+ std::unique_ptr< wchar_t const []>{ OPI.CurDir } ;
5544+ std::unique_ptr< wchar_t const []>{ OPI.HostFile } ;
5545+ std::unique_ptr< wchar_t const []>{ OPI.Format } ;
5546+ std::unique_ptr< wchar_t const []>{ OPI.PanelTitle } ;
55455547 FreeUnicodeInfoPanelLines ({ OPI.InfoLines , OPI.InfoLinesNumber });
5546- DeleteRawArray (std::span (OPI.DescrFiles , OPI.DescrFilesNumber ));
5548+
5549+ for (auto & i: std::span (OPI.DescrFiles , OPI.DescrFilesNumber ))
5550+ std::unique_ptr<wchar_t const []>{i};
5551+ std::unique_ptr<wchar_t const * const []>{OPI.DescrFiles };
5552+
55475553 FreeUnicodePanelModes ({ OPI.PanelModesArray , OPI.PanelModesNumber });
55485554 if (OPI.KeyBar )
55495555 {
55505556 FreeUnicodeKeyBarTitles (*OPI.KeyBar );
5551- delete OPI.KeyBar ;
5557+ std::unique_ptr<KeyBarTitles const >{ OPI.KeyBar } ;
55525558 }
5553- delete[] OPI.ShortcutData ;
5559+ std::unique_ptr< wchar_t const []>{ OPI.ShortcutData } ;
55545560 OPI = {};
55555561 }
55565562
0 commit comments