The IconvTransService::uppercase method currently has this as its entire body:
towupper(*toUpperCase);
The result is that it's a no-op (unless there's two very different
platform-specific definitions for towupper()). It uppercases one character and
never stores it anywhere.
This bug shows up if you create an XML encoding in lowercase. Encodings like
"utf-8" and "iso-8859-1" create runtime exceptions, whereas "UTF-8" and
"ISO-8859-1" work. The encoding is passed through the upperCase() method --
which leaves the encoding in its original form.
Here's a patch to fix it.
Index: IconvTransService.cpp
===================================================================
RCS file:
/home/cvspublic/xml-xerces/c/src/util/Transcoders/Iconv/IconvTransService.cpp,v
retrieving revision 1.13
diff -u -r1.13 IconvTransService.cpp
--- IconvTransService.cpp 2000/02/11 03:10:19 1.13
+++ IconvTransService.cpp 2000/02/12 12:50:10
@@ -262,7 +262,12 @@
void IconvTransService::upperCase(XMLCh* const toUpperCase) const
{
- towupper(*toUpperCase);
+ XMLCh* outPtr = toUpperCase;
+ while (*outPtr)
+ {
+ *outPtr = towupper(*outPtr);
+ outPtr++;
+ }
}
(I think I sent this once, but it seems to have vanished into the bit bucket.
If this already went through once, my apologies!)
--Bill