peiyongz 2002/08/12 14:38:22 Modified: c/src/xercesc/framework MemBufFormatTarget.hpp MemBufFormatTarget.cpp Log: Bug#11462: MemBufFormatTarget issue(2) .., proposed patch from Esmond Pitt ([EMAIL PROTECTED]) Revision Changes Path 1.4 +22 -6 xml-xerces/c/src/xercesc/framework/MemBufFormatTarget.hpp Index: MemBufFormatTarget.hpp =================================================================== RCS file: /home/cvs/xml-xerces/c/src/xercesc/framework/MemBufFormatTarget.hpp,v retrieving revision 1.3 retrieving revision 1.4 diff -u -r1.3 -r1.4 --- MemBufFormatTarget.hpp 22 Jul 2002 23:23:15 -0000 1.3 +++ MemBufFormatTarget.hpp 12 Aug 2002 21:38:22 -0000 1.4 @@ -57,6 +57,10 @@ /* * $Id$ * $Log$ + * Revision 1.4 2002/08/12 21:38:22 peiyongz + * Bug#11462: MemBufFormatTarget issue(2) .., proposed patch from + * Esmond Pitt ([EMAIL PROTECTED]) + * * Revision 1.3 2002/07/22 23:23:15 tng * DOM L3: MemBufFormatTarget stores fDataBuf as XMLByte directly, consistent design as MemBufInputSource * @@ -73,12 +77,29 @@ #include <xercesc/framework/XMLFormatter.hpp> + +/* + * The MemBufFormatTarget is a derivative from XMLFormatTarget, which user code + * may plug into DOMWriter to retrieve the serialized XML stream (from DOM Tree) + * in a memory buffer. + * + * The MemBufFormatTarget is initalized to have a memory buffer of 1023 upon + * construction, which grows as needed. The buffer will be deleted when + * MemBufFormatTarget is destructed; or will be reset when the reset() function + * is called. + * + * The MemBufFormatTarget returns a NULL terminated XMLByte stream upon request, + * through the method getRawBuffer(), and user should make its own copy of the + * returned buffer if it intends to keep it independent on the state of the + * MemBufFormatTarget. + */ + class XMLPARSER_EXPORT MemBufFormatTarget : public XMLFormatTarget { public: /** @name constructors and destructor */ //@{ - MemBufFormatTarget(int capacity = 1023) ; + MemBufFormatTarget(int initCapacity = 1023) ; ~MemBufFormatTarget(); //@} @@ -97,10 +118,6 @@ /** * Returned the internal raw buffer. * - * The MemBufFormatTarget object owns the buffer which will be deleted when - * MemBufFormatTarget is destructed; or will be reset when the reset() function - * is called. User should make a copy of the returned buffer if intend to keep - * it independent on the state of the MemBufFormatTarget. */ //@} const XMLByte* getRawBuffer() const; 1.4 +7 -12 xml-xerces/c/src/xercesc/framework/MemBufFormatTarget.cpp Index: MemBufFormatTarget.cpp =================================================================== RCS file: /home/cvs/xml-xerces/c/src/xercesc/framework/MemBufFormatTarget.cpp,v retrieving revision 1.3 retrieving revision 1.4 diff -u -r1.3 -r1.4 --- MemBufFormatTarget.cpp 22 Jul 2002 23:23:15 -0000 1.3 +++ MemBufFormatTarget.cpp 12 Aug 2002 21:38:22 -0000 1.4 @@ -57,6 +57,10 @@ /* * $Id$ * $Log$ + * Revision 1.4 2002/08/12 21:38:22 peiyongz + * Bug#11462: MemBufFormatTarget issue(2) .., proposed patch from + * Esmond Pitt ([EMAIL PROTECTED]) + * * Revision 1.3 2002/07/22 23:23:15 tng * DOM L3: MemBufFormatTarget stores fDataBuf as XMLByte directly, consistent design as MemBufInputSource * @@ -72,10 +76,10 @@ #include <xercesc/util/XMLString.hpp> #include <string.h> -MemBufFormatTarget::MemBufFormatTarget(int capacity) +MemBufFormatTarget::MemBufFormatTarget(int initCapacity) : fDataBuf(0) , fIndex(0) - , fCapacity(capacity) + , fCapacity(initCapacity) { // Buffer is one larger than capacity, to allow for zero term fDataBuf = new XMLByte[fCapacity+4]; @@ -93,13 +97,6 @@ , const unsigned int count , XMLFormatter * const formatter) { - // - // The toWrite may not be null terminated, - // so we need to do some extra work here - // - XMLByte lastChar = toWrite[count]; // preserve the last char - XMLByte* tmpBuf = (XMLByte *)toWrite; - tmpBuf[count] = 0; if (count) { insureCapacity(count); @@ -107,7 +104,6 @@ fIndex += count; } - tmpBuf[count] = lastChar; // restore the last char } const XMLByte* MemBufFormatTarget::getRawBuffer() const @@ -138,7 +134,7 @@ return; // Oops, not enough room. Calc new capacity and allocate new buffer - const unsigned int newCap = (unsigned int)((fIndex + extraNeeded) * 1.25); + const unsigned int newCap = (unsigned int)((fIndex + extraNeeded) * 2); XMLByte* newBuf = new XMLByte[newCap+4]; // Copy over the old stuff
--------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]