@@ -9,6 +9,8 @@ cdef extern from "Python.h":
99 char * PyString_AsString(object o)
1010 int PyMapping_Check(object o)
1111 int PySequence_Check(object o)
12+ long long PyLong_AsLongLong(object o)
13+ unsigned long long PyLong_AsUnsignedLongLong(object o)
1214
1315cdef extern from " stdlib.h" :
1416 void * malloc(size_t)
@@ -27,17 +29,18 @@ cdef extern from "pack.h":
2729 msgpack_packer_write callback
2830
2931 void msgpack_packer_init(msgpack_packer* pk, void * data, msgpack_packer_write callback)
30- void msgpack_pack_int(msgpack_packer* pk, int d)
31- void msgpack_pack_nil(msgpack_packer* pk)
32- void msgpack_pack_true(msgpack_packer* pk)
33- void msgpack_pack_false(msgpack_packer* pk)
34- void msgpack_pack_long(msgpack_packer* pk, long d)
35- void msgpack_pack_long_long(msgpack_packer* pk, long long d)
36- void msgpack_pack_double(msgpack_packer* pk, double d)
37- void msgpack_pack_array(msgpack_packer* pk, size_t l)
38- void msgpack_pack_map(msgpack_packer* pk, size_t l)
39- void msgpack_pack_raw(msgpack_packer* pk, size_t l)
40- void msgpack_pack_raw_body(msgpack_packer* pk, char * body, size_t l)
32+ int msgpack_pack_int(msgpack_packer* pk, int d)
33+ int msgpack_pack_nil(msgpack_packer* pk)
34+ int msgpack_pack_true(msgpack_packer* pk)
35+ int msgpack_pack_false(msgpack_packer* pk)
36+ int msgpack_pack_long(msgpack_packer* pk, long d)
37+ int msgpack_pack_long_long(msgpack_packer* pk, long long d)
38+ int msgpack_pack_unsigned_long_long(msgpack_packer* pk, unsigned long long d)
39+ int msgpack_pack_double(msgpack_packer* pk, double d)
40+ int msgpack_pack_array(msgpack_packer* pk, size_t l)
41+ int msgpack_pack_map(msgpack_packer* pk, size_t l)
42+ int msgpack_pack_raw(msgpack_packer* pk, size_t l)
43+ int msgpack_pack_raw_body(msgpack_packer* pk, char * body, size_t l)
4144
4245
4346cdef class Packer(object ):
@@ -103,6 +106,7 @@ cdef class Packer(object):
103106
104107 cdef __pack(self , object o):
105108 cdef long long llval
109+ cdef unsigned long long ullval
106110 cdef long longval
107111 cdef double fval
108112 cdef char * rawval
@@ -114,8 +118,12 @@ cdef class Packer(object):
114118 elif o is False :
115119 msgpack_pack_false(& self .pk)
116120 elif isinstance (o, long ):
117- llval = o
118- msgpack_pack_long_long(& self .pk, llval)
121+ if o > 0 :
122+ ullval = PyLong_AsUnsignedLongLong(o)
123+ msgpack_pack_unsigned_long_long(& self .pk, ullval)
124+ else :
125+ llval = PyLong_AsLongLong(o)
126+ msgpack_pack_long_long(& self .pk, llval)
119127 elif isinstance (o, int ):
120128 longval = o
121129 msgpack_pack_long(& self .pk, longval)
0 commit comments