aboutsummaryrefslogtreecommitdiff
path: root/src/nvim/msgpack_rpc/packer.c
diff options
context:
space:
mode:
authorbfredl <bjorn.linse@gmail.com>2024-06-14 11:33:27 +0200
committerGitHub <noreply@github.com>2024-06-14 11:33:27 +0200
commitba70404c558169b813f51d5a0bb71cd540555c93 (patch)
treeac3fc5e85d352f749413d39a855b3dac76935157 /src/nvim/msgpack_rpc/packer.c
parent458473acb8d641cadb238726539b119762050a47 (diff)
parent19052e0a06240be018a234d87f51113eca6d17fa (diff)
downloadrneovim-ba70404c558169b813f51d5a0bb71cd540555c93.tar.gz
rneovim-ba70404c558169b813f51d5a0bb71cd540555c93.tar.bz2
rneovim-ba70404c558169b813f51d5a0bb71cd540555c93.zip
Merge pull request #29241 from bfredl/shadapack
refactor(shada): use msgpack_sbuffer less
Diffstat (limited to 'src/nvim/msgpack_rpc/packer.c')
-rw-r--r--src/nvim/msgpack_rpc/packer.c27
1 files changed, 18 insertions, 9 deletions
diff --git a/src/nvim/msgpack_rpc/packer.c b/src/nvim/msgpack_rpc/packer.c
index 9c0d2910fa..58318b88b0 100644
--- a/src/nvim/msgpack_rpc/packer.c
+++ b/src/nvim/msgpack_rpc/packer.c
@@ -10,8 +10,7 @@
static void check_buffer(PackerBuffer *packer)
{
- ptrdiff_t remaining = packer->endptr - packer->ptr;
- if (remaining < MPACK_ITEM_SIZE) {
+ if (mpack_remaining(packer) < MPACK_ITEM_SIZE) {
packer->packer_flush(packer);
}
}
@@ -28,15 +27,20 @@ static void mpack_w8(char **b, const char *data)
#endif
}
+void mpack_uint64(char **ptr, uint64_t i)
+{
+ if (i > 0xfffffff) {
+ mpack_w(ptr, 0xcf);
+ mpack_w8(ptr, (char *)&i);
+ } else {
+ mpack_uint(ptr, (uint32_t)i);
+ }
+}
+
void mpack_integer(char **ptr, Integer i)
{
if (i >= 0) {
- if (i > 0xfffffff) {
- mpack_w(ptr, 0xcf);
- mpack_w8(ptr, (char *)&i);
- } else {
- mpack_uint(ptr, (uint32_t)i);
- }
+ mpack_uint64(ptr, (uint64_t)i);
} else {
if (i < -0x80000000LL) {
mpack_w(ptr, 0xd3);
@@ -80,11 +84,16 @@ void mpack_str(String str, PackerBuffer *packer)
abort();
}
+ mpack_raw(str.data, len, packer);
+}
+
+void mpack_raw(char *data, size_t len, PackerBuffer *packer)
+{
size_t pos = 0;
while (pos < len) {
ptrdiff_t remaining = packer->endptr - packer->ptr;
size_t to_copy = MIN(len - pos, (size_t)remaining);
- memcpy(packer->ptr, str.data + pos, to_copy);
+ memcpy(packer->ptr, data + pos, to_copy);
packer->ptr += to_copy;
pos += to_copy;