Change the length of strings created from fixed-size buffers.
Use the usual C rule for NUL-terminated strings instead of discarding all the trailing NUL characters. This was unexpected (as buffers in C code are not necessarily always padded with NULs to their full length) and also inconsistent among languages as this was only done for those of them using typemaps/strings.swg but not for C# or Java, for example, which terminated the string at the first NUL even before this change. Notice that this patch couldn't use strlen() or wcslen() with possibly not NUL-terminated strings, so we had to add [our own equivalents of] strnlen() and wcsnlen() and use them instead. This required adding yet another parameter to string typemap macros, so update the example using them accordingly too.
This commit is contained in:
parent
ad02cb98e6
commit
88a0e228a9
8 changed files with 75 additions and 20 deletions
|
|
@ -93,6 +93,17 @@ SWIG_FromXMLChPtrAndSize(const XMLCh* input, size_t size)
|
|||
}
|
||||
}
|
||||
|
||||
%fragment("SWIG_XMLStringNLen","header") {
|
||||
size_t
|
||||
SWIG_XMLStringNLen(const XMLCh* s, size_t maxlen)
|
||||
{
|
||||
const XMLCh *p;
|
||||
for (p = s; maxlen-- && *p; p++)
|
||||
;
|
||||
return p - s;
|
||||
}
|
||||
}
|
||||
|
||||
%init {
|
||||
if (!SWIG_UTF8Transcoder()) {
|
||||
croak("ERROR: XML::Xerces: INIT: Could not create UTF-8 transcoder");
|
||||
|
|
@ -106,6 +117,7 @@ SWIG_FromXMLChPtrAndSize(const XMLCh* input, size_t size)
|
|||
SWIG_AsXMLChPtrAndSize,
|
||||
SWIG_FromXMLChPtrAndSize,
|
||||
XERCES_CPP_NAMESPACE::XMLString::stringLen,
|
||||
SWIG_XMLStringNLen,
|
||||
"<XMLCh.h>", INT_MIN, INT_MAX);
|
||||
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue