peiyongz 2003/10/15 07:50:01 Modified: c/src/xercesc/util XMLAbstractDoubleFloat.cpp XMLAbstractDoubleFloat.hpp XMLDouble.cpp XMLFloat.cpp Log: Bugzilla#22821: locale-sensitive function used to validate 'double' type, patch from [EMAIL PROTECTED] (Jeff Sweeney) Revision Changes Path 1.17 +23 -1 xml-xerces/c/src/xercesc/util/XMLAbstractDoubleFloat.cpp Index: XMLAbstractDoubleFloat.cpp =================================================================== RCS file: /home/cvs/xml-xerces/c/src/xercesc/util/XMLAbstractDoubleFloat.cpp,v retrieving revision 1.16 retrieving revision 1.17 diff -u -r1.16 -r1.17 --- XMLAbstractDoubleFloat.cpp 25 Sep 2003 22:24:28 -0000 1.16 +++ XMLAbstractDoubleFloat.cpp 15 Oct 2003 14:50:01 -0000 1.17 @@ -57,6 +57,10 @@ /* * $Id$ * $Log$ + * Revision 1.17 2003/10/15 14:50:01 peiyongz + * Bugzilla#22821: locale-sensitive function used to validate 'double' type, patch + * from [EMAIL PROTECTED] (Jeff Sweeney) + * * Revision 1.16 2003/09/25 22:24:28 peiyongz * Using writeString/readString * @@ -124,6 +128,8 @@ #include <xercesc/util/XMLString.hpp> #include <xercesc/util/Janitor.hpp> +#include <locale.h> + XERCES_CPP_NAMESPACE_BEGIN // --------------------------------------------------------------------------- @@ -432,6 +438,23 @@ return; } + +void XMLAbstractDoubleFloat::normalizeDecimalPoint(char* const toNormal) +{ + // find the locale-specific decimal point delimiter + lconv* lc = localeconv(); + char delimiter = *lc->decimal_point; + + // replace '.' with the locale-specific decimal point delimiter + if ( delimiter != '.' ) + { + char* period = strchr( toNormal, '.' ); + if ( period ) + { + *period = delimiter; + } + } +} /*** * Support for Serialization/De-serialization 1.15 +14 -1 xml-xerces/c/src/xercesc/util/XMLAbstractDoubleFloat.hpp Index: XMLAbstractDoubleFloat.hpp =================================================================== RCS file: /home/cvs/xml-xerces/c/src/xercesc/util/XMLAbstractDoubleFloat.hpp,v retrieving revision 1.14 retrieving revision 1.15 diff -u -r1.14 -r1.15 --- XMLAbstractDoubleFloat.hpp 23 Sep 2003 18:16:07 -0000 1.14 +++ XMLAbstractDoubleFloat.hpp 15 Oct 2003 14:50:01 -0000 1.15 @@ -57,6 +57,10 @@ /* * $Id$ * $Log$ + * Revision 1.15 2003/10/15 14:50:01 peiyongz + * Bugzilla#22821: locale-sensitive function used to validate 'double' type, patch + * from [EMAIL PROTECTED] (Jeff Sweeney) + * * Revision 1.14 2003/09/23 18:16:07 peiyongz * Inplementation for Serialization/Deserialization * @@ -181,6 +185,16 @@ virtual int getSign() const; MemoryManager* getMemoryManager() const; + + /*** + * + * The decimal point delimiter for the schema double/float type is + * defined to be a period and is not locale-specific. So, it must + * be replaced with the local-specific delimiter before converting + * from string to double/float. + * + ***/ + void normalizeDecimalPoint(char* const toNormal); /*** * Support for Serialization/De-serialization 1.12 +7 -1 xml-xerces/c/src/xercesc/util/XMLDouble.cpp Index: XMLDouble.cpp =================================================================== RCS file: /home/cvs/xml-xerces/c/src/xercesc/util/XMLDouble.cpp,v retrieving revision 1.11 retrieving revision 1.12 diff -u -r1.11 -r1.12 --- XMLDouble.cpp 23 Sep 2003 18:16:07 -0000 1.11 +++ XMLDouble.cpp 15 Oct 2003 14:50:01 -0000 1.12 @@ -57,6 +57,10 @@ /* * $Id$ * $Log$ + * Revision 1.12 2003/10/15 14:50:01 peiyongz + * Bugzilla#22821: locale-sensitive function used to validate 'double' type, patch + * from [EMAIL PROTECTED] (Jeff Sweeney) + * * Revision 1.11 2003/09/23 18:16:07 peiyongz * Inplementation for Serialization/Deserialization * @@ -171,6 +175,9 @@ void XMLDouble::checkBoundary(const XMLCh* const strValue) { char *nptr = XMLString::transcode(strValue, getMemoryManager()); + + normalizeDecimalPoint(nptr); + ArrayJanitor<char> jan1(nptr, getMemoryManager()); int strLen = strlen(nptr); char *endptr = 0; 1.13 +7 -1 xml-xerces/c/src/xercesc/util/XMLFloat.cpp Index: XMLFloat.cpp =================================================================== RCS file: /home/cvs/xml-xerces/c/src/xercesc/util/XMLFloat.cpp,v retrieving revision 1.12 retrieving revision 1.13 diff -u -r1.12 -r1.13 --- XMLFloat.cpp 23 Sep 2003 18:16:07 -0000 1.12 +++ XMLFloat.cpp 15 Oct 2003 14:50:01 -0000 1.13 @@ -57,6 +57,10 @@ /* * $Id$ * $Log$ + * Revision 1.13 2003/10/15 14:50:01 peiyongz + * Bugzilla#22821: locale-sensitive function used to validate 'double' type, patch + * from [EMAIL PROTECTED] (Jeff Sweeney) + * * Revision 1.12 2003/09/23 18:16:07 peiyongz * Inplementation for Serialization/Deserialization * @@ -166,6 +170,9 @@ void XMLFloat::checkBoundary(const XMLCh* const strValue) { char *nptr = XMLString::transcode(strValue, getMemoryManager()); + + normalizeDecimalPoint(nptr); + ArrayJanitor<char> jan1(nptr, getMemoryManager()); int strLen = strlen(nptr); char *endptr = 0;
--------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]