diff options
Diffstat (limited to '')
-rw-r--r-- | src/lib_bit.c | 3 |
1 files changed, 2 insertions, 1 deletions
diff --git a/src/lib_bit.c b/src/lib_bit.c index 38c0f578..e08cd883 100644 --- a/src/lib_bit.c +++ b/src/lib_bit.c | |||
@@ -155,7 +155,8 @@ LJLIB_CF(bit_tohex) LJLIB_REC(.) | |||
155 | #endif | 155 | #endif |
156 | SBuf *sb = lj_buf_tmp_(L); | 156 | SBuf *sb = lj_buf_tmp_(L); |
157 | SFormat sf = (STRFMT_UINT|STRFMT_T_HEX); | 157 | SFormat sf = (STRFMT_UINT|STRFMT_T_HEX); |
158 | if (n < 0) { n = -n; sf |= STRFMT_F_UPPER; } | 158 | if (n < 0) { n = (int32_t)(~(uint32_t)n+1u); sf |= STRFMT_F_UPPER; } |
159 | if ((uint32_t)n > 254) n = 254; | ||
159 | sf |= ((SFormat)((n+1)&255) << STRFMT_SH_PREC); | 160 | sf |= ((SFormat)((n+1)&255) << STRFMT_SH_PREC); |
160 | #if LJ_HASFFI | 161 | #if LJ_HASFFI |
161 | if (n < 16) b &= ((uint64_t)1 << 4*n)-1; | 162 | if (n < 16) b &= ((uint64_t)1 << 4*n)-1; |