diff options
| author | Thiago de Arruda <tpadilha84@gmail.com> | 2014-05-26 14:10:38 -0300 |
|---|---|---|
| committer | Thiago de Arruda <tpadilha84@gmail.com> | 2014-05-26 14:10:38 -0300 |
| commit | 7df7d6bb5baff62942af94f41de142159657569e (patch) | |
| tree | 76a99c2b9214e33fb7eac1c30f7ae0f586f818a6 /src/nvim/os/msgpack_rpc.c | |
| parent | fc7bc0412ee111cdea61c89f3ec2461601013fa2 (diff) | |
| parent | cbf9564ee01535e3a2168219ef8f84f857519da3 (diff) | |
| download | rneovim-7df7d6bb5baff62942af94f41de142159657569e.tar.gz rneovim-7df7d6bb5baff62942af94f41de142159657569e.tar.bz2 rneovim-7df7d6bb5baff62942af94f41de142159657569e.zip | |
Merge branch 'api-events'
Diffstat (limited to 'src/nvim/os/msgpack_rpc.c')
| -rw-r--r-- | src/nvim/os/msgpack_rpc.c | 33 |
1 files changed, 29 insertions, 4 deletions
diff --git a/src/nvim/os/msgpack_rpc.c b/src/nvim/os/msgpack_rpc.c index d7ffa6f559..423c5d584d 100644 --- a/src/nvim/os/msgpack_rpc.c +++ b/src/nvim/os/msgpack_rpc.c @@ -1,3 +1,6 @@ +#include <stdint.h> +#include <stdbool.h> + #include <msgpack.h> #include "nvim/os/msgpack_rpc.h" @@ -52,7 +55,7 @@ free(value.items); \ } -void msgpack_rpc_call(msgpack_object *req, msgpack_packer *res) +void msgpack_rpc_call(uint64_t id, msgpack_object *req, msgpack_packer *res) { // The initial response structure is the same no matter what happens, // we set it up here @@ -107,7 +110,16 @@ void msgpack_rpc_call(msgpack_object *req, msgpack_packer *res) } // dispatch the message - msgpack_rpc_dispatch(req, res); + msgpack_rpc_dispatch(id, req, res); +} + +void msgpack_rpc_notification(String type, Object data, msgpack_packer *pac) +{ + msgpack_pack_array(pac, 3); + msgpack_pack_int(pac, 2); + msgpack_pack_raw(pac, type.size); + msgpack_pack_raw_body(pac, type.data, type.size); + msgpack_rpc_from_object(data, pac); } void msgpack_rpc_error(char *msg, msgpack_packer *res) @@ -147,9 +159,13 @@ bool msgpack_rpc_to_float(msgpack_object *obj, Float *arg) bool msgpack_rpc_to_string(msgpack_object *obj, String *arg) { - arg->data = (char *)obj->via.raw.ptr; + if (obj->type != MSGPACK_OBJECT_RAW) { + return false; + } + + arg->data = xmemdup(obj->via.raw.ptr, obj->via.raw.size); arg->size = obj->via.raw.size; - return obj->type == MSGPACK_OBJECT_RAW; + return true; } bool msgpack_rpc_to_object(msgpack_object *obj, Object *arg) @@ -328,6 +344,15 @@ void msgpack_rpc_from_dictionary(Dictionary result, msgpack_packer *res) } } +void msgpack_rpc_free_string(String value) +{ + if (!value.data) { + return; + } + + free(value.data); +} + void msgpack_rpc_free_object(Object value) { switch (value.type) { |
