diff --git a/PowerEditor/src/Notepad_plus.h b/PowerEditor/src/Notepad_plus.h index 8905a8e8..b20a30a0 100644 --- a/PowerEditor/src/Notepad_plus.h +++ b/PowerEditor/src/Notepad_plus.h @@ -223,7 +223,7 @@ public: //! \name File Operations //@{ //The doXXX functions apply to a single buffer and dont need to worry about views, with the excpetion of doClose, since closing one view doesnt have to mean the document is gone - BufferID doOpen(const TCHAR *fileName, bool isRecursive = false, bool isReadOnly = false, int encoding = -1, const TCHAR *backupFileName = NULL, time_t fileNameTimestamp = 0); + BufferID doOpen(const generic_string& fileName, bool isRecursive = false, bool isReadOnly = false, int encoding = -1, const TCHAR *backupFileName = NULL, time_t fileNameTimestamp = 0); bool doReload(BufferID id, bool alert = true); bool doSave(BufferID, const TCHAR * filename, bool isSaveCopy = false); void doClose(BufferID, int whichOne, bool doDeleteBackup = false); diff --git a/PowerEditor/src/NppCommands.cpp b/PowerEditor/src/NppCommands.cpp index af04ab02..2f93f8b6 100644 --- a/PowerEditor/src/NppCommands.cpp +++ b/PowerEditor/src/NppCommands.cpp @@ -2154,7 +2154,7 @@ void Notepad_plus::command(int id) MB_OK|MB_APPLMODAL); } NppParameters *pNppParams = NppParameters::getInstance(); - BufferID bufID = doOpen((pNppParams->getContextMenuPath()).c_str()); + BufferID bufID = doOpen((pNppParams->getContextMenuPath())); switchToFile(bufID); break; } @@ -2472,7 +2472,7 @@ void Notepad_plus::command(int id) int size = _lastRecentFileList.getSize(); for (int i = size - 1; i >= 0; i--) { - BufferID test = doOpen(_lastRecentFileList.getIndex(i).c_str()); + BufferID test = doOpen(_lastRecentFileList.getIndex(i)); if (test != BUFFER_INVALID) lastOne = test; } @@ -2570,13 +2570,11 @@ void Notepad_plus::command(int id) case IDM_FILE_RESTORELASTCLOSEDFILE: { generic_string lastOpenedFullPath = _lastRecentFileList.getFirstItem(); - if (lastOpenedFullPath != TEXT("")) + if (not lastOpenedFullPath.empty()) { - BufferID lastOpened = doOpen(lastOpenedFullPath.c_str()); + BufferID lastOpened = doOpen(lastOpenedFullPath); if (lastOpened != BUFFER_INVALID) - { switchToFile(lastOpened); - } } } break; @@ -2667,7 +2665,7 @@ void Notepad_plus::command(int id) default : if (id > IDM_FILEMENU_LASTONE && id < (IDM_FILEMENU_LASTONE + _lastRecentFileList.getMaxNbLRF() + 1)) { - BufferID lastOpened = doOpen(_lastRecentFileList.getItem(id).c_str()); + BufferID lastOpened = doOpen(_lastRecentFileList.getItem(id)); if (lastOpened != BUFFER_INVALID) { switchToFile(lastOpened); diff --git a/PowerEditor/src/NppIO.cpp b/PowerEditor/src/NppIO.cpp index 86e68277..c19410d4 100644 --- a/PowerEditor/src/NppIO.cpp +++ b/PowerEditor/src/NppIO.cpp @@ -37,10 +37,11 @@ using namespace std; -BufferID Notepad_plus::doOpen(const TCHAR *fileName, bool isRecursive, bool isReadOnly, int encoding, const TCHAR *backupFileName, time_t fileNameTimestamp) +BufferID Notepad_plus::doOpen(const generic_string& fileName, bool isRecursive, bool isReadOnly, int encoding, const TCHAR *backupFileName, time_t fileNameTimestamp) { - - const rsize_t longFileNameBufferSize = MAX_PATH; + const rsize_t longFileNameBufferSize = MAX_PATH; // TODO stop using fixed-size buffer + if (fileName.size() >= longFileNameBufferSize - 1) // issue with all other sub-routines + return BUFFER_INVALID; //If [GetFullPathName] succeeds, the return value is the length, in TCHARs, of the string copied to lpBuffer, not including the terminating null character. //If the lpBuffer buffer is too small to contain the path, the return value [of GetFullPathName] is the size, in TCHARs, of the buffer that is required to hold the path and the terminating null character. @@ -49,7 +50,7 @@ BufferID Notepad_plus::doOpen(const TCHAR *fileName, bool isRecursive, bool isRe NppParameters *pNppParam = NppParameters::getInstance(); TCHAR longFileName[longFileNameBufferSize]; - const DWORD getFullPathNameResult = ::GetFullPathName(fileName, longFileNameBufferSize, longFileName, NULL); + const DWORD getFullPathNameResult = ::GetFullPathName(fileName.c_str(), longFileNameBufferSize, longFileName, NULL); if ( getFullPathNameResult == 0 ) { return BUFFER_INVALID; @@ -66,14 +67,14 @@ BufferID Notepad_plus::doOpen(const TCHAR *fileName, bool isRecursive, bool isRe bool isSnapshotMode = backupFileName != NULL && PathFileExists(backupFileName); if (isSnapshotMode && !PathFileExists(longFileName)) // UNTITLED { - lstrcpy(longFileName, fileName); + lstrcpy(longFileName, fileName.c_str()); } _lastRecentFileList.remove(longFileName); - const TCHAR * fileName2Find; - generic_string gs_fileName = fileName; + generic_string fileName2Find; + generic_string gs_fileName{fileName}; size_t res = gs_fileName.find_first_of(UNTITLED_STR); if (res != string::npos && res == 0) @@ -85,7 +86,7 @@ BufferID Notepad_plus::doOpen(const TCHAR *fileName, bool isRecursive, bool isRe fileName2Find = longFileName; } - BufferID test = MainFileManager->getBufferFromName(fileName2Find); + BufferID test = MainFileManager->getBufferFromName(fileName2Find.c_str()); if (test != BUFFER_INVALID && !isSnapshotMode) { //switchToFile(test); @@ -248,14 +249,14 @@ BufferID Notepad_plus::doOpen(const TCHAR *fileName, bool isRecursive, bool isRe } else { - if (globbing || ::PathIsDirectory(fileName)) + if (globbing || ::PathIsDirectory(fileName.c_str())) { vector fileNames; vector patterns; if (globbing) { - const TCHAR * substring = wcsrchr(fileName, TCHAR('\\')); - size_t pos = substring - fileName; + const TCHAR * substring = wcsrchr(fileName.c_str(), TCHAR('\\')); + size_t pos = substring - fileName.c_str(); patterns.push_back(substring + 1); generic_string dir(fileName, pos + 1); @@ -264,7 +265,7 @@ BufferID Notepad_plus::doOpen(const TCHAR *fileName, bool isRecursive, bool isRe else { generic_string fileNameStr = fileName; - if (fileName[lstrlen(fileName) - 1] != '\\') + if (fileName[fileName.size() - 1] != '\\') fileNameStr += TEXT("\\"); patterns.push_back(TEXT("*")); @@ -277,19 +278,17 @@ BufferID Notepad_plus::doOpen(const TCHAR *fileName, bool isRecursive, bool isRe if (nbFiles2Open > 200) { ok2Open = IDYES == _nativeLangSpeaker.messageBox("NbFileToOpenImportantWarning", - _pPublicInterface->getHSelf(), - TEXT("$INT_REPLACE$ files are about to be opened.\rAre you sure to open them?"), - TEXT("Amount of files to open is too large"), - MB_YESNO|MB_APPLMODAL, - nbFiles2Open); + _pPublicInterface->getHSelf(), + TEXT("$INT_REPLACE$ files are about to be opened.\rAre you sure to open them?"), + TEXT("Amount of files to open is too large"), + MB_YESNO|MB_APPLMODAL, + nbFiles2Open); } if (ok2Open) { for (size_t i = 0 ; i < nbFiles2Open ; ++i) - { - doOpen(fileNames[i].c_str()); - } + doOpen(fileNames[i]); } } else @@ -313,6 +312,7 @@ BufferID Notepad_plus::doOpen(const TCHAR *fileName, bool isRecursive, bool isRe return buffer; } + bool Notepad_plus::doReload(BufferID id, bool alert) { if (alert)