Fix error on packing unsigned long long.

This commit is contained in:
Naoki INADA 2009-06-29 10:09:04 +09:00
parent fe2421275d
commit 9015bd4ecf
2 changed files with 22 additions and 14 deletions

View File

@ -9,6 +9,8 @@ cdef extern from "Python.h":
char* PyString_AsString(object o)
int PyMapping_Check(object o)
int PySequence_Check(object o)
long long PyLong_AsLongLong(object o)
unsigned long long PyLong_AsUnsignedLongLong(object o)
cdef extern from "stdlib.h":
void* malloc(size_t)
@ -27,17 +29,18 @@ cdef extern from "pack.h":
msgpack_packer_write callback
void msgpack_packer_init(msgpack_packer* pk, void* data, msgpack_packer_write callback)
void msgpack_pack_int(msgpack_packer* pk, int d)
void msgpack_pack_nil(msgpack_packer* pk)
void msgpack_pack_true(msgpack_packer* pk)
void msgpack_pack_false(msgpack_packer* pk)
void msgpack_pack_long(msgpack_packer* pk, long d)
void msgpack_pack_long_long(msgpack_packer* pk, long long d)
void msgpack_pack_double(msgpack_packer* pk, double d)
void msgpack_pack_array(msgpack_packer* pk, size_t l)
void msgpack_pack_map(msgpack_packer* pk, size_t l)
void msgpack_pack_raw(msgpack_packer* pk, size_t l)
void msgpack_pack_raw_body(msgpack_packer* pk, char* body, size_t l)
int msgpack_pack_int(msgpack_packer* pk, int d)
int msgpack_pack_nil(msgpack_packer* pk)
int msgpack_pack_true(msgpack_packer* pk)
int msgpack_pack_false(msgpack_packer* pk)
int msgpack_pack_long(msgpack_packer* pk, long d)
int msgpack_pack_long_long(msgpack_packer* pk, long long d)
int msgpack_pack_unsigned_long_long(msgpack_packer* pk, unsigned long long d)
int msgpack_pack_double(msgpack_packer* pk, double d)
int msgpack_pack_array(msgpack_packer* pk, size_t l)
int msgpack_pack_map(msgpack_packer* pk, size_t l)
int msgpack_pack_raw(msgpack_packer* pk, size_t l)
int msgpack_pack_raw_body(msgpack_packer* pk, char* body, size_t l)
cdef class Packer(object):
@ -103,6 +106,7 @@ cdef class Packer(object):
cdef __pack(self, object o):
cdef long long llval
cdef unsigned long long ullval
cdef long longval
cdef double fval
cdef char* rawval
@ -114,8 +118,12 @@ cdef class Packer(object):
elif o is False:
msgpack_pack_false(&self.pk)
elif isinstance(o, long):
llval = o
msgpack_pack_long_long(&self.pk, llval)
if o > 0:
ullval = PyLong_AsUnsignedLongLong(o)
msgpack_pack_unsigned_long_long(&self.pk, ullval)
else:
llval = PyLong_AsLongLong(o)
msgpack_pack_long_long(&self.pk, llval)
elif isinstance(o, int):
longval = o
msgpack_pack_long(&self.pk, longval)

View File

@ -7,7 +7,7 @@ from msgpack import packs, unpacks
def check(length, obj):
v = packs(obj)
assert_equal(len(v), length)
assert_equal(len(v), length, "%r length should be %r but get %r" % (obj, length, len(v)))
assert_equal(unpacks(v), obj)
def test_1():