diff options
| author | Tomoyuki Sahara <[email protected]> | 2015-08-07 11:51:01 +0900 |
|---|---|---|
| committer | Tomoyuki Sahara <[email protected]> | 2015-08-07 11:51:01 +0900 |
| commit | e8efd10bd9750fd3769b46a0b2888ef9ae215991 (patch) | |
| tree | 76564976a980dc01cc13cfb4da92a5df5f1b30fe /src | |
| parent | 4603047eb1a053cf566ab82444453b6f154b920a (diff) | |
| download | mruby-e8efd10bd9750fd3769b46a0b2888ef9ae215991.tar.gz mruby-e8efd10bd9750fd3769b46a0b2888ef9ae215991.zip | |
make pack_l simpler.
Diffstat (limited to 'src')
| -rw-r--r-- | src/pack.c | 37 |
1 files changed, 15 insertions, 22 deletions
diff --git a/src/pack.c b/src/pack.c index 3a750eb69..1ceda8c11 100644 --- a/src/pack.c +++ b/src/pack.c @@ -192,37 +192,30 @@ static int unpack_l(mrb_state *mrb, const unsigned char *src, int srclen, mrb_value ary, unsigned int flags) { char msg[60]; - unsigned long ul; - long sl; + uint32_t ul; mrb_int n; + if (flags & PACK_FLAG_LITTLEENDIAN) { + ul = (uint32_t)src[3] * 256*256*256; + ul += (uint32_t)src[2] *256*256; + ul += (uint32_t)src[1] *256; + ul += (uint32_t)src[0]; + } else { + ul = (uint32_t)src[0] * 256*256*256; + ul += (uint32_t)src[1] *256*256; + ul += (uint32_t)src[2] *256; + ul += (uint32_t)src[3]; + } if (flags & PACK_FLAG_SIGNED) { - if (flags & PACK_FLAG_LITTLEENDIAN) { - sl = (signed long)(signed char)src[3] * 256*256*256; - sl += (src[2] *256*256) + (src[1] * 256) + src[0]; - } else { - sl = (signed long)(signed char)src[0] * 256*256*256; - sl += (src[1] *256*256) + (src[2] * 256) + src[3]; - } + int32_t sl = ul; if (!FIXABLE(sl)) { - snprintf(msg, sizeof(msg), "cannot unpack to Fixnum: %ld", sl); + snprintf(msg, sizeof(msg), "cannot unpack to Fixnum: %ld", (long)sl); mrb_raise(mrb, E_RANGE_ERROR, msg); } n = sl; } else { - if (flags & PACK_FLAG_LITTLEENDIAN) { - ul = (unsigned long)src[3] * 256*256*256; - ul += (unsigned long)src[2] *256*256; - ul += (unsigned long)src[1] *256; - ul += (unsigned long)src[0]; - } else { - ul = (unsigned long)src[0] * 256*256*256; - ul += (unsigned long)src[1] *256*256; - ul += (unsigned long)src[2] *256; - ul += (unsigned long)src[3]; - } if (!POSFIXABLE(ul)) { - snprintf(msg, sizeof(msg), "cannot unpack to Fixnum: %lu", ul); + snprintf(msg, sizeof(msg), "cannot unpack to Fixnum: %lu", (unsigned long)ul); mrb_raise(mrb, E_RANGE_ERROR, msg); } n = ul; |
