Compare commits

..

71 Commits

Author SHA1 Message Date
Takatoshi Kondo
6e7deb8091 Merge pull request #875 from redboltz/update_to_330
Update the version to 3.3.0.
2020-06-05 17:04:41 +09:00
Takatoshi Kondo
66fa561256 Update the version to 3.3.0. 2020-06-05 16:22:34 +09:00
Takatoshi Kondo
243fb27c3c Merge pull request #874 from ygj6/build
fix cannot find boost error
2020-06-05 15:43:07 +09:00
yuangongji
746e983bf3 fix cannot find boost error 2020-06-01 20:02:52 +08:00
Takatoshi Kondo
766afb90ed Merge pull request #870 from ygj6/json
convert between msgpack and json via cJSON library
2020-05-24 19:12:18 +09:00
yuangongji
403567c1c5 convert between msgpack and json 2020-05-24 17:24:55 +08:00
Takatoshi Kondo
f3fe1b801e Merge pull request #871 from nicokruithof/master
Fixed warning in Visual Studio
2020-05-23 16:40:35 +09:00
Takatoshi Kondo
4fdbc7518f Merge pull request #861 from ygj6/build
examples of packing boundary values
2020-05-18 22:29:46 +09:00
Nico Kruithof
0dbdb3d974 Fixed warning in Visual Studio 2020-05-15 07:16:34 +02:00
yuangongji
d7d5be414f examples of packing boundary values 2020-05-08 14:28:45 +08:00
Takatoshi Kondo
4d36456799 Merge pull request #865 from ygj6/buffer
vrefbuffer: set default ref_size and chunk_size
2020-05-01 13:08:32 +09:00
yuangongji
b1725d4007 vrefbuffer: set default ref_size and chunk_size 2020-04-30 19:26:07 +08:00
Takatoshi Kondo
102dba8e24 Merge pull request #860 from ygj6/build
fix github actions failure and use C style casts instead of C++ style casts in zbuffer.h
2020-04-16 23:38:46 +09:00
yuangongji
1a372058a6 Use C style casts instead of C++ style casts 2020-04-16 12:46:16 +08:00
yuangongji
f8b691f622 run apt-get update to fix package installation failure 2020-04-16 11:40:53 +08:00
Takatoshi Kondo
7893d4d8c9 Merge pull request #851 from igor-sadchenko/fix-gnuc-macro-warnings
Fixed many warnings/errors with macro __GNUC__(issue #850)
2020-03-29 09:43:00 +09:00
Igor Sadchenko
9a3cd0c951 Fixed many warnings/errors with macro __GNUC__(issue #850) 2020-03-26 02:03:25 +03:00
Takatoshi Kondo
46684265d5 Merge pull request #846 from ygj6/build
install depends via vcpkg on Windows
2020-03-09 15:02:40 +09:00
Takatoshi Kondo
9e0d87b725 Merge pull request #834 from redboltz/limit_cov_guard
Limited codecov trigger.
2020-03-09 14:50:04 +09:00
Takatoshi Kondo
bbc03b2b0a Limited codecov trigger.
Focused coverage target to library code.

Now, codecov supports tokenless upload.
2020-03-09 11:08:33 +09:00
yuangongji
b4d28c3d9d install depends via vcpkg on Windows 2020-03-07 15:00:28 +08:00
Takatoshi Kondo
cc1098998f Merge pull request #839 from ygj6/build
add MSGPACK_CXX_ONLY option to build c++ libraries only
2020-02-19 18:22:29 +09:00
yuangongji
d9c5978958 add MSGPACK_CXX_ONLY option to build c++ libraries only 2020-02-19 09:07:16 +08:00
Takatoshi Kondo
d05daa1df6 Merge pull request #842 from ygj6/doc
update the install section
2020-02-18 15:07:17 +09:00
yuangongji
534466894e update the install section 2020-02-13 17:08:46 +08:00
Takatoshi Kondo
d04520044f Merge pull request #833 from ygj6/master
add coverage target and integrate to github actions
2020-01-14 12:59:29 +09:00
yuangongji
c0fb6b3b8c integrate coverage in github actions 2020-01-11 20:05:15 +08:00
yuangongji
19df3314f4 add coverage target in cmake 2020-01-11 13:23:19 +08:00
Takatoshi Kondo
b530b7f21a Merge pull request #831 from ygj6/master
use cache in github actions
2020-01-08 11:06:27 +09:00
yuangongji
ed49ea3c95 use cache in github actions 2020-01-07 20:07:37 +08:00
Takatoshi Kondo
7918c19f8f Merge branch 'jamessan-cxx11-32bit' 2020-01-06 15:02:29 +09:00
Takatoshi Kondo
0d7caecdb5 Fixed cmake condition.
If MSGPACK_CXX17 is ON then build MSGPACK_CXX11 target.
2020-01-06 13:04:14 +09:00
James McCoy
f8b0ad1766 Skip timespec_pack_convert_64bit_sec_max_nano on systems where tv_sec <= 32-bit 2020-01-05 21:38:52 -05:00
James McCoy
7ed7af90b6 Fix timespec_object.*_32bit_sec tests on 32-bit platforms
On 32-bit unix platforms, 0xffffffffUL is a 32-bit value so the compiler
complains about converting it to a signed value.

    /home/runner/work/msgpack-c/msgpack-c/test/msgpack_cpp11.cpp:1085:20: error: constant expression evaluates to 4294967295 which cannot be narrowed to type '__time_t' (aka 'long') [-Wc++11-narrowing]
        timespec val1{ 0xffffffffUL, 0 };
                       ^~~~~~~~~~~~
    /home/runner/work/msgpack-c/msgpack-c/test/msgpack_cpp11.cpp:1085:20: note: insert an explicit cast to silence this issue
        timespec val1{ 0xffffffffUL, 0 };
                       ^~~~~~~~~~~~
                       static_cast<__time_t>( )
    /home/runner/work/msgpack-c/msgpack-c/test/msgpack_cpp11.cpp:1085:20: warning: implicit conversion changes signedness: 'unsigned long' to '__time_t' (aka 'long') [-Wsign-conversion]
        timespec val1{ 0xffffffffUL, 0 };
                     ~ ^~~~~~~~~~~~

Since we're trying to test how the maximum 32-bit value that fits in
timespec.tv_sec is handled, directly use the maximum 32-bit value for
the appropriate (un)signed type used for timespec.tv_sec.

We don't just cast to the value, as the compiler suggests, because that
would result in an extremely negative value.
2020-01-05 21:38:45 -05:00
Takatoshi Kondo
4a94f836a7 Merge pull request #828 from igor-sadchenko/patch-1
Fixed misprint in README.md
2019-12-28 15:18:59 +09:00
Igor Sadchenko
b36e548db2 Fixed misprint in README.md 2019-12-26 14:05:33 +03:00
Takatoshi Kondo
e6c276edf3 Merge pull request #827 from redboltz/fix_825_minimal
Fixed #825.
2019-12-25 15:38:01 +09:00
Takatoshi Kondo
befc3cdd0c Supressed C4309 on MSVC. 2019-12-25 14:59:40 +09:00
Takatoshi Kondo
2e2e93ba2e Added compiler checking to pragma. 2019-12-25 14:39:57 +09:00
Takatoshi Kondo
3b2bb56243 Fixed #825.
Added verbose option to windows CIs.
Added C compiler flag operation for MSVC.
Fixed invalid /WX flag matching on MSVC at test.
2019-12-25 14:24:24 +09:00
Takatoshi Kondo
9c4562382b Merge pull request #824 from redboltz/migrate_to_gha
Migrate to gha
2019-12-25 12:16:39 +09:00
Takatoshi Kondo
08b0c88c21 Limited appveyor trigger event. 2019-12-25 10:39:26 +09:00
Takatoshi Kondo
d105f97ea0 Downgraded windows version. 2019-12-25 10:31:48 +09:00
Takatoshi Kondo
bd0665bed3 Removed travis. 2019-12-23 16:55:52 +09:00
Takatoshi Kondo
8dc865d92d Added github actions.
Fixed enum qualifier.
2019-12-23 16:54:14 +09:00
Takatoshi Kondo
8085ab8721 Merge pull request #823 from redboltz/update_to_3.2.1
Updated the version to 3.2.1.
2019-12-10 14:36:16 +09:00
Takatoshi Kondo
b36e75a42e Updated the version to 3.2.1. 2019-12-10 12:44:07 +09:00
Takatoshi Kondo
f17f8d79c4 Merge pull request #804 from herbrechtsmeier/cmake-remove-alias-from-package-config
cmake: Remove alias from package config
2019-12-10 12:33:18 +09:00
Takatoshi Kondo
f89f05b883 Merge pull request #821 from tsundre/fix-msgpack_checked_call
Correctly check return value of snprintf
2019-12-09 15:19:42 +09:00
Takatoshi Kondo
bd5f814cb2 Merge pull request #819 from devnexen/test_warning_fixes
c++11 unit tests silent warning fixes proposal.
2019-12-05 08:28:00 +09:00
Torleiv Sundre
bf6cc035c7 Fix tests for MSVC <= 2013
Use the _TRUNCATE flag for the count parameter to _snprintf_s. Without
this, the tests for MSVC <= 2013 failed on stack corruption!
2019-12-04 20:10:42 +01:00
Torleiv Sundre
a6bf728a5c Correctly check return value of snprintf
In MSGPACK_CHECKED_CALL, the return value of snprintf is incorrectly
assumed to mean success if it is less than or equal to the buffer size.
The call should only be considered a success if the return value is less
than the buffer size.

This commit adds two unit tests that illustrates the issue and fixes the
issue, making the unit tests pass.
2019-12-04 14:20:12 +01:00
David Carlier
698a482b67 c++11 unit tests silent warning fixes proposal. 2019-11-16 13:36:37 +00:00
Takatoshi Kondo
fbf5b9d74c Merge pull request #817 from BKPepe/add_include
Include <sys/uio.h> in Linux
2019-11-11 07:36:40 +09:00
Josef Schlehofer
65c35caab2 Include <sys/uio.h> in Linux
This is needed when cross-compiling for OpenWrt.
2019-11-10 11:40:13 +01:00
Takatoshi Kondo
ff9f14742b Merge pull request #812 from redboltz/fix_805
Fixed #805.
2019-09-24 20:10:25 +09:00
Takatoshi Kondo
4b4eb83cd1 Fixed #805.
Fixed fwrite return value comparison.
2019-09-24 16:43:15 +09:00
Stefan Herbrechtsmeier
7761497778 ci: add cmake tests for installed and embedded build 2019-09-21 08:22:26 +02:00
Stefan Herbrechtsmeier
6046d5c666 cmake: Remove alias from package config
The cmake target of an alias may not be an Imported Target.
Always build the msgpackc target and only build the msgpackc-static
target if both should be build to fix issue #801. Thereby the type
(shared or static) of the msgpackc target depends on the build
configuration.
2019-09-20 22:10:40 +02:00
Takatoshi Kondo
83eb70d718 Merge pull request #807 from redboltz/fix_806
Fixed #806.
2019-08-30 07:40:32 +09:00
Takatoshi Kondo
70f950ac05 Fixed #806.
Removed `ss.str().data()` (the type of ss is std::stringstream).
Introduced variable that is const reference of `ss.str()`.
2019-08-29 20:22:10 +09:00
Takatoshi Kondo
3129326432 Merge pull request #800 from redboltz/fix_799
Fixed #799.
2019-07-28 16:09:11 +09:00
Takatoshi Kondo
799cd15107 Fixed #799.
Fixed C++ `int main()` in the documents.
2019-07-28 14:45:38 +09:00
Takatoshi Kondo
942965ee87 Merge pull request #797 from probonopd/patch-1
Add "defined(__HAIKU__)", closes #796
2019-07-14 10:22:13 +09:00
probonopd
a123053823 Add "defined(__HAIKU__)", closes #796 2019-07-13 19:14:37 +00:00
Takatoshi Kondo
c7603fbbd1 Merge pull request #795 from redboltz/fix_794
Fixed #794.
2019-07-12 23:38:13 +09:00
Takatoshi Kondo
6954e01338 Fixed #794.
Buffer is expanded not only Z_OK, but also Z_BUF_ERROR case.
2019-07-12 21:55:50 +09:00
Takatoshi Kondo
7e23ec496a Merge pull request #793 from Bak-Jin-Hyeong/remove_unnecessary_lines
Remove unnecessary lines from 'parse.hpp'
2019-07-10 21:23:26 +09:00
박진형2 [ungeziefer]
bae148bd76 Remove unnecessary lines from 'parse.hpp' 2019-07-10 19:54:29 +09:00
Takatoshi Kondo
3fcecf7099 Merge pull request #792 from redboltz/cpp_fix_as_776
Replaced integer overflow with efficient way.
2019-07-07 20:38:14 +09:00
Takatoshi Kondo
7d994630d2 Replaced integer overflow with efficient way.
Same fix as #776 on C.
2019-07-07 18:13:31 +09:00
100 changed files with 2607 additions and 783 deletions

56
.github/depends/boost.sh vendored Executable file
View File

@@ -0,0 +1,56 @@
#!/bin/sh
usage()
{
cat <<EOL
-b - 32-bit or 64-bit library, maybe 32, 64 or both
-t - the toolset, maybe gcc, clang or both
EOL
}
build_boost()
{
BASE=`pwd`/..
./b2 -j4 --toolset=$1 --prefix=${BASE}/usr --libdir="${BASE}/usr/$1/lib$2" --with-chrono --with-context --with-filesystem --with-system --with-timer address-model=$2 install
}
bit="64"
toolset="gcc"
while getopts "b:t:" c; do
case "$c" in
b)
bit="$OPTARG"
[ "$bit" != "32" ] && [ "$bit" != "64" ] && [ "$bit" != "both" ] && usage && exit 1
;;
t)
toolset="$OPTARG"
[ "$toolset" != "gcc" ] && [ "$toolset" != "clang" ] && [ "$toolset" != "both" ] && usage && exit 1
;;
?*)
echo "invalid arguments." && exit 1
;;
esac
done
wget https://dl.bintray.com/boostorg/release/1.71.0/source/boost_1_71_0.tar.bz2
tar xf boost_1_71_0.tar.bz2
cd boost_1_71_0
./bootstrap.sh
build()
{
if [ "$bit" = "both" ]; then
build_boost $1 32
build_boost $1 64
else
build_boost $1 $bit
fi
}
if [ "$toolset" = "both" ]; then
build gcc
build clang
else
build $toolset
fi

62
.github/workflows/coverage.yml vendored Normal file
View File

@@ -0,0 +1,62 @@
name: coverage
on:
pull_request:
types: [opened, synchronize]
push:
branches:
- master
tags:
- '*'
jobs:
codecov:
timeout-minutes: 30
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v1
- name: install depends
run: |
sudo apt-get update
sudo apt-get install g++-multilib lcov
- name: Cache boost
id: cache-boost
uses: actions/cache@v1
with:
path: usr
key: ${{ runner.os }}-boost-20200107
- name: Build boost
if: steps.cache-boost.outputs.cache-hit != 'true'
run: ./.github/depends/boost.sh -b both -t gcc
- name: Compile tests
run: |
# install gtest
BASE=`pwd`
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
g++ -m64 src/gtest-all.cc -I. -Iinclude -c -fPIC
g++ -m64 src/gtest_main.cc -I. -Iinclude -c -fPIC
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 ..
mkdir build && cd build
CMAKE_LIBRARY_PATH="${BASE}/build" GTEST_ROOT="${BASE}/usr" CMAKE_PREFIX_PATH="${BASE}/usr/gcc/lib64/cmake" cmake -DMSGPACK_CXX17=ON -DMSGPACK_32BIT=OFF -DMSGPACK_BOOST=ON -DBUILD_SHARED_LIBS=ON -DMSGPACK_CHAR_SIGN=signed -DMSGPACK_USE_X3_PARSE=ON -DMSGPACK_ENABLE_CXX=ON -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
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"

304
.github/workflows/gha.yml vendored Normal file
View File

@@ -0,0 +1,304 @@
name: CI
on:
pull_request:
types: [opened, synchronize]
push:
branches:
- master
tags:
- '*'
jobs:
macos:
runs-on: macos-latest
strategy:
matrix:
pattern: [0, 1, 2, 3]
steps:
- uses: actions/checkout@v1
- name: Cache boost
id: cache-boost
uses: actions/cache@v1
with:
path: usr
key: ${{ runner.os }}-boost-20200107
- name: Build boost
if: steps.cache-boost.outputs.cache-hit != 'true'
run: ./.github/depends/boost.sh -b 64 -t clang
- name: build and test
env:
CC: clang
CXX: clang++
shell: bash
run: |
BASE=`pwd`;
# matrix config
if [ ${{ matrix.pattern }} == 0 ]; then
ACTION="ci/build_cmake.sh"
export CXX17="ON"
export ARCH="64"
export BOOST="ON"
SHARED="ON"
export CHAR_SIGN="unsigned"
export API_VERSION="1"
fi
if [ ${{ matrix.pattern }} == 1 ]; then
ACTION="ci/build_cmake.sh"
export CXX17="ON"
export ARCH="64"
export BOOST="ON"
export SHARED="ON"
export CHAR_SIGN="signed"
export API_VERSION="3"
fi
if [ ${{ matrix.pattern }} == 2 ]; then
ACTION="ci/build_cmake.sh"
export CXX17="ON"
export ARCH="64"
export SHARED="ON"
export CHAR_SIGN="signed"
export API_VERSION="2"
fi
if [ ${{ matrix.pattern }} == 3 ]; then
ACTION="ci/build_cmake.sh"
export ARCH="64"
export SHARED="ON"
export CHAR_SIGN="unsigned"
export API_VERSION="2"
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}" CMAKE_LIBRARY_PATH="${BASE}/usr/lib:${BASE}/build" GTEST_ROOT="${BASE}/usr" CMAKE_PREFIX_PATH="${BASE}/usr/clang/lib${ARCH}/cmake" CFLAGS="-Werror -g" CXXFLAGS="-Werror -g" ${ACTION}
cat Files.cmake| grep ".*\.[h|hpp]" | perl -pe 's/ //g' | sort > tmp1 && find include -name "*.h" -o -name "*.hpp" | sort > tmp2 && diff tmp1 tmp2
linux:
runs-on: ubuntu-18.04
strategy:
matrix:
pattern: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11]
steps:
- uses: actions/checkout@v1
- name: install depends
run: |
sudo apt-get update
sudo apt-get install g++-multilib clang-8 valgrind
- name: Cache boost
id: cache-boost
uses: actions/cache@v1
with:
path: usr
key: ${{ runner.os }}-boost-20200107
- name: Build boost
if: steps.cache-boost.outputs.cache-hit != 'true'
run: ./.github/depends/boost.sh -b both -t gcc
- name: build and test
shell: bash
run: |
BASE=`pwd`;
# matrix config
if [ ${{ matrix.pattern }} == 0 ]; then
export CC=clang
export CXX=clang++
ACTION="ci/build_cmake.sh"
export ARCH="64"
export BOOST="ON"
export SHARED="ON"
export CHAR_SIGN="unsigned"
export API_VERSION="2"
fi
if [ ${{ matrix.pattern }} == 1 ]; then
export CC=clang
export CXX=clang++
ACTION="ci/build_cmake.sh"
export ARCH="32"
export SHARED="ON"
export CHAR_SIGN="signed"
export API_VERSION="2"
fi
if [ ${{ matrix.pattern }} == 2 ]; then
export CC=clang
export CXX=clang++
ACTION="ci/build_cmake.sh"
export CXX17="ON"
export ARCH="64"
export BOOST="ON"
export SHARED="ON"
export CHAR_SIGN="signed"
export API_VERSION="3"
export X3_PARSE="ON"
fi
if [ ${{ matrix.pattern }} == 3 ]; then
export CC=clang
export CXX=clang++
ACTION="ci/build_cmake.sh"
export CXX17="ON"
export ARCH="32"
export SHARED="OFF"
export CHAR_SIGN="unsigned"
export API_VERSION="2"
fi
if [ ${{ matrix.pattern }} == 4 ]; then
export CC=gcc
export CXX=g++
ACTION="ci/build_cmake.sh"
export CXX17="ON"
export ARCH="64"
export SHARED="ON"
export CHAR_SIGN="signed"
export API_VERSION="2"
fi
if [ ${{ matrix.pattern }} == 5 ]; then
export CC=gcc
export CXX=g++
ACTION="ci/build_cmake.sh"
export CXX17="ON"
export ARCH="32"
export BOOST="ON"
export SHARED="ON"
export CHAR_SIGN="unsigned"
export API_VERSION="3"
export X3_PARSE="ON"
fi
if [ ${{ matrix.pattern }} == 6 ]; then
export CC=gcc
export CXX=g++
ACTION="ci/build_cmake.sh"
export ARCH="64"
export SHARED="ON"
export CHAR_SIGN="unsigned"
export API_VERSION="2"
fi
if [ ${{ matrix.pattern }} == 7 ]; then
export CC=gcc
export CXX=g++
ACTION="ci/build_cmake.sh"
export ARCH="32"
export BOOST="ON"
export SHARED="OFF"
export CHAR_SIGN="signed"
export API_VERSION="1"
fi
if [ ${{ matrix.pattern }} == 8 ]; then
export CC=gcc
export CXX=g++
ACTION="ci/build_cmake.sh"
export ARCH="32"
export BOOST="ON"
export SHARED="OFF"
export CHAR_SIGN="signed"
export API_VERSION="2"
fi
if [ ${{ matrix.pattern }} == 9 ]; then
export CC=clang
export CXX=clang++
ACTION="ci/build_regression.sh"
export ARCH="64"
export SAN="UBSAN"
export MSGPACK_FUZZ_REGRESSION="ON"
export CTEST_OUTPUT_ON_FAILURE=1
fi
if [ ${{ matrix.pattern }} == 10 ]; then
export CC=clang
export CXX=clang++
ACTION="ci/build_regression.sh"
export ARCH="64"
export SAN="ASAN"
export MSGPACK_FUZZ_REGRESSION="ON"
export CTEST_OUTPUT_ON_FAILURE=1
fi
if [ ${{ matrix.pattern }} == 11 ]; then
export CC=gcc
export CXX=g++
ACTION="ci/build_cmake_embedded.sh"
export ARCH="64"
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 -fPIC
$CXX -m${ARCH} src/gtest_main.cc -I. -Iinclude -c -fPIC
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 ..
# install zlib
if [ ${ARCH} == 32 ]; then
sudo apt-get install lib32z1-dev
fi
# build and test
CMAKE_CXX_COMPILER="${CXX}" CMAKE_C_COMPILER="${CC}" CMAKE_LIBRARY_PATH="${BASE}/usr/lib:${BASE}/build" GTEST_ROOT="${BASE}/usr" CMAKE_PREFIX_PATH="${BASE}/usr/gcc/lib${ARCH}/cmake" CFLAGS="-Werror -g" CXXFLAGS="-Werror -g" MSGPACK_SAN="${SAN}" ${ACTION}
cat Files.cmake| grep ".*\.[h|hpp]" | perl -pe 's/ //g' | sort > tmp1 && find include -name "*.h" -o -name "*.hpp" | sort > tmp2 && diff tmp1 tmp2
windows:
runs-on: windows-2016
strategy:
matrix:
pattern: [0, 1, 2, 3]
steps:
- uses: actions/checkout@v1
- name: Cache vcpkg
id: cache-vcpkg
uses: actions/cache@v1.0.3
with:
path: C:/vcpkg/installed/x64-windows
key: ${{ runner.os }}-vcpkg
- name: Build dependencies
if: steps.cache-vcpkg.outputs.cache-hit != 'true'
shell: powershell
run: |
vcpkg install gtest:x64-windows
vcpkg install zlib:x64-windows
- name: Build and test
shell: powershell
run: |
if (${{ matrix.pattern }} -eq 0) {
$CPP11="-DMSGPACK_CXX11=OFF"
$BOOST="-DMSGPACK_BOOST=OFF"
}
if (${{ matrix.pattern }} -eq 1) {
$CPP11="-DMSGPACK_CXX11=OFF"
$BOOST="-DMSGPACK_BOOST=ON"
}
if (${{ matrix.pattern }} -eq 2) {
$CPP11="-DMSGPACK_CXX11=ON"
$BOOST="-DMSGPACK_BOOST=OFF"
}
if (${{ matrix.pattern }} -eq 3) {
$CPP11="-DMSGPACK_CXX11=ON"
$BOOST="-DMSGPACK_BOOST=ON"
}
$CUR=(Get-Location).Path
md build
cd build
cmake -A x64 -DBOOST_ROOT="$env:BOOST_ROOT_1_72_0" -DCMAKE_TOOLCHAIN_FILE="C:/vcpkg/scripts/buildsystems/vcpkg.cmake" $CPP11 $BOOST "-DCMAKE_CXX_FLAGS=/D_VARIADIC_MAX=10 /EHsc /D_SILENCE_TR1_NAMESPACE_DEPRECATION_WARNING" ..
if ($LastExitCode -ne 0) { $host.SetShouldExit($LastExitCode) }
cmake --build . --config Release
$pathbak="$env:PATH"
$env:PATH="C:\vcpkg\installed\x64-windows\bin;$CUR\build\Release;$pathbak"
ctest -V
if ($LastExitCode -ne 0) { $host.SetShouldExit($LastExitCode) }
$env:PATH=$pathbak

View File

