script_core 0.2.2 → 0.2.7
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.rubocop.yml +41 -45
- data/.travis.yml +2 -1
- data/Gemfile +3 -3
- data/README.md +7 -1
- data/bootstrap.sh +2 -2
- data/ext/enterprise_script_service/libseccomp/.travis.yml +24 -12
- data/ext/enterprise_script_service/libseccomp/CHANGELOG +32 -0
- data/ext/enterprise_script_service/libseccomp/CONTRIBUTING.md +37 -26
- data/ext/enterprise_script_service/libseccomp/CREDITS +11 -0
- data/ext/enterprise_script_service/libseccomp/README.md +21 -1
- data/ext/enterprise_script_service/libseccomp/configure.ac +13 -8
- data/ext/enterprise_script_service/libseccomp/doc/Makefile.am +6 -0
- data/ext/enterprise_script_service/libseccomp/doc/man/man3/seccomp_api_get.3 +12 -2
- data/ext/enterprise_script_service/libseccomp/doc/man/man3/seccomp_arch_add.3 +38 -6
- data/ext/enterprise_script_service/libseccomp/doc/man/man3/seccomp_attr_set.3 +53 -2
- data/ext/enterprise_script_service/libseccomp/doc/man/man3/seccomp_export_bpf.3 +20 -2
- data/ext/enterprise_script_service/libseccomp/doc/man/man3/seccomp_init.3 +9 -2
- data/ext/enterprise_script_service/libseccomp/doc/man/man3/seccomp_load.3 +32 -2
- data/ext/enterprise_script_service/libseccomp/doc/man/man3/seccomp_merge.3 +16 -2
- data/ext/enterprise_script_service/libseccomp/doc/man/man3/seccomp_notify_alloc.3 +113 -0
- data/ext/enterprise_script_service/libseccomp/doc/man/man3/seccomp_notify_fd.3 +1 -0
- data/ext/enterprise_script_service/libseccomp/doc/man/man3/seccomp_notify_free.3 +1 -0
- data/ext/enterprise_script_service/libseccomp/doc/man/man3/seccomp_notify_id_valid.3 +1 -0
- data/ext/enterprise_script_service/libseccomp/doc/man/man3/seccomp_notify_receive.3 +1 -0
- data/ext/enterprise_script_service/libseccomp/doc/man/man3/seccomp_notify_respond.3 +1 -0
- data/ext/enterprise_script_service/libseccomp/doc/man/man3/seccomp_rule_add.3 +64 -3
- data/ext/enterprise_script_service/libseccomp/doc/man/man3/seccomp_syscall_priority.3 +18 -3
- data/ext/enterprise_script_service/libseccomp/include/seccomp-syscalls.h +19 -0
- data/ext/enterprise_script_service/libseccomp/include/seccomp.h.in +116 -0
- data/ext/enterprise_script_service/libseccomp/src/.gitignore +2 -0
- data/ext/enterprise_script_service/libseccomp/src/Makefile.am +31 -17
- data/ext/enterprise_script_service/libseccomp/src/api.c +254 -58
- data/ext/enterprise_script_service/libseccomp/src/arch-aarch64.h +1 -9
- data/ext/enterprise_script_service/libseccomp/src/arch-arm.c +47 -2
- data/ext/enterprise_script_service/libseccomp/src/arch-arm.h +1 -9
- data/ext/enterprise_script_service/libseccomp/src/arch-gperf-generate +40 -0
- data/ext/enterprise_script_service/libseccomp/src/arch-mips.c +41 -4
- data/ext/enterprise_script_service/libseccomp/src/arch-mips.h +2 -10
- data/ext/enterprise_script_service/libseccomp/src/arch-mips64.c +41 -4
- data/ext/enterprise_script_service/libseccomp/src/arch-mips64.h +3 -11
- data/ext/enterprise_script_service/libseccomp/src/arch-mips64n32.c +41 -4
- data/ext/enterprise_script_service/libseccomp/src/arch-mips64n32.h +2 -10
- data/ext/enterprise_script_service/libseccomp/src/arch-parisc.h +1 -10
- data/ext/enterprise_script_service/libseccomp/src/arch-parisc64.c +3 -3
- data/ext/enterprise_script_service/libseccomp/src/arch-parisc64.h +29 -0
- data/ext/enterprise_script_service/libseccomp/src/arch-ppc.h +1 -9
- data/ext/enterprise_script_service/libseccomp/src/arch-ppc64.c +606 -8
- data/ext/enterprise_script_service/libseccomp/src/arch-ppc64.h +2 -10
- data/ext/enterprise_script_service/libseccomp/src/arch-riscv64.c +31 -0
- data/ext/enterprise_script_service/libseccomp/src/arch-riscv64.h +22 -0
- data/ext/enterprise_script_service/libseccomp/src/arch-s390.c +171 -12
- data/ext/enterprise_script_service/libseccomp/src/arch-s390.h +1 -17
- data/ext/enterprise_script_service/libseccomp/src/arch-s390x.c +166 -10
- data/ext/enterprise_script_service/libseccomp/src/arch-s390x.h +1 -20
- data/ext/enterprise_script_service/libseccomp/src/arch-syscall-dump.c +8 -1
- data/ext/enterprise_script_service/libseccomp/src/arch-syscall-validate +359 -143
- data/ext/enterprise_script_service/libseccomp/src/arch-x32.c +36 -2
- data/ext/enterprise_script_service/libseccomp/src/arch-x32.h +2 -10
- data/ext/enterprise_script_service/libseccomp/src/arch-x86.c +172 -10
- data/ext/enterprise_script_service/libseccomp/src/arch-x86.h +1 -14
- data/ext/enterprise_script_service/libseccomp/src/arch-x86_64.h +1 -9
- data/ext/enterprise_script_service/libseccomp/src/arch.c +11 -3
- data/ext/enterprise_script_service/libseccomp/src/arch.h +7 -0
- data/ext/enterprise_script_service/libseccomp/src/db.c +268 -57
- data/ext/enterprise_script_service/libseccomp/src/db.h +16 -2
- data/ext/enterprise_script_service/libseccomp/src/gen_bpf.c +503 -148
- data/ext/enterprise_script_service/libseccomp/src/gen_bpf.h +2 -1
- data/ext/enterprise_script_service/libseccomp/src/gen_pfc.c +165 -37
- data/ext/enterprise_script_service/libseccomp/src/python/libseccomp.pxd +37 -1
- data/ext/enterprise_script_service/libseccomp/src/python/seccomp.pyx +295 -5
- data/ext/enterprise_script_service/libseccomp/src/syscalls.c +56 -0
- data/ext/enterprise_script_service/libseccomp/src/syscalls.csv +470 -0
- data/ext/enterprise_script_service/libseccomp/src/syscalls.h +62 -0
- data/ext/enterprise_script_service/libseccomp/src/syscalls.perf.template +82 -0
- data/ext/enterprise_script_service/libseccomp/src/system.c +196 -16
- data/ext/enterprise_script_service/libseccomp/src/system.h +68 -13
- data/ext/enterprise_script_service/libseccomp/tests/.gitignore +10 -2
- data/ext/enterprise_script_service/libseccomp/tests/06-sim-actions.tests +1 -1
- data/ext/enterprise_script_service/libseccomp/tests/11-basic-basic_errors.c +5 -5
- data/ext/enterprise_script_service/libseccomp/tests/13-basic-attrs.c +35 -1
- data/ext/enterprise_script_service/libseccomp/tests/13-basic-attrs.py +10 -1
- data/ext/enterprise_script_service/libseccomp/tests/15-basic-resolver.c +4 -3
- data/ext/enterprise_script_service/libseccomp/tests/16-sim-arch_basic.c +12 -0
- data/ext/enterprise_script_service/libseccomp/tests/16-sim-arch_basic.py +1 -0
- data/ext/enterprise_script_service/libseccomp/tests/{18-sim-basic_whitelist.c → 18-sim-basic_allowlist.c} +0 -0
- data/ext/enterprise_script_service/libseccomp/tests/{18-sim-basic_whitelist.py → 18-sim-basic_allowlist.py} +0 -0
- data/ext/enterprise_script_service/libseccomp/tests/18-sim-basic_allowlist.tests +32 -0
- data/ext/enterprise_script_service/libseccomp/tests/23-sim-arch_all_le_basic.c +3 -0
- data/ext/enterprise_script_service/libseccomp/tests/23-sim-arch_all_le_basic.py +1 -0
- data/ext/enterprise_script_service/libseccomp/tests/30-sim-socket_syscalls.c +3 -0
- data/ext/enterprise_script_service/libseccomp/tests/30-sim-socket_syscalls.py +1 -0
- data/ext/enterprise_script_service/libseccomp/tests/30-sim-socket_syscalls.tests +33 -17
- data/ext/enterprise_script_service/libseccomp/tests/{34-sim-basic_blacklist.c → 34-sim-basic_denylist.c} +0 -0
- data/ext/enterprise_script_service/libseccomp/tests/{34-sim-basic_blacklist.py → 34-sim-basic_denylist.py} +0 -0
- data/ext/enterprise_script_service/libseccomp/tests/34-sim-basic_denylist.tests +32 -0
- data/ext/enterprise_script_service/libseccomp/tests/36-sim-ipc_syscalls.c +3 -0
- data/ext/enterprise_script_service/libseccomp/tests/36-sim-ipc_syscalls.py +1 -0
- data/ext/enterprise_script_service/libseccomp/tests/36-sim-ipc_syscalls.tests +25 -25
- data/ext/enterprise_script_service/libseccomp/tests/39-basic-api_level.c +24 -3
- data/ext/enterprise_script_service/libseccomp/tests/39-basic-api_level.py +16 -1
- data/ext/enterprise_script_service/libseccomp/tests/47-live-kill_process.c +3 -3
- data/ext/enterprise_script_service/libseccomp/tests/51-live-user_notification.c +112 -0
- data/ext/enterprise_script_service/libseccomp/tests/51-live-user_notification.py +60 -0
- data/ext/enterprise_script_service/libseccomp/tests/51-live-user_notification.tests +11 -0
- data/ext/enterprise_script_service/libseccomp/tests/52-basic-load.c +48 -0
- data/ext/enterprise_script_service/libseccomp/tests/52-basic-load.py +38 -0
- data/ext/enterprise_script_service/libseccomp/tests/52-basic-load.tests +11 -0
- data/ext/enterprise_script_service/libseccomp/tests/53-sim-binary_tree.c +156 -0
- data/ext/enterprise_script_service/libseccomp/tests/53-sim-binary_tree.py +95 -0
- data/ext/enterprise_script_service/libseccomp/tests/53-sim-binary_tree.tests +65 -0
- data/ext/enterprise_script_service/libseccomp/tests/54-live-binary_tree.c +128 -0
- data/ext/enterprise_script_service/libseccomp/tests/54-live-binary_tree.py +95 -0
- data/ext/enterprise_script_service/libseccomp/tests/54-live-binary_tree.tests +11 -0
- data/ext/enterprise_script_service/libseccomp/tests/55-basic-pfc_binary_tree.c +134 -0
- data/ext/enterprise_script_service/libseccomp/tests/55-basic-pfc_binary_tree.sh +46 -0
- data/ext/enterprise_script_service/libseccomp/tests/55-basic-pfc_binary_tree.tests +11 -0
- data/ext/enterprise_script_service/libseccomp/tests/56-basic-iterate_syscalls.c +90 -0
- data/ext/enterprise_script_service/libseccomp/tests/56-basic-iterate_syscalls.py +65 -0
- data/ext/enterprise_script_service/libseccomp/tests/56-basic-iterate_syscalls.tests +11 -0
- data/ext/enterprise_script_service/libseccomp/tests/57-basic-rawsysrc.c +64 -0
- data/ext/enterprise_script_service/libseccomp/tests/57-basic-rawsysrc.py +46 -0
- data/ext/enterprise_script_service/libseccomp/tests/57-basic-rawsysrc.tests +11 -0
- data/ext/enterprise_script_service/libseccomp/tests/58-live-tsync_notify.c +116 -0
- data/ext/enterprise_script_service/libseccomp/tests/58-live-tsync_notify.py +61 -0
- data/ext/enterprise_script_service/libseccomp/tests/58-live-tsync_notify.tests +11 -0
- data/ext/enterprise_script_service/libseccomp/tests/Makefile.am +34 -10
- data/ext/enterprise_script_service/libseccomp/tests/regression +10 -3
- data/ext/enterprise_script_service/libseccomp/tests/util.c +3 -3
- data/ext/enterprise_script_service/libseccomp/tools/Makefile.am +0 -3
- data/ext/enterprise_script_service/libseccomp/tools/check-syntax +1 -1
- data/ext/enterprise_script_service/libseccomp/tools/scmp_arch_detect.c +3 -0
- data/ext/enterprise_script_service/libseccomp/tools/scmp_bpf_disasm.c +4 -2
- data/ext/enterprise_script_service/libseccomp/tools/scmp_bpf_sim.c +4 -0
- data/ext/enterprise_script_service/libseccomp/tools/util.c +14 -12
- data/ext/enterprise_script_service/libseccomp/tools/util.h +7 -0
- data/ext/enterprise_script_service/mruby/.github/workflows/build.yml +106 -0
- data/ext/enterprise_script_service/mruby/.github/workflows/codeql-analysis.yml +51 -0
- data/ext/enterprise_script_service/mruby/.github/workflows/main.yml +24 -0
- data/ext/enterprise_script_service/mruby/.gitignore +3 -0
- data/ext/enterprise_script_service/mruby/.travis.yml +6 -9
- data/ext/enterprise_script_service/mruby/AUTHORS +1 -0
- data/ext/enterprise_script_service/mruby/Doxyfile +1 -1
- data/ext/enterprise_script_service/mruby/LICENSE +1 -1
- data/ext/enterprise_script_service/mruby/README.md +6 -2
- data/ext/enterprise_script_service/mruby/appveyor.yml +9 -12
- data/ext/enterprise_script_service/mruby/appveyor_config.rb +9 -0
- data/ext/enterprise_script_service/mruby/build_config.rb +6 -6
- data/ext/enterprise_script_service/mruby/doc/guides/compile.md +6 -2
- data/ext/enterprise_script_service/mruby/doc/guides/debugger.md +1 -1
- data/ext/enterprise_script_service/mruby/doc/guides/mrbconf.md +4 -8
- data/ext/enterprise_script_service/mruby/doc/limitations.md +10 -10
- data/ext/enterprise_script_service/mruby/doc/opcode.md +108 -95
- data/ext/enterprise_script_service/mruby/examples/targets/build_config_ArduinoDue.rb +2 -2
- data/ext/enterprise_script_service/mruby/examples/targets/build_config_IntelEdison.rb +2 -2
- data/ext/enterprise_script_service/mruby/examples/targets/build_config_IntelGalileo.rb +2 -2
- data/ext/enterprise_script_service/mruby/examples/targets/build_config_RX630.rb +2 -2
- data/ext/enterprise_script_service/mruby/examples/targets/build_config_chipKITMax32.rb +2 -2
- data/ext/enterprise_script_service/mruby/examples/targets/build_config_dreamcast_shelf.rb +108 -0
- data/ext/enterprise_script_service/mruby/include/mrbconf.h +10 -7
- data/ext/enterprise_script_service/mruby/include/mruby.h +24 -9
- data/ext/enterprise_script_service/mruby/include/mruby/array.h +4 -0
- data/ext/enterprise_script_service/mruby/include/mruby/boxing_nan.h +11 -2
- data/ext/enterprise_script_service/mruby/include/mruby/boxing_word.h +0 -10
- data/ext/enterprise_script_service/mruby/include/mruby/common.h +10 -0
- data/ext/enterprise_script_service/mruby/include/mruby/compile.h +11 -3
- data/ext/enterprise_script_service/mruby/include/mruby/dump.h +1 -17
- data/ext/enterprise_script_service/mruby/include/mruby/irep.h +10 -0
- data/ext/enterprise_script_service/mruby/include/mruby/istruct.h +4 -1
- data/ext/enterprise_script_service/mruby/include/mruby/khash.h +23 -5
- data/ext/enterprise_script_service/mruby/include/mruby/numeric.h +1 -0
- data/ext/enterprise_script_service/mruby/include/mruby/ops.h +3 -2
- data/ext/enterprise_script_service/mruby/include/mruby/proc.h +13 -8
- data/ext/enterprise_script_service/mruby/include/mruby/string.h +2 -1
- data/ext/enterprise_script_service/mruby/include/mruby/value.h +32 -41
- data/ext/enterprise_script_service/mruby/include/mruby/version.h +4 -4
- data/ext/enterprise_script_service/mruby/lib/mruby/build.rb +2 -30
- data/ext/enterprise_script_service/mruby/lib/mruby/build/command.rb +21 -46
- data/ext/enterprise_script_service/mruby/lib/mruby/gem.rb +9 -0
- data/ext/enterprise_script_service/mruby/lib/mruby/source.rb +3 -1
- data/ext/enterprise_script_service/mruby/mrbgems/default.gembox +7 -0
- data/ext/enterprise_script_service/mruby/mrbgems/mruby-array-ext/mrblib/array.rb +0 -31
- data/ext/enterprise_script_service/mruby/mrbgems/mruby-array-ext/src/array.c +5 -8
- data/ext/enterprise_script_service/mruby/mrbgems/mruby-array-ext/test/array.rb +0 -13
- data/ext/enterprise_script_service/mruby/mrbgems/mruby-bin-config/mrbgem.rake +5 -2
- data/ext/enterprise_script_service/mruby/mrbgems/mruby-bin-debugger/tools/mrdb/mrdb.c +0 -1
- data/ext/enterprise_script_service/mruby/mrbgems/mruby-bin-debugger/tools/mrdb/mrdbconf.h +5 -1
- data/ext/enterprise_script_service/mruby/mrbgems/mruby-bin-mirb/tools/mirb/mirb.c +7 -3
- data/ext/enterprise_script_service/mruby/mrbgems/mruby-bin-mrbc/tools/mrbc/mrbc.c +24 -21
- data/ext/enterprise_script_service/mruby/mrbgems/mruby-bin-mruby/mrbgem.rake +0 -1
- data/ext/enterprise_script_service/mruby/mrbgems/mruby-bin-mruby/tools/mruby/mruby.c +6 -2
- data/ext/enterprise_script_service/mruby/mrbgems/mruby-bin-strip/tools/mruby-strip/mruby-strip.c +6 -2
- data/ext/enterprise_script_service/mruby/mrbgems/mruby-class-ext/src/class.c +6 -1
- data/ext/enterprise_script_service/mruby/mrbgems/mruby-compiler/core/codegen.c +76 -48
- data/ext/enterprise_script_service/mruby/mrbgems/mruby-compiler/core/parse.y +107 -32
- data/ext/enterprise_script_service/mruby/mrbgems/mruby-compiler/core/y.tab.c +13153 -0
- data/ext/enterprise_script_service/mruby/mrbgems/mruby-compiler/mrbgem.rake +13 -15
- data/ext/enterprise_script_service/mruby/mrbgems/mruby-complex/mrblib/complex.rb +1 -1
- data/ext/enterprise_script_service/mruby/mrbgems/mruby-complex/src/complex.c +1 -2
- data/ext/enterprise_script_service/mruby/mrbgems/mruby-error/src/exception.c +3 -3
- data/ext/enterprise_script_service/mruby/mrbgems/mruby-eval/src/eval.c +3 -214
- data/ext/enterprise_script_service/mruby/mrbgems/mruby-eval/test/eval.rb +21 -0
- data/ext/enterprise_script_service/mruby/mrbgems/mruby-fiber/src/fiber.c +1 -2
- data/ext/enterprise_script_service/mruby/mrbgems/mruby-hash-ext/src/hash-ext.c +1 -3
- data/ext/enterprise_script_service/mruby/mrbgems/mruby-inline-struct/test/inline.c +3 -4
- data/ext/enterprise_script_service/mruby/mrbgems/mruby-io/include/mruby/ext/io.h +39 -7
- data/ext/enterprise_script_service/mruby/mrbgems/mruby-io/mrbgem.rake +2 -8
- data/ext/enterprise_script_service/mruby/mrbgems/mruby-io/mrblib/file_constants.rb +0 -16
- data/ext/enterprise_script_service/mruby/mrbgems/mruby-io/mrblib/io.rb +7 -12
- data/ext/enterprise_script_service/mruby/mrbgems/mruby-io/src/file.c +77 -32
- data/ext/enterprise_script_service/mruby/mrbgems/mruby-io/src/file_test.c +18 -36
- data/ext/enterprise_script_service/mruby/mrbgems/mruby-io/src/io.c +324 -122
- data/ext/enterprise_script_service/mruby/mrbgems/mruby-io/test/file.rb +18 -12
- data/ext/enterprise_script_service/mruby/mrbgems/mruby-io/test/io.rb +32 -0
- data/ext/enterprise_script_service/mruby/mrbgems/mruby-io/test/mruby_io_test.c +57 -49
- data/ext/enterprise_script_service/mruby/mrbgems/mruby-kernel-ext/src/kernel.c +6 -8
- data/ext/enterprise_script_service/mruby/mrbgems/mruby-metaprog/src/metaprog.c +15 -17
- data/ext/enterprise_script_service/mruby/mrbgems/mruby-metaprog/test/metaprog.rb +9 -0
- data/ext/enterprise_script_service/mruby/mrbgems/mruby-method/src/method.c +4 -5
- data/ext/enterprise_script_service/mruby/mrbgems/mruby-object-ext/src/object.c +3 -12
- data/ext/enterprise_script_service/mruby/mrbgems/mruby-objectspace/src/mruby_objectspace.c +0 -1
- data/ext/enterprise_script_service/mruby/mrbgems/mruby-pack/src/pack.c +113 -10
- data/ext/enterprise_script_service/mruby/mrbgems/mruby-print/src/print.c +6 -3
- data/ext/enterprise_script_service/mruby/mrbgems/mruby-proc-ext/src/proc.c +2 -2
- data/ext/enterprise_script_service/mruby/mrbgems/mruby-range-ext/src/range.c +1 -3
- data/ext/enterprise_script_service/mruby/mrbgems/mruby-rational/mrblib/rational.rb +1 -3
- data/ext/enterprise_script_service/mruby/mrbgems/mruby-rational/src/rational.c +9 -9
- data/ext/enterprise_script_service/mruby/mrbgems/mruby-sleep/src/mrb_sleep.c +1 -1
- data/ext/enterprise_script_service/mruby/mrbgems/mruby-socket/mrbgem.rake +1 -1
- data/ext/enterprise_script_service/mruby/mrbgems/mruby-socket/test/sockettest.c +3 -2
- data/ext/enterprise_script_service/mruby/mrbgems/mruby-sprintf/src/sprintf.c +62 -25
- data/ext/enterprise_script_service/mruby/mrbgems/mruby-sprintf/test/sprintf.rb +5 -23
- data/ext/enterprise_script_service/mruby/mrbgems/mruby-string-ext/src/string.c +4 -5
- data/ext/enterprise_script_service/mruby/mrbgems/mruby-struct/src/struct.c +5 -11
- data/ext/enterprise_script_service/mruby/mrbgems/mruby-symbol-ext/src/symbol.c +1 -1
- data/ext/enterprise_script_service/mruby/mrbgems/mruby-test/mrbgem.rake +1 -0
- data/ext/enterprise_script_service/mruby/mrbgems/mruby-time/src/time.c +11 -15
- data/ext/enterprise_script_service/mruby/mrblib/00class.rb +10 -0
- data/ext/enterprise_script_service/mruby/mrblib/hash.rb +3 -3
- data/ext/enterprise_script_service/mruby/src/array.c +25 -11
- data/ext/enterprise_script_service/mruby/src/backtrace.c +2 -2
- data/ext/enterprise_script_service/mruby/src/class.c +48 -32
- data/ext/enterprise_script_service/mruby/src/codedump.c +4 -0
- data/ext/enterprise_script_service/mruby/src/debug.c +8 -5
- data/ext/enterprise_script_service/mruby/src/dump.c +3 -65
- data/ext/enterprise_script_service/mruby/src/error.c +58 -7
- data/ext/enterprise_script_service/mruby/src/etc.c +13 -5
- data/ext/enterprise_script_service/mruby/src/fmt_fp.c +98 -21
- data/ext/enterprise_script_service/mruby/src/gc.c +15 -280
- data/ext/enterprise_script_service/mruby/src/hash.c +13 -21
- data/ext/enterprise_script_service/mruby/src/kernel.c +6 -9
- data/ext/enterprise_script_service/mruby/src/load.c +56 -30
- data/ext/enterprise_script_service/mruby/src/numeric.c +50 -70
- data/ext/enterprise_script_service/mruby/src/object.c +23 -5
- data/ext/enterprise_script_service/mruby/src/print.c +27 -3
- data/ext/enterprise_script_service/mruby/src/proc.c +26 -7
- data/ext/enterprise_script_service/mruby/src/range.c +4 -12
- data/ext/enterprise_script_service/mruby/src/state.c +34 -11
- data/ext/enterprise_script_service/mruby/src/string.c +93 -56
- data/ext/enterprise_script_service/mruby/src/symbol.c +13 -12
- data/ext/enterprise_script_service/mruby/src/vm.c +48 -53
- data/ext/enterprise_script_service/mruby/tasks/gitlab.rake +19 -22
- data/ext/enterprise_script_service/mruby/tasks/mrbgems.rake +1 -1
- data/ext/enterprise_script_service/mruby/tasks/toolchains/android.rake +46 -1
- data/ext/enterprise_script_service/mruby/tasks/toolchains/gcc.rake +3 -3
- data/ext/enterprise_script_service/mruby/tasks/toolchains/openwrt.rake +6 -6
- data/ext/enterprise_script_service/mruby/tasks/toolchains/visualcpp.rake +8 -8
- data/ext/enterprise_script_service/mruby/test/assert.rb +5 -4
- data/ext/enterprise_script_service/mruby/test/t/ensure.rb +8 -26
- data/ext/enterprise_script_service/mruby/test/t/exception.rb +2 -2
- data/ext/enterprise_script_service/mruby/test/t/kernel.rb +15 -24
- data/ext/enterprise_script_service/mruby/travis_config.rb +0 -14
- data/ext/enterprise_script_service/msgpack/.github/depends/boost.sh +56 -0
- data/ext/enterprise_script_service/msgpack/.github/workflows/coverage.yml +62 -0
- data/ext/enterprise_script_service/msgpack/.github/workflows/gha.yml +304 -0
- data/ext/enterprise_script_service/msgpack/CHANGELOG.md +11 -0
- data/ext/enterprise_script_service/msgpack/CMakeLists.txt +82 -39
- data/ext/enterprise_script_service/msgpack/Files.cmake +22 -12
- data/ext/enterprise_script_service/msgpack/QUICKSTART-C.md +26 -29
- data/ext/enterprise_script_service/msgpack/README.md +3 -2
- data/ext/enterprise_script_service/msgpack/appveyor.yml +6 -2
- data/ext/enterprise_script_service/msgpack/ci/build_cmake.sh +3 -1
- data/ext/enterprise_script_service/msgpack/cmake/CodeCoverage.cmake +55 -0
- data/ext/enterprise_script_service/msgpack/codecov.yml +36 -0
- data/ext/enterprise_script_service/msgpack/example/CMakeLists.txt +9 -5
- data/ext/enterprise_script_service/msgpack/example/boost/CMakeLists.txt +1 -1
- data/ext/enterprise_script_service/msgpack/example/c/CMakeLists.txt +17 -6
- data/ext/enterprise_script_service/msgpack/example/c/boundary.c +296 -0
- data/ext/enterprise_script_service/msgpack/example/c/jsonconv.c +419 -0
- data/ext/enterprise_script_service/msgpack/example/c/simple_c.c +1 -1
- data/ext/enterprise_script_service/msgpack/example/cpp03/CMakeLists.txt +3 -3
- data/ext/enterprise_script_service/msgpack/example/cpp11/CMakeLists.txt +2 -2
- data/ext/enterprise_script_service/msgpack/example/x3/CMakeLists.txt +2 -2
- data/ext/enterprise_script_service/msgpack/include/msgpack/pack.h +24 -1
- data/ext/enterprise_script_service/msgpack/include/msgpack/v1/adaptor/array_ref.hpp +5 -4
- data/ext/enterprise_script_service/msgpack/include/msgpack/v1/adaptor/boost/optional.hpp +4 -4
- data/ext/enterprise_script_service/msgpack/include/msgpack/v1/adaptor/cpp17/vector_byte.hpp +8 -8
- data/ext/enterprise_script_service/msgpack/include/msgpack/v1/adaptor/map.hpp +4 -4
- data/ext/enterprise_script_service/msgpack/include/msgpack/v1/adaptor/vector.hpp +4 -4
- data/ext/enterprise_script_service/msgpack/include/msgpack/v1/adaptor/vector_char.hpp +8 -8
- data/ext/enterprise_script_service/msgpack/include/msgpack/v1/adaptor/vector_unsigned_char.hpp +8 -8
- data/ext/enterprise_script_service/msgpack/include/msgpack/v1/adaptor/wstring.hpp +4 -4
- data/ext/enterprise_script_service/msgpack/include/msgpack/v3/unpack.hpp +6 -6
- data/ext/enterprise_script_service/msgpack/include/msgpack/version_master.h +2 -2
- data/ext/enterprise_script_service/msgpack/include/msgpack/zbuffer.h +4 -4
- data/ext/enterprise_script_service/msgpack/make_file_list.sh +38 -11
- data/ext/enterprise_script_service/msgpack/src/vrefbuffer.c +6 -0
- data/ext/enterprise_script_service/msgpack/test/CMakeLists.txt +86 -64
- data/ext/enterprise_script_service/msgpack/test/array_ref.cpp +4 -0
- data/ext/enterprise_script_service/msgpack/test/boost_fusion.cpp +4 -0
- data/ext/enterprise_script_service/msgpack/test/boost_optional.cpp +4 -0
- data/ext/enterprise_script_service/msgpack/test/boost_string_ref.cpp +4 -1
- data/ext/enterprise_script_service/msgpack/test/boost_string_view.cpp +4 -0
- data/ext/enterprise_script_service/msgpack/test/boost_variant.cpp +4 -0
- data/ext/enterprise_script_service/msgpack/test/buffer.cpp +4 -47
- data/ext/enterprise_script_service/msgpack/test/buffer_c.cpp +148 -0
- data/ext/enterprise_script_service/msgpack/test/carray.cpp +4 -0
- data/ext/enterprise_script_service/msgpack/test/cases.cpp +8 -4
- data/ext/enterprise_script_service/msgpack/test/convert.cpp +8 -4
- data/ext/enterprise_script_service/msgpack/test/fixint.cpp +4 -0
- data/ext/enterprise_script_service/msgpack/test/fixint_c.cpp +4 -0
- data/ext/enterprise_script_service/msgpack/test/fuzz_unpack_pack_fuzzer_cpp11.cpp +4 -0
- data/ext/enterprise_script_service/msgpack/test/iterator_cpp11.cpp +4 -0
- data/ext/enterprise_script_service/msgpack/test/json.cpp +4 -0
- data/ext/enterprise_script_service/msgpack/test/limit.cpp +8 -4
- data/ext/enterprise_script_service/msgpack/test/msgpack_basic.cpp +4 -0
- data/ext/enterprise_script_service/msgpack/test/msgpack_c.cpp +159 -0
- data/ext/enterprise_script_service/msgpack/test/msgpack_container.cpp +4 -0
- data/ext/enterprise_script_service/msgpack/test/msgpack_cpp11.cpp +32 -27
- data/ext/enterprise_script_service/msgpack/test/msgpack_cpp17.cpp +4 -0
- data/ext/enterprise_script_service/msgpack/test/msgpack_stream.cpp +4 -0
- data/ext/enterprise_script_service/msgpack/test/msgpack_tuple.cpp +4 -1
- data/ext/enterprise_script_service/msgpack/test/msgpack_vref.cpp +4 -0
- data/ext/enterprise_script_service/msgpack/test/msgpack_x3_parse.cpp +4 -0
- data/ext/enterprise_script_service/msgpack/test/object.cpp +4 -1
- data/ext/enterprise_script_service/msgpack/test/object_with_zone.cpp +12 -8
- data/ext/enterprise_script_service/msgpack/test/pack_unpack.cpp +30 -26
- data/ext/enterprise_script_service/msgpack/test/pack_unpack_c.cpp +4 -0
- data/ext/enterprise_script_service/msgpack/test/raw.cpp +4 -0
- data/ext/enterprise_script_service/msgpack/test/reference.cpp +4 -0
- data/ext/enterprise_script_service/msgpack/test/reference_cpp11.cpp +4 -0
- data/ext/enterprise_script_service/msgpack/test/reference_wrapper_cpp11.cpp +4 -0
- data/ext/enterprise_script_service/msgpack/test/shared_ptr_cpp11.cpp +4 -0
- data/ext/enterprise_script_service/msgpack/test/size_equal_only.cpp +4 -0
- data/ext/enterprise_script_service/msgpack/test/streaming.cpp +8 -4
- data/ext/enterprise_script_service/msgpack/test/streaming_c.cpp +4 -0
- data/ext/enterprise_script_service/msgpack/test/unique_ptr_cpp11.cpp +4 -0
- data/ext/enterprise_script_service/msgpack/test/user_class.cpp +16 -12
- data/ext/enterprise_script_service/msgpack/test/version.cpp +4 -0
- data/ext/enterprise_script_service/msgpack/test/visitor.cpp +4 -0
- data/ext/enterprise_script_service/msgpack/test/zone.cpp +4 -0
- data/lib/script_core/engine.rb +24 -5
- data/lib/script_core/executable.rb +4 -3
- data/lib/script_core/result.rb +1 -5
- data/lib/script_core/service_channel.rb +1 -0
- data/lib/script_core/version.rb +1 -1
- data/lib/tasks/script_core.rake +3 -1
- data/script_core.gemspec +2 -2
- data/spec/dummy/app/lib/script_engine.rb +64 -5
- metadata +68 -30
- data/ext/enterprise_script_service/libseccomp/src/arch-aarch64-syscalls.c +0 -559
- data/ext/enterprise_script_service/libseccomp/src/arch-arm-syscalls.c +0 -570
- data/ext/enterprise_script_service/libseccomp/src/arch-mips-syscalls.c +0 -562
- data/ext/enterprise_script_service/libseccomp/src/arch-mips64-syscalls.c +0 -562
- data/ext/enterprise_script_service/libseccomp/src/arch-mips64n32-syscalls.c +0 -562
- data/ext/enterprise_script_service/libseccomp/src/arch-parisc-syscalls.c +0 -542
- data/ext/enterprise_script_service/libseccomp/src/arch-ppc-syscalls.c +0 -559
- data/ext/enterprise_script_service/libseccomp/src/arch-ppc64-syscalls.c +0 -559
- data/ext/enterprise_script_service/libseccomp/src/arch-s390-syscalls.c +0 -626
- data/ext/enterprise_script_service/libseccomp/src/arch-s390x-syscalls.c +0 -626
- data/ext/enterprise_script_service/libseccomp/src/arch-x32-syscalls.c +0 -558
- data/ext/enterprise_script_service/libseccomp/src/arch-x86-syscalls.c +0 -692
- data/ext/enterprise_script_service/libseccomp/src/arch-x86_64-syscalls.c +0 -559
- data/ext/enterprise_script_service/libseccomp/tests/18-sim-basic_whitelist.tests +0 -32
- data/ext/enterprise_script_service/libseccomp/tests/34-sim-basic_blacklist.tests +0 -32
- data/ext/enterprise_script_service/msgpack/.travis.yml +0 -258
@@ -1,5 +1,9 @@
|
|
1
|
-
|
2
|
-
ADD_SUBDIRECTORY (
|
3
|
-
|
4
|
-
|
5
|
-
ADD_SUBDIRECTORY (
|
1
|
+
IF (NOT MSGPACK_CXX_ONLY)
|
2
|
+
ADD_SUBDIRECTORY (c)
|
3
|
+
ENDIF ()
|
4
|
+
IF (MSGPACK_ENABLE_CXX)
|
5
|
+
ADD_SUBDIRECTORY (cpp03)
|
6
|
+
ADD_SUBDIRECTORY (cpp11)
|
7
|
+
ADD_SUBDIRECTORY (boost)
|
8
|
+
ADD_SUBDIRECTORY (x3)
|
9
|
+
ENDIF ()
|
@@ -27,7 +27,7 @@ FOREACH (source_file ${exec_PROGRAMS})
|
|
27
27
|
)
|
28
28
|
TARGET_INCLUDE_DIRECTORIES (${source_file_we}
|
29
29
|
PRIVATE
|
30
|
-
$<TARGET_PROPERTY:msgpackc,INTERFACE_INCLUDE_DIRECTORIES>
|
30
|
+
$<TARGET_PROPERTY:msgpackc-cxx,INTERFACE_INCLUDE_DIRECTORIES>
|
31
31
|
)
|
32
32
|
TARGET_LINK_LIBRARIES (${source_file_we}
|
33
33
|
${Boost_SYSTEM_LIBRARY}
|
@@ -1,10 +1,16 @@
|
|
1
|
+
FIND_PACKAGE (cJSON)
|
2
|
+
|
1
3
|
LIST (APPEND exec_PROGRAMS
|
4
|
+
boundary.c
|
2
5
|
lib_buffer_unpack.c
|
3
6
|
simple_c.c
|
4
7
|
speed_test_uint32_array.c
|
5
8
|
speed_test_uint64_array.c
|
6
9
|
user_buffer_unpack.c
|
7
10
|
)
|
11
|
+
IF (cJSON_FOUND)
|
12
|
+
LIST (APPEND exec_PROGRAMS jsonconv.c)
|
13
|
+
ENDIF ()
|
8
14
|
|
9
15
|
FOREACH (source_file ${exec_PROGRAMS})
|
10
16
|
GET_FILENAME_COMPONENT (source_file_we ${source_file} NAME_WE)
|
@@ -15,19 +21,24 @@ FOREACH (source_file ${exec_PROGRAMS})
|
|
15
21
|
TARGET_LINK_LIBRARIES (${source_file_we}
|
16
22
|
msgpackc
|
17
23
|
)
|
18
|
-
IF ("${
|
24
|
+
IF ("${CMAKE_C_COMPILER_ID}" STREQUAL "Clang" OR "${CMAKE_C_COMPILER_ID}" STREQUAL "GNU")
|
19
25
|
SET_PROPERTY (TARGET ${source_file_we} APPEND_STRING PROPERTY COMPILE_FLAGS " -Wall -Wextra")
|
20
26
|
ENDIF ()
|
21
27
|
|
22
|
-
IF ("${
|
28
|
+
IF ("${CMAKE_C_COMPILER_ID}" STREQUAL "Clang")
|
23
29
|
SET_PROPERTY (TARGET ${source_file_we} APPEND_STRING PROPERTY COMPILE_FLAGS " -Wno-mismatched-tags")
|
24
30
|
ENDIF ()
|
25
31
|
|
26
|
-
IF ("${
|
27
|
-
IF (
|
28
|
-
STRING(REGEX REPLACE "/W[0-4]" "/W3 /WX"
|
32
|
+
IF ("${CMAKE_C_COMPILER_ID}" STREQUAL "MSVC")
|
33
|
+
IF (CMAKE_C_FLAGS MATCHES "/W[0-4]")
|
34
|
+
STRING(REGEX REPLACE "/W[0-4]" "/W3 /WX" CMAKE_C_FLAGS "${CMAKE_C_FLAGS}")
|
29
35
|
ELSE ()
|
30
|
-
SET(
|
36
|
+
SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} /W3 /WX")
|
31
37
|
ENDIF ()
|
32
38
|
ENDIF ()
|
33
39
|
ENDFOREACH ()
|
40
|
+
|
41
|
+
IF (cJSON_FOUND)
|
42
|
+
TARGET_LINK_LIBRARIES (jsonconv ${CJSON_LIBRARIES})
|
43
|
+
TARGET_INCLUDE_DIRECTORIES(jsonconv PRIVATE ${CJSON_INCLUDE_DIRS})
|
44
|
+
ENDIF ()
|
@@ -0,0 +1,296 @@
|
|
1
|
+
/* gcc boundary.c -o boundary -Wconversion -Wpointer-sign */
|
2
|
+
#include <msgpack.h>
|
3
|
+
#include <stdio.h>
|
4
|
+
#include <assert.h>
|
5
|
+
|
6
|
+
static inline unsigned char atohex(char a)
|
7
|
+
{
|
8
|
+
int x;
|
9
|
+
if (a >= 'a') {
|
10
|
+
x = a - 'a' + 10;
|
11
|
+
} else if (a >= 'A') {
|
12
|
+
x = a - 'A' + 10;
|
13
|
+
} else {
|
14
|
+
x = a - '0';
|
15
|
+
}
|
16
|
+
assert(x >= 0 && x < 16);
|
17
|
+
return (unsigned char)x;
|
18
|
+
}
|
19
|
+
|
20
|
+
// Return 0 if equal
|
21
|
+
static inline int bytesncmp(char *data, const char *bytes, size_t len)
|
22
|
+
{
|
23
|
+
size_t n = len >> 1;
|
24
|
+
size_t i = 0;
|
25
|
+
int diff;
|
26
|
+
for (; i < n; i++) {
|
27
|
+
diff = (unsigned char)data[i] - (atohex(bytes[2 * i]) << 4) - atohex(bytes[2 * i + 1]);
|
28
|
+
if (diff != 0) {
|
29
|
+
return diff;
|
30
|
+
}
|
31
|
+
}
|
32
|
+
return 0;
|
33
|
+
}
|
34
|
+
|
35
|
+
int main()
|
36
|
+
{
|
37
|
+
msgpack_sbuffer sbuf;
|
38
|
+
msgpack_packer *x;
|
39
|
+
size_t offset = 0;
|
40
|
+
char data[65536];
|
41
|
+
msgpack_timestamp ts[] = {
|
42
|
+
{ 0xFFFFFFFF, 0 },
|
43
|
+
{ 0x100000000, 0 },
|
44
|
+
{ 0x3FFFFFFFF, 0 },
|
45
|
+
{ 0x400000000, 0 },
|
46
|
+
{ INT64_MAX, UINT32_MAX }
|
47
|
+
};
|
48
|
+
|
49
|
+
#define check_sbuffer(b) \
|
50
|
+
do { \
|
51
|
+
size_t len = strlen(#b); \
|
52
|
+
assert((sbuf.size - offset) * 2 == len); \
|
53
|
+
assert(bytesncmp(sbuf.data + offset, #b, len) == 0); \
|
54
|
+
offset = sbuf.size; \
|
55
|
+
} while (0)
|
56
|
+
|
57
|
+
msgpack_sbuffer_init(&sbuf);
|
58
|
+
x = msgpack_packer_new(&sbuf, msgpack_sbuffer_write);
|
59
|
+
|
60
|
+
msgpack_pack_fix_uint8(x, 0); check_sbuffer(cc00); /* cc 00 */
|
61
|
+
msgpack_pack_fix_uint8(x, 0xFF); check_sbuffer(ccff); /* cc ff */
|
62
|
+
msgpack_pack_fix_uint16(x, 0); check_sbuffer(cd0000); /* cd 00 00 */
|
63
|
+
msgpack_pack_fix_uint16(x, 0xFFFF); check_sbuffer(cdffff); /* cd ff ff */
|
64
|
+
msgpack_pack_fix_uint32(x, 0); check_sbuffer(ce00000000); /* ce 00 00 00 00 */
|
65
|
+
msgpack_pack_fix_uint32(x, 0xFFFFFFFF); check_sbuffer(ceffffffff); /* ce ff ff ff ff */
|
66
|
+
msgpack_pack_fix_uint64(x, 0); check_sbuffer(cf0000000000000000); /* cf 00 00 00 00 00 00 00 00 */
|
67
|
+
msgpack_pack_fix_uint64(x, 0xFFFFFFFFFFFFFFFF); check_sbuffer(cfffffffffffffffff); /* cf ff ff ff ff ff ff ff ff */
|
68
|
+
|
69
|
+
msgpack_pack_uint8(x, 0); check_sbuffer(00); /* 00 */
|
70
|
+
msgpack_pack_uint8(x, 0x7F); check_sbuffer(7f); /* 7f */
|
71
|
+
msgpack_pack_uint8(x, 0x80); check_sbuffer(cc80); /* cc 80 */
|
72
|
+
msgpack_pack_uint8(x, 0xFF); check_sbuffer(ccff); /* cc ff */
|
73
|
+
|
74
|
+
msgpack_pack_uint16(x, 0); check_sbuffer(00); /* 00 */
|
75
|
+
msgpack_pack_uint16(x, 0x7F); check_sbuffer(7f); /* 7f */
|
76
|
+
msgpack_pack_uint16(x, 0x80); check_sbuffer(cc80); /* cc 80 */
|
77
|
+
msgpack_pack_uint16(x, 0xFF); check_sbuffer(ccff); /* cc ff */
|
78
|
+
msgpack_pack_uint16(x, 0x100); check_sbuffer(cd0100); /* cd 01 00 */
|
79
|
+
msgpack_pack_uint16(x, 0xFFFF); check_sbuffer(cdffff); /* cd ff ff */
|
80
|
+
|
81
|
+
msgpack_pack_uint32(x, 0); check_sbuffer(00); /* 00 */
|
82
|
+
msgpack_pack_uint32(x, 0x7F); check_sbuffer(7f); /* 7f */
|
83
|
+
msgpack_pack_uint32(x, 0x80); check_sbuffer(cc80); /* cc 80 */
|
84
|
+
msgpack_pack_uint32(x, 0xFF); check_sbuffer(ccff); /* cc ff */
|
85
|
+
msgpack_pack_uint32(x, 0x100); check_sbuffer(cd0100); /* cd 01 00 */
|
86
|
+
msgpack_pack_uint32(x, 0xFFFF); check_sbuffer(cdffff); /* cd ff ff */
|
87
|
+
msgpack_pack_uint32(x, 0x10000); check_sbuffer(ce00010000); /* ce 00 01 00 00 */
|
88
|
+
msgpack_pack_uint32(x, 0xFFFFFFFF); check_sbuffer(ceffffffff); /* ce ff ff ff ff */
|
89
|
+
|
90
|
+
msgpack_pack_uint64(x, 0); check_sbuffer(00); /* 00 */
|
91
|
+
msgpack_pack_uint64(x, 0x7F); check_sbuffer(7f); /* 7f */
|
92
|
+
msgpack_pack_uint64(x, 0x80); check_sbuffer(cc80); /* cc 80 */
|
93
|
+
msgpack_pack_uint64(x, 0xFF); check_sbuffer(ccff); /* cc ff */
|
94
|
+
msgpack_pack_uint64(x, 0x100); check_sbuffer(cd0100); /* cd 01 00 */
|
95
|
+
msgpack_pack_uint64(x, 0xFFFF); check_sbuffer(cdffff); /* cd ff ff */
|
96
|
+
msgpack_pack_uint64(x, 0x10000); check_sbuffer(ce00010000); /* ce 00 01 00 00 */
|
97
|
+
msgpack_pack_uint64(x, 0xFFFFFFFF); check_sbuffer(ceffffffff); /* ce ff ff ff ff */
|
98
|
+
msgpack_pack_uint64(x, 0x100000000); check_sbuffer(cf0000000100000000); /* cf 00 00 00 01 00 00 00 00 */
|
99
|
+
msgpack_pack_uint64(x, 0xFFFFFFFFFFFFFFFF); check_sbuffer(cfffffffffffffffff); /* cf ff ff ff ff ff ff ff ff */
|
100
|
+
|
101
|
+
msgpack_pack_fix_int8(x, 0x7F); check_sbuffer(d07f); /* d0 7f */
|
102
|
+
msgpack_pack_fix_int8(x, -0x7F-1); check_sbuffer(d080); /* d0 80 */
|
103
|
+
msgpack_pack_fix_int16(x, 0x7FFF); check_sbuffer(d17fff); /* d1 7f ff */
|
104
|
+
msgpack_pack_fix_int16(x, -0x7FFF-1); check_sbuffer(d18000); /* d1 80 00 */
|
105
|
+
msgpack_pack_fix_int32(x, 0x7FFFFFFF); check_sbuffer(d27fffffff); /* d2 7f ff ff ff */
|
106
|
+
msgpack_pack_fix_int32(x, -0x7FFFFFFF-1); check_sbuffer(d280000000); /* d2 80 00 00 00 */
|
107
|
+
msgpack_pack_fix_int64(x, 0x7FFFFFFFFFFFFFFF); check_sbuffer(d37fffffffffffffff); /* d3 7f ff ff ff ff ff ff ff */
|
108
|
+
msgpack_pack_fix_int64(x, -0x7FFFFFFFFFFFFFFF-1); check_sbuffer(d38000000000000000); /* d3 80 00 00 00 00 00 00 00 */
|
109
|
+
|
110
|
+
msgpack_pack_int8(x, -0x7F-1); check_sbuffer(d080); /* d0 80 */
|
111
|
+
msgpack_pack_int8(x, -0x21); check_sbuffer(d0df); /* d0 df */
|
112
|
+
msgpack_pack_int8(x, -0x20); check_sbuffer(e0); /* e0 */
|
113
|
+
msgpack_pack_int8(x, -1); check_sbuffer(ff); /* ff */
|
114
|
+
msgpack_pack_int8(x, 0); check_sbuffer(00); /* 00 */
|
115
|
+
msgpack_pack_int8(x, 0x7F); check_sbuffer(7f); /* 7f */
|
116
|
+
|
117
|
+
msgpack_pack_int16(x, -0x7FFF-1); check_sbuffer(d18000); /* d1 80 00 */
|
118
|
+
msgpack_pack_int16(x, -0x81); check_sbuffer(d1ff7f); /* d1 ff 7f */
|
119
|
+
msgpack_pack_int16(x, -0x80); check_sbuffer(d080); /* d0 80 */
|
120
|
+
msgpack_pack_int16(x, -0x21); check_sbuffer(d0df); /* d0 df */
|
121
|
+
msgpack_pack_int16(x, -0x20); check_sbuffer(e0); /* e0 */
|
122
|
+
msgpack_pack_int16(x, -0x1); check_sbuffer(ff); /* ff */
|
123
|
+
msgpack_pack_int16(x, 0); check_sbuffer(00); /* 00 */
|
124
|
+
msgpack_pack_int16(x, 0x7F); check_sbuffer(7f); /* 7f */
|
125
|
+
msgpack_pack_int16(x, 0x80); check_sbuffer(cc80); /* cc 80 */
|
126
|
+
msgpack_pack_int16(x, 0xFF); check_sbuffer(ccff); /* cc ff */
|
127
|
+
msgpack_pack_int16(x, 0x100); check_sbuffer(cd0100); /* cd 01 00 */
|
128
|
+
msgpack_pack_int16(x, 0x7FFF); check_sbuffer(cd7fff); /* cd 7f ff */
|
129
|
+
|
130
|
+
msgpack_pack_int32(x, -0x7FFFFFFF-1); check_sbuffer(d280000000); /* d2 80 00 00 00 */
|
131
|
+
msgpack_pack_int32(x, -0x8001); check_sbuffer(d2ffff7fff); /* d2 ff ff 7f ff */
|
132
|
+
msgpack_pack_int32(x, -0x8000); check_sbuffer(d18000); /* d1 80 00 */
|
133
|
+
msgpack_pack_int32(x, -0x81); check_sbuffer(d1ff7f); /* d1 ff 7f */
|
134
|
+
msgpack_pack_int32(x, -0x80); check_sbuffer(d080); /* d0 80 */
|
135
|
+
msgpack_pack_int32(x, -0x21); check_sbuffer(d0df); /* d0 df */
|
136
|
+
msgpack_pack_int32(x, -0x20); check_sbuffer(e0); /* e0 */
|
137
|
+
msgpack_pack_int32(x, -0x1); check_sbuffer(ff); /* ff */
|
138
|
+
msgpack_pack_int32(x, 0); check_sbuffer(00); /* 00 */
|
139
|
+
msgpack_pack_int32(x, 0x7F); check_sbuffer(7f); /* 7f */
|
140
|
+
msgpack_pack_int32(x, 0x80); check_sbuffer(cc80); /* cc 80 */
|
141
|
+
msgpack_pack_int32(x, 0xFF); check_sbuffer(ccff); /* cc ff */
|
142
|
+
msgpack_pack_int32(x, 0x100); check_sbuffer(cd0100); /* cd 01 00 */
|
143
|
+
msgpack_pack_int32(x, 0xFFFF); check_sbuffer(cdffff); /* cd ff ff */
|
144
|
+
msgpack_pack_int32(x, 0x10000); check_sbuffer(ce00010000); /* ce 00 01 00 00 */
|
145
|
+
msgpack_pack_int32(x, 0x7FFFFFFF); check_sbuffer(ce7fffffff); /* ce 7f ff ff ff */
|
146
|
+
|
147
|
+
msgpack_pack_int64(x, -0x7FFFFFFFFFFFFFFF-1); check_sbuffer(d38000000000000000); /* d3 80 00 00 00 00 00 00 00 */
|
148
|
+
msgpack_pack_int64(x, -((1LL<<31)+1)); check_sbuffer(d3ffffffff7fffffff); /* d3 ff ff ff ff 7f ff ff ff */
|
149
|
+
msgpack_pack_int64(x, -(1LL<<31)); check_sbuffer(d280000000); /* d2 80 00 00 00 */
|
150
|
+
msgpack_pack_int64(x, -0x8001); check_sbuffer(d2ffff7fff); /* d2 ff ff 7f ff */
|
151
|
+
msgpack_pack_int64(x, -0x8000); check_sbuffer(d18000); /* d1 80 00 */
|
152
|
+
msgpack_pack_int64(x, -0x81); check_sbuffer(d1ff7f); /* d1 ff 7f */
|
153
|
+
msgpack_pack_int64(x, -0x80); check_sbuffer(d080); /* d0 80 */
|
154
|
+
msgpack_pack_int64(x, -0x21); check_sbuffer(d0df); /* d0 df */
|
155
|
+
msgpack_pack_int64(x, -0x20); check_sbuffer(e0); /* e0 */
|
156
|
+
msgpack_pack_int64(x, -0x1); check_sbuffer(ff); /* ff */
|
157
|
+
msgpack_pack_int64(x, 0); check_sbuffer(00); /* 00 */
|
158
|
+
msgpack_pack_int64(x, 0x7F); check_sbuffer(7f); /* 7f */
|
159
|
+
msgpack_pack_int64(x, 0x80); check_sbuffer(cc80); /* cc 80 */
|
160
|
+
msgpack_pack_int64(x, 0xFF); check_sbuffer(ccff); /* cc ff */
|
161
|
+
msgpack_pack_int64(x, 0x100); check_sbuffer(cd0100); /* cd 01 00 */
|
162
|
+
msgpack_pack_int64(x, 0xFFFF); check_sbuffer(cdffff); /* cd ff ff */
|
163
|
+
msgpack_pack_int64(x, 0x10000); check_sbuffer(ce00010000); /* ce 00 01 00 00 */
|
164
|
+
msgpack_pack_int64(x, 0xFFFFFFFF); check_sbuffer(ceffffffff); /* ce ff ff ff ff */
|
165
|
+
msgpack_pack_int64(x, 0x100000000); check_sbuffer(cf0000000100000000); /* cf 00 00 00 01 00 00 00 00 */
|
166
|
+
msgpack_pack_int64(x, 0x7FFFFFFFFFFFFFFF); check_sbuffer(cf7fffffffffffffff); /* cf 7f ff ff ff ff ff ff ff */
|
167
|
+
|
168
|
+
msgpack_pack_nil(x); check_sbuffer(c0); /* c0 */
|
169
|
+
msgpack_pack_false(x); check_sbuffer(c2); /* c2 */
|
170
|
+
msgpack_pack_true(x); check_sbuffer(c3); /* c3 */
|
171
|
+
|
172
|
+
msgpack_pack_float(x, 1.0); check_sbuffer(ca3f800000); /* ca 3f 80 00 00 */
|
173
|
+
msgpack_pack_double(x, 1.0); check_sbuffer(cb3ff0000000000000); /* cb 3f f0 00 00 00 00 00 00 */
|
174
|
+
|
175
|
+
msgpack_pack_unsigned_char(x, UINT8_MAX); /* same as msgpack_pack_uint8() */
|
176
|
+
msgpack_pack_unsigned_short(x, (unsigned short)UINT64_MAX);
|
177
|
+
msgpack_pack_unsigned_int(x, (unsigned int)UINT64_MAX);
|
178
|
+
msgpack_pack_unsigned_long(x, (unsigned long)UINT64_MAX);
|
179
|
+
msgpack_pack_unsigned_long_long(x, (unsigned long long)UINT64_MAX);
|
180
|
+
|
181
|
+
msgpack_pack_signed_char(x, INT8_MAX); /* same as msgpack_pack_int8() */
|
182
|
+
|
183
|
+
#define check_sbuffer_n(b) \
|
184
|
+
do { \
|
185
|
+
size_t len = strlen(#b); \
|
186
|
+
assert(bytesncmp(sbuf.data + offset, #b, len) == 0); \
|
187
|
+
offset = sbuf.size; \
|
188
|
+
} while (0)
|
189
|
+
|
190
|
+
#define fill_str(n) msgpack_pack_str_body(x, data, n)
|
191
|
+
|
192
|
+
offset = sbuf.size;
|
193
|
+
msgpack_pack_str(x, 0); /* "" */ check_sbuffer(a0); /* a0 */
|
194
|
+
msgpack_pack_str(x, 31);
|
195
|
+
fill_str(31); check_sbuffer_n(bf); /* bf ... */
|
196
|
+
msgpack_pack_str(x, 32);
|
197
|
+
fill_str(32); check_sbuffer_n(d920); /* d9 20 ... */
|
198
|
+
msgpack_pack_str(x, 255);
|
199
|
+
fill_str(255); check_sbuffer_n(d9ff); /* d9 ff ... */
|
200
|
+
msgpack_pack_str(x, 256);
|
201
|
+
fill_str(256); check_sbuffer_n(da0100); /* da 01 00 ... */
|
202
|
+
msgpack_pack_str(x, 65535);
|
203
|
+
fill_str(65535); check_sbuffer_n(daffff); /* da ff ff ... */
|
204
|
+
msgpack_pack_str(x, 65536);
|
205
|
+
fill_str(65536); check_sbuffer_n(db00010000); /* db 00 01 00 00 ... */
|
206
|
+
|
207
|
+
#define fill_map(n) \
|
208
|
+
do { \
|
209
|
+
size_t i = 0; \
|
210
|
+
for (; i < n * 2; i++) { msgpack_pack_int8(x, 0x1); } \
|
211
|
+
} while (0);
|
212
|
+
|
213
|
+
msgpack_pack_map(x, 0); /* {} */ check_sbuffer(80); /* 80 */
|
214
|
+
msgpack_pack_map(x, 1);
|
215
|
+
fill_map(1); check_sbuffer_n(81); /* 81 ... */
|
216
|
+
msgpack_pack_map(x, 15);
|
217
|
+
fill_map(15); check_sbuffer_n(8f); /* 8f ... */
|
218
|
+
msgpack_pack_map(x, 16);
|
219
|
+
fill_map(16); check_sbuffer_n(de0010); /* de 00 10 ... */
|
220
|
+
msgpack_pack_map(x, 65535);
|
221
|
+
fill_map(65535); check_sbuffer_n(deffff); /* de ff ff ... */
|
222
|
+
msgpack_pack_map(x, 65536);
|
223
|
+
fill_map(65536); check_sbuffer_n(df00010000); /* df 00 01 00 00 ... */
|
224
|
+
|
225
|
+
#define fill_array(n) \
|
226
|
+
do { \
|
227
|
+
size_t i = 0; \
|
228
|
+
for (; i < n; i++) { msgpack_pack_int8(x, 0x1); } \
|
229
|
+
} while (0);
|
230
|
+
|
231
|
+
msgpack_pack_array(x, 0); /* [] */ check_sbuffer(90); /* 90 */
|
232
|
+
msgpack_pack_array(x, 1);
|
233
|
+
fill_array(1); check_sbuffer_n(91); /* 91 ... */
|
234
|
+
msgpack_pack_array(x, 15);
|
235
|
+
fill_array(15); check_sbuffer_n(9f); /* 9f ... */
|
236
|
+
msgpack_pack_array(x, 16);
|
237
|
+
fill_array(16); check_sbuffer_n(dc0010); /* dc 00 10 ... */
|
238
|
+
msgpack_pack_array(x, 65535);
|
239
|
+
fill_array(65535); check_sbuffer_n(dcffff); /* dc ff ff ... */
|
240
|
+
msgpack_pack_array(x, 65536);
|
241
|
+
fill_array(65536); check_sbuffer_n(dd00010000); /* dd 00 01 00 00 ... */
|
242
|
+
|
243
|
+
#define fill_bin(n) msgpack_pack_bin_body(x, data, n)
|
244
|
+
|
245
|
+
msgpack_pack_bin(x, 0); check_sbuffer(c400); /* c4 00 */
|
246
|
+
msgpack_pack_bin(x, 1);
|
247
|
+
fill_bin(1); check_sbuffer_n(c401); /* c4 01 ... */
|
248
|
+
msgpack_pack_bin(x, 255);
|
249
|
+
fill_bin(255); check_sbuffer_n(c4ff); /* c4 ff ... */
|
250
|
+
msgpack_pack_bin(x, 256);
|
251
|
+
fill_bin(256); check_sbuffer_n(c50100); /* c5 01 00 ... */
|
252
|
+
msgpack_pack_bin(x, 65535);
|
253
|
+
fill_bin(65535); check_sbuffer_n(c5ffff); /* c5 ff ff ... */
|
254
|
+
msgpack_pack_bin(x, 65536);
|
255
|
+
fill_bin(65536); check_sbuffer_n(c600010000); /* c6 00 01 00 00 ... */
|
256
|
+
|
257
|
+
#define fill_ext(n) msgpack_pack_ext_body(x, data, n)
|
258
|
+
|
259
|
+
msgpack_pack_ext(x, 1, 0x7F);
|
260
|
+
fill_ext(1); check_sbuffer_n(d47f); /* d4 7f ... */
|
261
|
+
msgpack_pack_ext(x, 2, 0x7F);
|
262
|
+
fill_ext(2); check_sbuffer_n(d57f); /* d5 7f ... */
|
263
|
+
msgpack_pack_ext(x, 4, 0x7F);
|
264
|
+
fill_ext(4); check_sbuffer_n(d67f); /* d6 7f ... */
|
265
|
+
msgpack_pack_ext(x, 8, 0x7F);
|
266
|
+
fill_ext(8); check_sbuffer_n(d77f); /* d7 7f ... */
|
267
|
+
msgpack_pack_ext(x, 16, 0x7F);
|
268
|
+
fill_ext(16); check_sbuffer_n(d87f); /* d8 7f ... */
|
269
|
+
|
270
|
+
msgpack_pack_ext(x, 0, 0x7F); check_sbuffer(c7007f); /* c7 00 7f */
|
271
|
+
msgpack_pack_ext(x, 3, 0x7F);
|
272
|
+
fill_ext(3); check_sbuffer_n(c7037f); /* c7 03 7f */
|
273
|
+
msgpack_pack_ext(x, 5, 0x7F);
|
274
|
+
fill_ext(5); check_sbuffer_n(c7057f); /* c7 05 7f */
|
275
|
+
msgpack_pack_ext(x, 17, 0x7F);
|
276
|
+
fill_ext(17); check_sbuffer_n(c7117f); /* c7 11 7f */
|
277
|
+
msgpack_pack_ext(x, 255, 0x7F);
|
278
|
+
fill_ext(255); check_sbuffer_n(c7ff7f); /* c7 ff 7f ... */
|
279
|
+
msgpack_pack_ext(x, 256, 0x7F);
|
280
|
+
fill_ext(256); check_sbuffer_n(c801007f); /* c8 01 00 7f ... */
|
281
|
+
msgpack_pack_ext(x, 65535, 0x7F);
|
282
|
+
fill_ext(65535); check_sbuffer_n(c8ffff7f); /* c8 ff ff 7f ... */
|
283
|
+
msgpack_pack_ext(x, 65536, 0x7F);
|
284
|
+
fill_ext(65536); check_sbuffer_n(c9000100007f); /* c9 00 01 00 00 7f ... */
|
285
|
+
|
286
|
+
msgpack_pack_timestamp(x, ts); check_sbuffer(d6ffffffffff); /* d6 ff ff ff ff ff */
|
287
|
+
msgpack_pack_timestamp(x, ts + 1); check_sbuffer(d7ff0000000100000000); /* d7 ff 00 00 00 01 00 00 00 00 */
|
288
|
+
msgpack_pack_timestamp(x, ts + 2); check_sbuffer(d7ff00000003ffffffff); /* d7 ff 00 00 00 03 ff ff ff ff */
|
289
|
+
msgpack_pack_timestamp(x, ts + 3); check_sbuffer(c70cff000000000000000400000000); /* c7 0c ff 00 00 00 00 00 00 00 04 00 00 00 00 */
|
290
|
+
msgpack_pack_timestamp(x, ts + 4); check_sbuffer(c70cffffffffff7fffffffffffffff); /* c7 0c ff ff ff ff ff 7f ff ff ff ff ff ff ff */
|
291
|
+
|
292
|
+
msgpack_sbuffer_destroy(&sbuf);
|
293
|
+
msgpack_packer_free(x);
|
294
|
+
|
295
|
+
return 0;
|
296
|
+
}
|
@@ -0,0 +1,419 @@
|
|
1
|
+
#include <stdio.h>
|
2
|
+
#include <stdlib.h>
|
3
|
+
#include <string.h>
|
4
|
+
#include <math.h>
|
5
|
+
#include <msgpack.h>
|
6
|
+
#include <cjson/cJSON.h>
|
7
|
+
|
8
|
+
#if defined(_MSC_VER)
|
9
|
+
#if _MSC_VER >= 1800
|
10
|
+
#include <inttypes.h>
|
11
|
+
#else
|
12
|
+
#define PRIu64 "I64u"
|
13
|
+
#define PRIi64 "I64i"
|
14
|
+
#define PRIi8 "i"
|
15
|
+
#endif
|
16
|
+
#else
|
17
|
+
#include <inttypes.h>
|
18
|
+
#endif
|
19
|
+
|
20
|
+
#if defined(_KERNEL_MODE)
|
21
|
+
# undef snprintf
|
22
|
+
# define snprintf _snprintf
|
23
|
+
#endif
|
24
|
+
|
25
|
+
#define DEBUG(...) printf(__VA_ARGS__)
|
26
|
+
|
27
|
+
static char *format_string(const char *input)
|
28
|
+
{
|
29
|
+
const char *inptr;
|
30
|
+
char *output;
|
31
|
+
char *outptr;
|
32
|
+
size_t output_length = 0;
|
33
|
+
/* numbers of additional characters*/
|
34
|
+
size_t escape_characters = 0;
|
35
|
+
|
36
|
+
if (input == NULL) {
|
37
|
+
return NULL;
|
38
|
+
}
|
39
|
+
|
40
|
+
for (inptr = input; *inptr; inptr++) {
|
41
|
+
switch (*inptr) {
|
42
|
+
case '\"':
|
43
|
+
case '\\':
|
44
|
+
case '\b':
|
45
|
+
case '\f':
|
46
|
+
case '\n':
|
47
|
+
case '\r':
|
48
|
+
case '\t':
|
49
|
+
/* one character escape sequence */
|
50
|
+
escape_characters++;
|
51
|
+
break;
|
52
|
+
default:
|
53
|
+
break;
|
54
|
+
}
|
55
|
+
}
|
56
|
+
output_length = (size_t)(inptr - input) + escape_characters;
|
57
|
+
|
58
|
+
output = (char *)malloc(output_length + 1);
|
59
|
+
if (output == NULL) {
|
60
|
+
return NULL;
|
61
|
+
}
|
62
|
+
|
63
|
+
/* no add characters*/
|
64
|
+
if (escape_characters == 0) {
|
65
|
+
memcpy(output, input, output_length);
|
66
|
+
output[output_length] = '\0';
|
67
|
+
return output;
|
68
|
+
}
|
69
|
+
|
70
|
+
outptr = output;
|
71
|
+
/* copy string */
|
72
|
+
for (inptr = input; *inptr != '\0'; (void)inptr++, outptr++) {
|
73
|
+
if ((*inptr > 31) && (*inptr != '\"') && (*inptr != '\\')) {
|
74
|
+
/* normal character, copy */
|
75
|
+
*outptr = *inptr;
|
76
|
+
} else {
|
77
|
+
/* character needs to be escaped */
|
78
|
+
*outptr++ = '\\';
|
79
|
+
switch (*inptr)
|
80
|
+
{
|
81
|
+
case '\\':
|
82
|
+
*outptr = '\\';
|
83
|
+
break;
|
84
|
+
case '\"':
|
85
|
+
*outptr = '\"';
|
86
|
+
break;
|
87
|
+
case '\b':
|
88
|
+
*outptr = 'b';
|
89
|
+
break;
|
90
|
+
case '\f':
|
91
|
+
*outptr = 'f';
|
92
|
+
break;
|
93
|
+
case '\n':
|
94
|
+
*outptr = 'n';
|
95
|
+
break;
|
96
|
+
case '\r':
|
97
|
+
*outptr = 'r';
|
98
|
+
break;
|
99
|
+
case '\t':
|
100
|
+
*outptr = 't';
|
101
|
+
break;
|
102
|
+
default:
|
103
|
+
break;
|
104
|
+
}
|
105
|
+
}
|
106
|
+
}
|
107
|
+
|
108
|
+
output[output_length] = '\0';
|
109
|
+
return output;
|
110
|
+
}
|
111
|
+
|
112
|
+
/*
|
113
|
+
* Pack cJSON object.
|
114
|
+
* return 0 success, others failed
|
115
|
+
*/
|
116
|
+
static int parse_cjson_object(msgpack_packer *pk, cJSON *node)
|
117
|
+
{
|
118
|
+
int ret, sz, i;
|
119
|
+
cJSON *child;
|
120
|
+
char *strvalue;
|
121
|
+
|
122
|
+
if (node == NULL) {
|
123
|
+
return -1;
|
124
|
+
}
|
125
|
+
|
126
|
+
switch (node->type & 0xFF) {
|
127
|
+
case cJSON_Invalid:
|
128
|
+
return -1;
|
129
|
+
|
130
|
+
case cJSON_False:
|
131
|
+
return msgpack_pack_false(pk);
|
132
|
+
|
133
|
+
case cJSON_True:
|
134
|
+
return msgpack_pack_true(pk);
|
135
|
+
|
136
|
+
case cJSON_NULL:
|
137
|
+
return msgpack_pack_nil(pk);
|
138
|
+
|
139
|
+
case cJSON_String:
|
140
|
+
strvalue = format_string(node->valuestring);
|
141
|
+
if (strvalue != NULL) {
|
142
|
+
ret = msgpack_pack_str_with_body(pk, strvalue, strlen(strvalue));
|
143
|
+
free(strvalue);
|
144
|
+
return ret;
|
145
|
+
} else {
|
146
|
+
return -1;
|
147
|
+
}
|
148
|
+
|
149
|
+
case cJSON_Number:
|
150
|
+
if (isnan(node->valuedouble) || isinf(node->valuedouble)) {
|
151
|
+
ret = msgpack_pack_nil(pk);
|
152
|
+
} else if (node->valuedouble == node->valueint) {
|
153
|
+
ret = msgpack_pack_int(pk, node->valueint);
|
154
|
+
} else {
|
155
|
+
ret = msgpack_pack_double(pk, node->valuedouble);
|
156
|
+
}
|
157
|
+
return ret;
|
158
|
+
|
159
|
+
case cJSON_Array:
|
160
|
+
sz = cJSON_GetArraySize(node);
|
161
|
+
if (msgpack_pack_array(pk, sz) != 0) {
|
162
|
+
return -1;
|
163
|
+
}
|
164
|
+
for (i = 0; i < sz; i++) {
|
165
|
+
if (parse_cjson_object(pk, cJSON_GetArrayItem(node, i)) != 0) {
|
166
|
+
return -1;
|
167
|
+
}
|
168
|
+
}
|
169
|
+
return 0;
|
170
|
+
|
171
|
+
case cJSON_Object:
|
172
|
+
sz = cJSON_GetArraySize(node);
|
173
|
+
if (msgpack_pack_map(pk, sz) != 0) {
|
174
|
+
return -1;
|
175
|
+
}
|
176
|
+
for (i = 0; i < sz; i++) {
|
177
|
+
child = cJSON_GetArrayItem(node, i);
|
178
|
+
strvalue = format_string(child->string);
|
179
|
+
if (strvalue == NULL) {
|
180
|
+
return -1;
|
181
|
+
}
|
182
|
+
|
183
|
+
if (msgpack_pack_str_with_body(pk, strvalue, strlen(strvalue)) != 0) {
|
184
|
+
free(strvalue);
|
185
|
+
return -1;
|
186
|
+
}
|
187
|
+
free(strvalue);
|
188
|
+
if (parse_cjson_object(pk, child) != 0) {
|
189
|
+
return -1;
|
190
|
+
}
|
191
|
+
}
|
192
|
+
return 0;
|
193
|
+
|
194
|
+
default:
|
195
|
+
DEBUG("unknown type.\n");
|
196
|
+
return -1;
|
197
|
+
}
|
198
|
+
return 0;
|
199
|
+
}
|
200
|
+
|
201
|
+
/*
|
202
|
+
* Pack json string to msgpack format data.
|
203
|
+
* return 0 success, -1 failed
|
204
|
+
*/
|
205
|
+
int msgpack_pack_jsonstr(msgpack_packer *pk, const char *jsonstr)
|
206
|
+
{
|
207
|
+
int status;
|
208
|
+
cJSON *node;
|
209
|
+
const char *end = NULL;
|
210
|
+
|
211
|
+
if (pk == NULL || jsonstr == NULL) {
|
212
|
+
return -1;
|
213
|
+
}
|
214
|
+
|
215
|
+
node = cJSON_ParseWithOpts(jsonstr, &end, 1);
|
216
|
+
if (node == NULL) {
|
217
|
+
DEBUG("parse error: unexpected string `%s`\n", end);
|
218
|
+
return -1;
|
219
|
+
}
|
220
|
+
status = parse_cjson_object(pk, node);
|
221
|
+
cJSON_Delete(node);
|
222
|
+
|
223
|
+
return status;
|
224
|
+
}
|
225
|
+
|
226
|
+
static int bytes_contain_zero(const msgpack_object_bin *bin)
|
227
|
+
{
|
228
|
+
size_t i;
|
229
|
+
for (i = 0; i < bin->size; i++) {
|
230
|
+
if (bin->ptr[i] == 0) {
|
231
|
+
return 1;
|
232
|
+
}
|
233
|
+
}
|
234
|
+
return 0;
|
235
|
+
}
|
236
|
+
|
237
|
+
#define PRINT_JSONSTR_CALL(ret, func, aux_buffer, aux_buffer_size, ...) \
|
238
|
+
ret = func(aux_buffer, aux_buffer_size, __VA_ARGS__); \
|
239
|
+
if (ret <= 0) \
|
240
|
+
return ret; \
|
241
|
+
if (ret > aux_buffer_size) \
|
242
|
+
return 0; \
|
243
|
+
aux_buffer = aux_buffer + ret; \
|
244
|
+
aux_buffer_size = aux_buffer_size - ret
|
245
|
+
|
246
|
+
/*
|
247
|
+
* Convert msgpack format data to json string.
|
248
|
+
* return >0: success, 0: length of buffer not enough, -1: failed
|
249
|
+
*/
|
250
|
+
size_t msgpack_object_print_jsonstr(char *buffer, size_t length, const msgpack_object o)
|
251
|
+
{
|
252
|
+
char *aux_buffer = buffer;
|
253
|
+
size_t aux_buffer_size = length;
|
254
|
+
size_t ret;
|
255
|
+
|
256
|
+
switch (o.type) {
|
257
|
+
case MSGPACK_OBJECT_NIL:
|
258
|
+
PRINT_JSONSTR_CALL(ret, snprintf, aux_buffer, aux_buffer_size, "null");
|
259
|
+
break;
|
260
|
+
|
261
|
+
case MSGPACK_OBJECT_BOOLEAN:
|
262
|
+
PRINT_JSONSTR_CALL(ret, snprintf, aux_buffer, aux_buffer_size, (o.via.boolean ? "true" : "false"));
|
263
|
+
break;
|
264
|
+
|
265
|
+
case MSGPACK_OBJECT_POSITIVE_INTEGER:
|
266
|
+
#if defined(PRIu64)
|
267
|
+
PRINT_JSONSTR_CALL(ret, snprintf, aux_buffer, aux_buffer_size, "%" PRIu64, o.via.u64);
|
268
|
+
#else
|
269
|
+
if (o.via.u64 > ULONG_MAX) {
|
270
|
+
PRINT_JSONSTR_CALL(ret, snprintf, aux_buffer, aux_buffer_size, "%lu", ULONG_MAX);
|
271
|
+
} else {
|
272
|
+
PRINT_JSONSTR_CALL(ret, snprintf, aux_buffer, aux_buffer_size, "%lu", (unsigned long)o.via.u64);
|
273
|
+
}
|
274
|
+
#endif
|
275
|
+
break;
|
276
|
+
|
277
|
+
case MSGPACK_OBJECT_NEGATIVE_INTEGER:
|
278
|
+
#if defined(PRIi64)
|
279
|
+
PRINT_JSONSTR_CALL(ret, snprintf, aux_buffer, aux_buffer_size, "%" PRIi64, o.via.i64);
|
280
|
+
#else
|
281
|
+
if (o.via.i64 > LONG_MAX) {
|
282
|
+
PRINT_JSONSTR_CALL(ret, snprintf, aux_buffer, aux_buffer_size, "%ld", LONG_MAX);
|
283
|
+
} else if (o.via.i64 < LONG_MIN) {
|
284
|
+
PRINT_JSONSTR_CALL(ret, snprintf, aux_buffer, aux_buffer_size, "%ld", LONG_MIN);
|
285
|
+
} else {
|
286
|
+
PRINT_JSONSTR_CALL(ret, snprintf, aux_buffer, aux_buffer_size, "%ld", (signed long)o.via.i64);
|
287
|
+
}
|
288
|
+
#endif
|
289
|
+
break;
|
290
|
+
|
291
|
+
case MSGPACK_OBJECT_FLOAT32:
|
292
|
+
case MSGPACK_OBJECT_FLOAT64:
|
293
|
+
PRINT_JSONSTR_CALL(ret, snprintf, aux_buffer, aux_buffer_size, "%f", o.via.f64);
|
294
|
+
break;
|
295
|
+
|
296
|
+
case MSGPACK_OBJECT_STR:
|
297
|
+
PRINT_JSONSTR_CALL(ret, snprintf, aux_buffer, aux_buffer_size, "\"%.*s\"", (int)o.via.str.size, o.via.str.ptr);
|
298
|
+
break;
|
299
|
+
|
300
|
+
case MSGPACK_OBJECT_BIN:
|
301
|
+
if (bytes_contain_zero(&o.via.bin)) {
|
302
|
+
DEBUG("the value contains zero\n");
|
303
|
+
return -1;
|
304
|
+
}
|
305
|
+
PRINT_JSONSTR_CALL(ret, snprintf, aux_buffer, aux_buffer_size, "\"%.*s\"", (int)o.via.bin.size, o.via.bin.ptr);
|
306
|
+
break;
|
307
|
+
|
308
|
+
case MSGPACK_OBJECT_EXT:
|
309
|
+
DEBUG("not support type: MSGPACK_OBJECT_EXT.\n");
|
310
|
+
return -1;
|
311
|
+
|
312
|
+
case MSGPACK_OBJECT_ARRAY:
|
313
|
+
PRINT_JSONSTR_CALL(ret, snprintf, aux_buffer, aux_buffer_size, "[");
|
314
|
+
if (o.via.array.size != 0) {
|
315
|
+
msgpack_object *p = o.via.array.ptr;
|
316
|
+
msgpack_object *const pend = o.via.array.ptr + o.via.array.size;
|
317
|
+
PRINT_JSONSTR_CALL(ret, msgpack_object_print_jsonstr, aux_buffer, aux_buffer_size, *p);
|
318
|
+
++p;
|
319
|
+
for (; p < pend; ++p) {
|
320
|
+
PRINT_JSONSTR_CALL(ret, snprintf, aux_buffer, aux_buffer_size, ",");
|
321
|
+
PRINT_JSONSTR_CALL(ret, msgpack_object_print_jsonstr, aux_buffer, aux_buffer_size, *p);
|
322
|
+
}
|
323
|
+
}
|
324
|
+
PRINT_JSONSTR_CALL(ret, snprintf, aux_buffer, aux_buffer_size, "]");
|
325
|
+
break;
|
326
|
+
|
327
|
+
case MSGPACK_OBJECT_MAP:
|
328
|
+
PRINT_JSONSTR_CALL(ret, snprintf, aux_buffer, aux_buffer_size, "{");
|
329
|
+
if (o.via.map.size != 0) {
|
330
|
+
msgpack_object_kv *p = o.via.map.ptr;
|
331
|
+
msgpack_object_kv *const pend = o.via.map.ptr + o.via.map.size;
|
332
|
+
|
333
|
+
for (; p < pend; ++p) {
|
334
|
+
if (p->key.type != MSGPACK_OBJECT_STR) {
|
335
|
+
DEBUG("the key of in a map must be string.\n");
|
336
|
+
return -1;
|
337
|
+
}
|
338
|
+
if (p != o.via.map.ptr) {
|
339
|
+
PRINT_JSONSTR_CALL(ret, snprintf, aux_buffer, aux_buffer_size, ",");
|
340
|
+
}
|
341
|
+
PRINT_JSONSTR_CALL(ret, msgpack_object_print_jsonstr, aux_buffer, aux_buffer_size, p->key);
|
342
|
+
PRINT_JSONSTR_CALL(ret, snprintf, aux_buffer, aux_buffer_size, ":");
|
343
|
+
PRINT_JSONSTR_CALL(ret, msgpack_object_print_jsonstr, aux_buffer, aux_buffer_size, p->val);
|
344
|
+
}
|
345
|
+
}
|
346
|
+
PRINT_JSONSTR_CALL(ret, snprintf, aux_buffer, aux_buffer_size, "}");
|
347
|
+
break;
|
348
|
+
|
349
|
+
default:
|
350
|
+
DEBUG("unknown type.\n");
|
351
|
+
return -1;
|
352
|
+
}
|
353
|
+
|
354
|
+
return length - aux_buffer_size;
|
355
|
+
}
|
356
|
+
#undef PRINT_JSONSTR_CALL
|
357
|
+
|
358
|
+
static void test(const char *name, const char *input, const char *expect)
|
359
|
+
{
|
360
|
+
msgpack_sbuffer sbuf;
|
361
|
+
{
|
362
|
+
// pack
|
363
|
+
msgpack_packer pk;
|
364
|
+
msgpack_sbuffer_init(&sbuf);
|
365
|
+
msgpack_packer_init(&pk, &sbuf, msgpack_sbuffer_write);
|
366
|
+
if (msgpack_pack_jsonstr(&pk, input) < 0) {
|
367
|
+
msgpack_sbuffer_destroy(&sbuf);
|
368
|
+
printf("%s: invalid json string.\n", name);
|
369
|
+
return;
|
370
|
+
}
|
371
|
+
}
|
372
|
+
|
373
|
+
{
|
374
|
+
// unpack
|
375
|
+
#define MAX_JSONLEN 1024
|
376
|
+
msgpack_zone z;
|
377
|
+
msgpack_object obj;
|
378
|
+
size_t jsonstrlen = MAX_JSONLEN - 1;
|
379
|
+
char jsonparsed[MAX_JSONLEN];
|
380
|
+
|
381
|
+
msgpack_zone_init(&z, jsonstrlen);
|
382
|
+
msgpack_unpack(sbuf.data, sbuf.size, NULL, &z, &obj);
|
383
|
+
jsonstrlen = msgpack_object_print_jsonstr(jsonparsed, jsonstrlen, obj);
|
384
|
+
jsonparsed[jsonstrlen] = '\0';
|
385
|
+
|
386
|
+
//compare input and output
|
387
|
+
if (expect == NULL) {
|
388
|
+
expect = input;
|
389
|
+
}
|
390
|
+
if (strcmp(expect, jsonparsed) == 0) {
|
391
|
+
printf("%s: ok\n", name);
|
392
|
+
} else {
|
393
|
+
printf("%s: failed\n", name);
|
394
|
+
}
|
395
|
+
msgpack_zone_destroy(&z);
|
396
|
+
}
|
397
|
+
msgpack_sbuffer_destroy(&sbuf);
|
398
|
+
}
|
399
|
+
|
400
|
+
int main()
|
401
|
+
{
|
402
|
+
test("null", "null", NULL);
|
403
|
+
test("boolean", "false", NULL);
|
404
|
+
test("single string", "\"frsyuki\"", NULL);
|
405
|
+
test("single number", "\"100\"", NULL);
|
406
|
+
test("space", "[{\"valuespace\":\"\",\"\":\"keyspace\"},\"\",[\"\"]]", NULL);
|
407
|
+
test("quote", "\"My name is Tom (\\\"Bee\\\") Kobe\"", NULL);
|
408
|
+
test("escape", "\"\\\\b\\f\\n\\r\\t\"", NULL);
|
409
|
+
test("escape2", "\"\b\f\n\r\t\"", "\"\\b\\f\\n\\r\\t\"");
|
410
|
+
test("map", "{\"name\":\"Tom (\\\"Bee\\\") Kobe\",\"type\":\"image\",\"data\":{\"width\":360,\"height\":460,\"title\":\"View me\",\"ips\":[116,943,256,711]}}", NULL);
|
411
|
+
test("array", "[\"Sunday\",\"Monday\",\"Tuesday\",\"Wednesday\",\"Thursday\",\"Friday\",\"Saturday\"]", NULL);
|
412
|
+
test("number array", "[[101,121,-33],[119,911,171],[0,2,-3]]", NULL);
|
413
|
+
test("mix array", "[{\"name\":\"Tom\",\"city\":\"London\",\"country\":\"UK\",\"longitude\":23},{\"name\":\"Jack\",\"city\":\"Birmingham\",\"country\":\"UK\",\"longitude\":-22}]", NULL);
|
414
|
+
test("unicode", "\"\\u5C71\\u5DDD\\u7570\\u57DF\\u98A8\\u6708\\u540C\\u5929\"", "\"山川異域風月同天\"");
|
415
|
+
test("utf8", "\"山川異域風月同天\"", NULL);
|
416
|
+
test("double", "12.34", "12.340000");
|
417
|
+
|
418
|
+
return 0;
|
419
|
+
}
|