relaxed XER processing rules for whitespace
diff --git a/skeletons/BOOLEAN.c b/skeletons/BOOLEAN.c
index ad7321c..04e6560 100644
--- a/skeletons/BOOLEAN.c
+++ b/skeletons/BOOLEAN.c
@@ -133,16 +133,14 @@
/*
* Decode the chunk of XML text encoding INTEGER.
*/
-static ssize_t
-BOOLEAN__xer_body_decode(asn_TYPE_descriptor_t *td, void *sptr, void *chunk_buf, size_t chunk_size) {
+static enum xer_pbd_rval
+BOOLEAN__xer_body_decode(asn_TYPE_descriptor_t *td, void *sptr, const void *chunk_buf, size_t chunk_size) {
BOOLEAN_t *st = (BOOLEAN_t *)sptr;
- char *p = (char *)chunk_buf;
+ const char *p = (const char *)chunk_buf;
(void)td;
- if(chunk_size == 0) return -1;
-
- if(p[0] == 0x3c /* '<' */) {
+ if(chunk_size && p[0] == 0x3c /* '<' */) {
switch(xer_check_tag(chunk_buf, chunk_size, "false")) {
case XCT_BOTH:
/* "<false/>" */
@@ -151,19 +149,20 @@
case XCT_UNKNOWN_BO:
if(xer_check_tag(chunk_buf, chunk_size, "true")
!= XCT_BOTH)
- return -1;
+ return XPBD_BROKEN_ENCODING;
/* "<true/>" */
*st = 1; /* Or 0xff as in DER?.. */
break;
default:
- return -1;
+ return XPBD_BROKEN_ENCODING;
}
+ return XPBD_BODY_CONSUMED;
} else {
- if(!xer_is_whitespace(chunk_buf, chunk_size))
- return -1;
+ if(xer_is_whitespace(chunk_buf, chunk_size))
+ return XPBD_NOT_BODY_IGNORE;
+ else
+ return XPBD_BROKEN_ENCODING;
}
-
- return chunk_size;
}