From 44da3958c3139fe68a09bec498a4ce7ec188672d Mon Sep 17 00:00:00 2001 From: Robert Osfield Date: Thu, 25 Jun 2009 14:06:29 +0000 Subject: [PATCH] From Mathias Froehlich, changes from atof to use osg::asciiToFloat() to avoid locale issues with atof --- src/osg/ArgumentParser.cpp | 5 +++-- src/osg/CullSettings.cpp | 2 +- src/osg/DisplaySettings.cpp | 9 +++++---- src/osgDB/DatabasePager.cpp | 6 +++--- src/osgGA/DriveManipulator.cpp | 2 +- src/osgPlugins/bsp/VBSPEntity.cpp | 8 ++++---- src/osgPlugins/cfg/ConfigParser.cpp | 6 +++--- src/osgPlugins/dw/ReaderWriterDW.cpp | 16 ++++++++-------- src/osgPlugins/ive/DataOutputStream.cpp | 2 +- src/osgPlugins/normals/ReaderWriterNormals.cpp | 2 +- src/osgPlugins/txp/ReaderWriterTXP.cpp | 4 ++-- src/osgPlugins/txp/TXPParser.cpp | 2 +- src/osgViewer/ViewerEventHandlers.cpp | 2 +- 13 files changed, 34 insertions(+), 32 deletions(-) diff --git a/src/osg/ArgumentParser.cpp b/src/osg/ArgumentParser.cpp index 1c39daac6..7d18693b5 100644 --- a/src/osg/ArgumentParser.cpp +++ b/src/osg/ArgumentParser.cpp @@ -16,6 +16,7 @@ #include #include +#include #include #include @@ -163,8 +164,8 @@ bool ArgumentParser::Parameter::assign(const char* str) *_value._bool = (strcmp(str,"True")==0 || strcmp(str,"true")==0 || strcmp(str,"TRUE")==0); break; } - case Parameter::FLOAT_PARAMETER: *_value._float = atof(str); break; - case Parameter::DOUBLE_PARAMETER: *_value._double = atof(str); break; + case Parameter::FLOAT_PARAMETER: *_value._float = osg::asciiToFloat(str); break; + case Parameter::DOUBLE_PARAMETER: *_value._double = osg::asciiToDouble(str); break; case Parameter::INT_PARAMETER: *_value._int = atoi(str); break; case Parameter::UNSIGNED_INT_PARAMETER: *_value._uint = atoi(str); break; case Parameter::STRING_PARAMETER: *_value._string = str; break; diff --git a/src/osg/CullSettings.cpp b/src/osg/CullSettings.cpp index b9adeed58..de5992abf 100644 --- a/src/osg/CullSettings.cpp +++ b/src/osg/CullSettings.cpp @@ -111,7 +111,7 @@ void CullSettings::readEnvironmentalVariables() if ((ptr = getenv("OSG_NEAR_FAR_RATIO")) != 0) { - _nearFarRatio = atof(ptr); + _nearFarRatio = osg::asciiToDouble(ptr); osg::notify(osg::INFO)<<"Set near/far ratio to "<<_nearFarRatio< #include #include +#include #include #include @@ -267,22 +268,22 @@ void DisplaySettings::readEnvironmentalVariables() if( (ptr = getenv("OSG_EYE_SEPARATION")) != 0) { - _eyeSeparation = atof(ptr); + _eyeSeparation = osg::asciiToFloat(ptr); } if( (ptr = getenv("OSG_SCREEN_WIDTH")) != 0) { - _screenWidth = atof(ptr); + _screenWidth = osg::asciiToFloat(ptr); } if( (ptr = getenv("OSG_SCREEN_HEIGHT")) != 0) { - _screenHeight = atof(ptr); + _screenHeight = osg::asciiToFloat(ptr); } if( (ptr = getenv("OSG_SCREEN_DISTANCE")) != 0) { - _screenDistance = atof(ptr); + _screenDistance = osg::asciiToFloat(ptr); } if( (ptr = getenv("OSG_SPLIT_STEREO_HORIZONTAL_EYE_MAPPING")) != 0) diff --git a/src/osgDB/DatabasePager.cpp b/src/osgDB/DatabasePager.cpp index 356984de9..b2abbd9ba 100644 --- a/src/osgDB/DatabasePager.cpp +++ b/src/osgDB/DatabasePager.cpp @@ -885,7 +885,7 @@ DatabasePager::DatabasePager() _expiryDelay = 10.0; if( (ptr = getenv("OSG_EXPIRY_DELAY")) != 0) { - _expiryDelay = atof(ptr); + _expiryDelay = osg::asciiToDouble(ptr); osg::notify(osg::NOTICE)<<"Expiry delay = "<<_expiryDelay< start) && (start != std::string::npos)) - x = atof(str.substr(start, end-start).c_str()); + x = osg::asciiToFloat(str.substr(start, end-start).c_str()); else return Vec3f(); @@ -201,7 +201,7 @@ Vec3f VBSPEntity::getVector(std::string str) end = str.find_first_of(" \t\r\n", start); if ((end > start) && (start != std::string::npos)) - y = atof(str.substr(start, end-start).c_str()); + y = osg::asciiToFloat(str.substr(start, end-start).c_str()); else return Vec3f(); @@ -214,7 +214,7 @@ Vec3f VBSPEntity::getVector(std::string str) end = str.length(); if ((end > start) && (start != std::string::npos)) - z = atof(str.substr(start, end-start).c_str()); + z = osg::asciiToFloat(str.substr(start, end-start).c_str()); else return Vec3f(); diff --git a/src/osgPlugins/cfg/ConfigParser.cpp b/src/osgPlugins/cfg/ConfigParser.cpp index 001e08246..fc6d6bb76 100644 --- a/src/osgPlugins/cfg/ConfigParser.cpp +++ b/src/osgPlugins/cfg/ConfigParser.cpp @@ -1932,21 +1932,21 @@ yyreduce: case 114: { - yyval.real = atof(flexer->YYText()); + yyval.real = osg::asciiToFloat(flexer->YYText()); ;} break; case 115: { - yyval.real = atof(flexer->YYText()); + yyval.real = osg::asciiToFloat(flexer->YYText()); ;} break; case 116: { - yyval.real = atof(flexer->YYText()); + yyval.real = osg::asciiToFloat(flexer->YYText()); ;} break; diff --git a/src/osgPlugins/dw/ReaderWriterDW.cpp b/src/osgPlugins/dw/ReaderWriterDW.cpp index c56132434..4ecddb127 100644 --- a/src/osgPlugins/dw/ReaderWriterDW.cpp +++ b/src/osgPlugins/dw/ReaderWriterDW.cpp @@ -858,33 +858,33 @@ class ReaderWriterDW : public osgDB::ReaderWriter } else if (strncmp(buff, "CurrPhase:",10)==0) { } else if (strncmp(buff, "numPhases:",10)==0) { } else if (strncmp(buff, "Opacity:",8)==0) { - float opacity=atof(buff+8); + float opacity=osg::asciiToFloat(buff+8); matpalet[nmat].setopacity(opacity); } else if (strncmp(buff, "FallOff:",8)==0) { - float fo=atof(buff+8); + float fo=osg::asciiToFloat(buff+8); matpalet[nmat].setFallOff(fo); } else if (strncmp(buff, "InnerHalfAngle:",15)==0) { - float ha=atof(buff+15); + float ha=osg::asciiToFloat(buff+15); matpalet[nmat].setHalfAngleIn(ha); } else if (strncmp(buff, "OuterHalfAngle:",15)==0) { - float ha=atof(buff+15); + float ha=osg::asciiToFloat(buff+15); matpalet[nmat].setHalfAngleOut(ha); } else if (strncmp(buff, "Brightness:",11)==0) { - float br=atof(buff+11); + float br=osg::asciiToFloat(buff+11); matpalet[nmat].setBright(br); } else if (strncmp(buff, "Attentuation:",13)==0) { // oops - they can't spell matpalet[nmat].setAtten(buff+13); } else if (strncmp(buff, "MaterialType:",13)==0) { matpalet[nmat].setType(buff+14); } else if (strncmp(buff, "SpecularReflectivity:",21)==0) { - float spec=atof(buff+21); + float spec=osg::asciiToFloat(buff+21); matpalet[nmat].setspecular(spec); } else if (strncmp(buff, "SmoothnessExponent:",19)==0) { - float spec=atof(buff+19); + float spec=osg::asciiToFloat(buff+19); matpalet[nmat].setspecexp(spec*128.0f/100.0f); // convert to 0-128 range from percent } else if (strncmp(buff, "TextureWidthAndHeight:",22)==0) { char *ct=strchr(buff+22,','); - float repx=atof(buff+23), repy=atof(ct+1); + float repx=osg::asciiToFloat(buff+23), repy=osg::asciiToFloat(ct+1); matpalet[nmat].settxrep(repx, repy); } else if (strncmp(buff, "PictureFile:",12)==0) { char *end=strchr(buff,'\n'); // end of line diff --git a/src/osgPlugins/ive/DataOutputStream.cpp b/src/osgPlugins/ive/DataOutputStream.cpp index e5047c4bc..d842a68dd 100644 --- a/src/osgPlugins/ive/DataOutputStream.cpp +++ b/src/osgPlugins/ive/DataOutputStream.cpp @@ -172,7 +172,7 @@ DataOutputStream::DataOutputStream(std::ostream * ostream, const osgDB::ReaderWr if (numOfCharInNumber>0) { std::string numberString = optionsString.substr(endOfToken+1, numOfCharInNumber); - _maximumErrorToSizeRatio = atof(numberString.c_str()); + _maximumErrorToSizeRatio = osg::asciiToDouble(numberString.c_str()); osg::notify(osg::DEBUG_INFO)<<"TerrainMaximumErrorToSizeRatio = "<<_maximumErrorToSizeRatio<