alpha64
git-svn-id: https://asn1c.svn.sourceforge.net/svnroot/asn1c/trunk@557 59561ff5-6e30-0410-9f3c-9617f08c8826
diff --git a/skeletons/INTEGER.c b/skeletons/INTEGER.c
index 740f3a7..db289cb 100644
--- a/skeletons/INTEGER.c
+++ b/skeletons/INTEGER.c
@@ -379,24 +379,24 @@
* a) shall not all be ones; and
* b) shall not all be zero.
*/
- for(p = pstart; p < pend1; p += add) {
+ for(p = pstart; p != pend1; p += add) {
switch(*p) {
- case 0x00: if((p[1] & 0x80) == 0)
+ case 0x00: if((*(p+add) & 0x80) == 0)
continue;
break;
- case 0xff: if((p[1] & 0x80))
+ case 0xff: if((*(p+add) & 0x80))
continue;
break;
}
break;
}
/* Copy the integer body */
- for(pstart = p, bp = buf; p <= pend1;)
- *bp++ = *p++;
+ for(pstart = p, bp = buf, pend1 += add; p != pend1; p += add)
+ *bp++ = *p;
if(st->buf) FREEMEM(st->buf);
st->buf = buf;
- st->size = p - pstart;
+ st->size = bp - buf;
return 0;
}
diff --git a/skeletons/OCTET_STRING.c b/skeletons/OCTET_STRING.c
index 89d5de0..b44228c 100644
--- a/skeletons/OCTET_STRING.c
+++ b/skeletons/OCTET_STRING.c
@@ -914,8 +914,8 @@
* Something like strtod(), but with stricter rules.
*/
static int
-OS__strtoent(int base, char *buf, char *end, long *return_value) {
- long val = 0;
+OS__strtoent(int base, char *buf, char *end, int32_t *return_value) {
+ int32_t val = 0;
char *p;
for(p = buf; p < end; p++) {
@@ -981,7 +981,7 @@
if(len == 1 /* "&" */) goto want_more;
if(p[1] == 0x23 /* '#' */) {
char *pval; /* Pointer to start of digits */
- long val; /* Entity reference value */
+ int32_t val; /* Entity reference value */
int base;
if(len == 2 /* "&#" */) goto want_more;
diff --git a/skeletons/REAL.c b/skeletons/REAL.c
index a1608ee..3316ee5 100644
--- a/skeletons/REAL.c
+++ b/skeletons/REAL.c
@@ -2,12 +2,16 @@
* Copyright (c) 2004 Lev Walkin <vlm@lionet.info>. All rights reserved.
* Redistribution and modifications are permitted subject to BSD license.
*/
+#if defined(__alpha)
+#define _ISOC99_SOURCE /* For quiet NAN, indirectly through bits/nan.h */
+#define _BSD_SOURCE /* To reintroduce finite(3) */
+#endif
#include <asn_internal.h>
-#include <REAL.h>
#include <stdlib.h> /* for strtod(3) */
#include <math.h>
#include <errno.h>
#include <assert.h>
+#include <REAL.h>
#undef INT_MAX
#define INT_MAX ((int)(((unsigned int)-1) >> 1))
diff --git a/skeletons/ber_decoder.c b/skeletons/ber_decoder.c
index c78cfee..a7543bb 100644
--- a/skeletons/ber_decoder.c
+++ b/skeletons/ber_decoder.c
@@ -255,8 +255,8 @@
* Inner TLV specifies length which is inconsistent
* with the outer TLV's length value.
*/
- ASN_DEBUG("Outer TLV is %d and inner is %d",
- limit_len, tlv_len);
+ ASN_DEBUG("Outer TLV is %ld and inner is %ld",
+ (long)limit_len, (long)tlv_len);
RETURN(RC_FAIL);
}
diff --git a/skeletons/ber_tlv_length.c b/skeletons/ber_tlv_length.c
index 10a9e1c..1534d9b 100644
--- a/skeletons/ber_tlv_length.c
+++ b/skeletons/ber_tlv_length.c
@@ -54,8 +54,8 @@
/*
* Here length may be very close or equal to 2G.
- * However, the arithmetics used in other decoders
- * often add some (small) quantities to the length,
+ * However, the arithmetics used in some decoders
+ * may add some (small) quantities to the length,
* to check the resulting value against some limits.
* This may result in integer wrap-around.
*/
diff --git a/skeletons/tests/check-INTEGER.c b/skeletons/tests/check-INTEGER.c
index 17fa099..0b2fbf6 100644
--- a/skeletons/tests/check-INTEGER.c
+++ b/skeletons/tests/check-INTEGER.c
@@ -44,6 +44,7 @@
printf(" (%ld, %d) vs (%ld, %d)\n",
rlong, ret, check_long, check_ret);
assert(ret == check_ret);
+ printf("%ld %ld\n", rlong, check_long);
assert(rlong == check_long);
if(check_ret == 0) {
@@ -134,7 +135,7 @@
CHECK(buf8, 0x7F7E7D7C, 0);
CHECK(buf9, 0x7F7E7D7C, 0);
CHECK(buf10, 0x7F7E7D7C, 0);
- CHECK(buf11, 0x80000000, 0);
+ CHECK(buf11, -2147483648, 0); /* 0x80000000 */
CHECK(buf12, -32768, 0);
CHECK(buf13, -128, 0);
diff --git a/skeletons/tests/check-OCTET_STRING.c b/skeletons/tests/check-OCTET_STRING.c
index dd5d049..96c224a 100644
--- a/skeletons/tests/check-OCTET_STRING.c
+++ b/skeletons/tests/check-OCTET_STRING.c
@@ -89,6 +89,7 @@
check(UTF8, "z", "<z z z>a b</z z z>", "a b");
check(UTF8, "z", "<z>a繃b</z>", "a\347\271\203b");
check(UTF8, "z", "<z>a�b</z>", "a�b");
+ check(UTF8, "z", "<z>a�b</z>", "a�b");
check(UTF8, "z", "<z>aĬ</z>", "aĬ");
check(UTF8, "z", "<z>a&#-300;</z>", "a&#-300;");
check(UTF8, "z", "<z>a<ff/>b</z>", "a\014b");
diff --git a/skeletons/tests/check-length.c b/skeletons/tests/check-length.c
index 3f5c0fe..9a6d8d6 100644
--- a/skeletons/tests/check-length.c
+++ b/skeletons/tests/check-length.c
@@ -87,6 +87,7 @@
uint8_t buf1[] = { 0x85, 0x00, 0x01, 0x02, 0x03, 0x04 };
uint8_t buf2[] = { 0x85, 0x00, 0x7f, 0xff, 0x03, 0x04 };
uint8_t buf3[] = { 0x85, 0x00, 0x7f, 0xff, 0xff, 0x04 };
+ uint8_t buf4[] = { 0x89, 0x00, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x04 };
ber_tlv_len_t tlv_len;
ssize_t ret;
int i;
@@ -104,9 +105,15 @@
printf("ret=%ld, len=%ld\n", (long)ret, (long)tlv_len);
assert(ret == sizeof(buf2));
- ret = ber_fetch_length(0, buf3, sizeof(buf3), &tlv_len);
- printf("ret=%ld\n", (long)ret);
- assert(ret == -1);
+ if(sizeof(tlv_len) == 4) {
+ ret = ber_fetch_length(0, buf3, sizeof(buf3), &tlv_len);
+ printf("ret=%ld\n", (long)ret);
+ assert(ret == -1);
+ } else if(sizeof(tlv_len) == 8) {
+ ret = ber_fetch_length(0, buf4, sizeof(buf4), &tlv_len);
+ printf("ret=%ld\n", (long)ret);
+ assert(ret == -1);
+ }
return 0;
}
diff --git a/skeletons/xer_support.c b/skeletons/xer_support.c
index 1fe59bc..b2f542c 100644
--- a/skeletons/xer_support.c
+++ b/skeletons/xer_support.c
@@ -88,7 +88,7 @@
/*
* Parser itself
*/
-int pxml_parse(int *stateContext, void *xmlbuf, size_t size, pxml_callback_f *cb, void *key) {
+ssize_t pxml_parse(int *stateContext, void *xmlbuf, size_t size, pxml_callback_f *cb, void *key) {
pstate_e state = (pstate_e)*stateContext;
char *chunk_start = (char *)xmlbuf;
char *p = chunk_start;