summaryrefslogtreecommitdiffhomepage
path: root/src
diff options
context:
space:
mode:
authorTomoyuki Sahara <[email protected]>2015-08-07 11:51:01 +0900
committerTomoyuki Sahara <[email protected]>2015-08-07 11:51:01 +0900
commite8efd10bd9750fd3769b46a0b2888ef9ae215991 (patch)
tree76564976a980dc01cc13cfb4da92a5df5f1b30fe /src
parent4603047eb1a053cf566ab82444453b6f154b920a (diff)
downloadmruby-e8efd10bd9750fd3769b46a0b2888ef9ae215991.tar.gz
mruby-e8efd10bd9750fd3769b46a0b2888ef9ae215991.zip
make pack_l simpler.
Diffstat (limited to 'src')
-rw-r--r--src/pack.c37
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;