script_core 0.2.3 → 0.3.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.rubocop.yml +35 -57
- data/.ruby-version +1 -1
- data/Gemfile +2 -2
- data/README.md +7 -1
- data/ext/enterprise_script_service/Rakefile +1 -1
- 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 +149 -0
- data/ext/enterprise_script_service/mruby/.github/workflows/codeql-analysis.yml +55 -0
- data/ext/enterprise_script_service/mruby/.github/workflows/lint.yml +23 -0
- data/ext/enterprise_script_service/mruby/.github/workflows/oss-fuzz.yml +27 -0
- data/ext/enterprise_script_service/mruby/.github/workflows/spell-checker.yml +17 -0
- data/ext/enterprise_script_service/mruby/.gitignore +3 -0
- data/ext/enterprise_script_service/mruby/.gitlab-ci.yml +3 -3
- data/ext/enterprise_script_service/mruby/.markdownlint.yml +16 -0
- data/ext/enterprise_script_service/mruby/.travis.yml +7 -10
- data/ext/enterprise_script_service/mruby/.yamllint +8 -0
- data/ext/enterprise_script_service/mruby/AUTHORS +4 -0
- data/ext/enterprise_script_service/mruby/CODEOWNERS +1 -0
- data/ext/enterprise_script_service/mruby/CONTRIBUTING.md +6 -13
- data/ext/enterprise_script_service/mruby/Doxyfile +4 -4
- data/ext/enterprise_script_service/mruby/LICENSE +1 -1
- data/ext/enterprise_script_service/mruby/Makefile +1 -1
- data/ext/enterprise_script_service/mruby/README.md +5 -11
- data/ext/enterprise_script_service/mruby/Rakefile +18 -108
- data/ext/enterprise_script_service/mruby/TODO.md +17 -0
- data/ext/enterprise_script_service/mruby/appveyor.yml +29 -26
- data/ext/enterprise_script_service/mruby/benchmark/bm_ao_render.rb +1 -1
- data/ext/enterprise_script_service/mruby/build_config.rb +9 -152
- data/ext/enterprise_script_service/mruby/{examples/targets/build_config_ArduinoDue.rb → build_config/ArduinoDue.rb} +4 -21
- data/ext/enterprise_script_service/mruby/{examples/targets/build_config_IntelEdison.rb → build_config/IntelEdison.rb} +4 -4
- data/ext/enterprise_script_service/mruby/{examples/targets/build_config_IntelGalileo.rb → build_config/IntelGalileo.rb} +3 -20
- data/ext/enterprise_script_service/mruby/{examples/targets/build_config_RX630.rb → build_config/RX630.rb} +4 -21
- data/ext/enterprise_script_service/mruby/build_config/android_arm64-v8a.rb +11 -0
- data/ext/enterprise_script_service/mruby/build_config/android_armeabi.rb +11 -0
- data/ext/enterprise_script_service/mruby/{examples/targets/build_config_android_armeabi_v7a_neon_hard.rb → build_config/android_armeabi_v7a_neon_hard.rb} +0 -15
- data/ext/enterprise_script_service/mruby/build_config/bench.rb +11 -0
- data/ext/enterprise_script_service/mruby/build_config/boxing.rb +21 -0
- data/ext/enterprise_script_service/mruby/{examples/targets/build_config_chipKITMax32.rb → build_config/chipKITMax32.rb} +4 -21
- data/ext/enterprise_script_service/mruby/{appveyor_config.rb → build_config/ci/gcc-clang.rb} +11 -8
- data/ext/enterprise_script_service/mruby/build_config/ci/msvc.rb +20 -0
- data/ext/enterprise_script_service/mruby/build_config/clang-asan.rb +11 -0
- data/ext/enterprise_script_service/mruby/build_config/cross-32bit.rb +14 -0
- data/ext/enterprise_script_service/mruby/build_config/default.rb +80 -0
- data/ext/enterprise_script_service/mruby/build_config/dreamcast_shelf.rb +94 -0
- data/ext/enterprise_script_service/mruby/build_config/gameboyadvance.rb +73 -0
- data/ext/enterprise_script_service/mruby/build_config/host-cxx.rb +12 -0
- data/ext/enterprise_script_service/mruby/build_config/host-debug.rb +20 -0
- data/ext/enterprise_script_service/mruby/build_config/host-gprof.rb +14 -0
- data/ext/enterprise_script_service/mruby/build_config/host-m32.rb +15 -0
- data/ext/enterprise_script_service/mruby/build_config/host-shared.rb +36 -0
- data/ext/enterprise_script_service/mruby/build_config/mrbc.rb +11 -0
- data/ext/enterprise_script_service/mruby/build_config/no-float.rb +17 -0
- data/ext/enterprise_script_service/mruby/doc/guides/compile.md +142 -49
- data/ext/enterprise_script_service/mruby/doc/guides/debugger.md +5 -4
- data/ext/enterprise_script_service/mruby/doc/guides/gc-arena-howto.md +1 -1
- data/ext/enterprise_script_service/mruby/doc/guides/mrbconf.md +53 -30
- data/ext/enterprise_script_service/mruby/doc/guides/mrbgems.md +31 -14
- data/ext/enterprise_script_service/mruby/doc/guides/symbol.md +83 -0
- data/ext/enterprise_script_service/mruby/doc/limitations.md +35 -36
- data/ext/enterprise_script_service/mruby/doc/mruby3.md +163 -0
- data/ext/enterprise_script_service/mruby/doc/opcode.md +102 -103
- data/ext/enterprise_script_service/mruby/examples/mrbgems/c_and_ruby_extension_example/mrblib/example.rb +1 -1
- data/ext/enterprise_script_service/mruby/examples/mrbgems/c_and_ruby_extension_example/src/example.c +5 -1
- data/ext/enterprise_script_service/mruby/examples/mrbgems/c_extension_example/src/example.c +5 -1
- data/ext/enterprise_script_service/mruby/examples/mrbgems/ruby_extension_example/mrblib/example.rb +1 -1
- data/ext/enterprise_script_service/mruby/include/mrbconf.h +88 -66
- data/ext/enterprise_script_service/mruby/include/mruby.h +160 -104
- data/ext/enterprise_script_service/mruby/include/mruby/array.h +27 -6
- data/ext/enterprise_script_service/mruby/include/mruby/boxing_nan.h +80 -46
- data/ext/enterprise_script_service/mruby/include/mruby/boxing_no.h +8 -8
- data/ext/enterprise_script_service/mruby/include/mruby/boxing_word.h +76 -55
- data/ext/enterprise_script_service/mruby/include/mruby/class.h +10 -8
- data/ext/enterprise_script_service/mruby/include/mruby/common.h +14 -1
- data/ext/enterprise_script_service/mruby/include/mruby/compile.h +20 -6
- data/ext/enterprise_script_service/mruby/include/mruby/debug.h +2 -2
- data/ext/enterprise_script_service/mruby/include/mruby/dump.h +18 -52
- data/ext/enterprise_script_service/mruby/include/mruby/endian.h +44 -0
- data/ext/enterprise_script_service/mruby/include/mruby/error.h +39 -5
- data/ext/enterprise_script_service/mruby/include/mruby/gc.h +1 -0
- data/ext/enterprise_script_service/mruby/include/mruby/hash.h +33 -13
- data/ext/enterprise_script_service/mruby/include/mruby/irep.h +74 -14
- data/ext/enterprise_script_service/mruby/include/mruby/istruct.h +4 -1
- data/ext/enterprise_script_service/mruby/include/mruby/khash.h +19 -9
- data/ext/enterprise_script_service/mruby/include/mruby/numeric.h +37 -63
- data/ext/enterprise_script_service/mruby/include/mruby/opcode.h +1 -27
- data/ext/enterprise_script_service/mruby/include/mruby/ops.h +29 -24
- data/ext/enterprise_script_service/mruby/include/mruby/presym.h +40 -0
- data/ext/enterprise_script_service/mruby/include/mruby/presym/disable.h +70 -0
- data/ext/enterprise_script_service/mruby/include/mruby/presym/enable.h +37 -0
- data/ext/enterprise_script_service/mruby/include/mruby/presym/scanning.h +73 -0
- data/ext/enterprise_script_service/mruby/include/mruby/proc.h +93 -21
- data/ext/enterprise_script_service/mruby/include/mruby/string.h +12 -16
- data/ext/enterprise_script_service/mruby/include/mruby/throw.h +14 -3
- data/ext/enterprise_script_service/mruby/include/mruby/value.h +60 -59
- data/ext/enterprise_script_service/mruby/include/mruby/variable.h +1 -0
- data/ext/enterprise_script_service/mruby/include/mruby/version.h +25 -6
- data/ext/enterprise_script_service/mruby/lib/mruby/build.rb +198 -72
- data/ext/enterprise_script_service/mruby/lib/mruby/build/command.rb +71 -78
- data/ext/enterprise_script_service/mruby/lib/mruby/build/load_gems.rb +12 -10
- data/ext/enterprise_script_service/mruby/lib/{mruby-core-ext.rb → mruby/core_ext.rb} +10 -3
- data/ext/enterprise_script_service/mruby/lib/mruby/gem.rb +84 -32
- data/ext/enterprise_script_service/mruby/lib/mruby/lockfile.rb +1 -1
- data/ext/enterprise_script_service/mruby/lib/mruby/presym.rb +132 -0
- data/ext/enterprise_script_service/mruby/lib/mruby/source.rb +3 -1
- data/ext/enterprise_script_service/mruby/mrbgems/default-no-fpu.gembox +3 -0
- data/ext/enterprise_script_service/mruby/mrbgems/default-no-stdio.gembox +4 -0
- data/ext/enterprise_script_service/mruby/mrbgems/default.gembox +9 -81
- data/ext/enterprise_script_service/mruby/mrbgems/full-core.gembox +1 -4
- data/ext/enterprise_script_service/mruby/mrbgems/math.gembox +10 -0
- data/ext/enterprise_script_service/mruby/mrbgems/metaprog.gembox +15 -0
- data/ext/enterprise_script_service/mruby/mrbgems/mruby-array-ext/mrblib/array.rb +1 -32
- data/ext/enterprise_script_service/mruby/mrbgems/mruby-array-ext/src/array.c +10 -12
- 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 +30 -18
- data/ext/enterprise_script_service/mruby/mrbgems/mruby-bin-config/mruby-config +18 -8
- data/ext/enterprise_script_service/mruby/mrbgems/mruby-bin-debugger/bintest/mrdb.rb +3 -6
- data/ext/enterprise_script_service/mruby/mrbgems/mruby-bin-debugger/bintest/print.rb +10 -10
- data/ext/enterprise_script_service/mruby/mrbgems/mruby-bin-debugger/tools/mrdb/apibreak.c +14 -9
- data/ext/enterprise_script_service/mruby/mrbgems/mruby-bin-debugger/tools/mrdb/apiprint.c +3 -2
- data/ext/enterprise_script_service/mruby/mrbgems/mruby-bin-debugger/tools/mrdb/mrdb.c +4 -4
- data/ext/enterprise_script_service/mruby/mrbgems/mruby-bin-debugger/tools/mrdb/mrdb.h +2 -6
- data/ext/enterprise_script_service/mruby/mrbgems/mruby-bin-debugger/tools/mrdb/mrdbconf.h +6 -2
- data/ext/enterprise_script_service/mruby/mrbgems/mruby-bin-mirb/bintest/mirb.rb +23 -5
- data/ext/enterprise_script_service/mruby/mrbgems/mruby-bin-mirb/mrbgem.rake +11 -2
- data/ext/enterprise_script_service/mruby/mrbgems/mruby-bin-mirb/tools/mirb/mirb.c +46 -35
- data/ext/enterprise_script_service/mruby/mrbgems/{mruby-compiler → mruby-bin-mrbc}/bintest/mrbc.rb +0 -0
- data/ext/enterprise_script_service/mruby/mrbgems/mruby-bin-mrbc/mrbgem.rake +3 -4
- data/ext/enterprise_script_service/mruby/mrbgems/mruby-bin-mrbc/tools/mrbc/mrbc.c +41 -28
- data/ext/enterprise_script_service/mruby/mrbgems/mruby-bin-mruby/bintest/mruby.rb +25 -4
- data/ext/enterprise_script_service/mruby/mrbgems/mruby-bin-mruby/mrbgem.rake +1 -2
- data/ext/enterprise_script_service/mruby/mrbgems/mruby-bin-mruby/tools/mruby/mruby.c +26 -6
- data/ext/enterprise_script_service/mruby/mrbgems/mruby-bin-strip/bintest/mruby-strip.rb +1 -1
- 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-catch/mrbgem.rake +5 -0
- data/ext/enterprise_script_service/mruby/mrbgems/mruby-catch/mrblib/catch.rb +27 -0
- data/ext/enterprise_script_service/mruby/mrbgems/mruby-class-ext/src/class.c +7 -1
- data/ext/enterprise_script_service/mruby/mrbgems/mruby-compiler/core/codegen.c +495 -436
- data/ext/enterprise_script_service/mruby/mrbgems/mruby-compiler/core/keywords +5 -0
- data/ext/enterprise_script_service/mruby/mrbgems/mruby-compiler/core/lex.def +49 -44
- data/ext/enterprise_script_service/mruby/mrbgems/mruby-compiler/core/parse.y +637 -220
- data/ext/enterprise_script_service/mruby/mrbgems/mruby-compiler/core/y.tab.c +13734 -0
- data/ext/enterprise_script_service/mruby/mrbgems/mruby-compiler/mrbgem.rake +20 -23
- data/ext/enterprise_script_service/mruby/mrbgems/mruby-complex/mrblib/complex.rb +2 -2
- data/ext/enterprise_script_service/mruby/mrbgems/mruby-complex/src/complex.c +9 -9
- data/ext/enterprise_script_service/mruby/mrbgems/mruby-complex/test/complex.rb +4 -4
- data/ext/enterprise_script_service/mruby/mrbgems/mruby-enumerator/mrblib/enumerator.rb +1 -0
- data/ext/enterprise_script_service/mruby/mrbgems/mruby-enumerator/test/enumerator.rb +2 -2
- data/ext/enterprise_script_service/mruby/mrbgems/mruby-error/mrbgem.rake +2 -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 +19 -238
- 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 +19 -15
- data/ext/enterprise_script_service/mruby/mrbgems/mruby-hash-ext/src/hash-ext.c +31 -5
- data/ext/enterprise_script_service/mruby/mrbgems/mruby-hash-ext/test/hash.rb +7 -0
- data/ext/enterprise_script_service/mruby/mrbgems/mruby-inline-struct/test/inline.c +5 -6
- data/ext/enterprise_script_service/mruby/mrbgems/mruby-io/README.md +18 -16
- 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.rb +9 -4
- 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 +9 -14
- data/ext/enterprise_script_service/mruby/mrbgems/mruby-io/src/file.c +107 -59
- data/ext/enterprise_script_service/mruby/mrbgems/mruby-io/src/file_test.c +22 -38
- data/ext/enterprise_script_service/mruby/mrbgems/mruby-io/src/io.c +417 -203
- data/ext/enterprise_script_service/mruby/mrbgems/mruby-io/test/file.rb +20 -12
- data/ext/enterprise_script_service/mruby/mrbgems/mruby-io/test/io.rb +33 -2
- data/ext/enterprise_script_service/mruby/mrbgems/mruby-io/test/mruby_io_test.c +58 -50
- data/ext/enterprise_script_service/mruby/mrbgems/mruby-kernel-ext/src/kernel.c +13 -14
- data/ext/enterprise_script_service/mruby/mrbgems/mruby-math/src/math.c +13 -12
- data/ext/enterprise_script_service/mruby/mrbgems/mruby-math/test/math.rb +5 -4
- data/ext/enterprise_script_service/mruby/mrbgems/mruby-metaprog/src/metaprog.c +56 -73
- data/ext/enterprise_script_service/mruby/mrbgems/mruby-metaprog/test/metaprog.rb +13 -4
- data/ext/enterprise_script_service/mruby/mrbgems/mruby-method/README.md +4 -3
- data/ext/enterprise_script_service/mruby/mrbgems/mruby-method/src/method.c +80 -78
- data/ext/enterprise_script_service/mruby/mrbgems/mruby-method/test/method.rb +4 -4
- data/ext/enterprise_script_service/mruby/mrbgems/mruby-numeric-ext/src/numeric_ext.c +14 -13
- data/ext/enterprise_script_service/mruby/mrbgems/mruby-object-ext/src/object.c +8 -16
- data/ext/enterprise_script_service/mruby/mrbgems/mruby-objectspace/src/mruby_objectspace.c +18 -13
- data/ext/enterprise_script_service/mruby/mrbgems/mruby-os-memsize/mrbgem.rake +10 -0
- data/ext/enterprise_script_service/mruby/mrbgems/mruby-os-memsize/src/memsize.c +231 -0
- data/ext/enterprise_script_service/mruby/mrbgems/mruby-os-memsize/test/memsize.rb +63 -0
- data/ext/enterprise_script_service/mruby/mrbgems/mruby-pack/README.md +15 -18
- data/ext/enterprise_script_service/mruby/mrbgems/mruby-pack/src/pack.c +120 -67
- data/ext/enterprise_script_service/mruby/mrbgems/mruby-print/mrblib/print.rb +1 -30
- data/ext/enterprise_script_service/mruby/mrbgems/mruby-print/src/print.c +65 -26
- data/ext/enterprise_script_service/mruby/mrbgems/mruby-proc-ext/src/proc.c +34 -21
- data/ext/enterprise_script_service/mruby/mrbgems/mruby-proc-ext/test/proc.c +1 -1
- data/ext/enterprise_script_service/mruby/mrbgems/mruby-random/src/random.c +98 -43
- data/ext/enterprise_script_service/mruby/mrbgems/mruby-random/test/random.rb +2 -2
- data/ext/enterprise_script_service/mruby/mrbgems/mruby-range-ext/mrblib/range.rb +39 -6
- data/ext/enterprise_script_service/mruby/mrbgems/mruby-range-ext/src/range.c +21 -43
- data/ext/enterprise_script_service/mruby/mrbgems/mruby-range-ext/test/range.rb +27 -3
- data/ext/enterprise_script_service/mruby/mrbgems/mruby-rational/mrblib/rational.rb +12 -20
- data/ext/enterprise_script_service/mruby/mrbgems/mruby-rational/src/rational.c +216 -38
- data/ext/enterprise_script_service/mruby/mrbgems/mruby-rational/test/rational.rb +6 -6
- data/ext/enterprise_script_service/mruby/mrbgems/mruby-sleep/README.md +6 -4
- data/ext/enterprise_script_service/mruby/mrbgems/mruby-sleep/src/mrb_sleep.c +5 -5
- data/ext/enterprise_script_service/mruby/mrbgems/mruby-socket/README.md +3 -2
- data/ext/enterprise_script_service/mruby/mrbgems/mruby-socket/mrbgem.rake +1 -1
- data/ext/enterprise_script_service/mruby/mrbgems/mruby-socket/src/socket.c +47 -45
- 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 +161 -93
- data/ext/enterprise_script_service/mruby/mrbgems/mruby-sprintf/test/sprintf.rb +9 -25
- data/ext/enterprise_script_service/mruby/mrbgems/mruby-string-ext/mrblib/string.rb +23 -1
- data/ext/enterprise_script_service/mruby/mrbgems/mruby-string-ext/src/string.c +17 -14
- data/ext/enterprise_script_service/mruby/mrbgems/mruby-struct/mrblib/struct.rb +1 -1
- data/ext/enterprise_script_service/mruby/mrbgems/mruby-struct/src/struct.c +23 -36
- data/ext/enterprise_script_service/mruby/mrbgems/mruby-symbol-ext/src/symbol.c +7 -6
- data/ext/enterprise_script_service/mruby/mrbgems/mruby-symbol-ext/test/symbol.rb +1 -1
- data/ext/enterprise_script_service/mruby/mrbgems/mruby-test/README.md +0 -1
- data/ext/enterprise_script_service/mruby/mrbgems/mruby-test/driver.c +5 -5
- data/ext/enterprise_script_service/mruby/mrbgems/mruby-test/mrbgem.rake +17 -44
- data/ext/enterprise_script_service/mruby/mrbgems/mruby-test/vformat.c +4 -4
- data/ext/enterprise_script_service/mruby/mrbgems/mruby-time/src/time.c +37 -41
- data/ext/enterprise_script_service/mruby/mrbgems/stdlib-ext.gembox +18 -0
- data/ext/enterprise_script_service/mruby/mrbgems/stdlib-io.gembox +12 -0
- data/ext/enterprise_script_service/mruby/mrbgems/stdlib.gembox +54 -0
- data/ext/enterprise_script_service/mruby/mrblib/00class.rb +10 -0
- data/ext/enterprise_script_service/mruby/mrblib/10error.rb +4 -0
- data/ext/enterprise_script_service/mruby/mrblib/array.rb +17 -9
- data/ext/enterprise_script_service/mruby/mrblib/enum.rb +1 -1
- data/ext/enterprise_script_service/mruby/mrblib/hash.rb +3 -23
- data/ext/enterprise_script_service/mruby/mrblib/init_mrblib.c +0 -11
- data/ext/enterprise_script_service/mruby/mrblib/numeric.rb +36 -11
- data/ext/enterprise_script_service/mruby/mrblib/range.rb +25 -3
- data/ext/enterprise_script_service/mruby/oss-fuzz/mruby_proto_fuzzer.cpp +2 -2
- data/ext/enterprise_script_service/mruby/oss-fuzz/proto_to_ruby.h +1 -1
- data/ext/enterprise_script_service/mruby/src/array.c +67 -90
- data/ext/enterprise_script_service/mruby/src/backtrace.c +18 -19
- data/ext/enterprise_script_service/mruby/src/class.c +819 -211
- data/ext/enterprise_script_service/mruby/src/codedump.c +226 -197
- data/ext/enterprise_script_service/mruby/src/debug.c +14 -11
- data/ext/enterprise_script_service/mruby/src/dump.c +470 -207
- data/ext/enterprise_script_service/mruby/src/enum.c +1 -1
- data/ext/enterprise_script_service/mruby/src/error.c +94 -20
- data/ext/enterprise_script_service/mruby/src/etc.c +56 -39
- data/ext/enterprise_script_service/mruby/src/fmt_fp.c +103 -27
- data/ext/enterprise_script_service/mruby/src/gc.c +86 -349
- data/ext/enterprise_script_service/mruby/src/hash.c +1058 -723
- data/ext/enterprise_script_service/mruby/src/kernel.c +78 -226
- data/ext/enterprise_script_service/mruby/src/load.c +215 -159
- data/ext/enterprise_script_service/mruby/src/numeric.c +400 -382
- data/ext/enterprise_script_service/mruby/src/object.c +115 -90
- data/ext/enterprise_script_service/mruby/src/print.c +31 -6
- data/ext/enterprise_script_service/mruby/src/proc.c +56 -45
- data/ext/enterprise_script_service/mruby/src/range.c +49 -33
- data/ext/enterprise_script_service/mruby/src/state.c +58 -42
- data/ext/enterprise_script_service/mruby/src/string.c +151 -156
- data/ext/enterprise_script_service/mruby/src/symbol.c +132 -66
- data/ext/enterprise_script_service/mruby/src/value_array.h +1 -0
- data/ext/enterprise_script_service/mruby/src/variable.c +158 -158
- data/ext/enterprise_script_service/mruby/src/vm.c +655 -645
- data/ext/enterprise_script_service/mruby/tasks/benchmark.rake +6 -6
- data/ext/enterprise_script_service/mruby/tasks/bin.rake +23 -0
- data/ext/enterprise_script_service/mruby/tasks/core.rake +12 -0
- data/ext/enterprise_script_service/mruby/tasks/doc.rake +50 -38
- data/ext/enterprise_script_service/mruby/tasks/gitlab.rake +64 -61
- data/ext/enterprise_script_service/mruby/tasks/libmruby.rake +10 -1
- data/ext/enterprise_script_service/mruby/tasks/mrbgems.rake +13 -1
- data/ext/enterprise_script_service/mruby/tasks/mrblib.rake +40 -0
- data/ext/enterprise_script_service/mruby/tasks/presym.rake +44 -0
- data/ext/enterprise_script_service/mruby/tasks/test.rake +68 -0
- data/ext/enterprise_script_service/mruby/tasks/toolchains/android.rake +46 -1
- data/ext/enterprise_script_service/mruby/tasks/toolchains/gcc.rake +8 -7
- data/ext/enterprise_script_service/mruby/tasks/toolchains/openwrt.rake +13 -17
- data/ext/enterprise_script_service/mruby/tasks/toolchains/visualcpp.rake +21 -25
- data/ext/enterprise_script_service/mruby/test/assert.rb +5 -4
- data/ext/enterprise_script_service/mruby/test/bintest.rb +5 -5
- data/ext/enterprise_script_service/mruby/test/t/argumenterror.rb +16 -0
- data/ext/enterprise_script_service/mruby/test/t/array.rb +7 -3
- data/ext/enterprise_script_service/mruby/test/t/bs_literal.rb +1 -1
- 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/float.rb +18 -8
- data/ext/enterprise_script_service/mruby/test/t/hash.rb +903 -281
- data/ext/enterprise_script_service/mruby/test/t/integer.rb +10 -38
- data/ext/enterprise_script_service/mruby/test/t/kernel.rb +16 -25
- data/ext/enterprise_script_service/mruby/test/t/literals.rb +50 -0
- data/ext/enterprise_script_service/mruby/test/t/module.rb +2 -2
- data/ext/enterprise_script_service/mruby/test/t/numeric.rb +1 -1
- data/ext/enterprise_script_service/mruby/test/t/range.rb +83 -1
- data/ext/enterprise_script_service/mruby/test/t/string.rb +4 -0
- data/ext/enterprise_script_service/mruby/test/t/superclass.rb +10 -10
- data/ext/enterprise_script_service/mruby/test/t/syntax.rb +24 -0
- data/ext/enterprise_script_service/mruby/test/t/vformat.rb +3 -3
- data/ext/enterprise_script_service/mruby_config.rb +2 -5
- data/ext/enterprise_script_service/mruby_engine.cpp +1 -1
- 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/version.rb +1 -1
- data/lib/tasks/script_core.rake +3 -1
- data/script_core.gemspec +1 -2
- data/spec/dummy/app/lib/script_engine.rb +64 -5
- data/spec/script_core_spec.rb +13 -0
- metadata +123 -61
- 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/mruby/TODO +0 -8
- data/ext/enterprise_script_service/mruby/benchmark/build_config_boxing.rb +0 -28
- data/ext/enterprise_script_service/mruby/examples/targets/build_config_android_arm64-v8a.rb +0 -26
- data/ext/enterprise_script_service/mruby/examples/targets/build_config_android_armeabi.rb +0 -26
- data/ext/enterprise_script_service/mruby/mrbgems/mruby-sprintf/src/kernel.c +0 -30
- data/ext/enterprise_script_service/mruby/mrblib/mrblib.rake +0 -18
- data/ext/enterprise_script_service/mruby/src/crc.c +0 -39
- data/ext/enterprise_script_service/mruby/src/mruby_core.rake +0 -19
- data/ext/enterprise_script_service/mruby/travis_config.rb +0 -54
- data/ext/enterprise_script_service/msgpack/.travis.yml +0 -258
@@ -11,6 +11,7 @@
|
|
11
11
|
#include "mruby/variable.h"
|
12
12
|
#include "mruby/ext/io.h"
|
13
13
|
#include "mruby/error.h"
|
14
|
+
#include "mruby/presym.h"
|
14
15
|
|
15
16
|
#include <sys/types.h>
|
16
17
|
#include <sys/stat.h>
|
@@ -18,6 +19,7 @@
|
|
18
19
|
#if defined(_WIN32) || defined(_WIN64)
|
19
20
|
#include <winsock.h>
|
20
21
|
#include <io.h>
|
22
|
+
#include <basetsd.h>
|
21
23
|
#define open _open
|
22
24
|
#define close _close
|
23
25
|
#define dup _dup
|
@@ -31,14 +33,27 @@
|
|
31
33
|
typedef long ftime_t;
|
32
34
|
typedef long fsuseconds_t;
|
33
35
|
typedef int fmode_t;
|
36
|
+
typedef int mrb_io_read_write_size;
|
37
|
+
#ifndef MRB_MINGW32_LEGACY
|
38
|
+
#if !defined(_SSIZE_T_) && !defined(_SSIZE_T_DEFINED) && \
|
39
|
+
!defined(__have_typedef_ssize_t)
|
40
|
+
typedef SSIZE_T ssize_t;
|
41
|
+
#endif
|
42
|
+
#endif
|
43
|
+
|
44
|
+
#ifndef O_TMPFILE
|
45
|
+
#define O_TMPFILE O_TEMPORARY
|
46
|
+
#endif
|
34
47
|
|
35
48
|
#else
|
36
49
|
#include <sys/wait.h>
|
50
|
+
#include <sys/time.h>
|
37
51
|
#include <unistd.h>
|
38
52
|
typedef size_t fsize_t;
|
39
53
|
typedef time_t ftime_t;
|
40
54
|
typedef suseconds_t fsuseconds_t;
|
41
55
|
typedef mode_t fmode_t;
|
56
|
+
typedef ssize_t mrb_io_read_write_size;
|
42
57
|
#endif
|
43
58
|
|
44
59
|
#ifdef _MSC_VER
|
@@ -48,9 +63,14 @@ typedef mrb_int pid_t;
|
|
48
63
|
#include <fcntl.h>
|
49
64
|
|
50
65
|
#include <errno.h>
|
51
|
-
#include <stdio.h>
|
52
66
|
#include <string.h>
|
53
67
|
|
68
|
+
#define OPEN_ACCESS_MODE_FLAGS (O_RDONLY | O_WRONLY | O_RDWR)
|
69
|
+
#define OPEN_RDONLY_P(f) ((mrb_bool)(((f) & OPEN_ACCESS_MODE_FLAGS) == O_RDONLY))
|
70
|
+
#define OPEN_WRONLY_P(f) ((mrb_bool)(((f) & OPEN_ACCESS_MODE_FLAGS) == O_WRONLY))
|
71
|
+
#define OPEN_RDWR_P(f) ((mrb_bool)(((f) & OPEN_ACCESS_MODE_FLAGS) == O_RDWR))
|
72
|
+
#define OPEN_READABLE_P(f) ((mrb_bool)(OPEN_RDONLY_P(f) || OPEN_RDWR_P(f)))
|
73
|
+
#define OPEN_WRITABLE_P(f) ((mrb_bool)(OPEN_WRONLY_P(f) || OPEN_RDWR_P(f)))
|
54
74
|
|
55
75
|
static void mrb_io_free(mrb_state *mrb, void *ptr);
|
56
76
|
struct mrb_data_type mrb_io_type = { "IO", mrb_io_free };
|
@@ -58,7 +78,7 @@ struct mrb_data_type mrb_io_type = { "IO", mrb_io_free };
|
|
58
78
|
|
59
79
|
static struct mrb_io *io_get_open_fptr(mrb_state *mrb, mrb_value self);
|
60
80
|
static int mrb_io_modestr_to_flags(mrb_state *mrb, const char *modestr);
|
61
|
-
static int
|
81
|
+
static int mrb_io_mode_to_flags(mrb_state *mrb, mrb_value mode);
|
62
82
|
static void fptr_finalize(mrb_state *mrb, struct mrb_io *fptr, int quiet);
|
63
83
|
|
64
84
|
static struct mrb_io *
|
@@ -83,47 +103,50 @@ io_set_process_status(mrb_state *mrb, pid_t pid, int status)
|
|
83
103
|
mrb_value v;
|
84
104
|
|
85
105
|
c_status = NULL;
|
86
|
-
if (
|
87
|
-
c_process =
|
88
|
-
if (mrb_const_defined(mrb, mrb_obj_value(c_process),
|
89
|
-
c_status =
|
106
|
+
if (mrb_class_defined_id(mrb, MRB_SYM(Process))) {
|
107
|
+
c_process = mrb_module_get_id(mrb, MRB_SYM(Process));
|
108
|
+
if (mrb_const_defined(mrb, mrb_obj_value(c_process), MRB_SYM(Status))) {
|
109
|
+
c_status = mrb_class_get_under_id(mrb, c_process, MRB_SYM(Status));
|
90
110
|
}
|
91
111
|
}
|
92
112
|
if (c_status != NULL) {
|
93
|
-
v =
|
113
|
+
v = mrb_funcall_id(mrb, mrb_obj_value(c_status), MRB_SYM(new), 2, mrb_fixnum_value(pid), mrb_fixnum_value(status));
|
94
114
|
} else {
|
95
115
|
v = mrb_fixnum_value(WEXITSTATUS(status));
|
96
116
|
}
|
97
|
-
mrb_gv_set(mrb,
|
117
|
+
mrb_gv_set(mrb, mrb_intern_lit(mrb, "$?"), v);
|
98
118
|
}
|
99
119
|
|
100
120
|
static int
|
101
121
|
mrb_io_modestr_to_flags(mrb_state *mrb, const char *mode)
|
102
122
|
{
|
103
|
-
int flags
|
123
|
+
int flags;
|
104
124
|
const char *m = mode;
|
105
125
|
|
106
126
|
switch (*m++) {
|
107
127
|
case 'r':
|
108
|
-
flags
|
128
|
+
flags = O_RDONLY;
|
109
129
|
break;
|
110
130
|
case 'w':
|
111
|
-
flags
|
131
|
+
flags = O_WRONLY | O_CREAT | O_TRUNC;
|
112
132
|
break;
|
113
133
|
case 'a':
|
114
|
-
flags
|
134
|
+
flags = O_WRONLY | O_CREAT | O_APPEND;
|
115
135
|
break;
|
116
136
|
default:
|
117
137
|
mrb_raisef(mrb, E_ARGUMENT_ERROR, "illegal access mode %s", mode);
|
138
|
+
flags = 0; /* not reached */
|
118
139
|
}
|
119
140
|
|
120
141
|
while (*m) {
|
121
142
|
switch (*m++) {
|
122
143
|
case 'b':
|
123
|
-
|
144
|
+
#ifdef O_BINARY
|
145
|
+
flags |= O_BINARY;
|
146
|
+
#endif
|
124
147
|
break;
|
125
148
|
case '+':
|
126
|
-
flags
|
149
|
+
flags = (flags & ~OPEN_ACCESS_MODE_FLAGS) | O_RDWR;
|
127
150
|
break;
|
128
151
|
case ':':
|
129
152
|
/* XXX: PASSTHROUGH*/
|
@@ -136,38 +159,72 @@ mrb_io_modestr_to_flags(mrb_state *mrb, const char *mode)
|
|
136
159
|
}
|
137
160
|
|
138
161
|
static int
|
139
|
-
|
162
|
+
mrb_io_mode_to_flags(mrb_state *mrb, mrb_value mode)
|
140
163
|
{
|
141
|
-
|
142
|
-
|
143
|
-
switch(flags & (FMODE_READABLE|FMODE_WRITABLE|FMODE_READWRITE)) {
|
144
|
-
case FMODE_READABLE:
|
145
|
-
modenum = O_RDONLY;
|
146
|
-
break;
|
147
|
-
case FMODE_WRITABLE:
|
148
|
-
modenum = O_WRONLY;
|
149
|
-
break;
|
150
|
-
case FMODE_READWRITE:
|
151
|
-
modenum = O_RDWR;
|
152
|
-
break;
|
153
|
-
}
|
154
|
-
|
155
|
-
if (flags & FMODE_APPEND) {
|
156
|
-
modenum |= O_APPEND;
|
157
|
-
}
|
158
|
-
if (flags & FMODE_TRUNC) {
|
159
|
-
modenum |= O_TRUNC;
|
164
|
+
if (mrb_nil_p(mode)) {
|
165
|
+
return mrb_io_modestr_to_flags(mrb, "r");
|
160
166
|
}
|
161
|
-
if (
|
162
|
-
|
167
|
+
else if (mrb_string_p(mode)) {
|
168
|
+
return mrb_io_modestr_to_flags(mrb, RSTRING_CSTR(mrb, mode));
|
163
169
|
}
|
170
|
+
else {
|
171
|
+
int flags = 0;
|
172
|
+
mrb_int flags0 = mrb_int(mrb, mode);
|
173
|
+
|
174
|
+
switch (flags0 & MRB_O_ACCMODE) {
|
175
|
+
case MRB_O_RDONLY:
|
176
|
+
flags |= O_RDONLY;
|
177
|
+
break;
|
178
|
+
case MRB_O_WRONLY:
|
179
|
+
flags |= O_WRONLY;
|
180
|
+
break;
|
181
|
+
case MRB_O_RDWR:
|
182
|
+
flags |= O_RDWR;
|
183
|
+
break;
|
184
|
+
default:
|
185
|
+
mrb_raisef(mrb, E_ARGUMENT_ERROR, "illegal access mode %v", mode);
|
186
|
+
}
|
187
|
+
|
188
|
+
if (flags0 & MRB_O_APPEND) flags |= O_APPEND;
|
189
|
+
if (flags0 & MRB_O_CREAT) flags |= O_CREAT;
|
190
|
+
if (flags0 & MRB_O_EXCL) flags |= O_EXCL;
|
191
|
+
if (flags0 & MRB_O_TRUNC) flags |= O_TRUNC;
|
192
|
+
#ifdef O_NONBLOCK
|
193
|
+
if (flags0 & MRB_O_NONBLOCK) flags |= O_NONBLOCK;
|
194
|
+
#endif
|
195
|
+
#ifdef O_NOCTTY
|
196
|
+
if (flags0 & MRB_O_NOCTTY) flags |= O_NOCTTY;
|
197
|
+
#endif
|
164
198
|
#ifdef O_BINARY
|
165
|
-
|
166
|
-
|
167
|
-
|
199
|
+
if (flags0 & MRB_O_BINARY) flags |= O_BINARY;
|
200
|
+
#endif
|
201
|
+
#ifdef O_SHARE_DELETE
|
202
|
+
if (flags0 & MRB_O_SHARE_DELETE) flags |= O_SHARE_DELETE;
|
203
|
+
#endif
|
204
|
+
#ifdef O_SYNC
|
205
|
+
if (flags0 & MRB_O_SYNC) flags |= O_SYNC;
|
206
|
+
#endif
|
207
|
+
#ifdef O_DSYNC
|
208
|
+
if (flags0 & MRB_O_DSYNC) flags |= O_DSYNC;
|
209
|
+
#endif
|
210
|
+
#ifdef O_RSYNC
|
211
|
+
if (flags0 & MRB_O_RSYNC) flags |= O_RSYNC;
|
212
|
+
#endif
|
213
|
+
#ifdef O_NOFOLLOW
|
214
|
+
if (flags0 & MRB_O_NOFOLLOW) flags |= O_NOFOLLOW;
|
215
|
+
#endif
|
216
|
+
#ifdef O_NOATIME
|
217
|
+
if (flags0 & MRB_O_NOATIME) flags |= O_NOATIME;
|
218
|
+
#endif
|
219
|
+
#ifdef O_DIRECT
|
220
|
+
if (flags0 & MRB_O_DIRECT) flags |= O_DIRECT;
|
221
|
+
#endif
|
222
|
+
#ifdef O_TMPFILE
|
223
|
+
if (flags0 & MRB_O_TMPFILE) flags |= O_TMPFILE;
|
168
224
|
#endif
|
169
225
|
|
170
|
-
|
226
|
+
return flags;
|
227
|
+
}
|
171
228
|
}
|
172
229
|
|
173
230
|
static void
|
@@ -270,20 +327,20 @@ mrb_io_alloc(mrb_state *mrb)
|
|
270
327
|
#define NOFILE 64
|
271
328
|
#endif
|
272
329
|
|
330
|
+
#if defined(TARGET_OS_IPHONE) && TARGET_OS_IPHONE
|
331
|
+
# define mrb_io_s_popen mrb_notimplement_m
|
332
|
+
#else
|
273
333
|
static int
|
274
|
-
option_to_fd(mrb_state *mrb, mrb_value
|
334
|
+
option_to_fd(mrb_state *mrb, mrb_value v)
|
275
335
|
{
|
276
|
-
|
277
|
-
|
278
|
-
if (!mrb_hash_p(hash)) return -1;
|
279
|
-
opt = mrb_hash_fetch(mrb, hash, mrb_symbol_value(mrb_intern_static(mrb, key, strlen(key))), mrb_nil_value());
|
280
|
-
if (mrb_nil_p(opt)) return -1;
|
336
|
+
if (mrb_undef_p(v)) return -1;
|
337
|
+
if (mrb_nil_p(v)) return -1;
|
281
338
|
|
282
|
-
switch (mrb_type(
|
339
|
+
switch (mrb_type(v)) {
|
283
340
|
case MRB_TT_DATA: /* IO */
|
284
|
-
return mrb_io_fileno(mrb,
|
285
|
-
case
|
286
|
-
return (int)
|
341
|
+
return mrb_io_fileno(mrb, v);
|
342
|
+
case MRB_TT_INTEGER:
|
343
|
+
return (int)mrb_integer(v);
|
287
344
|
default:
|
288
345
|
mrb_raise(mrb, E_ARGUMENT_ERROR, "wrong exec redirect action");
|
289
346
|
break;
|
@@ -291,16 +348,42 @@ option_to_fd(mrb_state *mrb, mrb_value hash, const char *key)
|
|
291
348
|
return -1; /* never reached */
|
292
349
|
}
|
293
350
|
|
351
|
+
static mrb_value
|
352
|
+
mrb_io_s_popen_args(mrb_state *mrb, mrb_value klass,
|
353
|
+
const char **cmd, int *flags, int *doexec,
|
354
|
+
int *opt_in, int *opt_out, int *opt_err)
|
355
|
+
{
|
356
|
+
mrb_value mode = mrb_nil_value();
|
357
|
+
struct { mrb_value opt_in, opt_out, opt_err; } kv;
|
358
|
+
mrb_sym knames[3] = {MRB_SYM(in), MRB_SYM(out), MRB_SYM(err)};
|
359
|
+
const mrb_kwargs kw = {
|
360
|
+
3, 0,
|
361
|
+
knames,
|
362
|
+
&kv.opt_in,
|
363
|
+
NULL,
|
364
|
+
};
|
365
|
+
|
366
|
+
mrb_get_args(mrb, "z|o:", cmd, &mode, &kw);
|
367
|
+
|
368
|
+
*flags = mrb_io_mode_to_flags(mrb, mode);
|
369
|
+
*doexec = (strcmp("-", *cmd) != 0);
|
370
|
+
*opt_in = option_to_fd(mrb, kv.opt_in);
|
371
|
+
*opt_out = option_to_fd(mrb, kv.opt_out);
|
372
|
+
*opt_err = option_to_fd(mrb, kv.opt_err);
|
373
|
+
|
374
|
+
return mrb_obj_value(mrb_data_object_alloc(mrb, mrb_class_ptr(klass), NULL, &mrb_io_type));
|
375
|
+
}
|
376
|
+
|
294
377
|
#ifdef _WIN32
|
295
|
-
mrb_value
|
378
|
+
static mrb_value
|
296
379
|
mrb_io_s_popen(mrb_state *mrb, mrb_value klass)
|
297
380
|
{
|
298
|
-
mrb_value
|
299
|
-
|
300
|
-
|
381
|
+
mrb_value io;
|
382
|
+
int doexec;
|
383
|
+
int opt_in, opt_out, opt_err;
|
384
|
+
const char *cmd;
|
301
385
|
|
302
386
|
struct mrb_io *fptr;
|
303
|
-
const char *pname;
|
304
387
|
int pid = 0, flags;
|
305
388
|
STARTUPINFO si;
|
306
389
|
PROCESS_INFORMATION pi;
|
@@ -309,37 +392,26 @@ mrb_io_s_popen(mrb_state *mrb, mrb_value klass)
|
|
309
392
|
HANDLE ifd[2];
|
310
393
|
HANDLE ofd[2];
|
311
394
|
|
312
|
-
int doexec;
|
313
|
-
int opt_in, opt_out, opt_err;
|
314
|
-
|
315
395
|
ifd[0] = INVALID_HANDLE_VALUE;
|
316
396
|
ifd[1] = INVALID_HANDLE_VALUE;
|
317
397
|
ofd[0] = INVALID_HANDLE_VALUE;
|
318
398
|
ofd[1] = INVALID_HANDLE_VALUE;
|
319
399
|
|
320
|
-
|
321
|
-
|
322
|
-
|
323
|
-
pname = RSTRING_CSTR(mrb, cmd);
|
324
|
-
flags = mrb_io_modestr_to_flags(mrb, RSTRING_CSTR(mrb, mode));
|
325
|
-
|
326
|
-
doexec = (strcmp("-", pname) != 0);
|
327
|
-
opt_in = option_to_fd(mrb, opt, "in");
|
328
|
-
opt_out = option_to_fd(mrb, opt, "out");
|
329
|
-
opt_err = option_to_fd(mrb, opt, "err");
|
400
|
+
io = mrb_io_s_popen_args(mrb, klass, &cmd, &flags, &doexec,
|
401
|
+
&opt_in, &opt_out, &opt_err);
|
330
402
|
|
331
403
|
saAttr.nLength = sizeof(SECURITY_ATTRIBUTES);
|
332
404
|
saAttr.bInheritHandle = TRUE;
|
333
405
|
saAttr.lpSecurityDescriptor = NULL;
|
334
406
|
|
335
|
-
if (flags
|
407
|
+
if (OPEN_READABLE_P(flags)) {
|
336
408
|
if (!CreatePipe(&ofd[0], &ofd[1], &saAttr, 0)
|
337
409
|
|| !SetHandleInformation(ofd[0], HANDLE_FLAG_INHERIT, 0)) {
|
338
410
|
mrb_sys_fail(mrb, "pipe");
|
339
411
|
}
|
340
412
|
}
|
341
413
|
|
342
|
-
if (flags
|
414
|
+
if (OPEN_WRITABLE_P(flags)) {
|
343
415
|
if (!CreatePipe(&ifd[0], &ifd[1], &saAttr, 0)
|
344
416
|
|| !SetHandleInformation(ifd[1], HANDLE_FLAG_INHERIT, 0)) {
|
345
417
|
mrb_sys_fail(mrb, "pipe");
|
@@ -353,21 +425,21 @@ mrb_io_s_popen(mrb_state *mrb, mrb_value klass)
|
|
353
425
|
si.dwFlags |= STARTF_USESHOWWINDOW;
|
354
426
|
si.wShowWindow = SW_HIDE;
|
355
427
|
si.dwFlags |= STARTF_USESTDHANDLES;
|
356
|
-
if (flags
|
428
|
+
if (OPEN_READABLE_P(flags)) {
|
357
429
|
si.hStdOutput = ofd[1];
|
358
430
|
si.hStdError = ofd[1];
|
359
431
|
}
|
360
|
-
if (flags
|
432
|
+
if (OPEN_WRITABLE_P(flags)) {
|
361
433
|
si.hStdInput = ifd[0];
|
362
434
|
}
|
363
435
|
if (!CreateProcess(
|
364
|
-
NULL, (char*)
|
436
|
+
NULL, (char*)cmd, NULL, NULL,
|
365
437
|
TRUE, CREATE_NEW_PROCESS_GROUP, NULL, NULL, &si, &pi)) {
|
366
438
|
CloseHandle(ifd[0]);
|
367
439
|
CloseHandle(ifd[1]);
|
368
440
|
CloseHandle(ofd[0]);
|
369
441
|
CloseHandle(ofd[1]);
|
370
|
-
mrb_raisef(mrb, E_IO_ERROR, "command not found: %
|
442
|
+
mrb_raisef(mrb, E_IO_ERROR, "command not found: %s", cmd);
|
371
443
|
}
|
372
444
|
CloseHandle(pi.hThread);
|
373
445
|
CloseHandle(ifd[0]);
|
@@ -375,56 +447,39 @@ mrb_io_s_popen(mrb_state *mrb, mrb_value klass)
|
|
375
447
|
pid = pi.dwProcessId;
|
376
448
|
}
|
377
449
|
|
378
|
-
mrb_iv_set(mrb, io,
|
450
|
+
mrb_iv_set(mrb, io, mrb_intern_lit(mrb, "@buf"), mrb_str_new_cstr(mrb, ""));
|
379
451
|
|
380
452
|
fptr = mrb_io_alloc(mrb);
|
381
453
|
fptr->fd = _open_osfhandle((intptr_t)ofd[0], 0);
|
382
454
|
fptr->fd2 = _open_osfhandle((intptr_t)ifd[1], 0);
|
383
455
|
fptr->pid = pid;
|
384
|
-
fptr->readable = (
|
385
|
-
fptr->writable = (
|
456
|
+
fptr->readable = OPEN_READABLE_P(flags);
|
457
|
+
fptr->writable = OPEN_WRITABLE_P(flags);
|
386
458
|
fptr->sync = 0;
|
387
459
|
|
388
460
|
DATA_TYPE(io) = &mrb_io_type;
|
389
461
|
DATA_PTR(io) = fptr;
|
390
462
|
return io;
|
391
463
|
}
|
392
|
-
#elif defined(TARGET_OS_IPHONE) && TARGET_OS_IPHONE
|
393
|
-
mrb_value
|
394
|
-
mrb_io_s_popen(mrb_state *mrb, mrb_value klass)
|
395
|
-
{
|
396
|
-
mrb_raise(mrb, E_NOTIMP_ERROR, "IO#popen is not supported on the platform");
|
397
|
-
return mrb_false_value();
|
398
|
-
}
|
399
464
|
#else
|
400
|
-
mrb_value
|
465
|
+
static mrb_value
|
401
466
|
mrb_io_s_popen(mrb_state *mrb, mrb_value klass)
|
402
467
|
{
|
403
|
-
mrb_value
|
404
|
-
|
405
|
-
|
468
|
+
mrb_value io, result;
|
469
|
+
int doexec;
|
470
|
+
int opt_in, opt_out, opt_err;
|
471
|
+
const char *cmd;
|
406
472
|
|
407
473
|
struct mrb_io *fptr;
|
408
|
-
const char *pname;
|
409
474
|
int pid, flags, fd, write_fd = -1;
|
410
475
|
int pr[2] = { -1, -1 };
|
411
476
|
int pw[2] = { -1, -1 };
|
412
|
-
int doexec;
|
413
477
|
int saved_errno;
|
414
|
-
int opt_in, opt_out, opt_err;
|
415
478
|
|
416
|
-
|
417
|
-
|
479
|
+
io = mrb_io_s_popen_args(mrb, klass, &cmd, &flags, &doexec,
|
480
|
+
&opt_in, &opt_out, &opt_err);
|
418
481
|
|
419
|
-
|
420
|
-
flags = mrb_io_modestr_to_flags(mrb, RSTRING_CSTR(mrb, mode));
|
421
|
-
|
422
|
-
doexec = (strcmp("-", pname) != 0);
|
423
|
-
opt_in = option_to_fd(mrb, opt, "in");
|
424
|
-
opt_out = option_to_fd(mrb, opt, "out");
|
425
|
-
opt_err = option_to_fd(mrb, opt, "err");
|
426
|
-
|
427
|
-
if (flags & FMODE_READABLE) {
|
482
|
+
if (OPEN_READABLE_P(flags)) {
|
428
483
|
if (pipe(pr) == -1) {
|
429
484
|
mrb_sys_fail(mrb, "pipe");
|
430
485
|
}
|
@@ -432,7 +487,7 @@ mrb_io_s_popen(mrb_state *mrb, mrb_value klass)
|
|
432
487
|
mrb_fd_cloexec(mrb, pr[1]);
|
433
488
|
}
|
434
489
|
|
435
|
-
if (flags
|
490
|
+
if (OPEN_WRITABLE_P(flags)) {
|
436
491
|
if (pipe(pw) == -1) {
|
437
492
|
if (pr[0] != -1) close(pr[0]);
|
438
493
|
if (pr[1] != -1) close(pr[1]);
|
@@ -461,14 +516,14 @@ mrb_io_s_popen(mrb_state *mrb, mrb_value klass)
|
|
461
516
|
if (opt_err != -1) {
|
462
517
|
dup2(opt_err, 2);
|
463
518
|
}
|
464
|
-
if (flags
|
519
|
+
if (OPEN_READABLE_P(flags)) {
|
465
520
|
close(pr[0]);
|
466
521
|
if (pr[1] != 1) {
|
467
522
|
dup2(pr[1], 1);
|
468
523
|
close(pr[1]);
|
469
524
|
}
|
470
525
|
}
|
471
|
-
if (flags
|
526
|
+
if (OPEN_WRITABLE_P(flags)) {
|
472
527
|
close(pw[1]);
|
473
528
|
if (pw[0] != 0) {
|
474
529
|
dup2(pw[0], 0);
|
@@ -479,20 +534,20 @@ mrb_io_s_popen(mrb_state *mrb, mrb_value klass)
|
|
479
534
|
for (fd = 3; fd < NOFILE; fd++) {
|
480
535
|
close(fd);
|
481
536
|
}
|
482
|
-
mrb_proc_exec(
|
483
|
-
mrb_raisef(mrb, E_IO_ERROR, "command not found: %
|
537
|
+
mrb_proc_exec(cmd);
|
538
|
+
mrb_raisef(mrb, E_IO_ERROR, "command not found: %s", cmd);
|
484
539
|
_exit(127);
|
485
540
|
}
|
486
541
|
result = mrb_nil_value();
|
487
542
|
break;
|
488
543
|
|
489
544
|
default: /* parent */
|
490
|
-
if ((flags
|
545
|
+
if (OPEN_RDWR_P(flags)) {
|
491
546
|
close(pr[1]);
|
492
547
|
fd = pr[0];
|
493
548
|
close(pw[0]);
|
494
549
|
write_fd = pw[1];
|
495
|
-
} else if (flags
|
550
|
+
} else if (OPEN_RDONLY_P(flags)) {
|
496
551
|
close(pr[1]);
|
497
552
|
fd = pr[0];
|
498
553
|
} else {
|
@@ -500,14 +555,14 @@ mrb_io_s_popen(mrb_state *mrb, mrb_value klass)
|
|
500
555
|
fd = pw[1];
|
501
556
|
}
|
502
557
|
|
503
|
-
mrb_iv_set(mrb, io,
|
558
|
+
mrb_iv_set(mrb, io, mrb_intern_lit(mrb, "@buf"), mrb_str_new_cstr(mrb, ""));
|
504
559
|
|
505
560
|
fptr = mrb_io_alloc(mrb);
|
506
561
|
fptr->fd = fd;
|
507
562
|
fptr->fd2 = write_fd;
|
508
563
|
fptr->pid = pid;
|
509
|
-
fptr->readable = (
|
510
|
-
fptr->writable = (
|
564
|
+
fptr->readable = OPEN_READABLE_P(flags);
|
565
|
+
fptr->writable = OPEN_WRITABLE_P(flags);
|
511
566
|
fptr->sync = 0;
|
512
567
|
|
513
568
|
DATA_TYPE(io) = &mrb_io_type;
|
@@ -517,11 +572,11 @@ mrb_io_s_popen(mrb_state *mrb, mrb_value klass)
|
|
517
572
|
|
518
573
|
case -1: /* error */
|
519
574
|
saved_errno = errno;
|
520
|
-
if (flags
|
575
|
+
if (OPEN_READABLE_P(flags)) {
|
521
576
|
close(pr[0]);
|
522
577
|
close(pr[1]);
|
523
578
|
}
|
524
|
-
if (flags
|
579
|
+
if (OPEN_WRITABLE_P(flags)) {
|
525
580
|
close(pw[0]);
|
526
581
|
close(pw[1]);
|
527
582
|
}
|
@@ -531,7 +586,8 @@ mrb_io_s_popen(mrb_state *mrb, mrb_value klass)
|
|
531
586
|
}
|
532
587
|
return result;
|
533
588
|
}
|
534
|
-
#endif
|
589
|
+
#endif /* _WIN32 */
|
590
|
+
#endif /* TARGET_OS_IPHONE */
|
535
591
|
|
536
592
|
static int
|
537
593
|
mrb_dup(mrb_state *mrb, int fd, mrb_bool *failed)
|
@@ -547,16 +603,15 @@ mrb_dup(mrb_state *mrb, int fd, mrb_bool *failed)
|
|
547
603
|
return new_fd;
|
548
604
|
}
|
549
605
|
|
550
|
-
mrb_value
|
606
|
+
static mrb_value
|
551
607
|
mrb_io_initialize_copy(mrb_state *mrb, mrb_value copy)
|
552
608
|
{
|
553
|
-
mrb_value orig;
|
609
|
+
mrb_value orig = mrb_get_arg1(mrb);
|
554
610
|
mrb_value buf;
|
555
611
|
struct mrb_io *fptr_copy;
|
556
612
|
struct mrb_io *fptr_orig;
|
557
613
|
mrb_bool failed = TRUE;
|
558
614
|
|
559
|
-
mrb_get_args(mrb, "o", &orig);
|
560
615
|
fptr_orig = io_get_open_fptr(mrb, orig);
|
561
616
|
fptr_copy = (struct mrb_io *)DATA_PTR(copy);
|
562
617
|
if (fptr_orig == fptr_copy) return copy;
|
@@ -569,8 +624,8 @@ mrb_io_initialize_copy(mrb_state *mrb, mrb_value copy)
|
|
569
624
|
DATA_TYPE(copy) = &mrb_io_type;
|
570
625
|
DATA_PTR(copy) = fptr_copy;
|
571
626
|
|
572
|
-
buf = mrb_iv_get(mrb, orig,
|
573
|
-
mrb_iv_set(mrb, copy,
|
627
|
+
buf = mrb_iv_get(mrb, orig, mrb_intern_lit(mrb, "@buf"));
|
628
|
+
mrb_iv_set(mrb, copy, mrb_intern_lit(mrb, "@buf"), buf);
|
574
629
|
|
575
630
|
fptr_copy->fd = mrb_dup(mrb, fptr_orig->fd, &failed);
|
576
631
|
if (failed) {
|
@@ -596,7 +651,44 @@ mrb_io_initialize_copy(mrb_state *mrb, mrb_value copy)
|
|
596
651
|
return copy;
|
597
652
|
}
|
598
653
|
|
599
|
-
|
654
|
+
static void
|
655
|
+
check_file_descriptor(mrb_state *mrb, mrb_int fd)
|
656
|
+
{
|
657
|
+
struct stat sb;
|
658
|
+
int fdi = (int)fd;
|
659
|
+
|
660
|
+
#if MRB_INT_MIN < INT_MIN || MRB_INT_MAX > INT_MAX
|
661
|
+
if (fdi != fd) {
|
662
|
+
goto badfd;
|
663
|
+
}
|
664
|
+
#endif
|
665
|
+
|
666
|
+
#ifdef _WIN32
|
667
|
+
{
|
668
|
+
DWORD err;
|
669
|
+
int len = sizeof(err);
|
670
|
+
|
671
|
+
if (getsockopt(fdi, SOL_SOCKET, SO_ERROR, (char*)&err, &len) == 0) {
|
672
|
+
return;
|
673
|
+
}
|
674
|
+
}
|
675
|
+
|
676
|
+
if (fdi < 0 || fdi > _getmaxstdio()) {
|
677
|
+
goto badfd;
|
678
|
+
}
|
679
|
+
#endif /* _WIN32 */
|
680
|
+
|
681
|
+
if (fstat(fdi, &sb) != 0) {
|
682
|
+
goto badfd;
|
683
|
+
}
|
684
|
+
|
685
|
+
return;
|
686
|
+
|
687
|
+
badfd:
|
688
|
+
mrb_sys_fail(mrb, "bad file descriptor");
|
689
|
+
}
|
690
|
+
|
691
|
+
static mrb_value
|
600
692
|
mrb_io_initialize(mrb_state *mrb, mrb_value io)
|
601
693
|
{
|
602
694
|
struct mrb_io *fptr;
|
@@ -606,7 +698,16 @@ mrb_io_initialize(mrb_state *mrb, mrb_value io)
|
|
606
698
|
|
607
699
|
mode = opt = mrb_nil_value();
|
608
700
|
|
609
|
-
mrb_get_args(mrb, "i|
|
701
|
+
mrb_get_args(mrb, "i|oo", &fd, &mode, &opt);
|
702
|
+
switch (fd) {
|
703
|
+
case 0: /* STDIN_FILENO */
|
704
|
+
case 1: /* STDOUT_FILENO */
|
705
|
+
case 2: /* STDERR_FILENO */
|
706
|
+
break;
|
707
|
+
default:
|
708
|
+
check_file_descriptor(mrb, fd);
|
709
|
+
break;
|
710
|
+
}
|
610
711
|
if (mrb_nil_p(mode)) {
|
611
712
|
mode = mrb_str_new_cstr(mrb, "r");
|
612
713
|
}
|
@@ -614,9 +715,9 @@ mrb_io_initialize(mrb_state *mrb, mrb_value io)
|
|
614
715
|
opt = mrb_hash_new(mrb);
|
615
716
|
}
|
616
717
|
|
617
|
-
flags =
|
718
|
+
flags = mrb_io_mode_to_flags(mrb, mode);
|
618
719
|
|
619
|
-
mrb_iv_set(mrb, io,
|
720
|
+
mrb_iv_set(mrb, io, mrb_intern_lit(mrb, "@buf"), mrb_str_new_cstr(mrb, ""));
|
620
721
|
|
621
722
|
fptr = (struct mrb_io *)DATA_PTR(io);
|
622
723
|
if (fptr != NULL) {
|
@@ -629,8 +730,8 @@ mrb_io_initialize(mrb_state *mrb, mrb_value io)
|
|
629
730
|
DATA_PTR(io) = fptr;
|
630
731
|
|
631
732
|
fptr->fd = (int)fd;
|
632
|
-
fptr->readable = (
|
633
|
-
fptr->writable = (
|
733
|
+
fptr->readable = OPEN_READABLE_P(flags);
|
734
|
+
fptr->writable = OPEN_WRITABLE_P(flags);
|
634
735
|
fptr->sync = 0;
|
635
736
|
return io;
|
636
737
|
}
|
@@ -698,7 +799,7 @@ fptr_finalize(mrb_state *mrb, struct mrb_io *fptr, int quiet)
|
|
698
799
|
}
|
699
800
|
}
|
700
801
|
|
701
|
-
mrb_value
|
802
|
+
static mrb_value
|
702
803
|
mrb_io_check_readable(mrb_state *mrb, mrb_value self)
|
703
804
|
{
|
704
805
|
struct mrb_io *fptr = io_get_open_fptr(mrb, self);
|
@@ -708,7 +809,7 @@ mrb_io_check_readable(mrb_state *mrb, mrb_value self)
|
|
708
809
|
return mrb_nil_value();
|
709
810
|
}
|
710
811
|
|
711
|
-
mrb_value
|
812
|
+
static mrb_value
|
712
813
|
mrb_io_isatty(mrb_state *mrb, mrb_value self)
|
713
814
|
{
|
714
815
|
struct mrb_io *fptr;
|
@@ -719,7 +820,7 @@ mrb_io_isatty(mrb_state *mrb, mrb_value self)
|
|
719
820
|
return mrb_true_value();
|
720
821
|
}
|
721
822
|
|
722
|
-
mrb_value
|
823
|
+
static mrb_value
|
723
824
|
mrb_io_s_for_fd(mrb_state *mrb, mrb_value klass)
|
724
825
|
{
|
725
826
|
struct RClass *c = mrb_class_ptr(klass);
|
@@ -732,7 +833,7 @@ mrb_io_s_for_fd(mrb_state *mrb, mrb_value klass)
|
|
732
833
|
return mrb_io_initialize(mrb, obj);
|
733
834
|
}
|
734
835
|
|
735
|
-
mrb_value
|
836
|
+
static mrb_value
|
736
837
|
mrb_io_s_sysclose(mrb_state *mrb, mrb_value klass)
|
737
838
|
{
|
738
839
|
mrb_int fd;
|
@@ -743,7 +844,7 @@ mrb_io_s_sysclose(mrb_state *mrb, mrb_value klass)
|
|
743
844
|
return mrb_fixnum_value(0);
|
744
845
|
}
|
745
846
|
|
746
|
-
int
|
847
|
+
static int
|
747
848
|
mrb_cloexec_open(mrb_state *mrb, const char *pathname, mrb_int flags, mrb_int mode)
|
748
849
|
{
|
749
850
|
int fd, retry = FALSE;
|
@@ -778,39 +879,55 @@ reopen:
|
|
778
879
|
return fd;
|
779
880
|
}
|
780
881
|
|
781
|
-
mrb_value
|
882
|
+
static mrb_value
|
782
883
|
mrb_io_s_sysopen(mrb_state *mrb, mrb_value klass)
|
783
884
|
{
|
784
885
|
mrb_value path = mrb_nil_value();
|
785
886
|
mrb_value mode = mrb_nil_value();
|
786
887
|
mrb_int fd, perm = -1;
|
787
888
|
const char *pat;
|
788
|
-
int flags
|
889
|
+
int flags;
|
789
890
|
|
790
|
-
mrb_get_args(mrb, "S|
|
791
|
-
if (mrb_nil_p(mode)) {
|
792
|
-
mode = mrb_str_new_cstr(mrb, "r");
|
793
|
-
}
|
891
|
+
mrb_get_args(mrb, "S|oi", &path, &mode, &perm);
|
794
892
|
if (perm < 0) {
|
795
893
|
perm = 0666;
|
796
894
|
}
|
797
895
|
|
798
896
|
pat = RSTRING_CSTR(mrb, path);
|
799
|
-
flags =
|
800
|
-
|
801
|
-
fd = mrb_cloexec_open(mrb, pat, modenum, perm);
|
897
|
+
flags = mrb_io_mode_to_flags(mrb, mode);
|
898
|
+
fd = mrb_cloexec_open(mrb, pat, flags, perm);
|
802
899
|
return mrb_fixnum_value(fd);
|
803
900
|
}
|
804
901
|
|
805
|
-
mrb_value
|
902
|
+
static mrb_value mrb_io_sysread_common(mrb_state *mrb,
|
903
|
+
mrb_io_read_write_size (*readfunc)(int, void *, fsize_t, off_t),
|
904
|
+
mrb_value io, mrb_value buf, mrb_int maxlen, off_t offset);
|
905
|
+
|
906
|
+
static mrb_io_read_write_size
|
907
|
+
mrb_sysread_dummy(int fd, void *buf, fsize_t nbytes, off_t offset)
|
908
|
+
{
|
909
|
+
return (mrb_io_read_write_size)read(fd, buf, nbytes);
|
910
|
+
}
|
911
|
+
|
912
|
+
static mrb_value
|
806
913
|
mrb_io_sysread(mrb_state *mrb, mrb_value io)
|
807
914
|
{
|
808
|
-
struct mrb_io *fptr;
|
809
915
|
mrb_value buf = mrb_nil_value();
|
810
916
|
mrb_int maxlen;
|
811
|
-
int ret;
|
812
917
|
|
813
918
|
mrb_get_args(mrb, "i|S", &maxlen, &buf);
|
919
|
+
|
920
|
+
return mrb_io_sysread_common(mrb, mrb_sysread_dummy, io, buf, maxlen, 0);
|
921
|
+
}
|
922
|
+
|
923
|
+
static mrb_value
|
924
|
+
mrb_io_sysread_common(mrb_state *mrb,
|
925
|
+
mrb_io_read_write_size (*readfunc)(int, void *, fsize_t, off_t),
|
926
|
+
mrb_value io, mrb_value buf, mrb_int maxlen, off_t offset)
|
927
|
+
{
|
928
|
+
struct mrb_io *fptr;
|
929
|
+
int ret;
|
930
|
+
|
814
931
|
if (maxlen < 0) {
|
815
932
|
mrb_raise(mrb, E_ARGUMENT_ERROR, "negative expanding string size");
|
816
933
|
}
|
@@ -824,7 +941,8 @@ mrb_io_sysread(mrb_state *mrb, mrb_value io)
|
|
824
941
|
|
825
942
|
if (RSTRING_LEN(buf) != maxlen) {
|
826
943
|
buf = mrb_str_resize(mrb, buf, maxlen);
|
827
|
-
}
|
944
|
+
}
|
945
|
+
else {
|
828
946
|
mrb_str_modify(mrb, RSTRING(buf));
|
829
947
|
}
|
830
948
|
|
@@ -832,29 +950,20 @@ mrb_io_sysread(mrb_state *mrb, mrb_value io)
|
|
832
950
|
if (!fptr->readable) {
|
833
951
|
mrb_raise(mrb, E_IO_ERROR, "not opened for reading");
|
834
952
|
}
|
835
|
-
ret =
|
836
|
-
|
837
|
-
|
838
|
-
|
839
|
-
|
840
|
-
|
841
|
-
|
842
|
-
|
843
|
-
|
844
|
-
case -1: /* Error */
|
845
|
-
mrb_sys_fail(mrb, "sysread failed");
|
846
|
-
break;
|
847
|
-
default:
|
848
|
-
if (RSTRING_LEN(buf) != ret) {
|
849
|
-
buf = mrb_str_resize(mrb, buf, ret);
|
850
|
-
}
|
851
|
-
break;
|
953
|
+
ret = readfunc(fptr->fd, RSTRING_PTR(buf), (fsize_t)maxlen, offset);
|
954
|
+
if (ret < 0) {
|
955
|
+
mrb_sys_fail(mrb, "sysread failed");
|
956
|
+
}
|
957
|
+
if (RSTRING_LEN(buf) != ret) {
|
958
|
+
buf = mrb_str_resize(mrb, buf, ret);
|
959
|
+
}
|
960
|
+
if (ret == 0 && maxlen > 0) {
|
961
|
+
mrb_raise(mrb, E_EOF_ERROR, "sysread failed: End of File");
|
852
962
|
}
|
853
|
-
|
854
963
|
return buf;
|
855
964
|
}
|
856
965
|
|
857
|
-
mrb_value
|
966
|
+
static mrb_value
|
858
967
|
mrb_io_sysseek(mrb_state *mrb, mrb_value io)
|
859
968
|
{
|
860
969
|
struct mrb_io *fptr;
|
@@ -872,21 +981,22 @@ mrb_io_sysseek(mrb_state *mrb, mrb_value io)
|
|
872
981
|
mrb_sys_fail(mrb, "sysseek");
|
873
982
|
}
|
874
983
|
if (pos > MRB_INT_MAX) {
|
875
|
-
#ifndef
|
984
|
+
#ifndef MRB_NO_FLOAT
|
876
985
|
return mrb_float_value(mrb, (mrb_float)pos);
|
877
986
|
#else
|
878
|
-
mrb_raise(mrb, E_IO_ERROR, "sysseek reached too far for
|
987
|
+
mrb_raise(mrb, E_IO_ERROR, "sysseek reached too far for MRB_NO_FLOAT");
|
879
988
|
#endif
|
880
989
|
} else {
|
881
|
-
return
|
990
|
+
return mrb_int_value(mrb, pos);
|
882
991
|
}
|
883
992
|
}
|
884
993
|
|
885
|
-
mrb_value
|
886
|
-
|
994
|
+
static mrb_value
|
995
|
+
mrb_io_syswrite_common(mrb_state *mrb,
|
996
|
+
mrb_io_read_write_size (*writefunc)(int, const void *, fsize_t, off_t),
|
997
|
+
mrb_value io, mrb_value buf, off_t offset)
|
887
998
|
{
|
888
999
|
struct mrb_io *fptr;
|
889
|
-
mrb_value str, buf;
|
890
1000
|
int fd, length;
|
891
1001
|
|
892
1002
|
fptr = io_get_open_fptr(mrb, io);
|
@@ -894,23 +1004,36 @@ mrb_io_syswrite(mrb_state *mrb, mrb_value io)
|
|
894
1004
|
mrb_raise(mrb, E_IO_ERROR, "not opened for writing");
|
895
1005
|
}
|
896
1006
|
|
897
|
-
mrb_get_args(mrb, "S", &str);
|
898
|
-
buf = str;
|
899
|
-
|
900
1007
|
if (fptr->fd2 == -1) {
|
901
1008
|
fd = fptr->fd;
|
902
1009
|
} else {
|
903
1010
|
fd = fptr->fd2;
|
904
1011
|
}
|
905
|
-
length =
|
1012
|
+
length = writefunc(fd, RSTRING_PTR(buf), (fsize_t)RSTRING_LEN(buf), offset);
|
906
1013
|
if (length == -1) {
|
907
1014
|
mrb_sys_fail(mrb, 0);
|
908
1015
|
}
|
909
1016
|
|
910
|
-
return
|
1017
|
+
return mrb_int_value(mrb, (mrb_int)length);
|
1018
|
+
}
|
1019
|
+
|
1020
|
+
static mrb_io_read_write_size
|
1021
|
+
mrb_syswrite_dummy(int fd, const void *buf, fsize_t nbytes, off_t offset)
|
1022
|
+
{
|
1023
|
+
return (mrb_io_read_write_size)write(fd, buf, nbytes);
|
1024
|
+
}
|
1025
|
+
|
1026
|
+
static mrb_value
|
1027
|
+
mrb_io_syswrite(mrb_state *mrb, mrb_value io)
|
1028
|
+
{
|
1029
|
+
mrb_value buf;
|
1030
|
+
|
1031
|
+
mrb_get_args(mrb, "S", &buf);
|
1032
|
+
|
1033
|
+
return mrb_io_syswrite_common(mrb, mrb_syswrite_dummy, io, buf, 0);
|
911
1034
|
}
|
912
1035
|
|
913
|
-
mrb_value
|
1036
|
+
static mrb_value
|
914
1037
|
mrb_io_close(mrb_state *mrb, mrb_value self)
|
915
1038
|
{
|
916
1039
|
struct mrb_io *fptr;
|
@@ -919,7 +1042,7 @@ mrb_io_close(mrb_state *mrb, mrb_value self)
|
|
919
1042
|
return mrb_nil_value();
|
920
1043
|
}
|
921
1044
|
|
922
|
-
mrb_value
|
1045
|
+
static mrb_value
|
923
1046
|
mrb_io_close_write(mrb_state *mrb, mrb_value self)
|
924
1047
|
{
|
925
1048
|
struct mrb_io *fptr;
|
@@ -930,7 +1053,7 @@ mrb_io_close_write(mrb_state *mrb, mrb_value self)
|
|
930
1053
|
return mrb_nil_value();
|
931
1054
|
}
|
932
1055
|
|
933
|
-
mrb_value
|
1056
|
+
static mrb_value
|
934
1057
|
mrb_io_closed(mrb_state *mrb, mrb_value io)
|
935
1058
|
{
|
936
1059
|
struct mrb_io *fptr;
|
@@ -942,7 +1065,7 @@ mrb_io_closed(mrb_state *mrb, mrb_value io)
|
|
942
1065
|
return mrb_true_value();
|
943
1066
|
}
|
944
1067
|
|
945
|
-
mrb_value
|
1068
|
+
static mrb_value
|
946
1069
|
mrb_io_pid(mrb_state *mrb, mrb_value io)
|
947
1070
|
{
|
948
1071
|
struct mrb_io *fptr;
|
@@ -961,12 +1084,12 @@ time2timeval(mrb_state *mrb, mrb_value time)
|
|
961
1084
|
struct timeval t = { 0, 0 };
|
962
1085
|
|
963
1086
|
switch (mrb_type(time)) {
|
964
|
-
case
|
965
|
-
t.tv_sec = (ftime_t)
|
1087
|
+
case MRB_TT_INTEGER:
|
1088
|
+
t.tv_sec = (ftime_t)mrb_integer(time);
|
966
1089
|
t.tv_usec = 0;
|
967
1090
|
break;
|
968
1091
|
|
969
|
-
#ifndef
|
1092
|
+
#ifndef MRB_NO_FLOAT
|
970
1093
|
case MRB_TT_FLOAT:
|
971
1094
|
t.tv_sec = (ftime_t)mrb_float(time);
|
972
1095
|
t.tv_usec = (fsuseconds_t)((mrb_float(time) - t.tv_sec) * 1000000.0);
|
@@ -983,7 +1106,7 @@ time2timeval(mrb_state *mrb, mrb_value time)
|
|
983
1106
|
static int
|
984
1107
|
mrb_io_read_data_pending(mrb_state *mrb, mrb_value io)
|
985
1108
|
{
|
986
|
-
mrb_value buf = mrb_iv_get(mrb, io,
|
1109
|
+
mrb_value buf = mrb_iv_get(mrb, io, mrb_intern_lit(mrb, "@buf"));
|
987
1110
|
if (mrb_string_p(buf) && RSTRING_LEN(buf) > 0) {
|
988
1111
|
return 1;
|
989
1112
|
}
|
@@ -1005,7 +1128,7 @@ mrb_io_s_pipe(mrb_state *mrb, mrb_value klass)
|
|
1005
1128
|
}
|
1006
1129
|
|
1007
1130
|
r = mrb_obj_value(mrb_data_object_alloc(mrb, mrb_class_ptr(klass), NULL, &mrb_io_type));
|
1008
|
-
mrb_iv_set(mrb, r,
|
1131
|
+
mrb_iv_set(mrb, r, mrb_intern_lit(mrb, "@buf"), mrb_str_new_cstr(mrb, ""));
|
1009
1132
|
fptr_r = mrb_io_alloc(mrb);
|
1010
1133
|
fptr_r->fd = pipes[0];
|
1011
1134
|
fptr_r->readable = 1;
|
@@ -1015,7 +1138,7 @@ mrb_io_s_pipe(mrb_state *mrb, mrb_value klass)
|
|
1015
1138
|
DATA_PTR(r) = fptr_r;
|
1016
1139
|
|
1017
1140
|
w = mrb_obj_value(mrb_data_object_alloc(mrb, mrb_class_ptr(klass), NULL, &mrb_io_type));
|
1018
|
-
mrb_iv_set(mrb, w,
|
1141
|
+
mrb_iv_set(mrb, w, mrb_intern_lit(mrb, "@buf"), mrb_str_new_cstr(mrb, ""));
|
1019
1142
|
fptr_w = mrb_io_alloc(mrb);
|
1020
1143
|
fptr_w->fd = pipes[1];
|
1021
1144
|
fptr_w->readable = 0;
|
@@ -1031,7 +1154,7 @@ mrb_io_s_pipe(mrb_state *mrb, mrb_value klass)
|
|
1031
1154
|
static mrb_value
|
1032
1155
|
mrb_io_s_select(mrb_state *mrb, mrb_value klass)
|
1033
1156
|
{
|
1034
|
-
mrb_value *argv;
|
1157
|
+
const mrb_value *argv;
|
1035
1158
|
mrb_int argc;
|
1036
1159
|
mrb_value read, read_io, write, except, timeout, list;
|
1037
1160
|
struct timeval *tp, timerec;
|
@@ -1076,6 +1199,7 @@ mrb_io_s_select(mrb_state *mrb, mrb_value klass)
|
|
1076
1199
|
for (i = 0; i < RARRAY_LEN(read); i++) {
|
1077
1200
|
read_io = RARRAY_PTR(read)[i];
|
1078
1201
|
fptr = io_get_open_fptr(mrb, read_io);
|
1202
|
+
if (fptr->fd >= FD_SETSIZE) continue;
|
1079
1203
|
FD_SET(fptr->fd, rp);
|
1080
1204
|
if (mrb_io_read_data_pending(mrb, read_io)) {
|
1081
1205
|
pending++;
|
@@ -1098,6 +1222,7 @@ mrb_io_s_select(mrb_state *mrb, mrb_value klass)
|
|
1098
1222
|
FD_ZERO(wp);
|
1099
1223
|
for (i = 0; i < RARRAY_LEN(write); i++) {
|
1100
1224
|
fptr = io_get_open_fptr(mrb, RARRAY_PTR(write)[i]);
|
1225
|
+
if (fptr->fd >= FD_SETSIZE) continue;
|
1101
1226
|
FD_SET(fptr->fd, wp);
|
1102
1227
|
if (max < fptr->fd)
|
1103
1228
|
max = fptr->fd;
|
@@ -1117,6 +1242,7 @@ mrb_io_s_select(mrb_state *mrb, mrb_value klass)
|
|
1117
1242
|
FD_ZERO(ep);
|
1118
1243
|
for (i = 0; i < RARRAY_LEN(except); i++) {
|
1119
1244
|
fptr = io_get_open_fptr(mrb, RARRAY_PTR(except)[i]);
|
1245
|
+
if (fptr->fd >= FD_SETSIZE) continue;
|
1120
1246
|
FD_SET(fptr->fd, ep);
|
1121
1247
|
if (max < fptr->fd)
|
1122
1248
|
max = fptr->fd;
|
@@ -1205,10 +1331,10 @@ mrb_io_fileno_m(mrb_state *mrb, mrb_value io)
|
|
1205
1331
|
return mrb_fixnum_value(fd);
|
1206
1332
|
}
|
1207
1333
|
|
1208
|
-
|
1334
|
+
#if defined(F_GETFD) && defined(F_SETFD) && defined(FD_CLOEXEC)
|
1335
|
+
static mrb_value
|
1209
1336
|
mrb_io_close_on_exec_p(mrb_state *mrb, mrb_value self)
|
1210
1337
|
{
|
1211
|
-
#if defined(F_GETFD) && defined(F_SETFD) && defined(FD_CLOEXEC)
|
1212
1338
|
struct mrb_io *fptr;
|
1213
1339
|
int ret;
|
1214
1340
|
|
@@ -1222,17 +1348,15 @@ mrb_io_close_on_exec_p(mrb_state *mrb, mrb_value self)
|
|
1222
1348
|
if ((ret = fcntl(fptr->fd, F_GETFD)) == -1) mrb_sys_fail(mrb, "F_GETFD failed");
|
1223
1349
|
if (!(ret & FD_CLOEXEC)) return mrb_false_value();
|
1224
1350
|
return mrb_true_value();
|
1225
|
-
|
1351
|
+
}
|
1226
1352
|
#else
|
1227
|
-
|
1228
|
-
return mrb_false_value();
|
1353
|
+
# define mrb_io_close_on_exec_p mrb_notimplement_m
|
1229
1354
|
#endif
|
1230
|
-
}
|
1231
1355
|
|
1232
|
-
|
1356
|
+
#if defined(F_GETFD) && defined(F_SETFD) && defined(FD_CLOEXEC)
|
1357
|
+
static mrb_value
|
1233
1358
|
mrb_io_set_close_on_exec(mrb_state *mrb, mrb_value self)
|
1234
1359
|
{
|
1235
|
-
#if defined(F_GETFD) && defined(F_SETFD) && defined(FD_CLOEXEC)
|
1236
1360
|
struct mrb_io *fptr;
|
1237
1361
|
int flag, ret;
|
1238
1362
|
mrb_bool b;
|
@@ -1259,13 +1383,12 @@ mrb_io_set_close_on_exec(mrb_state *mrb, mrb_value self)
|
|
1259
1383
|
}
|
1260
1384
|
|
1261
1385
|
return mrb_bool_value(b);
|
1386
|
+
}
|
1262
1387
|
#else
|
1263
|
-
|
1264
|
-
return mrb_nil_value();
|
1388
|
+
# define mrb_io_set_close_on_exec mrb_notimplement_m
|
1265
1389
|
#endif
|
1266
|
-
}
|
1267
1390
|
|
1268
|
-
mrb_value
|
1391
|
+
static mrb_value
|
1269
1392
|
mrb_io_set_sync(mrb_state *mrb, mrb_value self)
|
1270
1393
|
{
|
1271
1394
|
struct mrb_io *fptr;
|
@@ -1277,7 +1400,7 @@ mrb_io_set_sync(mrb_state *mrb, mrb_value self)
|
|
1277
1400
|
return mrb_bool_value(b);
|
1278
1401
|
}
|
1279
1402
|
|
1280
|
-
mrb_value
|
1403
|
+
static mrb_value
|
1281
1404
|
mrb_io_sync(mrb_state *mrb, mrb_value self)
|
1282
1405
|
{
|
1283
1406
|
struct mrb_io *fptr;
|
@@ -1285,15 +1408,55 @@ mrb_io_sync(mrb_state *mrb, mrb_value self)
|
|
1285
1408
|
return mrb_bool_value(fptr->sync);
|
1286
1409
|
}
|
1287
1410
|
|
1411
|
+
#ifndef MRB_WITH_IO_PREAD_PWRITE
|
1412
|
+
# define mrb_io_pread mrb_notimplement_m
|
1413
|
+
# define mrb_io_pwrite mrb_notimplement_m
|
1414
|
+
#else
|
1415
|
+
static off_t
|
1416
|
+
value2off(mrb_state *mrb, mrb_value offv)
|
1417
|
+
{
|
1418
|
+
return (off_t)mrb_int(mrb, offv);
|
1419
|
+
}
|
1420
|
+
|
1421
|
+
/*
|
1422
|
+
* call-seq:
|
1423
|
+
* pread(maxlen, offset, outbuf = "") -> outbuf
|
1424
|
+
*/
|
1425
|
+
static mrb_value
|
1426
|
+
mrb_io_pread(mrb_state *mrb, mrb_value io)
|
1427
|
+
{
|
1428
|
+
mrb_value buf = mrb_nil_value();
|
1429
|
+
mrb_value off;
|
1430
|
+
mrb_int maxlen;
|
1431
|
+
|
1432
|
+
mrb_get_args(mrb, "io|S!", &maxlen, &off, &buf);
|
1433
|
+
|
1434
|
+
return mrb_io_sysread_common(mrb, pread, io, buf, maxlen, value2off(mrb, off));
|
1435
|
+
}
|
1436
|
+
|
1437
|
+
/*
|
1438
|
+
* call-seq:
|
1439
|
+
* pwrite(buffer, offset) -> wrote_bytes
|
1440
|
+
*/
|
1288
1441
|
static mrb_value
|
1289
|
-
|
1442
|
+
mrb_io_pwrite(mrb_state *mrb, mrb_value io)
|
1290
1443
|
{
|
1291
|
-
mrb_value
|
1292
|
-
|
1444
|
+
mrb_value buf, off;
|
1445
|
+
|
1446
|
+
mrb_get_args(mrb, "So", &buf, &off);
|
1447
|
+
|
1448
|
+
return mrb_io_syswrite_common(mrb, pwrite, io, buf, value2off(mrb, off));
|
1449
|
+
}
|
1450
|
+
#endif /* MRB_WITH_IO_PREAD_PWRITE */
|
1451
|
+
|
1452
|
+
static mrb_value
|
1453
|
+
io_bufread(mrb_state *mrb, mrb_value str, mrb_int len)
|
1454
|
+
{
|
1455
|
+
mrb_value str2;
|
1456
|
+
mrb_int newlen;
|
1293
1457
|
struct RString *s;
|
1294
1458
|
char *p;
|
1295
1459
|
|
1296
|
-
mrb_get_args(mrb, "Si", &str, &len);
|
1297
1460
|
s = RSTRING(str);
|
1298
1461
|
mrb_str_modify(mrb, s);
|
1299
1462
|
p = RSTR_PTR(s);
|
@@ -1306,6 +1469,54 @@ io_bufread(mrb_state *mrb, mrb_value self)
|
|
1306
1469
|
return str2;
|
1307
1470
|
}
|
1308
1471
|
|
1472
|
+
static mrb_value
|
1473
|
+
mrb_io_bufread(mrb_state *mrb, mrb_value self)
|
1474
|
+
{
|
1475
|
+
mrb_value str;
|
1476
|
+
mrb_int len;
|
1477
|
+
|
1478
|
+
mrb_get_args(mrb, "Si", &str, &len);
|
1479
|
+
return io_bufread(mrb, str, len);
|
1480
|
+
}
|
1481
|
+
|
1482
|
+
static mrb_value
|
1483
|
+
mrb_io_readchar(mrb_state *mrb, mrb_value self)
|
1484
|
+
{
|
1485
|
+
mrb_value buf;
|
1486
|
+
mrb_int len = 1;
|
1487
|
+
#ifdef MRB_UTF8_STRING
|
1488
|
+
unsigned char c;
|
1489
|
+
#endif
|
1490
|
+
|
1491
|
+
mrb_get_args(mrb, "S", &buf);
|
1492
|
+
mrb_assert(RSTRING_LEN(buf) > 0);
|
1493
|
+
mrb_assert(RSTRING_PTR(buf) != NULL);
|
1494
|
+
mrb_str_modify(mrb, RSTRING(buf));
|
1495
|
+
#ifdef MRB_UTF8_STRING
|
1496
|
+
c = RSTRING_PTR(buf)[0];
|
1497
|
+
if (c & 0x80) {
|
1498
|
+
len = mrb_utf8len(RSTRING_PTR(buf), RSTRING_END(buf));
|
1499
|
+
if (len == 1 && RSTRING_LEN(buf) < 4) { /* partial UTF-8 */
|
1500
|
+
mrb_int blen = RSTRING_LEN(buf);
|
1501
|
+
ssize_t n;
|
1502
|
+
|
1503
|
+
struct mrb_io *fptr = (struct mrb_io*)io_get_open_fptr(mrb, self);
|
1504
|
+
|
1505
|
+
if (!fptr->readable) {
|
1506
|
+
mrb_raise(mrb, E_IO_ERROR, "not opened for reading");
|
1507
|
+
}
|
1508
|
+
/* refill the buffer */
|
1509
|
+
mrb_str_resize(mrb, buf, 4096);
|
1510
|
+
n = read(fptr->fd, RSTRING_PTR(buf)+blen, 4096-blen);
|
1511
|
+
if (n < 0) mrb_sys_fail(mrb, "sysread failed");
|
1512
|
+
mrb_str_resize(mrb, buf, blen+n);
|
1513
|
+
}
|
1514
|
+
len = mrb_utf8len(RSTRING_PTR(buf), RSTRING_END(buf));
|
1515
|
+
}
|
1516
|
+
#endif
|
1517
|
+
return io_bufread(mrb, buf, len);
|
1518
|
+
}
|
1519
|
+
|
1309
1520
|
void
|
1310
1521
|
mrb_init_io(mrb_state *mrb)
|
1311
1522
|
{
|
@@ -1340,6 +1551,9 @@ mrb_init_io(mrb_state *mrb)
|
|
1340
1551
|
mrb_define_method(mrb, io, "closed?", mrb_io_closed, MRB_ARGS_NONE()); /* 15.2.20.5.2 */
|
1341
1552
|
mrb_define_method(mrb, io, "pid", mrb_io_pid, MRB_ARGS_NONE()); /* 15.2.20.5.2 */
|
1342
1553
|
mrb_define_method(mrb, io, "fileno", mrb_io_fileno_m, MRB_ARGS_NONE());
|
1554
|
+
mrb_define_method(mrb, io, "pread", mrb_io_pread, MRB_ARGS_ANY()); /* ruby 2.5 feature */
|
1555
|
+
mrb_define_method(mrb, io, "pwrite", mrb_io_pwrite, MRB_ARGS_ANY()); /* ruby 2.5 feature */
|
1343
1556
|
|
1344
|
-
|
1557
|
+
mrb_define_method(mrb, io, "_readchar", mrb_io_readchar, MRB_ARGS_REQ(1));
|
1558
|
+
mrb_define_class_method(mrb, io, "_bufread", mrb_io_bufread, MRB_ARGS_REQ(2));
|
1345
1559
|
}
|