@@ -1,239 +0,0 @@
language: cpp
sudo: false
dist: trusty
install:
- export BASE=`pwd`
- mkdir ${BASE}/usr
- if [ "$TRAVIS_OS_NAME" == "linux" ]; then wget --no-check-certificate https://cmake.org/files/v3.7/cmake-3.7.1-Linux-x86_64.sh -O cmake-3.7.1-Linux-x86_64.sh; fi
- if [ "$TRAVIS_OS_NAME" == "linux" ]; then chmod a+x cmake-3.7.1-Linux-x86_64.sh; fi
- if [ "$TRAVIS_OS_NAME" == "linux" ]; then ./cmake-3.7.1-Linux-x86_64.sh --prefix=${BASE}/usr --skip-license; fi
- if [ "$TRAVIS_OS_NAME" == "linux" ]; then export PATH="${BASE}/usr/bin:$PATH"; fi
- if [ "$TRAVIS_OS_NAME" == "linux" ]; then export LD_LIBRARY_PATH="${BASE}/usr/lib:$LD_LIBRARY_PATH"; fi
- if [ "$CXX" == "g++" ]; then export CXX="g++-7" CC="gcc-7"; fi
- if [ "$CXX" == "clang++" ] && [ "$TRAVIS_OS_NAME" == "linux" ]; then export CXX="clang++-5.0" CC="clang-5.0"; fi
- if [ "$CXX" == "g++" ] && [ "$TRAVIS_OS_NAME" == "linux" ]; then cd /usr/include/c++/$(g++ -v 2>&1 | grep version | awk '{print $3}')/bits; ln -s ../ext/atomicity.h .; cd ${BASE}/usr; fi
#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 ..
# valgrind
- if [ "$TRAVIS_OS_NAME" == "linux" ] && [ "$MSGPACK_FUZZ_REGRESSION" != "ON" ]; then wget http://valgrind.org/downloads/valgrind-3.12.0.tar.bz2 && tar xjf valgrind-3.12.0.tar.bz2 && cd valgrind-3.12.0 && ./configure --prefix=${BASE}/usr > /dev/null && make -j3 > /dev/null && make install > /dev/null && cd ..; fi
# boost
- if [ "$BOOST" == "ON" ] && [ "MSGPACK_FUZZ_REGRESSION" != "ON" ]; then wget http://sourceforge.net/projects/boost/files/boost/1.67.0/boost_1_67_0.zip && unzip -q boost_1_67_0.zip && cd boost_1_67_0 && ./bootstrap.sh && ./b2 -j3 --prefix=${BASE}/usr --with-chrono --with-context --with-system --with-timer address-model=${ARCH} install > /dev/null && cd ..; fi
- if [ "$MSGPACK_FUZZ_REGRESSION" == "ON" ]; then wget http://sourceforge.net/projects/boost/files/boost/1.67.0/boost_1_67_0.zip && unzip -q boost_1_67_0.zip && cd boost_1_67_0 && ./bootstrap.sh --with-toolset=clang && ./b2 clean && ./b2 -j$(nproc) --prefix=${BASE}/usr --with-system --with-filesystem address-model=${ARCH} install > /dev/null && cd ..; fi
- if [ "$TRAVIS_OS_NAME" == "linux" ]; then sudo ln -s /usr/include/x86_64-linux-gnu/zconf.h /usr/include; fi
matrix:
include:
- os: osx
compiler: clang
env: ACTION="ci/build_cmake.sh" CXX17="ON" ARCH="64" BOOST="ON" SHARED="ON" CHAR_SIGN="unsigned" API_VERSION="1"
- os: osx
compiler: clang
env: ACTION="ci/build_cmake.sh" CXX17="ON" ARCH="64" BOOST="ON" SHARED="ON" CHAR_SIGN="signed" API_VERSION="3"
- os: osx
compiler: clang
env: ACTION="ci/build_cmake.sh" CXX17="ON" ARCH="64" SHARED="ON" CHAR_SIGN="signed" API_VERSION="2"
- os: osx
compiler: clang
env: ACTION="ci/build_cmake.sh" ARCH="64" SHARED="ON" CHAR_SIGN="unsigned" API_VERSION="2"
- os: linux
compiler: clang
env: ACTION="ci/build_cmake.sh" ARCH="64" BOOST="ON" SHARED="ON" CHAR_SIGN="unsigned" API_VERSION="1"
addons:
apt:
sources:
- ubuntu-toolchain-r-test
- llvm-toolchain-trusty-5.0
packages:
- g++-multilib
- gcc-multilib
- gcc-7-multilib
- g++-7-multilib
- bzip2
- clang-5.0
- libc6-dbg
- os: linux
compiler: clang
env: ACTION="ci/build_cmake.sh" ARCH="32" SHARED="ON" CHAR_SIGN="signed" API_VERSION="2"
addons:
apt:
sources:
- ubuntu-toolchain-r-test
- llvm-toolchain-trusty-5.0
packages:
- g++-multilib
- gcc-multilib
- gcc-7-multilib
- g++-7-multilib
- lib32stdc++6-6-dbg
- lib32gcc1
- libc6-i386
- lib32z1-dev
- zlib1g-dev
- bzip2
- clang-5.0
- libc6-dbg
- os: linux
compiler: clang
env: ACTION="ci/build_cmake.sh" CXX17="ON" ARCH="64" BOOST="ON" SHARED="ON" CHAR_SIGN="signed" API_VERSION="3" X3_PARSE="ON"
addons:
apt:
sources:
- ubuntu-toolchain-r-test
- llvm-toolchain-trusty-5.0
packages:
- g++-multilib
- gcc-multilib
- gcc-7-multilib
- g++-7-multilib
- bzip2
- clang-5.0
- libc6-dbg
- os: linux
compiler: clang
env: ACTION="ci/build_cmake.sh" CXX17="ON" ARCH="32" SHARED="OFF" CHAR_SIGN="unsigned" API_VERSION="2"
addons:
apt:
sources:
- ubuntu-toolchain-r-test
- llvm-toolchain-trusty-5.0
packages:
- g++-multilib
- gcc-multilib
- gcc-7-multilib
- g++-7-multilib
- lib32stdc++6-6-dbg
- lib32gcc1
- libc6-i386
- lib32z1-dev
- zlib1g-dev
- bzip2
- clang-5.0
- libc6-dbg
- os: linux
compiler: gcc
env: ACTION="ci/build_cmake.sh" CXX17="ON" ARCH="64" SHARED="ON" CHAR_SIGN="signed" API_VERSION="2"
addons:
apt:
sources:
- ubuntu-toolchain-r-test
packages:
- g++-multilib
- gcc-multilib
- gcc-7-multilib
- g++-7-multilib
- bzip2
- libc6-dbg
- os: linux
compiler: gcc
env: ACTION="ci/build_cmake.sh" CXX17="ON" ARCH="32" BOOST="ON" SHARED="ON" CHAR_SIGN="unsigned" API_VERSION="3" X3_PARSE="ON"
addons:
apt:
sources:
- ubuntu-toolchain-r-test
packages:
- g++-multilib
- gcc-multilib
- gcc-7-multilib
- g++-7-multilib
- lib32stdc++6-6-dbg
- lib32gcc1
- libc6-i386
- lib32z1-dev
- zlib1g-dev
- bzip2
- libc6-dbg
- os: linux
compiler: gcc
env: ACTION="ci/build_cmake.sh" ARCH="64" SHARED="ON" CHAR_SIGN="unsigned" API_VERSION="2"
addons:
apt:
sources:
- ubuntu-toolchain-r-test
packages:
- g++-multilib
- gcc-multilib
- gcc-7-multilib
- g++-7-multilib
- bzip2
- libc6-dbg
- os: linux
compiler: gcc
env: ACTION="ci/build_cmake.sh" ARCH="32" BOOST="ON" SHARED="OFF" CHAR_SIGN="signed" API_VERSION="1"
addons:
apt:
sources:
- ubuntu-toolchain-r-test
packages:
- g++-multilib
- gcc-multilib
- gcc-7-multilib
- g++-7-multilib
- lib32stdc++6-6-dbg
- lib32gcc1
- libc6-i386
- lib32z1-dev
- zlib1g-dev
- bzip2
- libc6-dbg
- os: linux
compiler: gcc
env: ACTION="ci/build_cmake.sh" ARCH="32" BOOST="ON" SHARED="OFF" CHAR_SIGN="signed" API_VERSION="2"
addons:
apt:
sources:
- ubuntu-toolchain-r-test
packages:
- g++-multilib
- gcc-multilib
- gcc-7-multilib
- g++-7-multilib
- lib32stdc++6-6-dbg
- lib32gcc1
- libc6-i386
- lib32z1-dev
- zlib1g-dev
- bzip2
- libc6-dbg
- os: linux
compiler: clang
env: ACTION="ci/build_regression.sh" ARCH="64" SAN="UBSAN" MSGPACK_FUZZ_REGRESSION="ON"
addons:
apt:
sources:
- ubuntu-toolchain-r-test
- llvm-toolchain-trusty-5.0
packages:
- bzip2
- clang-5.0
script:
- CMAKE_CXX_COMPILER="${CXX}" CMAKE_C_COMPILER="${CC}" CMAKE_LIBRARY_PATH="${BASE}" GTEST_ROOT="${BASE}/gtest" BOOST_ROOT="${BASE}/boost" CTEST_OUTPUT_ON_FAILURE=1 MSGPACK_SAN="${SAN}" ci/build_regression.sh
- os: linux
compiler: clang
env: ACTION="ci/build_regression.sh" ARCH="64" SAN="ASAN" MSGPACK_FUZZ_REGRESSION="ON"
addons:
apt:
sources:
- ubuntu-toolchain-r-test
- llvm-toolchain-trusty-5.0
packages:
- bzip2
- clang-5.0
script:
- CMAKE_CXX_COMPILER="${CXX}" CMAKE_C_COMPILER="${CC}" CMAKE_LIBRARY_PATH="${BASE}" GTEST_ROOT="${BASE}/gtest" BOOST_ROOT="${BASE}/boost" CTEST_OUTPUT_ON_FAILURE=1 MSGPACK_SAN="${SAN}" ci/build_regression.sh
script:
- CMAKE_CXX_COMPILER="${CXX}" CMAKE_C_COMPILER="${CC}" CMAKE_LIBRARY_PATH="${BASE}/usr/lib:${BASE}/build" GTEST_ROOT="${BASE}/usr" BOOST_ROOT="${BASE}/usr" CFLAGS="-Werror -g" CXXFLAGS="-Werror -g" ${ACTION}
- cat Files.cmake| grep ".*\.[h|hpp]" | perl -pe 's/ //g' | sort > tmp1 && find include -name "*.h" -o -name "*.hpp" | sort > tmp2 && diff tmp1 tmp2

View File

