aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLev Walkin <vlm@lionet.info>2005-02-18 12:26:20 +0000
committerLev Walkin <vlm@lionet.info>2005-02-18 12:26:20 +0000
commit9357ec13466422475bb39468c462e79cf295f0fa (patch)
tree1185d2b4786509af7c1bde5f746708299ed9f166
parentbdaae77eb8f146f97bf853c2687954857ce1df65 (diff)
fixed bug
-rw-r--r--skeletons/xer_decoder.c12
1 files changed, 8 insertions, 4 deletions
diff --git a/skeletons/xer_decoder.c b/skeletons/xer_decoder.c
index 79a6bccc..97e0d394 100644
--- a/skeletons/xer_decoder.c
+++ b/skeletons/xer_decoder.c
@@ -163,16 +163,20 @@ xer_check_tag(const void *buf_ptr, int size, const char *need_tag) {
return rval; \
} while(0)
-#define XER_GOT_BODY(chunk_buf, chunk_size) do { \
+#define XER_GOT_BODY(chunk_buf, chunk_size, size) do { \
ssize_t converted_size = body_receiver \
(struct_key, chunk_buf, chunk_size, \
(size_t)chunk_size < size); \
if(converted_size == -1) RETURN(RC_FAIL); \
+ if(converted_size == 0 && size == chunk_size) { \
+ ctx->step = xer_state; \
+ RETURN(RC_WMORE); \
+ } \
chunk_size = converted_size; \
} while(0)
#define XER_GOT_EMPTY() do { \
- ssize_t chunk_size = 0; \
- XER_GOT_BODY(0, chunk_size); \
+ if(body_receiver(struct_key, 0, 0, size > 0) == -1) \
+ RETURN(RC_FAIL); \
} while(0)
/*
@@ -231,7 +235,7 @@ xer_decode_general(asn_codec_ctx_t *opt_codec_ctx,
* any text is just ignored here.
*/
} else {
- XER_GOT_BODY(buf_ptr, ch_size);
+ XER_GOT_BODY(buf_ptr, ch_size, size);
}
ADVANCE(ch_size);
continue;