From 6c59384a0fe0fa0189af855b4a61b16cd211b31c Mon Sep 17 00:00:00 2001 From: vlm Date: Tue, 26 Oct 2004 09:03:31 +0000 Subject: [PATCH] alpha64 git-svn-id: https://asn1c.svn.sourceforge.net/svnroot/asn1c/trunk@557 59561ff5-6e30-0410-9f3c-9617f08c8826 --- skeletons/INTEGER.c | 12 ++++++------ skeletons/OCTET_STRING.c | 6 +++--- skeletons/REAL.c | 6 +++++- skeletons/ber_decoder.c | 4 ++-- skeletons/ber_tlv_length.c | 4 ++-- skeletons/tests/check-INTEGER.c | 3 ++- skeletons/tests/check-OCTET_STRING.c | 1 + skeletons/tests/check-length.c | 13 ++++++++++--- skeletons/xer_support.c | 2 +- 9 files changed, 32 insertions(+), 19 deletions(-) diff --git a/skeletons/INTEGER.c b/skeletons/INTEGER.c index 740f3a75..db289cb2 100644 --- a/skeletons/INTEGER.c +++ b/skeletons/INTEGER.c @@ -379,24 +379,24 @@ asn_long2INTEGER(INTEGER_t *st, long value) { * 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 89d5de0b..b44228c4 100644 --- a/skeletons/OCTET_STRING.c +++ b/skeletons/OCTET_STRING.c @@ -914,8 +914,8 @@ static ssize_t OCTET_STRING__convert_binary(void *sptr, void *chunk_buf, size_t * 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 @@ static ssize_t OCTET_STRING__convert_entrefs(void *sptr, void *chunk_buf, size_t 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 a1608eeb..3316ee5a 100644 --- a/skeletons/REAL.c +++ b/skeletons/REAL.c @@ -2,12 +2,16 @@ * Copyright (c) 2004 Lev Walkin . 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 -#include #include /* for strtod(3) */ #include #include #include +#include #undef INT_MAX #define INT_MAX ((int)(((unsigned int)-1) >> 1)) diff --git a/skeletons/ber_decoder.c b/skeletons/ber_decoder.c index c78cfee3..a7543bb0 100644 --- a/skeletons/ber_decoder.c +++ b/skeletons/ber_decoder.c @@ -255,8 +255,8 @@ ber_check_tags(asn_codec_ctx_t *opt_codec_ctx, * 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 10a9e1c3..1534d9b5 100644 --- a/skeletons/ber_tlv_length.c +++ b/skeletons/ber_tlv_length.c @@ -54,8 +54,8 @@ ber_fetch_length(int _is_constructed, void *bufptr, size_t size, /* * 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 17fa0991..0b2fbf6f 100644 --- a/skeletons/tests/check-INTEGER.c +++ b/skeletons/tests/check-INTEGER.c @@ -44,6 +44,7 @@ check(uint8_t *buf, int size, long check_long, int check_ret) { 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 @@ main(int ac, char **av) { 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 dd5d049d..96c224aa 100644 --- a/skeletons/tests/check-OCTET_STRING.c +++ b/skeletons/tests/check-OCTET_STRING.c @@ -89,6 +89,7 @@ main() { check(UTF8, "z", "a b", "a b"); check(UTF8, "z", "a繃b", "a\347\271\203b"); check(UTF8, "z", "a�b", "a�b"); + check(UTF8, "z", "a�b", "a�b"); check(UTF8, "z", "", "aĬ"); check(UTF8, "z", "a&#-300;", "a&#-300;"); check(UTF8, "z", "ab", "a\014b"); diff --git a/skeletons/tests/check-length.c b/skeletons/tests/check-length.c index 3f5c0fe0..9a6d8d67 100644 --- a/skeletons/tests/check-length.c +++ b/skeletons/tests/check-length.c @@ -87,6 +87,7 @@ main() { 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 @@ main() { 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 1fe59bc9..b2f542cd 100644 --- a/skeletons/xer_support.c +++ b/skeletons/xer_support.c @@ -88,7 +88,7 @@ _charclass[256] = { /* * 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;