From 4762dbff8bf532509c5c839a7ccaa908a954eca0 Mon Sep 17 00:00:00 2001 From: Aleksey Dobrunov Date: Sun, 3 Nov 2024 22:20:55 +0500 Subject: [PATCH 1/2] tmppanel: remove Unicode define --- tmppanel/src/TmpCfg.cpp | 44 +------- tmppanel/src/TmpCfg.hpp | 3 - tmppanel/src/TmpClass.cpp | 230 ++++++-------------------------------- tmppanel/src/TmpMix.cpp | 58 +--------- tmppanel/src/TmpPanel.cpp | 114 +++---------------- tmppanel/src/TmpPanel.hpp | 8 +- 6 files changed, 56 insertions(+), 401 deletions(-) diff --git a/tmppanel/src/TmpCfg.cpp b/tmppanel/src/TmpCfg.cpp index a369b61a0..998371143 100644 --- a/tmppanel/src/TmpCfg.cpp +++ b/tmppanel/src/TmpCfg.cpp @@ -9,13 +9,8 @@ Temporary panel configuration #include #include -#ifndef UNICODE -#define GetCheck(i) DialogItems[i].Selected -#define GetDataPtr(i) DialogItems[i].Data -#else #define GetCheck(i) (int)Info.SendDlgMessage(hDlg, DM_GETCHECK, i, 0) #define GetDataPtr(i) ((const TCHAR *)Info.SendDlgMessage(hDlg, DM_GETCONSTTEXTPTR, i, 0)) -#endif #define INI_LOCATION InMyConfig("plugins/tmppanel/config.ini") #define INI_SECTION "Settings" @@ -36,9 +31,6 @@ enum ColumnWidths, StatusColumnTypes, StatusColumnWidths, -#ifndef UNICODE - DisksMenuDigit, -#endif Mask, Prefix }; @@ -46,11 +38,7 @@ enum options_t Opt; static const char REGStr[][9] = {("InDisks"), ("InPlug"), ("Common"), ("Safe"), ("Any"), ("Contents"), - ("Mode"), ("Menu"), ("NewP"), ("Full"), ("ColT"), ("ColW"), ("StatT"), ("StatW"), -#ifndef UNICODE - ("DigitV"), -#endif - ("Mask"), ("Prefix")}; + ("Mode"), ("Menu"), ("NewP"), ("Full"), ("ColT"), ("ColW"), ("StatT"), ("StatW"), ("Mask"), ("Prefix")}; struct COptionsList { @@ -79,9 +67,6 @@ static const struct COptionsList OptionsList[] = { {Opt.StatusColumnTypes, _T("NR,SC,D,T"), 19, sizeof(Opt.StatusColumnTypes) }, {Opt.StatusColumnWidths, _T("0,8,0,5"), 21, sizeof(Opt.StatusColumnWidths) }, -#ifndef UNICODE - {Opt.DisksMenuDigit, _T("1"), 2, sizeof(Opt.DisksMenuDigit) }, -#endif {Opt.Mask, _T("*.temp"), 25, sizeof(Opt.Mask) }, {Opt.Prefix, _T("tmp"), 27, sizeof(Opt.Mask) }, }; @@ -116,21 +101,9 @@ int Config() /* 1*/ {DI_CHECKBOX, 5, 2, 0, 0, 0, MConfigAddToDisksMenu}, /* 2*/ - {DI_FIXEDIT, 7, 3, 7, 3, - 0 -#ifdef UNICODE - | DIF_HIDDEN -#endif - , - -1}, + {DI_FIXEDIT, 7, 3, 7, 3,DIF_HIDDEN, -1}, /* 3*/ - {DI_TEXT, 9, 3, 0, 0, - 0 -#ifdef UNICODE - | DIF_HIDDEN -#endif - , - MConfigDisksMenuDigit}, + {DI_TEXT, 9, 3, 0, 0,DIF_HIDDEN,MConfigDisksMenuDigit}, /* 4*/ {DI_CHECKBOX, DC, 2, 0, 0, 0, MConfigAddToPluginsMenu}, /* 5*/ {DI_TEXT, 5, 4, 0, 0, DIF_BOXCOLOR | DIF_SEPARATOR, -1}, @@ -178,23 +151,14 @@ int Config() if (i < ColumnTypes) DialogItems[OptionsList[i].DialogItem].Selected = *(int *)(OptionsList[i].Option); else -#ifndef UNICODE - lstrcpy(DialogItems[OptionsList[i].DialogItem].Data, (char *)OptionsList[i].Option); -#else DialogItems[OptionsList[i].DialogItem].PtrData = (TCHAR *)OptionsList[i].Option; -#endif -#ifndef UNICODE - int Ret = Info.Dialog(Info.ModuleNumber, -1, -1, DIALOG_WIDTH, DIALOG_HEIGHT, "Config", DialogItems, - ARRAYSIZE(DialogItems)); -#else HANDLE hDlg = Info.DialogInit(Info.ModuleNumber, -1, -1, DIALOG_WIDTH, DIALOG_HEIGHT, L"Config", DialogItems, ARRAYSIZE(DialogItems), 0, 0, NULL, 0); if (hDlg == INVALID_HANDLE_VALUE) return FALSE; int Ret = Info.DialogRun(hDlg); -#endif KeyFileHelper kfh(INI_LOCATION); if ((unsigned)Ret >= ARRAYSIZE(InitItems) - 1) @@ -220,8 +184,6 @@ int Config() Info.PluginsControl(NULL, PCTL_CACHEFORGET, PLT_PATH, (LONG_PTR)GetTmpPanelModule()); } done: -#ifdef UNICODE Info.DialogFree(hDlg); -#endif return ((unsigned)Ret < ARRAYSIZE(InitItems)); } diff --git a/tmppanel/src/TmpCfg.hpp b/tmppanel/src/TmpCfg.hpp index de5168439..f13a7b2ea 100644 --- a/tmppanel/src/TmpCfg.hpp +++ b/tmppanel/src/TmpCfg.hpp @@ -21,9 +21,6 @@ typedef struct options_s TCHAR ColumnWidths[64]; TCHAR StatusColumnTypes[64]; TCHAR StatusColumnWidths[64]; -#ifndef UNICODE - TCHAR DisksMenuDigit[1]; -#endif TCHAR Mask[512]; TCHAR Prefix[16]; } options_t; diff --git a/tmppanel/src/TmpClass.cpp b/tmppanel/src/TmpClass.cpp index 63c7cb95e..219d3004a 100644 --- a/tmppanel/src/TmpClass.cpp +++ b/tmppanel/src/TmpClass.cpp @@ -27,17 +27,12 @@ TmpPanel::~TmpPanel() int TmpPanel::GetFindData(PluginPanelItem **pPanelItem, int *pItemsNumber, int OpMode) { IfOptCommonPanel(); -#ifndef UNICODE - struct PanelInfo PInfo; - Info.Control(this, FCTL_GETPANELINFO, &PInfo); - UpdateItems(IsOwnersDisplayed(PInfo.ColumnTypes), IsLinksDisplayed(PInfo.ColumnTypes)); -#else + int Size = Info.Control(this, FCTL_GETCOLUMNTYPES, 0, 0); wchar_t *ColumnTypes = new wchar_t[Size]; Info.Control(this, FCTL_GETCOLUMNTYPES, Size, (LONG_PTR)ColumnTypes); UpdateItems(IsOwnersDisplayed(ColumnTypes), IsLinksDisplayed(ColumnTypes)); delete[] ColumnTypes; -#endif *pPanelItem = TmpPanelItem; *pItemsNumber = TmpItemsNumber; @@ -95,18 +90,11 @@ int TmpPanel::SetDirectory(const TCHAR *Dir, int OpMode) if ((OpMode & OPM_FIND) /* || lstrcmp(Dir,_T("\\"))==0*/) return (FALSE); if (lstrcmp(Dir, WGOOD_SLASH) == 0) -#ifndef UNICODE - Info.Control(this, FCTL_CLOSEPLUGIN, (void *)NULL); -#else Info.Control(this, FCTL_CLOSEPLUGIN, 0, 0); -#endif else -#ifndef UNICODE - Info.Control(this, FCTL_CLOSEPLUGIN, (void *)Dir); -#else Info.Control(this, FCTL_CLOSEPLUGIN, 0, (LONG_PTR)Dir); -#endif - return (TRUE); + + return (TRUE); } int TmpPanel::PutFiles(struct PluginPanelItem *PanelItem, int ItemsNumber, int, const TCHAR *SrcPath, int) @@ -138,12 +126,7 @@ HANDLE TmpPanel::BeginPutFiles() static inline int cmp_names(const WIN32_FIND_DATA &wfd, const FAR_FIND_DATA &ffd) { -#ifndef UNICODE -#define FILE_NAME cFileName -#else -#define FILE_NAME lpwszFileName -#endif - return lstrcmp(wfd.cFileName, FSF.PointToName(ffd.FILE_NAME)); + return lstrcmp(wfd.cFileName, FSF.PointToName(ffd.lpwszFileName)); } int TmpPanel::PutDirectoryContents(const TCHAR *Path) @@ -154,11 +137,8 @@ int TmpPanel::PutDirectoryContents(const TCHAR *Path) ARRAYSIZE(MsgItems), 0); } if (Opt.SelectedCopyContents) { -#ifdef UNICODE FAR_FIND_DATA *DirItems; -#else - struct PluginPanelItem *DirItems; -#endif + int DirItemsNumber; if (!Info.GetDirList(Path, &DirItems, &DirItemsNumber)) { FreePanelItems(TmpPanelItem, TmpItemsNumber); @@ -171,37 +151,16 @@ int TmpPanel::PutDirectoryContents(const TCHAR *Path) return FALSE; TmpPanelItem = NewPanelItem; memset(&TmpPanelItem[TmpItemsNumber], 0, sizeof(*TmpPanelItem) * DirItemsNumber); -#ifndef UNICODE - size_t PathLen = lstrlen(Path); - const TCHAR *lpSlash = _tcsrchr(Path, GOOD_SLASH); - if (lpSlash) - PathLen = lpSlash - Path; -#endif + for (int i = 0; i < DirItemsNumber; i++) { struct PluginPanelItem *CurPanelItem = &TmpPanelItem[TmpItemsNumber]; CurPanelItem->UserData = TmpItemsNumber; TmpItemsNumber++; -#ifdef UNICODE + CurPanelItem->FindData = DirItems[i]; CurPanelItem->FindData.lpwszFileName = wcsdup(DirItems[i].lpwszFileName); -#else - if ((PathLen + 1 + strlen(DirItems[i].FindData.cFileName)) - < ARRAYSIZE(CurPanelItem->FindData.cFileName)) { - CurPanelItem->FindData = DirItems[i].FindData; - strncpy(CurPanelItem->FindData.cFileName, Path); - CurPanelItem->FindData.cFileName[PathLen] = 0; - FSF.AddEndSlash(CurPanelItem->FindData.cFileName); - lstrcat(CurPanelItem->FindData.cFileName, DirItems[i].FindData.cFileName); - } else - strcpy(CurPanelItem->FindData.cFileName, "Oh long Johnson!"); -#endif } - Info.FreeDirList(DirItems -#ifdef UNICODE - , - DirItemsNumber -#endif - ); + Info.FreeDirList(DirItems, DirItemsNumber); } return TRUE; } @@ -217,22 +176,19 @@ int TmpPanel::PutOneFile(const TCHAR *SrcPath, PluginPanelItem &PanelItem) memset(CurPanelItem, 0, sizeof(*CurPanelItem)); CurPanelItem->FindData = PanelItem.FindData; CurPanelItem->UserData = TmpItemsNumber; -#ifdef UNICODE CurPanelItem->FindData.lpwszFileName = reinterpret_cast( malloc((lstrlen(SrcPath) + 1 + lstrlen(PanelItem.FindData.lpwszFileName) + 1) * sizeof(wchar_t))); if (CurPanelItem->FindData.lpwszFileName == NULL) return FALSE; -#else - *CurPanelItem->FindData.cFileName = 0; -#endif - lstrcpy((TCHAR *)CurPanelItem->FindData.FILE_NAME, SrcPath); + + lstrcpy((TCHAR *)CurPanelItem->FindData.lpwszFileName, SrcPath); if (*SrcPath) { - FSF.AddEndSlash((TCHAR *)CurPanelItem->FindData.FILE_NAME); + FSF.AddEndSlash((TCHAR *)CurPanelItem->FindData.lpwszFileName); } - lstrcat((TCHAR *)CurPanelItem->FindData.FILE_NAME, PanelItem.FindData.FILE_NAME); + lstrcat((TCHAR *)CurPanelItem->FindData.lpwszFileName, PanelItem.FindData.lpwszFileName); TmpItemsNumber++; if (Opt.SelectedCopyContents && (CurPanelItem->FindData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)) - return PutDirectoryContents(CurPanelItem->FindData.FILE_NAME); + return PutDirectoryContents(CurPanelItem->FindData.lpwszFileName); return TRUE; } @@ -249,7 +205,7 @@ int TmpPanel::PutOneFile(const TCHAR *FilePath) if (GetFileInfoAndValidate(FilePath, &CurPanelItem->FindData, Opt.AnyInPanel)) { TmpItemsNumber++; if (Opt.SelectedCopyContents && (CurPanelItem->FindData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)) - return PutDirectoryContents(CurPanelItem->FindData.FILE_NAME); + return PutDirectoryContents(CurPanelItem->FindData.lpwszFileName); } return TRUE; } @@ -274,11 +230,8 @@ int TmpPanel::SetFindList(const struct PluginPanelItem *PanelItem, int ItemsNumb for (int i = 0; i < ItemsNumber; ++i) { TmpPanelItem[i].UserData = i; TmpPanelItem[i].FindData = PanelItem[i].FindData; -#ifdef UNICODE if (TmpPanelItem[i].FindData.lpwszFileName) TmpPanelItem[i].FindData.lpwszFileName = wcsdup(TmpPanelItem[i].FindData.lpwszFileName); -#else -#endif } } CommitPutFiles(hScreen, TRUE); @@ -322,7 +275,7 @@ int _cdecl SortListCmp(const void *el1, const void *el2, void *userparam) PluginPanelItem *TmpPanelItem = reinterpret_cast(userparam); int idx1 = *reinterpret_cast(el1); int idx2 = *reinterpret_cast(el2); - int res = lstrcmp(TmpPanelItem[idx1].FindData.FILE_NAME, TmpPanelItem[idx2].FindData.FILE_NAME); + int res = lstrcmp(TmpPanelItem[idx1].FindData.lpwszFileName, TmpPanelItem[idx2].FindData.lpwszFileName); if (res == 0) { if (idx1 < idx2) return -1; @@ -343,8 +296,8 @@ void TmpPanel::RemoveDups() indices[i] = i; FSF.qsortex(indices, TmpItemsNumber, sizeof(int), SortListCmp, TmpPanelItem); for (int i = 0; i + 1 < TmpItemsNumber; i++) - if (lstrcmp(TmpPanelItem[indices[i]].FindData.FILE_NAME, - TmpPanelItem[indices[i + 1]].FindData.FILE_NAME) + if (lstrcmp(TmpPanelItem[indices[i]].FindData.lpwszFileName, + TmpPanelItem[indices[i + 1]].FindData.lpwszFileName) == 0) TmpPanelItem[indices[i + 1]].Flags|= REMOVE_FLAG; free(indices); @@ -361,12 +314,10 @@ void TmpPanel::RemoveEmptyItems() free((void *)CurItem->Owner); CurItem->Owner = NULL; } -#ifdef UNICODE if (CurItem->FindData.lpwszFileName) { free((wchar_t *)CurItem->FindData.lpwszFileName); CurItem->FindData.lpwszFileName = NULL; } -#endif EmptyCount++; } else if (EmptyCount) { CurItem->UserData-= EmptyCount; @@ -400,7 +351,7 @@ void TmpPanel::UpdateItems(int ShowOwners, int ShowLinks) for (int i = 0; i < TmpItemsNumber; i++, CurItem++) { HANDLE FindHandle; - const TCHAR *lpFullName = CurItem->FindData.FILE_NAME; + const TCHAR *lpFullName = CurItem->FindData.lpwszFileName; const TCHAR *lpSlash = _tcsrchr(lpFullName, GOOD_SLASH); int Length = lpSlash ? (int)(lpSlash - lpFullName + 1) : 0; @@ -414,8 +365,8 @@ void TmpPanel::UpdateItems(int ShowOwners, int ShowLinks) if (Length > 0 && Length > (int)lstrlen(lpFullName)) /* DJ $ */ { for (int j = 1; i + j < TmpItemsNumber; j++) { - if (memcmp(lpFullName, CurItem[j].FindData.FILE_NAME, Length * sizeof(TCHAR)) == 0 - && _tcschr((const TCHAR *)CurItem[j].FindData.FILE_NAME + Length, GOOD_SLASH) + if (memcmp(lpFullName, CurItem[j].FindData.lpwszFileName, Length * sizeof(TCHAR)) == 0 + && _tcschr((const TCHAR *)CurItem[j].FindData.lpwszFileName + Length, GOOD_SLASH) == NULL) { SameFolderItems++; } else { @@ -434,12 +385,9 @@ void TmpPanel::UpdateItems(int ShowOwners, int ShowLinks) StrBuf FindFile((int)(lpSlash - lpFullName) + 1 + 1 + 1); lstrcpyn(FindFile, lpFullName, (int)(lpSlash - lpFullName) + 1); lstrcpy(FindFile + (lpSlash + 1 - lpFullName), _T("*")); -#ifdef UNICODE + StrBuf NtPath; FormNtPath(FindFile, NtPath); -#else - const char *NtPath = FindFile; -#endif for (int J = 0; J < SameFolderItems; J++) CurItem[J].Flags|= REMOVE_FLAG; @@ -450,21 +398,11 @@ void TmpPanel::UpdateItems(int ShowOwners, int ShowLinks) if ((CurItem[J].Flags & 1) && cmp_names(FindData, CurItem[J].FindData) == 0) { CurItem[J].Flags&= ~REMOVE_FLAG; -#ifndef UNICODE - char save[sizeof(CurItem[J].FindData.cFileName)]; - lstrcpy(save, CurItem[J].FindData.cFileName); -#else const wchar_t *save = CurItem[J].FindData.lpwszFileName; -#endif - WFD2FFD(FindData, CurItem[J].FindData); -#ifndef UNICODE - lstrcpy(CurItem[J].FindData.cFileName, save); -#else free((wchar_t *)CurItem[J].FindData.lpwszFileName); CurItem[J].FindData.lpwszFileName = save; -#endif break; } } @@ -491,16 +429,11 @@ void TmpPanel::UpdateItems(int ShowOwners, int ShowLinks) free((void *)CurItem->Owner); CurItem->Owner = NULL; } - if (FSF.GetFileOwner(NULL, CurItem->FindData.FILE_NAME, Owner -#ifdef UNICODE - , - 80 -#endif - )) + if (FSF.GetFileOwner(NULL, CurItem->FindData.lpwszFileName, Owner,80)) CurItem->Owner = _tcsdup(Owner); } if (ShowLinks) - CurItem->NumberOfLinks = FSF.GetNumberOfLinks(CurItem->FindData.FILE_NAME); + CurItem->NumberOfLinks = FSF.GetNumberOfLinks(CurItem->FindData.lpwszFileName); } } Info.RestoreScreen(hScreen); @@ -510,29 +443,20 @@ int TmpPanel::ProcessEvent(int Event, void *) { if (Event == FE_CHANGEVIEWMODE) { IfOptCommonPanel(); -#ifndef UNICODE - struct PanelInfo PInfo; - Info.Control(this, FCTL_GETPANELINFO, &PInfo); - int UpdateOwners = IsOwnersDisplayed(PInfo.ColumnTypes) && !LastOwnersRead; - int UpdateLinks = IsLinksDisplayed(PInfo.ColumnTypes) && !LastLinksRead; -#else + int Size = Info.Control(this, FCTL_GETCOLUMNTYPES, 0, 0); wchar_t *ColumnTypes = new wchar_t[Size]; Info.Control(this, FCTL_GETCOLUMNTYPES, Size, (LONG_PTR)ColumnTypes); int UpdateOwners = IsOwnersDisplayed(ColumnTypes) && !LastOwnersRead; int UpdateLinks = IsLinksDisplayed(ColumnTypes) && !LastLinksRead; delete[] ColumnTypes; -#endif + if (UpdateOwners || UpdateLinks) { UpdateItems(UpdateOwners, UpdateLinks); -#ifndef UNICODE - Info.Control(this, FCTL_UPDATEPANEL, (void *)TRUE); - Info.Control(this, FCTL_REDRAWPANEL, NULL); -#else + Info.Control(this, FCTL_UPDATEPANEL, TRUE, 0); Info.Control(this, FCTL_REDRAWPANEL, 0, 0); -#endif } } return (FALSE); @@ -546,10 +470,6 @@ bool TmpPanel::IsCurrentFileCorrect(TCHAR **pCurFileName) if (pCurFileName) *pCurFileName = NULL; -#ifndef UNICODE - Info.Control(this, FCTL_GETPANELINFO, &PInfo); - CurFileName = PInfo.PanelItems[PInfo.CurrentItem].FindData.cFileName; -#else Info.Control(this, FCTL_GETPANELINFO, 0, (LONG_PTR)&PInfo); PluginPanelItem *PPI = (PluginPanelItem *)malloc(Info.Control(this, FCTL_GETPANELITEM, PInfo.CurrentItem, 0)); @@ -559,7 +479,6 @@ bool TmpPanel::IsCurrentFileCorrect(TCHAR **pCurFileName) } else { return false; } -#endif bool IsCorrectFile = false; if (lstrcmp(CurFileName, _T("..")) == 0) { @@ -574,9 +493,7 @@ bool TmpPanel::IsCurrentFileCorrect(TCHAR **pCurFileName) lstrcpy(*pCurFileName, CurFileName); } -#ifdef UNICODE free(PPI); -#endif return IsCorrectFile; } @@ -597,17 +514,9 @@ int TmpPanel::ProcessKey(int Key, unsigned int ControlState) PtrGuard CurFileName; if (IsCurrentFileCorrect(CurFileName.PtrPtr())) { struct PanelInfo PInfo; -#ifndef UNICODE - Info.Control(this, FCTL_GETPANELINFO, &PInfo); -#else Info.Control(this, FCTL_GETPANELINFO, 0, (LONG_PTR)&PInfo); -#endif if (lstrcmp(CurFileName, _T("..")) != 0) { -#ifndef UNICODE - if (PInfo.PanelItems[PInfo.CurrentItem].FindData.dwFileAttributes - & FILE_ATTRIBUTE_DIRECTORY) { -#else PluginPanelItem *PPI = (PluginPanelItem *)malloc( Info.Control(this, FCTL_GETPANELITEM, PInfo.CurrentItem, 0)); DWORD attributes = 0; @@ -618,21 +527,12 @@ int TmpPanel::ProcessKey(int Key, unsigned int ControlState) } if (attributes & FILE_ATTRIBUTE_DIRECTORY) { -#endif -#ifndef UNICODE - Info.Control(INVALID_HANDLE_VALUE, FCTL_SETANOTHERPANELDIR, CurFileName.Ptr()); -#else Info.Control(PANEL_PASSIVE, FCTL_SETPANELDIR, 0, (LONG_PTR)CurFileName.Ptr()); -#endif } else { GoToFile(CurFileName, true); } -#ifndef UNICODE - Info.Control(INVALID_HANDLE_VALUE, FCTL_REDRAWANOTHERPANEL, NULL); -#else Info.Control(PANEL_PASSIVE, FCTL_REDRAWPANEL, 0, 0); -#endif return (TRUE); } @@ -647,12 +547,7 @@ int TmpPanel::ProcessKey(int Key, unsigned int ControlState) if (ControlState == 0 && Key == VK_RETURN && Opt.AnyInPanel) { PtrGuard CurFileName; if (!IsCurrentFileCorrect(CurFileName.PtrPtr())) { -#ifndef UNICODE - Info.Control(this, FCTL_SETCMDLINE, CurFileName.Ptr()); -#else Info.Control(this, FCTL_SETCMDLINE, 0, (LONG_PTR)CurFileName.Ptr()); -#endif - return (TRUE); } } @@ -697,51 +592,28 @@ void TmpPanel::ProcessRemoveKey() IfOptCommonPanel(); struct PanelInfo PInfo; -#ifndef UNICODE - Info.Control(this, FCTL_GETPANELINFO, &PInfo); -#else + Info.Control(this, FCTL_GETPANELINFO, 0, (LONG_PTR)&PInfo); -#endif for (int i = 0; i < PInfo.SelectedItemsNumber; i++) { -#ifndef UNICODE - struct PluginPanelItem *RemovedItem = TmpPanelItem + PInfo.SelectedItems[i].UserData; -#else struct PluginPanelItem *RemovedItem = NULL; PluginPanelItem *PPI = (PluginPanelItem *)malloc(Info.Control(this, FCTL_GETSELECTEDPANELITEM, i, 0)); if (PPI) { Info.Control(this, FCTL_GETSELECTEDPANELITEM, i, (LONG_PTR)PPI); RemovedItem = TmpPanelItem + PPI->UserData; } -#endif if (RemovedItem != NULL) RemovedItem->Flags|= REMOVE_FLAG; -#ifdef UNICODE free(PPI); -#endif } RemoveEmptyItems(); -#ifndef UNICODE - Info.Control(this, FCTL_UPDATEPANEL, NULL); - Info.Control(this, FCTL_REDRAWPANEL, NULL); -#else Info.Control(this, FCTL_UPDATEPANEL, 0, 0); Info.Control(this, FCTL_REDRAWPANEL, 0, 0); -#endif - -#ifndef UNICODE - Info.Control(this, FCTL_GETANOTHERPANELSHORTINFO, (void *)&PInfo); -#else Info.Control(PANEL_PASSIVE, FCTL_GETPANELINFO, 0, (LONG_PTR)&PInfo); -#endif + if (PInfo.PanelType == PTYPE_QVIEWPANEL) { -#ifndef UNICODE - Info.Control(this, FCTL_UPDATEANOTHERPANEL, NULL); - Info.Control(this, FCTL_REDRAWANOTHERPANEL, NULL); -#else Info.Control(PANEL_PASSIVE, FCTL_UPDATEPANEL, 0, 0); Info.Control(PANEL_PASSIVE, FCTL_REDRAWPANEL, 0, 0); -#endif } } @@ -753,13 +625,7 @@ void TmpPanel::ProcessSaveListKey() // default path: opposite panel directory\panel. StrBuf ListPath(NT_MAX_PATH + 20 + 512); -#ifndef UNICODE - PanelInfo PInfo; - Info.Control(this, FCTL_GETANOTHERPANELINFO, &PInfo); - lstrcpy(ListPath, PInfo.CurDir); -#else Info.Control(PANEL_PASSIVE, FCTL_GETPANELDIR, NT_MAX_PATH, (LONG_PTR)ListPath.Ptr()); -#endif FSF.AddEndSlash(ListPath); lstrcat(ListPath, _T("panel")); @@ -778,13 +644,8 @@ void TmpPanel::ProcessSaveListKey() if (Info.InputBox(GetMsg(MTempPanel), GetMsg(MListFilePath), _T("TmpPanel.SaveList"), ListPath, ListPath, ListPath.Size() - 1, NULL, FIB_BUTTONS)) { SaveListFile(ListPath); -#ifndef UNICODE - Info.Control(this, FCTL_UPDATEANOTHERPANEL, NULL); - Info.Control(this, FCTL_REDRAWANOTHERPANEL, NULL); -#else Info.Control(PANEL_PASSIVE, FCTL_UPDATEPANEL, 0, 0); Info.Control(PANEL_PASSIVE, FCTL_REDRAWPANEL, 0, 0); -#endif } #undef _HANDLE #undef _UPDATE @@ -799,14 +660,10 @@ void TmpPanel::SaveListFile(const TCHAR *Path) if (!TmpItemsNumber) return; -#ifdef UNICODE StrBuf FullPath; GetFullPath(Path, FullPath); StrBuf NtPath; FormNtPath(FullPath, NtPath); -#else - const char *NtPath = Path; -#endif HANDLE hFile = CreateFile(NtPath, GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL); if (hFile == INVALID_HANDLE_VALUE) { @@ -816,14 +673,14 @@ void TmpPanel::SaveListFile(const TCHAR *Path) } DWORD BytesWritten; -#ifdef UNICODE + static const unsigned short bom = BOM_UCS2; WriteFile(hFile, &bom, sizeof(bom), &BytesWritten, NULL); -#endif + int i = 0; do { static const TCHAR *CRLF = _T("\r\n"); - const TCHAR *FName = TmpPanelItem[i].FindData.FILE_NAME; + const TCHAR *FName = TmpPanelItem[i].FindData.lpwszFileName; WriteFile(hFile, FName, sizeof(TCHAR) * lstrlen(FName), &BytesWritten, NULL); WriteFile(hFile, CRLF, 2 * sizeof(TCHAR), &BytesWritten, NULL); } while (++i < TmpItemsNumber); @@ -841,13 +698,8 @@ void TmpPanel::SwitchToPanel(int NewPanelIndex) } if (CommonPanels[NewPanelIndex].Items) { CurrentCommonPanel = PanelIndex = NewPanelIndex; -#ifndef UNICODE - Info.Control(this, FCTL_UPDATEPANEL, NULL); - Info.Control(this, FCTL_REDRAWPANEL, NULL); -#else Info.Control(this, FCTL_UPDATEPANEL, 0, 0); Info.Control(this, FCTL_REDRAWPANEL, 0, 0); -#endif } } } @@ -857,19 +709,13 @@ void TmpPanel::ProcessPanelSwitchMenu() FarMenuItem fmi[COMMONPANELSNUMBER]; memset(&fmi, 0, sizeof(FarMenuItem) * COMMONPANELSNUMBER); const TCHAR *txt = GetMsg(MSwitchMenuTxt); -#ifdef UNICODE + wchar_t tmpstr[COMMONPANELSNUMBER][128]; static const TCHAR fmt1[] = _T("&%c. %ls %d"); -#else - static const TCHAR fmt1[] = _T("&%c. %s %d"); -#endif for (unsigned int i = 0; i < COMMONPANELSNUMBER; ++i) { -#ifndef UNICODE -#define _OUT fmi[i].Text -#else + #define _OUT tmpstr[i] fmi[i].Text = tmpstr[i]; -#endif if (i < 10) FSF.snprintf(_OUT, sizeof(_OUT) - 1, fmt1, _T('0') + i, txt, CommonPanels[i].ItemsNumber); else if (i < 36) @@ -924,27 +770,19 @@ bool TmpPanel::GetFileInfoAndValidate(const TCHAR *FilePath, FAR_FIND_DATA *Find TCHAR *FileName = ExpFilePath; ParseParam(FileName); -#ifdef UNICODE StrBuf FullPath; GetFullPath(FileName, FullPath); StrBuf NtPath; FormNtPath(FullPath, NtPath); -#else - char *FullPath = FileName; - const char *NtPath = FileName; -#endif if (!wcscmp(FileName, L"/")) { copy_name_set_attr: FindData->dwFileAttributes = FILE_ATTRIBUTE_ARCHIVE; copy_name: -#ifndef UNICODE - lstrcpyn(FindData->cFileName, FileName, sizeof(FindData->cFileName) - 1); -#else + if (FindData->lpwszFileName) free((void *)FindData->lpwszFileName); FindData->lpwszFileName = wcsdup(FileName); -#endif return (TRUE); } diff --git a/tmppanel/src/TmpMix.cpp b/tmppanel/src/TmpMix.cpp index a184676dc..ad0d43155 100644 --- a/tmppanel/src/TmpMix.cpp +++ b/tmppanel/src/TmpMix.cpp @@ -29,14 +29,8 @@ void InitDialogItems(const MyInitDialogItem *Init, struct FarDialogItem *Item, i PItem->Focus = 0; PItem->History = 0; PItem->DefaultButton = 0; -#ifdef UNICODE PItem->MaxLen = 0; -#endif -#ifndef UNICODE - lstrcpy(PItem->Data, PInit->Data != -1 ? GetMsg(PInit->Data) : ""); -#else PItem->PtrData = PInit->Data != -1 ? GetMsg(PInit->Data) : L""; -#endif } } @@ -46,10 +40,8 @@ void FreePanelItems(PluginPanelItem *Items, DWORD Total) for (DWORD I = 0; I < Total; I++) { if (Items[I].Owner) free((void *)Items[I].Owner); -#ifdef UNICODE if (Items[I].FindData.lpwszFileName) free((void *)Items[I].FindData.lpwszFileName); -#endif } free(Items); } @@ -74,17 +66,10 @@ TCHAR *ParseParam(TCHAR *&str) void GoToFile(const TCHAR *Target, BOOL AnotherPanel) { -#ifndef UNICODE - int FCTL_SetPanelDir = AnotherPanel ? FCTL_SETANOTHERPANELDIR : FCTL_SETPANELDIR; - int FCTL_GetPanelInfo = AnotherPanel ? FCTL_GETANOTHERPANELINFO : FCTL_GETPANELINFO; - int FCTL_RedrawPanel = AnotherPanel ? FCTL_REDRAWANOTHERPANEL : FCTL_REDRAWPANEL; -#define _PANEL_HANDLE INVALID_HANDLE_VALUE -#else #define FCTL_SetPanelDir FCTL_SETPANELDIR #define FCTL_GetPanelInfo FCTL_GETPANELINFO #define FCTL_RedrawPanel FCTL_REDRAWPANEL HANDLE _PANEL_HANDLE = AnotherPanel ? PANEL_PASSIVE : PANEL_ACTIVE; -#endif PanelRedrawInfo PRI; PanelInfo PInfo; @@ -105,54 +90,34 @@ void GoToFile(const TCHAR *Target, BOOL AnotherPanel) FSF.Unquote(Dir); if (*Dir.Ptr()) { -#ifndef UNICODE - Info.Control(_PANEL_HANDLE, FCTL_SetPanelDir, Dir.Ptr()); -#else Info.Control(_PANEL_HANDLE, FCTL_SetPanelDir, 0, (LONG_PTR)Dir.Ptr()); -#endif } -#ifndef UNICODE - Info.Control(_PANEL_HANDLE, FCTL_GetPanelInfo, &PInfo); -#else Info.Control(_PANEL_HANDLE, FCTL_GetPanelInfo, 0, (LONG_PTR)&PInfo); -#endif PRI.CurrentItem = PInfo.CurrentItem; PRI.TopPanelItem = PInfo.TopPanelItem; for (int J = 0; J < PInfo.ItemsNumber; J++) { -#ifndef UNICODE -#define FileName PInfo.PanelItems[J].FindData.cFileName -#else #define FileName (PPI ? PPI->FindData.lpwszFileName : NULL) PluginPanelItem *PPI = (PluginPanelItem *)malloc(Info.Control(_PANEL_HANDLE, FCTL_GETPANELITEM, J, 0)); if (PPI) { Info.Control(_PANEL_HANDLE, FCTL_GETPANELITEM, J, (LONG_PTR)PPI); } -#endif if (!FSF.LStricmp(Name, FSF.PointToName(FileName))) #undef FileName { PRI.CurrentItem = J; PRI.TopPanelItem = J; -#ifdef UNICODE free(PPI); -#endif break; } -#ifdef UNICODE free(PPI); -#endif } -#ifndef UNICODE - Info.Control(_PANEL_HANDLE, FCTL_RedrawPanel, &PRI); -#else Info.Control(_PANEL_HANDLE, FCTL_RedrawPanel, 0, (LONG_PTR)&PRI); -#endif #undef _PANEL_HANDLE #undef FCTL_SetPanelDir #undef FCTL_GetPanelInfo @@ -168,14 +133,9 @@ void WFD2FFD(WIN32_FIND_DATA &wfd, FAR_FIND_DATA &ffd) ffd.ftLastWriteTime = wfd.ftLastWriteTime; ffd.nFileSize = wfd.nFileSize; ffd.nPhysicalSize = wfd.nPhysicalSize; -#ifndef UNICODE - strncpy(ffd.cFileName, wfd.cFileName, ARRAYSIZE(ffd.cFileName)); -#else ffd.lpwszFileName = wcsdup(wfd.cFileName); -#endif } -#ifdef UNICODE wchar_t *FormNtPath(const wchar_t *path, StrBuf &buf) { int l = lstrlen(path); @@ -183,11 +143,10 @@ wchar_t *FormNtPath(const wchar_t *path, StrBuf &buf) lstrcpy(buf, path); return buf; } -#endif TCHAR *ExpandEnvStrs(const TCHAR *input, StrBuf &output) { -#ifdef UNICODE + std::string s; Wide2MB(input, s); Environment::ExpandString(s, false); @@ -196,10 +155,6 @@ TCHAR *ExpandEnvStrs(const TCHAR *input, StrBuf &output) output.Grow(w.size() + 1); lstrcpy(output, w.c_str()); -#else - output.Grow(MAX_PATH); - FSF.ExpandEnvironmentStr(input, output, output.Size()); -#endif return output; } @@ -227,23 +182,14 @@ bool FindListFile(const TCHAR *FileName, StrBuf &output) StrBuf Path; DWORD dwSize; -#ifdef UNICODE StrBuf FullPath; GetFullPath(FileName, FullPath); StrBuf NtPath; FormNtPath(FullPath, NtPath); -#else - const char *FullPath = FileName; - const char *NtPath = FileName; -#endif const TCHAR *final = NULL; if (GetFileAttributes(NtPath) != INVALID_FILE_ATTRIBUTES) { -#ifdef UNICODE output.Grow(FullPath.Size()); -#else - output.Grow(lstrlen(FullPath) + 1); -#endif lstrcpy(output, FullPath); return true; } @@ -290,7 +236,6 @@ bool FindListFile(const TCHAR *FileName, StrBuf &output) return true; } -#ifdef UNICODE wchar_t *GetFullPath(const wchar_t *input, StrBuf &output) { output.Grow(MAX_PATH); @@ -301,4 +246,3 @@ wchar_t *GetFullPath(const wchar_t *input, StrBuf &output) } return output; } -#endif diff --git a/tmppanel/src/TmpPanel.cpp b/tmppanel/src/TmpPanel.cpp index 9d6bb932d..5fbab0390 100644 --- a/tmppanel/src/TmpPanel.cpp +++ b/tmppanel/src/TmpPanel.cpp @@ -35,13 +35,8 @@ BOOL WINAPI DllMainCRTStartup(HANDLE hDll, DWORD dwReason, LPVOID lpReserved) } #endif -#ifndef UNICODE -#define WITH_ANSI_ARG , ANSI -#define WITH_ANSI_PARAM , int ANSI -#else #define WITH_ANSI_ARG #define WITH_ANSI_PARAM -#endif static void ProcessList(HANDLE hPlugin, TCHAR *Name, int Mode WITH_ANSI_PARAM); static void ShowMenuFromList(TCHAR *Name); static HANDLE OpenPanelFromOutput(TCHAR *argv WITH_ANSI_PARAM); @@ -82,21 +77,10 @@ SHAREDSYMBOL HANDLE WINAPI EXP_NAME(OpenPlugin)(int OpenFrom, INT_PTR Item) StartupOpenFrom = OpenFrom; if (OpenFrom == OPEN_COMMANDLINE) { TCHAR *argv = (TCHAR *)Item; -#ifndef UNICODE - int ANSI = FALSE; -#define OPT_COUNT 6 -#else + #define OPT_COUNT 5 -#endif - static const TCHAR ParamsStr[OPT_COUNT][8] = { -#ifndef UNICODE - _T("ansi"), -#endif - _T("safe"), _T("any"), _T("replace"), _T("menu"), _T("full")}; + static const TCHAR ParamsStr[OPT_COUNT][8] = {_T("safe"), _T("any"), _T("replace"), _T("menu"), _T("full")}; const int *ParamsOpt[OPT_COUNT] = { -#ifndef UNICODE - &ANSI, -#endif &Opt.SafeModePanel, &Opt.AnyInPanel, &Opt.Mode, &Opt.MenuForFilelist, &Opt.FullScreenPanel}; while (*argv == _T(' ')) @@ -173,12 +157,7 @@ static HANDLE OpenPanelFromOutput(TCHAR *argv WITH_ANSI_PARAM) StrBuf cmdparams(NT_MAX_PATH); // BUGBUG StrBuf fullcmd; - FSF.MkTemp(tempfilename, -#ifdef UNICODE - tempfilename.Size(), -#endif - _T("FARTMP")); - + FSF.MkTemp(tempfilename, tempfilename.Size(), _T("FARTMP")); lstrcpy(cmdparams, _T("%COMSPEC% /c ")); lstrcat(cmdparams, argv); ExpandEnvStrs(cmdparams, fullcmd); @@ -212,16 +191,11 @@ static HANDLE OpenPanelFromOutput(TCHAR *argv WITH_ANSI_PARAM) workDir.Reset(NT_MAX_PATH); // BUGBUG ExpandEnvStrs(tempDir, workDir); } else { -#ifdef UNICODE DWORD Size = FSF.GetCurrentDirectory(0, NULL); if (Size) { workDir.Reset(Size); FSF.GetCurrentDirectory(Size, workDir); } -#else - workDir.Reset(MAX_PATH); - GetCurrentDirectory(workDir.Size(), workDir); -#endif } TCHAR consoleTitle[255]; @@ -276,7 +250,6 @@ void ReadFileLines(int fd, DWORD FileSizeLow, TCHAR **argv, TCHAR *args, UINT *n StrBuf TMP(NT_MAX_PATH); // BUGBUG DWORD Len, Pos = 0, Size = FileSizeLow; -#ifdef UNICODE bool ucs2 = false; if (Size >= 2) switch (*(LPWORD)FileData) { @@ -292,12 +265,9 @@ void ReadFileLines(int fd, DWORD FileSizeLow, TCHAR **argv, TCHAR *args, UINT *n Pos+= 2; break; } -#endif while (Pos < Size) { -#ifdef UNICODE if (!ucs2) { -#endif char c; while (Pos < Size && ((c = FileData[Pos]) == '\r' || c == '\n')) Pos++; @@ -305,12 +275,8 @@ void ReadFileLines(int fd, DWORD FileSizeLow, TCHAR **argv, TCHAR *args, UINT *n while (Pos < Size && (c = FileData[Pos]) != '\r' && c != '\n') Pos++; Len = Pos - Off; -#ifndef UNICODE - if (Len >= (DWORD)TMP.Size()) - Len = TMP.Size() - 1; - memcpy(TMP.Ptr(), &FileData[Off], Len); -#else // UNICODE - Len = MultiByteToWideChar(CP_OEMCP, MB_PRECOMPOSED | MB_ERR_INVALID_CHARS, &FileData[Off], Len, TMP, + + Len = MultiByteToWideChar(CP_OEMCP, MB_PRECOMPOSED | MB_ERR_INVALID_CHARS, &FileData[Off], Len, TMP, TMP.Size() - 1); } else @@ -329,7 +295,6 @@ void ReadFileLines(int fd, DWORD FileSizeLow, TCHAR **argv, TCHAR *args, UINT *n Len = TMP.Size() - 1; memcpy(TMP.Ptr(), &FileData[Off], Len * sizeof(wchar_t)); } -#endif if (!Len) continue; @@ -338,11 +303,6 @@ void ReadFileLines(int fd, DWORD FileSizeLow, TCHAR **argv, TCHAR *args, UINT *n FSF.Trim(TMP); FSF.Unquote(TMP); -#ifndef UNICODE - if (ANSI) - CharToOem(TMP, TMP); -#endif - Len = lstrlen(TMP); if (!Len) continue; @@ -358,9 +318,8 @@ void ReadFileLines(int fd, DWORD FileSizeLow, TCHAR **argv, TCHAR *args, UINT *n (*numchars)+= Len + 1; ++*numargs; } -#ifdef UNICODE + done: -#endif munmap((LPVOID)FileData, FileSizeLow); } @@ -369,14 +328,10 @@ void ReadFileLines(int fd, DWORD FileSizeLow, TCHAR **argv, TCHAR *args, UINT *n *argc = 0; *argv = NULL; -#ifdef UNICODE StrBuf FullPath; GetFullPath(filename, FullPath); StrBuf NtPath; FormNtPath(FullPath, NtPath); -#else - const char *NtPath = filename; -#endif HANDLE hFile = CreateFile(NtPath, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, 0, NULL); @@ -422,9 +377,7 @@ void ReadFileLines(int fd, DWORD FileSizeLow, TCHAR **argv, TCHAR *args, UINT *n { int argc; TCHAR **argv = 0; -#ifndef UNICODE - static const int ANSI = FALSE; -#endif + ReadFileList(Name, &argc, &argv WITH_ANSI_ARG); FarMenuItem *fmi = (FarMenuItem *)malloc(argc * sizeof(FarMenuItem)); @@ -436,11 +389,7 @@ void ReadFileLines(int fd, DWORD FileSizeLow, TCHAR **argv, TCHAR *args, UINT *n param = ParseParam(p); FSF.TruncStr(param ? param : p, 67); -#ifndef UNICODE - strncpy(fmi[i].Text, param ? param : p, sizeof(fmi[i].Text) - 1); -#else - fmi[i].Text = wcsdup(param ? param : p); -#endif + fmi[i].Text = wcsdup(param ? param : p); fmi[i].Separator = !lstrcmp(param, _T("-")); fmi[i].Selected = FALSE; @@ -450,10 +399,7 @@ void ReadFileLines(int fd, DWORD FileSizeLow, TCHAR **argv, TCHAR *args, UINT *n TCHAR Title[128]; // BUGBUG FSF.ProcessName(FSF.PointToName(Name), lstrcpy(Title, _T("*.")), -#ifdef UNICODE - ARRAYSIZE(Title), -#endif - PN_GENERATENAME); + ARRAYSIZE(Title),PN_GENERATENAME); FSF.TruncPathStr(Title, 64); int BreakCode; @@ -462,11 +408,9 @@ void ReadFileLines(int fd, DWORD FileSizeLow, TCHAR **argv, TCHAR *args, UINT *n int ExitCode = Info.Menu(Info.ModuleNumber, -1, -1, 0, FMENU_WRAPMODE, Title, NULL, _T("Contents"), &BreakKeys[0], &BreakCode, fmi, argc); -#ifdef UNICODE for (int i = 0; i < argc; ++i) if (fmi[i].Text) free((void *)fmi[i].Text); -#endif free(fmi); @@ -481,20 +425,13 @@ void ReadFileLines(int fd, DWORD FileSizeLow, TCHAR **argv, TCHAR *args, UINT *n if (!bShellExecute) { if (TmpPanel::GetFileInfoAndValidate(p, &FindData, FALSE)) { if (FindData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) { -#ifndef UNICODE - Info.Control(INVALID_HANDLE_VALUE, FCTL_SETPANELDIR, p); -#else Info.Control(INVALID_HANDLE_VALUE, FCTL_SETPANELDIR, 0, (LONG_PTR)p); -#endif } else { bShellExecute = TRUE; } } else { -#ifndef UNICODE - Info.Control(INVALID_HANDLE_VALUE, FCTL_SETCMDLINE, p); -#else + Info.Control(PANEL_ACTIVE, FCTL_SETCMDLINE, 0, (LONG_PTR)p); -#endif } } @@ -507,13 +444,8 @@ void ReadFileLines(int fd, DWORD FileSizeLow, TCHAR **argv, TCHAR *args, UINT *n free(argv); } -#ifndef UNICODE -#define _CONST -#define _OPARG -#else #define _CONST const #define _OPARG , int -#endif SHAREDSYMBOL HANDLE WINAPI EXP_NAME(OpenFilePlugin)(_CONST TCHAR * Name, const unsigned char *, int DataSize, int OpMode) #undef _OPARG @@ -521,14 +453,10 @@ void ReadFileLines(int fd, DWORD FileSizeLow, TCHAR **argv, TCHAR *args, UINT *n { if (!Name) return INVALID_HANDLE_VALUE; -#ifndef UNICODE -#define PNAME_ARG Name -#define pName Name -#else + StrBuf pName(NT_MAX_PATH); // BUGBUG lstrcpy(pName, Name); #define PNAME_ARG pName, pName.Size() -#endif if (!DataSize || !FSF.ProcessName(Opt.Mask, PNAME_ARG, PN_CMPNAMELIST)) return INVALID_HANDLE_VALUE; @@ -538,9 +466,7 @@ void ReadFileLines(int fd, DWORD FileSizeLow, TCHAR **argv, TCHAR *args, UINT *n HANDLE hPlugin = new TmpPanel(); if (hPlugin == NULL) return INVALID_HANDLE_VALUE; -#ifndef UNICODE - static const int ANSI = FALSE; -#endif + ProcessList(hPlugin, pName, Opt.Mode WITH_ANSI_ARG); return hPlugin; } else { @@ -577,11 +503,7 @@ void ReadFileLines(int fd, DWORD FileSizeLow, TCHAR **argv, TCHAR *args, UINT *n static const TCHAR *DiskMenuStrings[1]; DiskMenuStrings[0] = GetMsg(MDiskMenuString); Info->DiskMenuStrings = DiskMenuStrings; -#ifndef UNICODE - static int DiskMenuNumbers[1]; - DiskMenuNumbers[0] = FSF.atoi(Opt.DisksMenuDigit); - Info->DiskMenuNumbers = DiskMenuNumbers; -#endif + Info->DiskMenuStringsNumber = Opt.AddToDisksMenu ? ARRAYSIZE(DiskMenuStrings) : 0; static const TCHAR *PluginMenuStrings[1]; PluginMenuStrings[0] = GetMsg(MTempPanel); @@ -608,15 +530,9 @@ void ReadFileLines(int fd, DWORD FileSizeLow, TCHAR **argv, TCHAR *args, UINT *n SHAREDSYMBOL int WINAPI EXP_NAME(PutFiles)(HANDLE hPlugin, struct PluginPanelItem * PanelItem, int ItemsNumber, int Move, -#ifdef UNICODE - const wchar_t *SrcPath, -#endif - int OpMode) + const wchar_t *SrcPath, int OpMode) { -#ifndef UNICODE - StrBuf SrcPath(MAX_PATH); - GetCurrentDirectory(SrcPath.Size(), SrcPath); -#endif + TmpPanel *Panel = (TmpPanel *)hPlugin; return Panel->PutFiles(PanelItem, ItemsNumber, Move, SrcPath, OpMode); } diff --git a/tmppanel/src/TmpPanel.hpp b/tmppanel/src/TmpPanel.hpp index 15a95cae2..01116e978 100644 --- a/tmppanel/src/TmpPanel.hpp +++ b/tmppanel/src/TmpPanel.hpp @@ -53,12 +53,10 @@ TCHAR *ParseParam(TCHAR *&str); void GetOptions(void); void WFD2FFD(WIN32_FIND_DATA &wfd, FAR_FIND_DATA &ffd); -#ifdef UNICODE + #define BOM_UCS2 0xFEFF #define BOM_UCS2_BE 0xFFFE #define BOM_UTF8 0xBFBBEF -#endif - #define NT_MAX_PATH 32768 class StrBuf @@ -123,11 +121,11 @@ class PtrGuard ~PtrGuard() { free(ptr); } }; -#ifdef UNICODE + wchar_t *FormNtPath(const wchar_t *path, StrBuf &buf); wchar_t *GetFullPath(const wchar_t *input, StrBuf &output); -#endif TCHAR *ExpandEnvStrs(const TCHAR *input, StrBuf &output); bool FindListFile(const TCHAR *FileName, StrBuf &output); const wchar_t *GetTmpPanelModule(); + #endif /* __TMPPANEL_HPP__ */ From 285ed92badd0b32ca8a81551e3a36563b4d17c49 Mon Sep 17 00:00:00 2001 From: Aleksey Dobrunov Date: Mon, 4 Nov 2024 00:20:07 +0500 Subject: [PATCH 2/2] fix #2462: saving file list from tmppanel is broken use UTF8 with BOM for list of files --- tmppanel/src/TmpClass.cpp | 19 +++++--- tmppanel/src/TmpMix.cpp | 6 +++ tmppanel/src/TmpPanel.cpp | 92 ++++++++++++++------------------------- tmppanel/src/TmpPanel.hpp | 2 +- 4 files changed, 53 insertions(+), 66 deletions(-) diff --git a/tmppanel/src/TmpClass.cpp b/tmppanel/src/TmpClass.cpp index 219d3004a..5ab379928 100644 --- a/tmppanel/src/TmpClass.cpp +++ b/tmppanel/src/TmpClass.cpp @@ -674,15 +674,22 @@ void TmpPanel::SaveListFile(const TCHAR *Path) DWORD BytesWritten; - static const unsigned short bom = BOM_UCS2; - WriteFile(hFile, &bom, sizeof(bom), &BytesWritten, NULL); + static const char bom_utf8[] = {'\xEF', '\xBB', '\xBF'}; + WriteFile(hFile, &bom_utf8, sizeof(bom_utf8), &BytesWritten, NULL); int i = 0; do { - static const TCHAR *CRLF = _T("\r\n"); - const TCHAR *FName = TmpPanelItem[i].FindData.lpwszFileName; - WriteFile(hFile, FName, sizeof(TCHAR) * lstrlen(FName), &BytesWritten, NULL); - WriteFile(hFile, CRLF, 2 * sizeof(TCHAR), &BytesWritten, NULL); + static const char *LF = "\n"; + const wchar_t *FName = TmpPanelItem[i].FindData.lpwszFileName; + + size_t Size = 4 * wcslen(FName) + 1; + LPSTR FNameA = new char[Size]; + PWZ_to_PZ(FName, FNameA, Size); + + WriteFile(hFile, FNameA, sizeof(char) * strlen(FNameA), &BytesWritten, NULL); + WriteFile(hFile, LF, sizeof(char) * strlen(LF), &BytesWritten, NULL); + + delete[] FNameA; } while (++i < TmpItemsNumber); CloseHandle(hFile); } diff --git a/tmppanel/src/TmpMix.cpp b/tmppanel/src/TmpMix.cpp index ad0d43155..d18a1252c 100644 --- a/tmppanel/src/TmpMix.cpp +++ b/tmppanel/src/TmpMix.cpp @@ -246,3 +246,9 @@ wchar_t *GetFullPath(const wchar_t *input, StrBuf &output) } return output; } + +int PWZ_to_PZ(const wchar_t *src, char *dst, int lendst) +{ + ErrnoSaver ErSr; + return WINPORT(WideCharToMultiByte)(CP_UTF8, 0, (src), -1, (dst), (int)(lendst), nullptr, nullptr); +} \ No newline at end of file diff --git a/tmppanel/src/TmpPanel.cpp b/tmppanel/src/TmpPanel.cpp index 5fbab0390..72dad44ad 100644 --- a/tmppanel/src/TmpPanel.cpp +++ b/tmppanel/src/TmpPanel.cpp @@ -250,79 +250,53 @@ void ReadFileLines(int fd, DWORD FileSizeLow, TCHAR **argv, TCHAR *args, UINT *n StrBuf TMP(NT_MAX_PATH); // BUGBUG DWORD Len, Pos = 0, Size = FileSizeLow; - bool ucs2 = false; - if (Size >= 2) - switch (*(LPWORD)FileData) { - case (BOM_UTF8 & 0xFFFF): - if (Size >= 3 && ((LPBYTE)FileData)[2] == (BYTE)(BOM_UTF8 >> 16)) { - case BOM_UCS2_BE: - goto done; - } - default: - break; - case BOM_UCS2: - ucs2 = true; - Pos+= 2; - break; + if (Size >= 3) { + if ( ((LPBYTE)FileData)[0]==0xEF && ((LPBYTE)FileData)[1]==0xBB && ((LPBYTE)FileData)[2]==0xBF + //*(LPWORD)FileData == BOM_UTF8 & 0xFFFF && ((LPBYTE)FileData)[2] == (BYTE)(BOM_UTF8 >> 16) + ){ + Pos+= 3; } + } while (Pos < Size) { - if (!ucs2) { - char c; - while (Pos < Size && ((c = FileData[Pos]) == '\r' || c == '\n')) - Pos++; - DWORD Off = Pos; - while (Pos < Size && (c = FileData[Pos]) != '\r' && c != '\n') - Pos++; - Len = Pos - Off; - - Len = MultiByteToWideChar(CP_OEMCP, MB_PRECOMPOSED | MB_ERR_INVALID_CHARS, &FileData[Off], Len, TMP, - TMP.Size() - 1); - } - else - { - wchar_t c; - --Size; - while (Pos < Size && ((c = *(wchar_t *)&FileData[Pos]) == L'\r' || c == L'\n')) - Pos+= sizeof(wchar_t); + + char c; + while (Pos < Size && ((c = FileData[Pos]) == '\r' || c == '\n')) + Pos++; DWORD Off = Pos; - while (Pos < Size && (c = *(wchar_t *)&FileData[Pos]) != L'\r' && c != L'\n') - Pos+= sizeof(wchar_t); - if (Pos < Size) - ++Size; - Len = (Pos - Off) / sizeof(wchar_t); - if (Len >= (DWORD)TMP.Size()) - Len = TMP.Size() - 1; - memcpy(TMP.Ptr(), &FileData[Off], Len * sizeof(wchar_t)); - } - if (!Len) - continue; + while (Pos < Size && (c = FileData[Pos]) != '\r' && c != '\n') + Pos++; + Len = Pos - Off; - TMP.Ptr()[Len] = 0; + Len = MultiByteToWideChar(CP_UTF8, MB_PRECOMPOSED | MB_ERR_INVALID_CHARS, &FileData[Off], Len, TMP, + TMP.Size() - 1); - FSF.Trim(TMP); - FSF.Unquote(TMP); + if (!Len) + continue; - Len = lstrlen(TMP); - if (!Len) - continue; + TMP.Ptr()[Len] = 0; - if (argv) - *argv++ = args; + FSF.Trim(TMP); + FSF.Unquote(TMP); - if (args) { - lstrcpy(args, TMP); - args+= Len + 1; - } + Len = lstrlen(TMP); + if (!Len) + continue; + + if (argv) + *argv++ = args; - (*numchars)+= Len + 1; - ++*numargs; + if (args) { + lstrcpy(args, TMP); + args+= Len + 1; } - done: - munmap((LPVOID)FileData, FileSizeLow); + (*numchars)+= Len + 1; + ++*numargs; } +} + static void ReadFileList(TCHAR * filename, int *argc, TCHAR ***argv WITH_ANSI_PARAM) { *argc = 0; diff --git a/tmppanel/src/TmpPanel.hpp b/tmppanel/src/TmpPanel.hpp index 01116e978..81f6bf7e0 100644 --- a/tmppanel/src/TmpPanel.hpp +++ b/tmppanel/src/TmpPanel.hpp @@ -52,7 +52,7 @@ void FreePanelItems(PluginPanelItem *Items, DWORD Total); TCHAR *ParseParam(TCHAR *&str); void GetOptions(void); void WFD2FFD(WIN32_FIND_DATA &wfd, FAR_FIND_DATA &ffd); - +int PWZ_to_PZ(const wchar_t *src, char *dst, int lendst); #define BOM_UCS2 0xFEFF #define BOM_UCS2_BE 0xFFFE