summaryrefslogtreecommitdiffstats
path: root/ffi.c
diff options
context:
space:
mode:
authorKaz Kylheku <kaz@kylheku.com>2019-01-24 07:13:03 -0800
committerKaz Kylheku <kaz@kylheku.com>2019-01-24 07:13:03 -0800
commit656237392cecce74737e583a57c6aa41b866e50b (patch)
tree332e0302126e6673550485cc08726cdd8105ef9f /ffi.c
parentea68a3bfa64a5e652ee45227d7aff1aba73c001b (diff)
downloadtxr-656237392cecce74737e583a57c6aa41b866e50b.tar.gz
txr-656237392cecce74737e583a57c6aa41b866e50b.tar.bz2
txr-656237392cecce74737e583a57c6aa41b866e50b.zip
ffi: incorrect big endian int64 get.
* ffi.c (ffi_le_i64_get): Fix wrong array indices, causing lower half of 64 bit word to be taken as the upper half.
Diffstat (limited to 'ffi.c')
-rw-r--r--ffi.c4
1 files changed, 2 insertions, 2 deletions
diff --git a/ffi.c b/ffi.c
index 672d5749..31150f82 100644
--- a/ffi.c
+++ b/ffi.c
@@ -1087,8 +1087,8 @@ static val ffi_le_i64_get(struct txr_ffi_type *tft, mem_t *src, val self)
n = -((n ^ 0xFFFFFFFFFFFFFFFF) + 1);
return num(n);
#else
- cnum hi32 = (convert(cnum, src[3]) << 24 | convert(cnum, src[2]) << 16 |
- convert(cnum, src[1]) << 8 | src[0]);
+ cnum hi32 = (convert(cnum, src[7]) << 24 | convert(cnum, src[6]) << 16 |
+ convert(cnum, src[5]) << 8 | src[4]);
ucnum lo32 = (convert(ucnum, src[3]) << 24 | convert(ucnum, src[2]) << 16 |
convert(ucnum, src[1]) << 8 | src[0]);
return logior(ash(num(hi32), num_fast(32)), unum(lo32));