From 150632d9465faeb51fc3179f85ebd2742c845ef8 Mon Sep 17 00:00:00 2001 From: Takashi Sawanaka Date: Mon, 2 May 2016 11:06:16 +0900 Subject: [PATCH] Fix for the warning C6262: Function uses ... bytes of stack: exceeds /analyze:stacksize:'16384' --- Src/Common/ExConverter.cpp | 18 ++++++++++-------- Src/Common/ExConverter.h | 7 ++++--- Src/LoadSaveCodepageDlg.cpp | 7 +++---- Src/OptionsFont.cpp | 2 +- Src/PropCodepage.cpp | 7 +++---- 5 files changed, 21 insertions(+), 20 deletions(-) diff --git a/Src/Common/ExConverter.cpp b/Src/Common/ExConverter.cpp index 7314e854d..6a20e7c6c 100644 --- a/Src/Common/ExConverter.cpp +++ b/Src/Common/ExConverter.cpp @@ -220,24 +220,26 @@ public: return codepage; } - int enumCodePages(CodePageInfo *cpinfo, int count) + std::vector enumCodePages() { + std::vector cpinfo; IEnumCodePage *pEnumCodePage = NULL; ULONG ccpInfo; HRESULT hr = m_pmlang->EnumCodePages(MIMECONTF_SAVABLE_BROWSER | MIMECONTF_VALID | MIMECONTF_VALID_NLS, 0, &pEnumCodePage); if (FAILED(hr)) - return 0; - std::unique_ptr pcpInfo(new MIMECPINFO[count]); - if (FAILED(pEnumCodePage->Next(count, pcpInfo.get(), &ccpInfo))) - return 0; + return cpinfo; + std::unique_ptr pcpInfo(new MIMECPINFO[256]); + if (FAILED(pEnumCodePage->Next(256, pcpInfo.get(), &ccpInfo))) + return cpinfo; + cpinfo.resize(ccpInfo); for (int i = 0; i < (int)ccpInfo; i++) { cpinfo[i].codepage = pcpInfo[i].uiCodePage; - lstrcpyW(cpinfo[i].desc, pcpInfo[i].wszDescription); + cpinfo[i].desc = ucr::toTString(pcpInfo[i].wszDescription); } - return ccpInfo; + return cpinfo; } bool getCodepageFromCharsetName(const String& sCharsetName, int& codepage) @@ -275,7 +277,7 @@ public: HRESULT hr = m_pmlang->GetCodePageInfo(codepage, GetSystemDefaultLangID(), &mcpi); if (FAILED(hr)) return false; - wcscpy(pCodePageInfo->fixedWidthFont, mcpi.wszFixedWidthFont); + pCodePageInfo->fixedWidthFont = ucr::toTString(mcpi.wszFixedWidthFont); pCodePageInfo->bGDICharset = mcpi.bGDICharset; return true; } diff --git a/Src/Common/ExConverter.h b/Src/Common/ExConverter.h index 78f27db5f..b247cdd25 100644 --- a/Src/Common/ExConverter.h +++ b/Src/Common/ExConverter.h @@ -1,12 +1,13 @@ #pragma once #include "UnicodeString.h" +#include struct CodePageInfo { int codepage; - wchar_t desc[256]; - wchar_t fixedWidthFont[256]; + String desc; + String fixedWidthFont; char bGDICharset; }; @@ -18,7 +19,7 @@ struct IExconverter virtual bool convertToUnicode(int srcCodepage, const char * src, size_t * srcbytes, wchar_t * dest, size_t *destchars) = 0; virtual void clearCookie() = 0; virtual int detectInputCodepage(int autodetectType, int defcodepage, const char *data, size_t size) = 0; - virtual int enumCodePages(CodePageInfo *cpinfo, int count) = 0; + virtual std::vector enumCodePages() = 0; virtual bool getCodepageFromCharsetName(const String& sCharsetName, int& codepage) = 0; virtual bool getCodepageDescription(int codepage, String& sCharsetName) = 0; virtual bool isValidCodepage(int codepage) = 0; diff --git a/Src/LoadSaveCodepageDlg.cpp b/Src/LoadSaveCodepageDlg.cpp index 8f5431569..a16dba26b 100644 --- a/Src/LoadSaveCodepageDlg.cpp +++ b/Src/LoadSaveCodepageDlg.cpp @@ -86,12 +86,11 @@ BOOL CLoadSaveCodepageDlg::OnInitDialog() CComboBox combol, combos; combol.Attach(::GetDlgItem(m_hWnd, IDC_LOAD_CODEPAGE_TEXTBOX)); combos.Attach(::GetDlgItem(m_hWnd, IDC_SAVE_CODEPAGE_TEXTBOX)); - CodePageInfo cpi[256]; - int count = pexconv->enumCodePages(cpi, sizeof(cpi)/sizeof(CodePageInfo)); + std::vector cpi = pexconv->enumCodePages(); int i, j; - for (i = 0, j = 0; i < count; i++) + for (i = 0, j = 0; i < cpi.size(); i++) { - String desc = string_format(_T("%05d - %ls"), cpi[i].codepage, cpi[i].desc); + String desc = string_format(_T("%05d - %s"), cpi[i].codepage, cpi[i].desc.c_str()); combol.AddString(desc.c_str()); combos.AddString(desc.c_str()); if (cpi[i].codepage == m_nLoadCodepage) diff --git a/Src/OptionsFont.cpp b/Src/OptionsFont.cpp index 3d6deec8e..31398181d 100644 --- a/Src/OptionsFont.cpp +++ b/Src/OptionsFont.cpp @@ -21,7 +21,7 @@ void SetDefaults(COptionsMgr *pOptionsMgr) CodePageInfo cpi = {0}; cpi.bGDICharset = ANSI_CHARSET; - wcscpy(cpi.fixedWidthFont, L"Courier New"); + cpi.fixedWidthFont = _T("Courier New"); IExconverter *pexconv = Exconverter::getInstance(); if (pexconv) diff --git a/Src/PropCodepage.cpp b/Src/PropCodepage.cpp index 7b6d9e8b3..f47db7dc9 100644 --- a/Src/PropCodepage.cpp +++ b/Src/PropCodepage.cpp @@ -112,14 +112,13 @@ BOOL PropCodepage::OnInitDialog() IExconverter *pexconv = Exconverter::getInstance(); if (pexconv != NULL) { - CodePageInfo cpi[256]; - int count = pexconv->enumCodePages(cpi, sizeof(cpi)/sizeof(CodePageInfo)); + std::vector cpi = pexconv->enumCodePages(); int i, j; - for (i = 0, j = 0; i < count; i++) + for (i = 0, j = 0; i < cpi.size(); i++) { if (cpi[i].codepage == 1200 /* UNICODE */) continue; - String desc = string_format(_T("%05d - %ls"), cpi[i].codepage, cpi[i].desc); + String desc = string_format(_T("%05d - %s"), cpi[i].codepage, cpi[i].desc.c_str()); m_comboCustomCodepageValue.AddString(desc.c_str()); if (cpi[i].codepage == m_nCustomCodepageValue) m_comboCustomCodepageValue.SetCurSel(j); -- 2.11.0