Bug 478732 nsLocalFileWin/OS2.cpp's InitWithPath is inefficient r=bsmedberg

This commit is contained in:
Neil Rashbrook 2009-03-04 09:48:48 +00:00
Родитель ff48472fea
Коммит 13d0229afc
2 изменённых файлов: 20 добавлений и 51 удалений

Просмотреть файл

@ -705,30 +705,18 @@ nsLocalFile::InitWithNativePath(const nsACString &filePath)
// just do a sanity check. if it has any forward slashes, it is not
// a Native path. Also, it must have a colon at after the first char.
char *path = nsnull;
PRInt32 pathLen = 0;
if ( ( (secondChar == ':') && !FindCharInReadable('/', begin, end) ) || // normal path
( (firstChar == '\\') && (secondChar == '\\') ) ) // network path
{
// This is a native path
path = ToNewCString(filePath);
pathLen = filePath.Length();
}
if (path == nsnull)
if (FindCharInReadable('/', begin, end))
return NS_ERROR_FILE_UNRECOGNIZED_PATH;
// kill any trailing '\' provided it isn't the second char of DBCS
PRInt32 len = pathLen - 1;
if (path[len] == '\\' && !::isleadbyte(path[len-1]))
{
path[len] = '\0';
pathLen = len;
}
if (secondChar != ':' && (secondChar != '\\' || firstChar != '\\'))
return NS_ERROR_FILE_UNRECOGNIZED_PATH;
mWorkingPath = filePath;
// kill any trailing '\' provided it isn't the second char of DBCS
PRInt32 len = mWorkingPath.Length() - 1;
if (mWorkingPath[len] == '\\' && !::isleadbyte(mWorkingPath[len - 1]))
mWorkingPath.Truncate(len);
mWorkingPath.Adopt(path, pathLen);
return NS_OK;
}

Просмотреть файл

@ -900,40 +900,21 @@ nsLocalFile::InitWithPath(const nsAString &filePath)
// just do a sanity check. if it has any forward slashes, it is not a Native path
// on windows. Also, it must have a colon at after the first char.
PRUnichar *path = nsnull;
PRInt32 pathLen = 0;
if ((
!FindCharInReadable(L'/', begin, end) ) //normal path
#ifndef WINCE
&& (secondChar == L':') || // additional normal path condition
(secondChar == L'\\') && // addtional network path condition
#else
||
#endif
(firstChar == L'\\') // wince absolute path or network path
)
{
// This is a native path
path = ToNewUnicode(filePath);
pathLen = filePath.Length();
}
if (path == nsnull) {
if (FindCharInReadable(L'/', begin, end))
return NS_ERROR_FILE_UNRECOGNIZED_PATH;
}
#ifdef WINCE
if (firstChar != L'\\')
#else
if (secondChar != L':' && (secondChar != L'\\' || firstChar != L'\\'))
#endif
return NS_ERROR_FILE_UNRECOGNIZED_PATH;
mWorkingPath = filePath;
// kill any trailing '\'
PRInt32 len = pathLen - 1;
if (path[len] == L'\\')
{
path[len] = L'\0';
pathLen = len;
}
if (mWorkingPath.Last() == L'\\')
mWorkingPath.Truncate(mWorkingPath.Length() - 1);
mWorkingPath.Adopt(path, pathLen);
return NS_OK;
}