aboutsummaryrefslogtreecommitdiffstats
path: root/skeletons/REAL.c
diff options
context:
space:
mode:
authorLev Walkin <vlm@lionet.info>2005-03-09 22:19:25 +0000
committerLev Walkin <vlm@lionet.info>2005-03-09 22:19:25 +0000
commit0fab1a6fedfed87f5ebf182c771a4ce7269f4e9c (patch)
tree2a397ddc9a85ec53409b25bca0bb689bb6072128 /skeletons/REAL.c
parent9a0f8fad2f4d5ffb02d3fef8f6d3428755ee01a3 (diff)
relaxed XER processing rules for whitespace
Diffstat (limited to 'skeletons/REAL.c')
-rw-r--r--skeletons/REAL.c25
1 files changed, 13 insertions, 12 deletions
diff --git a/skeletons/REAL.c b/skeletons/REAL.c
index 717db899..4b73f4b7 100644
--- a/skeletons/REAL.c
+++ b/skeletons/REAL.c
@@ -257,17 +257,17 @@ REAL_encode_xer(asn_TYPE_descriptor_t *td, void *sptr,
/*
* Decode the chunk of XML text encoding REAL.
*/
-static ssize_t
-REAL__xer_body_decode(asn_TYPE_descriptor_t *td, void *sptr, void *chunk_buf, size_t chunk_size) {
+static enum xer_pbd_rval
+REAL__xer_body_decode(asn_TYPE_descriptor_t *td, void *sptr, const void *chunk_buf, size_t chunk_size) {
REAL_t *st = (REAL_t *)sptr;
double value;
- char *xerdata = (char *)chunk_buf;
+ const char *xerdata = (const char *)chunk_buf;
char *endptr = 0;
char *b;
(void)td;
- if(!chunk_size) return -1;
+ if(!chunk_size) return XPBD_BROKEN_ENCODING;
/*
* Decode an XMLSpecialRealValue: <MINUS-INFINITY>, etc.
@@ -292,33 +292,34 @@ REAL__xer_body_decode(asn_TYPE_descriptor_t *td, void *sptr, void *chunk_buf, si
case -1: dv = - INFINITY; break;
case 0: dv = NAN; break;
case 1: dv = INFINITY; break;
- default: return -1;
+ default: return XPBD_SYSTEM_FAILURE;
}
- if(asn_double2REAL(st, dv)) return -1;
+ if(asn_double2REAL(st, dv))
+ return XPBD_SYSTEM_FAILURE;
- return chunk_size;
+ return XPBD_BODY_CONSUMED;
}
ASN_DEBUG("Unknown XMLSpecialRealValue");
- return -1;
+ return XPBD_BROKEN_ENCODING;
}
/*
* Copy chunk into the nul-terminated string, and run strtod.
*/
b = (char *)MALLOC(chunk_size + 1);
- if(!b) return -1;
+ if(!b) return XPBD_SYSTEM_FAILURE;
memcpy(b, chunk_buf, chunk_size);
b[chunk_size] = 0; /* nul-terminate */
value = strtod(b, &endptr);
free(b);
- if(endptr == b) return -1;
+ if(endptr == b) return XPBD_BROKEN_ENCODING;
if(asn_double2REAL(st, value))
- return -1;
+ return XPBD_SYSTEM_FAILURE;
- return endptr - b;
+ return XPBD_BODY_CONSUMED;
}
asn_dec_rval_t