Skip to content

Commit 95e0fc5

Browse files
committed
Merge pull request #344 from n1tehawk/contrib
refactor example/c/lib_buffer_unpack.c
2 parents a0b7e7c + 720c18b commit 95e0fc5

File tree

1 file changed

+18
-19
lines changed

1 file changed

+18
-19
lines changed

example/c/lib_buffer_unpack.c

Lines changed: 18 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -41,30 +41,35 @@ size_t receiver_recv(receiver *r, char* buf, size_t try_size) {
4141
return actual_size;
4242
}
4343

44+
size_t receiver_to_unpacker(receiver* r, size_t request_size,
45+
msgpack_unpacker *unpacker)
46+
{
47+
// make sure there's enough room, or expand the unpacker accordingly
48+
if (msgpack_unpacker_buffer_capacity(unpacker) < request_size) {
49+
msgpack_unpacker_reserve_buffer(unpacker, request_size);
50+
assert(msgpack_unpacker_buffer_capacity(unpacker) >= request_size);
51+
}
52+
size_t recv_len = receiver_recv(r, msgpack_unpacker_buffer(unpacker),
53+
request_size);
54+
msgpack_unpacker_buffer_consumed(unpacker, recv_len);
55+
return recv_len;
56+
}
57+
4458
#define EACH_RECV_SIZE 4
4559

4660
void unpack(receiver* r) {
4761
/* buf is allocated by unpacker. */
4862
msgpack_unpacker* unp = msgpack_unpacker_new(100);
4963
msgpack_unpacked result;
5064
msgpack_unpack_return ret;
51-
char* buf;
5265
size_t recv_len;
5366
int recv_count = 0;
5467
int i = 0;
5568

5669
msgpack_unpacked_init(&result);
57-
if (msgpack_unpacker_buffer_capacity(unp) < EACH_RECV_SIZE) {
58-
bool expanded = msgpack_unpacker_reserve_buffer(unp, 100);
59-
assert(expanded);
60-
}
61-
buf = msgpack_unpacker_buffer(unp);
62-
63-
recv_len = receiver_recv(r, buf, EACH_RECV_SIZE);
64-
msgpack_unpacker_buffer_consumed(unp, recv_len);
65-
66-
67-
while (recv_len > 0) {
70+
while (true) {
71+
recv_len = receiver_to_unpacker(r, EACH_RECV_SIZE, unp);
72+
if (recv_len == 0) break; // (reached end of input)
6873
printf("receive count: %d %zd bytes received.\n", recv_count++, recv_len);
6974
ret = msgpack_unpacker_next(unp, &result);
7075
while (ret == MSGPACK_UNPACK_SUCCESS) {
@@ -85,15 +90,9 @@ void unpack(receiver* r) {
8590
msgpack_unpacked_destroy(&result);
8691
return;
8792
}
88-
if (msgpack_unpacker_buffer_capacity(unp) < EACH_RECV_SIZE) {
89-
bool expanded = msgpack_unpacker_reserve_buffer(unp, 100);
90-
assert(expanded);
91-
}
92-
buf = msgpack_unpacker_buffer(unp);
93-
recv_len = receiver_recv(r, buf, 4);
94-
msgpack_unpacker_buffer_consumed(unp, recv_len);
9593
}
9694
msgpack_unpacked_destroy(&result);
95+
msgpack_unpacker_free(unp);
9796
}
9897

9998
int main(void) {

0 commit comments

Comments
 (0)