mirror of
https://github.com/msgpack/msgpack-c
synced 2026-06-08 16:11:40 +00:00
Compare commits
16 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 62da533f08 | |||
| 52d3acec02 | |||
| 6d93977067 | |||
| 3cafcacb5a | |||
| 021da5d4b5 | |||
| 012756d6cc | |||
| 306d59d52f | |||
| 0299d94105 | |||
| 51528a4389 | |||
| 445880108a | |||
| b5af8ae8bc | |||
| 03551d31fd | |||
| 6f24d240e1 | |||
| 985184b647 | |||
| 96493f581d | |||
| c1cb968c04 |
@@ -16,7 +16,7 @@ jobs:
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
steps:
|
||||
- uses: actions/checkout@v1
|
||||
- uses: actions/checkout@v3
|
||||
- name: install depends
|
||||
run: |
|
||||
sudo apt-get update
|
||||
@@ -42,12 +42,14 @@ jobs:
|
||||
CMAKE_LIBRARY_PATH="${BASE}/build" GTEST_ROOT="${BASE}/usr" CMAKE_PREFIX_PATH="${BASE}/usr/gcc/lib64/cmake" cmake -DMSGPACK_32BIT=OFF -DBUILD_SHARED_LIBS=ON -DMSGPACK_CHAR_SIGN=signed -DMSGPACK_BUILD_EXAMPLES=ON -DMSGPACK_BUILD_TESTS=ON -DCMAKE_BUILD_TYPE=Debug -DMSGPACK_GEN_COVERAGE=ON ..
|
||||
make -j4
|
||||
make test
|
||||
- name: Upload coverage to Codecov
|
||||
working-directory: build
|
||||
- name: Generate coverage
|
||||
run: |
|
||||
# Create lcov report
|
||||
lcov --capture --directory . --output-file coverage.info
|
||||
lcov --remove coverage.info '/usr/*' --output-file coverage.info # filter system-files
|
||||
lcov --list coverage.info # debug info
|
||||
# Uploading report to CodeCov
|
||||
bash <(curl -s https://codecov.io/bash) -f coverage.info || echo "Codecov did not collect coverage reports"
|
||||
- name: Upload coverage to Codecov
|
||||
uses: codecov/codecov-action@v5
|
||||
with:
|
||||
files: build/coverage.info
|
||||
token: ${{ secrets.CODECOV_TOKEN }}
|
||||
|
||||
@@ -17,7 +17,7 @@ jobs:
|
||||
matrix:
|
||||
pattern: [0, 1, 2, 3]
|
||||
steps:
|
||||
- uses: actions/checkout@v1
|
||||
- uses: actions/checkout@v3
|
||||
- name: install gtest
|
||||
run: |
|
||||
brew install --force googletest
|
||||
@@ -167,19 +167,19 @@ jobs:
|
||||
CMAKE_CXX_COMPILER="${CXX}" CMAKE_C_COMPILER="${CC}" GTEST_ROOT="${BASE}/usr" CFLAGS="-Werror -g -gdwarf-4 -fsanitize=undefined -fno-sanitize-recover=all" CXXFLAGS="-Werror -g -ggdb3 -gdwarf-4 -fsanitize=undefined -fno-sanitize-recover=all" ${ACTION}
|
||||
|
||||
windows:
|
||||
runs-on: windows-2019
|
||||
runs-on: windows-2022
|
||||
strategy:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
pattern: [0, 1, 2, 3]
|
||||
steps:
|
||||
- uses: actions/checkout@v2.0.0
|
||||
- uses: actions/checkout@v3
|
||||
- name: Cache vcpkg
|
||||
id: cache-vcpkg
|
||||
uses: actions/cache@v1.1.2
|
||||
uses: actions/cache@v3
|
||||
with:
|
||||
path: C:/vcpkg/installed
|
||||
key: windows-2019-vcpkg-v2
|
||||
key: windows-2022-vcpkg-v2
|
||||
- name: Build dependencies
|
||||
if: steps.cache-vcpkg.outputs.cache-hit != 'true'
|
||||
shell: powershell
|
||||
|
||||
@@ -1,3 +1,12 @@
|
||||
# 2026-05-30 version 7.0.0
|
||||
* Refine CI (#1152)
|
||||
## << breaking changes >>
|
||||
* Updated cmake minimum required to 3.5-4.0 (#1160)
|
||||
|
||||
# 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)
|
||||
|
||||
+2
-10
@@ -1,12 +1,4 @@
|
||||
if(${CMAKE_VERSION} VERSION_GREATER "3.4")
|
||||
CMAKE_MINIMUM_REQUIRED (VERSION 3.5)
|
||||
else()
|
||||
CMAKE_MINIMUM_REQUIRED (VERSION 2.8.12)
|
||||
IF ((CMAKE_VERSION VERSION_GREATER 3.1) OR
|
||||
(CMAKE_VERSION VERSION_EQUAL 3.1))
|
||||
CMAKE_POLICY(SET CMP0054 NEW)
|
||||
ENDIF ()
|
||||
endif()
|
||||
CMAKE_MINIMUM_REQUIRED (VERSION 3.5...4.0)
|
||||
|
||||
OPTION (MSGPACK_BUILD_TESTS "Build msgpack tests." OFF)
|
||||
OPTION (MSGPACK_GEN_COVERAGE "Enable running gcov to get a test coverage report." OFF)
|
||||
@@ -195,11 +187,11 @@ ENDIF ()
|
||||
|
||||
IF (MSGPACK_BUILD_TESTS)
|
||||
ENABLE_TESTING ()
|
||||
INCLUDE(CTest)
|
||||
list(APPEND CMAKE_CTEST_ARGUMENTS "--output-on-failure")
|
||||
# MEMORYCHECK_COMMAND_OPTIONS needs to place prior to CTEST_MEMORYCHECK_COMMAND
|
||||
SET (MEMORYCHECK_COMMAND_OPTIONS "--leak-check=full --show-leak-kinds=definite,possible --error-exitcode=1")
|
||||
FIND_PROGRAM(CTEST_MEMORYCHECK_COMMAND NAMES valgrind)
|
||||
INCLUDE(Dart)
|
||||
ADD_SUBDIRECTORY (test)
|
||||
ENDIF ()
|
||||
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
`msgpack` for C
|
||||
===================
|
||||
|
||||
Version 6.0.2 [](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)
|
||||
Version 7.0.0 [](https://github.com/msgpack/msgpack-c/actions) [](https://ci.appveyor.com/project/redboltz/msgpack-c/branch/c_master)
|
||||
[](https://app.codecov.io/gh/msgpack/msgpack-c/tree/c_master)
|
||||
|
||||
It's like JSON but smaller and faster.
|
||||
|
||||
|
||||
+7
-7
@@ -1,4 +1,4 @@
|
||||
version: 6.0.2.{build}
|
||||
version: 7.0.0.{build}
|
||||
|
||||
branches:
|
||||
only:
|
||||
@@ -22,10 +22,10 @@ build_script:
|
||||
- cmake --build . --config Release
|
||||
- cd ..
|
||||
- cd ..
|
||||
- appveyor DownloadFile http://zlib.net/zlib-1.3.1.tar.gz -FileName zlib-1.3.1.tar.gz
|
||||
- 7z x zlib-1.3.1.tar.gz > NUL
|
||||
- 7z x zlib-1.3.1.tar > NUL
|
||||
- cd zlib-1.3.1
|
||||
- appveyor DownloadFile http://zlib.net/zlib-1.3.2.tar.gz -FileName zlib-1.3.2.tar.gz
|
||||
- 7z x zlib-1.3.2.tar.gz > NUL
|
||||
- 7z x zlib-1.3.2.tar > NUL
|
||||
- cd zlib-1.3.2
|
||||
- md build
|
||||
- cd build
|
||||
- cmake -G %msvc% ..
|
||||
@@ -35,9 +35,9 @@ build_script:
|
||||
- cd ..
|
||||
- md build
|
||||
- cd build
|
||||
- cmake -G %msvc% -DGTEST_LIBRARY=%APPVEYOR_BUILD_FOLDER%\googletest-release-1.7.0\build\Release\gtest.lib -DGTEST_MAIN_LIBRARY=%APPVEYOR_BUILD_FOLDER%\googletest-release-1.7.0\build\Release\gtest_main.lib -DGTEST_INCLUDE_DIR=%APPVEYOR_BUILD_FOLDER%\googletest-release-1.7.0\include -DZLIB_LIBRARY=%APPVEYOR_BUILD_FOLDER%\zlib-1.3.1\build\Release\zlib.lib -DZLIB_INCLUDE_DIR=%APPVEYOR_BUILD_FOLDER%\zlib-1.3.1 -DCMAKE_CXX_FLAGS='"/D_VARIADIC_MAX=10 /EHsc"' ..
|
||||
- cmake -G %msvc% -DGTEST_LIBRARY=%APPVEYOR_BUILD_FOLDER%\googletest-release-1.7.0\build\Release\gtest.lib -DGTEST_MAIN_LIBRARY=%APPVEYOR_BUILD_FOLDER%\googletest-release-1.7.0\build\Release\gtest_main.lib -DGTEST_INCLUDE_DIR=%APPVEYOR_BUILD_FOLDER%\googletest-release-1.7.0\include -DZLIB_LIBRARY=%APPVEYOR_BUILD_FOLDER%\zlib-1.3.2\build\Release\zlib.lib -DZLIB_INCLUDE_DIR=%APPVEYOR_BUILD_FOLDER%\zlib-1.3.2 -DCMAKE_CXX_FLAGS='"/D_VARIADIC_MAX=10 /EHsc"' ..
|
||||
- cmake --build . --config Release -v
|
||||
|
||||
test_script:
|
||||
- set PATH=%PATH%;%APPVEYOR_BUILD_FOLDER%\googletest-release-1.7.0\build\Release;%APPVEYOR_BUILD_FOLDER%\zlib-1.3\build\Release;%APPVEYOR_BUILD_FOLDER%\build\release
|
||||
- set PATH=%PATH%;%APPVEYOR_BUILD_FOLDER%\googletest-release-1.7.0\build\Release;%APPVEYOR_BUILD_FOLDER%\zlib-1.3.2\build\Release;%APPVEYOR_BUILD_FOLDER%\build\release
|
||||
- ctest -V
|
||||
|
||||
@@ -48,7 +48,7 @@ FUNCTION(SETUP_TARGET_FOR_COVERAGE _targetname _testrunner _outputname)
|
||||
|
||||
# Show info where to find the report
|
||||
ADD_CUSTOM_COMMAND(TARGET ${_targetname} POST_BUILD
|
||||
COMMAND ;
|
||||
COMMAND ${CMAKE_COMMAND} -E echo ""
|
||||
COMMENT "Open ./${_outputname}/index.html in your browser to view the coverage report."
|
||||
)
|
||||
|
||||
|
||||
+1
-5
@@ -27,10 +27,6 @@ comment:
|
||||
|
||||
ignore:
|
||||
- "test"
|
||||
- "fuzz"
|
||||
- "erb"
|
||||
- "ci"
|
||||
- "cmake"
|
||||
- "examle"
|
||||
- "external"
|
||||
- "usr"
|
||||
- "example"
|
||||
|
||||
@@ -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_MAJOR 7
|
||||
#define MSGPACK_VERSION_MINOR 0
|
||||
#define MSGPACK_VERSION_REVISION 2
|
||||
#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);
|
||||
}
|
||||
|
||||
#define BUFFER_SIZE 4
|
||||
TEST(MSGPACKC, init_msgpack_obj_array) {
|
||||
msgpack_object obj;
|
||||
char buffer[][7] = {"test_1", "test_2", "test_3", "test_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