mirror of
https://github.com/msgpack/msgpack-c.git
synced 2025-10-20 22:31:33 +02:00
Compare commits
18 Commits
Author | SHA1 | Date | |
---|---|---|---|
![]() |
445880108a | ||
![]() |
b5af8ae8bc | ||
![]() |
03551d31fd | ||
![]() |
6f24d240e1 | ||
![]() |
985184b647 | ||
![]() |
96493f581d | ||
![]() |
c1cb968c04 | ||
![]() |
eba6304a3a | ||
![]() |
ef0927a6f0 | ||
![]() |
bf2504e7bb | ||
![]() |
724d1aad39 | ||
![]() |
a5c8a2c845 | ||
![]() |
4e027b72de | ||
![]() |
c31fafbcd1 | ||
![]() |
68cc50a3de | ||
![]() |
9f37918bb5 | ||
![]() |
b8b54a2fef | ||
![]() |
f2c1991ede |
19
.github/workflows/gha.yml
vendored
19
.github/workflows/gha.yml
vendored
@@ -18,6 +18,9 @@ jobs:
|
||||
pattern: [0, 1, 2, 3]
|
||||
steps:
|
||||
- uses: actions/checkout@v1
|
||||
- name: install gtest
|
||||
run: |
|
||||
brew install --force googletest
|
||||
- name: build and test
|
||||
env:
|
||||
CC: clang
|
||||
@@ -48,22 +51,8 @@ jobs:
|
||||
export CHAR_SIGN="unsigned"
|
||||
fi
|
||||
|
||||
# install gtest
|
||||
wget https://github.com/google/googletest/archive/release-1.7.0.zip -O googletest-release-1.7.0.zip
|
||||
unzip -q googletest-release-1.7.0.zip
|
||||
cd googletest-release-1.7.0
|
||||
$CXX -m${ARCH} src/gtest-all.cc -I. -Iinclude -c
|
||||
$CXX -m${ARCH} src/gtest_main.cc -I. -Iinclude -c
|
||||
ar -rv libgtest.a gtest-all.o
|
||||
ar -rv libgtest_main.a gtest_main.o
|
||||
mkdir -p ${BASE}/usr/include
|
||||
cp -r include/gtest ${BASE}/usr/include
|
||||
mkdir -p ${BASE}/usr/lib
|
||||
mv *.a ${BASE}/usr/lib
|
||||
cd ..
|
||||
|
||||
# build and test
|
||||
CMAKE_CXX_COMPILER="${CXX}" CMAKE_C_COMPILER="${CC}" GTEST_ROOT="${BASE}/usr" CFLAGS="-Werror -g -fsanitize=undefined -fno-sanitize-recover=all" CXXFLAGS="-Werror -g -ggdb3 -fsanitize=undefined -fno-sanitize-recover=all" ${ACTION}
|
||||
CMAKE_CXX_COMPILER="${CXX}" CMAKE_C_COMPILER="${CC}" CFLAGS="-Werror -g -fsanitize=undefined -fno-sanitize-recover=all" CXXFLAGS="-Werror -g -ggdb3 -fsanitize=undefined -fno-sanitize-recover=all" ${ACTION}
|
||||
|
||||
linux:
|
||||
runs-on: ubuntu-latest
|
||||
|
10
CHANGELOG.md
10
CHANGELOG.md
@@ -1,3 +1,13 @@
|
||||
# 2024-08-17 version 6.1.0
|
||||
* Add object initializer functions (#1137)
|
||||
* Fix cmake warnings (#1133, #1137)
|
||||
|
||||
# 2024-06-24 version 6.0.2
|
||||
* Fix header file installation to respect `CMAKE_INSTALL_INCLUDEDIR` (#1125)
|
||||
* Support absolute path for `CMAKE_INSTALL_*DIR` (#1121)
|
||||
* Removed invalid ctest option. (#1120)
|
||||
* Support relative path for `CMAKE_INSTALL_*DIR{ (#1119)
|
||||
|
||||
# 2024-04-02 version 6.0.1
|
||||
* Improve CI environment (#1061, #1091, #1109)
|
||||
* Improve build system (#1060, #1069, #1108)
|
||||
|
@@ -8,6 +8,11 @@ else()
|
||||
ENDIF ()
|
||||
endif()
|
||||
|
||||
IF ((CMAKE_VERSION VERSION_GREATER 3.27) OR
|
||||
(CMAKE_VERSION VERSION_EQUAL 3.27))
|
||||
CMAKE_POLICY(SET CMP0145 OLD)
|
||||
ENDIF ()
|
||||
|
||||
OPTION (MSGPACK_BUILD_TESTS "Build msgpack tests." OFF)
|
||||
OPTION (MSGPACK_GEN_COVERAGE "Enable running gcov to get a test coverage report." OFF)
|
||||
|
||||
@@ -30,8 +35,16 @@ LIST (APPEND CMAKE_MODULE_PATH "${PROJECT_SOURCE_DIR}/cmake/")
|
||||
include(GNUInstallDirs)
|
||||
SET (prefix ${CMAKE_INSTALL_PREFIX})
|
||||
SET (exec_prefix ${CMAKE_INSTALL_PREFIX})
|
||||
SET (libdir ${CMAKE_INSTALL_LIBDIR})
|
||||
SET (includedir ${CMAKE_INSTALL_INCLUDEDIR})
|
||||
IF (IS_ABSOLUTE ${CMAKE_INSTALL_LIBDIR})
|
||||
SET (libdir ${CMAKE_INSTALL_LIBDIR})
|
||||
ELSE ()
|
||||
SET (libdir "\${prefix}/${CMAKE_INSTALL_LIBDIR}")
|
||||
ENDIF ()
|
||||
IF (IS_ABSOLUTE ${CMAKE_INSTALL_INCLUDEDIR})
|
||||
SET (includedir ${CMAKE_INSTALL_INCLUDEDIR})
|
||||
ELSE ()
|
||||
SET (includedir "\${prefix}/${CMAKE_INSTALL_INCLUDEDIR}")
|
||||
ENDIF ()
|
||||
|
||||
OPTION (MSGPACK_32BIT "32bit compile" OFF)
|
||||
|
||||
@@ -263,12 +276,14 @@ INSTALL (TARGETS ${MSGPACK_INSTALLTARGETS} EXPORT msgpack-c-targets
|
||||
ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
|
||||
)
|
||||
FOREACH (file ${msgpack-c_common_HEADERS})
|
||||
GET_FILENAME_COMPONENT (dir ${file} PATH)
|
||||
INSTALL (FILES ${file} DESTINATION ${dir})
|
||||
GET_FILENAME_COMPONENT(dir ${file} DIRECTORY)
|
||||
STRING(REPLACE "include" "${CMAKE_INSTALL_INCLUDEDIR}" header_path ${dir})
|
||||
INSTALL (FILES ${file} DESTINATION ${header_path})
|
||||
ENDFOREACH ()
|
||||
FOREACH (file ${msgpack-c_configured_HEADERS})
|
||||
GET_FILENAME_COMPONENT (dir ${file} PATH)
|
||||
INSTALL (FILES ${CMAKE_CURRENT_BINARY_DIR}/${file} DESTINATION ${dir})
|
||||
GET_FILENAME_COMPONENT(dir ${file} DIRECTORY)
|
||||
STRING(REPLACE "include" "${CMAKE_INSTALL_INCLUDEDIR}" header_path ${dir})
|
||||
INSTALL (FILES ${CMAKE_CURRENT_BINARY_DIR}/${file} DESTINATION ${header_path})
|
||||
ENDFOREACH ()
|
||||
IF (NOT MSVC)
|
||||
INSTALL (FILES ${CMAKE_CURRENT_BINARY_DIR}/msgpack-c.pc DESTINATION ${CMAKE_INSTALL_LIBDIR}/pkgconfig)
|
||||
|
@@ -1,7 +1,7 @@
|
||||
`msgpack` for C
|
||||
===================
|
||||
|
||||
Version 6.0.1 [](https://github.com/msgpack/msgpack-c/actions) [](https://ci.appveyor.com/project/redboltz/msgpack-c/branch/c_master)
|
||||
Version 6.1.0 [](https://github.com/msgpack/msgpack-c/actions) [](https://ci.appveyor.com/project/redboltz/msgpack-c/branch/c_master)
|
||||
[](https://codecov.io/gh/msgpack/msgpack-c/branch/c_master)
|
||||
|
||||
It's like JSON but smaller and faster.
|
||||
|
@@ -1,4 +1,4 @@
|
||||
version: 6.0.1.{build}
|
||||
version: 6.1.0.{build}
|
||||
|
||||
branches:
|
||||
only:
|
||||
|
@@ -42,7 +42,7 @@ then
|
||||
exit $ret
|
||||
fi
|
||||
|
||||
ctest -VVr
|
||||
ctest -VV
|
||||
|
||||
ret=$?
|
||||
if [ $ret -ne 0 ]
|
||||
|
@@ -97,6 +97,39 @@ typedef struct msgpack_object_kv {
|
||||
msgpack_object val;
|
||||
} msgpack_object_kv;
|
||||
|
||||
MSGPACK_DLLEXPORT
|
||||
void msgpack_object_init_nil(msgpack_object* d);
|
||||
|
||||
MSGPACK_DLLEXPORT
|
||||
void msgpack_object_init_boolean(msgpack_object* d, bool v);
|
||||
|
||||
MSGPACK_DLLEXPORT
|
||||
void msgpack_object_init_unsigned_integer(msgpack_object* d, uint64_t v);
|
||||
|
||||
MSGPACK_DLLEXPORT
|
||||
void msgpack_object_init_signed_integer(msgpack_object* d, int64_t v);
|
||||
|
||||
MSGPACK_DLLEXPORT
|
||||
void msgpack_object_init_float32(msgpack_object* d, float v);
|
||||
|
||||
MSGPACK_DLLEXPORT
|
||||
void msgpack_object_init_float64(msgpack_object* d, double v);
|
||||
|
||||
MSGPACK_DLLEXPORT
|
||||
void msgpack_object_init_str(msgpack_object* d, const char* data, uint32_t size);
|
||||
|
||||
MSGPACK_DLLEXPORT
|
||||
void msgpack_object_init_bin(msgpack_object* d, const char* data, uint32_t size);
|
||||
|
||||
MSGPACK_DLLEXPORT
|
||||
void msgpack_object_init_ext(msgpack_object* d, int8_t type, const char* data, uint32_t size);
|
||||
|
||||
MSGPACK_DLLEXPORT
|
||||
void msgpack_object_init_array(msgpack_object* d, msgpack_object* data, uint32_t size);
|
||||
|
||||
MSGPACK_DLLEXPORT
|
||||
void msgpack_object_init_map(msgpack_object* d, msgpack_object_kv* data, uint32_t size);
|
||||
|
||||
#if !defined(_KERNEL_MODE)
|
||||
MSGPACK_DLLEXPORT
|
||||
void msgpack_object_print(FILE* out, msgpack_object o);
|
||||
|
@@ -1,3 +1,3 @@
|
||||
#define MSGPACK_VERSION_MAJOR 6
|
||||
#define MSGPACK_VERSION_MINOR 0
|
||||
#define MSGPACK_VERSION_REVISION 1
|
||||
#define MSGPACK_VERSION_MINOR 1
|
||||
#define MSGPACK_VERSION_REVISION 0
|
||||
|
@@ -125,6 +125,72 @@ int msgpack_pack_object(msgpack_packer* pk, msgpack_object d)
|
||||
}
|
||||
}
|
||||
|
||||
void msgpack_object_init_nil(msgpack_object* d) {
|
||||
d->type = MSGPACK_OBJECT_NIL;
|
||||
}
|
||||
|
||||
void msgpack_object_init_boolean(msgpack_object* d, bool v) {
|
||||
d->type = MSGPACK_OBJECT_BOOLEAN;
|
||||
d->via.boolean = v;
|
||||
}
|
||||
|
||||
void msgpack_object_init_unsigned_integer(msgpack_object* d, uint64_t v) {
|
||||
d->type = MSGPACK_OBJECT_POSITIVE_INTEGER;
|
||||
d->via.u64 = v;
|
||||
}
|
||||
|
||||
void msgpack_object_init_signed_integer(msgpack_object* d, int64_t v) {
|
||||
if (v < 0) {
|
||||
d->type = MSGPACK_OBJECT_NEGATIVE_INTEGER;
|
||||
d->via.i64 = v;
|
||||
}
|
||||
else {
|
||||
d->type = MSGPACK_OBJECT_POSITIVE_INTEGER;
|
||||
d->via.u64 = v;
|
||||
}
|
||||
}
|
||||
|
||||
void msgpack_object_init_float32(msgpack_object* d, float v) {
|
||||
d->type = MSGPACK_OBJECT_FLOAT32;
|
||||
d->via.f64 = v;
|
||||
}
|
||||
|
||||
void msgpack_object_init_float64(msgpack_object* d, double v) {
|
||||
d->type = MSGPACK_OBJECT_FLOAT64;
|
||||
d->via.f64 = v;
|
||||
}
|
||||
|
||||
void msgpack_object_init_str(msgpack_object* d, const char* data, uint32_t size) {
|
||||
d->type = MSGPACK_OBJECT_STR;
|
||||
d->via.str.ptr = data;
|
||||
d->via.str.size = size;
|
||||
}
|
||||
|
||||
void msgpack_object_init_bin(msgpack_object* d, const char* data, uint32_t size) {
|
||||
d->type = MSGPACK_OBJECT_BIN;
|
||||
d->via.bin.ptr = data;
|
||||
d->via.bin.size = size;
|
||||
}
|
||||
|
||||
void msgpack_object_init_ext(msgpack_object* d, int8_t type, const char* data, uint32_t size) {
|
||||
d->type = MSGPACK_OBJECT_EXT;
|
||||
d->via.ext.type = type;
|
||||
d->via.ext.ptr = data;
|
||||
d->via.ext.size = size;
|
||||
}
|
||||
|
||||
void msgpack_object_init_array(msgpack_object* d, msgpack_object* data, uint32_t size) {
|
||||
d->type = MSGPACK_OBJECT_ARRAY;
|
||||
d->via.array.ptr = data;
|
||||
d->via.array.size = size;
|
||||
}
|
||||
|
||||
void msgpack_object_init_map(msgpack_object* d, msgpack_object_kv* data, uint32_t size) {
|
||||
d->type = MSGPACK_OBJECT_MAP;
|
||||
d->via.map.ptr = data;
|
||||
d->via.map.size = size;
|
||||
}
|
||||
|
||||
#if !defined(_KERNEL_MODE)
|
||||
|
||||
static void msgpack_object_bin_print(FILE* out, const char *ptr, size_t size)
|
||||
|
@@ -1612,6 +1612,111 @@ TEST(MSGPACKC, object_bin_print_buffer_overflow) {
|
||||
EXPECT_STREQ("\"test\"", buffer);
|
||||
}
|
||||
|
||||
TEST(MSGPACKC, init_msgpack_obj_nil) {
|
||||
msgpack_object obj;
|
||||
msgpack_object_init_nil(&obj);
|
||||
EXPECT_EQ(MSGPACK_OBJECT_NIL, obj.type);
|
||||
}
|
||||
|
||||
TEST(MSGPACKC, init_msgpack_obj_boolean) {
|
||||
msgpack_object obj;
|
||||
msgpack_object_init_boolean(&obj, true);
|
||||
EXPECT_EQ(MSGPACK_OBJECT_BOOLEAN, obj.type);
|
||||
EXPECT_EQ(true, obj.via.boolean);
|
||||
}
|
||||
|
||||
TEST(MSGPACKC, init_msgpack_obj_unsigned_integer) {
|
||||
msgpack_object obj;
|
||||
msgpack_object_init_unsigned_integer(&obj, 123);
|
||||
EXPECT_EQ(MSGPACK_OBJECT_POSITIVE_INTEGER, obj.type);
|
||||
EXPECT_EQ(static_cast<uint64_t>(123), obj.via.u64);
|
||||
}
|
||||
|
||||
TEST(MSGPACKC, init_msgpack_obj_signed_integer1) {
|
||||
msgpack_object obj;
|
||||
msgpack_object_init_signed_integer(&obj, -123);
|
||||
EXPECT_EQ(MSGPACK_OBJECT_NEGATIVE_INTEGER, obj.type);
|
||||
EXPECT_EQ(-123, obj.via.i64);
|
||||
}
|
||||
|
||||
TEST(MSGPACKC, init_msgpack_obj_signed_integer2) {
|
||||
msgpack_object obj;
|
||||
msgpack_object_init_signed_integer(&obj, 123);
|
||||
EXPECT_EQ(MSGPACK_OBJECT_POSITIVE_INTEGER, obj.type);
|
||||
EXPECT_EQ(static_cast<uint64_t>(123), obj.via.u64);
|
||||
}
|
||||
|
||||
TEST(MSGPACKC, init_msgpack_obj_float32) {
|
||||
msgpack_object obj;
|
||||
float val = 1.23f;
|
||||
msgpack_object_init_float32(&obj, val);
|
||||
EXPECT_EQ(MSGPACK_OBJECT_FLOAT32, obj.type);
|
||||
EXPECT_TRUE(fabs(obj.via.f64 - val) <= kEPS);
|
||||
}
|
||||
|
||||
TEST(MSGPACKC, init_msgpack_obj_float64) {
|
||||
msgpack_object obj;
|
||||
double val = 1.23;
|
||||
msgpack_object_init_float64(&obj, val);
|
||||
EXPECT_EQ(MSGPACK_OBJECT_FLOAT64, obj.type);
|
||||
EXPECT_TRUE(fabs(obj.via.f64 - val) <= kEPS);
|
||||
}
|
||||
|
||||
|
||||
TEST(MSGPACKC, init_msgpack_obj_string) {
|
||||
msgpack_object obj;
|
||||
char buffer[] = "test";
|
||||
msgpack_object_init_str(&obj, buffer, (uint32_t)strlen(buffer));
|
||||
EXPECT_EQ(MSGPACK_OBJECT_STR, obj.type);
|
||||
EXPECT_STREQ(buffer, obj.via.str.ptr);
|
||||
}
|
||||
|
||||
TEST(MSGPACKC, init_msgpack_obj_bin) {
|
||||
msgpack_object obj;
|
||||
char buffer[] = "test";
|
||||
msgpack_object_init_bin(&obj, buffer, (uint32_t)strlen(buffer));
|
||||
EXPECT_EQ(MSGPACK_OBJECT_BIN, obj.type);
|
||||
EXPECT_STREQ(buffer, obj.via.bin.ptr);
|
||||
}
|
||||
|
||||
TEST(MSGPACKC, init_msgpack_obj_ext) {
|
||||
msgpack_object obj;
|
||||
char buffer[] = "test";
|
||||
msgpack_object_init_ext(&obj, 1, buffer, (uint32_t)strlen(buffer));
|
||||
EXPECT_EQ(MSGPACK_OBJECT_EXT, obj.type);
|
||||
EXPECT_EQ(1, obj.via.ext.type);
|
||||
EXPECT_STREQ(buffer, obj.via.ext.ptr);
|
||||
}
|
||||
|
||||
TEST(MSGPACKC, init_msgpack_obj_array) {
|
||||
msgpack_object obj;
|
||||
char buffer[][7] = {"test_1", "test_2", "test_3", "test_4"};
|
||||
uint32_t buffer_size = 4;
|
||||
msgpack_object array[buffer_size];
|
||||
for(size_t i = 0; i < buffer_size; i++) {
|
||||
msgpack_object_init_str(&array[i], buffer[i], (uint32_t)strlen(buffer[i]));
|
||||
}
|
||||
msgpack_object_init_array(&obj, array, buffer_size);
|
||||
EXPECT_EQ(MSGPACK_OBJECT_ARRAY, obj.type);
|
||||
for(size_t i = 0; i < buffer_size; i++) {
|
||||
EXPECT_STREQ(buffer[i], obj.via.array.ptr[i].via.str.ptr);
|
||||
}
|
||||
}
|
||||
|
||||
TEST(MSGPACKC, init_msgpack_obj_map) {
|
||||
msgpack_object obj;
|
||||
char key_str[] = "test_key";
|
||||
char value_str[] = "test_value";
|
||||
msgpack_object key,value;
|
||||
msgpack_object_init_str(&key, key_str, (uint32_t)strlen(key_str));
|
||||
msgpack_object_init_str(&value, value_str, (uint32_t)strlen(value_str));
|
||||
msgpack_object_kv map = { key, value };
|
||||
msgpack_object_init_map(&obj, &map, 1);
|
||||
EXPECT_EQ(MSGPACK_OBJECT_MAP, obj.type);
|
||||
EXPECT_STREQ(key_str, obj.via.map.ptr->key.via.str.ptr);
|
||||
EXPECT_STREQ(value_str, obj.via.map.ptr->val.via.str.ptr);
|
||||
}
|
||||
|
||||
/* test for vrefbuffer */
|
||||
#define GEN_TEST_VREFBUFFER_PREPARE(...) \
|
||||
msgpack_vrefbuffer vbuf; \
|
||||
|
Reference in New Issue
Block a user