fdo#53252: _toupper is unreliable

<http://msdn.microsoft.com/en-us/library/45119yx3%28v=vs.80%29.aspx> "toupper,
_toupper, towupper, _toupper_l, _towupper_l: Visual Studio 2005" states: "In
order for toupper to give the expected results, __isascii and isupper must both
return nonzero."  But a community comment clarifies: "This is incorrect, and
should refer to '_toupper' (the macro form), not 'toupper'."  (Which makes
sense, as otherwise toupper would violate the C Standard.)

And indeed, at least for some LO built against MSVC 2008 Express on Windows 7,
_toupper('C') = '#' is broken, while toupper('C') = 'C' is good.  (And the
unexpected '#' then causes all sorts of errors in the code.)

Change-Id: Iddaddcaf0cc3ffb30e55b0f410a6cfe9118accc8
This commit is contained in:
Stephan Bergmann
2012-08-20 15:18:35 +02:00
parent 74ae4c4462
commit e642eec333

View File

@@ -1117,7 +1117,7 @@ oslFileError SAL_CALL osl_getDirectoryItem(rtl_uString *strFilePath, oslDirector
osl_acquireDirectoryItem( (oslDirectoryItem)pItemImpl );
_tcscpy( pItemImpl->cDriveString, reinterpret_cast<LPCTSTR>(strSysFilePath->buffer) );
pItemImpl->cDriveString[0] = _toupper( pItemImpl->cDriveString[0] );
pItemImpl->cDriveString[0] = toupper( pItemImpl->cDriveString[0] );
if ( pItemImpl->cDriveString[_tcslen(pItemImpl->cDriveString) - 1] != '\\' )
_tcscat( pItemImpl->cDriveString, TEXT( "\\" ) );