diff options
author | Bryan Newbold <bnewbold@robocracy.org> | 2017-03-03 00:56:40 -0800 |
---|---|---|
committer | Bryan Newbold <bnewbold@robocracy.org> | 2017-03-03 00:56:40 -0800 |
commit | fd5f104f287427fee885583bc398c137674e6af0 (patch) | |
tree | 151d1875fdbbc52fd992f53ee197f7070c5f73d1 /bytenumb.c | |
parent | 90889a692076f2c62486607d0354e0fca52364bc (diff) | |
download | scm-upstream/5f2.tar.gz scm-upstream/5f2.zip |
New upstream version 5f2upstream/5f2upstream
Diffstat (limited to 'bytenumb.c')
-rwxr-xr-x[-rw-r--r--] | bytenumb.c | 13 |
1 files changed, 7 insertions, 6 deletions
diff --git a/bytenumb.c b/bytenumb.c index 30ca469..b5821d3 100644..100755 --- a/bytenumb.c +++ b/bytenumb.c @@ -60,7 +60,8 @@ char * get_bytes(obj, minlen, s_name) obj, ARG1, s_name); { int byvlen = get_bytes_length(obj); - ASRTER(byvlen >= minlen, obj, s_wrong_length, s_name); + ASRTER((minlen < 0) ? byvlen >= -minlen : byvlen == minlen, + MAKINUM(byvlen), s_wrong_length, s_name); return (char*)scm_addr(cons(obj, list_of_0), s_name); } } @@ -74,7 +75,7 @@ SCM scm_bytes_to_integer(sbyts, sn) if (!(n)) return INUM0; { int cnt = abs(n); - char *byts = get_bytes(sbyts, cnt, s_bytes_to_integer); + char *byts = get_bytes(sbyts, -cnt, s_bytes_to_integer); int iu = 0, id = cnt - sizeof(BIGDIG); sizet ndigs = (cnt + sizeof(BIGDIG) - 1) / sizeof(BIGDIG); int negp = (0x80 & byts[0]) && (0 > n); @@ -83,7 +84,7 @@ SCM scm_bytes_to_integer(sbyts, sn) if (negp) for (; iu < ndigs; iu++) { int j = 0; - unsigned long dig = 0; + UBIGLONG dig = 0; for (; j < sizeof(BIGDIG); j++) { dig = (dig<<8) + (0xFF ^ ((id + j >= 0) ? (((unsigned char *)byts)[id + j]) : 255)); @@ -131,7 +132,7 @@ SCM scm_integer_to_bytes(sn, slen) } } else { - unsigned long res = n; + UBIGLONG res = n; while (!(0 > idx)) { byts[idx--] = res % 0x100; res = res>>8; @@ -143,7 +144,7 @@ SCM scm_integer_to_bytes(sn, slen) BIGDIG *digs = BDIGITS(sn), borrow = 1; sizet ndigs = NUMDIGS(sn); int iu = 0, id = abs(len) - 1; - unsigned long dig; + UBIGLONG dig; if ((0 > len) && (TYP16(sn)==tc16_bigneg)) for (; 0 <= id ; iu++) { sizet j = sizeof(BIGDIG); @@ -400,7 +401,7 @@ static char s_integer_byte_collate_M[] = "integer-byte-collate!"; SCM scm_integer_byte_collate_M(byte_vector) SCM byte_vector; { - char* bv = get_bytes(byte_vector, 1, s_integer_byte_collate_M); + char* bv = get_bytes(byte_vector, -1, s_integer_byte_collate_M); bv[0] = 0x80^(bv[0]); return byte_vector; } |