mirror of
https://github.com/msgpack/msgpack-python.git
synced 2025-10-20 12:23:16 +00:00
parent
ab359e3330
commit
e9ab4d8824
3 changed files with 18 additions and 18 deletions
|
@ -37,10 +37,10 @@ cdef extern from "unpack.h":
|
||||||
ctypedef struct unpack_context:
|
ctypedef struct unpack_context:
|
||||||
msgpack_user user
|
msgpack_user user
|
||||||
PyObject* obj
|
PyObject* obj
|
||||||
size_t count
|
Py_ssize_t count
|
||||||
|
|
||||||
ctypedef int (*execute_fn)(unpack_context* ctx, const char* data,
|
ctypedef int (*execute_fn)(unpack_context* ctx, const char* data,
|
||||||
size_t len, size_t* off) except? -1
|
Py_ssize_t len, Py_ssize_t* off) except? -1
|
||||||
execute_fn unpack_construct
|
execute_fn unpack_construct
|
||||||
execute_fn unpack_skip
|
execute_fn unpack_skip
|
||||||
execute_fn read_array_header
|
execute_fn read_array_header
|
||||||
|
@ -112,7 +112,7 @@ def unpackb(object packed, object object_hook=None, object list_hook=None,
|
||||||
See :class:`Unpacker` for options.
|
See :class:`Unpacker` for options.
|
||||||
"""
|
"""
|
||||||
cdef unpack_context ctx
|
cdef unpack_context ctx
|
||||||
cdef size_t off = 0
|
cdef Py_ssize_t off = 0
|
||||||
cdef int ret
|
cdef int ret
|
||||||
|
|
||||||
cdef char* buf
|
cdef char* buf
|
||||||
|
@ -142,7 +142,7 @@ def unpackb(object packed, object object_hook=None, object list_hook=None,
|
||||||
raise ExtraData(obj, PyBytes_FromStringAndSize(buf+off, buf_len-off))
|
raise ExtraData(obj, PyBytes_FromStringAndSize(buf+off, buf_len-off))
|
||||||
return obj
|
return obj
|
||||||
else:
|
else:
|
||||||
raise UnpackValueError("Unpack failed: error = %d" % (ret,))
|
raise UnpackValueError("Unpack failed: error = %s" % (ret,))
|
||||||
|
|
||||||
|
|
||||||
def unpack(object stream, object object_hook=None, object list_hook=None,
|
def unpack(object stream, object object_hook=None, object list_hook=None,
|
||||||
|
@ -233,14 +233,14 @@ cdef class Unpacker(object):
|
||||||
"""
|
"""
|
||||||
cdef unpack_context ctx
|
cdef unpack_context ctx
|
||||||
cdef char* buf
|
cdef char* buf
|
||||||
cdef size_t buf_size, buf_head, buf_tail
|
cdef Py_ssize_t buf_size, buf_head, buf_tail
|
||||||
cdef object file_like
|
cdef object file_like
|
||||||
cdef object file_like_read
|
cdef object file_like_read
|
||||||
cdef Py_ssize_t read_size
|
cdef Py_ssize_t read_size
|
||||||
# To maintain refcnt.
|
# To maintain refcnt.
|
||||||
cdef object object_hook, object_pairs_hook, list_hook, ext_hook
|
cdef object object_hook, object_pairs_hook, list_hook, ext_hook
|
||||||
cdef object encoding, unicode_errors
|
cdef object encoding, unicode_errors
|
||||||
cdef size_t max_buffer_size
|
cdef Py_ssize_t max_buffer_size
|
||||||
|
|
||||||
def __cinit__(self):
|
def __cinit__(self):
|
||||||
self.buf = NULL
|
self.buf = NULL
|
||||||
|
@ -325,10 +325,10 @@ cdef class Unpacker(object):
|
||||||
cdef:
|
cdef:
|
||||||
char* buf = self.buf
|
char* buf = self.buf
|
||||||
char* new_buf
|
char* new_buf
|
||||||
size_t head = self.buf_head
|
Py_ssize_t head = self.buf_head
|
||||||
size_t tail = self.buf_tail
|
Py_ssize_t tail = self.buf_tail
|
||||||
size_t buf_size = self.buf_size
|
Py_ssize_t buf_size = self.buf_size
|
||||||
size_t new_size
|
Py_ssize_t new_size
|
||||||
|
|
||||||
if tail + _buf_len > buf_size:
|
if tail + _buf_len > buf_size:
|
||||||
if ((tail - head) + _buf_len) <= buf_size:
|
if ((tail - head) + _buf_len) <= buf_size:
|
||||||
|
@ -374,7 +374,7 @@ cdef class Unpacker(object):
|
||||||
cdef object _unpack(self, execute_fn execute, object write_bytes, bint iter=0):
|
cdef object _unpack(self, execute_fn execute, object write_bytes, bint iter=0):
|
||||||
cdef int ret
|
cdef int ret
|
||||||
cdef object obj
|
cdef object obj
|
||||||
cdef size_t prev_head
|
cdef Py_ssize_t prev_head
|
||||||
|
|
||||||
if self.buf_head >= self.buf_tail and self.file_like is not None:
|
if self.buf_head >= self.buf_tail and self.file_like is not None:
|
||||||
self.read_from_file()
|
self.read_from_file()
|
||||||
|
@ -408,7 +408,7 @@ cdef class Unpacker(object):
|
||||||
|
|
||||||
def read_bytes(self, Py_ssize_t nbytes):
|
def read_bytes(self, Py_ssize_t nbytes):
|
||||||
"""Read a specified number of raw bytes from the stream"""
|
"""Read a specified number of raw bytes from the stream"""
|
||||||
cdef size_t nread
|
cdef Py_ssize_t nread
|
||||||
nread = min(self.buf_tail - self.buf_head, nbytes)
|
nread = min(self.buf_tail - self.buf_head, nbytes)
|
||||||
ret = PyBytes_FromStringAndSize(self.buf + self.buf_head, nread)
|
ret = PyBytes_FromStringAndSize(self.buf + self.buf_head, nread)
|
||||||
self.buf_head += nread
|
self.buf_head += nread
|
||||||
|
|
|
@ -33,7 +33,7 @@ typedef struct unpack_user {
|
||||||
typedef PyObject* msgpack_unpack_object;
|
typedef PyObject* msgpack_unpack_object;
|
||||||
struct unpack_context;
|
struct unpack_context;
|
||||||
typedef struct unpack_context unpack_context;
|
typedef struct unpack_context unpack_context;
|
||||||
typedef int (*execute_fn)(unpack_context *ctx, const char* data, size_t len, size_t* off);
|
typedef int (*execute_fn)(unpack_context *ctx, const char* data, Py_ssize_t len, Py_ssize_t* off);
|
||||||
|
|
||||||
static inline msgpack_unpack_object unpack_callback_root(unpack_user* u)
|
static inline msgpack_unpack_object unpack_callback_root(unpack_user* u)
|
||||||
{
|
{
|
||||||
|
|
|
@ -24,8 +24,8 @@
|
||||||
|
|
||||||
typedef struct unpack_stack {
|
typedef struct unpack_stack {
|
||||||
PyObject* obj;
|
PyObject* obj;
|
||||||
size_t size;
|
Py_ssize_t size;
|
||||||
size_t count;
|
Py_ssize_t count;
|
||||||
unsigned int ct;
|
unsigned int ct;
|
||||||
PyObject* map_key;
|
PyObject* map_key;
|
||||||
} unpack_stack;
|
} unpack_stack;
|
||||||
|
@ -72,7 +72,7 @@ static inline PyObject* unpack_data(unpack_context* ctx)
|
||||||
|
|
||||||
|
|
||||||
template <bool construct>
|
template <bool construct>
|
||||||
static inline int unpack_execute(unpack_context* ctx, const char* data, size_t len, size_t* off)
|
static inline int unpack_execute(unpack_context* ctx, const char* data, Py_ssize_t len, Py_ssize_t* off)
|
||||||
{
|
{
|
||||||
assert(len >= *off);
|
assert(len >= *off);
|
||||||
|
|
||||||
|
@ -89,7 +89,7 @@ static inline int unpack_execute(unpack_context* ctx, const char* data, size_t l
|
||||||
*/
|
*/
|
||||||
unpack_user* user = &ctx->user;
|
unpack_user* user = &ctx->user;
|
||||||
|
|
||||||
PyObject* obj;
|
PyObject* obj = NULL;
|
||||||
unpack_stack* c = NULL;
|
unpack_stack* c = NULL;
|
||||||
|
|
||||||
int ret;
|
int ret;
|
||||||
|
@ -409,7 +409,7 @@ _end:
|
||||||
#undef start_container
|
#undef start_container
|
||||||
|
|
||||||
template <unsigned int fixed_offset, unsigned int var_offset>
|
template <unsigned int fixed_offset, unsigned int var_offset>
|
||||||
static inline int unpack_container_header(unpack_context* ctx, const char* data, size_t len, size_t* off)
|
static inline int unpack_container_header(unpack_context* ctx, const char* data, Py_ssize_t len, Py_ssize_t* off)
|
||||||
{
|
{
|
||||||
assert(len >= *off);
|
assert(len >= *off);
|
||||||
uint32_t size;
|
uint32_t size;
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue