diff --git a/apps/gdaltindex_lib.cpp b/apps/gdaltindex_lib.cpp index 68c15081642c..8bec93493ed2 100644 --- a/apps/gdaltindex_lib.cpp +++ b/apps/gdaltindex_lib.cpp @@ -147,7 +147,7 @@ static bool PatternMatch(const char *input, const char *pattern) } else { - if (tolower(*pattern) != tolower(*input)) + if (CPLTolower(*pattern) != CPLTolower(*input)) { return false; } diff --git a/frmts/netcdf/netcdfdataset.cpp b/frmts/netcdf/netcdfdataset.cpp index b170b0e65823..68cf0c28cad4 100644 --- a/frmts/netcdf/netcdfdataset.cpp +++ b/frmts/netcdf/netcdfdataset.cpp @@ -3425,14 +3425,14 @@ void netCDFDataset::SetProjectionFromVar( for (unsigned int i = 0; i < strlen(poDS->papszDimName[poDS->nXDimID]) && i < 3; i++) { - szDimNameX[i] = (char)tolower(static_cast( + szDimNameX[i] = (char)CPLTolower(static_cast( (poDS->papszDimName[poDS->nXDimID])[i])); } szDimNameX[3] = '\0'; // for( unsigned int i = 0; // (i < strlen(poDS->papszDimName[poDS->nYDimID]) // && i < 3 ); i++ ) { - // szDimNameY[i]=(char)tolower(static_cast((poDS->papszDimName[poDS->nYDimID])[i])); + // szDimNameY[i]=(char)CPLTolower(static_cast((poDS->papszDimName[poDS->nYDimID])[i])); // } // szDimNameY[3] = '\0'; } diff --git a/frmts/pcidsk/sdk/core/pcidsk_utils.cpp b/frmts/pcidsk/sdk/core/pcidsk_utils.cpp index 169c3891ff48..45c1dbd7f256 100644 --- a/frmts/pcidsk/sdk/core/pcidsk_utils.cpp +++ b/frmts/pcidsk/sdk/core/pcidsk_utils.cpp @@ -40,6 +40,12 @@ #include #include +extern "C" +{ +int CPL_DLL CPLToupper(int c); +int CPL_DLL CPLTolower(int c); +} + #if !defined(va_copy) && defined(__va_copy) #define va_copy __va_copy #endif @@ -104,8 +110,7 @@ std::string &PCIDSK::UCaseStr( std::string &target ) { for( unsigned int i = 0; i < target.size(); i++ ) { - if( islower(static_cast(target[i])) ) - target[i] = (char) toupper(static_cast(target[i])); + target[i] = (char) CPLToupper(static_cast(target[i])); } return target; @@ -409,10 +414,8 @@ int PCIDSK::pci_strcasecmp( const char *string1, const char *string2 ) char c1 = string1[i]; char c2 = string2[i]; - if( islower(static_cast(c1)) ) - c1 = (char) toupper(static_cast(c1)); - if( islower(static_cast(c2)) ) - c2 = (char) toupper(static_cast(c2)); + c1 = (char) CPLToupper(static_cast(c1)); + c2 = (char) CPLToupper(static_cast(c2)); if( c1 < c2 ) return -1; @@ -447,10 +450,8 @@ int PCIDSK::pci_strncasecmp( const char *string1, const char *string2, size_t le char c1 = string1[i]; char c2 = string2[i]; - if( islower(static_cast(c1)) ) - c1 = (char) toupper(static_cast(c1)); - if( islower(static_cast(c2)) ) - c2 = (char) toupper(static_cast(c2)); + c1 = (char) CPLToupper(static_cast(c1)); + c2 = (char) CPLToupper(static_cast(c2)); if( c1 < c2 ) return -1; diff --git a/frmts/pds/pds4dataset.cpp b/frmts/pds/pds4dataset.cpp index dd532d3676f4..9862a3ea01bb 100644 --- a/frmts/pds/pds4dataset.cpp +++ b/frmts/pds/pds4dataset.cpp @@ -1421,7 +1421,7 @@ static CPLString FixupTableFilename(const CPLString &osFilename) if (!osExt.empty()) { CPLString osTry(osFilename); - if (islower(static_cast(osExt[0]))) + if (osExt[0] >= 'a' && osExt[0] <= 'z') { osTry = CPLResetExtension(osFilename, osExt.toupper()); } diff --git a/gcore/gdal_mdreader.cpp b/gcore/gdal_mdreader.cpp index 2d78e4de842c..18684e492c9e 100644 --- a/gcore/gdal_mdreader.cpp +++ b/gcore/gdal_mdreader.cpp @@ -1031,7 +1031,7 @@ static bool GDAL_IMD_AA2R(char ***ppapszIMD) CPLString osLine; osTarget.Printf( "IMAGE_1.%c%s", - tolower(static_cast(keylist[iKey][0])), + CPLTolower(static_cast(keylist[iKey][0])), keylist[iKey] + 1); osLine = osTarget + "=" + osValue; diff --git a/gcore/gdal_misc.cpp b/gcore/gdal_misc.cpp index 0e9feaad5da8..a00be33fda88 100644 --- a/gcore/gdal_misc.cpp +++ b/gcore/gdal_misc.cpp @@ -2316,9 +2316,9 @@ int GDALReadWorldFile2(const char *pszBaseFilename, const char *pszExtension, for (int i = 0; szExtUpper[i] != '\0'; i++) { szExtUpper[i] = static_cast( - toupper(static_cast(szExtUpper[i]))); + CPLToupper(static_cast(szExtUpper[i]))); szExtLower[i] = static_cast( - tolower(static_cast(szExtLower[i]))); + CPLTolower(static_cast(szExtLower[i]))); } const char *pszTFW = CPLResetExtension(pszBaseFilename, szExtLower); diff --git a/ogr/ogr_srs_pci.cpp b/ogr/ogr_srs_pci.cpp index 089720c2dd00..67f650a61a81 100644 --- a/ogr/ogr_srs_pci.cpp +++ b/ogr/ogr_srs_pci.cpp @@ -236,7 +236,7 @@ OGRErr OGRSpatialReference::importFromPCI(const char *pszProj, if (nCode >= -99 && nCode <= 999) snprintf(szEarthModel, sizeof(szEarthModel), "%c%03d", - toupper(static_cast(*pszEM)), nCode); + CPLToupper(static_cast(*pszEM)), nCode); break; } diff --git a/ogr/ogrsf_frmts/avc/avc_binwr.cpp b/ogr/ogrsf_frmts/avc/avc_binwr.cpp index 2e7828179d32..5febe68bc65a 100644 --- a/ogr/ogrsf_frmts/avc/avc_binwr.cpp +++ b/ogr/ogrsf_frmts/avc/avc_binwr.cpp @@ -1793,7 +1793,8 @@ AVCBinFile *AVCBinWriteCreateTable(const char *pszInfoPath, for (i = 0; *pszPtr != '\0' && *pszPtr != '.' && *pszPtr != ' '; i++, pszPtr++) { - szCoverName[i] = (char)tolower(static_cast(*pszPtr)); + szCoverName[i] = + (char)CPLTolower(static_cast(*pszPtr)); } szCoverName[i] = '\0'; @@ -1802,13 +1803,14 @@ AVCBinFile *AVCBinWriteCreateTable(const char *pszInfoPath, for (i = 0; i < 3 && *pszPtr != '\0' && *pszPtr != ' '; i++, pszPtr++) { - szExt[i] = (char)tolower(static_cast(*pszPtr)); + szExt[i] = (char)CPLTolower(static_cast(*pszPtr)); } szExt[i] = '\0'; for (i = 0; *pszPtr != '\0' && *pszPtr != ' '; i++, pszPtr++) { - szSubclass[i] = (char)tolower(static_cast(*pszPtr)); + szSubclass[i] = + (char)CPLTolower(static_cast(*pszPtr)); } szSubclass[i] = '\0'; @@ -1980,7 +1982,7 @@ AVCBinFile *_AVCBinWriteCreateDBFTable(const char *pszPath, i++, pszDBFBasename++) { psFile->pszFilename[i] = - (char)tolower(static_cast(*pszDBFBasename)); + (char)CPLTolower(static_cast(*pszDBFBasename)); } strcat(psFile->pszFilename, ".dbf"); diff --git a/ogr/ogrsf_frmts/avc/avc_e00gen.cpp b/ogr/ogrsf_frmts/avc/avc_e00gen.cpp index d0b848c1dd48..2d1b49d92064 100644 --- a/ogr/ogrsf_frmts/avc/avc_e00gen.cpp +++ b/ogr/ogrsf_frmts/avc/avc_e00gen.cpp @@ -169,7 +169,7 @@ const char *AVCE00GenStartSection(AVCE00GenInfo *psInfo, AVCFileType eType, for (i = 0; pszClassName[i] != '\0'; i++) { psInfo->pszBuf[i] = - (char)toupper(static_cast(pszClassName[i])); + (char)CPLToupper(static_cast(pszClassName[i])); } psInfo->pszBuf[i] = '\0'; } diff --git a/ogr/ogrsf_frmts/avc/avc_e00read.cpp b/ogr/ogrsf_frmts/avc/avc_e00read.cpp index d397573412c8..255ac4ba05c6 100644 --- a/ogr/ogrsf_frmts/avc/avc_e00read.cpp +++ b/ogr/ogrsf_frmts/avc/avc_e00read.cpp @@ -1008,7 +1008,7 @@ static int _AVCE00ReadBuildSqueleton(AVCE00ReadPtr psInfo, char **papszCoverDir) CPLSPrintf("EXP 0 %s%s.E00", szCWD, osCoverPathTruncated.c_str())); pcTmp = pszEXPPath; for (; *pcTmp != '\0'; pcTmp++) - *pcTmp = (char)toupper(static_cast(*pcTmp)); + *pcTmp = (char)CPLToupper(static_cast(*pcTmp)); /*----------------------------------------------------------------- * EXP Header @@ -1309,7 +1309,8 @@ static int _AVCE00ReadBuildSqueleton(AVCE00ReadPtr psInfo, char **papszCoverDir) papszCoverDir[iFile]); pcTmp = (char *)szFname; for (; *pcTmp != '\0'; pcTmp++) - *pcTmp = (char)toupper(static_cast(*pcTmp)); + *pcTmp = + (char)CPLToupper(static_cast(*pcTmp)); papszCoverDir[iFile][nLen - 4] = '.'; papszTables = CSLAddString(papszTables, szFname); diff --git a/ogr/ogrsf_frmts/avc/avc_e00write.cpp b/ogr/ogrsf_frmts/avc/avc_e00write.cpp index 789feddfa9fb..67f5578cc3a4 100644 --- a/ogr/ogrsf_frmts/avc/avc_e00write.cpp +++ b/ogr/ogrsf_frmts/avc/avc_e00write.cpp @@ -480,7 +480,8 @@ static void _AVCE00WriteRenameTable(AVCTableDef *psTableDef, snprintf(szNewName, sizeof(szNewName), "%s", pszNewCoverName); for (i = 0; szNewName[i] != '\0'; i++) - szNewName[i] = (char)toupper(static_cast(szNewName[i])); + szNewName[i] = + (char)CPLToupper(static_cast(szNewName[i])); /*----------------------------------------------------------------- * Extract components from the current table name. @@ -662,7 +663,7 @@ static int _AVCE00WriteCreateCoverFile(AVCE00WritePtr psInfo, AVCFileType eType, * Make sure filename is all lowercase and attempt to create the file *----------------------------------------------------------------*/ for (i = 0; szFname[i] != '\0'; i++) - szFname[i] = (char)tolower(static_cast(szFname[i])); + szFname[i] = (char)CPLTolower(static_cast(szFname[i])); if (nStatus == 0) { @@ -961,8 +962,8 @@ int AVCE00DeleteCoverage(const char *pszCoverToDelete) { /* Convert table filename to lowercases */ for (j = 0; papszFiles[i] && papszFiles[i][j] != '\0'; j++) - papszFiles[i][j] = - (char)tolower(static_cast(papszFiles[i][j])); + papszFiles[i][j] = (char)CPLTolower( + static_cast(papszFiles[i][j])); /* Delete the .DAT file */ pszFname = CPLSPrintf("%s%s.dat", pszInfoPath, papszFiles[i]); diff --git a/ogr/ogrsf_frmts/dxf/ogr_autocad_services.cpp b/ogr/ogrsf_frmts/dxf/ogr_autocad_services.cpp index cf19f856544e..7e37fbf2b9ec 100644 --- a/ogr/ogrsf_frmts/dxf/ogr_autocad_services.cpp +++ b/ogr/ogrsf_frmts/dxf/ogr_autocad_services.cpp @@ -67,7 +67,7 @@ CPLString ACTextUnescape(const char *pszRawInput, const char *pszEncoding, if (pszInput[1] == ' ') osResult += '^'; else - osResult += static_cast(toupper( + osResult += static_cast(CPLToupper( static_cast(pszInput[1]))) ^ 0x40; pszInput++; diff --git a/ogr/ogrsf_frmts/edigeo/ogredigeodatasource.cpp b/ogr/ogrsf_frmts/edigeo/ogredigeodatasource.cpp index aeda2eb0fd9a..d966bd15f764 100644 --- a/ogr/ogrsf_frmts/edigeo/ogredigeodatasource.cpp +++ b/ogr/ogrsf_frmts/edigeo/ogredigeodatasource.cpp @@ -188,10 +188,8 @@ VSILFILE *OGREDIGEODataSource::OpenFile(const char *pszType, VSILFILE *fp = VSIFOpenL(osFilename, "rb"); if (fp == nullptr) { - CPLString osExtLower = osExt; - for (int i = 0; i < (int)osExt.size(); i++) - osExtLower[i] = (char)tolower(static_cast(osExt[i])); - CPLString osFilename2 = CPLFormCIFilename( + const CPLString osExtLower = CPLString(osExt).tolower(); + const CPLString osFilename2 = CPLFormCIFilename( CPLGetPath(pszName), osTmp.c_str(), osExtLower.c_str()); fp = VSIFOpenL(osFilename2, "rb"); if (fp == nullptr) diff --git a/ogr/ogrsf_frmts/elastic/ogrelasticlayer.cpp b/ogr/ogrsf_frmts/elastic/ogrelasticlayer.cpp index bb60c85390dc..ebfbdeea7799 100644 --- a/ogr/ogrsf_frmts/elastic/ogrelasticlayer.cpp +++ b/ogr/ogrsf_frmts/elastic/ogrelasticlayer.cpp @@ -1415,7 +1415,8 @@ static void decode_geohash_bbox(const char *geohash, double lat[2], hashlen = static_cast(strlen(geohash)); for (i = 0; i < hashlen; i++) { - c = static_cast(tolower(static_cast(geohash[i]))); + c = static_cast( + CPLTolower(static_cast(geohash[i]))); cd = static_cast(strchr(BASE32, c) - BASE32); for (j = 0; j < 5; j++) { diff --git a/ogr/ogrsf_frmts/gmlas/ogrgmlasutils.cpp b/ogr/ogrsf_frmts/gmlas/ogrgmlasutils.cpp index 82f0de613598..910b98501417 100644 --- a/ogr/ogrsf_frmts/gmlas/ogrgmlasutils.cpp +++ b/ogr/ogrsf_frmts/gmlas/ogrgmlasutils.cpp @@ -52,8 +52,7 @@ CPLString OGRGMLASTruncateIdentifier(const CPLString &osName, const char *pszToken = papszTokens[j]; bool bIsCamelCase = false; // Split parts like camelCase or CamelCase into several tokens - if (pszToken[0] != '\0' && - islower(static_cast(pszToken[1]))) + if (pszToken[0] != '\0' && pszToken[1] >= 'a' && pszToken[1] <= 'z') { bIsCamelCase = true; bool bLastIsLower = true; @@ -63,7 +62,7 @@ CPLString OGRGMLASTruncateIdentifier(const CPLString &osName, osCurrentPart += pszToken[1]; for (int k = 2; pszToken[k]; ++k) { - if (isupper(static_cast(pszToken[k]))) + if (pszToken[k] >= 'A' && pszToken[k] <= 'Z') { if (!bLastIsLower) { diff --git a/ogr/ogrsf_frmts/hana/ogrhanadatasource.cpp b/ogr/ogrsf_frmts/hana/ogrhanadatasource.cpp index 8527bbebfc34..bb1c698eaefe 100644 --- a/ogr/ogrsf_frmts/hana/ogrhanadatasource.cpp +++ b/ogr/ogrsf_frmts/hana/ogrhanadatasource.cpp @@ -367,8 +367,8 @@ GetGeometryColumnDescription(odbc::Connection &conn, const CPLString &query, columnName.end(), [](char ch1, char ch2) { - return std::toupper(static_cast(ch1)) == - std::toupper(static_cast(ch2)); + return CPLToupper(static_cast(ch1)) == + CPLToupper(static_cast(ch2)); }); if (it != preparedQuery.end()) @@ -1285,8 +1285,8 @@ std::pair OGRHanaDataSource::LaunderName(const char *name) if (c == '-' || c == '#') newName[i] = '_'; else - newName[i] = - static_cast(toupper(static_cast(c))); + newName[i] = static_cast( + CPLToupper(static_cast(c))); } else { diff --git a/ogr/ogrsf_frmts/ili/ili2reader.cpp b/ogr/ogrsf_frmts/ili/ili2reader.cpp index 0b343b9ebb8d..577c06217572 100644 --- a/ogr/ogrsf_frmts/ili/ili2reader.cpp +++ b/ogr/ogrsf_frmts/ili/ili2reader.cpp @@ -72,10 +72,10 @@ int cmpStr(const string &s1, const string &s2) while (p1 != s1.end() && p2 != s2.end()) { - if (toupper(static_cast(*p1)) != - toupper(static_cast(*p2))) - return (toupper(static_cast(*p1)) < - toupper(static_cast(*p2))) + if (CPLToupper(static_cast(*p1)) != + CPLToupper(static_cast(*p2))) + return (CPLToupper(static_cast(*p1)) < + CPLToupper(static_cast(*p2))) ? -1 : 1; ++p1; diff --git a/ogr/ogrsf_frmts/mitab/mitab_feature.cpp b/ogr/ogrsf_frmts/mitab/mitab_feature.cpp index b79679cff706..4145fb265a39 100644 --- a/ogr/ogrsf_frmts/mitab/mitab_feature.cpp +++ b/ogr/ogrsf_frmts/mitab/mitab_feature.cpp @@ -1820,7 +1820,7 @@ const char *TABCustomPoint::GetSymbolStyleString(double dfAngle) const for (i = 0; i < 7 && *pszPtr != '\0' && *pszPtr != ' '; i++, pszPtr++) { szLowerExt[i] = - static_cast(tolower(static_cast(*pszPtr))); + static_cast(CPLTolower(static_cast(*pszPtr))); } szLowerExt[i] = '\0'; @@ -6314,7 +6314,7 @@ const char *TABText::GetLabelStyleString() const for (int i = 0; pszTextString[i]; ++i) if (isalpha(static_cast(pszTextString[i]))) pszTextString[i] = static_cast( - toupper(static_cast(pszTextString[i]))); + CPLToupper(static_cast(pszTextString[i]))); /* Escape the double quote chars and expand the text */ char *pszTmpTextString = nullptr; diff --git a/ogr/ogrsf_frmts/mitab/mitab_indfile.cpp b/ogr/ogrsf_frmts/mitab/mitab_indfile.cpp index 165c08f31185..b270897639b6 100644 --- a/ogr/ogrsf_frmts/mitab/mitab_indfile.cpp +++ b/ogr/ogrsf_frmts/mitab/mitab_indfile.cpp @@ -599,8 +599,8 @@ GByte *TABINDFile::BuildKey(int nIndexNumber, const char *pszStr) int i = 0; for (i = 0; i < nKeyLength && pszStr[i] != '\0'; i++) { - m_papbyKeyBuffers[nIndexNumber - 1][i] = - static_cast(toupper(static_cast(pszStr[i]))); + m_papbyKeyBuffers[nIndexNumber - 1][i] = static_cast( + CPLToupper(static_cast(pszStr[i]))); } /* Pad the end of the buffer with '\0' */ diff --git a/ogr/ogrsf_frmts/mitab/mitab_utils.cpp b/ogr/ogrsf_frmts/mitab/mitab_utils.cpp index 3d9d62f80b53..ffb2d3ba70ba 100644 --- a/ogr/ogrsf_frmts/mitab/mitab_utils.cpp +++ b/ogr/ogrsf_frmts/mitab/mitab_utils.cpp @@ -240,8 +240,8 @@ GBool TABAdjustFilenameExtension(char *pszFname) for (int i = static_cast(strlen(pszFname)) - 1; i >= 0 && pszFname[i] != '.'; i--) { - pszFname[i] = - static_cast(toupper(static_cast(pszFname[i]))); + pszFname[i] = static_cast( + CPLToupper(static_cast(pszFname[i]))); } if (VSIStatL(pszFname, &sStatBuf) == 0) @@ -253,8 +253,8 @@ GBool TABAdjustFilenameExtension(char *pszFname) for (int i = static_cast(strlen(pszFname)) - 1; i >= 0 && pszFname[i] != '.'; i--) { - pszFname[i] = - static_cast(tolower(static_cast(pszFname[i]))); + pszFname[i] = static_cast( + CPLTolower(static_cast(pszFname[i]))); } if (VSIStatL(pszFname, &sStatBuf) == 0) diff --git a/ogr/ogrsf_frmts/mssqlspatial/ogrmssqlspatialdatasource.cpp b/ogr/ogrsf_frmts/mssqlspatial/ogrmssqlspatialdatasource.cpp index 4e64615e77ad..215080cbc260 100644 --- a/ogr/ogrsf_frmts/mssqlspatial/ogrmssqlspatialdatasource.cpp +++ b/ogr/ogrsf_frmts/mssqlspatial/ogrmssqlspatialdatasource.cpp @@ -1357,7 +1357,7 @@ char *OGRMSSQLSpatialDataSource::LaunderName(const char *pszSrcName) for (i = 0; pszSafeName[i] != '\0'; i++) { pszSafeName[i] = - (char)tolower(static_cast(pszSafeName[i])); + (char)CPLTolower(static_cast(pszSafeName[i])); if (pszSafeName[i] == '-' || pszSafeName[i] == '#') pszSafeName[i] = '_'; } diff --git a/ogr/ogrsf_frmts/mysql/ogrmysqldatasource.cpp b/ogr/ogrsf_frmts/mysql/ogrmysqldatasource.cpp index 09636fb357d3..041a777f739a 100644 --- a/ogr/ogrsf_frmts/mysql/ogrmysqldatasource.cpp +++ b/ogr/ogrsf_frmts/mysql/ogrmysqldatasource.cpp @@ -1068,7 +1068,7 @@ char *OGRMySQLDataSource::LaunderName(const char *pszSrcName) for (int i = 0; pszSafeName[i] != '\0'; i++) { pszSafeName[i] = - (char)tolower(static_cast(pszSafeName[i])); + (char)CPLTolower(static_cast(pszSafeName[i])); if (pszSafeName[i] == '-' || pszSafeName[i] == '#') pszSafeName[i] = '_'; } diff --git a/ogr/ogrsf_frmts/oci/ogrocisession.cpp b/ogr/ogrsf_frmts/oci/ogrocisession.cpp index 8de280a93c90..26ec7fb4b755 100644 --- a/ogr/ogrsf_frmts/oci/ogrocisession.cpp +++ b/ogr/ogrsf_frmts/oci/ogrocisession.cpp @@ -560,8 +560,8 @@ void OGROCISession::CleanName(char *pszName) for (i = 0; pszName[i] != '\0'; i++) { - pszName[i] = - static_cast(toupper(static_cast(pszName[i]))); + pszName[i] = static_cast( + CPLToupper(static_cast(pszName[i]))); if ((pszName[i] < '0' || pszName[i] > '9') && (pszName[i] < 'A' || pszName[i] > 'Z') && pszName[i] != '_') diff --git a/ogr/ogrsf_frmts/pgdump/ogrpgdumpdatasource.cpp b/ogr/ogrsf_frmts/pgdump/ogrpgdumpdatasource.cpp index f4f82e6adca1..b4edaafd5756 100644 --- a/ogr/ogrsf_frmts/pgdump/ogrpgdumpdatasource.cpp +++ b/ogr/ogrsf_frmts/pgdump/ogrpgdumpdatasource.cpp @@ -140,7 +140,7 @@ char *OGRPGCommonLaunderName(const char *pszSrcName, const char *pszDebugPrefix, if (static_cast(pszSafeName[i]) <= 127) { pszSafeName[i] = - (char)tolower(static_cast(pszSafeName[i])); + (char)CPLTolower(static_cast(pszSafeName[i])); if (pszSafeName[i] == '\'' || pszSafeName[i] == '-' || pszSafeName[i] == '#') { diff --git a/ogr/ogrsf_frmts/sqlite/ogrsqlitedatasource.cpp b/ogr/ogrsf_frmts/sqlite/ogrsqlitedatasource.cpp index ae4584f3bb11..f936fa05ebfb 100644 --- a/ogr/ogrsf_frmts/sqlite/ogrsqlitedatasource.cpp +++ b/ogr/ogrsf_frmts/sqlite/ogrsqlitedatasource.cpp @@ -3746,7 +3746,7 @@ char *OGRSQLiteDataSource::LaunderName(const char *pszSrcName) for (int i = 0; pszSafeName[i] != '\0'; i++) { pszSafeName[i] = - (char)tolower(static_cast(pszSafeName[i])); + (char)CPLTolower(static_cast(pszSafeName[i])); if (pszSafeName[i] == '\'' || pszSafeName[i] == '-' || pszSafeName[i] == '#') pszSafeName[i] = '_'; diff --git a/ogr/swq_op_general.cpp b/ogr/swq_op_general.cpp index b8e250ed6f54..89e3bb4209fa 100644 --- a/ogr/swq_op_general.cpp +++ b/ogr/swq_op_general.cpp @@ -157,8 +157,8 @@ int swq_test_like(const char *input, const char *pattern, char chEscape, } else if ((!insensitive && *pattern != *input) || (insensitive && - tolower(static_cast(*pattern)) != - tolower(static_cast(*input)))) + CPLTolower(static_cast(*pattern)) != + CPLTolower(static_cast(*input)))) { return 0; } diff --git a/port/cpl_conv.cpp b/port/cpl_conv.cpp index 6779baf4a79c..afcfd3eac95e 100644 --- a/port/cpl_conv.cpp +++ b/port/cpl_conv.cpp @@ -327,7 +327,7 @@ char *CPLStrdup(const char *pszString) * Convert each characters of the string to lower case. * * For example, "ABcdE" will be converted to "abcde". - * This function is locale dependent. + * Starting with GDAL 3.9, this function is no longer locale dependent. * * @param pszString input string to be converted. * @return pointer to the same string, pszString. @@ -344,7 +344,7 @@ char *CPLStrlwr(char *pszString) while (*pszTemp) { *pszTemp = - static_cast(tolower(static_cast(*pszTemp))); + static_cast(CPLTolower(static_cast(*pszTemp))); pszTemp++; } diff --git a/port/cpl_path.cpp b/port/cpl_path.cpp index ec5efeaca505..f78c77453bef 100644 --- a/port/cpl_path.cpp +++ b/port/cpl_path.cpp @@ -654,8 +654,7 @@ const char *CPLFormCIFilename(const char *pszPath, const char *pszBasename, { for (size_t i = 0; pszFilename[i] != '\0'; i++) { - if (islower(static_cast(pszFilename[i]))) - pszFilename[i] = static_cast(toupper(pszFilename[i])); + pszFilename[i] = static_cast(CPLToupper(pszFilename[i])); } pszFullPath = CPLFormFilename(pszPath, pszFilename, nullptr); @@ -666,9 +665,8 @@ const char *CPLFormCIFilename(const char *pszPath, const char *pszBasename, { for (size_t i = 0; pszFilename[i] != '\0'; i++) { - if (isupper(static_cast(pszFilename[i]))) - pszFilename[i] = static_cast( - tolower(static_cast(pszFilename[i]))); + pszFilename[i] = static_cast( + CPLTolower(static_cast(pszFilename[i]))); } pszFullPath = CPLFormFilename(pszPath, pszFilename, nullptr); diff --git a/port/cplstring.cpp b/port/cplstring.cpp index 4928892ce86b..17bfe4174759 100644 --- a/port/cplstring.cpp +++ b/port/cplstring.cpp @@ -278,7 +278,7 @@ size_t CPLString::ifind(const char *s, size_t nPos) const { const char *pszHaystack = c_str(); const char chFirst = - static_cast(::tolower(static_cast(s[0]))); + static_cast(CPLTolower(static_cast(s[0]))); const size_t nTargetLen = strlen(s); if (nPos > size()) @@ -288,7 +288,7 @@ size_t CPLString::ifind(const char *s, size_t nPos) const while (*pszHaystack != '\0') { - if (chFirst == ::tolower(static_cast(*pszHaystack))) + if (chFirst == CPLTolower(static_cast(*pszHaystack))) { if (EQUALN(pszHaystack, s, nTargetLen)) return nPos; @@ -313,7 +313,7 @@ CPLString &CPLString::toupper() { for (size_t i = 0; i < size(); i++) - (*this)[i] = static_cast(::toupper((*this)[i])); + (*this)[i] = static_cast(CPLToupper((*this)[i])); return *this; } @@ -330,8 +330,7 @@ CPLString &CPLString::tolower() { for (size_t i = 0; i < size(); i++) - (*this)[i] = static_cast( - ::tolower(static_cast((*this)[i]))); + (*this)[i] = static_cast(CPLTolower((*this)[i])); return *this; }