Avoid GetLongPathName() call for files with long name

Fixes #1148; Closes #1150
This commit is contained in:
Maks Naumov 2015-11-15 20:12:39 +02:00 committed by Don Ho
parent 51cc22fb3d
commit 86ab42031f
2 changed files with 28 additions and 12 deletions

View File

@ -159,22 +159,25 @@ BufferID Notepad_plus::doOpen(const generic_string& fileName, bool isRecursive,
//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.
//If [GetFullPathName] fails for any other reason, the return value is zero.
NppParameters *pNppParam = NppParameters::getInstance();
TCHAR longFileName[longFileNameBufferSize];
NppParameters *pNppParam = NppParameters::getInstance();
TCHAR longFileName[longFileNameBufferSize];
const DWORD getFullPathNameResult = ::GetFullPathName(fileName.c_str(), longFileNameBufferSize, longFileName, NULL);
if ( getFullPathNameResult == 0 )
const DWORD getFullPathNameResult = ::GetFullPathName(fileName.c_str(), longFileNameBufferSize, longFileName, NULL);
if (getFullPathNameResult == 0)
{
return BUFFER_INVALID;
}
if ( getFullPathNameResult > longFileNameBufferSize )
if (getFullPathNameResult > longFileNameBufferSize)
{
return BUFFER_INVALID;
}
assert( _tcslen( longFileName ) == getFullPathNameResult );
assert(_tcslen(longFileName) == getFullPathNameResult);
// ignore the returned value of function due to win64 redirection system
::GetLongPathName(longFileName, longFileName, longFileNameBufferSize);
if (_tcschr(longFileName, '~'))
{
// ignore the returned value of function due to win64 redirection system
::GetLongPathName(longFileName, longFileName, longFileNameBufferSize);
}
bool isSnapshotMode = backupFileName != NULL && PathFileExists(backupFileName);
if (isSnapshotMode && !PathFileExists(longFileName)) // UNTITLED

View File

@ -581,7 +581,10 @@ BufferID FileManager::loadFile(const TCHAR * filename, Document doc, int encodin
TCHAR fullpath[MAX_PATH];
::GetFullPathName(filename, MAX_PATH, fullpath, NULL);
::GetLongPathName(fullpath, fullpath, MAX_PATH);
if (_tcschr(fullpath, '~'))
{
::GetLongPathName(fullpath, fullpath, MAX_PATH);
}
bool isSnapshotMode = backupFileName != NULL && PathFileExists(backupFileName);
if (isSnapshotMode && !PathFileExists(fullpath)) // if backup mode and fullpath doesn't exist, we guess is UNTITLED
@ -850,7 +853,10 @@ bool FileManager::backupCurrentBuffer()
TCHAR fullpath[MAX_PATH];
::GetFullPathName(backupFilePath.c_str(), MAX_PATH, fullpath, NULL);
::GetLongPathName(fullpath, fullpath, MAX_PATH);
if (_tcschr(fullpath, '~'))
{
::GetLongPathName(fullpath, fullpath, MAX_PATH);
}
// Make sure the backup file is not read only
DWORD dwFileAttribs = ::GetFileAttributes(fullpath);
@ -1024,7 +1030,11 @@ bool FileManager::saveBuffer(BufferID id, const TCHAR * filename, bool isCopy, g
TCHAR fullpath[MAX_PATH];
::GetFullPathName(filename, MAX_PATH, fullpath, NULL);
::GetLongPathName(fullpath, fullpath, MAX_PATH);
if (_tcschr(fullpath, '~'))
{
::GetLongPathName(fullpath, fullpath, MAX_PATH);
}
if (PathFileExists(fullpath))
{
attrib = ::GetFileAttributes(fullpath);
@ -1501,7 +1511,10 @@ BufferID FileManager::getBufferFromName(const TCHAR* name)
{
TCHAR fullpath[MAX_PATH];
::GetFullPathName(name, MAX_PATH, fullpath, NULL);
::GetLongPathName(fullpath, fullpath, MAX_PATH);
if (_tcschr(fullpath, '~'))
{
::GetLongPathName(fullpath, fullpath, MAX_PATH);
}
for(size_t i = 0; i < _buffers.size(); i++)
{