@@ -1,3 +1,26 @@
# 2020-06-05 version 3.3.0
* Add json example for C (#870)
* Add both header and body packing functions for C (#870)
* Set default ref_size and chunk_size to vrefbuffer (#865)
* Add examples (#861)
* Improve build system (#839, #842)
* Improve tests (#829)
* Improve documents (#828)
* Remove some warnings (#827, #851, #871)
* Improve CI environment (#824, #831, #833, #834, #846, #860, 874)
# 2019-12-10 version 3.2.1
* Fix snprintf return value checking (#821)
* Remove some warnings (#819)
* Fix fbuffer result checking (#812)
* Fix temporary object handling (#807)
* Improve cmake support (#804)
* Fix invalid `int main` parameter (#800)
* Improve supporting platform (#797, #817)
* Fix ZLIB error handling (#795)
* Remove unused variable (#793)
* Improve integer overflow checking (#792)
# 2019-05-27 version 3.2.0
* Fix invalid include (#783)

View File

@@ -16,6 +16,7 @@ STRING (REGEX MATCH "#define MSGPACK_VERSION_REVISION *([0-9a-zA-Z_]*)" NULL_OUT
SET (VERSION_REVISION ${CMAKE_MATCH_1})
SET (VERSION ${VERSION_MAJOR}.${VERSION_MINOR}.${VERSION_REVISION})
LIST (APPEND CMAKE_MODULE_PATH "${PROJECT_SOURCE_DIR}/cmake/")
SET (prefix ${CMAKE_INSTALL_PREFIX})
SET (exec_prefix "\${prefix}")
SET (libdir "\${exec_prefix}/lib")
@@ -152,39 +153,57 @@ FIND_PACKAGE (ZLIB)
FIND_PACKAGE (Threads)
IF (GTEST_FOUND AND ZLIB_FOUND AND THREADS_FOUND AND NOT "${MSGPACK_FUZZ_REGRESSION}" STREQUAL "ON")
OPTION (MSGPACK_BUILD_TESTS "Build msgpack tests." ON)
ENDIF ()
IF (DEFINED BUILD_SHARED_LIBS)
IF (BUILD_SHARED_LIBS)
IF (DEFINED MSGPACK_ENABLE_SHARED AND NOT MSGPACK_ENABLE_SHARED)
MESSAGE(WARNING "MSGPACK_ENABLE_SHARED is overridden to ON by BUILD_SHARED_LIBS")
ENDIF ()
SET (MSGPACK_ENABLE_SHARED ON)
IF (DEFINED MSGPACK_ENABLE_STATIC AND MSGPACK_ENABLE_STATIC)
MESSAGE(WARNING "MSGPACK_ENABLE_STATIC is overridden to OFF by BUILD_SHARED_LIBS")
ENDIF ()
SET (MSGPACK_ENABLE_STATIC OFF)
ELSE ()
IF (DEFINED MSGPACK_ENABLE_SHARED AND MSGPACK_ENABLE_SHARED)
MESSAGE(WARNING "MSGPACK_ENABLE_SHARED is overridden to OFF by BUILD_SHARED_LIBS")
ENDIF ()
SET (MSGPACK_ENABLE_SHARED OFF)
IF (DEFINED MSGPACK_ENABLE_STATIC AND NOT MSGPACK_ENABLE_STATIC)
MESSAGE(WARNING "MSGPACK_ENABLE_STATIC is overridden to ON by BUILD_SHARED_LIBS")
ENDIF ()
SET (MSGPACK_ENABLE_STATIC ON)
ENDIF ()
ELSE ()
IF (NOT DEFINED MSGPACK_ENABLE_SHARED)
SET (MSGPACK_ENABLE_SHARED ON)
ENDIF ()
IF (NOT DEFINED MSGPACK_ENABLE_STATIC)
SET (MSGPACK_ENABLE_STATIC ON)
ENDIF ()
OPTION (MSGPACK_GEN_COVERAGE "Enable running gcov to get a test coverage report." OFF)
ENDIF ()
OPTION (MSGPACK_ENABLE_CXX "Enable C++ interface." ON)
OPTION (MSGPACK_CXX_ONLY "Build only C++ libraries (header-only)." OFF)
IF (MSGPACK_CXX_ONLY)
IF (DEFINED MSGPACK_ENABLE_SHARED AND MSGPACK_ENABLE_SHARED)
MESSAGE(WARNING "MSGPACK_ENABLE_SHARED is overridden to OFF by MSGPACK_CXX_ONLY")
ENDIF ()
SET (MSGPACK_ENABLE_SHARED OFF)
IF (DEFINED MSGPACK_ENABLE_STATIC AND MSGPACK_ENABLE_STATIC)
MESSAGE(WARNING "MSGPACK_ENABLE_STATIC is overridden to OFF by MSGPACK_CXX_ONLY")
ENDIF ()
SET (MSGPACK_ENABLE_STATIC OFF)
IF (DEFINED MSGPACK_ENABLE_CXX AND NOT MSGPACK_ENABLE_CXX)
MESSAGE(WARNING "MSGPACK_ENABLE_CXX is overridden to ON by MSGPACK_CXX_ONLY")
ENDIF ()
SET (MSGPACK_ENABLE_CXX ON)
ELSE ()
IF (DEFINED BUILD_SHARED_LIBS)
IF (BUILD_SHARED_LIBS)
IF (DEFINED MSGPACK_ENABLE_SHARED AND NOT MSGPACK_ENABLE_SHARED)
MESSAGE(WARNING "MSGPACK_ENABLE_SHARED is overridden to ON by BUILD_SHARED_LIBS")
ENDIF ()
SET (MSGPACK_ENABLE_SHARED ON)
IF (DEFINED MSGPACK_ENABLE_STATIC AND MSGPACK_ENABLE_STATIC)
MESSAGE(WARNING "MSGPACK_ENABLE_STATIC is overridden to OFF by BUILD_SHARED_LIBS")
ENDIF ()
SET (MSGPACK_ENABLE_STATIC OFF)
ELSE ()
IF (DEFINED MSGPACK_ENABLE_SHARED AND MSGPACK_ENABLE_SHARED)
MESSAGE(WARNING "MSGPACK_ENABLE_SHARED is overridden to OFF by BUILD_SHARED_LIBS")
ENDIF ()
SET (MSGPACK_ENABLE_SHARED OFF)
IF (DEFINED MSGPACK_ENABLE_STATIC AND NOT MSGPACK_ENABLE_STATIC)
MESSAGE(WARNING "MSGPACK_ENABLE_STATIC is overridden to ON by BUILD_SHARED_LIBS")
ENDIF ()
SET (MSGPACK_ENABLE_STATIC ON)
ENDIF ()
ELSE ()
IF (NOT DEFINED MSGPACK_ENABLE_SHARED)
SET (MSGPACK_ENABLE_SHARED ON)
ENDIF ()
IF (NOT DEFINED MSGPACK_ENABLE_STATIC)
SET (MSGPACK_ENABLE_STATIC ON)
ENDIF ()
SET (BUILD_SHARED_LIBS ${MSGPACK_ENABLE_SHARED})
ENDIF ()
ENDIF ()
INCLUDE (CheckCXXSourceCompiles)
CHECK_CXX_SOURCE_COMPILES ("
#include <bits/atomicity.h>
@@ -209,8 +228,9 @@ CONFIGURE_FILE (
@ONLY
)
IF (MSGPACK_ENABLE_SHARED)
ADD_LIBRARY (msgpackc SHARED
IF (MSGPACK_ENABLE_SHARED OR MSGPACK_ENABLE_STATIC)
ADD_LIBRARY (msgpackc
${msgpackc_SOURCES}
${msgpackc_HEADERS}
)
@@ -238,7 +258,7 @@ IF (MSGPACK_ENABLE_CXX AND ((CMAKE_VERSION VERSION_GREATER 3.0) OR (CMAKE_VERSIO
)
ENDIF ()
IF (MSGPACK_ENABLE_STATIC)
IF (MSGPACK_ENABLE_SHARED AND MSGPACK_ENABLE_STATIC)
ADD_LIBRARY (msgpackc-static STATIC
${msgpackc_SOURCES}
${msgpackc_HEADERS}
@@ -253,11 +273,6 @@ IF (MSGPACK_ENABLE_STATIC)
${CMAKE_CURRENT_SOURCE_DIR}
)
IF (NOT MSGPACK_ENABLE_SHARED)
# Add alias for subdirectories
ADD_LIBRARY (msgpackc ALIAS msgpackc-static)
ENDIF ()
SET_TARGET_PROPERTIES (msgpackc-static PROPERTIES OUTPUT_NAME "msgpackc")
IF (MSGPACK_ENABLE_SHARED)
@@ -280,6 +295,21 @@ IF ("${MSGPACK_FUZZ_REGRESSION}" STREQUAL "ON" AND "${CMAKE_CXX_COMPILER_ID}" ST
SET (MSGPACK_BUILD_EXAMPLES OFF)
ENDIF ()
IF (MSGPACK_GEN_COVERAGE)
IF (NOT MSGPACK_BUILD_TESTS)
MESSAGE(FATAL_ERROR "Coverage requires -DMSGPACK_BUILD_TESTS=ON")
ENDIF ()
STRING(TOUPPER "${CMAKE_BUILD_TYPE}" UPPER_CMAKE_BUILD_TYPE)
IF (NOT "${UPPER_CMAKE_BUILD_TYPE}" STREQUAL "DEBUG")
MESSAGE(FATAL_ERROR "Coverage requires -DCMAKE_BUILD_TYPE=Debug")
ENDIF ()
INCLUDE(CodeCoverage)
SET (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${COVERAGE_FLAGS}")
SET (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${COVERAGE_FLAGS}")
SETUP_TARGET_FOR_COVERAGE(coverage make coverage test)
ENDIF ()
IF (MSGPACK_BUILD_TESTS)
ENABLE_TESTING ()
@@ -291,19 +321,19 @@ IF (MSGPACK_BUILD_TESTS)
ENDIF ()
IF ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang" OR "${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU")
IF (MSGPACK_ENABLE_SHARED)
IF (MSGPACK_ENABLE_SHARED OR MSGPACK_ENABLE_STATIC)
SET_PROPERTY (TARGET msgpackc APPEND_STRING PROPERTY COMPILE_FLAGS " -Wall -Wextra -DPIC")
ENDIF ()
IF (MSGPACK_ENABLE_STATIC)
IF (MSGPACK_ENABLE_SHARED AND MSGPACK_ENABLE_STATIC)
SET_PROPERTY (TARGET msgpackc-static APPEND_STRING PROPERTY COMPILE_FLAGS " -Wall -Wextra" )
ENDIF ()
ENDIF ()
IF ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang")
IF (MSGPACK_ENABLE_SHARED)
IF (MSGPACK_ENABLE_SHARED OR MSGPACK_ENABLE_STATIC)
SET_PROPERTY (TARGET msgpackc APPEND_STRING PROPERTY COMPILE_FLAGS " -Wno-mismatched-tags")
ENDIF ()
IF (MSGPACK_ENABLE_STATIC)
IF (MSGPACK_ENABLE_SHARED AND MSGPACK_ENABLE_STATIC)
SET_PROPERTY (TARGET msgpackc-static APPEND_STRING PROPERTY COMPILE_FLAGS " -Wno-mismatched-tags")
ENDIF ()
ENDIF ()
@@ -316,6 +346,14 @@ IF ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "MSVC")
ENDIF ()
ENDIF ()
IF ("${CMAKE_C_COMPILER_ID}" STREQUAL "MSVC")
IF (CMAKE_C_FLAGS MATCHES "/W[0-4]")
STRING(REGEX REPLACE "/W[0-4]" "/W3 /WX" CMAKE_C_FLAGS "${CMAKE_C_FLAGS}")
ELSE ()
SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} /W3 /WX")
ENDIF ()
ENDIF ()
IF ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "MSVC90" OR "${CMAKE_CXX_COMPILER_ID}" STREQUAL "MSVC10")
SET_SOURCE_FILES_PROPERTIES(${msgpackc_SOURCES} PROPERTIES LANGUAGE CXX)
ENDIF ()
@@ -337,7 +375,7 @@ IF (MSGPACK_BUILD_EXAMPLES)
ADD_SUBDIRECTORY (example)
ENDIF ()
IF (MSGPACK_ENABLE_SHARED)
IF (MSGPACK_ENABLE_SHARED OR MSGPACK_ENABLE_STATIC)
SET (MSGPACK_INSTALLTARGETS msgpackc)
ENDIF ()
@@ -345,7 +383,7 @@ IF (MSGPACK_ENABLE_CXX AND ((CMAKE_VERSION VERSION_GREATER 3.0) OR (CMAKE_VERSIO
LIST (APPEND MSGPACK_INSTALLTARGETS msgpackc-cxx)
ENDIF ()
IF (MSGPACK_ENABLE_STATIC)
IF (MSGPACK_ENABLE_SHARED AND MSGPACK_ENABLE_STATIC)
LIST (APPEND MSGPACK_INSTALLTARGETS msgpackc-static)
ENDIF ()
@@ -358,7 +396,7 @@ FOREACH (file ${msgpackc_HEADERS})
GET_FILENAME_COMPONENT (dir ${file} PATH)
INSTALL (FILES ${file} DESTINATION ${CMAKE_INSTALL_PREFIX}/${dir})
ENDFOREACH ()
IF (NOT MSVC)
IF (NOT MSGPACK_CXX_ONLY AND NOT MSVC)
INSTALL (FILES ${CMAKE_CURRENT_BINARY_DIR}/msgpack.pc DESTINATION ${CMAKE_INSTALL_LIBDIR}/pkgconfig)
ENDIF ()
@@ -432,17 +470,19 @@ CONFIGURE_PACKAGE_CONFIG_FILE (msgpack-config.cmake.in
INSTALL_DESTINATION "${CMAKE_INSTALL_CMAKEDIR}"
)
INSTALL (EXPORT msgpack-targets
FILE
msgpack-targets.cmake
DESTINATION
"${CMAKE_INSTALL_CMAKEDIR}"
)
IF (NOT MSGPACK_CXX_ONLY)
INSTALL (EXPORT msgpack-targets
FILE
msgpack-targets.cmake
DESTINATION
"${CMAKE_INSTALL_CMAKEDIR}"
)
INSTALL (
FILES
"${CMAKE_CURRENT_BINARY_DIR}/msgpack-config.cmake"
"${CMAKE_CURRENT_BINARY_DIR}/msgpack-config-version.cmake"
DESTINATION
"${CMAKE_INSTALL_CMAKEDIR}"
)
INSTALL (
FILES
"${CMAKE_CURRENT_BINARY_DIR}/msgpack-config.cmake"
"${CMAKE_CURRENT_BINARY_DIR}/msgpack-config-version.cmake"
DESTINATION
"${CMAKE_INSTALL_CMAKEDIR}"
)
ENDIF ()

View File

@@ -5,14 +5,11 @@ LIST (APPEND msgpackc_SOURCES
src/vrefbuffer.c
src/zone.c
)
# For both C and C++ libraries
LIST (APPEND msgpackc_HEADERS
include/msgpack.h
include/msgpack/fbuffer.h
include/msgpack/gcc_atomic.h
include/msgpack/object.h
include/msgpack/pack.h
include/msgpack/pack_define.h
include/msgpack/pack_template.h
include/msgpack/predef.h
include/msgpack/predef/architecture.h
include/msgpack/predef/architecture/alpha.h
@@ -152,20 +149,33 @@ LIST (APPEND msgpackc_HEADERS
include/msgpack/predef/platform/windows_uwp.h
include/msgpack/predef/version.h
include/msgpack/predef/version_number.h
include/msgpack/sbuffer.h
include/msgpack/sysdep.h
include/msgpack/timestamp.h
include/msgpack/unpack.h
include/msgpack/unpack_define.h
include/msgpack/unpack_template.h
include/msgpack/util.h
include/msgpack/version.h
include/msgpack/version_master.h
include/msgpack/vrefbuffer.h
include/msgpack/zbuffer.h
include/msgpack/zone.h
)
IF (NOT MSGPACK_CXX_ONLY)
# Only for C library
LIST (APPEND msgpackc_HEADERS
include/msgpack.h
include/msgpack/gcc_atomic.h
include/msgpack/pack.h
include/msgpack/pack_define.h
include/msgpack/pack_template.h
include/msgpack/sbuffer.h
include/msgpack/timestamp.h
include/msgpack/unpack.h
include/msgpack/unpack_template.h
include/msgpack/util.h
include/msgpack/version.h
include/msgpack/vrefbuffer.h
)
ENDIF ()
IF (MSGPACK_ENABLE_CXX)
# Only for C++ library
LIST (APPEND msgpackc_HEADERS
include/msgpack.hpp
include/msgpack/adaptor/adaptor_base.hpp

View File

@@ -6,10 +6,11 @@ Currently, RPC implementation is not available.
# Install
## Install with package manager
## Mac OS X with MacPorts
### MacOS with MacPorts
On Mac OS X, you can install MessagePack for C using MacPorts.
On MacOS, you can install MessagePack for C using MacPorts.
```
$ sudo port install msgpack
@@ -23,48 +24,44 @@ You can also install via Homebrew.
$ brew install msgpack
```
## FreeBSD with Ports Collection
### FreeBSD with Ports Collection
On FreeBSD, you can use Ports Collection. Install [net/msgpack|http://www.freebsd.org/cgi/cvsweb.cgi/ports/devel/msgpack/] package.
On FreeBSD, you can use Ports Collection. Install [net/msgpack](http://www.freebsd.org/cgi/cvsweb.cgi/ports/devel/msgpack/) package.
## Gentoo Linux with Portage
### Gentoo Linux with Portage
On Gentoo Linux, you can use emerge. Install [dev-libs/msgpack|http://gentoo-portage.com/dev-libs/msgpack] package.
On Gentoo Linux, you can use emerge. Install [dev-libs/msgpack](http://gentoo-portage.com/dev-libs/msgpack) package.
## Other UNIX-like platform with ./configure
### Windows with vcpkg
On the other UNIX-like platforms, download source package from [Releases|http://msgpack.org/releases/cpp/] and run `./configure && make && make install`.
There are several package managers available, and vcpkg is typical.
```
$ wget http://msgpack.org/releases/cpp/msgpack-1.3.0.tar.gz
$ vcpkg install msgpack:x64-windows
```
## Install with source code
### Build with cmake
You need to install cmake (2.8.12 or higher) first.
```
$ git clone https://github.com/msgpack/msgpack-c.git
$ cd msgpack-c
$ mkdir build
$ cd build
$ cmake ..
$ cmake --build .
$ cmake --build . --target install
```
### Build with autotools
In versions 1.4.2 and below, you can use `autotools` to build on UNIX-like platforms.
```
$ wget https://github.com/msgpack/msgpack-c/archive/cpp-1.3.0.tar.gz
$ tar zxvf msgpack-1.3.0.tar.gz
$ cd msgpack-1.3.0
$ ./configure
$ make
$ sudo make install
```
## Windows
On Windows, download source package from [here|https://sourceforge.net/projects/msgpack/files/] and extract it.
Then open `msgpack_vc8.vcproj` file and build it using batch build. It builds libraries on `lib/` folder and header files on `include/` folder.
You can build using command line as follows:
```
> vcbuild msgpack_vc2008.vcproj
> dir lib % DLL files are here
> dir include % header files are here
```
## Install from git repository
You need to install gcc (4.1.0 or higher), autotools.
```
$ git clone git@github.com:msgpack/msgpack.git
$ cd msgpack/cpp
$ ./bootstrap
$ ./bootstrap # If the 'configure' script already exists, you can omit this step.
$ ./configure
$ make
$ sudo make install

View File

@@ -59,7 +59,7 @@ $ ./hello
#include <iostream>
#include <string>
int main(void) {
int main() {
// serializes multiple objects using msgpack::packer.
msgpack::sbuffer buffer;
@@ -98,7 +98,7 @@ int main(void) {
#include <iostream>
#include <string>
int main(void) {
int main() {
// serializes multiple objects into one message containing an array using msgpack::packer.
msgpack::sbuffer buffer;
@@ -139,7 +139,7 @@ public:
MSGPACK_DEFINE(m_str, m_vec);
};
int main(void) {
int main() {
std::vector<myclass> vec;
// add some elements into vec...

View File

@@ -1,7 +1,8 @@
`msgpack` for C/C++
===================
Version 3.2.0 [![Build Status](https://travis-ci.org/msgpack/msgpack-c.svg?branch=master)](https://travis-ci.org/msgpack/msgpack-c) [![Build status](https://ci.appveyor.com/api/projects/status/8kstcgt79qj123mw/branch/master?svg=true)](https://ci.appveyor.com/project/redboltz/msgpack-c/branch/master)
Version 3.3.0 [![Build Status](https://travis-ci.org/msgpack/msgpack-c.svg?branch=master)](https://travis-ci.org/msgpack/msgpack-c) [![Build status](https://ci.appveyor.com/api/projects/status/8kstcgt79qj123mw/branch/master?svg=true)](https://ci.appveyor.com/project/redboltz/msgpack-c/branch/master)
[![codecov](https://codecov.io/gh/msgpack/msgpack-c/branch/master/graph/badge.svg)](https://codecov.io/gh/msgpack/msgpack-c)
It's like JSON but smaller and faster.
@@ -68,7 +69,7 @@ In C++:
#include <iostream>
#include <sstream>
int main(void)
int main()
{
msgpack::type::tuple<int, bool, std::string> src(1, true, "example");
@@ -149,7 +150,7 @@ execute the following commands:
`MSGPACK_CXX[11|17]` flags are not affected to installing files. Just switching test cases. All files are installed in every settings.
When you use the C part of `msgpack-c`, you need to build and link the library. By default, both static/shared libraries are built. If you want to build only static library, set `BUILD_SHARED_LIBS=OFF` to cmake. If you want to build only shared library, set `BUILD_SHARED_L
When you use the C part of `msgpack-c`, you need to build and link the library. By default, both static/shared libraries are built. If you want to build only static library, set `BUILD_SHARED_LIBS=OFF` to cmake. If you want to build only shared library, set `BUILD_SHARED_LIBS=ON`.
#### GUI on Windows

View File

@@ -1,4 +1,8 @@
version: 3.2.0.{build}
version: 3.3.0.{build}
branches:
only:
- master
image:
- Visual Studio 2015
@@ -51,7 +55,7 @@ build_script:
- md build
- cd build
- cmake -G %msvc% %cpp11% %boost% %x3_parse% -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.2.11\build\Release\zlib.lib -DZLIB_INCLUDE_DIR=%APPVEYOR_BUILD_FOLDER%\zlib-1.2.11 -DCMAKE_CXX_FLAGS='"/D_VARIADIC_MAX=10 /EHsc"' ..
- cmake --build . --config Release
- 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.2.11\build\Release;%APPVEYOR_BUILD_FOLDER%\build\release

View File

@@ -19,11 +19,13 @@ fi
if [ "${ARCH}" == "32" ]
then
export BIT32="ON"
export ARCH_FLAG="-m32"
else
export BIT32="OFF"
export ARCH_FLAG="-m64"
fi
cmake -DMSGPACK_CXX11=${CXX11} -DMSGPACK_CXX17=${CXX17} -DMSGPACK_32BIT=${BIT32} -DMSGPACK_BOOST=${BOOST} -DBUILD_SHARED_LIBS=${SHARED} -DMSGPACK_CHAR_SIGN=${CHAR_SIGN} -DMSGPACK_DEFAULT_API_VERSION=${API_VERSION} -DMSGPACK_USE_X3_PARSE=${X3_PARSE} ..
cmake -DMSGPACK_CXX11=${CXX11} -DMSGPACK_CXX17=${CXX17} -DMSGPACK_32BIT=${BIT32} -DMSGPACK_BOOST=${BOOST} -DBUILD_SHARED_LIBS=${SHARED} -DMSGPACK_CHAR_SIGN=${CHAR_SIGN} -DMSGPACK_DEFAULT_API_VERSION=${API_VERSION} -DMSGPACK_USE_X3_PARSE=${X3_PARSE} -DCMAKE_CXX_FLAGS=${ARCH_FLAG} ..
ret=$?
if [ $ret -ne 0 ]
@@ -72,4 +74,39 @@ then
fi
fi
if [ "${ARCH}" != "32" ]
then
mkdir install-test
ret=$?
if [ $ret -ne 0 ]
then
exit $ret
fi
cd install-test
ret=$?
if [ $ret -ne 0 ]
then
exit $ret
fi
cmake -DCMAKE_PREFIX_PATH=`pwd`/../install/usr/local/lib/cmake ../../example/cmake
ret=$?
if [ $ret -ne 0 ]
then
exit $ret
fi
make
ret=$?
if [ $ret -ne 0 ]
then
exit $ret
fi
fi
exit 0

59
ci/build_cmake_embedded.sh Executable file
View File

@@ -0,0 +1,59 @@
#!/bin/bash
cd example/cmake
ret=$?
if [ $ret -ne 0 ]
then
exit $ret
fi
rm -f msgpack-c
ret=$?
if [ $ret -ne 0 ]
then
exit $ret
fi
ln -s ../.. msgpack-c
ret=$?
if [ $ret -ne 0 ]
then
exit $ret
fi
mkdir build
ret=$?
if [ $ret -ne 0 ]
then
exit $ret
fi
cd build
ret=$?
if [ $ret -ne 0 ]
then
exit $ret
fi
cmake -DEXAMPLE_MSGPACK_EMBEDDED=ON ..
ret=$?
if [ $ret -ne 0 ]
then
exit $ret
fi
make example example-static
ret=$?
if [ $ret -ne 0 ]
then
exit $ret
fi
exit 0

55
cmake/CodeCoverage.cmake Normal file
View File

@@ -0,0 +1,55 @@
# Check prereqs
FIND_PROGRAM(GCOV_PATH gcov)
FIND_PROGRAM(LCOV_PATH lcov)
FIND_PROGRAM(GENHTML_PATH genhtml)
IF(NOT GCOV_PATH)
MESSAGE(FATAL_ERROR "gcov not found! Aborting...")
ENDIF()
IF(NOT CMAKE_COMPILER_IS_GNUCC)
# Clang version 3.0.0 and greater now supports gcov as well.
MESSAGE(STATUS "Compiler is not GNU gcc! Clang Version 3.0.0 and greater supports gcov as well, but older versions don't.")
IF(NOT "${CMAKE_C_COMPILER_ID}" STREQUAL "Clang" AND NOT "${CMAKE_C_COMPILER_ID}" STREQUAL "AppleClang")
MESSAGE(FATAL_ERROR "Compiler is not GNU gcc! Aborting...")
ENDIF()
ENDIF()
SET(COVERAGE_FLAGS "-g -O0 --coverage")
FUNCTION(SETUP_TARGET_FOR_COVERAGE _targetname _testrunner _outputname)
IF(NOT LCOV_PATH)
MESSAGE(FATAL_ERROR "lcov not found! Aborting...")
ENDIF()
IF(NOT GENHTML_PATH)
MESSAGE(FATAL_ERROR "genhtml not found! Aborting...")
ENDIF()
# Setup target
ADD_CUSTOM_TARGET(${_targetname}
# Cleanup lcov
${LCOV_PATH} --directory . --zerocounters
# Run tests
COMMAND ${_testrunner} ${ARGV3}
# Capturing lcov counters and generating report
COMMAND ${LCOV_PATH} --directory . --capture --output-file ${_outputname}.info --base-directory ${CMAKE_SOURCE_DIR} --no-external --quiet
COMMAND ${LCOV_PATH} --remove ${_outputname}.info '*/test/*' '*/fuzz/*' --output-file ${_outputname}.info.cleaned --quiet
COMMAND ${GENHTML_PATH} -o ${_outputname} ${_outputname}.info.cleaned --prefix ${CMAKE_SOURCE_DIR}
# COMMAND ${CMAKE_COMMAND} -E remove ${_outputname}.info ${_outputname}.info.cleaned
WORKING_DIRECTORY ${CMAKE_BINARY_DIR}
COMMENT "Resetting code coverage counters to zero.\nProcessing code coverage counters and generating report."
)
# Show info where to find the report
ADD_CUSTOM_COMMAND(TARGET ${_targetname} POST_BUILD
COMMAND ;
COMMENT "Open ./${_outputname}/index.html in your browser to view the coverage report."
)
ENDFUNCTION()

36
codecov.yml Normal file
View File

@@ -0,0 +1,36 @@
codecov:
notify:
require_ci_to_pass: yes
coverage:
precision: 2
round: down
range: "70...100"
status:
project: yes
patch: yes
changes: no
parsers:
gcov:
branch_detection:
conditional: yes
loop: yes
method: no
macro: no
comment:
layout: "header, diff"
behavior: default
require_changes: no
ignore:
- "test"
- "fuzz"
- "erb"
- "ci"
- "cmake"
- "examle"
- "external"
- "usr"

View File

@@ -1,5 +1,9 @@
ADD_SUBDIRECTORY (c)
ADD_SUBDIRECTORY (cpp03)
ADD_SUBDIRECTORY (cpp11)
ADD_SUBDIRECTORY (boost)
ADD_SUBDIRECTORY (x3)
IF (NOT MSGPACK_CXX_ONLY)
ADD_SUBDIRECTORY (c)
ENDIF ()
IF (MSGPACK_ENABLE_CXX)
ADD_SUBDIRECTORY (cpp03)
ADD_SUBDIRECTORY (cpp11)
ADD_SUBDIRECTORY (boost)
ADD_SUBDIRECTORY (x3)
ENDIF ()

View File

@@ -27,7 +27,7 @@ FOREACH (source_file ${exec_PROGRAMS})
)
TARGET_INCLUDE_DIRECTORIES (${source_file_we}
PRIVATE
$<TARGET_PROPERTY:msgpackc,INTERFACE_INCLUDE_DIRECTORIES>
$<TARGET_PROPERTY:msgpackc-cxx,INTERFACE_INCLUDE_DIRECTORIES>
)
TARGET_LINK_LIBRARIES (${source_file_we}
${Boost_SYSTEM_LIBRARY}

View File

@@ -83,7 +83,8 @@ int main() {
u.address = "Tokyo";
msgpack::pack(ss, u);
msgpack::object_handle oh = msgpack::unpack(ss.str().data(), ss.str().size());
std::string const& str = ss.str();
msgpack::object_handle oh = msgpack::unpack(str.data(), str.size());
msgpack::object const& obj = oh.get();
std::cout << "Unpacked msgpack object." << std::endl;
std::cout << obj << std::endl;

View File

@@ -1,19 +1,16 @@
IF (MSGPACK_ENABLE_SHARED)
SET (MSGPACK_LIB msgpackc)
ENDIF ()
IF (MSGPACK_ENABLE_STATIC)
SET (MSGPACK_LIB msgpackc-static)
ENDIF ()
FIND_PACKAGE (cJSON)
LIST (APPEND exec_PROGRAMS
boundary.c
lib_buffer_unpack.c
simple_c.c
speed_test_uint32_array.c
speed_test_uint64_array.c
user_buffer_unpack.c
)
IF (cJSON_FOUND)
LIST (APPEND exec_PROGRAMS jsonconv.c)
ENDIF ()
FOREACH (source_file ${exec_PROGRAMS})
GET_FILENAME_COMPONENT (source_file_we ${source_file} NAME_WE)
@@ -22,21 +19,26 @@ FOREACH (source_file ${exec_PROGRAMS})
${source_file}
)
TARGET_LINK_LIBRARIES (${source_file_we}
${MSGPACK_LIB}
msgpackc
)
IF ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang" OR "${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU")
IF ("${CMAKE_C_COMPILER_ID}" STREQUAL "Clang" OR "${CMAKE_C_COMPILER_ID}" STREQUAL "GNU")
SET_PROPERTY (TARGET ${source_file_we} APPEND_STRING PROPERTY COMPILE_FLAGS " -Wall -Wextra")
ENDIF ()
IF ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang")
IF ("${CMAKE_C_COMPILER_ID}" STREQUAL "Clang")
SET_PROPERTY (TARGET ${source_file_we} APPEND_STRING PROPERTY COMPILE_FLAGS " -Wno-mismatched-tags")
ENDIF ()
IF ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "MSVC")
IF (CMAKE_CXX_FLAGS MATCHES "/W[0-4]")
STRING(REGEX REPLACE "/W[0-4]" "/W3 /WX" CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}")
IF ("${CMAKE_C_COMPILER_ID}" STREQUAL "MSVC")
IF (CMAKE_C_FLAGS MATCHES "/W[0-4]")
STRING(REGEX REPLACE "/W[0-4]" "/W3 /WX" CMAKE_C_FLAGS "${CMAKE_C_FLAGS}")
ELSE ()
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /W3 /WX")
SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} /W3 /WX")
ENDIF ()
ENDIF ()
ENDFOREACH ()
IF (cJSON_FOUND)
TARGET_LINK_LIBRARIES (jsonconv ${CJSON_LIBRARIES})
TARGET_INCLUDE_DIRECTORIES(jsonconv PRIVATE ${CJSON_INCLUDE_DIRS})
ENDIF ()

296
example/c/boundary.c Normal file
View File

@@ -0,0 +1,296 @@
/* gcc boundary.c -o boundary -Wconversion -Wpointer-sign */
#include <msgpack.h>
#include <stdio.h>
#include <assert.h>
static inline unsigned char atohex(char a)
{
int x;
if (a >= 'a') {
x = a - 'a' + 10;
} else if (a >= 'A') {
x = a - 'A' + 10;
} else {
x = a - '0';
}
assert(x >= 0 && x < 16);
return (unsigned char)x;
}
// Return 0 if equal
static inline int bytesncmp(char *data, const char *bytes, size_t len)
{
size_t n = len >> 1;
size_t i = 0;
int diff;
for (; i < n; i++) {
diff = (unsigned char)data[i] - (atohex(bytes[2 * i]) << 4) - atohex(bytes[2 * i + 1]);
if (diff != 0) {
return diff;
}
}
return 0;
}
int main()
{
msgpack_sbuffer sbuf;
msgpack_packer *x;
size_t offset = 0;
char data[65536];
msgpack_timestamp ts[] = {
{ 0xFFFFFFFF, 0 },
{ 0x100000000, 0 },
{ 0x3FFFFFFFF, 0 },
{ 0x400000000, 0 },
{ INT64_MAX, UINT32_MAX }
};
#define check_sbuffer(b) \
do { \
size_t len = strlen(#b); \
assert((sbuf.size - offset) * 2 == len); \
assert(bytesncmp(sbuf.data + offset, #b, len) == 0); \
offset = sbuf.size; \
} while (0)
msgpack_sbuffer_init(&sbuf);
x = msgpack_packer_new(&sbuf, msgpack_sbuffer_write);
msgpack_pack_fix_uint8(x, 0); check_sbuffer(cc00); /* cc 00 */
msgpack_pack_fix_uint8(x, 0xFF); check_sbuffer(ccff); /* cc ff */
msgpack_pack_fix_uint16(x, 0); check_sbuffer(cd0000); /* cd 00 00 */
msgpack_pack_fix_uint16(x, 0xFFFF); check_sbuffer(cdffff); /* cd ff ff */
msgpack_pack_fix_uint32(x, 0); check_sbuffer(ce00000000); /* ce 00 00 00 00 */
msgpack_pack_fix_uint32(x, 0xFFFFFFFF); check_sbuffer(ceffffffff); /* ce ff ff ff ff */
msgpack_pack_fix_uint64(x, 0); check_sbuffer(cf0000000000000000); /* cf 00 00 00 00 00 00 00 00 */
msgpack_pack_fix_uint64(x, 0xFFFFFFFFFFFFFFFF); check_sbuffer(cfffffffffffffffff); /* cf ff ff ff ff ff ff ff ff */
msgpack_pack_uint8(x, 0); check_sbuffer(00); /* 00 */
msgpack_pack_uint8(x, 0x7F); check_sbuffer(7f); /* 7f */
msgpack_pack_uint8(x, 0x80); check_sbuffer(cc80); /* cc 80 */
msgpack_pack_uint8(x, 0xFF); check_sbuffer(ccff); /* cc ff */
msgpack_pack_uint16(x, 0); check_sbuffer(00); /* 00 */
msgpack_pack_uint16(x, 0x7F); check_sbuffer(7f); /* 7f */
msgpack_pack_uint16(x, 0x80); check_sbuffer(cc80); /* cc 80 */
msgpack_pack_uint16(x, 0xFF); check_sbuffer(ccff); /* cc ff */
msgpack_pack_uint16(x, 0x100); check_sbuffer(cd0100); /* cd 01 00 */
msgpack_pack_uint16(x, 0xFFFF); check_sbuffer(cdffff); /* cd ff ff */
msgpack_pack_uint32(x, 0); check_sbuffer(00); /* 00 */
msgpack_pack_uint32(x, 0x7F); check_sbuffer(7f); /* 7f */
msgpack_pack_uint32(x, 0x80); check_sbuffer(cc80); /* cc 80 */
msgpack_pack_uint32(x, 0xFF); check_sbuffer(ccff); /* cc ff */
msgpack_pack_uint32(x, 0x100); check_sbuffer(cd0100); /* cd 01 00 */
msgpack_pack_uint32(x, 0xFFFF); check_sbuffer(cdffff); /* cd ff ff */
msgpack_pack_uint32(x, 0x10000); check_sbuffer(ce00010000); /* ce 00 01 00 00 */
msgpack_pack_uint32(x, 0xFFFFFFFF); check_sbuffer(ceffffffff); /* ce ff ff ff ff */
msgpack_pack_uint64(x, 0); check_sbuffer(00); /* 00 */
msgpack_pack_uint64(x, 0x7F); check_sbuffer(7f); /* 7f */
msgpack_pack_uint64(x, 0x80); check_sbuffer(cc80); /* cc 80 */
msgpack_pack_uint64(x, 0xFF); check_sbuffer(ccff); /* cc ff */
msgpack_pack_uint64(x, 0x100); check_sbuffer(cd0100); /* cd 01 00 */
msgpack_pack_uint64(x, 0xFFFF); check_sbuffer(cdffff); /* cd ff ff */
msgpack_pack_uint64(x, 0x10000); check_sbuffer(ce00010000); /* ce 00 01 00 00 */
msgpack_pack_uint64(x, 0xFFFFFFFF); check_sbuffer(ceffffffff); /* ce ff ff ff ff */
msgpack_pack_uint64(x, 0x100000000); check_sbuffer(cf0000000100000000); /* cf 00 00 00 01 00 00 00 00 */
msgpack_pack_uint64(x, 0xFFFFFFFFFFFFFFFF); check_sbuffer(cfffffffffffffffff); /* cf ff ff ff ff ff ff ff ff */
msgpack_pack_fix_int8(x, 0x7F); check_sbuffer(d07f); /* d0 7f */
msgpack_pack_fix_int8(x, -0x7F-1); check_sbuffer(d080); /* d0 80 */
msgpack_pack_fix_int16(x, 0x7FFF); check_sbuffer(d17fff); /* d1 7f ff */
msgpack_pack_fix_int16(x, -0x7FFF-1); check_sbuffer(d18000); /* d1 80 00 */
msgpack_pack_fix_int32(x, 0x7FFFFFFF); check_sbuffer(d27fffffff); /* d2 7f ff ff ff */
msgpack_pack_fix_int32(x, -0x7FFFFFFF-1); check_sbuffer(d280000000); /* d2 80 00 00 00 */
msgpack_pack_fix_int64(x, 0x7FFFFFFFFFFFFFFF); check_sbuffer(d37fffffffffffffff); /* d3 7f ff ff ff ff ff ff ff */
msgpack_pack_fix_int64(x, -0x7FFFFFFFFFFFFFFF-1); check_sbuffer(d38000000000000000); /* d3 80 00 00 00 00 00 00 00 */
msgpack_pack_int8(x, -0x7F-1); check_sbuffer(d080); /* d0 80 */
msgpack_pack_int8(x, -0x21); check_sbuffer(d0df); /* d0 df */
msgpack_pack_int8(x, -0x20); check_sbuffer(e0); /* e0 */
msgpack_pack_int8(x, -1); check_sbuffer(ff); /* ff */
msgpack_pack_int8(x, 0); check_sbuffer(00); /* 00 */
msgpack_pack_int8(x, 0x7F); check_sbuffer(7f); /* 7f */
msgpack_pack_int16(x, -0x7FFF-1); check_sbuffer(d18000); /* d1 80 00 */
msgpack_pack_int16(x, -0x81); check_sbuffer(d1ff7f); /* d1 ff 7f */
msgpack_pack_int16(x, -0x80); check_sbuffer(d080); /* d0 80 */
msgpack_pack_int16(x, -0x21); check_sbuffer(d0df); /* d0 df */
msgpack_pack_int16(x, -0x20); check_sbuffer(e0); /* e0 */
msgpack_pack_int16(x, -0x1); check_sbuffer(ff); /* ff */
msgpack_pack_int16(x, 0); check_sbuffer(00); /* 00 */
msgpack_pack_int16(x, 0x7F); check_sbuffer(7f); /* 7f */
msgpack_pack_int16(x, 0x80); check_sbuffer(cc80); /* cc 80 */
msgpack_pack_int16(x, 0xFF); check_sbuffer(ccff); /* cc ff */
msgpack_pack_int16(x, 0x100); check_sbuffer(cd0100); /* cd 01 00 */
msgpack_pack_int16(x, 0x7FFF); check_sbuffer(cd7fff); /* cd 7f ff */
msgpack_pack_int32(x, -0x7FFFFFFF-1); check_sbuffer(d280000000); /* d2 80 00 00 00 */
msgpack_pack_int32(x, -0x8001); check_sbuffer(d2ffff7fff); /* d2 ff ff 7f ff */
msgpack_pack_int32(x, -0x8000); check_sbuffer(d18000); /* d1 80 00 */
msgpack_pack_int32(x, -0x81); check_sbuffer(d1ff7f); /* d1 ff 7f */
msgpack_pack_int32(x, -0x80); check_sbuffer(d080); /* d0 80 */
msgpack_pack_int32(x, -0x21); check_sbuffer(d0df); /* d0 df */
msgpack_pack_int32(x, -0x20); check_sbuffer(e0); /* e0 */
msgpack_pack_int32(x, -0x1); check_sbuffer(ff); /* ff */
msgpack_pack_int32(x, 0); check_sbuffer(00); /* 00 */
msgpack_pack_int32(x, 0x7F); check_sbuffer(7f); /* 7f */
msgpack_pack_int32(x, 0x80); check_sbuffer(cc80); /* cc 80 */
msgpack_pack_int32(x, 0xFF); check_sbuffer(ccff); /* cc ff */
msgpack_pack_int32(x, 0x100); check_sbuffer(cd0100); /* cd 01 00 */
msgpack_pack_int32(x, 0xFFFF); check_sbuffer(cdffff); /* cd ff ff */
msgpack_pack_int32(x, 0x10000); check_sbuffer(ce00010000); /* ce 00 01 00 00 */
msgpack_pack_int32(x, 0x7FFFFFFF); check_sbuffer(ce7fffffff); /* ce 7f ff ff ff */
msgpack_pack_int64(x, -0x7FFFFFFFFFFFFFFF-1); check_sbuffer(d38000000000000000); /* d3 80 00 00 00 00 00 00 00 */
msgpack_pack_int64(x, -((1LL<<31)+1)); check_sbuffer(d3ffffffff7fffffff); /* d3 ff ff ff ff 7f ff ff ff */
msgpack_pack_int64(x, -(1LL<<31)); check_sbuffer(d280000000); /* d2 80 00 00 00 */
msgpack_pack_int64(x, -0x8001); check_sbuffer(d2ffff7fff); /* d2 ff ff 7f ff */
msgpack_pack_int64(x, -0x8000); check_sbuffer(d18000); /* d1 80 00 */
msgpack_pack_int64(x, -0x81); check_sbuffer(d1ff7f); /* d1 ff 7f */
msgpack_pack_int64(x, -0x80); check_sbuffer(d080); /* d0 80 */
msgpack_pack_int64(x, -0x21); check_sbuffer(d0df); /* d0 df */
msgpack_pack_int64(x, -0x20); check_sbuffer(e0); /* e0 */
msgpack_pack_int64(x, -0x1); check_sbuffer(ff); /* ff */
msgpack_pack_int64(x, 0); check_sbuffer(00); /* 00 */
msgpack_pack_int64(x, 0x7F); check_sbuffer(7f); /* 7f */
msgpack_pack_int64(x, 0x80); check_sbuffer(cc80); /* cc 80 */
msgpack_pack_int64(x, 0xFF); check_sbuffer(ccff); /* cc ff */
msgpack_pack_int64(x, 0x100); check_sbuffer(cd0100); /* cd 01 00 */
msgpack_pack_int64(x, 0xFFFF); check_sbuffer(cdffff); /* cd ff ff */
msgpack_pack_int64(x, 0x10000); check_sbuffer(ce00010000); /* ce 00 01 00 00 */
msgpack_pack_int64(x, 0xFFFFFFFF); check_sbuffer(ceffffffff); /* ce ff ff ff ff */
msgpack_pack_int64(x, 0x100000000); check_sbuffer(cf0000000100000000); /* cf 00 00 00 01 00 00 00 00 */
msgpack_pack_int64(x, 0x7FFFFFFFFFFFFFFF); check_sbuffer(cf7fffffffffffffff); /* cf 7f ff ff ff ff ff ff ff */
msgpack_pack_nil(x); check_sbuffer(c0); /* c0 */
msgpack_pack_false(x); check_sbuffer(c2); /* c2 */
msgpack_pack_true(x); check_sbuffer(c3); /* c3 */
msgpack_pack_float(x, 1.0); check_sbuffer(ca3f800000); /* ca 3f 80 00 00 */
msgpack_pack_double(x, 1.0); check_sbuffer(cb3ff0000000000000); /* cb 3f f0 00 00 00 00 00 00 */
msgpack_pack_unsigned_char(x, UINT8_MAX); /* same as msgpack_pack_uint8() */
msgpack_pack_unsigned_short(x, (unsigned short)UINT64_MAX);
msgpack_pack_unsigned_int(x, (unsigned int)UINT64_MAX);
msgpack_pack_unsigned_long(x, (unsigned long)UINT64_MAX);
msgpack_pack_unsigned_long_long(x, (unsigned long long)UINT64_MAX);
msgpack_pack_signed_char(x, INT8_MAX); /* same as msgpack_pack_int8() */
#define check_sbuffer_n(b) \
do { \
size_t len = strlen(#b); \
assert(bytesncmp(sbuf.data + offset, #b, len) == 0); \
offset = sbuf.size; \
} while (0)
#define fill_str(n) msgpack_pack_str_body(x, data, n)
offset = sbuf.size;
msgpack_pack_str(x, 0); /* "" */ check_sbuffer(a0); /* a0 */
msgpack_pack_str(x, 31);
fill_str(31); check_sbuffer_n(bf); /* bf ... */
msgpack_pack_str(x, 32);
fill_str(32); check_sbuffer_n(d920); /* d9 20 ... */
msgpack_pack_str(x, 255);
fill_str(255); check_sbuffer_n(d9ff); /* d9 ff ... */
msgpack_pack_str(x, 256);
fill_str(256); check_sbuffer_n(da0100); /* da 01 00 ... */
msgpack_pack_str(x, 65535);
fill_str(65535); check_sbuffer_n(daffff); /* da ff ff ... */
msgpack_pack_str(x, 65536);
fill_str(65536); check_sbuffer_n(db00010000); /* db 00 01 00 00 ... */
#define fill_map(n) \
do { \
size_t i = 0; \
for (; i < n * 2; i++) { msgpack_pack_int8(x, 0x1); } \
} while (0);
msgpack_pack_map(x, 0); /* {} */ check_sbuffer(80); /* 80 */
msgpack_pack_map(x, 1);
fill_map(1); check_sbuffer_n(81); /* 81 ... */
msgpack_pack_map(x, 15);
fill_map(15); check_sbuffer_n(8f); /* 8f ... */
msgpack_pack_map(x, 16);
fill_map(16); check_sbuffer_n(de0010); /* de 00 10 ... */
msgpack_pack_map(x, 65535);
fill_map(65535); check_sbuffer_n(deffff); /* de ff ff ... */
msgpack_pack_map(x, 65536);
fill_map(65536); check_sbuffer_n(df00010000); /* df 00 01 00 00 ... */
#define fill_array(n) \
do { \
size_t i = 0; \
for (; i < n; i++) { msgpack_pack_int8(x, 0x1); } \
} while (0);
msgpack_pack_array(x, 0); /* [] */ check_sbuffer(90); /* 90 */
msgpack_pack_array(x, 1);
fill_array(1); check_sbuffer_n(91); /* 91 ... */
msgpack_pack_array(x, 15);
fill_array(15); check_sbuffer_n(9f); /* 9f ... */
msgpack_pack_array(x, 16);
fill_array(16); check_sbuffer_n(dc0010); /* dc 00 10 ... */
msgpack_pack_array(x, 65535);
fill_array(65535); check_sbuffer_n(dcffff); /* dc ff ff ... */
msgpack_pack_array(x, 65536);
fill_array(65536); check_sbuffer_n(dd00010000); /* dd 00 01 00 00 ... */
#define fill_bin(n) msgpack_pack_bin_body(x, data, n)
msgpack_pack_bin(x, 0); check_sbuffer(c400); /* c4 00 */
msgpack_pack_bin(x, 1);
fill_bin(1); check_sbuffer_n(c401); /* c4 01 ... */
msgpack_pack_bin(x, 255);
fill_bin(255); check_sbuffer_n(c4ff); /* c4 ff ... */
msgpack_pack_bin(x, 256);
fill_bin(256); check_sbuffer_n(c50100); /* c5 01 00 ... */
msgpack_pack_bin(x, 65535);
fill_bin(65535); check_sbuffer_n(c5ffff); /* c5 ff ff ... */
msgpack_pack_bin(x, 65536);
fill_bin(65536); check_sbuffer_n(c600010000); /* c6 00 01 00 00 ... */
#define fill_ext(n) msgpack_pack_ext_body(x, data, n)
msgpack_pack_ext(x, 1, 0x7F);
fill_ext(1); check_sbuffer_n(d47f); /* d4 7f ... */
msgpack_pack_ext(x, 2, 0x7F);
fill_ext(2); check_sbuffer_n(d57f); /* d5 7f ... */
msgpack_pack_ext(x, 4, 0x7F);
fill_ext(4); check_sbuffer_n(d67f); /* d6 7f ... */
msgpack_pack_ext(x, 8, 0x7F);
fill_ext(8); check_sbuffer_n(d77f); /* d7 7f ... */
msgpack_pack_ext(x, 16, 0x7F);
fill_ext(16); check_sbuffer_n(d87f); /* d8 7f ... */
msgpack_pack_ext(x, 0, 0x7F); check_sbuffer(c7007f); /* c7 00 7f */
msgpack_pack_ext(x, 3, 0x7F);
fill_ext(3); check_sbuffer_n(c7037f); /* c7 03 7f */
msgpack_pack_ext(x, 5, 0x7F);
fill_ext(5); check_sbuffer_n(c7057f); /* c7 05 7f */
msgpack_pack_ext(x, 17, 0x7F);
fill_ext(17); check_sbuffer_n(c7117f); /* c7 11 7f */
msgpack_pack_ext(x, 255, 0x7F);
fill_ext(255); check_sbuffer_n(c7ff7f); /* c7 ff 7f ... */
msgpack_pack_ext(x, 256, 0x7F);
fill_ext(256); check_sbuffer_n(c801007f); /* c8 01 00 7f ... */
msgpack_pack_ext(x, 65535, 0x7F);
fill_ext(65535); check_sbuffer_n(c8ffff7f); /* c8 ff ff 7f ... */
msgpack_pack_ext(x, 65536, 0x7F);
fill_ext(65536); check_sbuffer_n(c9000100007f); /* c9 00 01 00 00 7f ... */
msgpack_pack_timestamp(x, ts); check_sbuffer(d6ffffffffff); /* d6 ff ff ff ff ff */
msgpack_pack_timestamp(x, ts + 1); check_sbuffer(d7ff0000000100000000); /* d7 ff 00 00 00 01 00 00 00 00 */
msgpack_pack_timestamp(x, ts + 2); check_sbuffer(d7ff00000003ffffffff); /* d7 ff 00 00 00 03 ff ff ff ff */
msgpack_pack_timestamp(x, ts + 3); check_sbuffer(c70cff000000000000000400000000); /* c7 0c ff 00 00 00 00 00 00 00 04 00 00 00 00 */
msgpack_pack_timestamp(x, ts + 4); check_sbuffer(c70cffffffffff7fffffffffffffff); /* c7 0c ff ff ff ff ff 7f ff ff ff ff ff ff ff */
msgpack_sbuffer_destroy(&sbuf);
msgpack_packer_free(x);
return 0;
}

419
example/c/jsonconv.c Normal file
View File

@@ -0,0 +1,419 @@
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>
#include <msgpack.h>
#include <cjson/cJSON.h>
#if defined(_MSC_VER)
#if _MSC_VER >= 1800
#include <inttypes.h>
#else
#define PRIu64 "I64u"
#define PRIi64 "I64i"
#define PRIi8 "i"
#endif
#else
#include <inttypes.h>
#endif
#if defined(_KERNEL_MODE)
# undef snprintf
# define snprintf _snprintf
#endif
#define DEBUG(...) printf(__VA_ARGS__)
static char *format_string(const char *input)
{
const char *inptr;
char *output;
char *outptr;
size_t output_length = 0;
/* numbers of additional characters*/
size_t escape_characters = 0;
if (input == NULL) {
return NULL;
}
for (inptr = input; *inptr; inptr++) {
switch (*inptr) {
case '\"':
case '\\':
case '\b':
case '\f':
case '\n':
case '\r':
case '\t':
/* one character escape sequence */
escape_characters++;
break;
default:
break;
}
}
output_length = (size_t)(inptr - input) + escape_characters;
output = (char *)malloc(output_length + 1);
if (output == NULL) {
return NULL;
}
/* no add characters*/
if (escape_characters == 0) {
memcpy(output, input, output_length);
output[output_length] = '\0';
return output;
}
outptr = output;
/* copy string */
for (inptr = input; *inptr != '\0'; (void)inptr++, outptr++) {
if ((*inptr > 31) && (*inptr != '\"') && (*inptr != '\\')) {
/* normal character, copy */
*outptr = *inptr;
} else {
/* character needs to be escaped */
*outptr++ = '\\';
switch (*inptr)
{
case '\\':
*outptr = '\\';
break;
case '\"':
*outptr = '\"';
break;
case '\b':
*outptr = 'b';
break;
case '\f':
*outptr = 'f';
break;
case '\n':
*outptr = 'n';
break;
case '\r':
*outptr = 'r';
break;
case '\t':
*outptr = 't';
break;
default:
break;
}
}
}
output[output_length] = '\0';
return output;
}
/*
* Pack cJSON object.
* return 0 success, others failed
*/
static int parse_cjson_object(msgpack_packer *pk, cJSON *node)
{
int ret, sz, i;
cJSON *child;
char *strvalue;
if (node == NULL) {
return -1;
}
switch (node->type & 0xFF) {
case cJSON_Invalid:
return -1;
case cJSON_False:
return msgpack_pack_false(pk);
case cJSON_True:
return msgpack_pack_true(pk);
case cJSON_NULL:
return msgpack_pack_nil(pk);
case cJSON_String:
strvalue = format_string(node->valuestring);
if (strvalue != NULL) {
ret = msgpack_pack_str_with_body(pk, strvalue, strlen(strvalue));
free(strvalue);
return ret;
} else {
return -1;
}
case cJSON_Number:
if (isnan(node->valuedouble) || isinf(node->valuedouble)) {
ret = msgpack_pack_nil(pk);
} else if (node->valuedouble == node->valueint) {
ret = msgpack_pack_int(pk, node->valueint);
} else {
ret = msgpack_pack_double(pk, node->valuedouble);
}
return ret;
case cJSON_Array:
sz = cJSON_GetArraySize(node);
if (msgpack_pack_array(pk, sz) != 0) {
return -1;
}
for (i = 0; i < sz; i++) {
if (parse_cjson_object(pk, cJSON_GetArrayItem(node, i)) != 0) {
return -1;
}
}
return 0;
case cJSON_Object:
sz = cJSON_GetArraySize(node);
if (msgpack_pack_map(pk, sz) != 0) {
return -1;
}
for (i = 0; i < sz; i++) {
child = cJSON_GetArrayItem(node, i);
strvalue = format_string(child->string);
if (strvalue == NULL) {
return -1;
}
if (msgpack_pack_str_with_body(pk, strvalue, strlen(strvalue)) != 0) {
free(strvalue);
return -1;
}
free(strvalue);
if (parse_cjson_object(pk, child) != 0) {
return -1;
}
}
return 0;
default:
DEBUG("unknown type.\n");
return -1;
}
return 0;
}
/*
* Pack json string to msgpack format data.
* return 0 success, -1 failed
*/
int msgpack_pack_jsonstr(msgpack_packer *pk, const char *jsonstr)
{
int status;
cJSON *node;
const char *end = NULL;
if (pk == NULL || jsonstr == NULL) {
return -1;
}
node = cJSON_ParseWithOpts(jsonstr, &end, 1);
if (node == NULL) {
DEBUG("parse error: unexpected string `%s`\n", end);
return -1;
}
status = parse_cjson_object(pk, node);
cJSON_Delete(node);
return status;
}
static int bytes_contain_zero(const msgpack_object_bin *bin)
{
size_t i;
for (i = 0; i < bin->size; i++) {
if (bin->ptr[i] == 0) {
return 1;
}
}
return 0;
}
#define PRINT_JSONSTR_CALL(ret, func, aux_buffer, aux_buffer_size, ...) \
ret = func(aux_buffer, aux_buffer_size, __VA_ARGS__); \
if (ret <= 0) \
return ret; \
if (ret > aux_buffer_size) \
return 0; \
aux_buffer = aux_buffer + ret; \
aux_buffer_size = aux_buffer_size - ret
/*
* Convert msgpack format data to json string.
* return >0: success, 0: length of buffer not enough, -1: failed
*/
size_t msgpack_object_print_jsonstr(char *buffer, size_t length, const msgpack_object o)
{
char *aux_buffer = buffer;
size_t aux_buffer_size = length;
size_t ret;
switch (o.type) {
case MSGPACK_OBJECT_NIL:
PRINT_JSONSTR_CALL(ret, snprintf, aux_buffer, aux_buffer_size, "null");
break;
case MSGPACK_OBJECT_BOOLEAN:
PRINT_JSONSTR_CALL(ret, snprintf, aux_buffer, aux_buffer_size, (o.via.boolean ? "true" : "false"));
break;
case MSGPACK_OBJECT_POSITIVE_INTEGER:
#if defined(PRIu64)
PRINT_JSONSTR_CALL(ret, snprintf, aux_buffer, aux_buffer_size, "%" PRIu64, o.via.u64);
#else
if (o.via.u64 > ULONG_MAX) {
PRINT_JSONSTR_CALL(ret, snprintf, aux_buffer, aux_buffer_size, "%lu", ULONG_MAX);
} else {
PRINT_JSONSTR_CALL(ret, snprintf, aux_buffer, aux_buffer_size, "%lu", (unsigned long)o.via.u64);
}
#endif
break;
case MSGPACK_OBJECT_NEGATIVE_INTEGER:
#if defined(PRIi64)
PRINT_JSONSTR_CALL(ret, snprintf, aux_buffer, aux_buffer_size, "%" PRIi64, o.via.i64);
#else
if (o.via.i64 > LONG_MAX) {
PRINT_JSONSTR_CALL(ret, snprintf, aux_buffer, aux_buffer_size, "%ld", LONG_MAX);
} else if (o.via.i64 < LONG_MIN) {
PRINT_JSONSTR_CALL(ret, snprintf, aux_buffer, aux_buffer_size, "%ld", LONG_MIN);
} else {
PRINT_JSONSTR_CALL(ret, snprintf, aux_buffer, aux_buffer_size, "%ld", (signed long)o.via.i64);
}
#endif
break;
case MSGPACK_OBJECT_FLOAT32:
case MSGPACK_OBJECT_FLOAT64:
PRINT_JSONSTR_CALL(ret, snprintf, aux_buffer, aux_buffer_size, "%f", o.via.f64);
break;
case MSGPACK_OBJECT_STR:
PRINT_JSONSTR_CALL(ret, snprintf, aux_buffer, aux_buffer_size, "\"%.*s\"", (int)o.via.str.size, o.via.str.ptr);
break;
case MSGPACK_OBJECT_BIN:
if (bytes_contain_zero(&o.via.bin)) {
DEBUG("the value contains zero\n");
return -1;
}
PRINT_JSONSTR_CALL(ret, snprintf, aux_buffer, aux_buffer_size, "\"%.*s\"", (int)o.via.bin.size, o.via.bin.ptr);
break;
case MSGPACK_OBJECT_EXT:
DEBUG("not support type: MSGPACK_OBJECT_EXT.\n");
return -1;
case MSGPACK_OBJECT_ARRAY:
PRINT_JSONSTR_CALL(ret, snprintf, aux_buffer, aux_buffer_size, "[");
if (o.via.array.size != 0) {
msgpack_object *p = o.via.array.ptr;
msgpack_object *const pend = o.via.array.ptr + o.via.array.size;
PRINT_JSONSTR_CALL(ret, msgpack_object_print_jsonstr, aux_buffer, aux_buffer_size, *p);
++p;
for (; p < pend; ++p) {
PRINT_JSONSTR_CALL(ret, snprintf, aux_buffer, aux_buffer_size, ",");
PRINT_JSONSTR_CALL(ret, msgpack_object_print_jsonstr, aux_buffer, aux_buffer_size, *p);
}
}
PRINT_JSONSTR_CALL(ret, snprintf, aux_buffer, aux_buffer_size, "]");
break;
case MSGPACK_OBJECT_MAP:
PRINT_JSONSTR_CALL(ret, snprintf, aux_buffer, aux_buffer_size, "{");
if (o.via.map.size != 0) {
msgpack_object_kv *p = o.via.map.ptr;
msgpack_object_kv *const pend = o.via.map.ptr + o.via.map.size;
for (; p < pend; ++p) {
if (p->key.type != MSGPACK_OBJECT_STR) {
DEBUG("the key of in a map must be string.\n");
return -1;
}
if (p != o.via.map.ptr) {
PRINT_JSONSTR_CALL(ret, snprintf, aux_buffer, aux_buffer_size, ",");
}
PRINT_JSONSTR_CALL(ret, msgpack_object_print_jsonstr, aux_buffer, aux_buffer_size, p->key);
PRINT_JSONSTR_CALL(ret, snprintf, aux_buffer, aux_buffer_size, ":");
PRINT_JSONSTR_CALL(ret, msgpack_object_print_jsonstr, aux_buffer, aux_buffer_size, p->val);
}
}
PRINT_JSONSTR_CALL(ret, snprintf, aux_buffer, aux_buffer_size, "}");
break;
default:
DEBUG("unknown type.\n");
return -1;
}
return length - aux_buffer_size;
}
#undef PRINT_JSONSTR_CALL
static void test(const char *name, const char *input, const char *expect)
{
msgpack_sbuffer sbuf;
{
// pack
msgpack_packer pk;
msgpack_sbuffer_init(&sbuf);
msgpack_packer_init(&pk, &sbuf, msgpack_sbuffer_write);
if (msgpack_pack_jsonstr(&pk, input) < 0) {
msgpack_sbuffer_destroy(&sbuf);
printf("%s: invalid json string.\n", name);
return;
}
}
{
// unpack
#define MAX_JSONLEN 1024
msgpack_zone z;
msgpack_object obj;
size_t jsonstrlen = MAX_JSONLEN - 1;
char jsonparsed[MAX_JSONLEN];
msgpack_zone_init(&z, jsonstrlen);
msgpack_unpack(sbuf.data, sbuf.size, NULL, &z, &obj);
jsonstrlen = msgpack_object_print_jsonstr(jsonparsed, jsonstrlen, obj);
jsonparsed[jsonstrlen] = '\0';
//compare input and output
if (expect == NULL) {
expect = input;
}
if (strcmp(expect, jsonparsed) == 0) {
printf("%s: ok\n", name);
} else {
printf("%s: failed\n", name);
}
msgpack_zone_destroy(&z);
}
msgpack_sbuffer_destroy(&sbuf);
}
int main()
{
test("null", "null", NULL);
test("boolean", "false", NULL);
test("single string", "\"frsyuki\"", NULL);
test("single number", "\"100\"", NULL);
test("space", "[{\"valuespace\":\"\",\"\":\"keyspace\"},\"\",[\"\"]]", NULL);
test("quote", "\"My name is Tom (\\\"Bee\\\") Kobe\"", NULL);
test("escape", "\"\\\\b\\f\\n\\r\\t\"", NULL);
test("escape2", "\"\b\f\n\r\t\"", "\"\\b\\f\\n\\r\\t\"");
test("map", "{\"name\":\"Tom (\\\"Bee\\\") Kobe\",\"type\":\"image\",\"data\":{\"width\":360,\"height\":460,\"title\":\"View me\",\"ips\":[116,943,256,711]}}", NULL);
test("array", "[\"Sunday\",\"Monday\",\"Tuesday\",\"Wednesday\",\"Thursday\",\"Friday\",\"Saturday\"]", NULL);
test("number array", "[[101,121,-33],[119,911,171],[0,2,-3]]", NULL);
test("mix array", "[{\"name\":\"Tom\",\"city\":\"London\",\"country\":\"UK\",\"longitude\":23},{\"name\":\"Jack\",\"city\":\"Birmingham\",\"country\":\"UK\",\"longitude\":-22}]", NULL);
test("unicode", "\"\\u5C71\\u5DDD\\u7570\\u57DF\\u98A8\\u6708\\u540C\\u5929\"", "\"山川異域風月同天\"");
test("utf8", "\"山川異域風月同天\"", NULL);
test("double", "12.34", "12.340000");
return 0;
}

View File

@@ -1,7 +1,7 @@
#include <msgpack.h>
#include <stdio.h>
void print(char const* buf, unsigned int len)
void print(char const* buf,size_t len)
{
size_t i = 0;
for(; i < len ; ++i)

View File

@@ -0,0 +1,17 @@
cmake_minimum_required (VERSION 3.0)
project (example)
if(EXAMPLE_MSGPACK_EMBEDDED)
add_subdirectory(msgpack-c)
set(msgpack_DIR ${CMAKE_CURRENT_BINARY_DIR}/msgpack-c)
endif()
find_package(msgpack REQUIRED)
add_executable (${PROJECT_NAME} ${CMAKE_CURRENT_LIST_DIR}/../c/simple_c.c)
target_link_libraries(${PROJECT_NAME} msgpackc)
if(TARGET msgpackc-static)
add_executable (${PROJECT_NAME}-static ${CMAKE_CURRENT_LIST_DIR}/../c/simple_c.c)
target_link_libraries(${PROJECT_NAME}-static msgpackc-static)
endif()

View File

@@ -37,7 +37,7 @@ FOREACH (source_file ${exec_PROGRAMS})
)
TARGET_INCLUDE_DIRECTORIES (${source_file_we}
PRIVATE
$<TARGET_PROPERTY:msgpackc,INTERFACE_INCLUDE_DIRECTORIES>
$<TARGET_PROPERTY:msgpackc-cxx,INTERFACE_INCLUDE_DIRECTORIES>
)
IF ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang" OR "${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU")
SET_PROPERTY (TARGET ${source_file_we} APPEND_STRING PROPERTY COMPILE_FLAGS " -Wall -Wextra")
@@ -59,7 +59,7 @@ FOREACH (source_file ${with_pthread_PROGRAMS})
)
TARGET_INCLUDE_DIRECTORIES (${source_file_we}
PRIVATE
$<TARGET_PROPERTY:msgpackc,INTERFACE_INCLUDE_DIRECTORIES>
$<TARGET_PROPERTY:msgpackc-cxx,INTERFACE_INCLUDE_DIRECTORIES>
)
TARGET_LINK_LIBRARIES (${source_file_we}
${CMAKE_THREAD_LIBS_INIT}
@@ -88,7 +88,7 @@ FOREACH (source_file ${with_boost_lib_PROGRAMS})
)
TARGET_INCLUDE_DIRECTORIES (${source_file_we}
PRIVATE
$<TARGET_PROPERTY:msgpackc,INTERFACE_INCLUDE_DIRECTORIES>
$<TARGET_PROPERTY:msgpackc-cxx,INTERFACE_INCLUDE_DIRECTORIES>
)
LINK_DIRECTORIES(${Boost_LIBRARY_DIRS})
TARGET_LINK_LIBRARIES (${source_file_we}

View File

@@ -82,10 +82,11 @@ int main() {
std::stringstream ss;
msgpack::pack(ss, my);
print(ss.str());
std::string const& str = ss.str();
print(str);
msgpack::object_handle oh =
msgpack::unpack(ss.str().data(), ss.str().size());
msgpack::unpack(str.data(), str.size());
msgpack::object obj = oh.get();
std::cout << obj << std::endl;
assert(obj.as<my_class>() == my);

View File

@@ -59,8 +59,9 @@ int main() {
print(ss.str());
std::string const& str = ss.str();
msgpack::object_handle oh =
msgpack::unpack(ss.str().data(), ss.str().size());
msgpack::unpack(str.data(), str.size());
msgpack::object obj = oh.get();
std::cout << obj << std::endl;
assert(obj.as<my_class>() == my);

View File

@@ -100,10 +100,11 @@ int main() {
std::stringstream ss;
msgpack::pack(ss, my);
print(ss.str());
std::string const& str = ss.str();
print(str);
msgpack::object_handle oh =
msgpack::unpack(ss.str().data(), ss.str().size());
msgpack::unpack(str.data(), str.size());
msgpack::object obj = oh.get();
std::cout << obj << std::endl;
assert(obj.as<my_class>() == my);

View File

@@ -71,7 +71,8 @@ int main() {
print(ss.str());
msgpack::object_handle oh = msgpack::unpack(ss.str().data(), ss.str().size());
std::string const& str = ss.str();
msgpack::object_handle oh = msgpack::unpack(str.data(), str.size());
msgpack::object obj = oh.get();
std::cout << obj << std::endl;

View File

@@ -31,12 +31,13 @@ int main() {
std::size_t offset = 0;
// msgpack array is constructed on z.
msgpack::object obj = msgpack::unpack(z, ss.str().data(), ss.str().size(), offset);
std::string const& ps = ss.str();
msgpack::object obj = msgpack::unpack(z, ps.data(), ps.size(), offset);
std::cout << obj << std::endl;
assert(obj.as<std::vector<int> >() == v);
// msgpack str is constructed on z.
std::string const& str = msgpack::unpack(z, ss.str().data(), ss.str().size(), offset).as<std::string>();
std::string const& str = msgpack::unpack(z, ps.data(), ps.size(), offset).as<std::string>();
std::cout << str << std::endl;
assert(str == s);
}

View File

@@ -1,4 +1,4 @@
IF (MSGPACK_CXX11)
IF (MSGPACK_CXX11 OR MSGPACK_CXX17)
INCLUDE_DIRECTORIES (
../include
)
@@ -22,7 +22,7 @@ IF (MSGPACK_CXX11)
)
TARGET_INCLUDE_DIRECTORIES (${source_file_we}
PRIVATE
$<TARGET_PROPERTY:msgpackc,INTERFACE_INCLUDE_DIRECTORIES>
$<TARGET_PROPERTY:msgpackc-cxx,INTERFACE_INCLUDE_DIRECTORIES>
)
IF ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang" OR "${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU")
SET_PROPERTY (TARGET ${source_file_we} APPEND_STRING PROPERTY COMPILE_FLAGS " -Wall -Wextra")

View File

@@ -37,7 +37,8 @@ void tuple() {
std::stringstream ss;
msgpack::pack(ss, t);
auto oh = msgpack::unpack(ss.str().data(), ss.str().size());
auto const& str = ss.str();
auto oh = msgpack::unpack(str.data(), str.size());
auto obj = oh.get();
std::cout << obj << std::endl;
@@ -49,7 +50,8 @@ void unordered_map() {
std::stringstream ss;
msgpack::pack(ss, m);
auto oh = msgpack::unpack(ss.str().data(), ss.str().size());
auto const& str = ss.str();
auto oh = msgpack::unpack(str.data(), str.size());
msgpack::object obj = oh.get();
std::cout << obj << std::endl;
@@ -61,7 +63,8 @@ void unordered_set() {
std::stringstream ss;
msgpack::pack(ss, s);
auto oh = msgpack::unpack(ss.str().data(), ss.str().size());
auto const& str = ss.str();
auto oh = msgpack::unpack(str.data(), str.size());
auto obj = oh.get();
std::cout << obj << std::endl;
@@ -74,7 +77,8 @@ void forward_list() {
std::stringstream ss;
msgpack::pack(ss, f);
auto oh = msgpack::unpack(ss.str().data(), ss.str().size());
auto const& str = ss.str();
auto oh = msgpack::unpack(str.data(), str.size());
auto obj = oh.get();
std::cout << obj << std::endl;
@@ -98,7 +102,8 @@ void combi() {
std::size_t offset = 0;
std::cout << "offset: " << offset << std::endl;
{
auto oh = msgpack::unpack(ss.str().data(), ss.str().size(), offset);
auto const& str = ss.str();
auto oh = msgpack::unpack(str.data(), str.size(), offset);
auto obj = oh.get();
std::cout << obj << std::endl;
@@ -106,7 +111,8 @@ void combi() {
}
std::cout << "offset: " << offset << std::endl;
{
auto oh = msgpack::unpack(ss.str().data(), ss.str().size(), offset);
auto const& str = ss.str();
auto oh = msgpack::unpack(str.data(), str.size(), offset);
auto obj = oh.get();
std::cout << obj << std::endl;
@@ -114,7 +120,8 @@ void combi() {
}
std::cout << "offset: " << offset << std::endl;
{
auto oh = msgpack::unpack(ss.str().data(), ss.str().size(), offset);
auto const& str = ss.str();
auto oh = msgpack::unpack(str.data(), str.size(), offset);
auto obj = oh.get();
std::cout << obj << std::endl;
@@ -122,7 +129,8 @@ void combi() {
}
std::cout << "offset: " << offset << std::endl;
{
auto oh = msgpack::unpack(ss.str().data(), ss.str().size(), offset);
auto const& str = ss.str();
auto oh = msgpack::unpack(str.data(), str.size(), offset);
auto obj = oh.get();
std::cout << obj << std::endl;
@@ -130,7 +138,8 @@ void combi() {
}
std::cout << "offset: " << offset << std::endl;
{
auto oh = msgpack::unpack(ss.str().data(), ss.str().size(), offset);
auto const& str = ss.str();
auto oh = msgpack::unpack(str.data(), str.size(), offset);
auto obj = oh.get();
std::cout << obj << std::endl;

View File

@@ -20,7 +20,7 @@ IF (MSGPACK_USE_X3_PARSE AND MSGPACK_DEFAULT_API_VERSION VERSION_GREATER 1)
)
TARGET_INCLUDE_DIRECTORIES (${source_file_we}
PRIVATE
$<TARGET_PROPERTY:msgpackc,INTERFACE_INCLUDE_DIRECTORIES>
$<TARGET_PROPERTY:msgpackc-cxx,INTERFACE_INCLUDE_DIRECTORIES>
)
IF ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang" OR "${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU")
SET_PROPERTY (TARGET ${source_file_we} APPEND_STRING PROPERTY COMPILE_FLAGS " -Wall -Wextra")
@@ -46,7 +46,7 @@ IF (MSGPACK_USE_X3_PARSE AND MSGPACK_DEFAULT_API_VERSION VERSION_GREATER 1)
)
TARGET_INCLUDE_DIRECTORIES (${source_file_we}
PRIVATE
$<TARGET_PROPERTY:msgpackc,INTERFACE_INCLUDE_DIRECTORIES>
$<TARGET_PROPERTY:msgpackc-cxx,INTERFACE_INCLUDE_DIRECTORIES>
)
TARGET_LINK_LIBRARIES (${source_file_we}
${Boost_CONTEXT_LIBRARY}

View File

@@ -25,7 +25,7 @@ extern "C" {
static inline int msgpack_fbuffer_write(void* data, const char* buf, size_t len)
{
return (len == fwrite(buf, len, 1, (FILE *)data)) ? 0 : -1;
return (1 == fwrite(buf, len, 1, (FILE *)data)) ? 0 : -1;
}
/** @} */

View File

@@ -89,15 +89,18 @@ static int msgpack_pack_map(msgpack_packer* pk, size_t n);
static int msgpack_pack_str(msgpack_packer* pk, size_t l);
static int msgpack_pack_str_body(msgpack_packer* pk, const void* b, size_t l);
static int msgpack_pack_str_with_body(msgpack_packer* pk, const void* b, size_t l);
static int msgpack_pack_v4raw(msgpack_packer* pk, size_t l);
static int msgpack_pack_v4raw_body(msgpack_packer* pk, const void* b, size_t l);
static int msgpack_pack_bin(msgpack_packer* pk, size_t l);
static int msgpack_pack_bin_body(msgpack_packer* pk, const void* b, size_t l);
static int msgpack_pack_bin_with_body(msgpack_packer* pk, const void* b, size_t l);
static int msgpack_pack_ext(msgpack_packer* pk, size_t l, int8_t type);
static int msgpack_pack_ext_body(msgpack_packer* pk, const void* b, size_t l);
static int msgpack_pack_ext_with_body(msgpack_packer* pk, const void* b, size_t l, int8_t type);
static int msgpack_pack_timestamp(msgpack_packer* pk, const msgpack_timestamp* d);
@@ -143,7 +146,27 @@ inline void msgpack_packer_free(msgpack_packer* pk)
free(pk);
}
inline int msgpack_pack_str_with_body(msgpack_packer* pk, const void* b, size_t l)
{
int ret = msgpack_pack_str(pk, l);
if (ret != 0) { return ret; }
return msgpack_pack_str_body(pk, b, l);
}
inline int msgpack_pack_bin_with_body(msgpack_packer* pk, const void* b, size_t l)
{
int ret = msgpack_pack_bin(pk, l);
if (ret != 0) { return ret; }
return msgpack_pack_bin_body(pk, b, l);
}
inline int msgpack_pack_ext_with_body(msgpack_packer* pk, const void* b, size_t l, int8_t type)
{
int ret = msgpack_pack_ext(pk, l, type);
if (ret != 0) { return ret; }
return msgpack_pack_ext_body(pk, b, l);
}
#ifdef __cplusplus
}
#endif

View File

@@ -14,7 +14,7 @@
#include <stddef.h>
#if defined(_MSC_VER) && _MSC_VER <= 1800
# define snprintf(buf, len, format,...) _snprintf_s(buf, len, len, format, __VA_ARGS__)
# define snprintf(buf, len, format,...) _snprintf_s(buf, len, _TRUNCATE, format, __VA_ARGS__)
#endif
#if defined(_MSC_VER) && _MSC_VER < 1600

View File

@@ -258,14 +258,15 @@ struct object_with_zone<msgpack::type::array_ref<T> > {
o.via.array.size = size;
typename T::const_iterator it(v.data->begin());
do {
#if (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 7)) && !defined(__clang__)
#if defined(__GNUC__) && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 7)) && !defined(__clang__)
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wmaybe-uninitialized"
#endif // (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 7)) && !defined(__clang__)
#endif // defined(__GNUC__) && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 7)) && !defined(__clang__)
*p = msgpack::object(*it, o.zone);
#if (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 7)) && !defined(__clang__)
#if defined(__GNUC__) && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 7)) && !defined(__clang__)
#pragma GCC diagnostic pop
#endif // (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 7)) && !defined(__clang__)
#endif // defined(__GNUC__) && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 7)) && !defined(__clang__)
++p;
++it;
} while(p < pend);

View File

@@ -15,16 +15,16 @@
#include "msgpack/adaptor/check_container_size.hpp"
// To suppress warning on Boost.1.58.0
#if (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 6)) || defined(__clang__)
#if defined(__GNUC__) && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 6)) || defined(__clang__)
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wunused-parameter"
#endif // (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 6)) || defined(__clang__)
#endif // defined(__GNUC__) && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 6)) || defined(__clang__)
#include <boost/optional.hpp>
#if (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 6)) || defined(__clang__)
#if defined(__GNUC__) && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 6)) || defined(__clang__)
#pragma GCC diagnostic pop
#endif // (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 6)) || defined(__clang__)
#endif // defined(__GNUC__) && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 6)) || defined(__clang__)
namespace msgpack {

View File

@@ -35,27 +35,27 @@ struct convert<std::vector<std::byte, Alloc> > {
case msgpack::type::BIN:
v.resize(o.via.bin.size);
if (o.via.bin.size != 0) {
#if (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 7)) && !defined(__clang__)
#if defined(__GNUC__) && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 7)) && !defined(__clang__)
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wmaybe-uninitialized"
#endif // (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 7)) && !defined(__clang__)
#endif // defined(__GNUC__) && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 7)) && !defined(__clang__)
std::memcpy(&v.front(), o.via.bin.ptr, o.via.bin.size);
#if (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 7)) && !defined(__clang__)
#if defined(__GNUC__) && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 7)) && !defined(__clang__)
#pragma GCC diagnostic pop
#endif // (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 7)) && !defined(__clang__)
#endif // defined(__GNUC__) && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 7)) && !defined(__clang__)
}
break;
case msgpack::type::STR:
v.resize(o.via.str.size);
if (o.via.str.size != 0) {
#if (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 7)) && !defined(__clang__)
#if defined(__GNUC__) && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 7)) && !defined(__clang__)
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wmaybe-uninitialized"
#endif // (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 7)) && !defined(__clang__)
#endif // defined(__GNUC__) && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 7)) && !defined(__clang__)
std::memcpy(&v.front(), o.via.str.ptr, o.via.str.size);
#if (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 7)) && !defined(__clang__)
#if defined(__GNUC__) && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 7)) && !defined(__clang__)
#pragma GCC diagnostic pop
#endif // (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 7)) && !defined(__clang__)
#endif // defined(__GNUC__) && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 7)) && !defined(__clang__)
}
break;
default:

View File

@@ -201,15 +201,15 @@ struct object_with_zone<std::map<K, V, Compare, Alloc> > {
o.via.map.size = size;
typename std::map<K, V, Compare, Alloc>::const_iterator it(v.begin());
do {
#if (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 7)) && !defined(__clang__)
#if defined(__GNUC__) && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 7)) && !defined(__clang__)
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wmaybe-uninitialized"
#endif // (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 7)) && !defined(__clang__)
#endif // defined(__GNUC__) && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 7)) && !defined(__clang__)
p->key = msgpack::object(it->first, o.zone);
p->val = msgpack::object(it->second, o.zone);
#if (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 7)) && !defined(__clang__)
#if defined(__GNUC__) && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 7)) && !defined(__clang__)
#pragma GCC diagnostic pop
#endif // (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 7)) && !defined(__clang__)
#endif // defined(__GNUC__) && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 7)) && !defined(__clang__)
++p;
++it;
} while(p < pend);

View File

@@ -95,14 +95,14 @@ struct object_with_zone<std::vector<T, Alloc> > {
o.via.array.size = size;
typename std::vector<T, Alloc>::const_iterator it(v.begin());
do {
#if (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 7)) && !defined(__clang__)
#if defined(__GNUC__) && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 7)) && !defined(__clang__)
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wmaybe-uninitialized"
#endif // (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 7)) && !defined(__clang__)
#endif // defined(__GNUC__) && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 7)) && !defined(__clang__)
*p = msgpack::object(*it, o.zone);
#if (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 7)) && !defined(__clang__)
#if defined(__GNUC__) && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 7)) && !defined(__clang__)
#pragma GCC diagnostic pop
#endif // (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 7)) && !defined(__clang__)
#endif // defined(__GNUC__) && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 7)) && !defined(__clang__)
++p;
++it;
} while(p < pend);

View File

@@ -32,27 +32,27 @@ struct convert<std::vector<char, Alloc> > {
case msgpack::type::BIN:
v.resize(o.via.bin.size);
if (o.via.bin.size != 0) {
#if (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 7)) && !defined(__clang__)
#if defined(__GNUC__) && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 7)) && !defined(__clang__)
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wmaybe-uninitialized"
#endif // (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 7)) && !defined(__clang__)
#endif // defined(__GNUC__) && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 7)) && !defined(__clang__)
std::memcpy(&v.front(), o.via.bin.ptr, o.via.bin.size);
#if (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 7)) && !defined(__clang__)
#if defined(__GNUC__) && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 7)) && !defined(__clang__)
#pragma GCC diagnostic pop
#endif // (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 7)) && !defined(__clang__)
#endif // defined(__GNUC__) && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 7)) && !defined(__clang__)
}
break;
case msgpack::type::STR:
v.resize(o.via.str.size);
if (o.via.str.size != 0) {
#if (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 7)) && !defined(__clang__)
#if defined(__GNUC__) && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 7)) && !defined(__clang__)
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wmaybe-uninitialized"
#endif // (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 7)) && !defined(__clang__)
#endif // defined(__GNUC__) && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 7)) && !defined(__clang__)
std::memcpy(&v.front(), o.via.str.ptr, o.via.str.size);
#if (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 7)) && !defined(__clang__)
#if defined(__GNUC__) && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 7)) && !defined(__clang__)
#pragma GCC diagnostic pop
#endif // (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 7)) && !defined(__clang__)
#endif // defined(__GNUC__) && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 7)) && !defined(__clang__)
}
break;
default:

View File

@@ -32,27 +32,27 @@ struct convert<std::vector<unsigned char, Alloc> > {
case msgpack::type::BIN:
v.resize(o.via.bin.size);
if (o.via.bin.size != 0) {
#if (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 7)) && !defined(__clang__)
#if defined(__GNUC__) && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 7)) && !defined(__clang__)
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wmaybe-uninitialized"
#endif // (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 7)) && !defined(__clang__)
#endif // defined(__GNUC__) && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 7)) && !defined(__clang__)
std::memcpy(&v.front(), o.via.bin.ptr, o.via.bin.size);
#if (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 7)) && !defined(__clang__)
#if defined(__GNUC__) && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 7)) && !defined(__clang__)
#pragma GCC diagnostic pop
#endif // (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 7)) && !defined(__clang__)
#endif // defined(__GNUC__) && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 7)) && !defined(__clang__)
}
break;
case msgpack::type::STR:
v.resize(o.via.str.size);
if (o.via.str.size != 0) {
#if (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 7)) && !defined(__clang__)
#if defined(__GNUC__) && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 7)) && !defined(__clang__)
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wmaybe-uninitialized"
#endif // (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 7)) && !defined(__clang__)
#endif // defined(__GNUC__) && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 7)) && !defined(__clang__)
std::memcpy(&v.front(), o.via.str.ptr, o.via.str.size);
#if (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 7)) && !defined(__clang__)
#if defined(__GNUC__) && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 7)) && !defined(__clang__)
#pragma GCC diagnostic pop
#endif // (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 7)) && !defined(__clang__)
#endif // defined(__GNUC__) && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 7)) && !defined(__clang__)
}
break;
default:

View File

@@ -95,14 +95,14 @@ struct object_with_zone<std::wstring> {
o.via.array.size = size;
std::wstring::const_iterator it(v.begin());
do {
#if (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 7)) && !defined(__clang__)
#if defined(__GNUC__) && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 7)) && !defined(__clang__)
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wmaybe-uninitialized"
#endif // (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 7)) && !defined(__clang__)
#endif // defined(__GNUC__) && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 7)) && !defined(__clang__)
*p = msgpack::object(*it, o.zone);
#if (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 7)) && !defined(__clang__)
#if defined(__GNUC__) && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 7)) && !defined(__clang__)
#pragma GCC diagnostic pop
#endif // (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 7)) && !defined(__clang__)
#endif // defined(__GNUC__) && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 7)) && !defined(__clang__)
++p;
++it;
} while(p < pend);

View File

@@ -113,10 +113,13 @@ struct unpack_array {
if (n > u.limit().array()) throw msgpack::array_size_overflow("array size overflow");
o.type = msgpack::type::ARRAY;
o.via.array.size = 0;
size_t size = n*sizeof(msgpack::object);
if (size / sizeof(msgpack::object) != n) {
#if SIZE_MAX == UINT_MAX
if (n > SIZE_MAX/sizeof(msgpack::object))
throw msgpack::array_size_overflow("array size overflow");
}
#endif // SIZE_MAX == UINT_MAX
size_t size = n*sizeof(msgpack::object);
o.via.array.ptr = static_cast<msgpack::object*>(u.zone().allocate_align(size, MSGPACK_ZONE_ALIGNOF(msgpack::object)));
}
};
@@ -125,6 +128,7 @@ inline void unpack_array_item(msgpack::object& c, msgpack::object const& o)
{
#if defined(__GNUC__) && !defined(__clang__)
std::memcpy(&c.via.array.ptr[c.via.array.size++], &o, sizeof(msgpack::object));
#else /* __GNUC__ && !__clang__ */
c.via.array.ptr[c.via.array.size++] = o;
#endif /* __GNUC__ && !__clang__ */
@@ -135,10 +139,13 @@ struct unpack_map {
if (n > u.limit().map()) throw msgpack::map_size_overflow("map size overflow");
o.type = msgpack::type::MAP;
o.via.map.size = 0;
size_t size = n*sizeof(msgpack::object_kv);
if (size / sizeof(msgpack::object_kv) != n) {
#if SIZE_MAX == UINT_MAX
if (n > SIZE_MAX/sizeof(msgpack::object_kv))
throw msgpack::map_size_overflow("map size overflow");
}
#endif // SIZE_MAX == UINT_MAX
size_t size = n*sizeof(msgpack::object_kv);
o.via.map.ptr = static_cast<msgpack::object_kv*>(u.zone().allocate_align(size, MSGPACK_ZONE_ALIGNOF(msgpack::object_kv)));
}
};

View File

@@ -69,6 +69,7 @@ public:
case Z_STREAM_END:
return m_data;
case Z_OK:
case Z_BUF_ERROR:
if(!expand()) {
throw std::bad_alloc();
}

View File

@@ -163,10 +163,13 @@ public:
obj->via.array.ptr = MSGPACK_NULLPTR;
}
else {
size_t size = num_elements*sizeof(msgpack::object);
if (size / sizeof(msgpack::object) != num_elements) {
#if SIZE_MAX == UINT_MAX
if (num_elements > SIZE_MAX/sizeof(msgpack::object))
throw msgpack::array_size_overflow("array size overflow");
}
#endif // SIZE_MAX == UINT_MAX
size_t size = num_elements*sizeof(msgpack::object);
obj->via.array.ptr =
static_cast<msgpack::object*>(m_zone->allocate_align(size, MSGPACK_ZONE_ALIGNOF(msgpack::object)));
}
@@ -194,10 +197,12 @@ public:
obj->via.map.ptr = MSGPACK_NULLPTR;
}
else {
size_t size = num_kv_pairs*sizeof(msgpack::object_kv);
if (size / sizeof(msgpack::object_kv) != num_kv_pairs) {
#if SIZE_MAX == UINT_MAX
if (num_kv_pairs > SIZE_MAX/sizeof(msgpack::object_kv))
throw msgpack::map_size_overflow("map size overflow");
}
#endif // SIZE_MAX == UINT_MAX
size_t size = num_kv_pairs*sizeof(msgpack::object_kv);
obj->via.map.ptr =
static_cast<msgpack::object_kv*>(m_zone->allocate_align(size, MSGPACK_ZONE_ALIGNOF(msgpack::object_kv)));
}

View File

@@ -241,8 +241,6 @@ inline parse_return context<VisitorHolder>::execute(const char* data, std::size_
const char* const pe = data + len;
const char* n = MSGPACK_NULLPTR;
msgpack::object obj;
if(m_current == pe) {
off = static_cast<std::size_t>(m_current - m_start);
return PARSE_CONTINUE;

View File

@@ -250,8 +250,6 @@ inline parse_return context<VisitorHolder>::execute(const char* data, std::size_
const char* const pe = data + len;
const char* n = MSGPACK_NULLPTR;
msgpack::object obj;
if(m_current == pe) {
off = static_cast<std::size_t>(m_current - m_start);
return PARSE_CONTINUE;

View File

@@ -33,9 +33,9 @@ inline msgpack::object_handle unpack(
data, len, off, *z, obj, referenced, f, user_data, limit);
switch(ret) {
case msgpack::PARSE_SUCCESS:
case PARSE_SUCCESS:
return msgpack::object_handle(obj, msgpack::move(z));
case msgpack::PARSE_EXTRA_BYTES:
case PARSE_EXTRA_BYTES:
return msgpack::object_handle(obj, msgpack::move(z));
default:
break;
@@ -84,11 +84,11 @@ inline void unpack(
data, len, off, *z, obj, referenced, f, user_data, limit);
switch(ret) {
case msgpack::PARSE_SUCCESS:
case PARSE_SUCCESS:
result.set(obj);
result.zone() = msgpack::move(z);
return;
case msgpack::PARSE_EXTRA_BYTES:
case PARSE_EXTRA_BYTES:
result.set(obj);
result.zone() = msgpack::move(z);
return;
@@ -141,9 +141,9 @@ inline msgpack::object unpack(
data, len, off, z, obj, referenced, f, user_data, limit);
switch(ret) {
case msgpack::PARSE_SUCCESS:
case PARSE_SUCCESS:
return obj;
case msgpack::PARSE_EXTRA_BYTES:
case PARSE_EXTRA_BYTES:
return obj;
default:
break;

View File

@@ -1,3 +1,3 @@
#define MSGPACK_VERSION_MAJOR 3
#define MSGPACK_VERSION_MINOR 2
#define MSGPACK_VERSION_MINOR 3
#define MSGPACK_VERSION_REVISION 0

View File

@@ -13,7 +13,7 @@
#include "zone.h"
#include <stdlib.h>
#if defined(unix) || defined(__unix) || defined(__APPLE__) || defined(__OpenBSD__) || defined(__NetBSD__) || defined(__QNX__) || defined(__QNXTO__)
#if defined(unix) || defined(__unix) || defined(__linux__) || defined(__APPLE__) || defined(__OpenBSD__) || defined(__NetBSD__) || defined(__QNX__) || defined(__QNXTO__) || defined(__HAIKU__)
#include <sys/uio.h>
#else
struct iovec {

View File

@@ -100,7 +100,7 @@ static inline void msgpack_zbuffer_free(msgpack_zbuffer* zbuf)
static inline bool msgpack_zbuffer_expand(msgpack_zbuffer* zbuf)
{
size_t used = static_cast<size_t>(reinterpret_cast<char*>(zbuf->stream.next_out) - zbuf->data);
size_t used = (size_t)((char *)(zbuf->stream.next_out) - zbuf->data);
size_t csize = used + zbuf->stream.avail_out;
size_t nsize = (csize == 0) ? zbuf->init_size : csize * 2;
@@ -112,7 +112,7 @@ static inline bool msgpack_zbuffer_expand(msgpack_zbuffer* zbuf)
zbuf->data = tmp;
zbuf->stream.next_out = (Bytef*)(tmp + used);
zbuf->stream.avail_out = static_cast<uInt>(nsize - used);
zbuf->stream.avail_out = (uInt)(nsize - used);
return true;
}
@@ -122,7 +122,7 @@ static inline int msgpack_zbuffer_write(void* data, const char* buf, size_t len)
msgpack_zbuffer* zbuf = (msgpack_zbuffer*)data;
zbuf->stream.next_in = (Bytef*)buf;
zbuf->stream.avail_in = static_cast<uInt>(len);
zbuf->stream.avail_in = (uInt)len;
while(zbuf->stream.avail_in > 0) {
if(zbuf->stream.avail_out < MSGPACK_ZBUFFER_RESERVE_SIZE) {
@@ -146,6 +146,7 @@ static inline char* msgpack_zbuffer_flush(msgpack_zbuffer* zbuf)
case Z_STREAM_END:
return zbuf->data;
case Z_OK:
case Z_BUF_ERROR:
if(!msgpack_zbuffer_expand(zbuf)) {
return NULL;
}
@@ -163,7 +164,7 @@ static inline const char* msgpack_zbuffer_data(const msgpack_zbuffer* zbuf)
static inline size_t msgpack_zbuffer_size(const msgpack_zbuffer* zbuf)
{
return static_cast<size_t>(reinterpret_cast<char*>(zbuf->stream.next_out) - zbuf->data);
return (size_t)((char *)(zbuf->stream.next_out) - zbuf->data);
}
static inline void msgpack_zbuffer_reset_buffer(msgpack_zbuffer* zbuf)

View File

@@ -1,21 +1,48 @@
#!/bin/sh
#!/bin/bash
c_headers=(
include/msgpack.h
include/msgpack/gcc_atomic.h
include/msgpack/pack.h
include/msgpack/pack_define.h
include/msgpack/pack_template.h
include/msgpack/sbuffer.h
include/msgpack/timestamp.h
include/msgpack/unpack.h
include/msgpack/unpack_template.h
include/msgpack/util.h
include/msgpack/version.h
include/msgpack/vrefbuffer.h
)
rm -f c_headers.tmp
for hdr in ${c_headers[@]}; do
echo $hdr >> c_headers.tmp
done
find src -name "*.c" | sed -e 's/\s\+/\n/g' | sort > srcs.tmp
find include -name "*.h" | sed -e 's/\s\+/\n/g' | sort > c_headers.tmp
find include -name "*.h" | grep -vFf c_headers.tmp | sed -e 's/\s\+/\n/g' | sort > c_cpp_headers.tmp
find include -name "*.hpp" | sed -e 's/\s\+/\n/g' | sort > cpp_headers.tmp
echo 'LIST (APPEND msgpackc_SOURCES' > Files.cmake
cat srcs.tmp | sed -e 's/^/ /g' >> Files.cmake
echo ')' >> Files.cmake
echo -e ')\n' >> Files.cmake
echo 'LIST (APPEND msgpackc_HEADERS' >> Files.cmake
cat c_headers.tmp | sed -e 's/^/ /g' >> Files.cmake
echo ')' >> Files.cmake
echo '# For both C and C++ libraries
LIST (APPEND msgpackc_HEADERS' >> Files.cmake
cat c_cpp_headers.tmp | sed -e 's/^/ /g' >> Files.cmake
echo -e ')\n' >> Files.cmake
echo 'IF (MSGPACK_ENABLE_CXX)' >> Files.cmake
echo ' LIST (APPEND msgpackc_HEADERS' >> Files.cmake
echo 'IF (NOT MSGPACK_CXX_ONLY)
# Only for C library
LIST (APPEND msgpackc_HEADERS' >> Files.cmake
cat c_headers.tmp | sed -e 's/^/ /g' >> Files.cmake
echo -e ' )\nENDIF ()\n' >> Files.cmake
echo 'IF (MSGPACK_ENABLE_CXX)
# Only for C++ library
LIST (APPEND msgpackc_HEADERS' >> Files.cmake
cat cpp_headers.tmp | sed -e 's/^/ /g' >> Files.cmake
echo ' )' >> Files.cmake
echo 'ENDIF ()' >> Files.cmake
echo -e ' )\nENDIF ()' >> Files.cmake
rm -f srcs.tmp c_headers.tmp cpp_headers.tmp
rm -f srcs.tmp c_headers.tmp cpp_headers.tmp c_cpp_headers.tmp

View File

@@ -6,8 +6,9 @@
#
# ::
#
# msgpackc-static
# msgpackc
# msgpackc-cxx
# msgpackc-static (optional)
#
@PACKAGE_INIT@
@@ -16,8 +17,4 @@ include(CMakeFindDependencyMacro)
if(NOT TARGET msgpackc AND NOT TARGET msgpackc-static)
include("${CMAKE_CURRENT_LIST_DIR}/msgpack-targets.cmake")
if(NOT @MSGPACK_ENABLE_SHARED@)
add_library(msgpackc ALIAS msgpackc-static)
endif()
endif()

View File

@@ -256,7 +256,7 @@ void msgpack_object_print(FILE* out, msgpack_object o)
#define MSGPACK_CHECKED_CALL(ret, func, aux_buffer, aux_buffer_size, ...) \
ret = func(aux_buffer, aux_buffer_size, __VA_ARGS__); \
if (ret <= 0 || ret > (int)aux_buffer_size) return 0; \
if (ret <= 0 || ret >= (int)aux_buffer_size) return 0; \
aux_buffer = aux_buffer + ret; \
aux_buffer_size = aux_buffer_size - ret \

View File

@@ -25,6 +25,12 @@ bool msgpack_vrefbuffer_init(msgpack_vrefbuffer* vbuf,
struct iovec* array;
msgpack_vrefbuffer_chunk* chunk;
if (ref_size == 0) {
ref_size = MSGPACK_VREFBUFFER_REF_SIZE;
}
if(chunk_size == 0) {
chunk_size = MSGPACK_VREFBUFFER_CHUNK_SIZE;
}
vbuf->chunk_size = chunk_size;
vbuf->ref_size =
ref_size > MSGPACK_PACKER_MAX_BUFFER_SIZE + 1 ?

View File

@@ -7,73 +7,85 @@ INCLUDE_DIRECTORIES (
${ZLIB_INCLUDE_DIRS}
)
LIST (APPEND check_PROGRAMS
array_ref.cpp
buffer.cpp
carray.cpp
cases.cpp
convert.cpp
fixint.cpp
SET (tests_C
buffer_c.cpp
fixint_c.cpp
inc_adaptor_define.cpp
json.cpp
limit.cpp
msgpack_basic.cpp
msgpack_c.cpp
msgpack_container.cpp
msgpack_stream.cpp
msgpack_tuple.cpp
msgpack_vref.cpp
object.cpp
object_with_zone.cpp
pack_unpack.cpp
pack_unpack_c.cpp
raw.cpp
reference.cpp
size_equal_only.cpp
streaming.cpp
streaming_c.cpp
user_class.cpp
version.cpp
visitor.cpp
zone.cpp
)
IF (MSGPACK_BOOST)
IF (NOT MSGPACK_CXX_ONLY)
LIST (APPEND check_PROGRAMS
boost_fusion.cpp
boost_variant.cpp
boost_optional.cpp
boost_string_ref.cpp
boost_string_view.cpp
${tests_C}
)
ENDIF ()
IF (MSGPACK_USE_X3_PARSE)
IF (MSGPACK_ENABLE_CXX)
LIST (APPEND check_PROGRAMS
msgpack_x3_parse.cpp
array_ref.cpp
buffer.cpp
carray.cpp
cases.cpp
convert.cpp
fixint.cpp
inc_adaptor_define.cpp
json.cpp
limit.cpp
msgpack_basic.cpp
msgpack_container.cpp
msgpack_stream.cpp
msgpack_tuple.cpp
msgpack_vref.cpp
object.cpp
object_with_zone.cpp
pack_unpack.cpp
raw.cpp
reference.cpp
size_equal_only.cpp
streaming.cpp
user_class.cpp
version.cpp
visitor.cpp
zone.cpp
)
ENDIF ()
IF (MSGPACK_CXX11)
LIST (APPEND check_PROGRAMS
iterator_cpp11.cpp
msgpack_cpp11.cpp
reference_cpp11.cpp
reference_wrapper_cpp11.cpp
shared_ptr_cpp11.cpp
unique_ptr_cpp11.cpp
IF (MSGPACK_BOOST)
LIST (APPEND check_PROGRAMS
boost_fusion.cpp
boost_variant.cpp
boost_optional.cpp
boost_string_ref.cpp
boost_string_view.cpp
)
ENDIF ()
# fuzzers are cpp11 only
fuzz_unpack_pack_fuzzer_cpp11.cpp
)
ENDIF ()
IF (MSGPACK_USE_X3_PARSE)
LIST (APPEND check_PROGRAMS
msgpack_x3_parse.cpp
)
ENDIF ()
IF (MSGPACK_CXX17)
LIST (APPEND check_PROGRAMS
msgpack_cpp17.cpp
)
ENDIF ()
IF (MSGPACK_CXX11 OR MSGPACK_CXX17)
LIST (APPEND check_PROGRAMS
iterator_cpp11.cpp
msgpack_cpp11.cpp
reference_cpp11.cpp
reference_wrapper_cpp11.cpp
shared_ptr_cpp11.cpp
unique_ptr_cpp11.cpp
# fuzzers are cpp11 only
fuzz_unpack_pack_fuzzer_cpp11.cpp
)
ENDIF ()
IF (MSGPACK_CXX17)
LIST (APPEND check_PROGRAMS
msgpack_cpp17.cpp
)
ENDIF ()
ENDIF (MSGPACK_ENABLE_CXX)
FOREACH (source_file ${check_PROGRAMS})
GET_FILENAME_COMPONENT (source_file_we ${source_file} NAME_WE)
@@ -81,8 +93,16 @@ FOREACH (source_file ${check_PROGRAMS})
${source_file_we}
${source_file}
)
LIST (FIND tests_C ${source_file} idx)
IF (idx GREATER -1)
SET (link_target msgpackc)
ELSE ()
SET (link_target msgpackc-cxx)
ENDIF ()
TARGET_LINK_LIBRARIES (${source_file_we}
msgpackc
${link_target}
${GTEST_BOTH_LIBRARIES}
${ZLIB_LIBRARIES}
${CMAKE_THREAD_LIBS_INIT}
@@ -96,20 +116,22 @@ FOREACH (source_file ${check_PROGRAMS})
ENDIF ()
IF ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "MSVC")
IF (CMAKE_CXX_FLAGS MATCHES "/W[0-4] /WX")
IF (CMAKE_CXX_FLAGS MATCHES "/W[0-4]")
STRING(REGEX REPLACE "/W[0-4]" "/W3 /WX" CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}")
ELSE ()
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /W3")
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /W3 /WX")
ENDIF ()
ENDIF ()
ENDFOREACH ()
ADD_EXECUTABLE (
multi_file
multi_file1.cpp multi_file2.cpp
)
TARGET_INCLUDE_DIRECTORIES (multi_file
PRIVATE
$<TARGET_PROPERTY:msgpackc,INTERFACE_INCLUDE_DIRECTORIES>
)
ADD_TEST (multi_file multi_file)
IF (MSGPACK_ENABLE_CXX)
ADD_EXECUTABLE (
multi_file
multi_file1.cpp multi_file2.cpp
)
TARGET_INCLUDE_DIRECTORIES (multi_file
PRIVATE
$<TARGET_PROPERTY:msgpackc-cxx,INTERFACE_INCLUDE_DIRECTORIES>
)
ADD_TEST (multi_file multi_file)
ENDIF ()

View File

@@ -3,12 +3,16 @@
#include <string>
#include <sstream>
#if defined(__GNUC__)
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wconversion"
#endif //defined(__GNUC__)
#include <gtest/gtest.h>
#if defined(__GNUC__)
#pragma GCC diagnostic pop
#endif //defined(__GNUC__)
#ifdef HAVE_CONFIG_H
#include "config.h"
@@ -25,8 +29,9 @@ TEST(MSGPACK_ARRAY_REF, pack_unpack_convert_vector_char)
std::stringstream ss;
msgpack::pack(ss, ar1);
std::string const& str = ss.str();
msgpack::object_handle oh =
msgpack::unpack(ss.str().data(), ss.str().size());
msgpack::unpack(str.data(), str.size());
EXPECT_EQ(oh.get().type, msgpack::type::ARRAY);
std::vector<char> v2;
msgpack::type::array_ref<std::vector<char> > ar2(v2);
@@ -47,8 +52,9 @@ TEST(MSGPACK_ARRAY_REF, pack_unpack_convert_vector_char_const)
std::stringstream ss;
msgpack::pack(ss, ar1);
std::string const& str = ss.str();
msgpack::object_handle oh =
msgpack::unpack(ss.str().data(), ss.str().size());
msgpack::unpack(str.data(), str.size());
EXPECT_EQ(oh.get().type, msgpack::type::ARRAY);
std::vector<char> v2;
msgpack::type::array_ref<std::vector<char> > ar2(v2);
@@ -67,8 +73,9 @@ TEST(MSGPACK_ARRAY_REF, pack_unpack_convert_vector_unsigned_char)
std::stringstream ss;
msgpack::pack(ss, ar1);
std::string const& str = ss.str();
msgpack::object_handle oh =
msgpack::unpack(ss.str().data(), ss.str().size());
msgpack::unpack(str.data(), str.size());
EXPECT_EQ(oh.get().type, msgpack::type::ARRAY);
std::vector<unsigned char> v2;
msgpack::type::array_ref<std::vector<unsigned char> > ar2(v2);
@@ -89,8 +96,9 @@ TEST(MSGPACK_ARRAY_REF, pack_unpack_convert_vector_unsigned_char_const)
std::stringstream ss;
msgpack::pack(ss, ar1);
std::string const& str = ss.str();
msgpack::object_handle oh =
msgpack::unpack(ss.str().data(), ss.str().size());
msgpack::unpack(str.data(), str.size());
EXPECT_EQ(oh.get().type, msgpack::type::ARRAY);
std::vector<unsigned char> v2;
msgpack::type::array_ref<std::vector<unsigned char> > ar2(v2);
@@ -184,8 +192,9 @@ TEST(MSGPACK_ARRAY_REF, pack_unpack_convert_array_char)
std::stringstream ss;
msgpack::pack(ss, ar1);
std::string const& str = ss.str();
msgpack::object_handle oh =
msgpack::unpack(ss.str().data(), ss.str().size());
msgpack::unpack(str.data(), str.size());
EXPECT_EQ(oh.get().type, msgpack::type::ARRAY);
std::array<char, 3> v2;
msgpack::type::array_ref<std::array<char, 3> > ar2(v2);
@@ -203,8 +212,9 @@ TEST(MSGPACK_ARRAY_REF, pack_unpack_convert_array_char_const)
std::stringstream ss;
msgpack::pack(ss, ar1);
std::string const& str = ss.str();
msgpack::object_handle oh =
msgpack::unpack(ss.str().data(), ss.str().size());
msgpack::unpack(str.data(), str.size());
EXPECT_EQ(oh.get().type, msgpack::type::ARRAY);
std::array<char, 3> v2;
msgpack::type::array_ref<std::array<char, 3> > ar2(v2);
@@ -220,8 +230,9 @@ TEST(MSGPACK_ARRAY_REF, pack_unpack_convert_array_unsigned_char)
std::stringstream ss;
msgpack::pack(ss, ar1);
std::string const& str = ss.str();
msgpack::object_handle oh =
msgpack::unpack(ss.str().data(), ss.str().size());
msgpack::unpack(str.data(), str.size());
EXPECT_EQ(oh.get().type, msgpack::type::ARRAY);
std::array<unsigned char, 3> v2;
msgpack::type::array_ref<std::array<unsigned char, 3> > ar2(v2);
@@ -239,8 +250,9 @@ TEST(MSGPACK_ARRAY_REF, pack_unpack_convert_array_unsigned_char_const)
std::stringstream ss;
msgpack::pack(ss, ar1);
std::string const& str = ss.str();
msgpack::object_handle oh =
msgpack::unpack(ss.str().data(), ss.str().size());
msgpack::unpack(str.data(), str.size());
EXPECT_EQ(oh.get().type, msgpack::type::ARRAY);
std::array<unsigned char, 3> v2;
msgpack::type::array_ref<std::array<unsigned char, 3> > ar2(v2);

View File

@@ -3,12 +3,16 @@
#include <iterator>
#include <cmath>
#if defined(__GNUC__)
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wconversion"
#endif //defined(__GNUC__)
#include <gtest/gtest.h>
#if defined(__GNUC__)
#pragma GCC diagnostic pop
#endif //defined(__GNUC__)
#ifdef HAVE_CONFIG_H
#include "config.h"
@@ -35,8 +39,9 @@ TEST(MSGPACK_BOOST, fusion_pack_unpack_convert)
val1.f1 = 42;
val1.f2 = 123.45;
msgpack::pack(ss, val1);
std::string const& str = ss.str();
msgpack::object_handle oh =
msgpack::unpack(ss.str().data(), ss.str().size());
msgpack::unpack(str.data(), str.size());
mystruct val2 = oh.get().as<mystruct>();
EXPECT_TRUE(val1.f1 == val2.f1);
EXPECT_TRUE(fabs(val2.f2 - val1.f2) <= kEPS);
@@ -156,8 +161,9 @@ TEST(MSGPACK_BOOST, pack_convert_no_def_con)
std::stringstream ss;
mystruct_no_def_con val1(no_def_con1(1), no_def_con2(2), no_def_con1(3));
msgpack::pack(ss, val1);
std::string const& str = ss.str();
msgpack::object_handle oh =
msgpack::unpack(ss.str().data(), ss.str().size());
msgpack::unpack(str.data(), str.size());
mystruct_no_def_con val2 = oh.get().as<mystruct_no_def_con>();
EXPECT_TRUE(val1 == val2);
}
@@ -207,8 +213,9 @@ TEST(MSGPACK_BOOST, pack_convert_no_def_con_def_con)
std::stringstream ss;
mystruct_no_def_con_def_con val1(no_def_con1(1), no_def_con2(2), 3);
msgpack::pack(ss, val1);
std::string const& str = ss.str();
msgpack::object_handle oh =
msgpack::unpack(ss.str().data(), ss.str().size());
msgpack::unpack(str.data(), str.size());
mystruct_no_def_con_def_con val2 = oh.get().as<mystruct_no_def_con_def_con>();
EXPECT_TRUE(val1 == val2);
}
@@ -224,8 +231,9 @@ TEST(MSGPACK_BOOST, fusion_pack_unpack_convert_pair)
std::stringstream ss;
std::pair<bool, int> val1(false, 42);
msgpack::pack(ss, val1);
std::string const& str = ss.str();
msgpack::object_handle oh =
msgpack::unpack(ss.str().data(), ss.str().size());
msgpack::unpack(str.data(), str.size());
std::pair<bool, int> val2 = oh.get().as<std::pair<bool, int> >();
EXPECT_TRUE(val1.first == val2.first);
EXPECT_TRUE(val1.second == val2.second);
@@ -240,8 +248,9 @@ TEST(MSGPACK_BOOST, fusion_pack_unpack_convert_tuple)
std::stringstream ss;
std::tuple<bool, int> val1(false, 42);
msgpack::pack(ss, val1);
std::string const& str = ss.str();
msgpack::object_handle oh =
msgpack::unpack(ss.str().data(), ss.str().size());
msgpack::unpack(str.data(), str.size());
std::tuple<bool, int> val2 = oh.get().as<std::tuple<bool, int> >();
EXPECT_TRUE(val1 == val2);
}

View File

@@ -2,12 +2,16 @@
#include <sstream>
#include <iterator>
#if defined(__GNUC__)
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wconversion"
#endif //defined(__GNUC__)
#include <gtest/gtest.h>
#if defined(__GNUC__)
#pragma GCC diagnostic pop
#endif //defined(__GNUC__)
#ifdef HAVE_CONFIG_H
@@ -21,8 +25,9 @@ TEST(MSGPACK_BOOST, pack_convert_nil)
std::stringstream ss;
boost::optional<int> val1;
msgpack::pack(ss, val1);
std::string const& str = ss.str();
msgpack::object_handle oh =
msgpack::unpack(ss.str().data(), ss.str().size());
msgpack::unpack(str.data(), str.size());
boost::optional<int> val2 = oh.get().as<boost::optional<int> >();
EXPECT_TRUE(val1 == val2);
}
@@ -32,8 +37,9 @@ TEST(MSGPACK_BOOST, pack_convert_int)
std::stringstream ss;
boost::optional<int> val1 = 1;
msgpack::pack(ss, val1);
std::string const& str = ss.str();
msgpack::object_handle oh =
msgpack::unpack(ss.str().data(), ss.str().size());
msgpack::unpack(str.data(), str.size());
boost::optional<int> val2 = oh.get().as<boost::optional<int> >();
EXPECT_TRUE(val1 == val2);
}
@@ -49,8 +55,9 @@ TEST(MSGPACK_BOOST, pack_convert_vector)
v.push_back(3);
val1 = v;
msgpack::pack(ss, val1);
std::string const& str = ss.str();
msgpack::object_handle oh =
msgpack::unpack(ss.str().data(), ss.str().size());
msgpack::unpack(str.data(), str.size());
ovi_t val2 = oh.get().as<ovi_t>();
EXPECT_TRUE(val1 == val2);
}
@@ -64,8 +71,9 @@ TEST(MSGPACK_BOOST, pack_convert_vector_optional)
val1[0] = 1;
val1[2] = 3;
msgpack::pack(ss, val1);
std::string const& str = ss.str();
msgpack::object_handle oh =
msgpack::unpack(ss.str().data(), ss.str().size());
msgpack::unpack(str.data(), str.size());
voi_t val2 = oh.get().as<voi_t>();
EXPECT_TRUE(val1 == val2);
}
@@ -171,8 +179,9 @@ TEST(MSGPACK_BOOST, pack_convert_no_def_con)
std::stringstream ss;
boost::optional<no_def_con> val1 = no_def_con(1);
msgpack::pack(ss, val1);
std::string const& str = ss.str();
msgpack::object_handle oh =
msgpack::unpack(ss.str().data(), ss.str().size());
msgpack::unpack(str.data(), str.size());
boost::optional<no_def_con> val2 = oh.get().as<boost::optional<no_def_con>>();
EXPECT_TRUE(val1 == val2);
}

View File

@@ -2,13 +2,16 @@
#include <sstream>
#include <iterator>
#if defined(__GNUC__)
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wconversion"
#endif //defined(__GNUC__)
#include <gtest/gtest.h>
#if defined(__GNUC__)
#pragma GCC diagnostic pop
#endif //defined(__GNUC__)
#ifdef HAVE_CONFIG_H
#include "config.h"
@@ -26,7 +29,8 @@ TEST(MSGPACK_BOOST, pack_convert_string_ref)
msgpack::pack(ss, val1);
msgpack::object_handle oh;
msgpack::unpack(oh, ss.str().data(), ss.str().size());
std::string const& str = ss.str();
msgpack::unpack(oh, str.data(), str.size());
boost::string_ref val2 = oh.get().as<boost::string_ref>();
EXPECT_TRUE(val1 == val2);
}

View File

@@ -2,12 +2,16 @@
#include <sstream>
#include <iterator>
#if defined(__GNUC__)
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wconversion"
#endif //defined(__GNUC__)
#include <gtest/gtest.h>
#if defined(__GNUC__)
#pragma GCC diagnostic pop
#endif //defined(__GNUC__)
#ifdef HAVE_CONFIG_H
#include "config.h"
@@ -25,7 +29,8 @@ TEST(MSGPACK_BOOST, pack_convert_string_view)
msgpack::pack(ss, val1);
msgpack::object_handle oh;
msgpack::unpack(oh, ss.str().data(), ss.str().size());
std::string const& str = ss.str();
msgpack::unpack(oh, str.data(), str.size());
boost::string_view val2 = oh.get().as<boost::string_view>();
EXPECT_TRUE(val1 == val2);
}

View File

@@ -3,12 +3,16 @@
#include <sstream>
#include <iterator>
#if defined(__GNUC__)
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wconversion"
#endif //defined(__GNUC__)
#include <gtest/gtest.h>
#if defined(__GNUC__)
#pragma GCC diagnostic pop
#endif //defined(__GNUC__)
#ifdef HAVE_CONFIG_H
#include "config.h"
@@ -27,8 +31,9 @@ TEST(MSGPACK_BOOST, pack_convert_variant_nil)
EXPECT_TRUE(val1.is_nil());
msgpack::pack(ss, val1);
std::string const& str = ss.str();
msgpack::object_handle oh =
msgpack::unpack(ss.str().data(), ss.str().size());
msgpack::unpack(str.data(), str.size());
msgpack::type::variant val2 = oh.get().as<msgpack::type::variant>();
EXPECT_TRUE(val2.is_nil());
EXPECT_NO_THROW(boost::get<msgpack::type::nil_t>(val2));
@@ -65,8 +70,9 @@ TEST(MSGPACK_BOOST, pack_convert_variant_nil_default)
msgpack::pack(ss, val1);
std::string const& str = ss.str();
msgpack::object_handle oh =
msgpack::unpack(ss.str().data(), ss.str().size());
msgpack::unpack(str.data(), str.size());
msgpack::type::variant val2 = oh.get().as<msgpack::type::variant>();
EXPECT_TRUE(val2.is_nil());
EXPECT_NO_THROW(boost::get<msgpack::type::nil_t>(val2));
@@ -104,8 +110,9 @@ TEST(MSGPACK_BOOST, pack_convert_variant_bool)
msgpack::pack(ss, val1);
std::string const& str = ss.str();
msgpack::object_handle oh =
msgpack::unpack(ss.str().data(), ss.str().size());
msgpack::unpack(str.data(), str.size());
msgpack::type::variant val2 = oh.get().as<msgpack::type::variant>();
EXPECT_TRUE(val2.is_bool());
EXPECT_TRUE(val2.as_bool());
@@ -157,8 +164,9 @@ TEST(MSGPACK_BOOST, pack_convert_variant_positive_integer)
msgpack::pack(ss, val1);
std::string const& str = ss.str();
msgpack::object_handle oh =
msgpack::unpack(ss.str().data(), ss.str().size());
msgpack::unpack(str.data(), str.size());
msgpack::type::variant val2 = oh.get().as<msgpack::type::variant>();
EXPECT_TRUE(val2.is_uint64_t());
EXPECT_EQ(val2.as_uint64_t(), 123U);
@@ -204,8 +212,9 @@ TEST(MSGPACK_BOOST, pack_convert_variant_negative_integer)
msgpack::pack(ss, val1);
std::string const& str = ss.str();
msgpack::object_handle oh =
msgpack::unpack(ss.str().data(), ss.str().size());
msgpack::unpack(str.data(), str.size());
msgpack::type::variant val2 = oh.get().as<msgpack::type::variant>();
EXPECT_TRUE(val2.is_int64_t());
EXPECT_EQ(val2.as_int64_t(), -123);
@@ -251,8 +260,9 @@ TEST(MSGPACK_BOOST, pack_convert_variant_float)
msgpack::pack(ss, val1);
std::string const& str = ss.str();
msgpack::object_handle oh =
msgpack::unpack(ss.str().data(), ss.str().size());
msgpack::unpack(str.data(), str.size());
msgpack::type::variant val2 = oh.get().as<msgpack::type::variant>();
EXPECT_TRUE(val2.is_double());
EXPECT_TRUE(fabs(12.34 - val2.as_double()) <= kEPS);
@@ -298,8 +308,9 @@ TEST(MSGPACK_BOOST, pack_convert_variant_str)
msgpack::pack(ss, val1);
std::string const& str = ss.str();
msgpack::object_handle oh =
msgpack::unpack(ss.str().data(), ss.str().size());
msgpack::unpack(str.data(), str.size());
msgpack::type::variant val2 = oh.get().as<msgpack::type::variant>();
EXPECT_TRUE(val2.is_string());
EXPECT_EQ(val2.as_string(), "ABC");
@@ -360,8 +371,9 @@ TEST(MSGPACK_BOOST, pack_convert_variant_bin)
msgpack::pack(ss, val1);
std::string const& str = ss.str();
msgpack::object_handle oh =
msgpack::unpack(ss.str().data(), ss.str().size());
msgpack::unpack(str.data(), str.size());
msgpack::type::variant val2 = oh.get().as<msgpack::type::variant>();
EXPECT_TRUE(val2.is_vector_char());
EXPECT_EQ(val2.as_vector_char(), v);
@@ -431,8 +443,9 @@ TEST(MSGPACK_BOOST, pack_convert_variant_ext)
msgpack::pack(ss, val1);
std::string const& str = ss.str();
msgpack::object_handle oh =
msgpack::unpack(ss.str().data(), ss.str().size());
msgpack::unpack(str.data(), str.size());
msgpack::type::variant val2 = oh.get().as<msgpack::type::variant>();
EXPECT_TRUE(val2.is_ext());
EXPECT_EQ(val2.as_ext(), e);
@@ -498,8 +511,9 @@ TEST(MSGPACK_BOOST, pack_convert_variant_array)
msgpack::pack(ss, val1);
std::string const& str = ss.str();
msgpack::object_handle oh =
msgpack::unpack(ss.str().data(), ss.str().size());
msgpack::unpack(str.data(), str.size());
msgpack::type::variant val2 = oh.get().as<msgpack::type::variant>();
EXPECT_TRUE(val2.is_vector());
EXPECT_EQ(val2.as_vector(), v);
@@ -540,8 +554,9 @@ TEST(MSGPACK_BOOST, pack_convert_variant_map)
msgpack::pack(ss, val1);
std::string const& str = ss.str();
msgpack::object_handle oh =
msgpack::unpack(ss.str().data(), ss.str().size());
msgpack::unpack(str.data(), str.size());
msgpack::type::variant val2 = oh.get().as<msgpack::type::variant>();
EXPECT_TRUE(val2.is_multimap());
EXPECT_EQ(val2.as_multimap(), v);
@@ -584,8 +599,9 @@ TEST(MSGPACK_BOOST, pack_convert_variant_ref_str)
msgpack::pack(ss, val1);
std::string const& str = ss.str();
msgpack::object_handle oh =
msgpack::unpack(ss.str().data(), ss.str().size());
msgpack::unpack(str.data(), str.size());
msgpack::type::variant_ref val2 = oh.get().as<msgpack::type::variant_ref>();
EXPECT_TRUE(val2.is_boost_string_ref());
EXPECT_EQ(val2.as_boost_string_ref(), sr);
@@ -629,8 +645,9 @@ TEST(MSGPACK_BOOST, pack_convert_variant_ref_bin)
msgpack::pack(ss, val1);
std::string const& str = ss.str();
msgpack::object_handle oh =
msgpack::unpack(ss.str().data(), ss.str().size());
msgpack::unpack(str.data(), str.size());
msgpack::type::variant_ref val2 = oh.get().as<msgpack::type::variant_ref>();
EXPECT_TRUE(val2.is_raw_ref());
EXPECT_EQ(val2.as_raw_ref(), rr);
@@ -676,8 +693,9 @@ TEST(MSGPACK_BOOST, pack_convert_variant_ref_ext)
msgpack::pack(ss, val1);
std::string const& str = ss.str();
msgpack::object_handle oh =
msgpack::unpack(ss.str().data(), ss.str().size());
msgpack::unpack(str.data(), str.size());
msgpack::type::variant_ref val2 = oh.get().as<msgpack::type::variant_ref>();
EXPECT_NO_THROW(boost::get<msgpack::type::ext_ref>(val2));
EXPECT_TRUE(val2.is_ext_ref());
@@ -726,8 +744,9 @@ TEST(MSGPACK_BOOST, pack_convert_variant_ref_array)
msgpack::pack(ss, val1);
std::string const& str = ss.str();
msgpack::object_handle oh =
msgpack::unpack(ss.str().data(), ss.str().size());
msgpack::unpack(str.data(), str.size());
msgpack::type::variant_ref val2 = oh.get().as<msgpack::type::variant_ref>();
EXPECT_TRUE(val2.is_vector());
EXPECT_EQ(val2.as_vector(), v);
@@ -779,8 +798,9 @@ TEST(MSGPACK_BOOST, pack_convert_variant_ref_map)
msgpack::pack(ss, val1);
std::string const& str = ss.str();
msgpack::object_handle oh =
msgpack::unpack(ss.str().data(), ss.str().size());
msgpack::unpack(str.data(), str.size());
msgpack::type::variant_ref val2 = oh.get().as<msgpack::type::variant_ref>();
EXPECT_TRUE(val2.is_multimap());
EXPECT_EQ(val2.as_multimap(), v);

View File

@@ -1,15 +1,17 @@
#include <msgpack.hpp>
#include <msgpack/fbuffer.hpp>
#include <msgpack/fbuffer.h>
#include <msgpack/zbuffer.hpp>
#include <msgpack/zbuffer.h>
#if defined(__GNUC__)
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wconversion"
#endif //defined(__GNUC__)
#include <gtest/gtest.h>
#if defined(__GNUC__)
#pragma GCC diagnostic pop
#endif //defined(__GNUC__)
#include <string.h>
@@ -69,7 +71,6 @@ TEST(buffer, vrefbuffer)
EXPECT_TRUE( memcmp(sbuf.data(), "aaa", 3) == 0 );
}
TEST(buffer, zbuffer)
{
msgpack::zbuffer zbuf;
@@ -81,22 +82,6 @@ TEST(buffer, zbuffer)
zbuf.flush();
}
TEST(buffer, zbuffer_c)
{
msgpack_zbuffer zbuf;
EXPECT_TRUE(msgpack_zbuffer_init(&zbuf, 1, MSGPACK_ZBUFFER_INIT_SIZE));
EXPECT_EQ(0, msgpack_zbuffer_write(&zbuf, "a", 1));
EXPECT_EQ(0, msgpack_zbuffer_write(&zbuf, "a", 1));
EXPECT_EQ(0, msgpack_zbuffer_write(&zbuf, "a", 1));
EXPECT_EQ(0, msgpack_zbuffer_write(&zbuf, "", 0));
EXPECT_TRUE(msgpack_zbuffer_flush(&zbuf) != NULL);
msgpack_zbuffer_destroy(&zbuf);
}
TEST(buffer, fbuffer)
{
#if defined(_MSC_VER)
@@ -124,31 +109,3 @@ TEST(buffer, fbuffer)
EXPECT_EQ(EOF, fgetc(file));
fclose(file);
}
TEST(buffer, fbuffer_c)
{
#if defined(_MSC_VER)
FILE* file;
tmpfile_s(&file);
#else // defined(_MSC_VER)
FILE* file = tmpfile();
#endif // defined(_MSC_VER)
void* fbuf = (void*)file;
EXPECT_TRUE( file != NULL );
EXPECT_EQ(0, msgpack_fbuffer_write(fbuf, "a", 1));
EXPECT_EQ(0, msgpack_fbuffer_write(fbuf, "a", 1));
EXPECT_EQ(0, msgpack_fbuffer_write(fbuf, "a", 1));
fflush(file);
rewind(file);
for (size_t i=0; i < 3; ++i) {
int ch = fgetc(file);
EXPECT_TRUE(ch != EOF);
EXPECT_EQ('a', (char) ch);
}
EXPECT_EQ(EOF, fgetc(file));
fclose(file);
}

148
test/buffer_c.cpp Normal file
View File

@@ -0,0 +1,148 @@
#include <msgpack/fbuffer.h>
#include <msgpack/zbuffer.h>
#include <msgpack/sbuffer.h>
#include <msgpack/vrefbuffer.h>
#if defined(__GNUC__)
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wconversion"
#endif //defined(__GNUC__)
#include <gtest/gtest.h>
#if defined(__GNUC__)
#pragma GCC diagnostic pop
#endif //defined(__GNUC__)
#include <string.h>
#if defined(unix) || defined(__unix) || defined(__linux__) || defined(__APPLE__) || defined(__OpenBSD__) || defined(__NetBSD__) || defined(__QNX__) || defined(__QNXTO__) || defined(__HAIKU__)
#define HAVE_SYS_UIO_H 1
#else
#define HAVE_SYS_UIO_H 0
#endif
TEST(buffer, zbuffer_c)
{
msgpack_zbuffer zbuf;
EXPECT_TRUE(msgpack_zbuffer_init(&zbuf, 1, MSGPACK_ZBUFFER_INIT_SIZE));
EXPECT_EQ(0, msgpack_zbuffer_write(&zbuf, "a", 1));
EXPECT_EQ(0, msgpack_zbuffer_write(&zbuf, "a", 1));
EXPECT_EQ(0, msgpack_zbuffer_write(&zbuf, "a", 1));
EXPECT_EQ(0, msgpack_zbuffer_write(&zbuf, "", 0));
EXPECT_TRUE(msgpack_zbuffer_flush(&zbuf) != NULL);
msgpack_zbuffer_destroy(&zbuf);
}
TEST(buffer, fbuffer_c)
{
#if defined(_MSC_VER)
FILE* file;
tmpfile_s(&file);
#else // defined(_MSC_VER)
FILE* file = tmpfile();
#endif // defined(_MSC_VER)
void* fbuf = (void*)file;
EXPECT_TRUE( file != NULL );
EXPECT_EQ(0, msgpack_fbuffer_write(fbuf, "a", 1));
EXPECT_EQ(0, msgpack_fbuffer_write(fbuf, "a", 1));
EXPECT_EQ(0, msgpack_fbuffer_write(fbuf, "a", 1));
fflush(file);
rewind(file);
for (size_t i=0; i < 3; ++i) {
int ch = fgetc(file);
EXPECT_TRUE(ch != EOF);
EXPECT_EQ('a', (char) ch);
}
EXPECT_EQ(EOF, fgetc(file));
fclose(file);
}
TEST(buffer, sbuffer_c)
{
msgpack_sbuffer *sbuf;
char *data;
sbuf = msgpack_sbuffer_new();
EXPECT_TRUE(sbuf != NULL);
EXPECT_EQ(0, msgpack_sbuffer_write(sbuf, "a", 1));
EXPECT_EQ(0, msgpack_sbuffer_write(sbuf, "b", 1));
EXPECT_EQ(0, msgpack_sbuffer_write(sbuf, "c", 1));
EXPECT_EQ(0, msgpack_sbuffer_write(sbuf, "", 0));
EXPECT_EQ(3U, sbuf->size);
EXPECT_EQ(0, memcmp(sbuf->data, "abc", 3));
data = msgpack_sbuffer_release(sbuf);
EXPECT_EQ(0, memcmp(data, "abc", 3));
EXPECT_EQ(0U, sbuf->size);
EXPECT_TRUE(sbuf->data == NULL);
free(data);
msgpack_sbuffer_free(sbuf);
}
TEST(buffer, vrefbuffer_c)
{
const char *raw = "I was about to sail away in a junk,"
"When suddenly I heard"
"The sound of stamping and singing on the bank--"
"It was you and your friends come to bid me farewell."
"The Peach Flower Lake is a thousand fathoms deep,"
"But it cannot compare, O Wang Lun,"
"With the depth of your love for me.";
const size_t rawlen = strlen(raw);
msgpack_vrefbuffer *vbuf;
const int ref_size = 24, chunk_size = 128;
size_t slices[] = {0, 9, 10,
MSGPACK_VREFBUFFER_REF_SIZE,
MSGPACK_VREFBUFFER_REF_SIZE + 1,
ref_size, chunk_size + 1};
size_t iovcnt;
const iovec *iov;
size_t len = 0, i;
char *buf;
vbuf = msgpack_vrefbuffer_new(ref_size, 0);
for (i = 0; i < sizeof(slices) / sizeof(slices[0]); i++) {
msgpack_vrefbuffer_write(vbuf, raw + len, slices[i]);
len += slices[i];
}
EXPECT_LT(len, rawlen);
iov = msgpack_vrefbuffer_vec(vbuf);
iovcnt = msgpack_vrefbuffer_veclen(vbuf);
buf = (char *)malloc(rawlen);
#if HAVE_SYS_UIO_H
{
int fd;
char filename[] = "/tmp/mp.XXXXXX";
fd = mkstemp(filename);
EXPECT_LT(0, fd);
writev(fd, iov, (int)iovcnt);
len = (size_t)lseek(fd, 0, SEEK_END);
lseek(fd, 0, SEEK_SET);
read(fd, buf, len);
EXPECT_EQ(0, memcmp(buf, raw, len));
close(fd);
unlink(filename);
}
#else
{
len = 0;
for (i = 0; i < iovcnt; i++)
{
EXPECT_LT(len, rawlen);
memcpy(buf + len, iov[i].iov_base, iov[i].iov_len);
len += iov[i].iov_len;
}
EXPECT_EQ(0, memcmp(buf, raw, len));
}
#endif
free(buf);
msgpack_vrefbuffer_free(vbuf);
}

View File

@@ -1,11 +1,15 @@
#include <msgpack.hpp>
#if defined(__GNUC__)
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wconversion"
#endif //defined(__GNUC__)
#include <gtest/gtest.h>
#if defined(__GNUC__)
#pragma GCC diagnostic pop
#endif //defined(__GNUC__)
#include <sstream>
@@ -15,7 +19,8 @@ TEST(carray, pack_unpack_int)
int v1[] = { 0, 1 };
msgpack::pack(ss, v1);
msgpack::object_handle oh = msgpack::unpack(ss.str().data(), ss.str().size());
std::string const& str = ss.str();
msgpack::object_handle oh = msgpack::unpack(str.data(), str.size());
EXPECT_EQ(oh.get().type, msgpack::type::ARRAY);
int v2[2];
@@ -44,7 +49,8 @@ TEST(carray, pack_unpack_const_int)
const int v1[] = { 0, 1 };
msgpack::pack(ss, v1);
msgpack::object_handle oh = msgpack::unpack(ss.str().data(), ss.str().size());
std::string const& str = ss.str();
msgpack::object_handle oh = msgpack::unpack(str.data(), str.size());
EXPECT_EQ(oh.get().type, msgpack::type::ARRAY);
int v2[2];
@@ -73,7 +79,8 @@ TEST(carray, pack_unpack_string)
std::string v1[] = { "ABC", "DEFG" };
msgpack::pack(ss, v1);
msgpack::object_handle oh = msgpack::unpack(ss.str().data(), ss.str().size());
std::string const& str = ss.str();
msgpack::object_handle oh = msgpack::unpack(str.data(), str.size());
EXPECT_EQ(oh.get().type, msgpack::type::ARRAY);
std::string v2[2];
@@ -102,7 +109,8 @@ TEST(carray, pack_unpack_char)
char v1[] = { 0, 1 };
msgpack::pack(ss, msgpack::type::make_array_ref(v1));
msgpack::object_handle oh = msgpack::unpack(ss.str().data(), ss.str().size());
std::string const& str = ss.str();
msgpack::object_handle oh = msgpack::unpack(str.data(), str.size());
EXPECT_EQ(oh.get().type, msgpack::type::ARRAY);
char v2[2];
@@ -118,7 +126,8 @@ TEST(carray, pack_unpack_char_as_str)
char v1[2] = { 1, '\0' };
msgpack::pack(ss, v1);
msgpack::object_handle oh = msgpack::unpack(ss.str().data(), ss.str().size());
std::string const& str = ss.str();
msgpack::object_handle oh = msgpack::unpack(str.data(), str.size());
EXPECT_EQ(oh.get().type, msgpack::type::STR);
EXPECT_EQ(oh.get().via.str.size, static_cast<size_t>(1));
@@ -164,7 +173,8 @@ TEST(carray, pack_unpack_unsigned_char)
unsigned char v1[] = { 0, 1 };
msgpack::pack(ss, msgpack::type::make_array_ref(v1));
msgpack::object_handle oh = msgpack::unpack(ss.str().data(), ss.str().size());
std::string const& str = ss.str();
msgpack::object_handle oh = msgpack::unpack(str.data(), str.size());
EXPECT_EQ(oh.get().type, msgpack::type::ARRAY);
unsigned char v2[2];
@@ -180,7 +190,8 @@ TEST(carray, pack_unpack_unsigned_char_as_bin)
unsigned char v1[] = { 0, 1 };
msgpack::pack(ss, v1);
msgpack::object_handle oh = msgpack::unpack(ss.str().data(), ss.str().size());
std::string const& str = ss.str();
msgpack::object_handle oh = msgpack::unpack(str.data(), str.size());
EXPECT_EQ(oh.get().type, msgpack::type::BIN);
EXPECT_EQ(oh.get().via.bin.size, static_cast<size_t>(2));
@@ -226,7 +237,8 @@ TEST(carray, pack_unpack_signed_char)
signed char v1[] = { 0, 1 };
msgpack::pack(ss, v1);
msgpack::object_handle oh = msgpack::unpack(ss.str().data(), ss.str().size());
std::string const& str = ss.str();
msgpack::object_handle oh = msgpack::unpack(str.data(), str.size());
EXPECT_EQ(oh.get().type, msgpack::type::ARRAY);
signed char v2[2];

View File

@@ -1,12 +1,16 @@
#include <msgpack.hpp>
#include <fstream>
#if defined(__GNUC__)
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wconversion"
#endif //defined(__GNUC__)
#include <gtest/gtest.h>
#if defined(__GNUC__)
#pragma GCC diagnostic pop
#endif //defined(__GNUC__)
static void feed_file(msgpack::unpacker& pac, const char* path)
{
@@ -26,10 +30,10 @@ static void feed_file(msgpack::unpacker& pac, const char* path)
TEST(cases, format)
{
#if (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 7)) && !defined(__clang__)
#if defined(__GNUC__) && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 7)) && !defined(__clang__)
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wmaybe-uninitialized"
#endif // (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 7)) && !defined(__clang__)
#endif // defined(__GNUC__) && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 7)) && !defined(__clang__)
msgpack::unpacker pac;
msgpack::unpacker pac_compact;
@@ -44,7 +48,7 @@ TEST(cases, format)
}
EXPECT_FALSE( pac_compact.next(oh) );
#if (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 7)) && !defined(__clang__)
#if defined(__GNUC__) && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 7)) && !defined(__clang__)
#pragma GCC diagnostic pop
#endif // (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 7)) && !defined(__clang__)
#endif // defined(__GNUC__) && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 7)) && !defined(__clang__)
}

View File

@@ -1,11 +1,15 @@
#include <msgpack.hpp>
#if defined(__GNUC__)
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wconversion"
#endif //defined(__GNUC__)
#include <gtest/gtest.h>
#if defined(__GNUC__)
#pragma GCC diagnostic pop
#endif //defined(__GNUC__)
class enum_member {
public:
@@ -99,14 +103,14 @@ TEST(convert, return_value_ptr)
int i;
// obsolete
#if (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 2))
#if defined(__GNUC__) && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 2))
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wdeprecated-declarations"
#endif // (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 2))
#endif // defined(__GNUC__) && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 2))
EXPECT_EQ(obj.convert(&i), &i);
#if (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 2))
#if defined(__GNUC__) && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 2))
#pragma GCC diagnostic pop
#endif // (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 2))
#endif // defined(__GNUC__) && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 2))
EXPECT_EQ(1, i);
}

View File

@@ -1,11 +1,15 @@
#include <msgpack.hpp>
#if defined(__GNUC__)
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wconversion"
#endif //defined(__GNUC__)
#include <gtest/gtest.h>
#if defined(__GNUC__)
#pragma GCC diagnostic pop
#endif //defined(__GNUC__)
template <typename T>
void check_size(size_t size) {

View File

@@ -1,11 +1,15 @@
#include <msgpack.h>
#if defined(__GNUC__)
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wconversion"
#endif //defined(__GNUC__)
#include <gtest/gtest.h>
#if defined(__GNUC__)
#pragma GCC diagnostic pop
#endif //defined(__GNUC__)
TEST(fixint, size)
{

View File

@@ -1,9 +1,13 @@
#if defined(__GNUC__)
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wconversion"
#endif //defined(__GNUC__)
#include <gtest/gtest.h>
#if defined(__GNUC__)
#pragma GCC diagnostic pop
#endif //defined(__GNUC__)
#include "../fuzz/unpack_pack_fuzzer.cpp"

View File

@@ -1,11 +1,15 @@
#include <msgpack.hpp>
#if defined(__GNUC__)
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wconversion"
#endif //defined(__GNUC__)
#include <gtest/gtest.h>
#if defined(__GNUC__)
#pragma GCC diagnostic pop
#endif //defined(__GNUC__)
#ifdef HAVE_CONFIG_H
#include "config.h"

View File

@@ -2,12 +2,16 @@
#include <fstream>
#include <sstream>
#if defined(__GNUC__)
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wconversion"
#endif //defined(__GNUC__)
#include <gtest/gtest.h>
#if defined(__GNUC__)
#pragma GCC diagnostic pop
#endif //defined(__GNUC__)
TEST(json, basic_elements)
{

View File

@@ -1,11 +1,15 @@
#include <msgpack.hpp>
#if defined(__GNUC__)
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wconversion"
#endif //defined(__GNUC__)
#include <gtest/gtest.h>
#if defined(__GNUC__)
#pragma GCC diagnostic pop
#endif //defined(__GNUC__)
#include <sstream>
@@ -525,15 +529,15 @@ TEST(limit, unpack_array_over_off_ref_pointer)
bool ref;
std::size_t off = 0;
msgpack::object_handle unp;
#if (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 2))
#if defined(__GNUC__) && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 2))
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wdeprecated-declarations"
#endif // (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 2))
#endif // defined(__GNUC__) && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 2))
msgpack::unpack(&unp, ss.str().c_str(), ss.str().size(), &off, &ref, MSGPACK_NULLPTR, MSGPACK_NULLPTR,
msgpack::unpack_limit(2, 0, 0, 0, 0));
#if (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 2))
#if defined(__GNUC__) && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 2))
#pragma GCC diagnostic pop
#endif // (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 2))
#endif // defined(__GNUC__) && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 2))
EXPECT_TRUE(false);
}
catch(msgpack::array_size_overflow const&) {

View File

@@ -9,12 +9,16 @@
#include <list>
#include <limits>
#if defined(__GNUC__)
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wconversion"
#endif //defined(__GNUC__)
#include <gtest/gtest.h>
#if defined(__GNUC__)
#pragma GCC diagnostic pop
#endif //defined(__GNUC__)
#if defined(_MSC_VER) || defined(__MINGW32__)
#define msgpack_rand() ((double)rand() / RAND_MAX)

View File

@@ -4,12 +4,16 @@
#include <vector>
#include <limits>
#if defined(__GNUC__)
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wconversion"
#endif //defined(__GNUC__)
#include <gtest/gtest.h>
#if defined(__GNUC__)
#pragma GCC diagnostic pop
#endif //defined(__GNUC__)
#if defined(_MSC_VER) || defined(__MINGW32__)
#define msgpack_rand() ((double)rand() / RAND_MAX)
@@ -1368,3 +1372,200 @@ TEST(MSGPACKC, vref_buffer_overflow)
EXPECT_FALSE(msgpack_vrefbuffer_init(&vbuf, ref_size, chunk_size));
EXPECT_EQ(-1, msgpack_vrefbuffer_migrate(&vbuf, &to));
}
TEST(MSGPACKC, object_print_buffer_overflow) {
msgpack_object obj;
obj.type = MSGPACK_OBJECT_NIL;
char buffer[4];
int ret;
ret = msgpack_object_print_buffer(buffer, 1, obj);
EXPECT_EQ(0, ret);
ret = msgpack_object_print_buffer(buffer, 2, obj);
EXPECT_EQ(0, ret);
ret = msgpack_object_print_buffer(buffer, 3, obj);
EXPECT_EQ(0, ret);
ret = msgpack_object_print_buffer(buffer, 4, obj);
EXPECT_EQ(3, ret);
EXPECT_STREQ("nil", buffer);
}
TEST(MSGPACKC, object_bin_print_buffer_overflow) {
msgpack_object obj;
obj.type = MSGPACK_OBJECT_BIN;
obj.via.bin.ptr = "test";
obj.via.bin.size = 4;
char buffer[7];
int ret;
ret = msgpack_object_print_buffer(buffer, 1, obj);
EXPECT_EQ(0, ret);
ret = msgpack_object_print_buffer(buffer, 2, obj);
EXPECT_EQ(0, ret);
ret = msgpack_object_print_buffer(buffer, 3, obj);
EXPECT_EQ(0, ret);
ret = msgpack_object_print_buffer(buffer, 4, obj);
EXPECT_EQ(0, ret);
ret = msgpack_object_print_buffer(buffer, 5, obj);
EXPECT_EQ(0, ret);
ret = msgpack_object_print_buffer(buffer, 6, obj);
EXPECT_EQ(0, ret);
ret = msgpack_object_print_buffer(buffer, 7, obj);
EXPECT_EQ(6, ret);
EXPECT_STREQ("\"test\"", buffer);
}
/* test for vrefbuffer */
#define GEN_TEST_VREFBUFFER_PREPARE(...) \
msgpack_vrefbuffer vbuf; \
msgpack_packer pk; \
const iovec *iov; \
size_t iovcnt, len = 0, i; \
char buf[1024]; \
msgpack_vrefbuffer_init(&vbuf, 0, 0); \
msgpack_packer_init(&pk, &vbuf, msgpack_vrefbuffer_write); \
__VA_ARGS__; \
iov = msgpack_vrefbuffer_vec(&vbuf); \
iovcnt = msgpack_vrefbuffer_veclen(&vbuf); \
for (i = 0; i < iovcnt; i++) { \
memcpy(buf + len, iov[i].iov_base, iov[i].iov_len); \
len += iov[i].iov_len; \
} \
msgpack_vrefbuffer_destroy(&vbuf)
#define GEN_TEST_VREFBUFFER_CHECK(...) \
msgpack_object obj; \
msgpack_unpack_return ret; \
msgpack_zone z; \
msgpack_zone_init(&z, 2048); \
ret = msgpack_unpack(buf, len, NULL, &z, &obj); \
EXPECT_EQ(MSGPACK_UNPACK_SUCCESS, ret); \
__VA_ARGS__; \
msgpack_zone_destroy(&z)
TEST(buffer, vrefbuffer_uint8)
{
GEN_TEST_VREFBUFFER_PREPARE(
msgpack_pack_uint8(&pk, 32));
GEN_TEST_VREFBUFFER_CHECK(
EXPECT_EQ(MSGPACK_OBJECT_POSITIVE_INTEGER, obj.type);
EXPECT_EQ(32U, obj.via.u64));
}
TEST(buffer, vrefbuffer_int8)
{
GEN_TEST_VREFBUFFER_PREPARE(
msgpack_pack_int8(&pk, -32));
GEN_TEST_VREFBUFFER_CHECK(
EXPECT_EQ(MSGPACK_OBJECT_NEGATIVE_INTEGER, obj.type);
EXPECT_EQ(-32, obj.via.i64));
}
TEST(buffer, vrefbuffer_float32)
{
GEN_TEST_VREFBUFFER_PREPARE(
msgpack_pack_float(&pk, 1.0));
GEN_TEST_VREFBUFFER_CHECK(
EXPECT_EQ(MSGPACK_OBJECT_FLOAT32, obj.type);
EXPECT_EQ(1.0, obj.via.f64));
}
TEST(buffer, vrefbuffer_float64)
{
GEN_TEST_VREFBUFFER_PREPARE(
msgpack_pack_double(&pk, 1.0));
GEN_TEST_VREFBUFFER_CHECK(
EXPECT_EQ(MSGPACK_OBJECT_FLOAT64, obj.type);
EXPECT_EQ(1.0, obj.via.f64));
}
TEST(buffer, vrefbuffer_nil)
{
GEN_TEST_VREFBUFFER_PREPARE(
msgpack_pack_nil(&pk));
GEN_TEST_VREFBUFFER_CHECK(
EXPECT_EQ(MSGPACK_OBJECT_NIL, obj.type));
}
TEST(buffer, vrefbuffer_false)
{
GEN_TEST_VREFBUFFER_PREPARE(
msgpack_pack_false(&pk));
GEN_TEST_VREFBUFFER_CHECK(
EXPECT_EQ(MSGPACK_OBJECT_BOOLEAN, obj.type);
EXPECT_FALSE(obj.via.boolean));
}
TEST(buffer, vrefbuffer_true)
{
GEN_TEST_VREFBUFFER_PREPARE(
msgpack_pack_true(&pk));
GEN_TEST_VREFBUFFER_CHECK(
EXPECT_EQ(MSGPACK_OBJECT_BOOLEAN, obj.type);
EXPECT_TRUE(obj.via.boolean));
}
#define TEST_VBUF_RAW_LEN 30U
char test_vbuf_raw[TEST_VBUF_RAW_LEN] = "frsyuki";
TEST(buffer, vrefbuffer_str)
{
GEN_TEST_VREFBUFFER_PREPARE(
msgpack_pack_str(&pk, TEST_VBUF_RAW_LEN);
msgpack_pack_str_body(&pk, test_vbuf_raw, TEST_VBUF_RAW_LEN));
GEN_TEST_VREFBUFFER_CHECK(
EXPECT_EQ(MSGPACK_OBJECT_STR, obj.type);
EXPECT_EQ(TEST_VBUF_RAW_LEN, obj.via.str.size);
EXPECT_EQ(0, memcmp(test_vbuf_raw, obj.via.str.ptr, 30)));
}
TEST(buffer, vrefbuffer_bin)
{
GEN_TEST_VREFBUFFER_PREPARE(
msgpack_pack_bin(&pk, TEST_VBUF_RAW_LEN);
msgpack_pack_bin_body(&pk, test_vbuf_raw, TEST_VBUF_RAW_LEN));
GEN_TEST_VREFBUFFER_CHECK(
EXPECT_EQ(TEST_VBUF_RAW_LEN, obj.via.bin.size);
EXPECT_EQ(0, memcmp(test_vbuf_raw, obj.via.bin.ptr, TEST_VBUF_RAW_LEN)));
}
TEST(buffer, vrefbuffer_ext)
{
GEN_TEST_VREFBUFFER_PREPARE(
msgpack_pack_ext(&pk, TEST_VBUF_RAW_LEN, 127);
msgpack_pack_ext_body(&pk, test_vbuf_raw, TEST_VBUF_RAW_LEN));
GEN_TEST_VREFBUFFER_CHECK(
EXPECT_EQ(MSGPACK_OBJECT_EXT, obj.type);
EXPECT_EQ(TEST_VBUF_RAW_LEN, obj.via.ext.size);
EXPECT_EQ(0, memcmp(test_vbuf_raw, obj.via.ext.ptr, TEST_VBUF_RAW_LEN)));
}
TEST(buffer, vrefbuffer_array)
{
GEN_TEST_VREFBUFFER_PREPARE(
msgpack_pack_array(&pk, 2);
msgpack_pack_int(&pk, 3);
msgpack_pack_int(&pk, 4));
GEN_TEST_VREFBUFFER_CHECK(
EXPECT_EQ(MSGPACK_OBJECT_ARRAY, obj.type);
EXPECT_EQ(2U, obj.via.array.size);
EXPECT_EQ(MSGPACK_OBJECT_POSITIVE_INTEGER, obj.via.array.ptr[0].type);
EXPECT_EQ(3U, obj.via.array.ptr[0].via.u64);
EXPECT_EQ(MSGPACK_OBJECT_POSITIVE_INTEGER, obj.via.array.ptr[1].type);
EXPECT_EQ(4U, obj.via.array.ptr[1].via.u64));
}
TEST(buffer, vrefbuffer_map)
{
GEN_TEST_VREFBUFFER_PREPARE(
msgpack_pack_map(&pk, 1);
msgpack_pack_int(&pk, 2);
msgpack_pack_int(&pk, 3));
GEN_TEST_VREFBUFFER_CHECK(
EXPECT_EQ(MSGPACK_OBJECT_MAP, obj.type);
EXPECT_EQ(1U, obj.via.map.size);
EXPECT_EQ(MSGPACK_OBJECT_POSITIVE_INTEGER, obj.via.map.ptr[0].key.type);
EXPECT_EQ(2U, obj.via.map.ptr[0].key.via.u64);
EXPECT_EQ(MSGPACK_OBJECT_POSITIVE_INTEGER, obj.via.map.ptr[0].val.type);
EXPECT_EQ(3U, obj.via.map.ptr[0].val.via.u64));
}

View File

@@ -12,12 +12,16 @@
#include "test_allocator.hpp"
#if defined(__GNUC__)
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wconversion"
#endif //defined(__GNUC__)
#include <gtest/gtest.h>
#if defined(__GNUC__)
#pragma GCC diagnostic pop
#endif //defined(__GNUC__)
#ifdef HAVE_CONFIG_H
#include "config.h"

View File

@@ -1,11 +1,15 @@
#include <msgpack.hpp>
#if defined(__GNUC__)
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wconversion"
#endif //defined(__GNUC__)
#include <gtest/gtest.h>
#if defined(__GNUC__)
#pragma GCC diagnostic pop
#endif //defined(__GNUC__)
#ifdef HAVE_CONFIG_H
#include "config.h"
@@ -183,7 +187,7 @@ TEST(MSGPACK_CPP11, simple_buffer_array_char)
for (unsigned int k = 0; k < kLoop; k++) {
array<char, kElements> val1;
for (unsigned int i = 0; i < kElements; i++)
val1[i] = rand();
val1[i] = static_cast<char>(rand());
msgpack::sbuffer sbuf;
msgpack::pack(sbuf, val1);
msgpack::object_handle oh =
@@ -214,7 +218,7 @@ TEST(MSGPACK_CPP11, simple_buffer_array_unsigned_char)
for (unsigned int k = 0; k < kLoop; k++) {
array<unsigned char, kElements> val1;
for (unsigned int i = 0; i < kElements; i++)
val1[i] = rand();
val1[i] = static_cast<unsigned char>(rand());
msgpack::sbuffer sbuf;
msgpack::pack(sbuf, val1);
msgpack::object_handle oh =
@@ -883,7 +887,7 @@ TEST(MSGPACK_CHRONO, system_clock_32)
msgpack::sbuffer sbuf;
msgpack::pack(sbuf, val1);
char packed[] = {
static_cast<char>(0xd6),
static_cast<char>(0xd6u),
static_cast<char>(-1),
static_cast<char>(0x12),
static_cast<char>(0x34),
@@ -908,12 +912,12 @@ TEST(MSGPACK_CHRONO, system_clock_32_max)
msgpack::sbuffer sbuf;
msgpack::pack(sbuf, val1);
char packed[] = {
static_cast<char>(0xd6),
static_cast<char>(0xd6u),
static_cast<char>(-1),
static_cast<char>(0xff),
static_cast<char>(0xff),
static_cast<char>(0xff),
static_cast<char>(0xff)
static_cast<char>(0xffu),
static_cast<char>(0xffu),
static_cast<char>(0xffu),
static_cast<char>(0xffu)
};
EXPECT_EQ(memcmp(sbuf.data(), packed, sizeof(packed)), 0);
@@ -959,28 +963,28 @@ TEST(MSGPACK_CHRONO, system_clock_64_max)
msgpack::sbuffer sbuf;
msgpack::pack(sbuf, val1);
char packed_nano[] = {
static_cast<char>(0xd7),
static_cast<char>(0xd7u),
static_cast<char>(-1),
static_cast<char>(0xee), // 999,999,999 << 2
static_cast<char>(0xeeu), // 999,999,999 << 2
static_cast<char>(0x6b),
static_cast<char>(0x27),
static_cast<char>(0xfc),
static_cast<char>(0xff), // 32 bit sec
static_cast<char>(0xff),
static_cast<char>(0xff),
static_cast<char>(0xff)
static_cast<char>(0xfcu),
static_cast<char>(0xffu), // 32 bit sec
static_cast<char>(0xffu),
static_cast<char>(0xffu),
static_cast<char>(0xffu)
};
char packed_micro[] = {
static_cast<char>(0xd7),
static_cast<char>(0xd7u),
static_cast<char>(-1),
static_cast<char>(0xee), // 999,999,000 << 2
static_cast<char>(0xeeu), // 999,999,000 << 2
static_cast<char>(0x6b),
static_cast<char>(0x18),
static_cast<char>(0x60),
static_cast<char>(0xff), // 32 bit sec
static_cast<char>(0xff),
static_cast<char>(0xff),
static_cast<char>(0xff)
static_cast<char>(0xffu), // 32 bit sec
static_cast<char>(0xffu),
static_cast<char>(0xffu),
static_cast<char>(0xffu)
};
if (std::chrono::system_clock::duration::period::ratio::den == 1000000000) {
EXPECT_EQ(memcmp(sbuf.data(), packed_nano, sizeof(packed_nano)), 0);
@@ -1055,10 +1059,11 @@ TEST(MSGPACK_TIMESPEC, timespec_pack_convert_zero)
timespec val1{ 0, 0 };
msgpack::pack(ss, val1);
EXPECT_EQ(ss.str().data()[0], static_cast<char>(0xd6));
std::string const& str = ss.str();
EXPECT_EQ(str.data()[0], static_cast<char>(0xd6u));
msgpack::object_handle oh;
msgpack::unpack(oh, ss.str().data(), ss.str().size());
msgpack::unpack(oh, str.data(), str.size());
timespec val2 = oh.get().as<timespec>();
EXPECT_EQ(val1.tv_sec, val2.tv_sec);
EXPECT_EQ(val1.tv_nsec, val2.tv_nsec);
@@ -1077,13 +1082,14 @@ TEST(MSGPACK_TIMESPEC, timespec_object_with_zone_zero)
TEST(MSGPACK_TIMESPEC, timespec_pack_convert_32bit_sec)
{
std::stringstream ss;
timespec val1{ 0xffffffffUL, 0 };
timespec val1{ std::numeric_limits<decltype(std::declval<timespec>().tv_sec)>::is_signed ? INT32_MAX : UINT32_MAX, 0 };
msgpack::pack(ss, val1);
EXPECT_EQ(ss.str().data()[0], static_cast<char>(0xd6));
std::string const& str = ss.str();
EXPECT_EQ(str.data()[0], static_cast<char>(0xd6u));
msgpack::object_handle oh;
msgpack::unpack(oh, ss.str().data(), ss.str().size());
msgpack::unpack(oh, str.data(), str.size());
timespec val2 = oh.get().as<timespec>();
EXPECT_EQ(val1.tv_sec, val2.tv_sec);
EXPECT_EQ(val1.tv_nsec, val2.tv_nsec);
@@ -1092,7 +1098,7 @@ TEST(MSGPACK_TIMESPEC, timespec_pack_convert_32bit_sec)
TEST(MSGPACK_TIMESPEC, timespec_object_with_zone_32bit_sec)
{
msgpack::zone z;
timespec val1{ 0xffffffffUL, 0 };
timespec val1{ std::numeric_limits<decltype(std::declval<timespec>().tv_sec)>::is_signed ? INT32_MAX : UINT32_MAX, 0 };
msgpack::object obj(val1, z);
timespec val2 = obj.as<timespec>();
EXPECT_EQ(val1.tv_sec, val2.tv_sec);
@@ -1105,9 +1111,10 @@ TEST(MSGPACK_TIMESPEC, timespec_pack_convert_max_nano)
timespec val1{ 0, 999999999 };
msgpack::pack(ss, val1);
EXPECT_EQ(ss.str().data()[0], static_cast<char>(0xd7));
std::string const& str = ss.str();
EXPECT_EQ(str.data()[0], static_cast<char>(0xd7u));
msgpack::object_handle oh;
msgpack::unpack(oh, ss.str().data(), ss.str().size());
msgpack::unpack(oh, str.data(), str.size());
timespec val2 = oh.get().as<timespec>();
EXPECT_EQ(val1.tv_sec, val2.tv_sec);
EXPECT_EQ(val1.tv_nsec, val2.tv_nsec);
@@ -1130,10 +1137,11 @@ TEST(MSGPACK_TIMESPEC, timespec_pack_convert_34bit_sec_max_nano)
timespec val1{ static_cast<decltype(std::declval<timespec>().tv_sec)>(0x3ffffffffULL), 999999999 };
msgpack::pack(ss, val1);
EXPECT_EQ(ss.str().data()[0], static_cast<char>(0xd7));
std::string const& str = ss.str();
EXPECT_EQ(str.data()[0], static_cast<char>(0xd7u));
msgpack::object_handle oh;
msgpack::unpack(oh, ss.str().data(), ss.str().size());
msgpack::unpack(oh, str.data(), str.size());
timespec val2 = oh.get().as<timespec>();
EXPECT_EQ(val1.tv_sec, val2.tv_sec);
EXPECT_EQ(val1.tv_nsec, val2.tv_nsec);
@@ -1157,10 +1165,11 @@ TEST(MSGPACK_TIMESPEC, timespec_pack_convert_35bit_sec_max_nano)
timespec val1{ static_cast<decltype(std::declval<timespec>().tv_sec)>(0x7ffffffffULL), 999999999 };
msgpack::pack(ss, val1);
EXPECT_EQ(ss.str().data()[0], static_cast<char>(0xc7));
std::string const& str = ss.str();
EXPECT_EQ(str.data()[0], static_cast<char>(0xc7u));
msgpack::object_handle oh;
msgpack::unpack(oh, ss.str().data(), ss.str().size());
msgpack::unpack(oh, str.data(), str.size());
timespec val2 = oh.get().as<timespec>();
EXPECT_EQ(val1.tv_sec, val2.tv_sec);
EXPECT_EQ(val1.tv_nsec, val2.tv_nsec);
@@ -1179,14 +1188,16 @@ TEST(MSGPACK_TIMESPEC, timespec_object_with_zone_35bit_sec_max_nano)
TEST(MSGPACK_TIMESPEC, timespec_pack_convert_64bit_sec_max_nano)
{
if (sizeof(decltype(std::declval<timespec>().tv_sec)) <= 4) return;
std::stringstream ss;
timespec val1{ std::numeric_limits<decltype(std::declval<timespec>().tv_sec)>::max(), 999999999 };
msgpack::pack(ss, val1);
EXPECT_EQ(ss.str().data()[0], static_cast<char>(0xc7));
std::string const& str = ss.str();
EXPECT_EQ(str.data()[0], static_cast<char>(0xc7u));
msgpack::object_handle oh;
msgpack::unpack(oh, ss.str().data(), ss.str().size());
msgpack::unpack(oh, str.data(), str.size());
timespec val2 = oh.get().as<timespec>();
EXPECT_EQ(val1.tv_sec, val2.tv_sec);
EXPECT_EQ(val1.tv_nsec, val2.tv_nsec);

View File

@@ -1,11 +1,15 @@
#include <msgpack.hpp>
#if defined(__GNUC__)
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wconversion"
#endif //defined(__GNUC__)
#include <gtest/gtest.h>
#if defined(__GNUC__)
#pragma GCC diagnostic pop
#endif //defined(__GNUC__)
#ifdef HAVE_CONFIG_H
#include "config.h"
@@ -27,8 +31,9 @@ TEST(MSGPACK_CPP17, optional_pack_convert_nil)
std::stringstream ss;
std::optional<int> val1;
msgpack::pack(ss, val1);
std::string const& str = ss.str();
msgpack::object_handle oh =
msgpack::unpack(ss.str().data(), ss.str().size());
msgpack::unpack(str.data(), str.size());
std::optional<int> val2 = oh.get().as<std::optional<int> >();
EXPECT_TRUE(val1 == val2);
}
@@ -38,8 +43,9 @@ TEST(MSGPACK_CPP17, optional_pack_convert_int)
std::stringstream ss;
std::optional<int> val1 = 1;
msgpack::pack(ss, val1);
std::string const& str = ss.str();
msgpack::object_handle oh =
msgpack::unpack(ss.str().data(), ss.str().size());
msgpack::unpack(str.data(), str.size());
std::optional<int> val2 = oh.get().as<std::optional<int> >();
EXPECT_TRUE(val1 == val2);
}
@@ -55,8 +61,9 @@ TEST(MSGPACK_CPP17, optional_pack_convert_vector)
v.push_back(3);
val1 = v;
msgpack::pack(ss, val1);
std::string const& str = ss.str();
msgpack::object_handle oh =
msgpack::unpack(ss.str().data(), ss.str().size());
msgpack::unpack(str.data(), str.size());
ovi_t val2 = oh.get().as<ovi_t>();
EXPECT_TRUE(val1 == val2);
}
@@ -70,8 +77,9 @@ TEST(MSGPACK_CPP17, optional_pack_convert_vector_optional)
val1[0] = 1;
val1[2] = 3;
msgpack::pack(ss, val1);
std::string const& str = ss.str();
msgpack::object_handle oh =
msgpack::unpack(ss.str().data(), ss.str().size());
msgpack::unpack(str.data(), str.size());
voi_t val2 = oh.get().as<voi_t>();
EXPECT_TRUE(val1 == val2);
}
@@ -177,8 +185,9 @@ TEST(MSGPACK_CPP17, optional_pack_convert_no_def_con)
std::stringstream ss;
std::optional<no_def_con> val1 = no_def_con(1);
msgpack::pack(ss, val1);
std::string const& str = ss.str();
msgpack::object_handle oh =
msgpack::unpack(ss.str().data(), ss.str().size());
msgpack::unpack(str.data(), str.size());
std::optional<no_def_con> val2 = oh.get().as<std::optional<no_def_con>>();
EXPECT_TRUE(val1 == val2);
}
@@ -195,8 +204,9 @@ TEST(MSGPACK_CPP17, string_view_pack_convert)
msgpack::pack(ss, val1);
std::string const& str = ss.str();
msgpack::object_handle oh;
msgpack::unpack(oh, ss.str().data(), ss.str().size());
msgpack::unpack(oh, str.data(), str.size());
std::string_view val2 = oh.get().as<std::string_view>();
EXPECT_TRUE(val1 == val2);
}
@@ -230,7 +240,8 @@ TEST(MSGPACK_CPP17, byte_pack_convert)
msgpack::pack(ss, val1);
msgpack::object_handle oh;
msgpack::unpack(oh, ss.str().data(), ss.str().size());
std::string const& str = ss.str();
msgpack::unpack(oh, str.data(), str.size());
std::byte val2 = oh.get().as<std::byte>();
EXPECT_EQ(val1, val2);
}
@@ -263,11 +274,13 @@ TEST(MSGPACK_CPP17, vector_byte_pack_convert)
char packed[] = { char(0xc4), char(0x05), char(0x01), char(0x02), char(0x7f), char(0x80), char(0xff) };
for (size_t i = 0; i != sizeof(packed); ++i) {
EXPECT_EQ(ss.str()[i], packed[i]);
std::string const& str = ss.str();
EXPECT_EQ(str[i], packed[i]);
}
msgpack::object_handle oh;
msgpack::unpack(oh, ss.str().data(), ss.str().size());
std::string const& str = ss.str();
msgpack::unpack(oh, str.data(), str.size());
std::vector<std::byte> val2 = oh.get().as<std::vector<std::byte>>();
EXPECT_EQ(val1, val2);
}
@@ -308,11 +321,13 @@ TEST(MSGPACK_CPP17, carray_byte_pack_convert)
char packed[] = { char(0xc4), char(0x05), char(0x01), char(0x02), char(0x7f), char(0x80), char(0xff) };
for (size_t i = 0; i != sizeof(packed); ++i) {
EXPECT_EQ(ss.str()[i], packed[i]);
std::string const& str = ss.str();
EXPECT_EQ(str[i], packed[i]);
}
msgpack::object_handle oh;
msgpack::unpack(oh, ss.str().data(), ss.str().size());
std::string const& str = ss.str();
msgpack::unpack(oh, str.data(), str.size());
std::byte val2[sizeof(val1)];
oh.get().convert(val2);
for (size_t i = 0; i != sizeof(val1); ++i) {

View File

@@ -9,12 +9,16 @@
#include <list>
#include <limits>
#if defined(__GNUC__)
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wconversion"
#endif //defined(__GNUC__)
#include <gtest/gtest.h>
#if defined(__GNUC__)
#pragma GCC diagnostic pop
#endif //defined(__GNUC__)
#ifdef HAVE_CONFIG_H
#include "config.h"

View File

@@ -1,12 +1,15 @@
#include <msgpack.hpp>
#if defined(__GNUC__)
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wconversion"
#endif //defined(__GNUC__)
#include <gtest/gtest.h>
#if defined(__GNUC__)
#pragma GCC diagnostic pop
#endif //defined(__GNUC__)
TEST(msgpack_tuple, member_get)
{

View File

@@ -9,12 +9,16 @@
#include <list>
#include <limits>
#if defined(__GNUC__)
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wconversion"
#endif //defined(__GNUC__)
#include <gtest/gtest.h>
#if defined(__GNUC__)
#pragma GCC diagnostic pop
#endif //defined(__GNUC__)
#ifdef HAVE_CONFIG_H
#include "config.h"

View File

@@ -4,12 +4,16 @@
#include <limits>
#include <cmath>
#if defined(__GNUC__)
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wconversion"
#endif //defined(__GNUC__)
#include <gtest/gtest.h>
#if defined(__GNUC__)
#pragma GCC diagnostic pop
#endif //defined(__GNUC__)
// To avoid link error
TEST(MSGPACK_X3_PARSE, dummy)

View File

@@ -1,12 +1,15 @@
#include <msgpack.hpp>
#if defined(__GNUC__)
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wconversion"
#endif //defined(__GNUC__)
#include <gtest/gtest.h>
#if defined(__GNUC__)
#pragma GCC diagnostic pop
#endif //defined(__GNUC__)
enum enum_test {
elem

View File

@@ -1,11 +1,15 @@
#include <msgpack.hpp>
#if defined(__GNUC__)
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wconversion"
#endif //defined(__GNUC__)
#include <gtest/gtest.h>
#if defined(__GNUC__)
#pragma GCC diagnostic pop
#endif //defined(__GNUC__)
#include <cmath>
@@ -769,14 +773,14 @@ TEST(object_with_zone, user_defined_non_virtual)
msgpack::zone z;
msgpack::object obj(b, z);
#if (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 7)) && !defined(__clang__)
#if defined(__GNUC__) && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 7)) && !defined(__clang__)
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wmaybe-uninitialized"
#endif // (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 7)) && !defined(__clang__)
#endif // defined(__GNUC__) && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 7)) && !defined(__clang__)
bottom br = obj.as<bottom>();
#if (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 7)) && !defined(__clang__)
#if defined(__GNUC__) && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 7)) && !defined(__clang__)
#pragma GCC diagnostic pop
#endif // (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 7)) && !defined(__clang__)
#endif // defined(__GNUC__) && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 7)) && !defined(__clang__)
EXPECT_EQ(b.b, br.b);
EXPECT_EQ(b.m1, br.m1);
EXPECT_EQ(b.m2, br.m2);
@@ -814,14 +818,14 @@ TEST(object_with_zone, user_defined_virtual)
msgpack::zone z;
msgpack::object obj(b, z);
#if (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 7)) && !defined(__clang__)
#if defined(__GNUC__) && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 7)) && !defined(__clang__)
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wmaybe-uninitialized"
#endif // (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 7)) && !defined(__clang__)
#endif // defined(__GNUC__) && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 7)) && !defined(__clang__)
v_bottom br = obj.as<v_bottom>();
#if (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 7)) && !defined(__clang__)
#if defined(__GNUC__) && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 7)) && !defined(__clang__)
#pragma GCC diagnostic pop
#endif // (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 7)) && !defined(__clang__)
#endif // defined(__GNUC__) && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 7)) && !defined(__clang__)
EXPECT_EQ(b.b, br.b);
EXPECT_EQ(b.m1, br.m1);
EXPECT_EQ(b.m2, br.m2);

View File

@@ -1,11 +1,15 @@
#include <msgpack.hpp>
#if defined(__GNUC__)
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wconversion"
#endif //defined(__GNUC__)
#include <gtest/gtest.h>
#if defined(__GNUC__)
#pragma GCC diagnostic pop
#endif //defined(__GNUC__)
#include <sstream>
@@ -163,14 +167,14 @@ TEST(unpack, int_pointer_off_no_ref)
std::size_t off = 0;
// obsolete
#if (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 2))
#if defined(__GNUC__) && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 2))
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wdeprecated-declarations"
#endif // (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 2))
#endif // defined(__GNUC__) && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 2))
msgpack::unpack(&oh, sbuf.data(), sbuf.size(), &off);
#if (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 2))
#if defined(__GNUC__) && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 2))
#pragma GCC diagnostic pop
#endif // (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 2))
#endif // defined(__GNUC__) && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 2))
EXPECT_EQ(1, oh.get().as<int>());
EXPECT_EQ(off, sbuf.size());
}
@@ -184,14 +188,14 @@ TEST(unpack, int_pointer_off_no_ref_explicit)
std::size_t off = 0;
// obsolete
#if (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 2))
#if defined(__GNUC__) && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 2))
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wdeprecated-declarations"
#endif // (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 2))
#endif // defined(__GNUC__) && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 2))
msgpack::unpack(&oh, sbuf.data(), sbuf.size(), &off, MSGPACK_NULLPTR);
#if (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 2))
#if defined(__GNUC__) && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 2))
#pragma GCC diagnostic pop
#endif // (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 2))
#endif // defined(__GNUC__) && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 2))
EXPECT_EQ(1, oh.get().as<int>());
EXPECT_EQ(off, sbuf.size());
}
@@ -204,14 +208,14 @@ TEST(unpack, int_pointer_no_off_ref)
bool referenced;
// obsolete
#if (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 2))
#if defined(__GNUC__) && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 2))
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wdeprecated-declarations"
#endif // (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 2))
#endif // defined(__GNUC__) && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 2))
msgpack::unpack(&oh, sbuf.data(), sbuf.size(), MSGPACK_NULLPTR, &referenced);
#if (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 2))
#if defined(__GNUC__) && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 2))
#pragma GCC diagnostic pop
#endif // (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 2))
#endif // defined(__GNUC__) && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 2))
EXPECT_EQ(1, oh.get().as<int>());
EXPECT_FALSE(referenced);
}
@@ -225,14 +229,14 @@ TEST(unpack, int_pointer_off_ref)
std::size_t off = 0;
// obsolete
#if (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 2))
#if defined(__GNUC__) && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 2))
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wdeprecated-declarations"
#endif // (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 2))
#endif // defined(__GNUC__) && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 2))
msgpack::unpack(&oh, sbuf.data(), sbuf.size(), &off, &referenced);
#if (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 2))
#if defined(__GNUC__) && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 2))
#pragma GCC diagnostic pop
#endif // (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 2))
#endif // defined(__GNUC__) && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 2))
EXPECT_EQ(1, oh.get().as<int>());
EXPECT_EQ(off, sbuf.size());
EXPECT_FALSE(referenced);
@@ -246,14 +250,14 @@ TEST(unpack, int_default_null_pointer)
msgpack::object_handle oh;
// obsolete
#if (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 2))
#if defined(__GNUC__) && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 2))
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wdeprecated-declarations"
#endif // (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 2))
#endif // defined(__GNUC__) && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 2))
msgpack::unpack(&oh, sbuf.data(), sbuf.size());
#if (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 2))
#if defined(__GNUC__) && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 2))
#pragma GCC diagnostic pop
#endif // (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 2))
#endif // defined(__GNUC__) && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 2))
EXPECT_EQ(1, oh.get().as<int>());
}
@@ -524,7 +528,7 @@ TEST(unpack, int_off_larger_than_length)
TEST(unpack, empty_array_fix)
{
std::string buf;
buf.push_back(static_cast<char>(0x90));
buf.push_back(static_cast<char>(0x90u));
std::size_t off = 0;
msgpack::object_handle oh = msgpack::unpack(buf.data(), buf.size(), off);
@@ -536,7 +540,7 @@ TEST(unpack, empty_array_fix)
TEST(unpack, empty_array_16)
{
std::string buf;
buf.push_back(static_cast<char>(0xdc));
buf.push_back(static_cast<char>(0xdcu));
buf.push_back(static_cast<char>(0x00));
buf.push_back(static_cast<char>(0x00));
std::size_t off = 0;
@@ -550,7 +554,7 @@ TEST(unpack, empty_array_16)
TEST(unpack, empty_array_32)
{
std::string buf;
buf.push_back(static_cast<char>(0xdd));
buf.push_back(static_cast<char>(0xddu));
buf.push_back(static_cast<char>(0x00));
buf.push_back(static_cast<char>(0x00));
buf.push_back(static_cast<char>(0x00));
@@ -566,7 +570,7 @@ TEST(unpack, empty_array_32)
TEST(unpack, empty_map_fix)
{
std::string buf;
buf.push_back(static_cast<char>(0x80));
buf.push_back(static_cast<char>(0x80u));
std::size_t off = 0;
msgpack::object_handle oh = msgpack::unpack(buf.data(), buf.size(), off);
@@ -578,7 +582,7 @@ TEST(unpack, empty_map_fix)
TEST(unpack, empty_map_16)
{
std::string buf;
buf.push_back(static_cast<char>(0xde));
buf.push_back(static_cast<char>(0xdeu));
buf.push_back(static_cast<char>(0x00));
buf.push_back(static_cast<char>(0x00));
std::size_t off = 0;
@@ -592,7 +596,7 @@ TEST(unpack, empty_map_16)
TEST(unpack, empty_map_32)
{
std::string buf;
buf.push_back(static_cast<char>(0xdf));
buf.push_back(static_cast<char>(0xdfu));
buf.push_back(static_cast<char>(0x00));
buf.push_back(static_cast<char>(0x00));
buf.push_back(static_cast<char>(0x00));

View File

@@ -1,11 +1,15 @@
#include <msgpack.h>
#if defined(__GNUC__)
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wconversion"
#endif //defined(__GNUC__)
#include <gtest/gtest.h>
#if defined(__GNUC__)
#pragma GCC diagnostic pop
#endif //defined(__GNUC__)
#include <stdio.h>

View File

@@ -3,12 +3,16 @@
#include <string>
#include <sstream>
#if defined(__GNUC__)
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wconversion"
#endif //defined(__GNUC__)
#include <gtest/gtest.h>
#if defined(__GNUC__)
#pragma GCC diagnostic pop
#endif //defined(__GNUC__)
#ifdef HAVE_CONFIG_H
#include "config.h"
@@ -29,7 +33,7 @@ TEST(MSGPACK_RAW_REF, pack_unpack)
EXPECT_EQ(packed_str[4], 'C');
msgpack::object_handle oh =
msgpack::unpack(ss.str().data(), ss.str().size());
msgpack::unpack(packed_str.data(), packed_str.size());
msgpack::type::raw_ref rr2 = oh.get().as<msgpack::type::raw_ref>();
EXPECT_TRUE(rr1 == rr2);
}
@@ -46,7 +50,7 @@ TEST(MSGPACK_RAW_REF, pack_unpack_8_l)
EXPECT_EQ(packed_str[1], static_cast<char>(0x00u));
msgpack::object_handle oh =
msgpack::unpack(ss.str().data(), ss.str().size());
msgpack::unpack(packed_str.data(), packed_str.size());
msgpack::type::raw_ref rr2 = oh.get().as<msgpack::type::raw_ref>();
EXPECT_TRUE(rr1 == rr2);
}
@@ -64,7 +68,7 @@ TEST(MSGPACK_RAW_REF, pack_unpack_8_h)
EXPECT_EQ(packed_str[2], 'A');
msgpack::object_handle oh =
msgpack::unpack(ss.str().data(), ss.str().size());
msgpack::unpack(packed_str.data(), packed_str.size());
msgpack::type::raw_ref rr2 = oh.get().as<msgpack::type::raw_ref>();
EXPECT_TRUE(rr1 == rr2);
}
@@ -83,7 +87,7 @@ TEST(MSGPACK_RAW_REF, pack_unpack_16_l)
EXPECT_EQ(packed_str[3], 'A');
msgpack::object_handle oh =
msgpack::unpack(ss.str().data(), ss.str().size());
msgpack::unpack(packed_str.data(), packed_str.size());
msgpack::type::raw_ref rr2 = oh.get().as<msgpack::type::raw_ref>();
EXPECT_TRUE(rr1 == rr2);
}
@@ -102,7 +106,7 @@ TEST(MSGPACK_RAW_REF, pack_unpack_16_h)
EXPECT_EQ(packed_str[3], 'A');
msgpack::object_handle oh =
msgpack::unpack(ss.str().data(), ss.str().size());
msgpack::unpack(packed_str.data(), packed_str.size());
msgpack::type::raw_ref rr2 = oh.get().as<msgpack::type::raw_ref>();
EXPECT_TRUE(rr1 == rr2);
}
@@ -123,7 +127,7 @@ TEST(MSGPACK_RAW_REF, pack_unpack_32_l)
EXPECT_EQ(packed_str[5], 'A');
msgpack::object_handle oh =
msgpack::unpack(ss.str().data(), ss.str().size());
msgpack::unpack(packed_str.data(), packed_str.size());
msgpack::type::raw_ref rr2 = oh.get().as<msgpack::type::raw_ref>();
EXPECT_TRUE(rr1 == rr2);
}
@@ -142,7 +146,7 @@ TEST(MSGPACK_V4RAW_REF, pack_unpack)
EXPECT_EQ(packed_str[3], 'C');
msgpack::object_handle oh =
msgpack::unpack(ss.str().data(), ss.str().size());
msgpack::unpack(packed_str.data(), packed_str.size());
msgpack::type::v4raw_ref rr2 = oh.get().as<msgpack::type::v4raw_ref>();
EXPECT_TRUE(rr1 == rr2);
}
@@ -158,7 +162,7 @@ TEST(MSGPACK_V4RAW_REF, pack_unpack_fix_l)
EXPECT_EQ(packed_str[0], static_cast<char>(0xa0u));
msgpack::object_handle oh =
msgpack::unpack(ss.str().data(), ss.str().size());
msgpack::unpack(packed_str.data(), packed_str.size());
msgpack::type::v4raw_ref rr2 = oh.get().as<msgpack::type::v4raw_ref>();
EXPECT_TRUE(rr1 == rr2);
}
@@ -175,7 +179,7 @@ TEST(MSGPACK_V4RAW_REF, pack_unpack_fix_h)
EXPECT_EQ(packed_str[1], 'A');
msgpack::object_handle oh =
msgpack::unpack(ss.str().data(), ss.str().size());
msgpack::unpack(packed_str.data(), packed_str.size());
msgpack::type::v4raw_ref rr2 = oh.get().as<msgpack::type::v4raw_ref>();
EXPECT_TRUE(rr1 == rr2);
}
@@ -194,7 +198,7 @@ TEST(MSGPACK_V4RAW_REF, pack_unpack_16_l)
EXPECT_EQ(packed_str[3], 'A');
msgpack::object_handle oh =
msgpack::unpack(ss.str().data(), ss.str().size());
msgpack::unpack(packed_str.data(), packed_str.size());
msgpack::type::v4raw_ref rr2 = oh.get().as<msgpack::type::v4raw_ref>();
EXPECT_TRUE(rr1 == rr2);
}
@@ -213,7 +217,7 @@ TEST(MSGPACK_V4RAW_REF, pack_unpack_16_h)
EXPECT_EQ(packed_str[3], 'A');
msgpack::object_handle oh =
msgpack::unpack(ss.str().data(), ss.str().size());
msgpack::unpack(packed_str.data(), packed_str.size());
msgpack::type::v4raw_ref rr2 = oh.get().as<msgpack::type::v4raw_ref>();
EXPECT_TRUE(rr1 == rr2);
}
@@ -234,7 +238,7 @@ TEST(MSGPACK_V4RAW_REF, pack_unpack_32_l)
EXPECT_EQ(packed_str[5], 'A');
msgpack::object_handle oh =
msgpack::unpack(ss.str().data(), ss.str().size());
msgpack::unpack(packed_str.data(), packed_str.size());
msgpack::type::v4raw_ref rr2 = oh.get().as<msgpack::type::v4raw_ref>();
EXPECT_TRUE(rr1 == rr2);
}

View File

@@ -1,11 +1,15 @@
#include <msgpack.hpp>
#if defined(__GNUC__)
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wconversion"
#endif //defined(__GNUC__)
#include <gtest/gtest.h>
#if defined(__GNUC__)
#pragma GCC diagnostic pop
#endif //defined(__GNUC__)
TEST(reference, unpack_int)
{

View File

@@ -1,11 +1,15 @@
#include <msgpack.hpp>
#if defined(__GNUC__)
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wconversion"
#endif //defined(__GNUC__)
#include <gtest/gtest.h>
#if defined(__GNUC__)
#pragma GCC diagnostic pop
#endif //defined(__GNUC__)
#if !defined(MSGPACK_USE_CPP03)

View File

@@ -1,12 +1,16 @@
#include <msgpack.hpp>
#include <sstream>
#if defined(__GNUC__)
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wconversion"
#endif //defined(__GNUC__)
#include <gtest/gtest.h>
#if defined(__GNUC__)
#pragma GCC diagnostic pop
#endif //defined(__GNUC__)
#ifdef HAVE_CONFIG_H
#include "config.h"
@@ -20,7 +24,8 @@ TEST(MSGPACK_REFERENCE_WRAPPER, pack_convert)
std::reference_wrapper<int> val1(i1);
std::stringstream ss;
msgpack::pack(ss, val1);
msgpack::object_handle oh = msgpack::unpack(ss.str().data(), ss.str().size());
std::string const& str = ss.str();
msgpack::object_handle oh = msgpack::unpack(str.data(), str.size());
int i2 = 0;
std::reference_wrapper<int> val2(i2);
oh.get().convert(val2);
@@ -33,7 +38,8 @@ TEST(MSGPACK_REFERENCE_WRAPPER, pack_convert_const)
std::reference_wrapper<const int> val1(i1);
std::stringstream ss;
msgpack::pack(ss, val1);
msgpack::object_handle oh = msgpack::unpack(ss.str().data(), ss.str().size());
std::string const& str = ss.str();
msgpack::object_handle oh = msgpack::unpack(str.data(), str.size());
int i2 = 0;
std::reference_wrapper<int> val2(i2);
oh.get().convert(val2);
@@ -46,7 +52,8 @@ TEST(MSGPACK_REFERENCE_WRAPPER, pack_vector)
std::vector<std::reference_wrapper<int>> val1{i1};
std::stringstream ss;
msgpack::pack(ss, val1);
msgpack::object_handle oh = msgpack::unpack(ss.str().data(), ss.str().size());
std::string const& str = ss.str();
msgpack::object_handle oh = msgpack::unpack(str.data(), str.size());
std::vector<int> val2 = oh.get().as<std::vector<int>>();
EXPECT_EQ(val2.size(), static_cast<size_t>(1));
EXPECT_EQ(val1[0], val2[0]);

View File

@@ -2,12 +2,16 @@
#include <sstream>
#include <iterator>
#if defined(__GNUC__)
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wconversion"
#endif //defined(__GNUC__)
#include <gtest/gtest.h>
#if defined(__GNUC__)
#pragma GCC diagnostic pop
#endif //defined(__GNUC__)
#ifdef HAVE_CONFIG_H
#include "config.h"
@@ -20,8 +24,9 @@ TEST(SHARED_PTR, pack_convert_nil)
std::stringstream ss;
std::shared_ptr<int> val1;
msgpack::pack(ss, val1);
std::string const& str = ss.str();
msgpack::object_handle oh =
msgpack::unpack(ss.str().data(), ss.str().size());
msgpack::unpack(str.data(), str.size());
std::shared_ptr<int> val2 = oh.get().as<std::shared_ptr<int>>();
EXPECT_TRUE(val1 == val2);
}
@@ -31,8 +36,9 @@ TEST(SHARED_PTR, pack_convert_int)
std::stringstream ss;
std::shared_ptr<int> val1(new int(1));
msgpack::pack(ss, val1);
std::string const& str = ss.str();
msgpack::object_handle oh =
msgpack::unpack(ss.str().data(), ss.str().size());
msgpack::unpack(str.data(), str.size());
std::shared_ptr<int> val2 = oh.get().as<std::shared_ptr<int>>();
EXPECT_TRUE(*val1 == *val2);
}
@@ -119,8 +125,9 @@ TEST(SHARED_PTR, pack_convert_nil_no_def_con)
std::stringstream ss;
std::shared_ptr<no_def_con> val1(new no_def_con(1));
msgpack::pack(ss, val1);
std::string const& str = ss.str();
msgpack::object_handle oh =
msgpack::unpack(ss.str().data(), ss.str().size());
msgpack::unpack(str.data(), str.size());
std::shared_ptr<no_def_con> val2 = oh.get().as<std::shared_ptr<no_def_con>>();
EXPECT_TRUE(*val1 == *val2);
}

View File

@@ -1,12 +1,16 @@
#include <sstream>
#include <msgpack.hpp>
#if defined(__GNUC__)
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wconversion"
#endif //defined(__GNUC__)
#include <gtest/gtest.h>
#if defined(__GNUC__)
#pragma GCC diagnostic pop
#endif //defined(__GNUC__)
TEST(size_equal_only, array)
{
@@ -15,7 +19,8 @@ TEST(size_equal_only, array)
msgpack::type::size_equal_only<int[3]> seo(buf);
msgpack::pack(ss, seo);
msgpack::object_handle oh = msgpack::unpack(ss.str().data(), ss.str().size());
std::string const& str = ss.str();
msgpack::object_handle oh = msgpack::unpack(str.data(), str.size());
int ret_buf1[3];
oh.get().convert(ret_buf1);
@@ -58,7 +63,8 @@ TEST(size_equal_only, vector)
msgpack::type::size_equal_only<std::vector<int> > seo(buf);
msgpack::pack(ss, seo);
msgpack::object_handle oh = msgpack::unpack(ss.str().data(), ss.str().size());
std::string const& str = ss.str();
msgpack::object_handle oh = msgpack::unpack(str.data(), str.size());
std::vector<int> ret_buf1;
oh.get().convert(ret_buf1);
@@ -91,7 +97,8 @@ TEST(size_equal_only, msgpack_tuple)
msgpack::type::size_equal_only<msgpack::type::tuple<int, bool, std::string> > seo(buf);
msgpack::pack(ss, seo);
msgpack::object_handle oh = msgpack::unpack(ss.str().data(), ss.str().size());
std::string const& str = ss.str();
msgpack::object_handle oh = msgpack::unpack(str.data(), str.size());
msgpack::type::tuple<int, bool, std::string> ret_buf1;
oh.get().convert(ret_buf1);
@@ -148,7 +155,8 @@ TEST(size_equal_only, tuple)
auto seo = msgpack::type::make_size_equal_only(buf);
msgpack::pack(ss, seo);
msgpack::object_handle oh = msgpack::unpack(ss.str().data(), ss.str().size());
std::string const& str = ss.str();
msgpack::object_handle oh = msgpack::unpack(str.data(), str.size());
std::tuple<int, bool, std::string> ret_buf1;
oh.get().convert(ret_buf1);
@@ -210,7 +218,8 @@ TEST(size_equal_only, custom_class)
std::stringstream ss;
foo1 f1(42, true);
msgpack::pack(ss, f1);
msgpack::object_handle oh = msgpack::unpack(ss.str().data(), ss.str().size());
std::string const& str = ss.str();
msgpack::object_handle oh = msgpack::unpack(str.data(), str.size());
foo2 f2(123, false, "ABC");
try {

View File

@@ -1,11 +1,15 @@
#include <msgpack.hpp>
#if defined(__GNUC__)
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wconversion"
#endif //defined(__GNUC__)
#include <gtest/gtest.h>
#if defined(__GNUC__)
#pragma GCC diagnostic pop
#endif //defined(__GNUC__)
#include <sstream>
@@ -85,14 +89,14 @@ TEST(streaming, basic_pointer)
pac.buffer_consumed(len);
#if (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 2))
#if defined(__GNUC__) && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 2))
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wdeprecated-declarations"
#endif // (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 2))
#endif // defined(__GNUC__) && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 2))
while(pac.next(&oh)) {
#if (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 2))
#if defined(__GNUC__) && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 2))
#pragma GCC diagnostic pop
#endif // (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 2))
#endif // defined(__GNUC__) && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 2))
msgpack::object obj = oh.get();
switch(count++) {
case 0:

View File

@@ -1,11 +1,15 @@
#include <msgpack.h>
#if defined(__GNUC__)
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wconversion"
#endif //defined(__GNUC__)
#include <gtest/gtest.h>
#if defined(__GNUC__)
#pragma GCC diagnostic pop
#endif //defined(__GNUC__)
#include <stdio.h>

View File

@@ -2,12 +2,16 @@
#include <sstream>
#include <iterator>
#if defined(__GNUC__)
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wconversion"
#endif //defined(__GNUC__)
#include <gtest/gtest.h>
#if defined(__GNUC__)
#pragma GCC diagnostic pop
#endif //defined(__GNUC__)
#ifdef HAVE_CONFIG_H
#include "config.h"
@@ -20,8 +24,9 @@ TEST(UNIQUE_PTR, pack_convert_nil)
std::stringstream ss;
std::unique_ptr<int> val1;
msgpack::pack(ss, val1);
std::string const& str = ss.str();
msgpack::object_handle oh =
msgpack::unpack(ss.str().data(), ss.str().size());
msgpack::unpack(str.data(), str.size());
std::unique_ptr<int> val2 = oh.get().as<std::unique_ptr<int>>();
EXPECT_TRUE(val1 == val2);
}
@@ -31,8 +36,9 @@ TEST(UNIQUE_PTR, pack_convert_int)
std::stringstream ss;
std::unique_ptr<int> val1(new int(1));
msgpack::pack(ss, val1);
std::string const& str = ss.str();
msgpack::object_handle oh =
msgpack::unpack(ss.str().data(), ss.str().size());
msgpack::unpack(str.data(), str.size());
std::unique_ptr<int> val2 = oh.get().as<std::unique_ptr<int>>();
EXPECT_TRUE(*val1 == *val2);
}
@@ -119,8 +125,9 @@ TEST(UNIQUE_PTR, pack_convert_nil_no_def_con)
std::stringstream ss;
std::unique_ptr<no_def_con> val1(new no_def_con(1));
msgpack::pack(ss, val1);
std::string const& str = ss.str();
msgpack::object_handle oh =
msgpack::unpack(ss.str().data(), ss.str().size());
msgpack::unpack(str.data(), str.size());
std::unique_ptr<no_def_con> val2 = oh.get().as<std::unique_ptr<no_def_con>>();
EXPECT_TRUE(*val1 == *val2);
}

View File

@@ -2,12 +2,16 @@
#include <string>
#include <cmath>
#if defined(__GNUC__)
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wconversion"
#endif //defined(__GNUC__)
#include <gtest/gtest.h>
#if defined(__GNUC__)
#pragma GCC diagnostic pop
#endif //defined(__GNUC__)
#ifdef HAVE_CONFIG_H
#include "config.h"
@@ -153,10 +157,10 @@ public:
void msgpack_unpack(msgpack::object o)
{
#if (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 7)) && !defined(__clang__)
#if defined(__GNUC__) && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 7)) && !defined(__clang__)
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wmaybe-uninitialized"
#endif // (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 7)) && !defined(__clang__)
#endif // defined(__GNUC__) && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 7)) && !defined(__clang__)
msgpack::type::tuple<bool, msgpack::object> tuple(false, msgpack::object());
o.convert(tuple);
@@ -165,18 +169,18 @@ public:
tuple.get<1>().convert(value.f);
else
tuple.get<1>().convert(value.i);
#if (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 7)) && !defined(__clang__)
#if defined(__GNUC__) && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 7)) && !defined(__clang__)
#pragma GCC diagnostic pop
#endif // (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 7)) && !defined(__clang__)
#endif // defined(__GNUC__) && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 7)) && !defined(__clang__)
}
};
TEST(MSGPACK_USER_DEFINED, simple_buffer_union_member)
{
#if (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 7)) && !defined(__clang__)
#if defined(__GNUC__) && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 7)) && !defined(__clang__)
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wmaybe-uninitialized"
#endif // (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 7)) && !defined(__clang__)
#endif // defined(__GNUC__) && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 7)) && !defined(__clang__)
{
// double
TestUnionMemberClass val1(1.0);
@@ -200,9 +204,9 @@ TEST(MSGPACK_USER_DEFINED, simple_buffer_union_member)
EXPECT_EQ(val1.value.i, 1);
EXPECT_EQ(val1.value.i, val2.value.i);
}
#if (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 7)) && !defined(__clang__)
#if defined(__GNUC__) && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 7)) && !defined(__clang__)
#pragma GCC diagnostic pop
#endif // (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 7)) && !defined(__clang__)
#endif // defined(__GNUC__) && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 7)) && !defined(__clang__)
}
// inheritance
@@ -401,14 +405,14 @@ TEST(MSGPACK_INHERIT, define_map_non_virtual)
msgpack::pack(sbuf, b);
msgpack::object_handle oh =
msgpack::unpack(sbuf.data(), sbuf.size());
#if (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 7)) && !defined(__clang__)
#if defined(__GNUC__) && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 7)) && !defined(__clang__)
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wmaybe-uninitialized"
#endif // (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 7)) && !defined(__clang__)
#endif // defined(__GNUC__) && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 7)) && !defined(__clang__)
dm_bottom br = oh.get().as<dm_bottom>();
#if (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 7)) && !defined(__clang__)
#if defined(__GNUC__) && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 7)) && !defined(__clang__)
#pragma GCC diagnostic pop
#endif // (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 7)) && !defined(__clang__)
#endif // defined(__GNUC__) && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 7)) && !defined(__clang__)
EXPECT_EQ(b.b, br.b);
EXPECT_EQ(b.m1, br.m1);
EXPECT_EQ(b.m2, br.m2);

View File

@@ -1,11 +1,15 @@
#include <msgpack.hpp>
#if defined(__GNUC__)
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wconversion"
#endif //defined(__GNUC__)
#include <gtest/gtest.h>
#if defined(__GNUC__)
#pragma GCC diagnostic pop
#endif //defined(__GNUC__)
TEST(version, print)
{

View File

@@ -1,11 +1,15 @@
#include <msgpack.hpp>
#if defined(__GNUC__)
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wconversion"
#endif //defined(__GNUC__)
#include <gtest/gtest.h>
#if defined(__GNUC__)
#pragma GCC diagnostic pop
#endif //defined(__GNUC__)
#include <sstream>
@@ -98,7 +102,8 @@ TEST(visitor, json_like)
std::string json_like;
json_like_visitor v(json_like);
std::size_t off = 0;
bool ret = msgpack::parse(ss.str().data(), ss.str().size(), off, v);
std::string const& str = ss.str();
bool ret = msgpack::parse(str.data(), str.size(), off, v);
EXPECT_TRUE(ret);
EXPECT_EQ("{\"key\":[42,null,true]}", json_like);
}

View File

@@ -1,11 +1,15 @@
#include <msgpack.hpp>
#if defined(__GNUC__)
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wconversion"
#endif //defined(__GNUC__)
#include <gtest/gtest.h>
#if defined(__GNUC__)
#pragma GCC diagnostic pop
#endif //defined(__GNUC__)
TEST(zone, allocate_align)
{