コード例 #1
0
ファイル: unpacker_class.c プロジェクト: fiksu/msgpack-ruby
static VALUE Unpacker_reset(VALUE self)
{
    UNPACKER(self, uk);

    msgpack_unpacker_reset(uk);

    return Qnil;
}
コード例 #2
0
ファイル: unpack.c プロジェクト: darrenjs/nexio
msgpack_unpack_return msgpack_unpacker_next(msgpack_unpacker* mpac,
                                            msgpack_unpacked* result)
{
    int ret;

    ret = unpacker_next(mpac, result);
    if (ret == MSGPACK_UNPACK_SUCCESS) {
        msgpack_unpacker_reset(mpac);
    }

    return ret;
}
コード例 #3
0
ファイル: unpack.c プロジェクト: darrenjs/nexio
msgpack_unpack_return
msgpack_unpacker_next_with_size(msgpack_unpacker* mpac,
                                msgpack_unpacked* result, size_t *p_bytes)
{
    int ret;

    ret = unpacker_next(mpac, result);
    if (ret == MSGPACK_UNPACK_SUCCESS || ret == MSGPACK_UNPACK_CONTINUE) {
        *p_bytes = mpac->parsed;
    }

    if (ret == MSGPACK_UNPACK_SUCCESS) {
        msgpack_unpacker_reset(mpac);
    }

    return ret;
}
コード例 #4
0
VALUE MessagePack_unpack(int argc, VALUE* argv)
{
    VALUE src;

    switch(argc) {
    case 1:
        src = argv[0];
        break;
    default:
        rb_raise(rb_eArgError, "wrong number of arguments (%d for 1)", argc);
    }

    VALUE io = Qnil;
    if(rb_type(src) != T_STRING) {
        io = src;
        src = Qnil;
    }

    // TODO create an instance if io is set for thread safety?
    //VALUE self = Unpacker_alloc(cMessagePack_Unpacker);
    //UNPACKER(self, uk);
    msgpack_unpacker_reset(s_unpacker);
    msgpack_buffer_reset_io(UNPACKER_BUFFER_(s_unpacker));

    if(io != Qnil) {
        MessagePack_Buffer_initialize(UNPACKER_BUFFER_(s_unpacker), io, Qnil);
    }

    if(src != Qnil) {
        /* prefer reference than copying; see MessagePack_Unpacker_module_init */
        msgpack_buffer_append_string(UNPACKER_BUFFER_(s_unpacker), src);
    }

    int r = msgpack_unpacker_read(s_unpacker, 0);
    if(r < 0) {
        raise_unpacker_error(r);
    }

    /* raise if extra bytes follow */
    if(msgpack_buffer_top_readable_size(UNPACKER_BUFFER_(s_unpacker)) > 0) {
        rb_raise(eMalformedFormatError, "extra bytes follow after a deserialized object");
    }

    return msgpack_unpacker_get_last_object(s_unpacker);
}
コード例 #5
0
ファイル: unpack.c プロジェクト: snej/msgpack-c
bool msgpack_unpacker_next(msgpack_unpacker* mpac, msgpack_unpacked* result)
{
    if(result->zone != NULL) {
        msgpack_zone_free(result->zone);
    }

    int ret = msgpack_unpacker_execute(mpac);

    if(ret <= 0) {
        result->zone = NULL;
        memset(&result->data, 0, sizeof(msgpack_object));
        return false;
    }

    result->zone = msgpack_unpacker_release_zone(mpac);
    result->data = msgpack_unpacker_data(mpac);
    msgpack_unpacker_reset(mpac);

    return true;
}
コード例 #6
0
ファイル: unpack.c プロジェクト: DJoser/minko
msgpack_unpack_return msgpack_unpacker_next(msgpack_unpacker* mpac, msgpack_unpacked* result)
{
    msgpack_unpacked_destroy(result);

    int ret = msgpack_unpacker_execute(mpac);

    if(ret < 0) {
        result->zone = NULL;
        memset(&result->data, 0, sizeof(msgpack_object));
        return MSGPACK_UNPACK_PARSE_ERROR;
    }

    if(ret == 0) {
        return MSGPACK_UNPACK_CONTINUE;
    }
    result->zone = msgpack_unpacker_release_zone(mpac);
    result->data = msgpack_unpacker_data(mpac);
    msgpack_unpacker_reset(mpac);

    return MSGPACK_UNPACK_SUCCESS;
}