diff --git a/src/lib/mpstream/mpstream.c b/src/lib/mpstream/mpstream.c index 3cff2dad96ea3e1b750e9adb1d5a51caa271fc60..f397dee0b31cf86cc4e6db4797d108e316cb4f26 100644 --- a/src/lib/mpstream/mpstream.c +++ b/src/lib/mpstream/mpstream.c @@ -40,19 +40,6 @@ mpstream_reserve_slow(struct mpstream *stream, size_t size) stream->end = stream->pos + size; } -void -mpstream_reset(struct mpstream *stream) -{ - size_t size = 0; - stream->buf = stream->reserve(stream->ctx, &size); - if (stream->buf == NULL) { - diag_set(OutOfMemory, size, "mpstream", "reset"); - stream->error(stream->error_ctx); - } - stream->pos = stream->buf; - stream->end = stream->pos + size; -} - /** * A streaming API so that it's possible to encode to any output * stream. @@ -67,7 +54,9 @@ mpstream_init(struct mpstream *stream, void *ctx, stream->alloc = alloc; stream->error = error; stream->error_ctx = error_ctx; - mpstream_reset(stream); + stream->buf = NULL; + stream->pos = NULL; + stream->end = NULL; } void diff --git a/src/lib/mpstream/mpstream.h b/src/lib/mpstream/mpstream.h index 9fdd0c2aba69483904b88fb624b74435238973a2..456b407f04792d36e914893ad7448feabee1895c 100644 --- a/src/lib/mpstream/mpstream.h +++ b/src/lib/mpstream/mpstream.h @@ -57,9 +57,6 @@ mpstream_panic_cb(void *error_ctx); void mpstream_reserve_slow(struct mpstream *stream, size_t size); -void -mpstream_reset(struct mpstream *stream); - /** * A streaming API so that it's possible to encode to any output * stream. @@ -72,7 +69,8 @@ mpstream_init(struct mpstream *stream, void *ctx, static inline void mpstream_flush(struct mpstream *stream) { - stream->alloc(stream->ctx, stream->pos - stream->buf); + if (stream->pos != stream->buf) + stream->alloc(stream->ctx, stream->pos - stream->buf); stream->buf = stream->pos; } diff --git a/test/unit/lua_msgpack.c b/test/unit/lua_msgpack.c index ab8a996e60d320627087a40e88f0a4d2fa6dd258..fd6d194d9900feb1744b4c4cfc839f86ba50dead 100644 --- a/test/unit/lua_msgpack.c +++ b/test/unit/lua_msgpack.c @@ -61,7 +61,6 @@ test_encode_ext(lua_State *L) "UUID is correctly encoded as MP_EXT"); ok(type == MP_EXT, "type of UUID is MP_EXT"); ibuf_reset(ibuf); - mpstream_reset(&stream); cord_ibuf_drop(ibuf); mh_strnu32_delete(translation); @@ -91,12 +90,12 @@ test_translation_in_encoding(lua_State *L) struct ibuf *ibuf = cord_ibuf_take(); struct mpstream stream; - mpstream_init(&stream, ibuf, ibuf_reserve_cb, ibuf_alloc_cb, - mpstream_error_mock, L); lua_createtable(L, 0, 1); lua_pushboolean(L, true); lua_setfield(L, 1, alias); + mpstream_init(&stream, ibuf, ibuf_reserve_cb, ibuf_alloc_cb, + mpstream_error_mock, L); luamp_encode_with_translation(L, luaL_msgpack_default, &stream, 1, translation, NULL); lua_pop(L, 1); @@ -104,13 +103,14 @@ test_translation_in_encoding(lua_State *L) ok(strncmp(ibuf->buf, "\x81\x00\xc3", ibuf_used(ibuf)) == 0, "first-level MP_MAP key is translated"); ibuf_reset(ibuf); - mpstream_reset(&stream); lua_createtable(L, 0, 1); lua_createtable(L, 0, 1); lua_pushboolean(L, true); lua_setfield(L, -2, alias); lua_setfield(L, -2, "k"); + mpstream_init(&stream, ibuf, ibuf_reserve_cb, ibuf_alloc_cb, + mpstream_error_mock, L); luamp_encode_with_translation(L, luaL_msgpack_default, &stream, 1, translation, NULL); lua_pop(L, 1); @@ -118,19 +118,19 @@ test_translation_in_encoding(lua_State *L) ok(strncmp(ibuf->buf, "\x81\xa1k\x81\xa1x\xc3", ibuf_used(ibuf)) == 0, "only first-level MP_MAP key is translated"); ibuf_reset(ibuf); - mpstream_reset(&stream); lua_createtable(L, 0, 1); lua_pushnumber(L, 0); lua_pushboolean(L, true); lua_settable(L, -3); + mpstream_init(&stream, ibuf, ibuf_reserve_cb, ibuf_alloc_cb, + mpstream_error_mock, L); luamp_encode_with_translation(L, luaL_msgpack_default, &stream, 1, translation, NULL); mpstream_flush(&stream); ok(strncmp(ibuf->buf, "\x81\x00\xc3", ibuf_used(ibuf)) == 0, "only keys with MP_STRING type are translated"); ibuf_reset(ibuf); - mpstream_reset(&stream); lua_createtable(L, 0, 1); lua_pushboolean(L, true); @@ -138,6 +138,8 @@ test_translation_in_encoding(lua_State *L) lua_pushnumber(L, 0); lua_pushboolean(L, false); lua_settable(L, -3); + mpstream_init(&stream, ibuf, ibuf_reserve_cb, ibuf_alloc_cb, + mpstream_error_mock, L); luamp_encode_with_translation(L, luaL_msgpack_default, &stream, 1, translation, NULL); lua_pop(L, 1); @@ -147,7 +149,6 @@ test_translation_in_encoding(lua_State *L) "MP_MAP key that is the value of the translation are translated " "correctly"); ibuf_reset(ibuf); - mpstream_reset(&stream); cord_ibuf_drop(ibuf); mh_strnu32_delete(translation);