diff options
| author | Hideyuki Tanaka <tanaka.hideyuki@gmail.com> | 2010-05-30 19:11:04 +0900 |
|---|---|---|
| committer | Hideyuki Tanaka <tanaka.hideyuki@gmail.com> | 2010-05-30 19:11:04 +0900 |
| commit | e61dc76ae1abb6235d09b52ad24383ccd75d5222 (patch) | |
| tree | 4cbb877ee42bddbb4d0f67f0b0f47277666ce5d6 /haskell/src/Data | |
| parent | 0da22193bd628690bfc58d4c36d6d48493fa7f51 (diff) | |
| download | msgpack-python-e61dc76ae1abb6235d09b52ad24383ccd75d5222.tar.gz | |
fix peek object
Diffstat (limited to 'haskell/src/Data')
| -rw-r--r-- | haskell/src/Data/MessagePack/Base.hsc | 18 |
1 files changed, 10 insertions, 8 deletions
diff --git a/haskell/src/Data/MessagePack/Base.hsc b/haskell/src/Data/MessagePack/Base.hsc index 8c7b9f5..b6cdc28 100644 --- a/haskell/src/Data/MessagePack/Base.hsc +++ b/haskell/src/Data/MessagePack/Base.hsc @@ -506,20 +506,22 @@ peekObjectRAW ptr = do peekObjectArray :: Ptr a -> IO Object peekObjectArray ptr = do - size <- (#peek msgpack_object, via.array.size) ptr - p <- (#peek msgpack_object, via.array.ptr) ptr - objs <- mapM (\i -> peekObject $ p `plusPtr` + csize <- (#peek msgpack_object, via.array.size) ptr + let size = fromIntegral (csize :: Word32) + p <- (#peek msgpack_object, via.array.ptr) ptr + objs <- mapM (\i -> peekObject $ p `plusPtr` ((#size msgpack_object) * i)) - [0..size-1] + [0..size-1] return $ ObjectArray objs peekObjectMap :: Ptr a -> IO Object peekObjectMap ptr = do - size <- (#peek msgpack_object, via.map.size) ptr - p <- (#peek msgpack_object, via.map.ptr) ptr - dat <- mapM (\i -> peekObjectKV $ p `plusPtr` + csize <- (#peek msgpack_object, via.map.size) ptr + let size = fromIntegral (csize :: Word32) + p <- (#peek msgpack_object, via.map.ptr) ptr + dat <- mapM (\i -> peekObjectKV $ p `plusPtr` ((#size msgpack_object_kv) * i)) - [0..size-1] + [0..size-1] return $ ObjectMap dat peekObjectKV :: Ptr a -> IO (Object, Object) |
