cargilld 2005/05/18 11:24:44
Modified: c/src/xercesc/util XMLDateTime.cpp
Log:
For time schema datatypes, ensure milisecond only contains 0-9.
Revision Changes Path
1.31 +15 -21 xml-xerces/c/src/xercesc/util/XMLDateTime.cpp
Index: XMLDateTime.cpp
===================================================================
RCS file: /home/cvs/xml-xerces/c/src/xercesc/util/XMLDateTime.cpp,v
retrieving revision 1.30
retrieving revision 1.31
diff -u -r1.30 -r1.31
--- XMLDateTime.cpp 7 Jan 2005 15:12:10 -0000 1.30
+++ XMLDateTime.cpp 18 May 2005 18:24:44 -0000 1.31
@@ -17,6 +17,9 @@
/*
* $Id$
* $Log$
+ * Revision 1.31 2005/05/18 18:24:44 cargilld
+ * For time schema datatypes, ensure milisecond only contains 0-9.
+ *
* Revision 1.30 2005/01/07 15:12:10 amassari
* Removed warnings
*
@@ -1473,30 +1476,21 @@
//
double XMLDateTime::parseMiliSecond(const int start, const int end) const
{
+ double div = 10;
+ double retval = 0;
+
+ for (int i=start; i < end; i++) {
+
+ if (fBuffer[i] < chDigit_0 || fBuffer[i] > chDigit_9)
+ ThrowXMLwithMemMgr(NumberFormatException,
XMLExcepts::XMLNUM_Inv_chars, fMemoryManager);
- unsigned int miliSecLen = (end-1) - (start-1) + 1; //to include the '.'
- XMLCh* miliSecData = (XMLCh*) fMemoryManager->allocate( (miliSecLen + 1)
* sizeof(XMLCh));
- ArrayJanitor<XMLCh> janMili(miliSecData, fMemoryManager);
- XMLString::copyNString(miliSecData, &(fBuffer[start-1]), miliSecLen);
- *(miliSecData + miliSecLen) = chNull;
-
- char *nptr = XMLString::transcode(miliSecData, fMemoryManager);
- ArrayJanitor<char> jan(nptr, fMemoryManager);
- int strLen = strlen(nptr);
- char *endptr = 0;
- errno = 0;
-
- //printf("milisec=<%s>\n", nptr);
-
- double retVal = strtod(nptr, &endptr);
-
- // check if all chars are valid char
- if ( (endptr - nptr) != strLen)
- ThrowXMLwithMemMgr(NumberFormatException,
XMLExcepts::XMLNUM_Inv_chars, fMemoryManager);
+ retval += (fBuffer[i] == chDigit_0) ? 0 : ((double) (fBuffer[i] -
chDigit_0)/div);
+ div *= 10;
+ }
// we don't check underflow occurs since
// nothing we can do about it.
- return retVal;
+ return retval;
}
//
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]