Skip to content

Commit b1725d4

Browse files
committed
vrefbuffer: set default ref_size and chunk_size
1 parent 102dba8 commit b1725d4

File tree

5 files changed

+310
-47
lines changed

5 files changed

+310
-47
lines changed

src/vrefbuffer.c

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,12 @@ bool msgpack_vrefbuffer_init(msgpack_vrefbuffer* vbuf,
2525
struct iovec* array;
2626
msgpack_vrefbuffer_chunk* chunk;
2727

28+
if (ref_size == 0) {
29+
ref_size = MSGPACK_VREFBUFFER_REF_SIZE;
30+
}
31+
if(chunk_size == 0) {
32+
chunk_size = MSGPACK_VREFBUFFER_CHUNK_SIZE;
33+
}
2834
vbuf->chunk_size = chunk_size;
2935
vbuf->ref_size =
3036
ref_size > MSGPACK_PACKER_MAX_BUFFER_SIZE + 1 ?

test/CMakeLists.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ INCLUDE_DIRECTORIES (
88
)
99

1010
SET (tests_C
11+
buffer_c.cpp
1112
fixint_c.cpp
1213
msgpack_c.cpp
1314
pack_unpack_c.cpp

test/buffer.cpp

Lines changed: 0 additions & 47 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,6 @@
11
#include <msgpack.hpp>
22
#include <msgpack/fbuffer.hpp>
3-
#include <msgpack/fbuffer.h>
43
#include <msgpack/zbuffer.hpp>
5-
#include <msgpack/zbuffer.h>
64

75
#if defined(__GNUC__)
86
#pragma GCC diagnostic push
@@ -73,7 +71,6 @@ TEST(buffer, vrefbuffer)
7371
EXPECT_TRUE( memcmp(sbuf.data(), "aaa", 3) == 0 );
7472
}
7573

76-
7774
TEST(buffer, zbuffer)
7875
{
7976
msgpack::zbuffer zbuf;
@@ -85,22 +82,6 @@ TEST(buffer, zbuffer)
8582
zbuf.flush();
8683
}
8784

88-
89-
TEST(buffer, zbuffer_c)
90-
{
91-
msgpack_zbuffer zbuf;
92-
EXPECT_TRUE(msgpack_zbuffer_init(&zbuf, 1, MSGPACK_ZBUFFER_INIT_SIZE));
93-
EXPECT_EQ(0, msgpack_zbuffer_write(&zbuf, "a", 1));
94-
EXPECT_EQ(0, msgpack_zbuffer_write(&zbuf, "a", 1));
95-
EXPECT_EQ(0, msgpack_zbuffer_write(&zbuf, "a", 1));
96-
EXPECT_EQ(0, msgpack_zbuffer_write(&zbuf, "", 0));
97-
98-
EXPECT_TRUE(msgpack_zbuffer_flush(&zbuf) != NULL);
99-
100-
msgpack_zbuffer_destroy(&zbuf);
101-
}
102-
103-
10485
TEST(buffer, fbuffer)
10586
{
10687
#if defined(_MSC_VER)
@@ -128,31 +109,3 @@ TEST(buffer, fbuffer)
128109
EXPECT_EQ(EOF, fgetc(file));
129110
fclose(file);
130111
}
131-
132-
133-
TEST(buffer, fbuffer_c)
134-
{
135-
#if defined(_MSC_VER)
136-
FILE* file;
137-
tmpfile_s(&file);
138-
#else // defined(_MSC_VER)
139-
FILE* file = tmpfile();
140-
#endif // defined(_MSC_VER)
141-
142-
void* fbuf = (void*)file;
143-
144-
EXPECT_TRUE( file != NULL );
145-
EXPECT_EQ(0, msgpack_fbuffer_write(fbuf, "a", 1));
146-
EXPECT_EQ(0, msgpack_fbuffer_write(fbuf, "a", 1));
147-
EXPECT_EQ(0, msgpack_fbuffer_write(fbuf, "a", 1));
148-
149-
fflush(file);
150-
rewind(file);
151-
for (size_t i=0; i < 3; ++i) {
152-
int ch = fgetc(file);
153-
EXPECT_TRUE(ch != EOF);
154-
EXPECT_EQ('a', (char) ch);
155-
}
156-
EXPECT_EQ(EOF, fgetc(file));
157-
fclose(file);
158-
}

test/buffer_c.cpp

Lines changed: 148 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,148 @@
1+
#include <msgpack/fbuffer.h>
2+
#include <msgpack/zbuffer.h>
3+
#include <msgpack/sbuffer.h>
4+
#include <msgpack/vrefbuffer.h>
5+
6+
#if defined(__GNUC__)
7+
#pragma GCC diagnostic push
8+
#pragma GCC diagnostic ignored "-Wconversion"
9+
#endif //defined(__GNUC__)
10+
11+
#include <gtest/gtest.h>
12+
13+
#if defined(__GNUC__)
14+
#pragma GCC diagnostic pop
15+
#endif //defined(__GNUC__)
16+
17+
#include <string.h>
18+
19+
#if defined(unix) || defined(__unix) || defined(__linux__) || defined(__APPLE__) || defined(__OpenBSD__) || defined(__NetBSD__) || defined(__QNX__) || defined(__QNXTO__) || defined(__HAIKU__)
20+
#define HAVE_SYS_UIO_H 1
21+
#else
22+
#define HAVE_SYS_UIO_H 0
23+
#endif
24+
25+
TEST(buffer, zbuffer_c)
26+
{
27+
msgpack_zbuffer zbuf;
28+
EXPECT_TRUE(msgpack_zbuffer_init(&zbuf, 1, MSGPACK_ZBUFFER_INIT_SIZE));
29+
EXPECT_EQ(0, msgpack_zbuffer_write(&zbuf, "a", 1));
30+
EXPECT_EQ(0, msgpack_zbuffer_write(&zbuf, "a", 1));
31+
EXPECT_EQ(0, msgpack_zbuffer_write(&zbuf, "a", 1));
32+
EXPECT_EQ(0, msgpack_zbuffer_write(&zbuf, "", 0));
33+
34+
EXPECT_TRUE(msgpack_zbuffer_flush(&zbuf) != NULL);
35+
36+
msgpack_zbuffer_destroy(&zbuf);
37+
}
38+
39+
TEST(buffer, fbuffer_c)
40+
{
41+
#if defined(_MSC_VER)
42+
FILE* file;
43+
tmpfile_s(&file);
44+
#else // defined(_MSC_VER)
45+
FILE* file = tmpfile();
46+
#endif // defined(_MSC_VER)
47+
48+
void* fbuf = (void*)file;
49+
50+
EXPECT_TRUE( file != NULL );
51+
EXPECT_EQ(0, msgpack_fbuffer_write(fbuf, "a", 1));
52+
EXPECT_EQ(0, msgpack_fbuffer_write(fbuf, "a", 1));
53+
EXPECT_EQ(0, msgpack_fbuffer_write(fbuf, "a", 1));
54+
55+
fflush(file);
56+
rewind(file);
57+
for (size_t i=0; i < 3; ++i) {
58+
int ch = fgetc(file);
59+
EXPECT_TRUE(ch != EOF);
60+
EXPECT_EQ('a', (char) ch);
61+
}
62+
EXPECT_EQ(EOF, fgetc(file));
63+
fclose(file);
64+
}
65+
66+
TEST(buffer, sbuffer_c)
67+
{
68+
msgpack_sbuffer *sbuf;
69+
char *data;
70+
71+
sbuf = msgpack_sbuffer_new();
72+
EXPECT_TRUE(sbuf != NULL);
73+
EXPECT_EQ(0, msgpack_sbuffer_write(sbuf, "a", 1));
74+
EXPECT_EQ(0, msgpack_sbuffer_write(sbuf, "b", 1));
75+
EXPECT_EQ(0, msgpack_sbuffer_write(sbuf, "c", 1));
76+
EXPECT_EQ(0, msgpack_sbuffer_write(sbuf, "", 0));
77+
EXPECT_EQ(3U, sbuf->size);
78+
EXPECT_EQ(0, memcmp(sbuf->data, "abc", 3));
79+
data = msgpack_sbuffer_release(sbuf);
80+
EXPECT_EQ(0, memcmp(data, "abc", 3));
81+
EXPECT_EQ(0U, sbuf->size);
82+
EXPECT_TRUE(sbuf->data == NULL);
83+
84+
free(data);
85+
msgpack_sbuffer_free(sbuf);
86+
}
87+
88+
TEST(buffer, vrefbuffer_c)
89+
{
90+
const char *raw = "I was about to sail away in a junk,"
91+
"When suddenly I heard"
92+
"The sound of stamping and singing on the bank--"
93+
"It was you and your friends come to bid me farewell."
94+
"The Peach Flower Lake is a thousand fathoms deep,"
95+
"But it cannot compare, O Wang Lun,"
96+
"With the depth of your love for me.";
97+
const size_t rawlen = strlen(raw);
98+
msgpack_vrefbuffer *vbuf;
99+
const int ref_size = 24, chunk_size = 128;
100+
size_t slices[] = {0, 9, 10,
101+
MSGPACK_VREFBUFFER_REF_SIZE,
102+
MSGPACK_VREFBUFFER_REF_SIZE + 1,
103+
ref_size, chunk_size + 1};
104+
size_t iovcnt;
105+
const iovec *iov;
106+
size_t len = 0, i;
107+
char *buf;
108+
109+
vbuf = msgpack_vrefbuffer_new(ref_size, 0);
110+
for (i = 0; i < sizeof(slices) / sizeof(slices[0]); i++) {
111+
msgpack_vrefbuffer_write(vbuf, raw + len, slices[i]);
112+
len += slices[i];
113+
}
114+
EXPECT_LT(len, rawlen);
115+
iov = msgpack_vrefbuffer_vec(vbuf);
116+
iovcnt = msgpack_vrefbuffer_veclen(vbuf);
117+
118+
buf = (char *)malloc(rawlen);
119+
#if HAVE_SYS_UIO_H
120+
{
121+
int fd;
122+
char filename[] = "/tmp/mp.XXXXXX";
123+
124+
fd = mkstemp(filename);
125+
EXPECT_LT(0, fd);
126+
writev(fd, iov, (int)iovcnt);
127+
len = (size_t)lseek(fd, 0, SEEK_END);
128+
lseek(fd, 0, SEEK_SET);
129+
read(fd, buf, len);
130+
EXPECT_EQ(0, memcmp(buf, raw, len));
131+
close(fd);
132+
unlink(filename);
133+
}
134+
#else
135+
{
136+
len = 0;
137+
for (i = 0; i < iovcnt; i++)
138+
{
139+
EXPECT_LT(len, rawlen);
140+
memcpy(buf + len, iov[i].iov_base, iov[i].iov_len);
141+
len += iov[i].iov_len;
142+
}
143+
EXPECT_EQ(0, memcmp(buf, raw, len));
144+
}
145+
#endif
146+
free(buf);
147+
msgpack_vrefbuffer_free(vbuf);
148+
}

0 commit comments

Comments
 (0)