typenative 0.1.2 → 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.gitattributes +1 -0
- package/.github/workflows/ci.yml +1 -1
- package/.github/workflows/npm-publish-github-packages.yml +1 -1
- package/CHANGELOG.md +247 -0
- package/CONTRIBUTION.md +1 -1
- package/README.md +30 -21
- package/bin/cli.js +3 -1
- package/bin/go/bridge.js +919 -0
- package/bin/go/convert.js +238 -0
- package/bin/go/metadata.js +211 -0
- package/bin/go/overrides.js +68 -0
- package/bin/go/stdlib.generated.js +175 -0
- package/bin/index.js +98 -6
- package/bin/main.js +4 -1
- package/bin/node/assert.js +344 -0
- package/bin/node/async_hooks.js +273 -0
- package/bin/node/buffer.js +765 -0
- package/bin/node/child_process.js +600 -0
- package/bin/node/cluster.js +1002 -0
- package/bin/node/console.js +121 -0
- package/bin/node/core.js +111 -0
- package/bin/node/crypto.js +414 -0
- package/bin/node/crypto_keys.js +2685 -0
- package/bin/node/dgram.js +388 -0
- package/bin/node/diagnostics_channel.js +534 -0
- package/bin/node/dns.js +635 -0
- package/bin/node/events.js +743 -0
- package/bin/node/fetch.js +737 -0
- package/bin/node/fs.js +998 -0
- package/bin/node/http.js +1500 -0
- package/bin/node/http2.js +688 -0
- package/bin/node/net.js +1143 -0
- package/bin/node/os.js +257 -0
- package/bin/node/path.js +758 -0
- package/bin/node/process.js +316 -0
- package/bin/node/punycode.js +195 -0
- package/bin/node/querystring.js +143 -0
- package/bin/node/readline.js +299 -0
- package/bin/node/registry.js +161 -0
- package/bin/node/sqlite.js +1142 -0
- package/bin/node/stream.js +1221 -0
- package/bin/node/stream_web.js +2259 -0
- package/bin/node/string_decoder.js +101 -0
- package/bin/node/system_extra.js +661 -0
- package/bin/node/test.js +1068 -0
- package/bin/node/timers.js +250 -0
- package/bin/node/tls.js +719 -0
- package/bin/node/url.js +861 -0
- package/bin/node/util.js +1311 -0
- package/bin/node/util_extra.js +599 -0
- package/bin/node/worker_threads.js +745 -0
- package/bin/node/zlib.js +263 -0
- package/bin/parse-native.js +3 -2
- package/bin/parse-node.js +18 -2
- package/bin/transpiler.js +3529 -597
- package/bin/version.js +2 -0
- package/conformance.md +724 -258
- package/govendor/github.com/ncruces/go-sqlite3/LICENSE +21 -0
- package/govendor/github.com/ncruces/go-sqlite3/README.md +121 -0
- package/govendor/github.com/ncruces/go-sqlite3/backup.go +132 -0
- package/govendor/github.com/ncruces/go-sqlite3/blob.go +266 -0
- package/govendor/github.com/ncruces/go-sqlite3/config.go +397 -0
- package/govendor/github.com/ncruces/go-sqlite3/conn.go +540 -0
- package/govendor/github.com/ncruces/go-sqlite3/conn_127.go +93 -0
- package/govendor/github.com/ncruces/go-sqlite3/const.go +436 -0
- package/govendor/github.com/ncruces/go-sqlite3/context.go +222 -0
- package/govendor/github.com/ncruces/go-sqlite3/error.go +182 -0
- package/govendor/github.com/ncruces/go-sqlite3/ext.go +153 -0
- package/govendor/github.com/ncruces/go-sqlite3/func.go +309 -0
- package/govendor/github.com/ncruces/go-sqlite3/go.mod +3 -0
- package/govendor/github.com/ncruces/go-sqlite3/internal/dotlk/dotlk.go +29 -0
- package/govendor/github.com/ncruces/go-sqlite3/internal/dotlk/dotlk_other.go +13 -0
- package/govendor/github.com/ncruces/go-sqlite3/internal/dotlk/dotlk_unix.go +57 -0
- package/govendor/github.com/ncruces/go-sqlite3/internal/errutil/error.go +41 -0
- package/govendor/github.com/ncruces/go-sqlite3/internal/sqlite3_wrap/alloc.go +128 -0
- package/govendor/github.com/ncruces/go-sqlite3/internal/sqlite3_wrap/const.go +122 -0
- package/govendor/github.com/ncruces/go-sqlite3/internal/sqlite3_wrap/error.go +77 -0
- package/govendor/github.com/ncruces/go-sqlite3/internal/sqlite3_wrap/mem.go +116 -0
- package/govendor/github.com/ncruces/go-sqlite3/internal/sqlite3_wrap/mem_other.go +34 -0
- package/govendor/github.com/ncruces/go-sqlite3/internal/sqlite3_wrap/mem_unix.go +87 -0
- package/govendor/github.com/ncruces/go-sqlite3/internal/sqlite3_wrap/mem_windows.go +149 -0
- package/govendor/github.com/ncruces/go-sqlite3/internal/sqlite3_wrap/mmap_unix.go +80 -0
- package/govendor/github.com/ncruces/go-sqlite3/internal/sqlite3_wrap/mmap_windows.go +129 -0
- package/govendor/github.com/ncruces/go-sqlite3/internal/sqlite3_wrap/sys_windows.go +60 -0
- package/govendor/github.com/ncruces/go-sqlite3/internal/sqlite3_wrap/wrap.go +82 -0
- package/govendor/github.com/ncruces/go-sqlite3/internal/sqlite3_wrap/wrap_sys.go +113 -0
- package/govendor/github.com/ncruces/go-sqlite3/internal/sqlite3_wrap/wrap_vfs.go +181 -0
- package/govendor/github.com/ncruces/go-sqlite3/internal/testenv/env.go +55 -0
- package/govendor/github.com/ncruces/go-sqlite3/internal/util/json.go +54 -0
- package/govendor/github.com/ncruces/go-sqlite3/internal/util/json_v2.go +54 -0
- package/govendor/github.com/ncruces/go-sqlite3/internal/util/math.go +29 -0
- package/govendor/github.com/ncruces/go-sqlite3/internal/util/page.go +5 -0
- package/govendor/github.com/ncruces/go-sqlite3/internal/util/parse.go +142 -0
- package/govendor/github.com/ncruces/go-sqlite3/internal/util/pointer.go +3 -0
- package/govendor/github.com/ncruces/go-sqlite3/internal/util/reflect.go +10 -0
- package/govendor/github.com/ncruces/go-sqlite3/json.go +100 -0
- package/govendor/github.com/ncruces/go-sqlite3/json_v2.go +116 -0
- package/govendor/github.com/ncruces/go-sqlite3/pointer.go +13 -0
- package/govendor/github.com/ncruces/go-sqlite3/quote.go +140 -0
- package/govendor/github.com/ncruces/go-sqlite3/stmt.go +692 -0
- package/govendor/github.com/ncruces/go-sqlite3/time.go +360 -0
- package/govendor/github.com/ncruces/go-sqlite3/txn.go +374 -0
- package/govendor/github.com/ncruces/go-sqlite3/value.go +212 -0
- package/govendor/github.com/ncruces/go-sqlite3/vfs/README.md +133 -0
- package/govendor/github.com/ncruces/go-sqlite3/vfs/api.go +239 -0
- package/govendor/github.com/ncruces/go-sqlite3/vfs/cksm.go +143 -0
- package/govendor/github.com/ncruces/go-sqlite3/vfs/const.go +256 -0
- package/govendor/github.com/ncruces/go-sqlite3/vfs/file.go +260 -0
- package/govendor/github.com/ncruces/go-sqlite3/vfs/filename.go +187 -0
- package/govendor/github.com/ncruces/go-sqlite3/vfs/lock.go +128 -0
- package/govendor/github.com/ncruces/go-sqlite3/vfs/lock_other.go +23 -0
- package/govendor/github.com/ncruces/go-sqlite3/vfs/map.go +63 -0
- package/govendor/github.com/ncruces/go-sqlite3/vfs/map_other.go +13 -0
- package/govendor/github.com/ncruces/go-sqlite3/vfs/os_bsd.go +110 -0
- package/govendor/github.com/ncruces/go-sqlite3/vfs/os_darwin.go +131 -0
- package/govendor/github.com/ncruces/go-sqlite3/vfs/os_dotlk.go +140 -0
- package/govendor/github.com/ncruces/go-sqlite3/vfs/os_f2fs_linux.go +56 -0
- package/govendor/github.com/ncruces/go-sqlite3/vfs/os_linux.go +117 -0
- package/govendor/github.com/ncruces/go-sqlite3/vfs/os_ofd.go +59 -0
- package/govendor/github.com/ncruces/go-sqlite3/vfs/os_std.go +50 -0
- package/govendor/github.com/ncruces/go-sqlite3/vfs/os_std_alloc.go +19 -0
- package/govendor/github.com/ncruces/go-sqlite3/vfs/os_std_atomic.go +9 -0
- package/govendor/github.com/ncruces/go-sqlite3/vfs/os_std_rw.go +13 -0
- package/govendor/github.com/ncruces/go-sqlite3/vfs/os_std_sync.go +9 -0
- package/govendor/github.com/ncruces/go-sqlite3/vfs/os_std_temp.go +16 -0
- package/govendor/github.com/ncruces/go-sqlite3/vfs/os_unix.go +108 -0
- package/govendor/github.com/ncruces/go-sqlite3/vfs/os_windows.go +180 -0
- package/govendor/github.com/ncruces/go-sqlite3/vfs/registry.go +48 -0
- package/govendor/github.com/ncruces/go-sqlite3/vfs/shm.go +26 -0
- package/govendor/github.com/ncruces/go-sqlite3/vfs/shm_bsd.go +258 -0
- package/govendor/github.com/ncruces/go-sqlite3/vfs/shm_copy.go +90 -0
- package/govendor/github.com/ncruces/go-sqlite3/vfs/shm_dotlk.go +168 -0
- package/govendor/github.com/ncruces/go-sqlite3/vfs/shm_memlk.go +52 -0
- package/govendor/github.com/ncruces/go-sqlite3/vfs/shm_ofd.go +185 -0
- package/govendor/github.com/ncruces/go-sqlite3/vfs/shm_other.go +21 -0
- package/govendor/github.com/ncruces/go-sqlite3/vfs/shm_windows.go +124 -0
- package/govendor/github.com/ncruces/go-sqlite3/vfs/vfs.go +455 -0
- package/govendor/github.com/ncruces/go-sqlite3/vtab.go +677 -0
- package/govendor/github.com/ncruces/go-sqlite3/wrap.go +48 -0
- package/govendor/github.com/ncruces/go-sqlite3-wasm/v6/LICENSE +18 -0
- package/govendor/github.com/ncruces/go-sqlite3-wasm/v6/README.md +11 -0
- package/govendor/github.com/ncruces/go-sqlite3-wasm/v6/go.mod +3 -0
- package/govendor/github.com/ncruces/go-sqlite3-wasm/v6/libc.go +215 -0
- package/govendor/github.com/ncruces/go-sqlite3-wasm/v6/sqlite3.dat +0 -0
- package/govendor/github.com/ncruces/go-sqlite3-wasm/v6/sqlite3.go +157903 -0
- package/govendor/github.com/ncruces/go-sqlite3-wasm/v6/tools.sh +38 -0
- package/govendor/github.com/ncruces/julianday/LICENSE +21 -0
- package/govendor/github.com/ncruces/julianday/README.md +9 -0
- package/govendor/github.com/ncruces/julianday/go.mod +3 -0
- package/govendor/github.com/ncruces/julianday/julianday.go +124 -0
- package/govendor/golang.org/x/sys/LICENSE +27 -0
- package/govendor/golang.org/x/sys/PATENTS +22 -0
- package/govendor/golang.org/x/sys/go.mod +3 -0
- package/govendor/golang.org/x/sys/unix/README.md +184 -0
- package/govendor/golang.org/x/sys/unix/affinity_linux.go +189 -0
- package/govendor/golang.org/x/sys/unix/aliases.go +13 -0
- package/govendor/golang.org/x/sys/unix/asm_aix_ppc64.s +17 -0
- package/govendor/golang.org/x/sys/unix/asm_bsd_386.s +27 -0
- package/govendor/golang.org/x/sys/unix/asm_bsd_amd64.s +27 -0
- package/govendor/golang.org/x/sys/unix/asm_bsd_arm.s +27 -0
- package/govendor/golang.org/x/sys/unix/asm_bsd_arm64.s +27 -0
- package/govendor/golang.org/x/sys/unix/asm_bsd_ppc64.s +29 -0
- package/govendor/golang.org/x/sys/unix/asm_bsd_riscv64.s +27 -0
- package/govendor/golang.org/x/sys/unix/asm_linux_386.s +65 -0
- package/govendor/golang.org/x/sys/unix/asm_linux_amd64.s +57 -0
- package/govendor/golang.org/x/sys/unix/asm_linux_arm.s +56 -0
- package/govendor/golang.org/x/sys/unix/asm_linux_arm64.s +50 -0
- package/govendor/golang.org/x/sys/unix/asm_linux_loong64.s +51 -0
- package/govendor/golang.org/x/sys/unix/asm_linux_mips64x.s +54 -0
- package/govendor/golang.org/x/sys/unix/asm_linux_mipsx.s +52 -0
- package/govendor/golang.org/x/sys/unix/asm_linux_ppc64x.s +42 -0
- package/govendor/golang.org/x/sys/unix/asm_linux_riscv64.s +47 -0
- package/govendor/golang.org/x/sys/unix/asm_linux_s390x.s +54 -0
- package/govendor/golang.org/x/sys/unix/asm_openbsd_mips64.s +29 -0
- package/govendor/golang.org/x/sys/unix/asm_solaris_amd64.s +17 -0
- package/govendor/golang.org/x/sys/unix/asm_zos_s390x.s +382 -0
- package/govendor/golang.org/x/sys/unix/auxv.go +36 -0
- package/govendor/golang.org/x/sys/unix/auxv_unsupported.go +13 -0
- package/govendor/golang.org/x/sys/unix/bluetooth_linux.go +36 -0
- package/govendor/golang.org/x/sys/unix/bpxsvc_zos.go +657 -0
- package/govendor/golang.org/x/sys/unix/bpxsvc_zos.s +192 -0
- package/govendor/golang.org/x/sys/unix/cap_freebsd.go +195 -0
- package/govendor/golang.org/x/sys/unix/constants.go +13 -0
- package/govendor/golang.org/x/sys/unix/dev_aix_ppc.go +26 -0
- package/govendor/golang.org/x/sys/unix/dev_aix_ppc64.go +28 -0
- package/govendor/golang.org/x/sys/unix/dev_darwin.go +24 -0
- package/govendor/golang.org/x/sys/unix/dev_dragonfly.go +30 -0
- package/govendor/golang.org/x/sys/unix/dev_freebsd.go +30 -0
- package/govendor/golang.org/x/sys/unix/dev_linux.go +42 -0
- package/govendor/golang.org/x/sys/unix/dev_netbsd.go +29 -0
- package/govendor/golang.org/x/sys/unix/dev_openbsd.go +29 -0
- package/govendor/golang.org/x/sys/unix/dev_zos.go +28 -0
- package/govendor/golang.org/x/sys/unix/dirent.go +102 -0
- package/govendor/golang.org/x/sys/unix/endian_big.go +9 -0
- package/govendor/golang.org/x/sys/unix/endian_little.go +9 -0
- package/govendor/golang.org/x/sys/unix/env_unix.go +31 -0
- package/govendor/golang.org/x/sys/unix/fcntl.go +36 -0
- package/govendor/golang.org/x/sys/unix/fcntl_darwin.go +24 -0
- package/govendor/golang.org/x/sys/unix/fcntl_linux_32bit.go +13 -0
- package/govendor/golang.org/x/sys/unix/fdset.go +27 -0
- package/govendor/golang.org/x/sys/unix/gccgo.go +59 -0
- package/govendor/golang.org/x/sys/unix/gccgo_c.c +44 -0
- package/govendor/golang.org/x/sys/unix/gccgo_linux_amd64.go +20 -0
- package/govendor/golang.org/x/sys/unix/ifreq_linux.go +145 -0
- package/govendor/golang.org/x/sys/unix/ioctl_linux.go +341 -0
- package/govendor/golang.org/x/sys/unix/ioctl_signed.go +74 -0
- package/govendor/golang.org/x/sys/unix/ioctl_unsigned.go +74 -0
- package/govendor/golang.org/x/sys/unix/ioctl_zos.go +71 -0
- package/govendor/golang.org/x/sys/unix/mkall.sh +250 -0
- package/govendor/golang.org/x/sys/unix/mkerrors.sh +807 -0
- package/govendor/golang.org/x/sys/unix/mmap_nomremap.go +13 -0
- package/govendor/golang.org/x/sys/unix/mremap.go +57 -0
- package/govendor/golang.org/x/sys/unix/pagesize_unix.go +15 -0
- package/govendor/golang.org/x/sys/unix/pledge_openbsd.go +111 -0
- package/govendor/golang.org/x/sys/unix/ptrace_darwin.go +11 -0
- package/govendor/golang.org/x/sys/unix/ptrace_ios.go +11 -0
- package/govendor/golang.org/x/sys/unix/race.go +30 -0
- package/govendor/golang.org/x/sys/unix/race0.go +25 -0
- package/govendor/golang.org/x/sys/unix/readdirent_getdents.go +12 -0
- package/govendor/golang.org/x/sys/unix/readdirent_getdirentries.go +19 -0
- package/govendor/golang.org/x/sys/unix/readv_unix.go +103 -0
- package/govendor/golang.org/x/sys/unix/sockcmsg_dragonfly.go +16 -0
- package/govendor/golang.org/x/sys/unix/sockcmsg_linux.go +85 -0
- package/govendor/golang.org/x/sys/unix/sockcmsg_unix.go +106 -0
- package/govendor/golang.org/x/sys/unix/sockcmsg_unix_other.go +46 -0
- package/govendor/golang.org/x/sys/unix/sockcmsg_zos.go +58 -0
- package/govendor/golang.org/x/sys/unix/symaddr_zos_s390x.s +75 -0
- package/govendor/golang.org/x/sys/unix/syscall.go +86 -0
- package/govendor/golang.org/x/sys/unix/syscall_aix.go +582 -0
- package/govendor/golang.org/x/sys/unix/syscall_aix_ppc.go +52 -0
- package/govendor/golang.org/x/sys/unix/syscall_aix_ppc64.go +83 -0
- package/govendor/golang.org/x/sys/unix/syscall_bsd.go +609 -0
- package/govendor/golang.org/x/sys/unix/syscall_darwin.go +711 -0
- package/govendor/golang.org/x/sys/unix/syscall_darwin_amd64.go +50 -0
- package/govendor/golang.org/x/sys/unix/syscall_darwin_arm64.go +50 -0
- package/govendor/golang.org/x/sys/unix/syscall_darwin_libSystem.go +26 -0
- package/govendor/golang.org/x/sys/unix/syscall_dragonfly.go +359 -0
- package/govendor/golang.org/x/sys/unix/syscall_dragonfly_amd64.go +56 -0
- package/govendor/golang.org/x/sys/unix/syscall_freebsd.go +455 -0
- package/govendor/golang.org/x/sys/unix/syscall_freebsd_386.go +64 -0
- package/govendor/golang.org/x/sys/unix/syscall_freebsd_amd64.go +64 -0
- package/govendor/golang.org/x/sys/unix/syscall_freebsd_arm.go +60 -0
- package/govendor/golang.org/x/sys/unix/syscall_freebsd_arm64.go +60 -0
- package/govendor/golang.org/x/sys/unix/syscall_freebsd_riscv64.go +60 -0
- package/govendor/golang.org/x/sys/unix/syscall_hurd.go +30 -0
- package/govendor/golang.org/x/sys/unix/syscall_hurd_386.go +28 -0
- package/govendor/golang.org/x/sys/unix/syscall_illumos.go +78 -0
- package/govendor/golang.org/x/sys/unix/syscall_linux.go +2574 -0
- package/govendor/golang.org/x/sys/unix/syscall_linux_386.go +313 -0
- package/govendor/golang.org/x/sys/unix/syscall_linux_alarm.go +12 -0
- package/govendor/golang.org/x/sys/unix/syscall_linux_amd64.go +144 -0
- package/govendor/golang.org/x/sys/unix/syscall_linux_amd64_gc.go +12 -0
- package/govendor/golang.org/x/sys/unix/syscall_linux_arm.go +218 -0
- package/govendor/golang.org/x/sys/unix/syscall_linux_arm64.go +188 -0
- package/govendor/golang.org/x/sys/unix/syscall_linux_gc.go +14 -0
- package/govendor/golang.org/x/sys/unix/syscall_linux_gc_386.go +16 -0
- package/govendor/golang.org/x/sys/unix/syscall_linux_gc_arm.go +13 -0
- package/govendor/golang.org/x/sys/unix/syscall_linux_gccgo_386.go +30 -0
- package/govendor/golang.org/x/sys/unix/syscall_linux_gccgo_arm.go +20 -0
- package/govendor/golang.org/x/sys/unix/syscall_linux_loong64.go +220 -0
- package/govendor/golang.org/x/sys/unix/syscall_linux_mips64x.go +187 -0
- package/govendor/golang.org/x/sys/unix/syscall_linux_mipsx.go +173 -0
- package/govendor/golang.org/x/sys/unix/syscall_linux_ppc.go +203 -0
- package/govendor/golang.org/x/sys/unix/syscall_linux_ppc64x.go +114 -0
- package/govendor/golang.org/x/sys/unix/syscall_linux_riscv64.go +193 -0
- package/govendor/golang.org/x/sys/unix/syscall_linux_s390x.go +295 -0
- package/govendor/golang.org/x/sys/unix/syscall_linux_sparc64.go +111 -0
- package/govendor/golang.org/x/sys/unix/syscall_netbsd.go +388 -0
- package/govendor/golang.org/x/sys/unix/syscall_netbsd_386.go +37 -0
- package/govendor/golang.org/x/sys/unix/syscall_netbsd_amd64.go +37 -0
- package/govendor/golang.org/x/sys/unix/syscall_netbsd_arm.go +37 -0
- package/govendor/golang.org/x/sys/unix/syscall_netbsd_arm64.go +37 -0
- package/govendor/golang.org/x/sys/unix/syscall_openbsd.go +346 -0
- package/govendor/golang.org/x/sys/unix/syscall_openbsd_386.go +41 -0
- package/govendor/golang.org/x/sys/unix/syscall_openbsd_amd64.go +41 -0
- package/govendor/golang.org/x/sys/unix/syscall_openbsd_arm.go +41 -0
- package/govendor/golang.org/x/sys/unix/syscall_openbsd_arm64.go +41 -0
- package/govendor/golang.org/x/sys/unix/syscall_openbsd_libc.go +26 -0
- package/govendor/golang.org/x/sys/unix/syscall_openbsd_mips64.go +39 -0
- package/govendor/golang.org/x/sys/unix/syscall_openbsd_ppc64.go +41 -0
- package/govendor/golang.org/x/sys/unix/syscall_openbsd_riscv64.go +41 -0
- package/govendor/golang.org/x/sys/unix/syscall_solaris.go +1183 -0
- package/govendor/golang.org/x/sys/unix/syscall_solaris_amd64.go +27 -0
- package/govendor/golang.org/x/sys/unix/syscall_unix.go +619 -0
- package/govendor/golang.org/x/sys/unix/syscall_unix_gc.go +14 -0
- package/govendor/golang.org/x/sys/unix/syscall_unix_gc_ppc64x.go +22 -0
- package/govendor/golang.org/x/sys/unix/syscall_zos_s390x.go +3213 -0
- package/govendor/golang.org/x/sys/unix/sysvshm_linux.go +20 -0
- package/govendor/golang.org/x/sys/unix/sysvshm_unix.go +51 -0
- package/govendor/golang.org/x/sys/unix/sysvshm_unix_other.go +13 -0
- package/govendor/golang.org/x/sys/unix/timestruct.go +76 -0
- package/govendor/golang.org/x/sys/unix/unveil_openbsd.go +51 -0
- package/govendor/golang.org/x/sys/unix/vgetrandom_linux.go +13 -0
- package/govendor/golang.org/x/sys/unix/vgetrandom_unsupported.go +11 -0
- package/govendor/golang.org/x/sys/unix/xattr_bsd.go +280 -0
- package/govendor/golang.org/x/sys/unix/zerrors_aix_ppc.go +1384 -0
- package/govendor/golang.org/x/sys/unix/zerrors_aix_ppc64.go +1385 -0
- package/govendor/golang.org/x/sys/unix/zerrors_darwin_amd64.go +1922 -0
- package/govendor/golang.org/x/sys/unix/zerrors_darwin_arm64.go +1922 -0
- package/govendor/golang.org/x/sys/unix/zerrors_dragonfly_amd64.go +1737 -0
- package/govendor/golang.org/x/sys/unix/zerrors_freebsd_386.go +2042 -0
- package/govendor/golang.org/x/sys/unix/zerrors_freebsd_amd64.go +2039 -0
- package/govendor/golang.org/x/sys/unix/zerrors_freebsd_arm.go +2033 -0
- package/govendor/golang.org/x/sys/unix/zerrors_freebsd_arm64.go +2033 -0
- package/govendor/golang.org/x/sys/unix/zerrors_freebsd_riscv64.go +2147 -0
- package/govendor/golang.org/x/sys/unix/zerrors_linux.go +4209 -0
- package/govendor/golang.org/x/sys/unix/zerrors_linux_386.go +882 -0
- package/govendor/golang.org/x/sys/unix/zerrors_linux_amd64.go +882 -0
- package/govendor/golang.org/x/sys/unix/zerrors_linux_arm.go +887 -0
- package/govendor/golang.org/x/sys/unix/zerrors_linux_arm64.go +884 -0
- package/govendor/golang.org/x/sys/unix/zerrors_linux_loong64.go +874 -0
- package/govendor/golang.org/x/sys/unix/zerrors_linux_mips.go +888 -0
- package/govendor/golang.org/x/sys/unix/zerrors_linux_mips64.go +888 -0
- package/govendor/golang.org/x/sys/unix/zerrors_linux_mips64le.go +888 -0
- package/govendor/golang.org/x/sys/unix/zerrors_linux_mipsle.go +888 -0
- package/govendor/golang.org/x/sys/unix/zerrors_linux_ppc.go +940 -0
- package/govendor/golang.org/x/sys/unix/zerrors_linux_ppc64.go +944 -0
- package/govendor/golang.org/x/sys/unix/zerrors_linux_ppc64le.go +944 -0
- package/govendor/golang.org/x/sys/unix/zerrors_linux_riscv64.go +884 -0
- package/govendor/golang.org/x/sys/unix/zerrors_linux_s390x.go +943 -0
- package/govendor/golang.org/x/sys/unix/zerrors_linux_sparc64.go +992 -0
- package/govendor/golang.org/x/sys/unix/zerrors_netbsd_386.go +1779 -0
- package/govendor/golang.org/x/sys/unix/zerrors_netbsd_amd64.go +1769 -0
- package/govendor/golang.org/x/sys/unix/zerrors_netbsd_arm.go +1758 -0
- package/govendor/golang.org/x/sys/unix/zerrors_netbsd_arm64.go +1769 -0
- package/govendor/golang.org/x/sys/unix/zerrors_openbsd_386.go +1905 -0
- package/govendor/golang.org/x/sys/unix/zerrors_openbsd_amd64.go +1905 -0
- package/govendor/golang.org/x/sys/unix/zerrors_openbsd_arm.go +1905 -0
- package/govendor/golang.org/x/sys/unix/zerrors_openbsd_arm64.go +1905 -0
- package/govendor/golang.org/x/sys/unix/zerrors_openbsd_mips64.go +1905 -0
- package/govendor/golang.org/x/sys/unix/zerrors_openbsd_ppc64.go +1904 -0
- package/govendor/golang.org/x/sys/unix/zerrors_openbsd_riscv64.go +1903 -0
- package/govendor/golang.org/x/sys/unix/zerrors_solaris_amd64.go +1556 -0
- package/govendor/golang.org/x/sys/unix/zerrors_zos_s390x.go +990 -0
- package/govendor/golang.org/x/sys/unix/zptrace_armnn_linux.go +40 -0
- package/govendor/golang.org/x/sys/unix/zptrace_linux_arm64.go +17 -0
- package/govendor/golang.org/x/sys/unix/zptrace_mipsnn_linux.go +49 -0
- package/govendor/golang.org/x/sys/unix/zptrace_mipsnnle_linux.go +49 -0
- package/govendor/golang.org/x/sys/unix/zptrace_x86_linux.go +79 -0
- package/govendor/golang.org/x/sys/unix/zsymaddr_zos_s390x.s +364 -0
- package/govendor/golang.org/x/sys/unix/zsyscall_aix_ppc.go +1461 -0
- package/govendor/golang.org/x/sys/unix/zsyscall_aix_ppc64.go +1420 -0
- package/govendor/golang.org/x/sys/unix/zsyscall_aix_ppc64_gc.go +1188 -0
- package/govendor/golang.org/x/sys/unix/zsyscall_aix_ppc64_gccgo.go +1069 -0
- package/govendor/golang.org/x/sys/unix/zsyscall_darwin_amd64.go +2728 -0
- package/govendor/golang.org/x/sys/unix/zsyscall_darwin_amd64.s +799 -0
- package/govendor/golang.org/x/sys/unix/zsyscall_darwin_arm64.go +2728 -0
- package/govendor/golang.org/x/sys/unix/zsyscall_darwin_arm64.s +799 -0
- package/govendor/golang.org/x/sys/unix/zsyscall_dragonfly_amd64.go +1666 -0
- package/govendor/golang.org/x/sys/unix/zsyscall_freebsd_386.go +1886 -0
- package/govendor/golang.org/x/sys/unix/zsyscall_freebsd_amd64.go +1886 -0
- package/govendor/golang.org/x/sys/unix/zsyscall_freebsd_arm.go +1886 -0
- package/govendor/golang.org/x/sys/unix/zsyscall_freebsd_arm64.go +1886 -0
- package/govendor/golang.org/x/sys/unix/zsyscall_freebsd_riscv64.go +1886 -0
- package/govendor/golang.org/x/sys/unix/zsyscall_illumos_amd64.go +101 -0
- package/govendor/golang.org/x/sys/unix/zsyscall_linux.go +2267 -0
- package/govendor/golang.org/x/sys/unix/zsyscall_linux_386.go +469 -0
- package/govendor/golang.org/x/sys/unix/zsyscall_linux_amd64.go +636 -0
- package/govendor/golang.org/x/sys/unix/zsyscall_linux_arm.go +584 -0
- package/govendor/golang.org/x/sys/unix/zsyscall_linux_arm64.go +535 -0
- package/govendor/golang.org/x/sys/unix/zsyscall_linux_loong64.go +469 -0
- package/govendor/golang.org/x/sys/unix/zsyscall_linux_mips.go +636 -0
- package/govendor/golang.org/x/sys/unix/zsyscall_linux_mips64.go +630 -0
- package/govendor/golang.org/x/sys/unix/zsyscall_linux_mips64le.go +619 -0
- package/govendor/golang.org/x/sys/unix/zsyscall_linux_mipsle.go +636 -0
- package/govendor/golang.org/x/sys/unix/zsyscall_linux_ppc.go +641 -0
- package/govendor/golang.org/x/sys/unix/zsyscall_linux_ppc64.go +687 -0
- package/govendor/golang.org/x/sys/unix/zsyscall_linux_ppc64le.go +687 -0
- package/govendor/golang.org/x/sys/unix/zsyscall_linux_riscv64.go +531 -0
- package/govendor/golang.org/x/sys/unix/zsyscall_linux_s390x.go +478 -0
- package/govendor/golang.org/x/sys/unix/zsyscall_linux_sparc64.go +631 -0
- package/govendor/golang.org/x/sys/unix/zsyscall_netbsd_386.go +1848 -0
- package/govendor/golang.org/x/sys/unix/zsyscall_netbsd_amd64.go +1848 -0
- package/govendor/golang.org/x/sys/unix/zsyscall_netbsd_arm.go +1848 -0
- package/govendor/golang.org/x/sys/unix/zsyscall_netbsd_arm64.go +1848 -0
- package/govendor/golang.org/x/sys/unix/zsyscall_openbsd_386.go +2407 -0
- package/govendor/golang.org/x/sys/unix/zsyscall_openbsd_386.s +719 -0
- package/govendor/golang.org/x/sys/unix/zsyscall_openbsd_amd64.go +2407 -0
- package/govendor/golang.org/x/sys/unix/zsyscall_openbsd_amd64.s +719 -0
- package/govendor/golang.org/x/sys/unix/zsyscall_openbsd_arm.go +2407 -0
- package/govendor/golang.org/x/sys/unix/zsyscall_openbsd_arm.s +719 -0
- package/govendor/golang.org/x/sys/unix/zsyscall_openbsd_arm64.go +2407 -0
- package/govendor/golang.org/x/sys/unix/zsyscall_openbsd_arm64.s +719 -0
- package/govendor/golang.org/x/sys/unix/zsyscall_openbsd_mips64.go +2407 -0
- package/govendor/golang.org/x/sys/unix/zsyscall_openbsd_mips64.s +719 -0
- package/govendor/golang.org/x/sys/unix/zsyscall_openbsd_ppc64.go +2407 -0
- package/govendor/golang.org/x/sys/unix/zsyscall_openbsd_ppc64.s +862 -0
- package/govendor/golang.org/x/sys/unix/zsyscall_openbsd_riscv64.go +2407 -0
- package/govendor/golang.org/x/sys/unix/zsyscall_openbsd_riscv64.s +719 -0
- package/govendor/golang.org/x/sys/unix/zsyscall_solaris_amd64.go +2217 -0
- package/govendor/golang.org/x/sys/unix/zsyscall_zos_s390x.go +3458 -0
- package/govendor/golang.org/x/sys/unix/zsysctl_openbsd_386.go +280 -0
- package/govendor/golang.org/x/sys/unix/zsysctl_openbsd_amd64.go +280 -0
- package/govendor/golang.org/x/sys/unix/zsysctl_openbsd_arm.go +280 -0
- package/govendor/golang.org/x/sys/unix/zsysctl_openbsd_arm64.go +280 -0
- package/govendor/golang.org/x/sys/unix/zsysctl_openbsd_mips64.go +280 -0
- package/govendor/golang.org/x/sys/unix/zsysctl_openbsd_ppc64.go +280 -0
- package/govendor/golang.org/x/sys/unix/zsysctl_openbsd_riscv64.go +281 -0
- package/govendor/golang.org/x/sys/unix/zsysnum_darwin_amd64.go +439 -0
- package/govendor/golang.org/x/sys/unix/zsysnum_darwin_arm64.go +437 -0
- package/govendor/golang.org/x/sys/unix/zsysnum_dragonfly_amd64.go +316 -0
- package/govendor/golang.org/x/sys/unix/zsysnum_freebsd_386.go +393 -0
- package/govendor/golang.org/x/sys/unix/zsysnum_freebsd_amd64.go +393 -0
- package/govendor/golang.org/x/sys/unix/zsysnum_freebsd_arm.go +393 -0
- package/govendor/golang.org/x/sys/unix/zsysnum_freebsd_arm64.go +393 -0
- package/govendor/golang.org/x/sys/unix/zsysnum_freebsd_riscv64.go +393 -0
- package/govendor/golang.org/x/sys/unix/zsysnum_linux_386.go +470 -0
- package/govendor/golang.org/x/sys/unix/zsysnum_linux_amd64.go +394 -0
- package/govendor/golang.org/x/sys/unix/zsysnum_linux_arm.go +434 -0
- package/govendor/golang.org/x/sys/unix/zsysnum_linux_arm64.go +337 -0
- package/govendor/golang.org/x/sys/unix/zsysnum_linux_loong64.go +334 -0
- package/govendor/golang.org/x/sys/unix/zsysnum_linux_mips.go +454 -0
- package/govendor/golang.org/x/sys/unix/zsysnum_linux_mips64.go +384 -0
- package/govendor/golang.org/x/sys/unix/zsysnum_linux_mips64le.go +384 -0
- package/govendor/golang.org/x/sys/unix/zsysnum_linux_mipsle.go +454 -0
- package/govendor/golang.org/x/sys/unix/zsysnum_linux_ppc.go +461 -0
- package/govendor/golang.org/x/sys/unix/zsysnum_linux_ppc64.go +433 -0
- package/govendor/golang.org/x/sys/unix/zsysnum_linux_ppc64le.go +433 -0
- package/govendor/golang.org/x/sys/unix/zsysnum_linux_riscv64.go +338 -0
- package/govendor/golang.org/x/sys/unix/zsysnum_linux_s390x.go +399 -0
- package/govendor/golang.org/x/sys/unix/zsysnum_linux_sparc64.go +413 -0
- package/govendor/golang.org/x/sys/unix/zsysnum_netbsd_386.go +274 -0
- package/govendor/golang.org/x/sys/unix/zsysnum_netbsd_amd64.go +274 -0
- package/govendor/golang.org/x/sys/unix/zsysnum_netbsd_arm.go +274 -0
- package/govendor/golang.org/x/sys/unix/zsysnum_netbsd_arm64.go +274 -0
- package/govendor/golang.org/x/sys/unix/zsysnum_openbsd_386.go +219 -0
- package/govendor/golang.org/x/sys/unix/zsysnum_openbsd_amd64.go +219 -0
- package/govendor/golang.org/x/sys/unix/zsysnum_openbsd_arm.go +219 -0
- package/govendor/golang.org/x/sys/unix/zsysnum_openbsd_arm64.go +218 -0
- package/govendor/golang.org/x/sys/unix/zsysnum_openbsd_mips64.go +221 -0
- package/govendor/golang.org/x/sys/unix/zsysnum_openbsd_ppc64.go +217 -0
- package/govendor/golang.org/x/sys/unix/zsysnum_openbsd_riscv64.go +218 -0
- package/govendor/golang.org/x/sys/unix/zsysnum_zos_s390x.go +2852 -0
- package/govendor/golang.org/x/sys/unix/ztypes_aix_ppc.go +353 -0
- package/govendor/golang.org/x/sys/unix/ztypes_aix_ppc64.go +357 -0
- package/govendor/golang.org/x/sys/unix/ztypes_darwin_amd64.go +878 -0
- package/govendor/golang.org/x/sys/unix/ztypes_darwin_arm64.go +878 -0
- package/govendor/golang.org/x/sys/unix/ztypes_dragonfly_amd64.go +473 -0
- package/govendor/golang.org/x/sys/unix/ztypes_freebsd_386.go +651 -0
- package/govendor/golang.org/x/sys/unix/ztypes_freebsd_amd64.go +656 -0
- package/govendor/golang.org/x/sys/unix/ztypes_freebsd_arm.go +642 -0
- package/govendor/golang.org/x/sys/unix/ztypes_freebsd_arm64.go +636 -0
- package/govendor/golang.org/x/sys/unix/ztypes_freebsd_riscv64.go +638 -0
- package/govendor/golang.org/x/sys/unix/ztypes_linux.go +6547 -0
- package/govendor/golang.org/x/sys/unix/ztypes_linux_386.go +747 -0
- package/govendor/golang.org/x/sys/unix/ztypes_linux_amd64.go +761 -0
- package/govendor/golang.org/x/sys/unix/ztypes_linux_arm.go +741 -0
- package/govendor/golang.org/x/sys/unix/ztypes_linux_arm64.go +740 -0
- package/govendor/golang.org/x/sys/unix/ztypes_linux_loong64.go +741 -0
- package/govendor/golang.org/x/sys/unix/ztypes_linux_mips.go +746 -0
- package/govendor/golang.org/x/sys/unix/ztypes_linux_mips64.go +743 -0
- package/govendor/golang.org/x/sys/unix/ztypes_linux_mips64le.go +743 -0
- package/govendor/golang.org/x/sys/unix/ztypes_linux_mipsle.go +746 -0
- package/govendor/golang.org/x/sys/unix/ztypes_linux_ppc.go +754 -0
- package/govendor/golang.org/x/sys/unix/ztypes_linux_ppc64.go +749 -0
- package/govendor/golang.org/x/sys/unix/ztypes_linux_ppc64le.go +749 -0
- package/govendor/golang.org/x/sys/unix/ztypes_linux_riscv64.go +828 -0
- package/govendor/golang.org/x/sys/unix/ztypes_linux_s390x.go +763 -0
- package/govendor/golang.org/x/sys/unix/ztypes_linux_sparc64.go +744 -0
- package/govendor/golang.org/x/sys/unix/ztypes_netbsd_386.go +585 -0
- package/govendor/golang.org/x/sys/unix/ztypes_netbsd_amd64.go +593 -0
- package/govendor/golang.org/x/sys/unix/ztypes_netbsd_arm.go +590 -0
- package/govendor/golang.org/x/sys/unix/ztypes_netbsd_arm64.go +593 -0
- package/govendor/golang.org/x/sys/unix/ztypes_openbsd_386.go +568 -0
- package/govendor/golang.org/x/sys/unix/ztypes_openbsd_amd64.go +568 -0
- package/govendor/golang.org/x/sys/unix/ztypes_openbsd_arm.go +575 -0
- package/govendor/golang.org/x/sys/unix/ztypes_openbsd_arm64.go +568 -0
- package/govendor/golang.org/x/sys/unix/ztypes_openbsd_mips64.go +568 -0
- package/govendor/golang.org/x/sys/unix/ztypes_openbsd_ppc64.go +570 -0
- package/govendor/golang.org/x/sys/unix/ztypes_openbsd_riscv64.go +570 -0
- package/govendor/golang.org/x/sys/unix/ztypes_solaris_amd64.go +516 -0
- package/govendor/golang.org/x/sys/unix/ztypes_zos_s390x.go +552 -0
- package/govendor/golang.org/x/sys/windows/aliases.go +13 -0
- package/govendor/golang.org/x/sys/windows/dll_windows.go +380 -0
- package/govendor/golang.org/x/sys/windows/env_windows.go +57 -0
- package/govendor/golang.org/x/sys/windows/eventlog.go +20 -0
- package/govendor/golang.org/x/sys/windows/exec_windows.go +248 -0
- package/govendor/golang.org/x/sys/windows/memory_windows.go +48 -0
- package/govendor/golang.org/x/sys/windows/mkerrors.bash +70 -0
- package/govendor/golang.org/x/sys/windows/mkknownfolderids.bash +27 -0
- package/govendor/golang.org/x/sys/windows/mksyscall.go +9 -0
- package/govendor/golang.org/x/sys/windows/race.go +30 -0
- package/govendor/golang.org/x/sys/windows/race0.go +25 -0
- package/govendor/golang.org/x/sys/windows/security_windows.go +1537 -0
- package/govendor/golang.org/x/sys/windows/service.go +257 -0
- package/govendor/golang.org/x/sys/windows/setupapi_windows.go +1425 -0
- package/govendor/golang.org/x/sys/windows/str.go +22 -0
- package/govendor/golang.org/x/sys/windows/syscall.go +104 -0
- package/govendor/golang.org/x/sys/windows/syscall_windows.go +1952 -0
- package/govendor/golang.org/x/sys/windows/types_windows.go +4058 -0
- package/govendor/golang.org/x/sys/windows/types_windows_386.go +35 -0
- package/govendor/golang.org/x/sys/windows/types_windows_amd64.go +34 -0
- package/govendor/golang.org/x/sys/windows/types_windows_arm.go +35 -0
- package/govendor/golang.org/x/sys/windows/types_windows_arm64.go +34 -0
- package/govendor/golang.org/x/sys/windows/zerrors_windows.go +9468 -0
- package/govendor/golang.org/x/sys/windows/zknownfolderids_windows.go +149 -0
- package/govendor/golang.org/x/sys/windows/zsyscall_windows.go +4828 -0
- package/govendor/manifest.txt +7 -0
- package/package.json +6 -1
- package/tsparser/main.go +37 -3
- package/tsparser/tsparser.exe +2 -2
- package/types/typenative-go.d.ts +15159 -5
- package/types/typenative-npm.d.ts +2637 -30
- package/types/typenative.d.ts +1092 -56
|
@@ -0,0 +1,133 @@
|
|
|
1
|
+
# Go SQLite VFS API
|
|
2
|
+
|
|
3
|
+
This package implements the SQLite [OS Interface](https://sqlite.org/vfs.html) (aka VFS).
|
|
4
|
+
|
|
5
|
+
It replaces the default SQLite VFS with a **pure Go** implementation,
|
|
6
|
+
and exposes [interfaces](https://pkg.go.dev/github.com/ncruces/go-sqlite3/vfs#VFS)
|
|
7
|
+
that should allow you to implement your own [custom VFSes](#custom-vfses).
|
|
8
|
+
|
|
9
|
+
See the [support matrix](https://github.com/ncruces/go-sqlite3/wiki/Support-matrix)
|
|
10
|
+
for the list of supported OS and CPU architectures.
|
|
11
|
+
|
|
12
|
+
Since this is a from scratch reimplementation,
|
|
13
|
+
there are naturally some ways it deviates from the original.
|
|
14
|
+
It's also not as battle tested as the original.
|
|
15
|
+
|
|
16
|
+
The main differences to be aware of are
|
|
17
|
+
[file locking](#file-locking) and
|
|
18
|
+
[WAL mode](#write-ahead-logging) support.
|
|
19
|
+
|
|
20
|
+
### File Locking
|
|
21
|
+
|
|
22
|
+
POSIX advisory locks,
|
|
23
|
+
which SQLite uses on [Unix](https://github.com/sqlite/sqlite/blob/41fda52/src/os_unix.c#L13-L14),
|
|
24
|
+
are [broken by design](https://github.com/sqlite/sqlite/blob/41fda52/src/os_unix.c#L1188-L1276).
|
|
25
|
+
Instead, on Linux and macOS, this package uses
|
|
26
|
+
[OFD locks](https://sourceware.org/glibc/manual/2.25/html_node/Open-File-Description-Locks.html)
|
|
27
|
+
to synchronize access to database files.
|
|
28
|
+
OFD locks require [Linux 3.15](https://lwn.net/Articles/586904/).
|
|
29
|
+
|
|
30
|
+
This package can also use
|
|
31
|
+
[BSD locks](https://man.freebsd.org/cgi/man.cgi?query=flock&sektion=2),
|
|
32
|
+
albeit with reduced concurrency (`BEGIN IMMEDIATE` behaves like `BEGIN EXCLUSIVE`,
|
|
33
|
+
[docs](https://sqlite.org/lang_transaction.html#immediate)).
|
|
34
|
+
BSD locks are the default on BSD and illumos,
|
|
35
|
+
but you can opt into them with the `sqlite3_flock` build tag.
|
|
36
|
+
|
|
37
|
+
On Windows, this package uses `LockFileEx` and `UnlockFileEx`,
|
|
38
|
+
like SQLite.
|
|
39
|
+
|
|
40
|
+
You can also opt into a cross-platform locking implementation
|
|
41
|
+
with the `sqlite3_dotlk` build tag.
|
|
42
|
+
|
|
43
|
+
Otherwise, file locking is not supported, and you must use
|
|
44
|
+
[`nolock=1`](https://sqlite.org/uri.html#urinolock)
|
|
45
|
+
(or [`immutable=1`](https://sqlite.org/uri.html#uriimmutable))
|
|
46
|
+
to open database files.
|
|
47
|
+
To use the [`database/sql`](https://pkg.go.dev/database/sql) driver
|
|
48
|
+
with `nolock=1` you must disable connection pooling by calling
|
|
49
|
+
[`db.SetMaxOpenConns(1)`](https://pkg.go.dev/database/sql#DB.SetMaxOpenConns).
|
|
50
|
+
|
|
51
|
+
You can use [`vfs.SupportsFileLocking`](https://pkg.go.dev/github.com/ncruces/go-sqlite3/vfs#SupportsFileLocking)
|
|
52
|
+
to check if your build supports file locking.
|
|
53
|
+
|
|
54
|
+
### Write-Ahead Logging
|
|
55
|
+
|
|
56
|
+
On Unix, this package uses `mmap` to implement
|
|
57
|
+
[shared-memory for the WAL-index](https://sqlite.org/wal.html#implementation_of_shared_memory_for_the_wal_index),
|
|
58
|
+
like SQLite.
|
|
59
|
+
|
|
60
|
+
On Windows, this package uses `MapViewOfFile`, like SQLite.
|
|
61
|
+
|
|
62
|
+
You can also opt into a cross-platform, in-process, memory sharing implementation
|
|
63
|
+
with the `sqlite3_dotlk` build tag.
|
|
64
|
+
This implementation [shares memory through copying](https://github.com/ncruces/go-sqlite3/wiki/Sharing-memory-through-copying),
|
|
65
|
+
and is best used with moderate concurrency. Call
|
|
66
|
+
[`db.SetMaxOpenConns(max(2, runtime.GOMAXPROCS(0)))`](https://pkg.go.dev/database/sql#DB.SetMaxOpenConns)
|
|
67
|
+
to avoid excessive concurrency.
|
|
68
|
+
|
|
69
|
+
Otherwise, [WAL support is limited](https://sqlite.org/wal.html#noshm),
|
|
70
|
+
and `EXCLUSIVE` locking mode must be set to create, read, and write WAL databases.
|
|
71
|
+
To use `EXCLUSIVE` locking mode with the
|
|
72
|
+
[`database/sql`](https://pkg.go.dev/database/sql) driver
|
|
73
|
+
you must disable connection pooling by calling
|
|
74
|
+
[`db.SetMaxOpenConns(1)`](https://pkg.go.dev/database/sql#DB.SetMaxOpenConns).
|
|
75
|
+
|
|
76
|
+
You can use [`vfs.SupportsSharedMemory`](https://pkg.go.dev/github.com/ncruces/go-sqlite3/vfs#SupportsSharedMemory)
|
|
77
|
+
to check if your build supports shared memory.
|
|
78
|
+
|
|
79
|
+
### Blocking Locks
|
|
80
|
+
|
|
81
|
+
On macOS, this package implements
|
|
82
|
+
[Wal-mode blocking locks](https://sqlite.org/src/doc/tip/doc/wal-lock.md).
|
|
83
|
+
|
|
84
|
+
### Batch-Atomic Write
|
|
85
|
+
|
|
86
|
+
On Linux, this package may support
|
|
87
|
+
[batch-atomic writes](https://sqlite.org/cgi/src/technote/714)
|
|
88
|
+
on the F2FS filesystem.
|
|
89
|
+
|
|
90
|
+
### Checksums
|
|
91
|
+
|
|
92
|
+
This package can be [configured](https://pkg.go.dev/github.com/ncruces/go-sqlite3#Conn.EnableChecksums)
|
|
93
|
+
to add an 8-byte checksum to the end of every page in an SQLite database.
|
|
94
|
+
The checksum is added as each page is written
|
|
95
|
+
and verified as each page is read.\
|
|
96
|
+
The checksum is intended to help detect database corruption
|
|
97
|
+
caused by random bit-flips in the mass storage device.
|
|
98
|
+
|
|
99
|
+
The implementation is compatible with SQLite's
|
|
100
|
+
[Checksum VFS Shim](https://sqlite.org/cksumvfs.html).
|
|
101
|
+
|
|
102
|
+
### Build Tags
|
|
103
|
+
|
|
104
|
+
The VFS can be customized with a few build tags:
|
|
105
|
+
- `sqlite3_flock` forces the use of BSD locks.
|
|
106
|
+
- `sqlite3_dotlk` forces the use of dot-file locks.
|
|
107
|
+
|
|
108
|
+
> [!IMPORTANT]
|
|
109
|
+
> The default configuration of this package is compatible with the standard
|
|
110
|
+
> [Unix and Windows SQLite VFSes](https://sqlite.org/vfs.html#multiple_vfses);
|
|
111
|
+
> `sqlite3_flock` builds are compatible with the
|
|
112
|
+
> [`unix-flock` VFS](https://sqlite.org/compile.html#enable_locking_style);
|
|
113
|
+
> `sqlite3_dotlk` builds are compatible with the
|
|
114
|
+
> [`unix-dotfile` VFS](https://sqlite.org/compile.html#enable_locking_style).
|
|
115
|
+
|
|
116
|
+
> [!CAUTION]
|
|
117
|
+
> Concurrently accessing databases using incompatible VFSes
|
|
118
|
+
> will eventually corrupt data.
|
|
119
|
+
|
|
120
|
+
### Custom VFSes
|
|
121
|
+
|
|
122
|
+
- [`github.com/ncruces/go-sqlite3/vfs/memdb`](https://pkg.go.dev/github.com/ncruces/go-sqlite3/vfs/memdb)
|
|
123
|
+
implements an in-memory VFS.
|
|
124
|
+
- [`github.com/ncruces/go-sqlite3/vfs/mvcc`](https://pkg.go.dev/github.com/ncruces/go-sqlite3/vfs/mvcc)
|
|
125
|
+
implements an in-memory MVCC VFS.
|
|
126
|
+
- [`github.com/ncruces/go-sqlite3/vfs/readervfs`](https://pkg.go.dev/github.com/ncruces/go-sqlite3/vfs/readervfs)
|
|
127
|
+
implements a VFS for immutable databases.
|
|
128
|
+
- [`github.com/ncruces/go-sqlite3/vfs/adiantum`](https://pkg.go.dev/github.com/ncruces/go-sqlite3/vfs/adiantum)
|
|
129
|
+
wraps a VFS to offer encryption at rest.
|
|
130
|
+
- [`github.com/ncruces/go-sqlite3/vfs/xts`](https://pkg.go.dev/github.com/ncruces/go-sqlite3/vfs/xts)
|
|
131
|
+
wraps a VFS to offer encryption at rest.
|
|
132
|
+
- [`github.com/ncruces/litestream`](https://pkg.go.dev/github.com/ncruces/litestream)
|
|
133
|
+
implements Litestream [lightweight read-replicas](https://fly.io/blog/litestream-revamped/#lightweight-read-replicas).
|
|
@@ -0,0 +1,239 @@
|
|
|
1
|
+
// Package vfs wraps the C SQLite VFS API.
|
|
2
|
+
package vfs
|
|
3
|
+
|
|
4
|
+
import (
|
|
5
|
+
"io"
|
|
6
|
+
|
|
7
|
+
"github.com/ncruces/go-sqlite3/internal/sqlite3_wrap"
|
|
8
|
+
)
|
|
9
|
+
|
|
10
|
+
// A VFS defines the interface between the SQLite core and the underlying operating system.
|
|
11
|
+
//
|
|
12
|
+
// Use [SystemError], sqlite3.ErrorCode, or sqlite3.ExtendedErrorCode
|
|
13
|
+
// to return specific error codes to SQLite.
|
|
14
|
+
//
|
|
15
|
+
// https://sqlite.org/c3ref/vfs.html
|
|
16
|
+
type VFS interface {
|
|
17
|
+
Open(name string, flags OpenFlag) (File, OpenFlag, error)
|
|
18
|
+
Delete(name string, syncDir bool) error
|
|
19
|
+
Access(name string, flags AccessFlag) (bool, error)
|
|
20
|
+
FullPathname(name string) (string, error)
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
// VFSFilename extends VFS with the ability to use Filename
|
|
24
|
+
// objects for opening files.
|
|
25
|
+
//
|
|
26
|
+
// https://sqlite.org/c3ref/filename.html
|
|
27
|
+
type VFSFilename interface {
|
|
28
|
+
VFS
|
|
29
|
+
OpenFilename(name *Filename, flags OpenFlag) (File, OpenFlag, error)
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
// A File represents an open file in the OS interface layer.
|
|
33
|
+
//
|
|
34
|
+
// Use [SystemError], sqlite3.ErrorCode, or sqlite3.ExtendedErrorCode
|
|
35
|
+
// to return specific error codes to SQLite.
|
|
36
|
+
// In particular, sqlite3.BUSY is needed to correctly implement lock methods.
|
|
37
|
+
//
|
|
38
|
+
// https://sqlite.org/c3ref/io_methods.html
|
|
39
|
+
type File interface {
|
|
40
|
+
io.Closer
|
|
41
|
+
io.ReaderAt
|
|
42
|
+
io.WriterAt
|
|
43
|
+
Truncate(size int64) error
|
|
44
|
+
Sync(flags SyncFlag) error
|
|
45
|
+
Size() (int64, error)
|
|
46
|
+
Lock(lock LockLevel) error
|
|
47
|
+
Unlock(lock LockLevel) error
|
|
48
|
+
CheckReservedLock() (bool, error)
|
|
49
|
+
SectorSize() int
|
|
50
|
+
DeviceCharacteristics() DeviceCharacteristic
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
// FileUnwrap should be implemented by a File
|
|
54
|
+
// that wraps another File implementation.
|
|
55
|
+
type FileUnwrap interface {
|
|
56
|
+
File
|
|
57
|
+
Unwrap() File
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
// FileLockState extends File to implement the
|
|
61
|
+
// SQLITE_FCNTL_LOCKSTATE file control opcode.
|
|
62
|
+
//
|
|
63
|
+
// https://sqlite.org/c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntllockstate
|
|
64
|
+
type FileLockState interface {
|
|
65
|
+
File
|
|
66
|
+
LockState() LockLevel
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
// FilePersistWAL extends File to implement the
|
|
70
|
+
// SQLITE_FCNTL_PERSIST_WAL file control opcode.
|
|
71
|
+
//
|
|
72
|
+
// https://sqlite.org/c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntlpersistwal
|
|
73
|
+
type FilePersistWAL interface {
|
|
74
|
+
File
|
|
75
|
+
PersistWAL() bool
|
|
76
|
+
SetPersistWAL(bool)
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
// FilePowersafeOverwrite extends File to implement the
|
|
80
|
+
// SQLITE_FCNTL_POWERSAFE_OVERWRITE file control opcode.
|
|
81
|
+
//
|
|
82
|
+
// https://sqlite.org/c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntlpowersafeoverwrite
|
|
83
|
+
type FilePowersafeOverwrite interface {
|
|
84
|
+
File
|
|
85
|
+
PowersafeOverwrite() bool
|
|
86
|
+
SetPowersafeOverwrite(bool)
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
// FileChunkSize extends File to implement the
|
|
90
|
+
// SQLITE_FCNTL_CHUNK_SIZE file control opcode.
|
|
91
|
+
//
|
|
92
|
+
// https://sqlite.org/c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntlchunksize
|
|
93
|
+
type FileChunkSize interface {
|
|
94
|
+
File
|
|
95
|
+
ChunkSize(size int)
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
// FileSizeHint extends File to implement the
|
|
99
|
+
// SQLITE_FCNTL_SIZE_HINT file control opcode.
|
|
100
|
+
//
|
|
101
|
+
// https://sqlite.org/c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntlsizehint
|
|
102
|
+
type FileSizeHint interface {
|
|
103
|
+
File
|
|
104
|
+
SizeHint(size int64) error
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
// FileHasMoved extends File to implement the
|
|
108
|
+
// SQLITE_FCNTL_HAS_MOVED file control opcode.
|
|
109
|
+
//
|
|
110
|
+
// https://sqlite.org/c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntlhasmoved
|
|
111
|
+
type FileHasMoved interface {
|
|
112
|
+
File
|
|
113
|
+
HasMoved() (bool, error)
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
// FileOverwrite extends File to implement the
|
|
117
|
+
// SQLITE_FCNTL_OVERWRITE file control opcode.
|
|
118
|
+
//
|
|
119
|
+
// https://sqlite.org/c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntloverwrite
|
|
120
|
+
type FileOverwrite interface {
|
|
121
|
+
File
|
|
122
|
+
Overwrite() error
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
// FileSync extends File to implement the
|
|
126
|
+
// SQLITE_FCNTL_SYNC file control opcode.
|
|
127
|
+
//
|
|
128
|
+
// https://sqlite.org/c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntlsync
|
|
129
|
+
type FileSync interface {
|
|
130
|
+
File
|
|
131
|
+
SyncSuper(super string) error
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
// FileCommitPhaseTwo extends File to implement the
|
|
135
|
+
// SQLITE_FCNTL_COMMIT_PHASETWO file control opcode.
|
|
136
|
+
//
|
|
137
|
+
// https://sqlite.org/c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntlcommitphasetwo
|
|
138
|
+
type FileCommitPhaseTwo interface {
|
|
139
|
+
File
|
|
140
|
+
CommitPhaseTwo() error
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
// FileBatchAtomicWrite extends File to implement the
|
|
144
|
+
// SQLITE_FCNTL_BEGIN_ATOMIC_WRITE, SQLITE_FCNTL_COMMIT_ATOMIC_WRITE
|
|
145
|
+
// and SQLITE_FCNTL_ROLLBACK_ATOMIC_WRITE file control opcodes.
|
|
146
|
+
//
|
|
147
|
+
// https://sqlite.org/c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntlbeginatomicwrite
|
|
148
|
+
type FileBatchAtomicWrite interface {
|
|
149
|
+
File
|
|
150
|
+
BeginAtomicWrite() error
|
|
151
|
+
CommitAtomicWrite() error
|
|
152
|
+
RollbackAtomicWrite() error
|
|
153
|
+
}
|
|
154
|
+
|
|
155
|
+
// FileCheckpoint extends File to implement the
|
|
156
|
+
// SQLITE_FCNTL_CKPT_START and SQLITE_FCNTL_CKPT_DONE
|
|
157
|
+
// file control opcodes.
|
|
158
|
+
//
|
|
159
|
+
// https://sqlite.org/c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntlckptstart
|
|
160
|
+
type FileCheckpoint interface {
|
|
161
|
+
File
|
|
162
|
+
CheckpointStart()
|
|
163
|
+
CheckpointDone()
|
|
164
|
+
}
|
|
165
|
+
|
|
166
|
+
// FilePragma extends File to implement the
|
|
167
|
+
// SQLITE_FCNTL_PRAGMA file control opcode.
|
|
168
|
+
//
|
|
169
|
+
// https://sqlite.org/c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntlpragma
|
|
170
|
+
type FilePragma interface {
|
|
171
|
+
File
|
|
172
|
+
Pragma(name, value string) (string, error)
|
|
173
|
+
}
|
|
174
|
+
|
|
175
|
+
// FileBusyHandler extends File to implement the
|
|
176
|
+
// SQLITE_FCNTL_BUSYHANDLER file control opcode.
|
|
177
|
+
//
|
|
178
|
+
// https://sqlite.org/c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntlbusyhandler
|
|
179
|
+
type FileBusyHandler interface {
|
|
180
|
+
File
|
|
181
|
+
BusyHandler(func() bool)
|
|
182
|
+
}
|
|
183
|
+
|
|
184
|
+
// FileSharedMemory extends File to possibly implement
|
|
185
|
+
// shared-memory for the WAL-index.
|
|
186
|
+
// The same shared-memory instance must be returned
|
|
187
|
+
// for the entire life of the file.
|
|
188
|
+
// It's OK for SharedMemory to return nil.
|
|
189
|
+
type FileSharedMemory interface {
|
|
190
|
+
File
|
|
191
|
+
SharedMemory() SharedMemory
|
|
192
|
+
}
|
|
193
|
+
|
|
194
|
+
// SharedMemory is a shared-memory WAL-index implementation.
|
|
195
|
+
// Use [NewSharedMemory] to create a shared-memory.
|
|
196
|
+
type SharedMemory interface {
|
|
197
|
+
shmMap(*sqlite3_wrap.Wrapper, int32, int32, bool) (ptr_t, error)
|
|
198
|
+
shmLock(int32, int32, _ShmFlag) error
|
|
199
|
+
shmUnmap(bool)
|
|
200
|
+
shmBarrier()
|
|
201
|
+
io.Closer
|
|
202
|
+
}
|
|
203
|
+
|
|
204
|
+
type blockingSharedMemory interface {
|
|
205
|
+
SharedMemory
|
|
206
|
+
shmEnableBlocking(block bool)
|
|
207
|
+
}
|
|
208
|
+
|
|
209
|
+
// FileMemoryMapper extends File to possibly implement
|
|
210
|
+
// memory mapped files.
|
|
211
|
+
// The same memory mapper instance must be returned
|
|
212
|
+
// for the entire life of the file.
|
|
213
|
+
// It's OK for MemoryMapper to return nil.
|
|
214
|
+
type FileMemoryMapper interface {
|
|
215
|
+
File
|
|
216
|
+
MemoryMapper() MemoryMapper
|
|
217
|
+
}
|
|
218
|
+
|
|
219
|
+
// MemoryMapper is a file mapper implementation.
|
|
220
|
+
// Use [NewMemoryMapper] to create a mapper.
|
|
221
|
+
type MemoryMapper interface {
|
|
222
|
+
mmapSize(*sqlite3_wrap.Wrapper, ptr_t)
|
|
223
|
+
fetch(*sqlite3_wrap.Wrapper, int64, int32, ptr_t) error
|
|
224
|
+
io.Closer
|
|
225
|
+
}
|
|
226
|
+
|
|
227
|
+
// FileControl makes it easy to forward all fileControl methods,
|
|
228
|
+
// which we want to do for the checksum VFS.
|
|
229
|
+
// However, this is not a safe default, and other VFSes
|
|
230
|
+
// should explicitly wrap the methods they want to wrap.
|
|
231
|
+
type fileControl interface {
|
|
232
|
+
File
|
|
233
|
+
fileControl(*sqlite3_wrap.Wrapper, _FcntlOpcode, ptr_t) _ErrorCode
|
|
234
|
+
}
|
|
235
|
+
|
|
236
|
+
type filePDB interface {
|
|
237
|
+
File
|
|
238
|
+
SetDB(any)
|
|
239
|
+
}
|
|
@@ -0,0 +1,143 @@
|
|
|
1
|
+
package vfs
|
|
2
|
+
|
|
3
|
+
import (
|
|
4
|
+
"bytes"
|
|
5
|
+
_ "embed"
|
|
6
|
+
"encoding/binary"
|
|
7
|
+
|
|
8
|
+
"github.com/ncruces/go-sqlite3/internal/errutil"
|
|
9
|
+
"github.com/ncruces/go-sqlite3/internal/sqlite3_wrap"
|
|
10
|
+
"github.com/ncruces/go-sqlite3/internal/util"
|
|
11
|
+
)
|
|
12
|
+
|
|
13
|
+
func cksmWrapFile(file File, flags OpenFlag) File {
|
|
14
|
+
// Checksum only main databases.
|
|
15
|
+
if flags&OPEN_MAIN_DB == 0 {
|
|
16
|
+
return file
|
|
17
|
+
}
|
|
18
|
+
return &cksmFile{File: file}
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
type cksmFile struct {
|
|
22
|
+
File
|
|
23
|
+
verifyCksm bool
|
|
24
|
+
computeCksm bool
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
func (c *cksmFile) ReadAt(p []byte, off int64) (n int, err error) {
|
|
28
|
+
n, err = c.File.ReadAt(p, off)
|
|
29
|
+
p = p[:n]
|
|
30
|
+
|
|
31
|
+
if isHeader(p, off) {
|
|
32
|
+
c.init((*[100]byte)(p))
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
// Verify checksums.
|
|
36
|
+
if c.verifyCksm && util.ValidPageSize(len(p)) {
|
|
37
|
+
cksm1 := cksmCompute(p[:len(p)-8])
|
|
38
|
+
cksm2 := *(*[8]byte)(p[len(p)-8:])
|
|
39
|
+
if cksm1 != cksm2 {
|
|
40
|
+
return 0, _IOERR_DATA
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
return n, err
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
func (c *cksmFile) WriteAt(p []byte, off int64) (n int, err error) {
|
|
47
|
+
if isHeader(p, off) {
|
|
48
|
+
c.init((*[100]byte)(p))
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
// Compute checksums.
|
|
52
|
+
if c.computeCksm && util.ValidPageSize(len(p)) {
|
|
53
|
+
*(*[8]byte)(p[len(p)-8:]) = cksmCompute(p[:len(p)-8])
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
return c.File.WriteAt(p, off)
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
func (c *cksmFile) Pragma(name, value string) (string, error) {
|
|
60
|
+
switch name {
|
|
61
|
+
case "checksum_verification":
|
|
62
|
+
b, ok := util.ParseBool(value)
|
|
63
|
+
if ok {
|
|
64
|
+
c.verifyCksm = b && c.computeCksm
|
|
65
|
+
}
|
|
66
|
+
if !c.verifyCksm {
|
|
67
|
+
return "0", nil
|
|
68
|
+
}
|
|
69
|
+
return "1", nil
|
|
70
|
+
|
|
71
|
+
case "page_size":
|
|
72
|
+
if c.computeCksm && value != "" {
|
|
73
|
+
// Do not allow page size changes on a checksum database.
|
|
74
|
+
return "", nil
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
return "", _NOTFOUND
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
func (c *cksmFile) DeviceCharacteristics() DeviceCharacteristic {
|
|
81
|
+
ret := c.File.DeviceCharacteristics()
|
|
82
|
+
if c.verifyCksm {
|
|
83
|
+
ret &^= IOCAP_SUBPAGE_READ
|
|
84
|
+
}
|
|
85
|
+
return ret
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
func (c *cksmFile) fileControl(wrp *sqlite3_wrap.Wrapper, op _FcntlOpcode, pArg ptr_t) _ErrorCode {
|
|
89
|
+
if op == _FCNTL_PRAGMA {
|
|
90
|
+
rc := vfsFileControlImpl(wrp, c, op, pArg)
|
|
91
|
+
if rc != _NOTFOUND {
|
|
92
|
+
return rc
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
return vfsFileControlImpl(wrp, c.File, op, pArg)
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
func (c *cksmFile) init(header *[100]byte) {
|
|
99
|
+
if r := header[20] == 8; r != c.computeCksm {
|
|
100
|
+
c.computeCksm = r
|
|
101
|
+
c.verifyCksm = r
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
func (c *cksmFile) SharedMemory() SharedMemory {
|
|
106
|
+
if f, ok := c.File.(FileSharedMemory); ok {
|
|
107
|
+
return f.SharedMemory()
|
|
108
|
+
}
|
|
109
|
+
return nil
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
func (c *cksmFile) MemoryMapper() MemoryMapper {
|
|
113
|
+
if c.verifyCksm {
|
|
114
|
+
return nil
|
|
115
|
+
}
|
|
116
|
+
if f, ok := c.File.(FileMemoryMapper); ok {
|
|
117
|
+
return f.MemoryMapper()
|
|
118
|
+
}
|
|
119
|
+
return nil
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
func (c *cksmFile) Unwrap() File {
|
|
123
|
+
return c.File
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
func isHeader(p []byte, off int64) bool {
|
|
127
|
+
return off == 0 && len(p) >= 100 && bytes.HasPrefix(p, []byte("SQLite format 3\000"))
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
func cksmCompute(a []byte) (cksm [8]byte) {
|
|
131
|
+
var s1, s2 uint32
|
|
132
|
+
for len(a) >= 8 {
|
|
133
|
+
s1 += binary.LittleEndian.Uint32(a[0:4]) + s2
|
|
134
|
+
s2 += binary.LittleEndian.Uint32(a[4:8]) + s1
|
|
135
|
+
a = a[8:]
|
|
136
|
+
}
|
|
137
|
+
if len(a) != 0 {
|
|
138
|
+
panic(errutil.AssertErr())
|
|
139
|
+
}
|
|
140
|
+
binary.LittleEndian.PutUint32(cksm[0:4], s1)
|
|
141
|
+
binary.LittleEndian.PutUint32(cksm[4:8], s2)
|
|
142
|
+
return
|
|
143
|
+
}
|