From 4dfc12bd9bed54f16bd0ca4983b5fdddee0028bb Mon Sep 17 00:00:00 2001
From: Lucifergene <47265560+Lucifergene@users.noreply.github.com>
Date: Mon, 5 May 2025 19:17:55 +0530
Subject: [PATCH] bump helm
Signed-off-by: Lucifergene <47265560+Lucifergene@users.noreply.github.com>
---
go.mod | 56 +-
go.sum | 159 +-
vendor/dario.cat/mergo/.gitignore | 3 +
vendor/dario.cat/mergo/README.md | 102 +-
vendor/dario.cat/mergo/map.go | 2 +-
vendor/dario.cat/mergo/merge.go | 2 +-
vendor/github.com/BurntSushi/toml/README.md | 2 +-
vendor/github.com/BurntSushi/toml/decode.go | 93 +-
.../BurntSushi/toml/decode_go116.go | 19 -
.../github.com/BurntSushi/toml/deprecated.go | 12 +-
vendor/github.com/BurntSushi/toml/doc.go | 3 -
vendor/github.com/BurntSushi/toml/encode.go | 45 +-
vendor/github.com/BurntSushi/toml/error.go | 111 +-
vendor/github.com/BurntSushi/toml/lex.go | 50 +-
vendor/github.com/BurntSushi/toml/meta.go | 49 +-
vendor/github.com/BurntSushi/toml/parse.go | 269 +-
.../github.com/BurntSushi/toml/type_fields.go | 8 +-
.../github.com/BurntSushi/toml/type_toml.go | 11 +-
.../Masterminds/semver/v3/CHANGELOG.md | 28 +
.../github.com/Masterminds/semver/v3/Makefile | 3 +-
.../Masterminds/semver/v3/README.md | 28 +-
.../Masterminds/semver/v3/version.go | 64 +-
.../Masterminds/sprig/v3/CHANGELOG.md | 22 +-
.../github.com/Masterminds/sprig/v3/crypto.go | 6 +
.../github.com/Masterminds/sprig/v3/dict.go | 2 +-
vendor/github.com/Masterminds/sprig/v3/doc.go | 2 +-
.../Masterminds/sprig/v3/functions.go | 41 +-
.../Microsoft/go-winio/.golangci.yml | 10 +-
.../github.com/Microsoft/go-winio/backup.go | 33 +-
vendor/github.com/Microsoft/go-winio/file.go | 85 +-
.../github.com/Microsoft/go-winio/fileinfo.go | 22 +-
.../github.com/Microsoft/go-winio/hvsock.go | 47 +-
.../Microsoft/go-winio/internal/fs/fs.go | 72 +-
.../go-winio/internal/fs/zsyscall_windows.go | 9 +-
.../go-winio/internal/socket/socket.go | 8 +-
.../internal/socket/zsyscall_windows.go | 9 +-
.../go-winio/internal/stringbuffer/wstring.go | 2 +-
vendor/github.com/Microsoft/go-winio/pipe.go | 125 +-
.../Microsoft/go-winio/privilege.go | 9 +-
vendor/github.com/Microsoft/go-winio/sd.go | 37 +-
vendor/github.com/Microsoft/go-winio/tools.go | 5 -
.../Microsoft/go-winio/zsyscall_windows.go | 205 +-
vendor/github.com/Microsoft/hcsshim/LICENSE | 21 -
.../hcsshim/osversion/osversion_windows.go | 59 -
.../osversion/platform_compat_windows.go | 35 -
.../hcsshim/osversion/windowsbuilds.go | 84 -
.../asaskevich/govalidator/.travis.yml | 22 +-
.../asaskevich/govalidator/CODE_OF_CONDUCT.md | 43 +
.../github.com/asaskevich/govalidator/LICENSE | 2 +-
.../asaskevich/govalidator/README.md | 12 +-
.../asaskevich/govalidator/arrays.go | 29 +
.../asaskevich/govalidator/converter.go | 33 +-
.../asaskevich/govalidator/numerics.go | 37 +-
.../asaskevich/govalidator/patterns.go | 10 +-
.../asaskevich/govalidator/types.go | 25 +-
.../asaskevich/govalidator/validator.go | 474 +-
.../archive/compression/compression.go | 2 +-
.../containerd/containerd/content/helpers.go | 15 +-
.../containerd/content/local/store.go | 33 +-
.../containerd/content/local/writer.go | 5 +-
.../containerd/containerd/errdefs/errors.go | 94 +-
.../containerd/containerd/filters/filter.go | 2 +-
.../containerd/containerd/images/diffid.go | 2 +-
.../containerd/containerd/images/handlers.go | 7 +-
.../containerd/containerd/images/image.go | 12 +-
.../containerd/images/mediatypes.go | 2 +-
.../containerd/reference/docker/helpers.go | 58 -
.../containerd/reference/docker/normalize.go | 196 -
.../containerd/reference/docker/reference.go | 453 -
.../containerd/reference/docker/regexp.go | 191 -
.../containerd/reference/docker/sort.go | 73 -
.../containerd/reference/reference.go | 39 +-
.../containerd/remotes/docker/auth/fetch.go | 2 +-
.../containerd/remotes/docker/authorizer.go | 21 +-
.../containerd/remotes/docker/converter.go | 2 +-
.../remotes/docker/converter_fuzz.go | 2 +-
.../containerd/remotes/docker/fetcher.go | 7 +-
.../containerd/remotes/docker/fetcher_fuzz.go | 7 -
.../containerd/remotes/docker/handler.go | 2 +-
.../remotes/docker/httpreadseeker.go | 3 +-
.../containerd/remotes/docker/pusher.go | 116 +-
.../containerd/remotes/docker/resolver.go | 100 +-
.../remotes/docker/resolver_unix.go | 28 +
.../remotes/docker/resolver_windows.go | 30 +
.../remotes/docker/schema1/converter.go | 11 +-
.../containerd/containerd/remotes/handlers.go | 9 +-
.../containerd/containerd/version/version.go | 2 +-
vendor/github.com/containerd/errdefs/LICENSE | 191 +
.../github.com/containerd/errdefs/README.md | 13 +
.../github.com/containerd/errdefs/errors.go | 443 +
.../github.com/containerd/errdefs/resolve.go | 147 +
.../containerd/platforms/.gitattributes | 1 +
.../containerd/platforms/.golangci.yml | 30 +
.../github.com/containerd/platforms/LICENSE | 191 +
.../github.com/containerd/platforms/README.md | 32 +
.../{containerd => }/platforms/compare.go | 0
.../{containerd => }/platforms/cpuinfo.go | 2 +-
.../platforms/cpuinfo_linux.go | 13 +-
.../platforms/cpuinfo_other.go | 6 +-
.../{containerd => }/platforms/database.go | 0
.../{containerd => }/platforms/defaults.go | 6 +-
.../platforms/defaults_darwin.go | 0
.../platforms/defaults_freebsd.go | 0
.../platforms/defaults_unix.go | 0
.../platforms/defaults_windows.go | 15 +-
.../github.com/containerd/platforms/errors.go | 30 +
.../platforms/platform_compat_windows.go | 78 +
.../{containerd => }/platforms/platforms.go | 96 +-
.../platforms/platforms_other.go | 4 -
.../platforms/platforms_windows.go | 8 -
.../cyphar/filepath-securejoin/CHANGELOG.md | 209 +
.../cyphar/filepath-securejoin/LICENSE | 2 +-
.../cyphar/filepath-securejoin/README.md | 140 +-
.../cyphar/filepath-securejoin/VERSION | 2 +-
.../cyphar/filepath-securejoin/doc.go | 39 +
.../gocompat_errors_go120.go | 18 +
.../gocompat_errors_unsupported.go | 38 +
.../gocompat_generics_go121.go | 32 +
.../gocompat_generics_unsupported.go | 124 +
.../cyphar/filepath-securejoin/join.go | 104 +-
.../filepath-securejoin/lookup_linux.go | 388 +
.../cyphar/filepath-securejoin/mkdir_linux.go | 215 +
.../cyphar/filepath-securejoin/open_linux.go | 103 +
.../filepath-securejoin/openat2_linux.go | 127 +
.../filepath-securejoin/openat_linux.go | 59 +
.../filepath-securejoin/procfs_linux.go | 452 +
.../cyphar/filepath-securejoin/vfs.go | 26 +-
.../distribution/reference/README.md | 2 +-
.../distribution/reference/normalize.go | 59 +-
.../distribution/reference/reference.go | 44 +-
.../docker/docker/pkg/ioutils/readers.go | 21 +
.../docker/docker/pkg/ioutils/writers.go | 10 +-
.../exponent-io/jsonpath/.travis.yml | 6 +-
.../exponent-io/jsonpath/decoder.go | 13 +-
vendor/github.com/huandu/xstrings/README.md | 9 +-
vendor/github.com/huandu/xstrings/convert.go | 44 +-
vendor/github.com/jmoiron/sqlx/.travis.yml | 26 -
vendor/github.com/jmoiron/sqlx/Makefile | 30 +
vendor/github.com/jmoiron/sqlx/README.md | 2 +-
vendor/github.com/jmoiron/sqlx/doc.go | 1 -
vendor/github.com/jmoiron/sqlx/named.go | 2 +-
.../github.com/jmoiron/sqlx/named_context.go | 1 +
.../jmoiron/sqlx/reflectx/reflect.go | 1 -
vendor/github.com/jmoiron/sqlx/sqlx.go | 21 +-
.../github.com/jmoiron/sqlx/sqlx_context.go | 1 +
.../rubenv/sql-migrate/.golangci.yaml | 15 +-
.../github.com/rubenv/sql-migrate/README.md | 54 +-
.../github.com/rubenv/sql-migrate/migrate.go | 14 +
.../rubenv/sql-migrate/migrate_go116.go | 23 -
.../github.com/shopspring/decimal/.travis.yml | 19 -
.../shopspring/decimal/CHANGELOG.md | 27 +
.../github.com/shopspring/decimal/README.md | 25 +-
vendor/github.com/shopspring/decimal/const.go | 63 +
.../github.com/shopspring/decimal/decimal.go | 775 +-
vendor/github.com/spf13/cast/caste.go | 94 +-
.../testify/assert/assertion_compare.go | 35 +-
.../testify/assert/assertion_format.go | 34 +-
.../testify/assert/assertion_forward.go | 68 +-
.../testify/assert/assertion_order.go | 10 +-
.../stretchr/testify/assert/assertions.go | 157 +-
.../testify/assert/yaml/yaml_custom.go | 25 +
.../testify/assert/yaml/yaml_default.go | 37 +
.../stretchr/testify/assert/yaml/yaml_fail.go | 18 +
.../stretchr/testify/require/require.go | 432 +-
.../stretchr/testify/require/require.go.tmpl | 2 +-
.../testify/require/require_forward.go | 68 +-
.../stretchr/testify/require/requirements.go | 2 +-
.../x/crypto/chacha20/chacha_noasm.go | 2 +-
.../{chacha_ppc64le.go => chacha_ppc64x.go} | 2 +-
.../{chacha_ppc64le.s => chacha_ppc64x.s} | 114 +-
.../x/crypto/internal/poly1305/mac_noasm.go | 2 +-
.../{sum_ppc64le.go => sum_ppc64x.go} | 2 +-
.../poly1305/{sum_ppc64le.s => sum_ppc64x.s} | 30 +-
vendor/golang.org/x/crypto/sha3/doc.go | 4 +
vendor/golang.org/x/crypto/sha3/hashes.go | 31 +-
vendor/golang.org/x/crypto/sha3/sha3.go | 187 +-
vendor/golang.org/x/crypto/sha3/shake.go | 85 +-
vendor/golang.org/x/crypto/sha3/xor.go | 40 -
vendor/golang.org/x/crypto/ssh/client_auth.go | 5 +
vendor/golang.org/x/crypto/ssh/handshake.go | 61 +-
vendor/golang.org/x/crypto/ssh/messages.go | 2 +
vendor/golang.org/x/crypto/ssh/server.go | 65 +-
vendor/golang.org/x/crypto/ssh/tcpip.go | 2 +-
vendor/golang.org/x/net/context/context.go | 112 +-
vendor/golang.org/x/net/context/go17.go | 72 -
vendor/golang.org/x/net/context/go19.go | 20 -
vendor/golang.org/x/net/context/pre_go17.go | 300 -
vendor/golang.org/x/net/context/pre_go19.go | 109 -
vendor/golang.org/x/net/html/doc.go | 7 +-
vendor/golang.org/x/net/html/doctype.go | 2 +-
vendor/golang.org/x/net/html/foreign.go | 3 +-
vendor/golang.org/x/net/html/iter.go | 56 +
vendor/golang.org/x/net/html/node.go | 4 +
vendor/golang.org/x/net/html/parse.go | 8 +-
.../x/net/http2/client_conn_pool.go | 8 +-
vendor/golang.org/x/net/http2/config.go | 2 +-
vendor/golang.org/x/net/http2/config_go124.go | 2 +-
vendor/golang.org/x/net/http2/frame.go | 4 +-
vendor/golang.org/x/net/http2/http2.go | 59 +-
vendor/golang.org/x/net/http2/server.go | 180 +-
vendor/golang.org/x/net/http2/transport.go | 690 +-
vendor/golang.org/x/net/http2/unencrypted.go | 32 +
vendor/golang.org/x/net/http2/write.go | 3 +-
.../x/net/internal/httpcommon/ascii.go | 53 +
.../httpcommon}/headermap.go | 24 +-
.../x/net/internal/httpcommon/request.go | 467 +
vendor/golang.org/x/net/proxy/per_host.go | 8 +-
vendor/golang.org/x/sync/errgroup/errgroup.go | 3 +-
vendor/golang.org/x/sync/errgroup/go120.go | 13 -
.../golang.org/x/sync/errgroup/pre_go120.go | 14 -
.../golang.org/x/sys/cpu/asm_darwin_x86_gc.s | 17 +
vendor/golang.org/x/sys/cpu/cpu.go | 3 +
vendor/golang.org/x/sys/cpu/cpu_darwin_x86.go | 61 +
vendor/golang.org/x/sys/cpu/cpu_gc_x86.go | 4 +-
.../x/sys/cpu/{cpu_x86.s => cpu_gc_x86.s} | 2 +-
vendor/golang.org/x/sys/cpu/cpu_gccgo_x86.go | 6 -
.../golang.org/x/sys/cpu/cpu_linux_arm64.go | 1 -
.../cpu/cpu_other_x86.go} | 11 +-
vendor/golang.org/x/sys/cpu/cpu_x86.go | 27 +-
.../x/sys/cpu/syscall_darwin_x86_gc.go | 98 +
vendor/golang.org/x/sys/unix/auxv.go | 36 +
.../golang.org/x/sys/unix/auxv_unsupported.go | 13 +
vendor/golang.org/x/sys/unix/ioctl_linux.go | 96 +
vendor/golang.org/x/sys/unix/mkerrors.sh | 12 +
.../x/sys/unix/syscall_dragonfly.go | 12 +
vendor/golang.org/x/sys/unix/syscall_linux.go | 1 +
.../golang.org/x/sys/unix/syscall_solaris.go | 87 +
.../x/sys/unix/syscall_zos_s390x.go | 104 +-
vendor/golang.org/x/sys/unix/zerrors_linux.go | 51 +-
.../x/sys/unix/zerrors_linux_386.go | 23 +
.../x/sys/unix/zerrors_linux_amd64.go | 23 +
.../x/sys/unix/zerrors_linux_arm.go | 23 +
.../x/sys/unix/zerrors_linux_arm64.go | 25 +
.../x/sys/unix/zerrors_linux_loong64.go | 23 +
.../x/sys/unix/zerrors_linux_mips.go | 23 +
.../x/sys/unix/zerrors_linux_mips64.go | 23 +
.../x/sys/unix/zerrors_linux_mips64le.go | 23 +
.../x/sys/unix/zerrors_linux_mipsle.go | 23 +
.../x/sys/unix/zerrors_linux_ppc.go | 23 +
.../x/sys/unix/zerrors_linux_ppc64.go | 23 +
.../x/sys/unix/zerrors_linux_ppc64le.go | 23 +
.../x/sys/unix/zerrors_linux_riscv64.go | 23 +
.../x/sys/unix/zerrors_linux_s390x.go | 23 +
.../x/sys/unix/zerrors_linux_sparc64.go | 23 +
.../golang.org/x/sys/unix/zsyscall_linux.go | 10 +
.../x/sys/unix/zsyscall_solaris_amd64.go | 114 +
.../x/sys/unix/zsysnum_linux_386.go | 4 +
.../x/sys/unix/zsysnum_linux_amd64.go | 4 +
.../x/sys/unix/zsysnum_linux_arm.go | 4 +
.../x/sys/unix/zsysnum_linux_arm64.go | 4 +
.../x/sys/unix/zsysnum_linux_loong64.go | 4 +
.../x/sys/unix/zsysnum_linux_mips.go | 4 +
.../x/sys/unix/zsysnum_linux_mips64.go | 4 +
.../x/sys/unix/zsysnum_linux_mips64le.go | 4 +
.../x/sys/unix/zsysnum_linux_mipsle.go | 4 +
.../x/sys/unix/zsysnum_linux_ppc.go | 4 +
.../x/sys/unix/zsysnum_linux_ppc64.go | 4 +
.../x/sys/unix/zsysnum_linux_ppc64le.go | 4 +
.../x/sys/unix/zsysnum_linux_riscv64.go | 4 +
.../x/sys/unix/zsysnum_linux_s390x.go | 4 +
.../x/sys/unix/zsysnum_linux_sparc64.go | 4 +
.../x/sys/unix/ztypes_darwin_amd64.go | 60 +
.../x/sys/unix/ztypes_darwin_arm64.go | 60 +
vendor/golang.org/x/sys/unix/ztypes_linux.go | 144 +-
.../golang.org/x/sys/unix/ztypes_zos_s390x.go | 6 +
.../golang.org/x/sys/windows/dll_windows.go | 11 +-
.../x/sys/windows/syscall_windows.go | 36 +-
.../golang.org/x/sys/windows/types_windows.go | 127 +
.../x/sys/windows/zsyscall_windows.go | 71 +
vendor/golang.org/x/term/README.md | 11 +-
vendor/golang.org/x/tools/LICENSE | 27 -
vendor/golang.org/x/tools/PATENTS | 22 -
.../x/tools/cmd/stringer/stringer.go | 739 -
.../x/tools/go/gcexportdata/gcexportdata.go | 186 -
.../x/tools/go/gcexportdata/importer.go | 75 -
vendor/golang.org/x/tools/go/packages/doc.go | 251 -
.../x/tools/go/packages/external.go | 156 -
.../golang.org/x/tools/go/packages/golist.go | 1066 -
.../x/tools/go/packages/golist_overlay.go | 83 -
.../x/tools/go/packages/loadmode_string.go | 54 -
.../x/tools/go/packages/packages.go | 1527 --
.../golang.org/x/tools/go/packages/visit.go | 68 -
.../x/tools/go/types/objectpath/objectpath.go | 788 -
.../x/tools/go/types/typeutil/callee.go | 68 -
.../x/tools/go/types/typeutil/imports.go | 30 -
.../x/tools/go/types/typeutil/map.go | 517 -
.../tools/go/types/typeutil/methodsetcache.go | 71 -
.../x/tools/go/types/typeutil/ui.go | 53 -
.../x/tools/internal/aliases/aliases.go | 38 -
.../x/tools/internal/aliases/aliases_go122.go | 80 -
.../x/tools/internal/event/core/event.go | 85 -
.../x/tools/internal/event/core/export.go | 70 -
.../x/tools/internal/event/core/fast.go | 77 -
.../golang.org/x/tools/internal/event/doc.go | 7 -
.../x/tools/internal/event/event.go | 127 -
.../x/tools/internal/event/keys/keys.go | 564 -
.../x/tools/internal/event/keys/standard.go | 22 -
.../x/tools/internal/event/keys/util.go | 21 -
.../x/tools/internal/event/label/label.go | 215 -
.../x/tools/internal/gcimporter/bimport.go | 89 -
.../x/tools/internal/gcimporter/exportdata.go | 99 -
.../x/tools/internal/gcimporter/gcimporter.go | 271 -
.../x/tools/internal/gcimporter/iexport.go | 1568 --
.../x/tools/internal/gcimporter/iimport.go | 1101 -
.../tools/internal/gcimporter/predeclared.go | 91 -
.../tools/internal/gcimporter/ureader_yes.go | 754 -
.../x/tools/internal/gocommand/invoke.go | 551 -
.../x/tools/internal/gocommand/vendor.go | 163 -
.../x/tools/internal/gocommand/version.go | 71 -
.../internal/packagesinternal/packages.go | 22 -
.../x/tools/internal/pkgbits/codes.go | 77 -
.../x/tools/internal/pkgbits/decoder.go | 519 -
.../x/tools/internal/pkgbits/doc.go | 32 -
.../x/tools/internal/pkgbits/encoder.go | 392 -
.../x/tools/internal/pkgbits/flags.go | 9 -
.../x/tools/internal/pkgbits/reloc.go | 42 -
.../x/tools/internal/pkgbits/support.go | 17 -
.../x/tools/internal/pkgbits/sync.go | 136 -
.../internal/pkgbits/syncmarker_string.go | 92 -
.../x/tools/internal/pkgbits/version.go | 85 -
.../x/tools/internal/stdlib/manifest.go | 17431 ----------------
.../x/tools/internal/stdlib/stdlib.go | 97 -
.../x/tools/internal/typeparams/common.go | 140 -
.../x/tools/internal/typeparams/coretype.go | 150 -
.../x/tools/internal/typeparams/free.go | 118 -
.../x/tools/internal/typeparams/normalize.go | 218 -
.../x/tools/internal/typeparams/termlist.go | 163 -
.../x/tools/internal/typeparams/typeterm.go | 169 -
.../x/tools/internal/typesinternal/element.go | 133 -
.../tools/internal/typesinternal/errorcode.go | 1560 --
.../typesinternal/errorcode_string.go | 179 -
.../x/tools/internal/typesinternal/recv.go | 41 -
.../x/tools/internal/typesinternal/toonew.go | 89 -
.../x/tools/internal/typesinternal/types.go | 65 -
.../x/tools/internal/versions/constraint.go | 13 -
.../x/tools/internal/versions/features.go | 43 -
.../x/tools/internal/versions/gover.go | 172 -
.../x/tools/internal/versions/types.go | 38 -
.../x/tools/internal/versions/versions.go | 57 -
.../helm/v3/internal/resolver/resolver.go | 9 +-
.../helm.sh/helm/v3/internal/sympath/walk.go | 1 +
.../helm/v3/internal/third_party/dep/fs/fs.go | 2 +-
.../helm.sh/helm/v3/internal/tlsutil/tls.go | 2 +-
.../helm/v3/internal/version/version.go | 2 +-
vendor/helm.sh/helm/v3/pkg/action/action.go | 17 +-
.../helm.sh/helm/v3/pkg/action/dependency.go | 15 +-
.../helm/v3/pkg/action/get_metadata.go | 55 +-
vendor/helm.sh/helm/v3/pkg/action/hooks.go | 5 +-
vendor/helm.sh/helm/v3/pkg/action/install.go | 43 +-
vendor/helm.sh/helm/v3/pkg/action/lint.go | 17 +-
vendor/helm.sh/helm/v3/pkg/action/package.go | 13 +-
vendor/helm.sh/helm/v3/pkg/action/push.go | 2 +-
.../helm/v3/pkg/action/release_testing.go | 1 +
.../helm.sh/helm/v3/pkg/action/uninstall.go | 6 +-
vendor/helm.sh/helm/v3/pkg/action/upgrade.go | 27 +-
vendor/helm.sh/helm/v3/pkg/action/validate.go | 25 +
.../helm.sh/helm/v3/pkg/chart/dependency.go | 16 +-
.../helm/v3/pkg/chart/loader/archive.go | 34 +-
.../helm/v3/pkg/chart/loader/directory.go | 4 +
.../helm.sh/helm/v3/pkg/chart/loader/load.go | 7 +-
.../helm/v3/pkg/chartutil/capabilities.go | 2 +-
.../helm.sh/helm/v3/pkg/chartutil/coalesce.go | 12 +
.../helm.sh/helm/v3/pkg/chartutil/create.go | 74 +-
.../helm/v3/pkg/chartutil/dependencies.go | 2 +-
.../helm.sh/helm/v3/pkg/chartutil/values.go | 15 +-
vendor/helm.sh/helm/v3/pkg/cli/environment.go | 15 +-
.../v3/pkg/downloader/chart_downloader.go | 38 +-
.../helm.sh/helm/v3/pkg/downloader/manager.go | 4 +-
vendor/helm.sh/helm/v3/pkg/engine/engine.go | 8 +-
vendor/helm.sh/helm/v3/pkg/engine/funcs.go | 31 +
.../helm.sh/helm/v3/pkg/engine/lookup_func.go | 2 +-
vendor/helm.sh/helm/v3/pkg/getter/getter.go | 8 +
.../helm.sh/helm/v3/pkg/getter/httpgetter.go | 4 +
.../helm.sh/helm/v3/pkg/getter/ocigetter.go | 4 +
.../helm.sh/helm/v3/pkg/helmpath/lazypath.go | 2 +-
vendor/helm.sh/helm/v3/pkg/ignore/doc.go | 2 +-
vendor/helm.sh/helm/v3/pkg/ignore/rules.go | 6 +-
vendor/helm.sh/helm/v3/pkg/kube/client.go | 52 +-
vendor/helm.sh/helm/v3/pkg/kube/ready.go | 2 +-
vendor/helm.sh/helm/v3/pkg/kube/resource.go | 4 +-
.../helm/v3/pkg/{cli => kube}/roundtripper.go | 12 +-
vendor/helm.sh/helm/v3/pkg/kube/wait.go | 46 +-
vendor/helm.sh/helm/v3/pkg/lint/lint.go | 9 +-
.../helm/v3/pkg/lint/rules/template.go | 11 +-
.../helm.sh/helm/v3/pkg/pusher/ocipusher.go | 5 +
vendor/helm.sh/helm/v3/pkg/registry/client.go | 177 +-
.../helm.sh/helm/v3/pkg/registry/reference.go | 78 +
vendor/helm.sh/helm/v3/pkg/registry/util.go | 44 +-
vendor/helm.sh/helm/v3/pkg/release/mock.go | 18 +
vendor/helm.sh/helm/v3/pkg/release/status.go | 4 +-
.../v3/pkg/releaseutil/manifest_sorter.go | 4 +-
vendor/helm.sh/helm/v3/pkg/repo/chartrepo.go | 2 +-
vendor/helm.sh/helm/v3/pkg/repo/index.go | 6 +-
.../helm/v3/pkg/storage/driver/cfgmaps.go | 5 +-
.../helm/v3/pkg/storage/driver/secrets.go | 5 +-
.../helm.sh/helm/v3/pkg/storage/driver/sql.go | 24 +-
vendor/helm.sh/helm/v3/pkg/storage/storage.go | 6 +-
vendor/helm.sh/helm/v3/pkg/strvals/parser.go | 2 +-
.../helm.sh/helm/v3/pkg/time/ctime/ctime.go | 29 +
.../helm/v3/pkg/time/ctime/ctime_linux.go | 30 +
.../helm/v3/pkg/time/ctime/ctime_other.go | 27 +
vendor/helm.sh/helm/v3/pkg/time/time.go | 2 +-
vendor/k8s.io/client-go/util/retry/OWNERS | 4 +
vendor/k8s.io/client-go/util/retry/util.go | 105 +
vendor/k8s.io/kubectl/pkg/cmd/util/helpers.go | 17 +-
.../pkg/util/i18n/translations/README.md | 2 +-
.../pkg/util/templates/help_flags_printer.go | 2 +-
vendor/modules.txt | 123 +-
408 files changed, 11069 insertions(+), 39008 deletions(-)
delete mode 100644 vendor/github.com/BurntSushi/toml/decode_go116.go
delete mode 100644 vendor/github.com/Microsoft/go-winio/tools.go
delete mode 100644 vendor/github.com/Microsoft/hcsshim/LICENSE
delete mode 100644 vendor/github.com/Microsoft/hcsshim/osversion/osversion_windows.go
delete mode 100644 vendor/github.com/Microsoft/hcsshim/osversion/platform_compat_windows.go
delete mode 100644 vendor/github.com/Microsoft/hcsshim/osversion/windowsbuilds.go
create mode 100644 vendor/github.com/asaskevich/govalidator/CODE_OF_CONDUCT.md
delete mode 100644 vendor/github.com/containerd/containerd/reference/docker/helpers.go
delete mode 100644 vendor/github.com/containerd/containerd/reference/docker/normalize.go
delete mode 100644 vendor/github.com/containerd/containerd/reference/docker/reference.go
delete mode 100644 vendor/github.com/containerd/containerd/reference/docker/regexp.go
delete mode 100644 vendor/github.com/containerd/containerd/reference/docker/sort.go
create mode 100644 vendor/github.com/containerd/containerd/remotes/docker/resolver_unix.go
create mode 100644 vendor/github.com/containerd/containerd/remotes/docker/resolver_windows.go
create mode 100644 vendor/github.com/containerd/errdefs/LICENSE
create mode 100644 vendor/github.com/containerd/errdefs/README.md
create mode 100644 vendor/github.com/containerd/errdefs/errors.go
create mode 100644 vendor/github.com/containerd/errdefs/resolve.go
create mode 100644 vendor/github.com/containerd/platforms/.gitattributes
create mode 100644 vendor/github.com/containerd/platforms/.golangci.yml
create mode 100644 vendor/github.com/containerd/platforms/LICENSE
create mode 100644 vendor/github.com/containerd/platforms/README.md
rename vendor/github.com/containerd/{containerd => }/platforms/compare.go (100%)
rename vendor/github.com/containerd/{containerd => }/platforms/cpuinfo.go (96%)
rename vendor/github.com/containerd/{containerd => }/platforms/cpuinfo_linux.go (94%)
rename vendor/github.com/containerd/{containerd => }/platforms/cpuinfo_other.go (94%)
rename vendor/github.com/containerd/{containerd => }/platforms/database.go (100%)
rename vendor/github.com/containerd/{containerd => }/platforms/defaults.go (81%)
rename vendor/github.com/containerd/{containerd => }/platforms/defaults_darwin.go (100%)
rename vendor/github.com/containerd/{containerd => }/platforms/defaults_freebsd.go (100%)
rename vendor/github.com/containerd/{containerd => }/platforms/defaults_unix.go (100%)
rename vendor/github.com/containerd/{containerd => }/platforms/defaults_windows.go (88%)
create mode 100644 vendor/github.com/containerd/platforms/errors.go
create mode 100644 vendor/github.com/containerd/platforms/platform_compat_windows.go
rename vendor/github.com/containerd/{containerd => }/platforms/platforms.go (74%)
rename vendor/github.com/containerd/{containerd => }/platforms/platforms_other.go (94%)
rename vendor/github.com/containerd/{containerd => }/platforms/platforms_windows.go (85%)
create mode 100644 vendor/github.com/cyphar/filepath-securejoin/CHANGELOG.md
create mode 100644 vendor/github.com/cyphar/filepath-securejoin/doc.go
create mode 100644 vendor/github.com/cyphar/filepath-securejoin/gocompat_errors_go120.go
create mode 100644 vendor/github.com/cyphar/filepath-securejoin/gocompat_errors_unsupported.go
create mode 100644 vendor/github.com/cyphar/filepath-securejoin/gocompat_generics_go121.go
create mode 100644 vendor/github.com/cyphar/filepath-securejoin/gocompat_generics_unsupported.go
create mode 100644 vendor/github.com/cyphar/filepath-securejoin/lookup_linux.go
create mode 100644 vendor/github.com/cyphar/filepath-securejoin/mkdir_linux.go
create mode 100644 vendor/github.com/cyphar/filepath-securejoin/open_linux.go
create mode 100644 vendor/github.com/cyphar/filepath-securejoin/openat2_linux.go
create mode 100644 vendor/github.com/cyphar/filepath-securejoin/openat_linux.go
create mode 100644 vendor/github.com/cyphar/filepath-securejoin/procfs_linux.go
delete mode 100644 vendor/github.com/jmoiron/sqlx/.travis.yml
create mode 100644 vendor/github.com/jmoiron/sqlx/Makefile
delete mode 100644 vendor/github.com/rubenv/sql-migrate/migrate_go116.go
delete mode 100644 vendor/github.com/shopspring/decimal/.travis.yml
create mode 100644 vendor/github.com/shopspring/decimal/const.go
create mode 100644 vendor/github.com/stretchr/testify/assert/yaml/yaml_custom.go
create mode 100644 vendor/github.com/stretchr/testify/assert/yaml/yaml_default.go
create mode 100644 vendor/github.com/stretchr/testify/assert/yaml/yaml_fail.go
rename vendor/golang.org/x/crypto/chacha20/{chacha_ppc64le.go => chacha_ppc64x.go} (89%)
rename vendor/golang.org/x/crypto/chacha20/{chacha_ppc64le.s => chacha_ppc64x.s} (76%)
rename vendor/golang.org/x/crypto/internal/poly1305/{sum_ppc64le.go => sum_ppc64x.go} (95%)
rename vendor/golang.org/x/crypto/internal/poly1305/{sum_ppc64le.s => sum_ppc64x.s} (89%)
delete mode 100644 vendor/golang.org/x/crypto/sha3/xor.go
delete mode 100644 vendor/golang.org/x/net/context/go17.go
delete mode 100644 vendor/golang.org/x/net/context/go19.go
delete mode 100644 vendor/golang.org/x/net/context/pre_go17.go
delete mode 100644 vendor/golang.org/x/net/context/pre_go19.go
create mode 100644 vendor/golang.org/x/net/html/iter.go
create mode 100644 vendor/golang.org/x/net/http2/unencrypted.go
create mode 100644 vendor/golang.org/x/net/internal/httpcommon/ascii.go
rename vendor/golang.org/x/net/{http2 => internal/httpcommon}/headermap.go (74%)
create mode 100644 vendor/golang.org/x/net/internal/httpcommon/request.go
delete mode 100644 vendor/golang.org/x/sync/errgroup/go120.go
delete mode 100644 vendor/golang.org/x/sync/errgroup/pre_go120.go
create mode 100644 vendor/golang.org/x/sys/cpu/asm_darwin_x86_gc.s
create mode 100644 vendor/golang.org/x/sys/cpu/cpu_darwin_x86.go
rename vendor/golang.org/x/sys/cpu/{cpu_x86.s => cpu_gc_x86.s} (94%)
rename vendor/golang.org/x/{tools/internal/versions/constraint_go121.go => sys/cpu/cpu_other_x86.go} (50%)
create mode 100644 vendor/golang.org/x/sys/cpu/syscall_darwin_x86_gc.go
create mode 100644 vendor/golang.org/x/sys/unix/auxv.go
create mode 100644 vendor/golang.org/x/sys/unix/auxv_unsupported.go
delete mode 100644 vendor/golang.org/x/tools/LICENSE
delete mode 100644 vendor/golang.org/x/tools/PATENTS
delete mode 100644 vendor/golang.org/x/tools/cmd/stringer/stringer.go
delete mode 100644 vendor/golang.org/x/tools/go/gcexportdata/gcexportdata.go
delete mode 100644 vendor/golang.org/x/tools/go/gcexportdata/importer.go
delete mode 100644 vendor/golang.org/x/tools/go/packages/doc.go
delete mode 100644 vendor/golang.org/x/tools/go/packages/external.go
delete mode 100644 vendor/golang.org/x/tools/go/packages/golist.go
delete mode 100644 vendor/golang.org/x/tools/go/packages/golist_overlay.go
delete mode 100644 vendor/golang.org/x/tools/go/packages/loadmode_string.go
delete mode 100644 vendor/golang.org/x/tools/go/packages/packages.go
delete mode 100644 vendor/golang.org/x/tools/go/packages/visit.go
delete mode 100644 vendor/golang.org/x/tools/go/types/objectpath/objectpath.go
delete mode 100644 vendor/golang.org/x/tools/go/types/typeutil/callee.go
delete mode 100644 vendor/golang.org/x/tools/go/types/typeutil/imports.go
delete mode 100644 vendor/golang.org/x/tools/go/types/typeutil/map.go
delete mode 100644 vendor/golang.org/x/tools/go/types/typeutil/methodsetcache.go
delete mode 100644 vendor/golang.org/x/tools/go/types/typeutil/ui.go
delete mode 100644 vendor/golang.org/x/tools/internal/aliases/aliases.go
delete mode 100644 vendor/golang.org/x/tools/internal/aliases/aliases_go122.go
delete mode 100644 vendor/golang.org/x/tools/internal/event/core/event.go
delete mode 100644 vendor/golang.org/x/tools/internal/event/core/export.go
delete mode 100644 vendor/golang.org/x/tools/internal/event/core/fast.go
delete mode 100644 vendor/golang.org/x/tools/internal/event/doc.go
delete mode 100644 vendor/golang.org/x/tools/internal/event/event.go
delete mode 100644 vendor/golang.org/x/tools/internal/event/keys/keys.go
delete mode 100644 vendor/golang.org/x/tools/internal/event/keys/standard.go
delete mode 100644 vendor/golang.org/x/tools/internal/event/keys/util.go
delete mode 100644 vendor/golang.org/x/tools/internal/event/label/label.go
delete mode 100644 vendor/golang.org/x/tools/internal/gcimporter/bimport.go
delete mode 100644 vendor/golang.org/x/tools/internal/gcimporter/exportdata.go
delete mode 100644 vendor/golang.org/x/tools/internal/gcimporter/gcimporter.go
delete mode 100644 vendor/golang.org/x/tools/internal/gcimporter/iexport.go
delete mode 100644 vendor/golang.org/x/tools/internal/gcimporter/iimport.go
delete mode 100644 vendor/golang.org/x/tools/internal/gcimporter/predeclared.go
delete mode 100644 vendor/golang.org/x/tools/internal/gcimporter/ureader_yes.go
delete mode 100644 vendor/golang.org/x/tools/internal/gocommand/invoke.go
delete mode 100644 vendor/golang.org/x/tools/internal/gocommand/vendor.go
delete mode 100644 vendor/golang.org/x/tools/internal/gocommand/version.go
delete mode 100644 vendor/golang.org/x/tools/internal/packagesinternal/packages.go
delete mode 100644 vendor/golang.org/x/tools/internal/pkgbits/codes.go
delete mode 100644 vendor/golang.org/x/tools/internal/pkgbits/decoder.go
delete mode 100644 vendor/golang.org/x/tools/internal/pkgbits/doc.go
delete mode 100644 vendor/golang.org/x/tools/internal/pkgbits/encoder.go
delete mode 100644 vendor/golang.org/x/tools/internal/pkgbits/flags.go
delete mode 100644 vendor/golang.org/x/tools/internal/pkgbits/reloc.go
delete mode 100644 vendor/golang.org/x/tools/internal/pkgbits/support.go
delete mode 100644 vendor/golang.org/x/tools/internal/pkgbits/sync.go
delete mode 100644 vendor/golang.org/x/tools/internal/pkgbits/syncmarker_string.go
delete mode 100644 vendor/golang.org/x/tools/internal/pkgbits/version.go
delete mode 100644 vendor/golang.org/x/tools/internal/stdlib/manifest.go
delete mode 100644 vendor/golang.org/x/tools/internal/stdlib/stdlib.go
delete mode 100644 vendor/golang.org/x/tools/internal/typeparams/common.go
delete mode 100644 vendor/golang.org/x/tools/internal/typeparams/coretype.go
delete mode 100644 vendor/golang.org/x/tools/internal/typeparams/free.go
delete mode 100644 vendor/golang.org/x/tools/internal/typeparams/normalize.go
delete mode 100644 vendor/golang.org/x/tools/internal/typeparams/termlist.go
delete mode 100644 vendor/golang.org/x/tools/internal/typeparams/typeterm.go
delete mode 100644 vendor/golang.org/x/tools/internal/typesinternal/element.go
delete mode 100644 vendor/golang.org/x/tools/internal/typesinternal/errorcode.go
delete mode 100644 vendor/golang.org/x/tools/internal/typesinternal/errorcode_string.go
delete mode 100644 vendor/golang.org/x/tools/internal/typesinternal/recv.go
delete mode 100644 vendor/golang.org/x/tools/internal/typesinternal/toonew.go
delete mode 100644 vendor/golang.org/x/tools/internal/typesinternal/types.go
delete mode 100644 vendor/golang.org/x/tools/internal/versions/constraint.go
delete mode 100644 vendor/golang.org/x/tools/internal/versions/features.go
delete mode 100644 vendor/golang.org/x/tools/internal/versions/gover.go
delete mode 100644 vendor/golang.org/x/tools/internal/versions/types.go
delete mode 100644 vendor/golang.org/x/tools/internal/versions/versions.go
rename vendor/helm.sh/helm/v3/pkg/{cli => kube}/roundtripper.go (87%)
create mode 100644 vendor/helm.sh/helm/v3/pkg/registry/reference.go
create mode 100644 vendor/helm.sh/helm/v3/pkg/time/ctime/ctime.go
create mode 100644 vendor/helm.sh/helm/v3/pkg/time/ctime/ctime_linux.go
create mode 100644 vendor/helm.sh/helm/v3/pkg/time/ctime/ctime_other.go
create mode 100644 vendor/k8s.io/client-go/util/retry/OWNERS
create mode 100644 vendor/k8s.io/client-go/util/retry/util.go
diff --git a/go.mod b/go.mod
index e3226da966e..e122397e524 100644
--- a/go.mod
+++ b/go.mod
@@ -26,12 +26,12 @@ require (
github.com/prometheus/common v0.55.0
github.com/rawagner/graphql-transport-ws v0.0.0-20200817140314-dcfbf0388067
github.com/redhat-certification/chart-verifier v0.0.0-20231017212458-4c2fb295f411
- github.com/stretchr/testify v1.9.0
- golang.org/x/net v0.30.0
+ github.com/stretchr/testify v1.10.0
+ golang.org/x/net v0.37.0
golang.org/x/oauth2 v0.23.0
gopkg.in/yaml.v2 v2.4.0
gopkg.in/yaml.v3 v3.0.1
- helm.sh/helm/v3 v3.14.4
+ helm.sh/helm/v3 v3.17.3
k8s.io/api v0.32.2
k8s.io/apiextensions-apiserver v0.32.2
k8s.io/apimachinery v0.32.2
@@ -45,43 +45,44 @@ require (
require (
cel.dev/expr v0.18.0 // indirect
- dario.cat/mergo v1.0.0 // indirect
+ dario.cat/mergo v1.0.1 // indirect
github.com/AdaLogics/go-fuzz-headers v0.0.0-20230811130428-ced1acdcaa24 // indirect
github.com/Azure/go-ansiterm v0.0.0-20230124172434-306776ec8161 // indirect
- github.com/BurntSushi/toml v1.3.2 // indirect
+ github.com/BurntSushi/toml v1.4.0 // indirect
github.com/MakeNowJust/heredoc v1.0.0 // indirect
github.com/Masterminds/goutils v1.1.1 // indirect
github.com/Masterminds/semver v1.5.0 // indirect
- github.com/Masterminds/semver/v3 v3.2.1 // indirect
- github.com/Masterminds/sprig/v3 v3.2.3 // indirect
+ github.com/Masterminds/semver/v3 v3.3.0 // indirect
+ github.com/Masterminds/sprig/v3 v3.3.0 // indirect
github.com/Masterminds/squirrel v1.5.4 // indirect
- github.com/Microsoft/go-winio v0.6.1 // indirect
- github.com/Microsoft/hcsshim v0.11.4 // indirect
+ github.com/Microsoft/go-winio v0.6.2 // indirect
github.com/ProtonMail/go-crypto v0.0.0-20230828082145-3c4c8a2d2371 // indirect
github.com/antlr4-go/antlr/v4 v4.13.0 // indirect
- github.com/asaskevich/govalidator v0.0.0-20200428143746-21a406dcc535 // indirect
+ github.com/asaskevich/govalidator v0.0.0-20230301143203-a9d515a09cc2 // indirect
github.com/beorn7/perks v1.0.1 // indirect
github.com/blang/semver/v4 v4.0.0 // indirect
github.com/cespare/xxhash/v2 v2.3.0 // indirect
github.com/chai2010/gettext-go v1.0.2 // indirect
github.com/cloudflare/circl v1.3.7 // indirect
- github.com/containerd/containerd v1.7.13 // indirect
+ github.com/containerd/containerd v1.7.24 // indirect
+ github.com/containerd/errdefs v0.3.0 // indirect
github.com/containerd/log v0.1.0 // indirect
- github.com/cyphar/filepath-securejoin v0.2.4 // indirect
+ github.com/containerd/platforms v0.2.1 // indirect
+ github.com/cyphar/filepath-securejoin v0.3.6 // indirect
github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect
github.com/distribution/distribution/v3 v3.0.0-20230511163743-f7717b7855ca // indirect
- github.com/distribution/reference v0.5.0 // indirect
+ github.com/distribution/reference v0.6.0 // indirect
github.com/docker/cli v25.0.1+incompatible // indirect
github.com/docker/distribution v2.8.3+incompatible // indirect
- github.com/docker/docker v25.0.1+incompatible // indirect
+ github.com/docker/docker v25.0.6+incompatible // indirect
github.com/docker/docker-credential-helpers v0.7.0 // indirect
github.com/docker/go-connections v0.5.0 // indirect
github.com/docker/go-metrics v0.0.1 // indirect
github.com/emicklei/go-restful/v3 v3.11.0 // indirect
github.com/emirpasic/gods v1.18.1 // indirect
- github.com/evanphx/json-patch v5.7.0+incompatible // indirect
+ github.com/evanphx/json-patch v5.9.0+incompatible // indirect
github.com/evanphx/json-patch/v5 v5.6.0 // indirect
- github.com/exponent-io/jsonpath v0.0.0-20151013193312-d6023ce2651d // indirect
+ github.com/exponent-io/jsonpath v0.0.0-20210407135951-1de76d718b3f // indirect
github.com/fatih/color v1.14.1 // indirect
github.com/felixge/httpsnoop v1.0.4 // indirect
github.com/fsnotify/fsnotify v1.7.0 // indirect
@@ -120,11 +121,11 @@ require (
github.com/hashicorp/go-version v1.4.0 // indirect
github.com/hashicorp/hcl v1.0.0 // indirect
github.com/helm/chart-testing/v3 v3.9.0 // indirect
- github.com/huandu/xstrings v1.4.0 // indirect
+ github.com/huandu/xstrings v1.5.0 // indirect
github.com/imdario/mergo v0.3.13 // indirect
github.com/inconshreveable/mousetrap v1.1.0 // indirect
github.com/jbenet/go-context v0.0.0-20150711004518-d14ea06fba99 // indirect
- github.com/jmoiron/sqlx v1.3.5 // indirect
+ github.com/jmoiron/sqlx v1.4.0 // indirect
github.com/josharian/intern v1.0.0 // indirect
github.com/json-iterator/go v1.1.12 // indirect
github.com/kevinburke/ssh_config v1.2.0 // indirect
@@ -167,17 +168,17 @@ require (
github.com/pquerna/cachecontrol v0.1.0 // indirect
github.com/prometheus/client_model v0.6.1 // indirect
github.com/prometheus/procfs v0.15.1 // indirect
- github.com/rubenv/sql-migrate v1.5.2 // indirect
+ github.com/rubenv/sql-migrate v1.7.1 // indirect
github.com/russross/blackfriday/v2 v2.1.0 // indirect
github.com/sagikazarmark/locafero v0.4.0 // indirect
github.com/sagikazarmark/slog-shim v0.1.0 // indirect
github.com/sergi/go-diff v1.2.0 // indirect
- github.com/shopspring/decimal v1.3.1 // indirect
+ github.com/shopspring/decimal v1.4.0 // indirect
github.com/sirupsen/logrus v1.9.3 // indirect
github.com/skeema/knownhosts v1.2.1 // indirect
github.com/sourcegraph/conc v0.3.0 // indirect
github.com/spf13/afero v1.11.0 // indirect
- github.com/spf13/cast v1.6.0 // indirect
+ github.com/spf13/cast v1.7.0 // indirect
github.com/spf13/cobra v1.8.1 // indirect
github.com/spf13/pflag v1.0.5 // indirect
github.com/spf13/viper v1.18.2 // indirect
@@ -195,15 +196,14 @@ require (
go.opentelemetry.io/otel/trace v1.28.0 // indirect
go.uber.org/multierr v1.11.0 // indirect
go.uber.org/zap v1.27.0 // indirect
- golang.org/x/crypto v0.28.0 // indirect
+ golang.org/x/crypto v0.36.0 // indirect
golang.org/x/exp v0.0.0-20240719175910-8a7402abbf56 // indirect
golang.org/x/mod v0.21.0 // indirect
- golang.org/x/sync v0.8.0 // indirect
- golang.org/x/sys v0.26.0 // indirect
- golang.org/x/term v0.25.0 // indirect
- golang.org/x/text v0.19.0 // indirect
+ golang.org/x/sync v0.12.0 // indirect
+ golang.org/x/sys v0.31.0 // indirect
+ golang.org/x/term v0.30.0 // indirect
+ golang.org/x/text v0.23.0 // indirect
golang.org/x/time v0.7.0 // indirect
- golang.org/x/tools v0.26.0 // indirect
google.golang.org/genproto/googleapis/api v0.0.0-20240826202546-f6391c0de4c7 // indirect
google.golang.org/genproto/googleapis/rpc v0.0.0-20240826202546-f6391c0de4c7 // indirect
google.golang.org/grpc v1.65.0 // indirect
@@ -218,7 +218,7 @@ require (
k8s.io/helm v2.17.0+incompatible // indirect
k8s.io/klog v1.0.0 // indirect
k8s.io/kube-openapi v0.0.0-20241105132330-32ad38e42d3f // indirect
- k8s.io/kubectl v0.31.1 // indirect
+ k8s.io/kubectl v0.32.2 // indirect
k8s.io/pod-security-admission v0.31.1 // indirect
oras.land/oras-go v1.2.5 // indirect
sigs.k8s.io/json v0.0.0-20241010143419-9aa6b5e7a4b3 // indirect
diff --git a/go.sum b/go.sum
index b31686d959c..b01c16224c3 100644
--- a/go.sum
+++ b/go.sum
@@ -26,9 +26,11 @@ cloud.google.com/go/pubsub v1.2.0/go.mod h1:jhfEVHT8odbXTkndysNHCcx0awwzvfOlguIA
cloud.google.com/go/storage v1.0.0/go.mod h1:IhtSnM/ZTZV8YYJWCY8RULGVqBDmpoyjwiyrjsg+URw=
cloud.google.com/go/storage v1.5.0/go.mod h1:tpKbwo567HUNpVclU5sGELwQWBDZ8gh0ZeosJ0Rtdos=
cloud.google.com/go/storage v1.6.0/go.mod h1:N7U0C8pVQ/+NIKOBQyamJIeKQKkZ+mxpohlUTyfDhBk=
-dario.cat/mergo v1.0.0 h1:AGCNq9Evsj31mOgNPcLyXc+4PNABt905YmuqPYYpBWk=
-dario.cat/mergo v1.0.0/go.mod h1:uNxQE+84aUszobStD9th8a29P2fMDhsBdgRYvZOxGmk=
+dario.cat/mergo v1.0.1 h1:Ra4+bf83h2ztPIQYNP99R6m+Y7KfnARDfID+a+vLl4s=
+dario.cat/mergo v1.0.1/go.mod h1:uNxQE+84aUszobStD9th8a29P2fMDhsBdgRYvZOxGmk=
dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU=
+filippo.io/edwards25519 v1.1.0 h1:FNf4tywRC1HmFuKW5xopWpigGjJKiJSV0Cqo0cJWDaA=
+filippo.io/edwards25519 v1.1.0/go.mod h1:BxyFTGdWcka3PhytdK4V28tE5sGfRvvvRV7EaN4VDT4=
github.com/AdaLogics/go-fuzz-headers v0.0.0-20230811130428-ced1acdcaa24 h1:bvDV9vkmnHYOMsOr4WLk+Vo07yKIzd94sVoIqshQ4bU=
github.com/AdaLogics/go-fuzz-headers v0.0.0-20230811130428-ced1acdcaa24/go.mod h1:8o94RPi1/7XTJvwPpRSzSUedZrtlirdB3r9Z20bi2f8=
github.com/Azure/azure-sdk-for-go v16.2.1+incompatible/go.mod h1:9XXNKU+eRnpl9moKnB4QOLf1HestfXbmab5FXxiDBjc=
@@ -53,8 +55,8 @@ github.com/Azure/go-autorest/logger v0.2.0/go.mod h1:T9E3cAhj2VqvPOtCYAvby9aBXkZ
github.com/Azure/go-autorest/tracing v0.5.0/go.mod h1:r/s2XiOKccPW3HrqB+W0TQzfbtp2fGCgRFtBroKn4Dk=
github.com/Azure/go-autorest/tracing v0.6.0/go.mod h1:+vhtPC754Xsa23ID7GlGsrdKBpUA79WCAKPPZVC2DeU=
github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
-github.com/BurntSushi/toml v1.3.2 h1:o7IhLm0Msx3BaB+n3Ag7L8EVlByGnpq14C4YWiu/gL8=
-github.com/BurntSushi/toml v1.3.2/go.mod h1:CxXYINrC8qIiEnFrOxCa7Jy5BFHlXnUU2pbicEuybxQ=
+github.com/BurntSushi/toml v1.4.0 h1:kuoIxZQy2WRRk1pttg9asf+WVv6tWQuBNVmK8+nqPr0=
+github.com/BurntSushi/toml v1.4.0/go.mod h1:ukJfTF/6rtPPRCnwkur4qwRxa8vTRFBF0uk2lLoLwho=
github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo=
github.com/DATA-DOG/go-sqlmock v1.5.2 h1:OcvFkGmslmlZibjAjaHm3L//6LiuBgolP7OputlJIzU=
github.com/DATA-DOG/go-sqlmock v1.5.2/go.mod h1:88MAG/4G7SMwSE3CeA0ZKzrT5CiOU3OJ+JlNzwDqpNU=
@@ -67,23 +69,22 @@ github.com/Masterminds/goutils v1.1.1/go.mod h1:8cTjp+g8YejhMuvIA5y2vz3BpJxksy86
github.com/Masterminds/semver v1.5.0 h1:H65muMkzWKEuNDnfl9d70GUjFniHKHRbFPGBuZ3QEww=
github.com/Masterminds/semver v1.5.0/go.mod h1:MB6lktGJrhw8PrUyiEoblNEGEQ+RzHPF078ddwwvV3Y=
github.com/Masterminds/semver/v3 v3.0.3/go.mod h1:VPu/7SZ7ePZ3QOrcuXROw5FAcLl4a0cBrbBpGY/8hQs=
-github.com/Masterminds/semver/v3 v3.2.0/go.mod h1:qvl/7zhW3nngYb5+80sSMF+FG2BjYrf8m9wsX0PNOMQ=
-github.com/Masterminds/semver/v3 v3.2.1 h1:RN9w6+7QoMeJVGyfmbcgs28Br8cvmnucEXnY0rYXWg0=
-github.com/Masterminds/semver/v3 v3.2.1/go.mod h1:qvl/7zhW3nngYb5+80sSMF+FG2BjYrf8m9wsX0PNOMQ=
+github.com/Masterminds/semver/v3 v3.3.0 h1:B8LGeaivUe71a5qox1ICM/JLl0NqZSW5CHyL+hmvYS0=
+github.com/Masterminds/semver/v3 v3.3.0/go.mod h1:4V+yj/TJE1HU9XfppCwVMZq3I84lprf4nC11bSS5beM=
github.com/Masterminds/sprig/v3 v3.0.2/go.mod h1:oesJ8kPONMONaZgtiHNzUShJbksypC5kWczhZAf6+aU=
-github.com/Masterminds/sprig/v3 v3.2.3 h1:eL2fZNezLomi0uOLqjQoN6BfsDD+fyLtgbJMAj9n6YA=
-github.com/Masterminds/sprig/v3 v3.2.3/go.mod h1:rXcFaZ2zZbLRJv/xSysmlgIM1u11eBaRMhvYXJNkGuM=
+github.com/Masterminds/sprig/v3 v3.3.0 h1:mQh0Yrg1XPo6vjYXgtf5OtijNAKJRNcTdOOGZe3tPhs=
+github.com/Masterminds/sprig/v3 v3.3.0/go.mod h1:Zy1iXRYNqNLUolqCpL4uhk6SHUMAOSCzdgBfDb35Lz0=
github.com/Masterminds/squirrel v1.5.4 h1:uUcX/aBc8O7Fg9kaISIUsHXdKuqehiXAMQTYX8afzqM=
github.com/Masterminds/squirrel v1.5.4/go.mod h1:NNaOrjSoIDfDA40n7sr2tPNZRfjzjA400rg+riTZj10=
github.com/Masterminds/vcs v1.13.1/go.mod h1:N09YCmOQr6RLxC6UNHzuVwAdodYbbnycGHSmwVJjcKA=
github.com/Microsoft/go-winio v0.4.11/go.mod h1:VhR8bwka0BXejwEJY73c50VrPtXAaKcyvVC4A4RozmA=
github.com/Microsoft/go-winio v0.4.15-0.20190919025122-fc70bd9a86b5/go.mod h1:tTuCMEN+UleMWgg9dVx4Hu52b1bJo+59jBh3ajtinzw=
github.com/Microsoft/go-winio v0.5.2/go.mod h1:WpS1mjBmmwHBEWmogvA2mj8546UReBk4v8QkMxJ6pZY=
-github.com/Microsoft/go-winio v0.6.1 h1:9/kr64B9VUZrLm5YYwbGtUJnMgqWVOdUAXu6Migciow=
-github.com/Microsoft/go-winio v0.6.1/go.mod h1:LRdKpFKfdobln8UmuiYcKPot9D2v6svN5+sAH+4kjUM=
+github.com/Microsoft/go-winio v0.6.2 h1:F2VQgta7ecxGYO8k3ZZz3RS8fVIXVxONVUPlNERoyfY=
+github.com/Microsoft/go-winio v0.6.2/go.mod h1:yd8OoFMLzJbo9gZq8j5qaps8bJ9aShtEA8Ipt1oGCvU=
github.com/Microsoft/hcsshim v0.8.7/go.mod h1:OHd7sQqRFrYd3RmSgbgji+ctCwkbq2wbEYNSzOYtcBQ=
-github.com/Microsoft/hcsshim v0.11.4 h1:68vKo2VN8DE9AdN4tnkWnmdhqdbpUFM8OF3Airm7fz8=
-github.com/Microsoft/hcsshim v0.11.4/go.mod h1:smjE4dvqPX9Zldna+t5FG3rnoHhaB7QYxPRqGcpAD9w=
+github.com/Microsoft/hcsshim v0.11.7 h1:vl/nj3Bar/CvJSYo7gIQPyRWc9f3c6IeSNavBTSZNZQ=
+github.com/Microsoft/hcsshim v0.11.7/go.mod h1:MV8xMfmECjl5HdO7U/3/hFVnkmSBjAjmA09d4bExKcU=
github.com/NYTimes/gziphandler v0.0.0-20170623195520-56545f4a5d46/go.mod h1:3wb06e3pkSAbeQ52E9H9iFoQsEEwGN64994WTCIhntQ=
github.com/Nvveen/Gotty v0.0.0-20120604004816-cd527374f1e5/go.mod h1:lmUJ/7eu/Q8D7ML55dXQrVaamCz2vxCfdQBasLZfHKk=
github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU=
@@ -122,8 +123,8 @@ github.com/armon/go-socks5 v0.0.0-20160902184237-e75332964ef5/go.mod h1:wHh0iHkY
github.com/asaskevich/govalidator v0.0.0-20180720115003-f9ffefc3facf/go.mod h1:lB+ZfQJz7igIIfQNfa7Ml4HSf2uFQQRzpGGRXenZAgY=
github.com/asaskevich/govalidator v0.0.0-20190424111038-f61b66f89f4a/go.mod h1:lB+ZfQJz7igIIfQNfa7Ml4HSf2uFQQRzpGGRXenZAgY=
github.com/asaskevich/govalidator v0.0.0-20200108200545-475eaeb16496/go.mod h1:oGkLhpf+kjZl6xBf758TQhh5XrAeiJv/7FRz/2spLIg=
-github.com/asaskevich/govalidator v0.0.0-20200428143746-21a406dcc535 h1:4daAzAu0S6Vi7/lbWECcX0j45yZReDZ56BQsrVBOEEY=
-github.com/asaskevich/govalidator v0.0.0-20200428143746-21a406dcc535/go.mod h1:oGkLhpf+kjZl6xBf758TQhh5XrAeiJv/7FRz/2spLIg=
+github.com/asaskevich/govalidator v0.0.0-20230301143203-a9d515a09cc2 h1:DklsrG3dyBCFEj5IhUbnKptjxatkF07cF2ak3yi77so=
+github.com/asaskevich/govalidator v0.0.0-20230301143203-a9d515a09cc2/go.mod h1:WaHUgvxTVq04UNunO+XhnAqY/wQc+bxr74GqbsZ/Jqw=
github.com/aws/aws-sdk-go v1.15.11/go.mod h1:mFuSZ37Z9YOHbQEwBWztmVzqXrEkub65tZoCYDt7FT0=
github.com/aws/aws-sdk-go v1.17.7/go.mod h1:KmX6BPdI08NWTb3/sm4ZGu5ShLoqVDhKgpiN924inxo=
github.com/beorn7/perks v0.0.0-20160804104726-4c0e84591b9a/go.mod h1:Dwedo/Wpr24TaqPxmxbtue+5NUziq4I4S80YR8gNf3Q=
@@ -183,20 +184,26 @@ github.com/containerd/containerd v1.2.7/go.mod h1:bC6axHOhabU15QhwfG7w5PipXdVtMX
github.com/containerd/containerd v1.3.0-beta.2.0.20190828155532-0293cbd26c69/go.mod h1:bC6axHOhabU15QhwfG7w5PipXdVtMXFTttgp+kVtyUA=
github.com/containerd/containerd v1.3.2/go.mod h1:bC6axHOhabU15QhwfG7w5PipXdVtMXFTttgp+kVtyUA=
github.com/containerd/containerd v1.4.3/go.mod h1:bC6axHOhabU15QhwfG7w5PipXdVtMXFTttgp+kVtyUA=
-github.com/containerd/containerd v1.7.13 h1:wPYKIeGMN8vaggSKuV1X0wZulpMz4CrgEsZdaCyB6Is=
-github.com/containerd/containerd v1.7.13/go.mod h1:zT3up6yTRfEUa6+GsITYIJNgSVL9NQ4x4h1RPzk0Wu4=
+github.com/containerd/containerd v1.7.24 h1:zxszGrGjrra1yYJW/6rhm9cJ1ZQ8rkKBR48brqsa7nA=
+github.com/containerd/containerd v1.7.24/go.mod h1:7QUzfURqZWCZV7RLNEn1XjUCQLEf0bkaK4GjUaZehxw=
+github.com/containerd/containerd/api v1.7.19 h1:VWbJL+8Ap4Ju2mx9c9qS1uFSB1OVYr5JJrW2yT5vFoA=
+github.com/containerd/containerd/api v1.7.19/go.mod h1:fwGavl3LNwAV5ilJ0sbrABL44AQxmNjDRcwheXDb6Ig=
github.com/containerd/continuity v0.0.0-20190426062206-aaeac12a7ffc/go.mod h1:GL3xCUCBDV3CZiTSEKksMWbLE66hEyuu9qyDOOqM47Y=
github.com/containerd/continuity v0.0.0-20200107194136-26c1120b8d41/go.mod h1:Dq467ZllaHgAtVp4p1xUQWBrFXR9s/wyoTpG8zOJGkY=
github.com/containerd/continuity v0.0.0-20200228182428-0f16d7a0959c/go.mod h1:Dq467ZllaHgAtVp4p1xUQWBrFXR9s/wyoTpG8zOJGkY=
github.com/containerd/continuity v0.4.3 h1:6HVkalIp+2u1ZLH1J/pYX2oBVXlJZvh1X1A7bEZ9Su8=
github.com/containerd/continuity v0.4.3/go.mod h1:F6PTNCKepoxEaXLQp3wDAjygEnImnZ/7o4JzpodfroQ=
+github.com/containerd/errdefs v0.3.0 h1:FSZgGOeK4yuT/+DnF07/Olde/q4KBoMsaamhXxIMDp4=
+github.com/containerd/errdefs v0.3.0/go.mod h1:+YBYIdtsnF4Iw6nWZhJcqGSg/dwvV7tyJ/kCkyJ2k+M=
github.com/containerd/fifo v0.0.0-20190226154929-a9fb20d87448/go.mod h1:ODA38xgv3Kuk8dQz2ZQXpnv/UZZUHUCL7pnLehbXgQI=
github.com/containerd/go-runc v0.0.0-20180907222934-5a6d9f37cfa3/go.mod h1:IV7qH3hrUgRmyYrtgEeGWJfWbgcHL9CSRruz2Vqcph0=
github.com/containerd/log v0.1.0 h1:TCJt7ioM2cr/tfR8GPbGf9/VRAX8D2B4PjzCpfX540I=
github.com/containerd/log v0.1.0/go.mod h1:VRRf09a7mHDIRezVKTRCrOq78v577GXq3bSa3EhrzVo=
+github.com/containerd/platforms v0.2.1 h1:zvwtM3rz2YHPQsF2CHYM8+KtB5dvhISiXh5ZpSBQv6A=
+github.com/containerd/platforms v0.2.1/go.mod h1:XHCb+2/hzowdiut9rkudds9bE5yJ7npe7dG/wG+uFPw=
github.com/containerd/ttrpc v0.0.0-20190828154514-0e0f228740de/go.mod h1:PvCDdDGpgqzQIzDW1TphrGLssLDZp2GuS+X5DkEJB8o=
-github.com/containerd/ttrpc v1.2.2 h1:9vqZr0pxwOF5koz6N0N3kJ0zDHokrcPxIR/ZR2YFtOs=
-github.com/containerd/ttrpc v1.2.2/go.mod h1:sIT6l32Ph/H9cvnJsfXM5drIVzTr5A2flTf1G5tYZak=
+github.com/containerd/ttrpc v1.2.5 h1:IFckT1EFQoFBMG4c3sMdT8EP3/aKfumK1msY+Ze4oLU=
+github.com/containerd/ttrpc v1.2.5/go.mod h1:YCXHsb32f+Sq5/72xHubdiJRQY9inL4a4ZQrAbN1q9o=
github.com/containerd/typeurl v0.0.0-20180627222232-a93fcdb778cd/go.mod h1:Cm3kwCdlkCfMSHURc+r6fwoGH6/F1hH3S4sg0rLFWPc=
github.com/containerd/typeurl v1.0.2 h1:Chlt8zIieDbzQFzXzAeBEF92KhExuE4p9p92/QmY7aY=
github.com/containerd/typeurl/v2 v2.1.1 h1:3Q4Pt7i8nYwy2KmQWIw2+1hTvwTE/6w9FqcttATPO/4=
@@ -230,8 +237,8 @@ github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ3
github.com/creack/pty v1.1.18 h1:n56/Zwd5o6whRC5PMGretI4IdRLlmBXYNjScPaBgsbY=
github.com/creack/pty v1.1.18/go.mod h1:MOBLtS5ELjhRRrroQr9kyvTxUAFNvYEK993ew/Vr4O4=
github.com/cyphar/filepath-securejoin v0.2.2/go.mod h1:FpkQEhXnPnOthhzymB7CGsFk2G9VLXONKD9G7QGMM+4=
-github.com/cyphar/filepath-securejoin v0.2.4 h1:Ugdm7cg7i6ZK6x3xDF1oEu1nfkyfH53EtKeQYTC3kyg=
-github.com/cyphar/filepath-securejoin v0.2.4/go.mod h1:aPGpWjXOXUn2NCNjFvBE6aRxGGx79pTxQpKOJNYHHl4=
+github.com/cyphar/filepath-securejoin v0.3.6 h1:4d9N5ykBnSp5Xn2JkhocYDkOpURL/18CYMpo6xB9uWM=
+github.com/cyphar/filepath-securejoin v0.3.6/go.mod h1:Sdj7gXlvMcPZsbhwhQ33GguGLDGQL7h7bg04C/+u9jI=
github.com/cznic/b v0.0.0-20180115125044-35e9bbe41f07/go.mod h1:URriBxXwVq5ijiJ12C7iIZqlA69nTlI+LgI6/pwftG8=
github.com/cznic/fileutil v0.0.0-20180108211300-6a051e75936f/go.mod h1:8S58EK26zhXSxzv7NQFpnliaOQsmDUxvoQO3rt154Vg=
github.com/cznic/golex v0.0.0-20170803123110-4ab7c5e190e4/go.mod h1:+bmmJDNmKlhWNG+gwWCkaBoTy39Fs+bzRxVBzoTQbIc=
@@ -265,8 +272,8 @@ github.com/dgryski/go-sip13 v0.0.0-20181026042036-e10d5fee7954/go.mod h1:vAd38F8
github.com/dhui/dktest v0.3.0/go.mod h1:cyzIUfGsBEbZ6BT7tnXqAShHSXCZhSNmFl70sZ7c1yc=
github.com/distribution/distribution/v3 v3.0.0-20230511163743-f7717b7855ca h1:yGaIDzPWkgU+yRvI2x/rGdOU1hl6bLZzm0mETEUSHwk=
github.com/distribution/distribution/v3 v3.0.0-20230511163743-f7717b7855ca/go.mod h1:t1IxPNGdTGez+YGKyJyQrtSSqisfMIm1hnFhvMPlxtE=
-github.com/distribution/reference v0.5.0 h1:/FUIFXtfc/x2gpa5/VGfiGLuOIdYa1t65IKK2OFGvA0=
-github.com/distribution/reference v0.5.0/go.mod h1:BbU0aIcezP1/5jX/8MP0YiH4SdvB5Y4f/wlDRiLyi3E=
+github.com/distribution/reference v0.6.0 h1:0IXCQ5g4/QMHHkarYzh5l+u8T3t73zM5QvfrDyIgxBk=
+github.com/distribution/reference v0.6.0/go.mod h1:BbU0aIcezP1/5jX/8MP0YiH4SdvB5Y4f/wlDRiLyi3E=
github.com/dnaeon/go-vcr v1.0.1/go.mod h1:aBB1+wY4s93YsC3HHjMBMrwTj2R9FHDzUr9KyGc8n1E=
github.com/docker/cli v0.0.0-20200130152716-5d0cf8839492/go.mod h1:JLrzqnKDaYBop7H2jaqPtU4hHvMKP+vjCwu2uszcLI8=
github.com/docker/cli v25.0.1+incompatible h1:mFpqnrS6Hsm3v1k7Wa/BO23oz0k121MTbTO1lpcGSkU=
@@ -280,8 +287,8 @@ github.com/docker/docker v0.7.3-0.20190103212154-2b7e084dc98b/go.mod h1:eEKB0N0r
github.com/docker/docker v0.7.3-0.20190327010347-be7ac8be2ae0/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk=
github.com/docker/docker v0.7.3-0.20190817195342-4760db040282/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk=
github.com/docker/docker v1.4.2-0.20200203170920-46ec8731fbce/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk=
-github.com/docker/docker v25.0.1+incompatible h1:k5TYd5rIVQRSqcTwCID+cyVA0yRg86+Pcrz1ls0/frA=
-github.com/docker/docker v25.0.1+incompatible/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk=
+github.com/docker/docker v25.0.6+incompatible h1:5cPwbwriIcsua2REJe8HqQV+6WlWc1byg2QSXzBxBGg=
+github.com/docker/docker v25.0.6+incompatible/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk=
github.com/docker/docker-credential-helpers v0.6.3/go.mod h1:WRaJzqw3CTB9bk10avuGsjVBZsD05qeibJ1/TYlvc0Y=
github.com/docker/docker-credential-helpers v0.7.0 h1:xtCHsjxogADNZcdv1pKUHXryefjlVRqWqIhk/uXJp0A=
github.com/docker/docker-credential-helpers v0.7.0/go.mod h1:rETQfLdHNT3foU5kuNkFR1R1V12OJRRO5lzt2D1b5X0=
@@ -321,12 +328,13 @@ github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7
github.com/evanphx/json-patch v4.2.0+incompatible/go.mod h1:50XU6AFN0ol/bzJsmQLiYLvXMP4fmwYFNcr97nuDLSk=
github.com/evanphx/json-patch v4.5.0+incompatible/go.mod h1:50XU6AFN0ol/bzJsmQLiYLvXMP4fmwYFNcr97nuDLSk=
github.com/evanphx/json-patch v4.9.0+incompatible/go.mod h1:50XU6AFN0ol/bzJsmQLiYLvXMP4fmwYFNcr97nuDLSk=
-github.com/evanphx/json-patch v5.7.0+incompatible h1:vgGkfT/9f8zE6tvSCe74nfpAVDQ2tG6yudJd8LBksgI=
-github.com/evanphx/json-patch v5.7.0+incompatible/go.mod h1:50XU6AFN0ol/bzJsmQLiYLvXMP4fmwYFNcr97nuDLSk=
+github.com/evanphx/json-patch v5.9.0+incompatible h1:fBXyNpNMuTTDdquAq/uisOr2lShz4oaXpDTX2bLe7ls=
+github.com/evanphx/json-patch v5.9.0+incompatible/go.mod h1:50XU6AFN0ol/bzJsmQLiYLvXMP4fmwYFNcr97nuDLSk=
github.com/evanphx/json-patch/v5 v5.6.0 h1:b91NhWfaz02IuVxO9faSllyAtNXHMPkC5J8sJCLunww=
github.com/evanphx/json-patch/v5 v5.6.0/go.mod h1:G79N1coSVB93tBe7j6PhzjmR3/2VvlbKOFpnXhI9Bw4=
-github.com/exponent-io/jsonpath v0.0.0-20151013193312-d6023ce2651d h1:105gxyaGwCFad8crR9dcMQWvV9Hvulu6hwUh4tWPJnM=
github.com/exponent-io/jsonpath v0.0.0-20151013193312-d6023ce2651d/go.mod h1:ZZMPRZwes7CROmyNKgQzC3XPs6L/G2EJLHddWejkmf4=
+github.com/exponent-io/jsonpath v0.0.0-20210407135951-1de76d718b3f h1:Wl78ApPPB2Wvf/TIe2xdyJxTlb6obmF18d8QdkxNDu4=
+github.com/exponent-io/jsonpath v0.0.0-20210407135951-1de76d718b3f/go.mod h1:OSYXu++VVOHnXeitef/D8n/6y4QV8uLHSFXX4NeXMGc=
github.com/fatih/camelcase v1.0.0/go.mod h1:yN2Sb0lFhZJUdVvtELVWefmrXpuZESvPmqwoZc+/fpc=
github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4=
github.com/fatih/color v1.9.0/go.mod h1:eQcE1qtQxscV5RaZvpXrrb8Drkc3/DdQ+uUYCNjL+zU=
@@ -335,8 +343,8 @@ github.com/fatih/color v1.14.1/go.mod h1:2oHN61fhTpgcxD3TSWCgKDiH1+x4OiDVVGH8Wlg
github.com/felixge/httpsnoop v1.0.4 h1:NFTV2Zj1bL4mc9sqWACXbQFVBBg2W3GPvqp8/ESS2Wg=
github.com/felixge/httpsnoop v1.0.4/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U=
github.com/form3tech-oss/jwt-go v3.2.2+incompatible/go.mod h1:pbq4aXjuKjdthFRnoDwaVPLA+WlJuPGy+QneDUgJi2k=
-github.com/foxcpp/go-mockdns v1.0.0 h1:7jBqxd3WDWwi/6WhDvacvH1XsN3rOLXyHM1uhvIx6FI=
-github.com/foxcpp/go-mockdns v1.0.0/go.mod h1:lgRN6+KxQBawyIghpnl5CezHFGS9VLzvtVlwxvzXTQ4=
+github.com/foxcpp/go-mockdns v1.1.0 h1:jI0rD8M0wuYAxL7r/ynTrCQQq0BVqfB99Vgk7DlmewI=
+github.com/foxcpp/go-mockdns v1.1.0/go.mod h1:IhLeSFGed3mJIAXPH2aiRQB+kqz7oqu8ld2qVbOu7Wk=
github.com/frankban/quicktest v1.14.6 h1:7Xjx+VpznH+oBnejlPUj8oUpdxnVs4f8XU8WnHkI4W8=
github.com/frankban/quicktest v1.14.6/go.mod h1:4ptaffx2x8+WTWXmUCuVU6aPUX1/Mz7zb5vbUoiM6w0=
github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo=
@@ -445,19 +453,13 @@ github.com/go-openapi/validate v0.19.5/go.mod h1:8DJv2CVJQ6kGNpFW6eV9N3JviE1C85n
github.com/go-playground/locales v0.13.0/go.mod h1:taPMhCMXrRLJO55olJkUXHZBHCxTMfnGwq/HNwmWNS8=
github.com/go-playground/universal-translator v0.17.0/go.mod h1:UkSxE5sNxxRwHyU+Scu5vgOQjsIJAF8j9muTVoKLVtA=
github.com/go-sql-driver/mysql v1.4.1/go.mod h1:zAC/RDZ24gD3HViQzih4MyKcchzm+sOG5ZlKdlhCg5w=
-github.com/go-sql-driver/mysql v1.6.0 h1:BCTh4TKNUYmOmMUcQ3IipzF5prigylS7XXjEkfCHuOE=
-github.com/go-sql-driver/mysql v1.6.0/go.mod h1:DCzpHaOWr8IXmIStZouvnhqoel9Qv2LBy8hT2VhHyBg=
+github.com/go-sql-driver/mysql v1.8.1 h1:LedoTUt/eveggdHS9qUFC1EFSa8bU2+1pZjSRpvNJ1Y=
+github.com/go-sql-driver/mysql v1.8.1/go.mod h1:wEBSXgmK//2ZFJyE+qWnIsVGmvmEKlqwuVSjsCm7DZg=
github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY=
github.com/go-task/slim-sprig v0.0.0-20230315185526-52ccab3ef572 h1:tfuBGBXKqDEevZMzYi5KSi8KkcZtzBcTgAUUtapy0OI=
github.com/go-task/slim-sprig/v3 v3.0.0 h1:sUs3vkvUymDpBKi3qH1YSqBQk9+9D/8M2mN1vB6EwHI=
github.com/go-task/slim-sprig/v3 v3.0.0/go.mod h1:W848ghGpv3Qj3dhTPRyJypKRiqCdHZiAzKg9hl15HA8=
github.com/gobuffalo/flect v0.2.0/go.mod h1:W3K3X9ksuZfir8f/LrfVtWmCDQFfayuylOJ7sz/Fj80=
-github.com/gobuffalo/logger v1.0.6 h1:nnZNpxYo0zx+Aj9RfMPBm+x9zAU2OayFh/xrAWi34HU=
-github.com/gobuffalo/logger v1.0.6/go.mod h1:J31TBEHR1QLV2683OXTAItYIg8pv2JMHnF/quuAbMjs=
-github.com/gobuffalo/packd v1.0.1 h1:U2wXfRr4E9DH8IdsDLlRFwTZTK7hLfq9qT/QHXGVe/0=
-github.com/gobuffalo/packd v1.0.1/go.mod h1:PP2POP3p3RXGz7Jh6eYEf93S7vA2za6xM7QT85L4+VY=
-github.com/gobuffalo/packr/v2 v2.8.3 h1:xE1yzvnO56cUC0sTpKR3DIbxZgB54AftTFMhB2XEWlY=
-github.com/gobuffalo/packr/v2 v2.8.3/go.mod h1:0SahksCVcx4IMnigTjiFuyldmTrdTctXsOdiU5KwbKc=
github.com/gobwas/glob v0.2.3 h1:A4xDbljILXROh+kObIiy5kIaPYD8e96x1tgBhUI5J+Y=
github.com/gobwas/glob v0.2.3/go.mod h1:d3Ez4x06l9bZtSvzIay5+Yzi0fmZzPgnTbPcKjJAkT8=
github.com/goccy/go-yaml v1.8.1/go.mod h1:wS4gNoLalDSJxo/SpngzPQ2BN4uuZVLCmbM4S3vd4+Y=
@@ -652,16 +654,14 @@ github.com/helm/chart-testing/v3 v3.9.0 h1:iYxIjL4TXDhDKhq/Na6gO7XVPaGXt62U69NRS
github.com/helm/chart-testing/v3 v3.9.0/go.mod h1:sIRwAX8gsJ01Ke//F+eW0bhqTtH5ZJZDfO+WwcUDh9Q=
github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU=
github.com/huandu/xstrings v1.2.0/go.mod h1:DvyZB1rfVYsBIigL8HwpZgxHwXozlTgGqn63UyNX5k4=
-github.com/huandu/xstrings v1.3.3/go.mod h1:y5/lhBue+AyNmUVz9RLU9xbLR0o4KIIExikq4ovT0aE=
-github.com/huandu/xstrings v1.4.0 h1:D17IlohoQq4UcpqD7fDk80P7l+lwAmlFaBHgOipl2FU=
-github.com/huandu/xstrings v1.4.0/go.mod h1:y5/lhBue+AyNmUVz9RLU9xbLR0o4KIIExikq4ovT0aE=
+github.com/huandu/xstrings v1.5.0 h1:2ag3IFq9ZDANvthTwTiqSSZLjDc+BedvHPAp5tJy2TI=
+github.com/huandu/xstrings v1.5.0/go.mod h1:y5/lhBue+AyNmUVz9RLU9xbLR0o4KIIExikq4ovT0aE=
github.com/ianlancetaylor/demangle v0.0.0-20181102032728-5e5cf60278f6/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc=
github.com/imdario/mergo v0.3.5/go.mod h1:2EnlNZ0deacrJVfApfmtdGgDfMuh/nq6Ok1EcJh5FfA=
github.com/imdario/mergo v0.3.6/go.mod h1:2EnlNZ0deacrJVfApfmtdGgDfMuh/nq6Ok1EcJh5FfA=
github.com/imdario/mergo v0.3.7/go.mod h1:2EnlNZ0deacrJVfApfmtdGgDfMuh/nq6Ok1EcJh5FfA=
github.com/imdario/mergo v0.3.8/go.mod h1:2EnlNZ0deacrJVfApfmtdGgDfMuh/nq6Ok1EcJh5FfA=
github.com/imdario/mergo v0.3.10/go.mod h1:jmQim1M+e3UYxmgPu/WyfjB3N3VflVyUjjjwH0dnCYA=
-github.com/imdario/mergo v0.3.11/go.mod h1:jmQim1M+e3UYxmgPu/WyfjB3N3VflVyUjjjwH0dnCYA=
github.com/imdario/mergo v0.3.13 h1:lFzP57bqS/wsqKssCGmtLAb8A0wKjLGrve2q3PPVcBk=
github.com/imdario/mergo v0.3.13/go.mod h1:4lJ1jqUDcsbIECGy0RUJAXNIhg+6ocWgb1ALK2O4oXg=
github.com/inconshreveable/mousetrap v1.0.0/go.mod h1:PxqpIevigyE2G7u3NXJIT2ANytuPF1OarO4DADm73n8=
@@ -676,8 +676,8 @@ github.com/jessevdk/go-flags v1.4.0/go.mod h1:4FA24M0QyGHXBuZZK/XkWh8h0e1EYbRYJS
github.com/jmespath/go-jmespath v0.0.0-20160202185014-0b12d6b521d8/go.mod h1:Nht3zPeWKUH0NzdCt2Blrr5ys8VGpn0CEB0cQHVjt7k=
github.com/jmespath/go-jmespath v0.0.0-20160803190731-bd40a432e4c7/go.mod h1:Nht3zPeWKUH0NzdCt2Blrr5ys8VGpn0CEB0cQHVjt7k=
github.com/jmespath/go-jmespath v0.0.0-20180206201540-c2b33e8439af/go.mod h1:Nht3zPeWKUH0NzdCt2Blrr5ys8VGpn0CEB0cQHVjt7k=
-github.com/jmoiron/sqlx v1.3.5 h1:vFFPA71p1o5gAeqtEAwLU4dnX2napprKtHr7PYIcN3g=
-github.com/jmoiron/sqlx v1.3.5/go.mod h1:nRVWtLre0KfCLJvgxzCsLVMogSvQ1zNJtpYr2Ccp0mQ=
+github.com/jmoiron/sqlx v1.4.0 h1:1PLqN7S1UYp5t4SrVVnt4nUVNemrDAtxlulVe+Qgm3o=
+github.com/jmoiron/sqlx v1.4.0/go.mod h1:ZrZ7UsYB/weZdl2Bxg6jCRO9c3YHl8r3ahlKmRT4JLY=
github.com/joefitzgerald/rainbow-reporter v0.1.0/go.mod h1:481CNgqmVHQZzdIbN52CupLJyoVwB10FQ/IQlF1pdL8=
github.com/jonboulle/clockwork v0.1.0/go.mod h1:Ii8DK3G1RaLaWxj9trq07+26W01tbo22gdxWY5EU2bo=
github.com/josharian/intern v1.0.0 h1:vlS4z54oSdjm0bgjRigI+G1HpF+tI+9rE5LLzOg8HmY=
@@ -695,8 +695,6 @@ github.com/jtolds/gls v4.20.0+incompatible/go.mod h1:QJZ7F/aHp+rZTRtaJ1ow/lLfFfV
github.com/julienschmidt/httprouter v1.2.0/go.mod h1:SYymIcj16QtmaHHD7aYtjjsJG7VTCxuUUipMqKk8s4w=
github.com/kardianos/osext v0.0.0-20190222173326-2bc1f35cddc0 h1:iQTw/8FWTuc7uiaSepXwyf3o52HaUYcV+Tu66S3F5GA=
github.com/kardianos/osext v0.0.0-20190222173326-2bc1f35cddc0/go.mod h1:1NbS8ALrpOvjt0rHPNLyCIeMtbizbir8U//inJ+zuB8=
-github.com/karrick/godirwalk v1.16.1 h1:DynhcF+bztK8gooS0+NDJFrdNZjJ3gzVzC545UNA9iw=
-github.com/karrick/godirwalk v1.16.1/go.mod h1:j4mkqPuvaLI8mp1DroR3P6ad7cyYd4c1qeJ3RV7ULlk=
github.com/kevinburke/ssh_config v1.2.0 h1:x584FjTGwHzMwvHx18PXxbBVzfnxogHaAReU4gf13a4=
github.com/kevinburke/ssh_config v1.2.0/go.mod h1:CT57kijsi8u/K/BOFA39wgDQJ9CxiF4nAY/ojJ6r6mM=
github.com/kisielk/errcheck v1.1.0/go.mod h1:EZBBE59ingxPouuu3KfxchcWSUPOHkagtvWXihfKN4Q=
@@ -728,7 +726,6 @@ github.com/lann/ps v0.0.0-20150810152359-62de8c46ede0 h1:P6pPBnrTSX3DEVR4fDembhR
github.com/lann/ps v0.0.0-20150810152359-62de8c46ede0/go.mod h1:vmVJ0l/dxyfGW6FmdpVm2joNMFikkuWg0EoCKLGUMNw=
github.com/leodido/go-urn v1.2.0/go.mod h1:+8+nEpDfqqsY+g338gtMEUOtuK+4dEMhiQEgxpxOKII=
github.com/lib/pq v1.0.0/go.mod h1:5WUZQaWbwv1U+lTReE5YruASi9Al49XbQIvNi/34Woo=
-github.com/lib/pq v1.2.0/go.mod h1:5WUZQaWbwv1U+lTReE5YruASi9Al49XbQIvNi/34Woo=
github.com/lib/pq v1.10.9 h1:YXG7RB+JIjhP29X+OtkiDnYaXQwpS4JEWq7dtCCRUEw=
github.com/lib/pq v1.10.9/go.mod h1:AlVN5x4E4T544tWzH6hKfbfQvm3HdbOxrmggDNAPY9o=
github.com/liggitt/tabwriter v0.0.0-20181228230101-89fcab3d43de h1:9TO3cAIGXtEhnIaL+V+BEER86oLrvS+kWobKpbJuye0=
@@ -746,12 +743,6 @@ github.com/mailru/easyjson v0.0.0-20190626092158-b2ccc519800e/go.mod h1:C1wdFJiN
github.com/mailru/easyjson v0.7.0/go.mod h1:KAzv3t3aY1NaHWoQz1+4F1ccyAH66Jk7yos7ldAVICs=
github.com/mailru/easyjson v0.7.7 h1:UGYAvKxe3sBsEDzO8ZeWOSlIQfWFlxbzLZe7hwFURr0=
github.com/mailru/easyjson v0.7.7/go.mod h1:xzfreul335JAWq5oZzymOObrkdz5UnU4kGfJJLY9Nlc=
-github.com/markbates/errx v1.1.0 h1:QDFeR+UP95dO12JgW+tgi2UVfo0V8YBHiUIOaeBPiEI=
-github.com/markbates/errx v1.1.0/go.mod h1:PLa46Oex9KNbVDZhKel8v1OT7hD5JZ2eI7AHhA0wswc=
-github.com/markbates/oncer v1.0.0 h1:E83IaVAHygyndzPimgUYJjbshhDTALZyXxvk9FOlQRY=
-github.com/markbates/oncer v1.0.0/go.mod h1:Z59JA581E9GP6w96jai+TGqafHPW+cPfRxz2aSZ0mcI=
-github.com/markbates/safe v1.0.1 h1:yjZkbvRM6IzKj9tlu/zMJLS0n/V351OZWRnF3QfaUxI=
-github.com/markbates/safe v1.0.1/go.mod h1:nAqgmRi7cY2nqMc92/bSEeQA+R4OheNU2T1kNSCBdG0=
github.com/marstr/guid v1.1.0/go.mod h1:74gB1z2wpxxInTG6yaqA7KrtM0NZ+RbrcqDvYHefzho=
github.com/mattn/go-colorable v0.0.9/go.mod h1:9vuHe8Xs5qXnSaW/c/ABM9alt+Vo+STaOChaDxuIBZU=
github.com/mattn/go-colorable v0.1.2/go.mod h1:U0ppj6V5qS13XJ6of8GYAs25YV2eR4EVcfRqFIhoBtE=
@@ -775,15 +766,14 @@ github.com/mattn/go-shellwords v1.0.9/go.mod h1:EZzvwXDESEeg03EKmM+RmDnNOPKG4lLt
github.com/mattn/go-shellwords v1.0.12 h1:M2zGm7EW6UQJvDeQxo4T51eKPurbeFbe8WtebGE2xrk=
github.com/mattn/go-shellwords v1.0.12/go.mod h1:EZzvwXDESEeg03EKmM+RmDnNOPKG4lLtQsUlTZDWQ8Y=
github.com/mattn/go-sqlite3 v1.10.0/go.mod h1:FPy6KqzDD04eiIsT53CuJW3U88zkxoIYsOqkbpncsNc=
-github.com/mattn/go-sqlite3 v1.14.6/go.mod h1:NyWgC/yNuGj7Q9rpYnZvas74GogHl5/Z4A/KQRfk6bU=
-github.com/mattn/go-sqlite3 v1.14.15 h1:vfoHhTN1af61xCRSWzFIWzx2YskyMTwHLrExkBOjvxI=
-github.com/mattn/go-sqlite3 v1.14.15/go.mod h1:2eHXhiwb8IkHr+BDWZGa96P6+rkvnG63S2DGjv9HUNg=
+github.com/mattn/go-sqlite3 v1.14.22 h1:2gZY6PC6kBnID23Tichd1K+Z0oS6nE/XwU+Vz/5o4kU=
+github.com/mattn/go-sqlite3 v1.14.22/go.mod h1:Uh1q+B4BYcTPb+yiD3kU8Ct7aC0hY9fxUwlHK0RXw+Y=
github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0=
github.com/matttproud/golang_protobuf_extensions v1.0.2-0.20181231171920-c182affec369/go.mod h1:BSXmuO+STAnVfrANrmjBb36TMTDstsz7MSK+HVaYKv4=
github.com/maxbrunsfeld/counterfeiter/v6 v6.2.2/go.mod h1:eD9eIE7cdwcMi9rYluz88Jz2VyhSmden33/aXg4oVIY=
github.com/miekg/dns v1.0.14/go.mod h1:W1PPwlIAgtquWBMBEV9nkV9Cazfe8ScdGz/Lj7v3Nrg=
-github.com/miekg/dns v1.1.25 h1:dFwPR6SfLtrSwgDcIq2bcU/gVutB4sNApq2HBdqcakg=
-github.com/miekg/dns v1.1.25/go.mod h1:bPDLeHnStXmXAq1m/Ch/hvfNHr14JKNPMBo3VZKjuso=
+github.com/miekg/dns v1.1.57 h1:Jzi7ApEIzwEPLHWRcafCN9LZSBbqQpxjt/wpgvg7wcM=
+github.com/miekg/dns v1.1.57/go.mod h1:uqRjCRUuEAA6qsOiJvDd+CFo/vW+y5WR6SNmHE55hZk=
github.com/mikefarah/yaml/v2 v2.4.0/go.mod h1:ahVqZF4n1W4NqwvVnZzC4es67xsW9uR/RRf2RRxieJU=
github.com/mikefarah/yq/v2 v2.4.1/go.mod h1:i8SYf1XdgUvY2OFwSqGAtWOOgimD2McJ6iutoxRm4k0=
github.com/mikefarah/yq/v3 v3.0.0-20201202084205-8846255d1c37/go.mod h1:dYWq+UWoFCDY1TndvFUQuhBbIYmZpjreC8adEAx93zE=
@@ -819,6 +809,8 @@ github.com/moby/sys/mountinfo v0.7.1 h1:/tTvQaSJRr2FshkhXiIpux6fQ2Zvc4j7tAhMTStA
github.com/moby/sys/mountinfo v0.7.1/go.mod h1:IJb6JQeOklcdMU9F5xQ8ZALD+CUr5VlGpwtX+VE0rpI=
github.com/moby/sys/sequential v0.5.0 h1:OPvI35Lzn9K04PBbCLW0g4LcFAJgHsvXsRyewg5lXtc=
github.com/moby/sys/sequential v0.5.0/go.mod h1:tH2cOOs5V9MlPiXcQzRC+eEyab644PWKGRYaaV5ZZlo=
+github.com/moby/sys/userns v0.1.0 h1:tVLXkFOxVu9A64/yh59slHVv9ahO9UIev4JZusOLG/g=
+github.com/moby/sys/userns v0.1.0/go.mod h1:IHUYgu/kao6N8YZlp9Cf444ySSvCmDlmzUcYfDHOl28=
github.com/moby/term v0.0.0-20200312100748-672ec06f55cd/go.mod h1:DdlQx2hp0Ss5/fLikoLlEeIYiATotOjgB//nb973jeo=
github.com/moby/term v0.5.0 h1:xt8Q1nalod/v7BqbG21f8mQPqH+xAaC9C3N3wfWbVP0=
github.com/moby/term v0.5.0/go.mod h1:8FzsFHVUBGZdbDsJw/ot+X+d5HLUbvklYLJ9uGfcI3Y=
@@ -1009,8 +1001,8 @@ github.com/rogpeppe/fastuuid v0.0.0-20150106093220-6724a57986af/go.mod h1:XWv6So
github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4=
github.com/rogpeppe/go-internal v1.12.0 h1:exVL4IDcn6na9z1rAb56Vxr+CgyK3nn3O+epU5NdKM8=
github.com/rogpeppe/go-internal v1.12.0/go.mod h1:E+RYuTGaKKdloAfM02xzb0FW3Paa99yedzYV+kq4uf4=
-github.com/rubenv/sql-migrate v1.5.2 h1:bMDqOnrJVV/6JQgQ/MxOpU+AdO8uzYYA/TxFUBzFtS0=
-github.com/rubenv/sql-migrate v1.5.2/go.mod h1:H38GW8Vqf8F0Su5XignRyaRcbXbJunSWxs+kmzlg0Is=
+github.com/rubenv/sql-migrate v1.7.1 h1:f/o0WgfO/GqNuVg+6801K/KW3WdDSupzSjDYODmiUq4=
+github.com/rubenv/sql-migrate v1.7.1/go.mod h1:Ob2Psprc0/3ggbM6wCzyYVFFuc6FyZrb2AS+ezLDFb4=
github.com/russross/blackfriday v1.5.2/go.mod h1:JO/DiYxRf+HjHt06OyowR9PTA263kcR/rfWxYHBV53g=
github.com/russross/blackfriday/v2 v2.0.1/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM=
github.com/russross/blackfriday/v2 v2.1.0 h1:JIOH55/0cWyOuilr9/qlrm0BSXldqnqwMsf35Ld67mk=
@@ -1027,9 +1019,8 @@ github.com/sergi/go-diff v1.0.0/go.mod h1:0CfEIISq7TuYL3j771MWULgwwjU+GofnZX9QAm
github.com/sergi/go-diff v1.2.0 h1:XU+rvMAioB0UC3q1MFrIQy4Vo5/4VsRDQQXHsEya6xQ=
github.com/sergi/go-diff v1.2.0/go.mod h1:STckp+ISIX8hZLjrqAeVduY0gWCT9IjLuqbuNXdaHfM=
github.com/shopspring/decimal v0.0.0-20180709203117-cd690d0c9e24/go.mod h1:M+9NzErvs504Cn4c5DxATwIqPbtswREoFCre64PpcG4=
-github.com/shopspring/decimal v1.2.0/go.mod h1:DKyhrW/HYNuLGql+MJL6WCR6knT2jwCFRcu2hWCYk4o=
-github.com/shopspring/decimal v1.3.1 h1:2Usl1nmF/WZucqkFZhnfFYxxxu8LG21F6nPQBE5gKV8=
-github.com/shopspring/decimal v1.3.1/go.mod h1:DKyhrW/HYNuLGql+MJL6WCR6knT2jwCFRcu2hWCYk4o=
+github.com/shopspring/decimal v1.4.0 h1:bxl37RwXBklmTi0C79JfXCEBD1cqqHt0bbgBAGFp81k=
+github.com/shopspring/decimal v1.4.0/go.mod h1:gawqmDU56v4yIKSwfBSFip1HdCCXN8/+DMd9qYNcwME=
github.com/shurcooL/sanitized_anchor_name v1.0.0/go.mod h1:1NzhyTcUVG4SuEtjjoZeVRXNmyL/1OwPU0+IJeTBvfc=
github.com/sirupsen/logrus v1.0.4-0.20170822132746-89742aefa4b2/go.mod h1:pMByvHTf9Beacp5x1UXfOR9xyW/9antXMhjMPG0dEzc=
github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo=
@@ -1054,9 +1045,8 @@ github.com/spf13/afero v1.2.2/go.mod h1:9ZxEEn6pIJ8Rxe320qSDBk6AsU0r9pR7Q4OcevTd
github.com/spf13/afero v1.11.0 h1:WJQKhtpdm3v2IzqG8VMqrr6Rf3UYpEF239Jy9wNepM8=
github.com/spf13/afero v1.11.0/go.mod h1:GH9Y3pIexgf1MTIWtNGyogA5MwRIDXGUr+hbWNoBjkY=
github.com/spf13/cast v1.3.0/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE=
-github.com/spf13/cast v1.3.1/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE=
-github.com/spf13/cast v1.6.0 h1:GEiTHELF+vaR5dhz3VqZfFSzZjYbgeKDpBxQVS4GYJ0=
-github.com/spf13/cast v1.6.0/go.mod h1:ancEpBxwJDODSW/UG4rDrAqiKolqNNh2DX3mk86cAdo=
+github.com/spf13/cast v1.7.0 h1:ntdiHjuueXFgm5nzDRdOS4yfT43P5Fnud6DH50rz/7w=
+github.com/spf13/cast v1.7.0/go.mod h1:ancEpBxwJDODSW/UG4rDrAqiKolqNNh2DX3mk86cAdo=
github.com/spf13/cobra v0.0.2-0.20171109065643-2da4a54c5cee/go.mod h1:1l0Ry5zgKvJasoi3XT1TypsSe7PqH0Sj9dhYf7v3XqQ=
github.com/spf13/cobra v0.0.3/go.mod h1:1l0Ry5zgKvJasoi3XT1TypsSe7PqH0Sj9dhYf7v3XqQ=
github.com/spf13/cobra v0.0.5/go.mod h1:3K3wKZymM7VvHMDS9+Akkh4K60UwM26emMESw8tLCHU=
@@ -1098,8 +1088,8 @@ github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/
github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU=
github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4=
github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo=
-github.com/stretchr/testify v1.9.0 h1:HtqpIVDClZ4nwg75+f6Lvsy/wHu+3BoSGCbBAcpTsTg=
-github.com/stretchr/testify v1.9.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY=
+github.com/stretchr/testify v1.10.0 h1:Xv5erBjTwe/5IxqUQTdXv5kgmIvbHo3QQyRwhJsOfJA=
+github.com/stretchr/testify v1.10.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY=
github.com/subosito/gotenv v1.2.0/go.mod h1:N0PQaV/YGNqwC0u51sEeR/aUtSLEXKX9iv69rRypqCw=
github.com/subosito/gotenv v1.6.0 h1:9NlTDc1FTs4qu0DDq7AEtTPNw6SVm7uBMsUCUjABIf8=
github.com/subosito/gotenv v1.6.0/go.mod h1:Dk4QP5c2W3ibzajGcXpNraDfq2IrhjMIvMSWPKKo0FU=
@@ -1231,11 +1221,10 @@ golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPh
golang.org/x/crypto v0.0.0-20201002170205-7f63de1d35b0/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc=
golang.org/x/crypto v0.0.0-20220622213112-05595931fe9d/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4=
-golang.org/x/crypto v0.3.0/go.mod h1:hebNnKkNXi2UzZN1eVRvBB7co0a+JxK6XbPiWVs/3J4=
golang.org/x/crypto v0.3.1-0.20221117191849-2c476679df9a/go.mod h1:hebNnKkNXi2UzZN1eVRvBB7co0a+JxK6XbPiWVs/3J4=
golang.org/x/crypto v0.7.0/go.mod h1:pYwdfH91IfpZVANVyUOhSIPZaFoJGxTFbZhFTx+dXZU=
-golang.org/x/crypto v0.28.0 h1:GBDwsMXVQi34v5CCYUm2jkJvu4cbtru2U4TN2PSyQnw=
-golang.org/x/crypto v0.28.0/go.mod h1:rmgy+3RHxRZMyY0jjAJShp2zgEdOqj2AO7U0pYmeQ7U=
+golang.org/x/crypto v0.36.0 h1:AnAEvhDddvBdpY+uR+MyHmuZzzNqXSe/GvuDeob5L34=
+golang.org/x/crypto v0.36.0/go.mod h1:Y4J0ReaxCR1IMaabaSMugxJES1EpwhBHhv2bDHklZvc=
golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
golang.org/x/exp v0.0.0-20190125153040-c74c464bbbf2/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
@@ -1324,8 +1313,8 @@ golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug
golang.org/x/net v0.2.0/go.mod h1:KqCZLdyyvdV855qA2rE3GC2aiw5xGR5TEjj8smXukLY=
golang.org/x/net v0.6.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs=
golang.org/x/net v0.8.0/go.mod h1:QVkue5JL9kW//ek3r6jTKnTFis1tRmNAW2P1shuFdJc=
-golang.org/x/net v0.30.0 h1:AcW1SDZMkb8IpzCdQUaIq2sP4sZ4zw+55h6ynffypl4=
-golang.org/x/net v0.30.0/go.mod h1:2wGyMJ5iFasEhkwi13ChkO/t1ECNC4X4eBKkVFyYFlU=
+golang.org/x/net v0.37.0 h1:1zLorHbz+LYj7MQlSf1+2tPIIgibq2eL5xkrGk6f+2c=
+golang.org/x/net v0.37.0/go.mod h1:ivrbrMbzFq5J41QOQh0siUuly180yBYtLp+CKbEaFx8=
golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
golang.org/x/oauth2 v0.0.0-20181106182150-f42d05182288/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
@@ -1345,8 +1334,8 @@ golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJ
golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.1.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
-golang.org/x/sync v0.8.0 h1:3NFvSEYkUoMifnESzZl15y791HH1qU2xm6eCJU5ZPXQ=
-golang.org/x/sync v0.8.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk=
+golang.org/x/sync v0.12.0 h1:MHc5BpPuC30uJk597Ri8TV3CNZcTLu6B6z4lJy+g6Jw=
+golang.org/x/sync v0.12.0/go.mod h1:1dzgHSNfp02xaA81J2MS99Qcpr2w7fw1gpm99rleRqA=
golang.org/x/sys v0.0.0-20170830134202-bb24a47a89ea/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20180823144017-11551d06cbcc/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
@@ -1417,15 +1406,15 @@ golang.org/x/sys v0.2.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.3.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
-golang.org/x/sys v0.26.0 h1:KHjCJyddX0LoSTb3J+vWpupP9p0oznkqVk/IfjymZbo=
-golang.org/x/sys v0.26.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
+golang.org/x/sys v0.31.0 h1:ioabZlmFYtWhL+TRYpcnNlLwhyxaM9kWTDEmfnprqik=
+golang.org/x/sys v0.31.0/go.mod h1:BJP2sWEmIv4KK5OTEluFJCKSidICx8ciO85XgH3Ak8k=
golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8=
golang.org/x/term v0.2.0/go.mod h1:TVmDHMZPmdnySmBfhjOoOdhjzdE1h4u1VwSiw2l1Nuc=
golang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k=
golang.org/x/term v0.6.0/go.mod h1:m6U89DPEgQRMq3DNkDClhWw02AUbt2daBVO4cn4Hv9U=
-golang.org/x/term v0.25.0 h1:WtHI/ltw4NvSUig5KARz9h521QvRC8RmF/cuYqifU24=
-golang.org/x/term v0.25.0/go.mod h1:RPyXicDX+6vLxogjjRxjgD2TKtmAO6NZBsBRfrOLu7M=
+golang.org/x/term v0.30.0 h1:PQ39fJZ+mfadBm0y5WlL4vlM7Sx1Hgf13sMIY2+QS9Y=
+golang.org/x/term v0.30.0/go.mod h1:NYYFdzHoI5wRh/h5tDMdMqCqPJZEuNqVR5xJLd/n67g=
golang.org/x/text v0.0.0-20160726164857-2910a502d2bf/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
@@ -1438,8 +1427,8 @@ golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ=
golang.org/x/text v0.4.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8=
golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8=
golang.org/x/text v0.8.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8=
-golang.org/x/text v0.19.0 h1:kTxAhCbGbxhK0IwgSKiMO5awPoDQ0RpfiVYBfK860YM=
-golang.org/x/text v0.19.0/go.mod h1:BuEKDfySbSR4drPmRPG/7iBdf8hvFMuRexcpahXilzY=
+golang.org/x/text v0.23.0 h1:D71I7dUrlY+VX0gQShAThNGHFxZ13dGLBHQLVl1mJlY=
+golang.org/x/text v0.23.0/go.mod h1:/BLNzu4aZCJ1+kcD0DNRotWKage4q2rGVAg4o22unh4=
golang.org/x/time v0.0.0-20180412165947-fbb02b2291d2/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
@@ -1646,8 +1635,8 @@ gotest.tools/v3 v3.0.2/go.mod h1:3SzNCllyD9/Y+b5r9JIKQ474KzkZyqLqEfYqMsX94Bk=
gotest.tools/v3 v3.5.1 h1:EENdUnS3pdur5nybKYIh2Vfgc8IUNBjxDPSjtiJcOzU=
gotest.tools/v3 v3.5.1/go.mod h1:isy3WKz7GK6uNw/sbHzfKBLvlvXwUyV06n6brMxxopU=
helm.sh/helm/v3 v3.1.2/go.mod h1:WYsFJuMASa/4XUqLyv54s0U/f3mlAaRErGmyy4z921g=
-helm.sh/helm/v3 v3.14.4 h1:6FSpEfqyDalHq3kUr4gOMThhgY55kXUEjdQoyODYnrM=
-helm.sh/helm/v3 v3.14.4/go.mod h1:Tje7LL4gprZpuBNTbG34d1Xn5NmRT3OWfBRwpOSer9I=
+helm.sh/helm/v3 v3.17.3 h1:3n5rW3D0ArjFl0p4/oWO8IbY/HKaNNwJtOQFdH2AZHg=
+helm.sh/helm/v3 v3.17.3/go.mod h1:+uJKMH/UiMzZQOALR3XUf3BLIoczI2RKKD6bMhPh4G8=
honnef.co/go/tools v0.0.0-20180728063816-88497007e858/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
honnef.co/go/tools v0.0.0-20190106161140-3f1c8253044a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
@@ -1747,8 +1736,8 @@ k8s.io/kube-openapi v0.0.0-20241105132330-32ad38e42d3f h1:GA7//TjRY9yWGy1poLzYYJ
k8s.io/kube-openapi v0.0.0-20241105132330-32ad38e42d3f/go.mod h1:R/HEjbvWI0qdfb8viZUeVZm0X6IZnxAydC7YU42CMw4=
k8s.io/kubectl v0.17.2/go.mod h1:y4rfLV0n6aPmvbRCqZQjvOp3ezxsFgpqL+zF5jH/lxk=
k8s.io/kubectl v0.18.0/go.mod h1:LOkWx9Z5DXMEg5KtOjHhRiC1fqJPLyCr3KtQgEolCkU=
-k8s.io/kubectl v0.31.1 h1:ih4JQJHxsEggFqDJEHSOdJ69ZxZftgeZvYo7M/cpp24=
-k8s.io/kubectl v0.31.1/go.mod h1:aNuQoR43W6MLAtXQ/Bu4GDmoHlbhHKuyD49lmTC8eJM=
+k8s.io/kubectl v0.32.2 h1:TAkag6+XfSBgkqK9I7ZvwtF0WVtUAvK8ZqTt+5zi1Us=
+k8s.io/kubectl v0.32.2/go.mod h1:+h/NQFSPxiDZYX/WZaWw9fwYezGLISP0ud8nQKg+3g8=
k8s.io/kubernetes v1.13.0/go.mod h1:ocZa8+6APFNC2tX1DZASIbocyYT5jHzqFVsY5aoB7Jk=
k8s.io/metrics v0.17.2/go.mod h1:3TkNHET4ROd+NfzNxkjoVfQ0Ob4iZnaHmSEA4vYpwLw=
k8s.io/metrics v0.18.0/go.mod h1:8aYTW18koXqjLVKL7Ds05RPMX9ipJZI3mywYvBOxXd4=
diff --git a/vendor/dario.cat/mergo/.gitignore b/vendor/dario.cat/mergo/.gitignore
index 529c3412ba9..45ad0f1ae30 100644
--- a/vendor/dario.cat/mergo/.gitignore
+++ b/vendor/dario.cat/mergo/.gitignore
@@ -13,6 +13,9 @@
# Output of the go coverage tool, specifically when used with LiteIDE
*.out
+# Golang/Intellij
+.idea
+
# Project-local glide cache, RE: https://github.com/Masterminds/glide/issues/736
.glide/
diff --git a/vendor/dario.cat/mergo/README.md b/vendor/dario.cat/mergo/README.md
index 7d0cf9f32af..0b3c488893b 100644
--- a/vendor/dario.cat/mergo/README.md
+++ b/vendor/dario.cat/mergo/README.md
@@ -44,13 +44,21 @@ Also a lovely [comune](http://en.wikipedia.org/wiki/Mergo) (municipality) in the
## Status
-It is ready for production use. [It is used in several projects by Docker, Google, The Linux Foundation, VMWare, Shopify, Microsoft, etc](https://github.com/imdario/mergo#mergo-in-the-wild).
+Mergo is stable and frozen, ready for production. Check a short list of the projects using at large scale it [here](https://github.com/imdario/mergo#mergo-in-the-wild).
+
+No new features are accepted. They will be considered for a future v2 that improves the implementation and fixes bugs for corner cases.
### Important notes
#### 1.0.0
-In [1.0.0](//github.com/imdario/mergo/releases/tag/1.0.0) Mergo moves to a vanity URL `dario.cat/mergo`.
+In [1.0.0](//github.com/imdario/mergo/releases/tag/1.0.0) Mergo moves to a vanity URL `dario.cat/mergo`. No more v1 versions will be released.
+
+If the vanity URL is causing issues in your project due to a dependency pulling Mergo - it isn't a direct dependency in your project - it is recommended to use [replace](https://github.com/golang/go/wiki/Modules#when-should-i-use-the-replace-directive) to pin the version to the last one with the old import URL:
+
+```
+replace github.com/imdario/mergo => github.com/imdario/mergo v0.3.16
+```
#### 0.3.9
@@ -64,55 +72,24 @@ If you were using Mergo before April 6th, 2015, please check your project works
If Mergo is useful to you, consider buying me a coffee, a beer, or making a monthly donation to allow me to keep building great free software. :heart_eyes:
-
### Mergo in the wild
-- [moby/moby](https://github.com/moby/moby)
-- [kubernetes/kubernetes](https://github.com/kubernetes/kubernetes)
-- [vmware/dispatch](https://github.com/vmware/dispatch)
-- [Shopify/themekit](https://github.com/Shopify/themekit)
-- [imdario/zas](https://github.com/imdario/zas)
-- [matcornic/hermes](https://github.com/matcornic/hermes)
-- [OpenBazaar/openbazaar-go](https://github.com/OpenBazaar/openbazaar-go)
-- [kataras/iris](https://github.com/kataras/iris)
-- [michaelsauter/crane](https://github.com/michaelsauter/crane)
-- [go-task/task](https://github.com/go-task/task)
-- [sensu/uchiwa](https://github.com/sensu/uchiwa)
-- [ory/hydra](https://github.com/ory/hydra)
-- [sisatech/vcli](https://github.com/sisatech/vcli)
-- [dairycart/dairycart](https://github.com/dairycart/dairycart)
-- [projectcalico/felix](https://github.com/projectcalico/felix)
-- [resin-os/balena](https://github.com/resin-os/balena)
-- [go-kivik/kivik](https://github.com/go-kivik/kivik)
-- [Telefonica/govice](https://github.com/Telefonica/govice)
-- [supergiant/supergiant](supergiant/supergiant)
-- [SergeyTsalkov/brooce](https://github.com/SergeyTsalkov/brooce)
-- [soniah/dnsmadeeasy](https://github.com/soniah/dnsmadeeasy)
-- [ohsu-comp-bio/funnel](https://github.com/ohsu-comp-bio/funnel)
-- [EagerIO/Stout](https://github.com/EagerIO/Stout)
-- [lynndylanhurley/defsynth-api](https://github.com/lynndylanhurley/defsynth-api)
-- [russross/canvasassignments](https://github.com/russross/canvasassignments)
-- [rdegges/cryptly-api](https://github.com/rdegges/cryptly-api)
-- [casualjim/exeggutor](https://github.com/casualjim/exeggutor)
-- [divshot/gitling](https://github.com/divshot/gitling)
-- [RWJMurphy/gorl](https://github.com/RWJMurphy/gorl)
-- [andrerocker/deploy42](https://github.com/andrerocker/deploy42)
-- [elwinar/rambler](https://github.com/elwinar/rambler)
-- [tmaiaroto/gopartman](https://github.com/tmaiaroto/gopartman)
-- [jfbus/impressionist](https://github.com/jfbus/impressionist)
-- [Jmeyering/zealot](https://github.com/Jmeyering/zealot)
-- [godep-migrator/rigger-host](https://github.com/godep-migrator/rigger-host)
-- [Dronevery/MultiwaySwitch-Go](https://github.com/Dronevery/MultiwaySwitch-Go)
-- [thoas/picfit](https://github.com/thoas/picfit)
-- [mantasmatelis/whooplist-server](https://github.com/mantasmatelis/whooplist-server)
-- [jnuthong/item_search](https://github.com/jnuthong/item_search)
-- [bukalapak/snowboard](https://github.com/bukalapak/snowboard)
-- [containerssh/containerssh](https://github.com/containerssh/containerssh)
-- [goreleaser/goreleaser](https://github.com/goreleaser/goreleaser)
-- [tjpnz/structbot](https://github.com/tjpnz/structbot)
+Mergo is used by [thousands](https://deps.dev/go/dario.cat%2Fmergo/v1.0.0/dependents) [of](https://deps.dev/go/github.com%2Fimdario%2Fmergo/v0.3.16/dependents) [projects](https://deps.dev/go/github.com%2Fimdario%2Fmergo/v0.3.12), including:
+
+* [containerd/containerd](https://github.com/containerd/containerd)
+* [datadog/datadog-agent](https://github.com/datadog/datadog-agent)
+* [docker/cli/](https://github.com/docker/cli/)
+* [goreleaser/goreleaser](https://github.com/goreleaser/goreleaser)
+* [go-micro/go-micro](https://github.com/go-micro/go-micro)
+* [grafana/loki](https://github.com/grafana/loki)
+* [kubernetes/kubernetes](https://github.com/kubernetes/kubernetes)
+* [masterminds/sprig](github.com/Masterminds/sprig)
+* [moby/moby](https://github.com/moby/moby)
+* [slackhq/nebula](https://github.com/slackhq/nebula)
+* [volcano-sh/volcano](https://github.com/volcano-sh/volcano)
## Install
@@ -141,6 +118,39 @@ if err := mergo.Merge(&dst, src, mergo.WithOverride); err != nil {
}
```
+If you need to override pointers, so the source pointer's value is assigned to the destination's pointer, you must use `WithoutDereference`:
+
+```go
+package main
+
+import (
+ "fmt"
+
+ "dario.cat/mergo"
+)
+
+type Foo struct {
+ A *string
+ B int64
+}
+
+func main() {
+ first := "first"
+ second := "second"
+ src := Foo{
+ A: &first,
+ B: 2,
+ }
+
+ dest := Foo{
+ A: &second,
+ B: 1,
+ }
+
+ mergo.Merge(&dest, src, mergo.WithOverride, mergo.WithoutDereference)
+}
+```
+
Additionally, you can map a `map[string]interface{}` to a struct (and otherwise, from struct to map), following the same restrictions as in `Merge()`. Keys are capitalized to find each corresponding exported field.
```go
diff --git a/vendor/dario.cat/mergo/map.go b/vendor/dario.cat/mergo/map.go
index b50d5c2a4e7..759b4f74fd5 100644
--- a/vendor/dario.cat/mergo/map.go
+++ b/vendor/dario.cat/mergo/map.go
@@ -58,7 +58,7 @@ func deepMap(dst, src reflect.Value, visited map[uintptr]*visit, depth int, conf
}
fieldName := field.Name
fieldName = changeInitialCase(fieldName, unicode.ToLower)
- if v, ok := dstMap[fieldName]; !ok || (isEmptyValue(reflect.ValueOf(v), !config.ShouldNotDereference) || overwrite) {
+ if _, ok := dstMap[fieldName]; !ok || (!isEmptyValue(reflect.ValueOf(src.Field(i).Interface()), !config.ShouldNotDereference) && overwrite) || config.overwriteWithEmptyValue {
dstMap[fieldName] = src.Field(i).Interface()
}
}
diff --git a/vendor/dario.cat/mergo/merge.go b/vendor/dario.cat/mergo/merge.go
index 0ef9b2138c1..fd47c95b2b8 100644
--- a/vendor/dario.cat/mergo/merge.go
+++ b/vendor/dario.cat/mergo/merge.go
@@ -269,7 +269,7 @@ func deepMerge(dst, src reflect.Value, visited map[uintptr]*visit, depth int, co
if err = deepMerge(dst.Elem(), src.Elem(), visited, depth+1, config); err != nil {
return
}
- } else {
+ } else if src.Elem().Kind() != reflect.Struct {
if overwriteWithEmptySrc || (overwrite && !src.IsNil()) || dst.IsNil() {
dst.Set(src)
}
diff --git a/vendor/github.com/BurntSushi/toml/README.md b/vendor/github.com/BurntSushi/toml/README.md
index 3651cfa9609..639e6c39983 100644
--- a/vendor/github.com/BurntSushi/toml/README.md
+++ b/vendor/github.com/BurntSushi/toml/README.md
@@ -9,7 +9,7 @@ See the [releases page](https://github.com/BurntSushi/toml/releases) for a
changelog; this information is also in the git tag annotations (e.g. `git show
v0.4.0`).
-This library requires Go 1.13 or newer; add it to your go.mod with:
+This library requires Go 1.18 or newer; add it to your go.mod with:
% go get github.com/BurntSushi/toml@latest
diff --git a/vendor/github.com/BurntSushi/toml/decode.go b/vendor/github.com/BurntSushi/toml/decode.go
index 4d38f3bfcec..7aaf462c94a 100644
--- a/vendor/github.com/BurntSushi/toml/decode.go
+++ b/vendor/github.com/BurntSushi/toml/decode.go
@@ -6,7 +6,7 @@ import (
"encoding/json"
"fmt"
"io"
- "io/ioutil"
+ "io/fs"
"math"
"os"
"reflect"
@@ -18,13 +18,13 @@ import (
// Unmarshaler is the interface implemented by objects that can unmarshal a
// TOML description of themselves.
type Unmarshaler interface {
- UnmarshalTOML(interface{}) error
+ UnmarshalTOML(any) error
}
// Unmarshal decodes the contents of data in TOML format into a pointer v.
//
// See [Decoder] for a description of the decoding process.
-func Unmarshal(data []byte, v interface{}) error {
+func Unmarshal(data []byte, v any) error {
_, err := NewDecoder(bytes.NewReader(data)).Decode(v)
return err
}
@@ -32,12 +32,12 @@ func Unmarshal(data []byte, v interface{}) error {
// Decode the TOML data in to the pointer v.
//
// See [Decoder] for a description of the decoding process.
-func Decode(data string, v interface{}) (MetaData, error) {
+func Decode(data string, v any) (MetaData, error) {
return NewDecoder(strings.NewReader(data)).Decode(v)
}
// DecodeFile reads the contents of a file and decodes it with [Decode].
-func DecodeFile(path string, v interface{}) (MetaData, error) {
+func DecodeFile(path string, v any) (MetaData, error) {
fp, err := os.Open(path)
if err != nil {
return MetaData{}, err
@@ -46,6 +46,17 @@ func DecodeFile(path string, v interface{}) (MetaData, error) {
return NewDecoder(fp).Decode(v)
}
+// DecodeFS reads the contents of a file from [fs.FS] and decodes it with
+// [Decode].
+func DecodeFS(fsys fs.FS, path string, v any) (MetaData, error) {
+ fp, err := fsys.Open(path)
+ if err != nil {
+ return MetaData{}, err
+ }
+ defer fp.Close()
+ return NewDecoder(fp).Decode(v)
+}
+
// Primitive is a TOML value that hasn't been decoded into a Go value.
//
// This type can be used for any value, which will cause decoding to be delayed.
@@ -58,7 +69,7 @@ func DecodeFile(path string, v interface{}) (MetaData, error) {
// overhead of reflection. They can be useful when you don't know the exact type
// of TOML data until runtime.
type Primitive struct {
- undecoded interface{}
+ undecoded any
context Key
}
@@ -122,7 +133,7 @@ var (
)
// Decode TOML data in to the pointer `v`.
-func (dec *Decoder) Decode(v interface{}) (MetaData, error) {
+func (dec *Decoder) Decode(v any) (MetaData, error) {
rv := reflect.ValueOf(v)
if rv.Kind() != reflect.Ptr {
s := "%q"
@@ -136,8 +147,8 @@ func (dec *Decoder) Decode(v interface{}) (MetaData, error) {
return MetaData{}, fmt.Errorf("toml: cannot decode to nil value of %q", reflect.TypeOf(v))
}
- // Check if this is a supported type: struct, map, interface{}, or something
- // that implements UnmarshalTOML or UnmarshalText.
+ // Check if this is a supported type: struct, map, any, or something that
+ // implements UnmarshalTOML or UnmarshalText.
rv = indirect(rv)
rt := rv.Type()
if rv.Kind() != reflect.Struct && rv.Kind() != reflect.Map &&
@@ -148,7 +159,7 @@ func (dec *Decoder) Decode(v interface{}) (MetaData, error) {
// TODO: parser should read from io.Reader? Or at the very least, make it
// read from []byte rather than string
- data, err := ioutil.ReadAll(dec.r)
+ data, err := io.ReadAll(dec.r)
if err != nil {
return MetaData{}, err
}
@@ -179,7 +190,7 @@ func (dec *Decoder) Decode(v interface{}) (MetaData, error) {
// will only reflect keys that were decoded. Namely, any keys hidden behind a
// Primitive will be considered undecoded. Executing this method will update the
// undecoded keys in the meta data. (See the example.)
-func (md *MetaData) PrimitiveDecode(primValue Primitive, v interface{}) error {
+func (md *MetaData) PrimitiveDecode(primValue Primitive, v any) error {
md.context = primValue.context
defer func() { md.context = nil }()
return md.unify(primValue.undecoded, rvalue(v))
@@ -190,7 +201,7 @@ func (md *MetaData) PrimitiveDecode(primValue Primitive, v interface{}) error {
//
// Any type mismatch produces an error. Finding a type that we don't know
// how to handle produces an unsupported type error.
-func (md *MetaData) unify(data interface{}, rv reflect.Value) error {
+func (md *MetaData) unify(data any, rv reflect.Value) error {
// Special case. Look for a `Primitive` value.
// TODO: #76 would make this superfluous after implemented.
if rv.Type() == primitiveType {
@@ -207,7 +218,11 @@ func (md *MetaData) unify(data interface{}, rv reflect.Value) error {
rvi := rv.Interface()
if v, ok := rvi.(Unmarshaler); ok {
- return v.UnmarshalTOML(data)
+ err := v.UnmarshalTOML(data)
+ if err != nil {
+ return md.parseErr(err)
+ }
+ return nil
}
if v, ok := rvi.(encoding.TextUnmarshaler); ok {
return md.unifyText(data, v)
@@ -227,14 +242,6 @@ func (md *MetaData) unify(data interface{}, rv reflect.Value) error {
return md.unifyInt(data, rv)
}
switch k {
- case reflect.Ptr:
- elem := reflect.New(rv.Type().Elem())
- err := md.unify(data, reflect.Indirect(elem))
- if err != nil {
- return err
- }
- rv.Set(elem)
- return nil
case reflect.Struct:
return md.unifyStruct(data, rv)
case reflect.Map:
@@ -258,14 +265,13 @@ func (md *MetaData) unify(data interface{}, rv reflect.Value) error {
return md.e("unsupported type %s", rv.Kind())
}
-func (md *MetaData) unifyStruct(mapping interface{}, rv reflect.Value) error {
- tmap, ok := mapping.(map[string]interface{})
+func (md *MetaData) unifyStruct(mapping any, rv reflect.Value) error {
+ tmap, ok := mapping.(map[string]any)
if !ok {
if mapping == nil {
return nil
}
- return md.e("type mismatch for %s: expected table but found %T",
- rv.Type().String(), mapping)
+ return md.e("type mismatch for %s: expected table but found %s", rv.Type().String(), fmtType(mapping))
}
for key, datum := range tmap {
@@ -304,14 +310,14 @@ func (md *MetaData) unifyStruct(mapping interface{}, rv reflect.Value) error {
return nil
}
-func (md *MetaData) unifyMap(mapping interface{}, rv reflect.Value) error {
+func (md *MetaData) unifyMap(mapping any, rv reflect.Value) error {
keyType := rv.Type().Key().Kind()
if keyType != reflect.String && keyType != reflect.Interface {
return fmt.Errorf("toml: cannot decode to a map with non-string key type (%s in %q)",
keyType, rv.Type())
}
- tmap, ok := mapping.(map[string]interface{})
+ tmap, ok := mapping.(map[string]any)
if !ok {
if tmap == nil {
return nil
@@ -347,7 +353,7 @@ func (md *MetaData) unifyMap(mapping interface{}, rv reflect.Value) error {
return nil
}
-func (md *MetaData) unifyArray(data interface{}, rv reflect.Value) error {
+func (md *MetaData) unifyArray(data any, rv reflect.Value) error {
datav := reflect.ValueOf(data)
if datav.Kind() != reflect.Slice {
if !datav.IsValid() {
@@ -361,7 +367,7 @@ func (md *MetaData) unifyArray(data interface{}, rv reflect.Value) error {
return md.unifySliceArray(datav, rv)
}
-func (md *MetaData) unifySlice(data interface{}, rv reflect.Value) error {
+func (md *MetaData) unifySlice(data any, rv reflect.Value) error {
datav := reflect.ValueOf(data)
if datav.Kind() != reflect.Slice {
if !datav.IsValid() {
@@ -388,7 +394,7 @@ func (md *MetaData) unifySliceArray(data, rv reflect.Value) error {
return nil
}
-func (md *MetaData) unifyString(data interface{}, rv reflect.Value) error {
+func (md *MetaData) unifyString(data any, rv reflect.Value) error {
_, ok := rv.Interface().(json.Number)
if ok {
if i, ok := data.(int64); ok {
@@ -408,7 +414,7 @@ func (md *MetaData) unifyString(data interface{}, rv reflect.Value) error {
return md.badtype("string", data)
}
-func (md *MetaData) unifyFloat64(data interface{}, rv reflect.Value) error {
+func (md *MetaData) unifyFloat64(data any, rv reflect.Value) error {
rvk := rv.Kind()
if num, ok := data.(float64); ok {
@@ -429,7 +435,7 @@ func (md *MetaData) unifyFloat64(data interface{}, rv reflect.Value) error {
if num, ok := data.(int64); ok {
if (rvk == reflect.Float32 && (num < -maxSafeFloat32Int || num > maxSafeFloat32Int)) ||
(rvk == reflect.Float64 && (num < -maxSafeFloat64Int || num > maxSafeFloat64Int)) {
- return md.parseErr(errParseRange{i: num, size: rvk.String()})
+ return md.parseErr(errUnsafeFloat{i: num, size: rvk.String()})
}
rv.SetFloat(float64(num))
return nil
@@ -438,7 +444,7 @@ func (md *MetaData) unifyFloat64(data interface{}, rv reflect.Value) error {
return md.badtype("float", data)
}
-func (md *MetaData) unifyInt(data interface{}, rv reflect.Value) error {
+func (md *MetaData) unifyInt(data any, rv reflect.Value) error {
_, ok := rv.Interface().(time.Duration)
if ok {
// Parse as string duration, and fall back to regular integer parsing
@@ -481,7 +487,7 @@ func (md *MetaData) unifyInt(data interface{}, rv reflect.Value) error {
return nil
}
-func (md *MetaData) unifyBool(data interface{}, rv reflect.Value) error {
+func (md *MetaData) unifyBool(data any, rv reflect.Value) error {
if b, ok := data.(bool); ok {
rv.SetBool(b)
return nil
@@ -489,12 +495,12 @@ func (md *MetaData) unifyBool(data interface{}, rv reflect.Value) error {
return md.badtype("boolean", data)
}
-func (md *MetaData) unifyAnything(data interface{}, rv reflect.Value) error {
+func (md *MetaData) unifyAnything(data any, rv reflect.Value) error {
rv.Set(reflect.ValueOf(data))
return nil
}
-func (md *MetaData) unifyText(data interface{}, v encoding.TextUnmarshaler) error {
+func (md *MetaData) unifyText(data any, v encoding.TextUnmarshaler) error {
var s string
switch sdata := data.(type) {
case Marshaler:
@@ -523,13 +529,13 @@ func (md *MetaData) unifyText(data interface{}, v encoding.TextUnmarshaler) erro
return md.badtype("primitive (string-like)", data)
}
if err := v.UnmarshalText([]byte(s)); err != nil {
- return err
+ return md.parseErr(err)
}
return nil
}
-func (md *MetaData) badtype(dst string, data interface{}) error {
- return md.e("incompatible types: TOML value has type %T; destination has type %s", data, dst)
+func (md *MetaData) badtype(dst string, data any) error {
+ return md.e("incompatible types: TOML value has type %s; destination has type %s", fmtType(data), dst)
}
func (md *MetaData) parseErr(err error) error {
@@ -543,7 +549,7 @@ func (md *MetaData) parseErr(err error) error {
}
}
-func (md *MetaData) e(format string, args ...interface{}) error {
+func (md *MetaData) e(format string, args ...any) error {
f := "toml: "
if len(md.context) > 0 {
f = fmt.Sprintf("toml: (last key %q): ", md.context)
@@ -556,7 +562,7 @@ func (md *MetaData) e(format string, args ...interface{}) error {
}
// rvalue returns a reflect.Value of `v`. All pointers are resolved.
-func rvalue(v interface{}) reflect.Value {
+func rvalue(v any) reflect.Value {
return indirect(reflect.ValueOf(v))
}
@@ -600,3 +606,8 @@ func isUnifiable(rv reflect.Value) bool {
}
return false
}
+
+// fmt %T with "interface {}" replaced with "any", which is far more readable.
+func fmtType(t any) string {
+ return strings.ReplaceAll(fmt.Sprintf("%T", t), "interface {}", "any")
+}
diff --git a/vendor/github.com/BurntSushi/toml/decode_go116.go b/vendor/github.com/BurntSushi/toml/decode_go116.go
deleted file mode 100644
index 086d0b68664..00000000000
--- a/vendor/github.com/BurntSushi/toml/decode_go116.go
+++ /dev/null
@@ -1,19 +0,0 @@
-//go:build go1.16
-// +build go1.16
-
-package toml
-
-import (
- "io/fs"
-)
-
-// DecodeFS reads the contents of a file from [fs.FS] and decodes it with
-// [Decode].
-func DecodeFS(fsys fs.FS, path string, v interface{}) (MetaData, error) {
- fp, err := fsys.Open(path)
- if err != nil {
- return MetaData{}, err
- }
- defer fp.Close()
- return NewDecoder(fp).Decode(v)
-}
diff --git a/vendor/github.com/BurntSushi/toml/deprecated.go b/vendor/github.com/BurntSushi/toml/deprecated.go
index b9e309717ea..155709a80b8 100644
--- a/vendor/github.com/BurntSushi/toml/deprecated.go
+++ b/vendor/github.com/BurntSushi/toml/deprecated.go
@@ -15,15 +15,15 @@ type TextMarshaler encoding.TextMarshaler
// Deprecated: use encoding.TextUnmarshaler
type TextUnmarshaler encoding.TextUnmarshaler
+// DecodeReader is an alias for NewDecoder(r).Decode(v).
+//
+// Deprecated: use NewDecoder(reader).Decode(&value).
+func DecodeReader(r io.Reader, v any) (MetaData, error) { return NewDecoder(r).Decode(v) }
+
// PrimitiveDecode is an alias for MetaData.PrimitiveDecode().
//
// Deprecated: use MetaData.PrimitiveDecode.
-func PrimitiveDecode(primValue Primitive, v interface{}) error {
+func PrimitiveDecode(primValue Primitive, v any) error {
md := MetaData{decoded: make(map[string]struct{})}
return md.unify(primValue.undecoded, rvalue(v))
}
-
-// DecodeReader is an alias for NewDecoder(r).Decode(v).
-//
-// Deprecated: use NewDecoder(reader).Decode(&value).
-func DecodeReader(r io.Reader, v interface{}) (MetaData, error) { return NewDecoder(r).Decode(v) }
diff --git a/vendor/github.com/BurntSushi/toml/doc.go b/vendor/github.com/BurntSushi/toml/doc.go
index 81a7c0fe9f6..82c90a90570 100644
--- a/vendor/github.com/BurntSushi/toml/doc.go
+++ b/vendor/github.com/BurntSushi/toml/doc.go
@@ -2,9 +2,6 @@
//
// This package supports TOML v1.0.0, as specified at https://toml.io
//
-// There is also support for delaying decoding with the Primitive type, and
-// querying the set of keys in a TOML document with the MetaData type.
-//
// The github.com/BurntSushi/toml/cmd/tomlv package implements a TOML validator,
// and can be used to verify if TOML document is valid. It can also be used to
// print the type of each key.
diff --git a/vendor/github.com/BurntSushi/toml/encode.go b/vendor/github.com/BurntSushi/toml/encode.go
index 9cd25d75718..73366c0d9a9 100644
--- a/vendor/github.com/BurntSushi/toml/encode.go
+++ b/vendor/github.com/BurntSushi/toml/encode.go
@@ -2,6 +2,7 @@ package toml
import (
"bufio"
+ "bytes"
"encoding"
"encoding/json"
"errors"
@@ -76,6 +77,17 @@ type Marshaler interface {
MarshalTOML() ([]byte, error)
}
+// Marshal returns a TOML representation of the Go value.
+//
+// See [Encoder] for a description of the encoding process.
+func Marshal(v any) ([]byte, error) {
+ buff := new(bytes.Buffer)
+ if err := NewEncoder(buff).Encode(v); err != nil {
+ return nil, err
+ }
+ return buff.Bytes(), nil
+}
+
// Encoder encodes a Go to a TOML document.
//
// The mapping between Go values and TOML values should be precisely the same as
@@ -115,26 +127,21 @@ type Marshaler interface {
// NOTE: only exported keys are encoded due to the use of reflection. Unexported
// keys are silently discarded.
type Encoder struct {
- // String to use for a single indentation level; default is two spaces.
- Indent string
-
+ Indent string // string for a single indentation level; default is two spaces.
+ hasWritten bool // written any output to w yet?
w *bufio.Writer
- hasWritten bool // written any output to w yet?
}
// NewEncoder create a new Encoder.
func NewEncoder(w io.Writer) *Encoder {
- return &Encoder{
- w: bufio.NewWriter(w),
- Indent: " ",
- }
+ return &Encoder{w: bufio.NewWriter(w), Indent: " "}
}
// Encode writes a TOML representation of the Go value to the [Encoder]'s writer.
//
// An error is returned if the value given cannot be encoded to a valid TOML
// document.
-func (enc *Encoder) Encode(v interface{}) error {
+func (enc *Encoder) Encode(v any) error {
rv := eindirect(reflect.ValueOf(v))
err := enc.safeEncode(Key([]string{}), rv)
if err != nil {
@@ -280,18 +287,30 @@ func (enc *Encoder) eElement(rv reflect.Value) {
case reflect.Float32:
f := rv.Float()
if math.IsNaN(f) {
+ if math.Signbit(f) {
+ enc.wf("-")
+ }
enc.wf("nan")
} else if math.IsInf(f, 0) {
- enc.wf("%cinf", map[bool]byte{true: '-', false: '+'}[math.Signbit(f)])
+ if math.Signbit(f) {
+ enc.wf("-")
+ }
+ enc.wf("inf")
} else {
enc.wf(floatAddDecimal(strconv.FormatFloat(f, 'f', -1, 32)))
}
case reflect.Float64:
f := rv.Float()
if math.IsNaN(f) {
+ if math.Signbit(f) {
+ enc.wf("-")
+ }
enc.wf("nan")
} else if math.IsInf(f, 0) {
- enc.wf("%cinf", map[bool]byte{true: '-', false: '+'}[math.Signbit(f)])
+ if math.Signbit(f) {
+ enc.wf("-")
+ }
+ enc.wf("inf")
} else {
enc.wf(floatAddDecimal(strconv.FormatFloat(f, 'f', -1, 64)))
}
@@ -304,7 +323,7 @@ func (enc *Encoder) eElement(rv reflect.Value) {
case reflect.Interface:
enc.eElement(rv.Elem())
default:
- encPanic(fmt.Errorf("unexpected type: %T", rv.Interface()))
+ encPanic(fmt.Errorf("unexpected type: %s", fmtType(rv.Interface())))
}
}
@@ -712,7 +731,7 @@ func (enc *Encoder) writeKeyValue(key Key, val reflect.Value, inline bool) {
}
}
-func (enc *Encoder) wf(format string, v ...interface{}) {
+func (enc *Encoder) wf(format string, v ...any) {
_, err := fmt.Fprintf(enc.w, format, v...)
if err != nil {
encPanic(err)
diff --git a/vendor/github.com/BurntSushi/toml/error.go b/vendor/github.com/BurntSushi/toml/error.go
index efd68865bba..b45a3f45f68 100644
--- a/vendor/github.com/BurntSushi/toml/error.go
+++ b/vendor/github.com/BurntSushi/toml/error.go
@@ -114,13 +114,22 @@ func (pe ParseError) ErrorWithPosition() string {
msg, pe.Position.Line, col, col+pe.Position.Len)
}
if pe.Position.Line > 2 {
- fmt.Fprintf(b, "% 7d | %s\n", pe.Position.Line-2, lines[pe.Position.Line-3])
+ fmt.Fprintf(b, "% 7d | %s\n", pe.Position.Line-2, expandTab(lines[pe.Position.Line-3]))
}
if pe.Position.Line > 1 {
- fmt.Fprintf(b, "% 7d | %s\n", pe.Position.Line-1, lines[pe.Position.Line-2])
+ fmt.Fprintf(b, "% 7d | %s\n", pe.Position.Line-1, expandTab(lines[pe.Position.Line-2]))
}
- fmt.Fprintf(b, "% 7d | %s\n", pe.Position.Line, lines[pe.Position.Line-1])
- fmt.Fprintf(b, "% 10s%s%s\n", "", strings.Repeat(" ", col), strings.Repeat("^", pe.Position.Len))
+
+ /// Expand tabs, so that the ^^^s are at the correct position, but leave
+ /// "column 10-13" intact. Adjusting this to the visual column would be
+ /// better, but we don't know the tabsize of the user in their editor, which
+ /// can be 8, 4, 2, or something else. We can't know. So leaving it as the
+ /// character index is probably the "most correct".
+ expanded := expandTab(lines[pe.Position.Line-1])
+ diff := len(expanded) - len(lines[pe.Position.Line-1])
+
+ fmt.Fprintf(b, "% 7d | %s\n", pe.Position.Line, expanded)
+ fmt.Fprintf(b, "% 10s%s%s\n", "", strings.Repeat(" ", col+diff), strings.Repeat("^", pe.Position.Len))
return b.String()
}
@@ -159,17 +168,47 @@ func (pe ParseError) column(lines []string) int {
return col
}
+func expandTab(s string) string {
+ var (
+ b strings.Builder
+ l int
+ fill = func(n int) string {
+ b := make([]byte, n)
+ for i := range b {
+ b[i] = ' '
+ }
+ return string(b)
+ }
+ )
+ b.Grow(len(s))
+ for _, r := range s {
+ switch r {
+ case '\t':
+ tw := 8 - l%8
+ b.WriteString(fill(tw))
+ l += tw
+ default:
+ b.WriteRune(r)
+ l += 1
+ }
+ }
+ return b.String()
+}
+
type (
errLexControl struct{ r rune }
errLexEscape struct{ r rune }
errLexUTF8 struct{ b byte }
- errLexInvalidNum struct{ v string }
- errLexInvalidDate struct{ v string }
+ errParseDate struct{ v string }
errLexInlineTableNL struct{}
errLexStringNL struct{}
errParseRange struct {
- i interface{} // int or float
- size string // "int64", "uint16", etc.
+ i any // int or float
+ size string // "int64", "uint16", etc.
+ }
+ errUnsafeFloat struct {
+ i interface{} // float32 or float64
+ size string // "float32" or "float64"
}
errParseDuration struct{ d string }
)
@@ -183,18 +222,20 @@ func (e errLexEscape) Error() string { return fmt.Sprintf(`invalid escape
func (e errLexEscape) Usage() string { return usageEscape }
func (e errLexUTF8) Error() string { return fmt.Sprintf("invalid UTF-8 byte: 0x%02x", e.b) }
func (e errLexUTF8) Usage() string { return "" }
-func (e errLexInvalidNum) Error() string { return fmt.Sprintf("invalid number: %q", e.v) }
-func (e errLexInvalidNum) Usage() string { return "" }
-func (e errLexInvalidDate) Error() string { return fmt.Sprintf("invalid date: %q", e.v) }
-func (e errLexInvalidDate) Usage() string { return "" }
+func (e errParseDate) Error() string { return fmt.Sprintf("invalid datetime: %q", e.v) }
+func (e errParseDate) Usage() string { return usageDate }
func (e errLexInlineTableNL) Error() string { return "newlines not allowed within inline tables" }
func (e errLexInlineTableNL) Usage() string { return usageInlineNewline }
func (e errLexStringNL) Error() string { return "strings cannot contain newlines" }
func (e errLexStringNL) Usage() string { return usageStringNewline }
func (e errParseRange) Error() string { return fmt.Sprintf("%v is out of range for %s", e.i, e.size) }
func (e errParseRange) Usage() string { return usageIntOverflow }
-func (e errParseDuration) Error() string { return fmt.Sprintf("invalid duration: %q", e.d) }
-func (e errParseDuration) Usage() string { return usageDuration }
+func (e errUnsafeFloat) Error() string {
+ return fmt.Sprintf("%v is out of the safe %s range", e.i, e.size)
+}
+func (e errUnsafeFloat) Usage() string { return usageUnsafeFloat }
+func (e errParseDuration) Error() string { return fmt.Sprintf("invalid duration: %q", e.d) }
+func (e errParseDuration) Usage() string { return usageDuration }
const usageEscape = `
A '\' inside a "-delimited string is interpreted as an escape character.
@@ -251,19 +292,35 @@ bug in the program that uses too small of an integer.
The maximum and minimum values are:
size │ lowest │ highest
- ───────┼────────────────┼──────────
+ ───────┼────────────────┼──────────────
int8 │ -128 │ 127
int16 │ -32,768 │ 32,767
int32 │ -2,147,483,648 │ 2,147,483,647
int64 │ -9.2 × 10¹⁷ │ 9.2 × 10¹⁷
uint8 │ 0 │ 255
- uint16 │ 0 │ 65535
- uint32 │ 0 │ 4294967295
+ uint16 │ 0 │ 65,535
+ uint32 │ 0 │ 4,294,967,295
uint64 │ 0 │ 1.8 × 10¹⁸
int refers to int32 on 32-bit systems and int64 on 64-bit systems.
`
+const usageUnsafeFloat = `
+This number is outside of the "safe" range for floating point numbers; whole
+(non-fractional) numbers outside the below range can not always be represented
+accurately in a float, leading to some loss of accuracy.
+
+Explicitly mark a number as a fractional unit by adding ".0", which will incur
+some loss of accuracy; for example:
+
+ f = 2_000_000_000.0
+
+Accuracy ranges:
+
+ float32 = 16,777,215
+ float64 = 9,007,199,254,740,991
+`
+
const usageDuration = `
A duration must be as "number", without any spaces. Valid units are:
@@ -277,3 +334,23 @@ A duration must be as "number", without any spaces. Valid units are:
You can combine multiple units; for example "5m10s" for 5 minutes and 10
seconds.
`
+
+const usageDate = `
+A TOML datetime must be in one of the following formats:
+
+ 2006-01-02T15:04:05Z07:00 Date and time, with timezone.
+ 2006-01-02T15:04:05 Date and time, but without timezone.
+ 2006-01-02 Date without a time or timezone.
+ 15:04:05 Just a time, without any timezone.
+
+Seconds may optionally have a fraction, up to nanosecond precision:
+
+ 15:04:05.123
+ 15:04:05.856018510
+`
+
+// TOML 1.1:
+// The seconds part in times is optional, and may be omitted:
+// 2006-01-02T15:04Z07:00
+// 2006-01-02T15:04
+// 15:04
diff --git a/vendor/github.com/BurntSushi/toml/lex.go b/vendor/github.com/BurntSushi/toml/lex.go
index 3545a6ad66d..a1016d98a8e 100644
--- a/vendor/github.com/BurntSushi/toml/lex.go
+++ b/vendor/github.com/BurntSushi/toml/lex.go
@@ -17,6 +17,7 @@ const (
itemEOF
itemText
itemString
+ itemStringEsc
itemRawString
itemMultilineString
itemRawMultilineString
@@ -53,6 +54,7 @@ type lexer struct {
state stateFn
items chan item
tomlNext bool
+ esc bool
// Allow for backing up up to 4 runes. This is necessary because TOML
// contains 3-rune tokens (""" and ''').
@@ -164,7 +166,7 @@ func (lx *lexer) next() (r rune) {
}
r, w := utf8.DecodeRuneInString(lx.input[lx.pos:])
- if r == utf8.RuneError {
+ if r == utf8.RuneError && w == 1 {
lx.error(errLexUTF8{lx.input[lx.pos]})
return utf8.RuneError
}
@@ -270,7 +272,7 @@ func (lx *lexer) errorPos(start, length int, err error) stateFn {
}
// errorf is like error, and creates a new error.
-func (lx *lexer) errorf(format string, values ...interface{}) stateFn {
+func (lx *lexer) errorf(format string, values ...any) stateFn {
if lx.atEOF {
pos := lx.getPos()
pos.Line--
@@ -333,9 +335,7 @@ func lexTopEnd(lx *lexer) stateFn {
lx.emit(itemEOF)
return nil
}
- return lx.errorf(
- "expected a top-level item to end with a newline, comment, or EOF, but got %q instead",
- r)
+ return lx.errorf("expected a top-level item to end with a newline, comment, or EOF, but got %q instead", r)
}
// lexTable lexes the beginning of a table. Namely, it makes sure that
@@ -698,7 +698,12 @@ func lexString(lx *lexer) stateFn {
return lexStringEscape
case r == '"':
lx.backup()
- lx.emit(itemString)
+ if lx.esc {
+ lx.esc = false
+ lx.emit(itemStringEsc)
+ } else {
+ lx.emit(itemString)
+ }
lx.next()
lx.ignore()
return lx.pop()
@@ -748,6 +753,7 @@ func lexMultilineString(lx *lexer) stateFn {
lx.backup() /// backup: don't include the """ in the item.
lx.backup()
lx.backup()
+ lx.esc = false
lx.emit(itemMultilineString)
lx.next() /// Read over ''' again and discard it.
lx.next()
@@ -837,6 +843,7 @@ func lexMultilineStringEscape(lx *lexer) stateFn {
}
func lexStringEscape(lx *lexer) stateFn {
+ lx.esc = true
r := lx.next()
switch r {
case 'e':
@@ -879,10 +886,8 @@ func lexHexEscape(lx *lexer) stateFn {
var r rune
for i := 0; i < 2; i++ {
r = lx.next()
- if !isHexadecimal(r) {
- return lx.errorf(
- `expected two hexadecimal digits after '\x', but got %q instead`,
- lx.current())
+ if !isHex(r) {
+ return lx.errorf(`expected two hexadecimal digits after '\x', but got %q instead`, lx.current())
}
}
return lx.pop()
@@ -892,10 +897,8 @@ func lexShortUnicodeEscape(lx *lexer) stateFn {
var r rune
for i := 0; i < 4; i++ {
r = lx.next()
- if !isHexadecimal(r) {
- return lx.errorf(
- `expected four hexadecimal digits after '\u', but got %q instead`,
- lx.current())
+ if !isHex(r) {
+ return lx.errorf(`expected four hexadecimal digits after '\u', but got %q instead`, lx.current())
}
}
return lx.pop()
@@ -905,10 +908,8 @@ func lexLongUnicodeEscape(lx *lexer) stateFn {
var r rune
for i := 0; i < 8; i++ {
r = lx.next()
- if !isHexadecimal(r) {
- return lx.errorf(
- `expected eight hexadecimal digits after '\U', but got %q instead`,
- lx.current())
+ if !isHex(r) {
+ return lx.errorf(`expected eight hexadecimal digits after '\U', but got %q instead`, lx.current())
}
}
return lx.pop()
@@ -975,7 +976,7 @@ func lexDatetime(lx *lexer) stateFn {
// lexHexInteger consumes a hexadecimal integer after seeing the '0x' prefix.
func lexHexInteger(lx *lexer) stateFn {
r := lx.next()
- if isHexadecimal(r) {
+ if isHex(r) {
return lexHexInteger
}
switch r {
@@ -1109,7 +1110,7 @@ func lexBaseNumberOrDate(lx *lexer) stateFn {
return lexOctalInteger
case 'x':
r = lx.peek()
- if !isHexadecimal(r) {
+ if !isHex(r) {
lx.errorf("not a hexidecimal number: '%s%c'", lx.current(), r)
}
return lexHexInteger
@@ -1207,7 +1208,7 @@ func (itype itemType) String() string {
return "EOF"
case itemText:
return "Text"
- case itemString, itemRawString, itemMultilineString, itemRawMultilineString:
+ case itemString, itemStringEsc, itemRawString, itemMultilineString, itemRawMultilineString:
return "String"
case itemBool:
return "Bool"
@@ -1240,7 +1241,7 @@ func (itype itemType) String() string {
}
func (item item) String() string {
- return fmt.Sprintf("(%s, %s)", item.typ.String(), item.val)
+ return fmt.Sprintf("(%s, %s)", item.typ, item.val)
}
func isWhitespace(r rune) bool { return r == '\t' || r == ' ' }
@@ -1256,10 +1257,7 @@ func isControl(r rune) bool { // Control characters except \t, \r, \n
func isDigit(r rune) bool { return r >= '0' && r <= '9' }
func isBinary(r rune) bool { return r == '0' || r == '1' }
func isOctal(r rune) bool { return r >= '0' && r <= '7' }
-func isHexadecimal(r rune) bool {
- return (r >= '0' && r <= '9') || (r >= 'a' && r <= 'f') || (r >= 'A' && r <= 'F')
-}
-
+func isHex(r rune) bool { return (r >= '0' && r <= '9') || (r|0x20 >= 'a' && r|0x20 <= 'f') }
func isBareKeyChar(r rune, tomlNext bool) bool {
if tomlNext {
return (r >= 'A' && r <= 'Z') ||
diff --git a/vendor/github.com/BurntSushi/toml/meta.go b/vendor/github.com/BurntSushi/toml/meta.go
index 2e78b24e952..e6145373004 100644
--- a/vendor/github.com/BurntSushi/toml/meta.go
+++ b/vendor/github.com/BurntSushi/toml/meta.go
@@ -13,7 +13,7 @@ type MetaData struct {
context Key // Used only during decoding.
keyInfo map[string]keyInfo
- mapping map[string]interface{}
+ mapping map[string]any
keys []Key
decoded map[string]struct{}
data []byte // Input file; for errors.
@@ -31,12 +31,12 @@ func (md *MetaData) IsDefined(key ...string) bool {
}
var (
- hash map[string]interface{}
+ hash map[string]any
ok bool
- hashOrVal interface{} = md.mapping
+ hashOrVal any = md.mapping
)
for _, k := range key {
- if hash, ok = hashOrVal.(map[string]interface{}); !ok {
+ if hash, ok = hashOrVal.(map[string]any); !ok {
return false
}
if hashOrVal, ok = hash[k]; !ok {
@@ -94,28 +94,55 @@ func (md *MetaData) Undecoded() []Key {
type Key []string
func (k Key) String() string {
- ss := make([]string, len(k))
- for i := range k {
- ss[i] = k.maybeQuoted(i)
+ // This is called quite often, so it's a bit funky to make it faster.
+ var b strings.Builder
+ b.Grow(len(k) * 25)
+outer:
+ for i, kk := range k {
+ if i > 0 {
+ b.WriteByte('.')
+ }
+ if kk == "" {
+ b.WriteString(`""`)
+ } else {
+ for _, r := range kk {
+ // "Inline" isBareKeyChar
+ if !((r >= 'A' && r <= 'Z') || (r >= 'a' && r <= 'z') || (r >= '0' && r <= '9') || r == '_' || r == '-') {
+ b.WriteByte('"')
+ b.WriteString(dblQuotedReplacer.Replace(kk))
+ b.WriteByte('"')
+ continue outer
+ }
+ }
+ b.WriteString(kk)
+ }
}
- return strings.Join(ss, ".")
+ return b.String()
}
func (k Key) maybeQuoted(i int) string {
if k[i] == "" {
return `""`
}
- for _, c := range k[i] {
- if !isBareKeyChar(c, false) {
- return `"` + dblQuotedReplacer.Replace(k[i]) + `"`
+ for _, r := range k[i] {
+ if (r >= 'A' && r <= 'Z') || (r >= 'a' && r <= 'z') || (r >= '0' && r <= '9') || r == '_' || r == '-' {
+ continue
}
+ return `"` + dblQuotedReplacer.Replace(k[i]) + `"`
}
return k[i]
}
+// Like append(), but only increase the cap by 1.
func (k Key) add(piece string) Key {
+ if cap(k) > len(k) {
+ return append(k, piece)
+ }
newKey := make(Key, len(k)+1)
copy(newKey, k)
newKey[len(k)] = piece
return newKey
}
+
+func (k Key) parent() Key { return k[:len(k)-1] } // all except the last piece.
+func (k Key) last() string { return k[len(k)-1] } // last piece of this key.
diff --git a/vendor/github.com/BurntSushi/toml/parse.go b/vendor/github.com/BurntSushi/toml/parse.go
index 9c191536986..11ac3108be3 100644
--- a/vendor/github.com/BurntSushi/toml/parse.go
+++ b/vendor/github.com/BurntSushi/toml/parse.go
@@ -2,6 +2,7 @@ package toml
import (
"fmt"
+ "math"
"os"
"strconv"
"strings"
@@ -20,9 +21,9 @@ type parser struct {
ordered []Key // List of keys in the order that they appear in the TOML data.
- keyInfo map[string]keyInfo // Map keyname → info about the TOML key.
- mapping map[string]interface{} // Map keyname → key value.
- implicits map[string]struct{} // Record implicit keys (e.g. "key.group.names").
+ keyInfo map[string]keyInfo // Map keyname → info about the TOML key.
+ mapping map[string]any // Map keyname → key value.
+ implicits map[string]struct{} // Record implicit keys (e.g. "key.group.names").
}
type keyInfo struct {
@@ -49,6 +50,7 @@ func parse(data string) (p *parser, err error) {
// it anyway.
if strings.HasPrefix(data, "\xff\xfe") || strings.HasPrefix(data, "\xfe\xff") { // UTF-16
data = data[2:]
+ //lint:ignore S1017 https://github.com/dominikh/go-tools/issues/1447
} else if strings.HasPrefix(data, "\xef\xbb\xbf") { // UTF-8
data = data[3:]
}
@@ -71,7 +73,7 @@ func parse(data string) (p *parser, err error) {
p = &parser{
keyInfo: make(map[string]keyInfo),
- mapping: make(map[string]interface{}),
+ mapping: make(map[string]any),
lx: lex(data, tomlNext),
ordered: make([]Key, 0),
implicits: make(map[string]struct{}),
@@ -97,7 +99,7 @@ func (p *parser) panicErr(it item, err error) {
})
}
-func (p *parser) panicItemf(it item, format string, v ...interface{}) {
+func (p *parser) panicItemf(it item, format string, v ...any) {
panic(ParseError{
Message: fmt.Sprintf(format, v...),
Position: it.pos,
@@ -106,7 +108,7 @@ func (p *parser) panicItemf(it item, format string, v ...interface{}) {
})
}
-func (p *parser) panicf(format string, v ...interface{}) {
+func (p *parser) panicf(format string, v ...any) {
panic(ParseError{
Message: fmt.Sprintf(format, v...),
Position: p.pos,
@@ -139,7 +141,7 @@ func (p *parser) nextPos() item {
return it
}
-func (p *parser) bug(format string, v ...interface{}) {
+func (p *parser) bug(format string, v ...any) {
panic(fmt.Sprintf("BUG: "+format+"\n\n", v...))
}
@@ -194,11 +196,11 @@ func (p *parser) topLevel(item item) {
p.assertEqual(itemKeyEnd, k.typ)
/// The current key is the last part.
- p.currentKey = key[len(key)-1]
+ p.currentKey = key.last()
/// All the other parts (if any) are the context; need to set each part
/// as implicit.
- context := key[:len(key)-1]
+ context := key.parent()
for i := range context {
p.addImplicitContext(append(p.context, context[i:i+1]...))
}
@@ -207,7 +209,8 @@ func (p *parser) topLevel(item item) {
/// Set value.
vItem := p.next()
val, typ := p.value(vItem, false)
- p.set(p.currentKey, val, typ, vItem.pos)
+ p.setValue(p.currentKey, val)
+ p.setType(p.currentKey, typ, vItem.pos)
/// Remove the context we added (preserving any context from [tbl] lines).
p.context = outerContext
@@ -222,7 +225,7 @@ func (p *parser) keyString(it item) string {
switch it.typ {
case itemText:
return it.val
- case itemString, itemMultilineString,
+ case itemString, itemStringEsc, itemMultilineString,
itemRawString, itemRawMultilineString:
s, _ := p.value(it, false)
return s.(string)
@@ -239,9 +242,11 @@ var datetimeRepl = strings.NewReplacer(
// value translates an expected value from the lexer into a Go value wrapped
// as an empty interface.
-func (p *parser) value(it item, parentIsArray bool) (interface{}, tomlType) {
+func (p *parser) value(it item, parentIsArray bool) (any, tomlType) {
switch it.typ {
case itemString:
+ return it.val, p.typeOfPrimitive(it)
+ case itemStringEsc:
return p.replaceEscapes(it, it.val), p.typeOfPrimitive(it)
case itemMultilineString:
return p.replaceEscapes(it, p.stripEscapedNewlines(stripFirstNewline(it.val))), p.typeOfPrimitive(it)
@@ -274,7 +279,7 @@ func (p *parser) value(it item, parentIsArray bool) (interface{}, tomlType) {
panic("unreachable")
}
-func (p *parser) valueInteger(it item) (interface{}, tomlType) {
+func (p *parser) valueInteger(it item) (any, tomlType) {
if !numUnderscoresOK(it.val) {
p.panicItemf(it, "Invalid integer %q: underscores must be surrounded by digits", it.val)
}
@@ -298,7 +303,7 @@ func (p *parser) valueInteger(it item) (interface{}, tomlType) {
return num, p.typeOfPrimitive(it)
}
-func (p *parser) valueFloat(it item) (interface{}, tomlType) {
+func (p *parser) valueFloat(it item) (any, tomlType) {
parts := strings.FieldsFunc(it.val, func(r rune) bool {
switch r {
case '.', 'e', 'E':
@@ -322,7 +327,9 @@ func (p *parser) valueFloat(it item) (interface{}, tomlType) {
p.panicItemf(it, "Invalid float %q: '.' must be followed by one or more digits", it.val)
}
val := strings.Replace(it.val, "_", "", -1)
- if val == "+nan" || val == "-nan" { // Go doesn't support this, but TOML spec does.
+ signbit := false
+ if val == "+nan" || val == "-nan" {
+ signbit = val == "-nan"
val = "nan"
}
num, err := strconv.ParseFloat(val, 64)
@@ -333,6 +340,9 @@ func (p *parser) valueFloat(it item) (interface{}, tomlType) {
p.panicItemf(it, "Invalid float value: %q", it.val)
}
}
+ if signbit {
+ num = math.Copysign(num, -1)
+ }
return num, p.typeOfPrimitive(it)
}
@@ -352,7 +362,7 @@ var dtTypes = []struct {
{"15:04", internal.LocalTime, true},
}
-func (p *parser) valueDatetime(it item) (interface{}, tomlType) {
+func (p *parser) valueDatetime(it item) (any, tomlType) {
it.val = datetimeRepl.Replace(it.val)
var (
t time.Time
@@ -365,26 +375,44 @@ func (p *parser) valueDatetime(it item) (interface{}, tomlType) {
}
t, err = time.ParseInLocation(dt.fmt, it.val, dt.zone)
if err == nil {
+ if missingLeadingZero(it.val, dt.fmt) {
+ p.panicErr(it, errParseDate{it.val})
+ }
ok = true
break
}
}
if !ok {
- p.panicItemf(it, "Invalid TOML Datetime: %q.", it.val)
+ p.panicErr(it, errParseDate{it.val})
}
return t, p.typeOfPrimitive(it)
}
-func (p *parser) valueArray(it item) (interface{}, tomlType) {
+// Go's time.Parse() will accept numbers without a leading zero; there isn't any
+// way to require it. https://github.com/golang/go/issues/29911
+//
+// Depend on the fact that the separators (- and :) should always be at the same
+// location.
+func missingLeadingZero(d, l string) bool {
+ for i, c := range []byte(l) {
+ if c == '.' || c == 'Z' {
+ return false
+ }
+ if (c < '0' || c > '9') && d[i] != c {
+ return true
+ }
+ }
+ return false
+}
+
+func (p *parser) valueArray(it item) (any, tomlType) {
p.setType(p.currentKey, tomlArray, it.pos)
var (
- types []tomlType
-
- // Initialize to a non-nil empty slice. This makes it consistent with
- // how S = [] decodes into a non-nil slice inside something like struct
- // { S []string }. See #338
- array = []interface{}{}
+ // Initialize to a non-nil slice to make it consistent with how S = []
+ // decodes into a non-nil slice inside something like struct { S
+ // []string }. See #338
+ array = make([]any, 0, 2)
)
for it = p.next(); it.typ != itemArrayEnd; it = p.next() {
if it.typ == itemCommentStart {
@@ -394,21 +422,20 @@ func (p *parser) valueArray(it item) (interface{}, tomlType) {
val, typ := p.value(it, true)
array = append(array, val)
- types = append(types, typ)
- // XXX: types isn't used here, we need it to record the accurate type
+ // XXX: type isn't used here, we need it to record the accurate type
// information.
//
// Not entirely sure how to best store this; could use "key[0]",
// "key[1]" notation, or maybe store it on the Array type?
- _ = types
+ _ = typ
}
return array, tomlArray
}
-func (p *parser) valueInlineTable(it item, parentIsArray bool) (interface{}, tomlType) {
+func (p *parser) valueInlineTable(it item, parentIsArray bool) (any, tomlType) {
var (
- hash = make(map[string]interface{})
+ topHash = make(map[string]any)
outerContext = p.context
outerKey = p.currentKey
)
@@ -436,11 +463,11 @@ func (p *parser) valueInlineTable(it item, parentIsArray bool) (interface{}, tom
p.assertEqual(itemKeyEnd, k.typ)
/// The current key is the last part.
- p.currentKey = key[len(key)-1]
+ p.currentKey = key.last()
/// All the other parts (if any) are the context; need to set each part
/// as implicit.
- context := key[:len(key)-1]
+ context := key.parent()
for i := range context {
p.addImplicitContext(append(p.context, context[i:i+1]...))
}
@@ -448,7 +475,21 @@ func (p *parser) valueInlineTable(it item, parentIsArray bool) (interface{}, tom
/// Set the value.
val, typ := p.value(p.next(), false)
- p.set(p.currentKey, val, typ, it.pos)
+ p.setValue(p.currentKey, val)
+ p.setType(p.currentKey, typ, it.pos)
+
+ hash := topHash
+ for _, c := range context {
+ h, ok := hash[c]
+ if !ok {
+ h = make(map[string]any)
+ hash[c] = h
+ }
+ hash, ok = h.(map[string]any)
+ if !ok {
+ p.panicf("%q is not a table", p.context)
+ }
+ }
hash[p.currentKey] = val
/// Restore context.
@@ -456,7 +497,7 @@ func (p *parser) valueInlineTable(it item, parentIsArray bool) (interface{}, tom
}
p.context = outerContext
p.currentKey = outerKey
- return hash, tomlHash
+ return topHash, tomlHash
}
// numHasLeadingZero checks if this number has leading zeroes, allowing for '0',
@@ -486,9 +527,9 @@ func numUnderscoresOK(s string) bool {
}
}
- // isHexadecimal is a superset of all the permissable characters
- // surrounding an underscore.
- accept = isHexadecimal(r)
+ // isHexis a superset of all the permissable characters surrounding an
+ // underscore.
+ accept = isHex(r)
}
return accept
}
@@ -511,21 +552,19 @@ func numPeriodsOK(s string) bool {
// Establishing the context also makes sure that the key isn't a duplicate, and
// will create implicit hashes automatically.
func (p *parser) addContext(key Key, array bool) {
- var ok bool
-
- // Always start at the top level and drill down for our context.
+ /// Always start at the top level and drill down for our context.
hashContext := p.mapping
- keyContext := make(Key, 0)
+ keyContext := make(Key, 0, len(key)-1)
- // We only need implicit hashes for key[0:-1]
- for _, k := range key[0 : len(key)-1] {
- _, ok = hashContext[k]
+ /// We only need implicit hashes for the parents.
+ for _, k := range key.parent() {
+ _, ok := hashContext[k]
keyContext = append(keyContext, k)
// No key? Make an implicit hash and move on.
if !ok {
p.addImplicit(keyContext)
- hashContext[k] = make(map[string]interface{})
+ hashContext[k] = make(map[string]any)
}
// If the hash context is actually an array of tables, then set
@@ -534,9 +573,9 @@ func (p *parser) addContext(key Key, array bool) {
// Otherwise, it better be a table, since this MUST be a key group (by
// virtue of it not being the last element in a key).
switch t := hashContext[k].(type) {
- case []map[string]interface{}:
+ case []map[string]any:
hashContext = t[len(t)-1]
- case map[string]interface{}:
+ case map[string]any:
hashContext = t
default:
p.panicf("Key '%s' was already created as a hash.", keyContext)
@@ -547,39 +586,33 @@ func (p *parser) addContext(key Key, array bool) {
if array {
// If this is the first element for this array, then allocate a new
// list of tables for it.
- k := key[len(key)-1]
+ k := key.last()
if _, ok := hashContext[k]; !ok {
- hashContext[k] = make([]map[string]interface{}, 0, 4)
+ hashContext[k] = make([]map[string]any, 0, 4)
}
// Add a new table. But make sure the key hasn't already been used
// for something else.
- if hash, ok := hashContext[k].([]map[string]interface{}); ok {
- hashContext[k] = append(hash, make(map[string]interface{}))
+ if hash, ok := hashContext[k].([]map[string]any); ok {
+ hashContext[k] = append(hash, make(map[string]any))
} else {
p.panicf("Key '%s' was already created and cannot be used as an array.", key)
}
} else {
- p.setValue(key[len(key)-1], make(map[string]interface{}))
+ p.setValue(key.last(), make(map[string]any))
}
- p.context = append(p.context, key[len(key)-1])
-}
-
-// set calls setValue and setType.
-func (p *parser) set(key string, val interface{}, typ tomlType, pos Position) {
- p.setValue(key, val)
- p.setType(key, typ, pos)
+ p.context = append(p.context, key.last())
}
// setValue sets the given key to the given value in the current context.
// It will make sure that the key hasn't already been defined, account for
// implicit key groups.
-func (p *parser) setValue(key string, value interface{}) {
+func (p *parser) setValue(key string, value any) {
var (
- tmpHash interface{}
+ tmpHash any
ok bool
hash = p.mapping
- keyContext Key
+ keyContext = make(Key, 0, len(p.context)+1)
)
for _, k := range p.context {
keyContext = append(keyContext, k)
@@ -587,11 +620,11 @@ func (p *parser) setValue(key string, value interface{}) {
p.bug("Context for key '%s' has not been established.", keyContext)
}
switch t := tmpHash.(type) {
- case []map[string]interface{}:
+ case []map[string]any:
// The context is a table of hashes. Pick the most recent table
// defined as the current hash.
hash = t[len(t)-1]
- case map[string]interface{}:
+ case map[string]any:
hash = t
default:
p.panicf("Key '%s' has already been defined.", keyContext)
@@ -618,9 +651,8 @@ func (p *parser) setValue(key string, value interface{}) {
p.removeImplicit(keyContext)
return
}
-
- // Otherwise, we have a concrete key trying to override a previous
- // key, which is *always* wrong.
+ // Otherwise, we have a concrete key trying to override a previous key,
+ // which is *always* wrong.
p.panicf("Key '%s' has already been defined.", keyContext)
}
@@ -683,8 +715,11 @@ func stripFirstNewline(s string) string {
// the next newline. After a line-ending backslash, all whitespace is removed
// until the next non-whitespace character.
func (p *parser) stripEscapedNewlines(s string) string {
- var b strings.Builder
- var i int
+ var (
+ b strings.Builder
+ i int
+ )
+ b.Grow(len(s))
for {
ix := strings.Index(s[i:], `\`)
if ix < 0 {
@@ -714,9 +749,8 @@ func (p *parser) stripEscapedNewlines(s string) string {
continue
}
if !strings.Contains(s[i:j], "\n") {
- // This is not a line-ending backslash.
- // (It's a bad escape sequence, but we can let
- // replaceEscapes catch it.)
+ // This is not a line-ending backslash. (It's a bad escape sequence,
+ // but we can let replaceEscapes catch it.)
i++
continue
}
@@ -727,79 +761,78 @@ func (p *parser) stripEscapedNewlines(s string) string {
}
func (p *parser) replaceEscapes(it item, str string) string {
- replaced := make([]rune, 0, len(str))
- s := []byte(str)
- r := 0
- for r < len(s) {
- if s[r] != '\\' {
- c, size := utf8.DecodeRune(s[r:])
- r += size
- replaced = append(replaced, c)
+ var (
+ b strings.Builder
+ skip = 0
+ )
+ b.Grow(len(str))
+ for i, c := range str {
+ if skip > 0 {
+ skip--
continue
}
- r += 1
- if r >= len(s) {
+ if c != '\\' {
+ b.WriteRune(c)
+ continue
+ }
+
+ if i >= len(str) {
p.bug("Escape sequence at end of string.")
return ""
}
- switch s[r] {
+ switch str[i+1] {
default:
- p.bug("Expected valid escape code after \\, but got %q.", s[r])
+ p.bug("Expected valid escape code after \\, but got %q.", str[i+1])
case ' ', '\t':
- p.panicItemf(it, "invalid escape: '\\%c'", s[r])
+ p.panicItemf(it, "invalid escape: '\\%c'", str[i+1])
case 'b':
- replaced = append(replaced, rune(0x0008))
- r += 1
+ b.WriteByte(0x08)
+ skip = 1
case 't':
- replaced = append(replaced, rune(0x0009))
- r += 1
+ b.WriteByte(0x09)
+ skip = 1
case 'n':
- replaced = append(replaced, rune(0x000A))
- r += 1
+ b.WriteByte(0x0a)
+ skip = 1
case 'f':
- replaced = append(replaced, rune(0x000C))
- r += 1
+ b.WriteByte(0x0c)
+ skip = 1
case 'r':
- replaced = append(replaced, rune(0x000D))
- r += 1
+ b.WriteByte(0x0d)
+ skip = 1
case 'e':
if p.tomlNext {
- replaced = append(replaced, rune(0x001B))
- r += 1
+ b.WriteByte(0x1b)
+ skip = 1
}
case '"':
- replaced = append(replaced, rune(0x0022))
- r += 1
+ b.WriteByte(0x22)
+ skip = 1
case '\\':
- replaced = append(replaced, rune(0x005C))
- r += 1
+ b.WriteByte(0x5c)
+ skip = 1
+ // The lexer guarantees the correct number of characters are present;
+ // don't need to check here.
case 'x':
if p.tomlNext {
- escaped := p.asciiEscapeToUnicode(it, s[r+1:r+3])
- replaced = append(replaced, escaped)
- r += 3
+ escaped := p.asciiEscapeToUnicode(it, str[i+2:i+4])
+ b.WriteRune(escaped)
+ skip = 3
}
case 'u':
- // At this point, we know we have a Unicode escape of the form
- // `uXXXX` at [r, r+5). (Because the lexer guarantees this
- // for us.)
- escaped := p.asciiEscapeToUnicode(it, s[r+1:r+5])
- replaced = append(replaced, escaped)
- r += 5
+ escaped := p.asciiEscapeToUnicode(it, str[i+2:i+6])
+ b.WriteRune(escaped)
+ skip = 5
case 'U':
- // At this point, we know we have a Unicode escape of the form
- // `uXXXX` at [r, r+9). (Because the lexer guarantees this
- // for us.)
- escaped := p.asciiEscapeToUnicode(it, s[r+1:r+9])
- replaced = append(replaced, escaped)
- r += 9
+ escaped := p.asciiEscapeToUnicode(it, str[i+2:i+10])
+ b.WriteRune(escaped)
+ skip = 9
}
}
- return string(replaced)
+ return b.String()
}
-func (p *parser) asciiEscapeToUnicode(it item, bs []byte) rune {
- s := string(bs)
+func (p *parser) asciiEscapeToUnicode(it item, s string) rune {
hex, err := strconv.ParseUint(strings.ToLower(s), 16, 32)
if err != nil {
p.bug("Could not parse '%s' as a hexadecimal number, but the lexer claims it's OK: %s", s, err)
diff --git a/vendor/github.com/BurntSushi/toml/type_fields.go b/vendor/github.com/BurntSushi/toml/type_fields.go
index 254ca82e549..10c51f7eeb4 100644
--- a/vendor/github.com/BurntSushi/toml/type_fields.go
+++ b/vendor/github.com/BurntSushi/toml/type_fields.go
@@ -25,10 +25,8 @@ type field struct {
// breaking ties with index sequence.
type byName []field
-func (x byName) Len() int { return len(x) }
-
+func (x byName) Len() int { return len(x) }
func (x byName) Swap(i, j int) { x[i], x[j] = x[j], x[i] }
-
func (x byName) Less(i, j int) bool {
if x[i].name != x[j].name {
return x[i].name < x[j].name
@@ -45,10 +43,8 @@ func (x byName) Less(i, j int) bool {
// byIndex sorts field by index sequence.
type byIndex []field
-func (x byIndex) Len() int { return len(x) }
-
+func (x byIndex) Len() int { return len(x) }
func (x byIndex) Swap(i, j int) { x[i], x[j] = x[j], x[i] }
-
func (x byIndex) Less(i, j int) bool {
for k, xik := range x[i].index {
if k >= len(x[j].index) {
diff --git a/vendor/github.com/BurntSushi/toml/type_toml.go b/vendor/github.com/BurntSushi/toml/type_toml.go
index 4e90d77373b..1c090d331e3 100644
--- a/vendor/github.com/BurntSushi/toml/type_toml.go
+++ b/vendor/github.com/BurntSushi/toml/type_toml.go
@@ -22,13 +22,8 @@ func typeIsTable(t tomlType) bool {
type tomlBaseType string
-func (btype tomlBaseType) typeString() string {
- return string(btype)
-}
-
-func (btype tomlBaseType) String() string {
- return btype.typeString()
-}
+func (btype tomlBaseType) typeString() string { return string(btype) }
+func (btype tomlBaseType) String() string { return btype.typeString() }
var (
tomlInteger tomlBaseType = "Integer"
@@ -54,7 +49,7 @@ func (p *parser) typeOfPrimitive(lexItem item) tomlType {
return tomlFloat
case itemDatetime:
return tomlDatetime
- case itemString:
+ case itemString, itemStringEsc:
return tomlString
case itemMultilineString:
return tomlString
diff --git a/vendor/github.com/Masterminds/semver/v3/CHANGELOG.md b/vendor/github.com/Masterminds/semver/v3/CHANGELOG.md
index f12626423a3..f95a504fe70 100644
--- a/vendor/github.com/Masterminds/semver/v3/CHANGELOG.md
+++ b/vendor/github.com/Masterminds/semver/v3/CHANGELOG.md
@@ -1,5 +1,33 @@
# Changelog
+## 3.3.0 (2024-08-27)
+
+### Added
+
+- #238: Add LessThanEqual and GreaterThanEqual functions (thanks @grosser)
+- #213: nil version equality checking (thanks @KnutZuidema)
+
+### Changed
+
+- #241: Simplify StrictNewVersion parsing (thanks @grosser)
+- Testing support up through Go 1.23
+- Minimum version set to 1.21 as this is what's tested now
+- Fuzz testing now supports caching
+
+## 3.2.1 (2023-04-10)
+
+### Changed
+
+- #198: Improved testing around pre-release names
+- #200: Improved code scanning with addition of CodeQL
+- #201: Testing now includes Go 1.20. Go 1.17 has been dropped
+- #202: Migrated Fuzz testing to Go built-in Fuzzing. CI runs daily
+- #203: Docs updated for security details
+
+### Fixed
+
+- #199: Fixed issue with range transformations
+
## 3.2.0 (2022-11-28)
### Added
diff --git a/vendor/github.com/Masterminds/semver/v3/Makefile b/vendor/github.com/Masterminds/semver/v3/Makefile
index 0e7b5c7138e..9ca87a2c79e 100644
--- a/vendor/github.com/Masterminds/semver/v3/Makefile
+++ b/vendor/github.com/Masterminds/semver/v3/Makefile
@@ -19,6 +19,7 @@ test-cover:
.PHONY: fuzz
fuzz:
@echo "==> Running Fuzz Tests"
+ go env GOCACHE
go test -fuzz=FuzzNewVersion -fuzztime=15s .
go test -fuzz=FuzzStrictNewVersion -fuzztime=15s .
go test -fuzz=FuzzNewConstraint -fuzztime=15s .
@@ -27,4 +28,4 @@ $(GOLANGCI_LINT):
# Install golangci-lint. The configuration for it is in the .golangci.yml
# file in the root of the repository
echo ${GOPATH}
- curl -sfL https://install.goreleaser.com/github.com/golangci/golangci-lint.sh | sh -s -- -b $(GOPATH)/bin v1.17.1
+ curl -sfL https://install.goreleaser.com/github.com/golangci/golangci-lint.sh | sh -s -- -b $(GOPATH)/bin v1.56.2
diff --git a/vendor/github.com/Masterminds/semver/v3/README.md b/vendor/github.com/Masterminds/semver/v3/README.md
index eab8cac3b7f..ed56936084b 100644
--- a/vendor/github.com/Masterminds/semver/v3/README.md
+++ b/vendor/github.com/Masterminds/semver/v3/README.md
@@ -13,12 +13,9 @@ Active](https://masterminds.github.io/stability/active.svg)](https://masterminds
[](https://pkg.go.dev/github.com/Masterminds/semver/v3)
[](https://goreportcard.com/report/github.com/Masterminds/semver)
-If you are looking for a command line tool for version comparisons please see
-[vert](https://github.com/Masterminds/vert) which uses this library.
-
## Package Versions
-Note, import `github.com/github.com/Masterminds/semver/v3` to use the latest version.
+Note, import `github.com/Masterminds/semver/v3` to use the latest version.
There are three major versions fo the `semver` package.
@@ -80,12 +77,12 @@ There are two methods for comparing versions. One uses comparison methods on
differences to notes between these two methods of comparison.
1. When two versions are compared using functions such as `Compare`, `LessThan`,
- and others it will follow the specification and always include prereleases
+ and others it will follow the specification and always include pre-releases
within the comparison. It will provide an answer that is valid with the
comparison section of the spec at https://semver.org/#spec-item-11
2. When constraint checking is used for checks or validation it will follow a
different set of rules that are common for ranges with tools like npm/js
- and Rust/Cargo. This includes considering prereleases to be invalid if the
+ and Rust/Cargo. This includes considering pre-releases to be invalid if the
ranges does not include one. If you want to have it include pre-releases a
simple solution is to include `-0` in your range.
3. Constraint ranges can have some complex rules including the shorthand use of
@@ -113,7 +110,7 @@ v, err := semver.NewVersion("1.3")
if err != nil {
// Handle version not being parsable.
}
-// Check if the version meets the constraints. The a variable will be true.
+// Check if the version meets the constraints. The variable a will be true.
a := c.Check(v)
```
@@ -137,20 +134,20 @@ The basic comparisons are:
### Working With Prerelease Versions
Pre-releases, for those not familiar with them, are used for software releases
-prior to stable or generally available releases. Examples of prereleases include
-development, alpha, beta, and release candidate releases. A prerelease may be
+prior to stable or generally available releases. Examples of pre-releases include
+development, alpha, beta, and release candidate releases. A pre-release may be
a version such as `1.2.3-beta.1` while the stable release would be `1.2.3`. In the
-order of precedence, prereleases come before their associated releases. In this
+order of precedence, pre-releases come before their associated releases. In this
example `1.2.3-beta.1 < 1.2.3`.
-According to the Semantic Version specification prereleases may not be
+According to the Semantic Version specification, pre-releases may not be
API compliant with their release counterpart. It says,
> A pre-release version indicates that the version is unstable and might not satisfy the intended compatibility requirements as denoted by its associated normal version.
-SemVer comparisons using constraints without a prerelease comparator will skip
-prerelease versions. For example, `>=1.2.3` will skip prereleases when looking
-at a list of releases while `>=1.2.3-0` will evaluate and find prereleases.
+SemVer's comparisons using constraints without a pre-release comparator will skip
+pre-release versions. For example, `>=1.2.3` will skip pre-releases when looking
+at a list of releases while `>=1.2.3-0` will evaluate and find pre-releases.
The reason for the `0` as a pre-release version in the example comparison is
because pre-releases can only contain ASCII alphanumerics and hyphens (along with
@@ -171,6 +168,9 @@ These look like:
* `1.2 - 1.4.5` which is equivalent to `>= 1.2 <= 1.4.5`
* `2.3.4 - 4.5` which is equivalent to `>= 2.3.4 <= 4.5`
+Note that `1.2-1.4.5` without whitespace is parsed completely differently; it's
+parsed as a single constraint `1.2.0` with _prerelease_ `1.4.5`.
+
### Wildcards In Comparisons
The `x`, `X`, and `*` characters can be used as a wildcard character. This works
diff --git a/vendor/github.com/Masterminds/semver/v3/version.go b/vendor/github.com/Masterminds/semver/v3/version.go
index 7c4bed33474..ff499fb6640 100644
--- a/vendor/github.com/Masterminds/semver/v3/version.go
+++ b/vendor/github.com/Masterminds/semver/v3/version.go
@@ -83,22 +83,23 @@ func StrictNewVersion(v string) (*Version, error) {
original: v,
}
- // check for prerelease or build metadata
- var extra []string
- if strings.ContainsAny(parts[2], "-+") {
- // Start with the build metadata first as it needs to be on the right
- extra = strings.SplitN(parts[2], "+", 2)
- if len(extra) > 1 {
- // build metadata found
- sv.metadata = extra[1]
- parts[2] = extra[0]
+ // Extract build metadata
+ if strings.Contains(parts[2], "+") {
+ extra := strings.SplitN(parts[2], "+", 2)
+ sv.metadata = extra[1]
+ parts[2] = extra[0]
+ if err := validateMetadata(sv.metadata); err != nil {
+ return nil, err
}
+ }
- extra = strings.SplitN(parts[2], "-", 2)
- if len(extra) > 1 {
- // prerelease found
- sv.pre = extra[1]
- parts[2] = extra[0]
+ // Extract build prerelease
+ if strings.Contains(parts[2], "-") {
+ extra := strings.SplitN(parts[2], "-", 2)
+ sv.pre = extra[1]
+ parts[2] = extra[0]
+ if err := validatePrerelease(sv.pre); err != nil {
+ return nil, err
}
}
@@ -114,7 +115,7 @@ func StrictNewVersion(v string) (*Version, error) {
}
}
- // Extract the major, minor, and patch elements onto the returned Version
+ // Extract major, minor, and patch
var err error
sv.major, err = strconv.ParseUint(parts[0], 10, 64)
if err != nil {
@@ -131,23 +132,6 @@ func StrictNewVersion(v string) (*Version, error) {
return nil, err
}
- // No prerelease or build metadata found so returning now as a fastpath.
- if sv.pre == "" && sv.metadata == "" {
- return sv, nil
- }
-
- if sv.pre != "" {
- if err = validatePrerelease(sv.pre); err != nil {
- return nil, err
- }
- }
-
- if sv.metadata != "" {
- if err = validateMetadata(sv.metadata); err != nil {
- return nil, err
- }
- }
-
return sv, nil
}
@@ -381,15 +365,31 @@ func (v *Version) LessThan(o *Version) bool {
return v.Compare(o) < 0
}
+// LessThanEqual tests if one version is less or equal than another one.
+func (v *Version) LessThanEqual(o *Version) bool {
+ return v.Compare(o) <= 0
+}
+
// GreaterThan tests if one version is greater than another one.
func (v *Version) GreaterThan(o *Version) bool {
return v.Compare(o) > 0
}
+// GreaterThanEqual tests if one version is greater or equal than another one.
+func (v *Version) GreaterThanEqual(o *Version) bool {
+ return v.Compare(o) >= 0
+}
+
// Equal tests if two versions are equal to each other.
// Note, versions can be equal with different metadata since metadata
// is not considered part of the comparable version.
func (v *Version) Equal(o *Version) bool {
+ if v == o {
+ return true
+ }
+ if v == nil || o == nil {
+ return false
+ }
return v.Compare(o) == 0
}
diff --git a/vendor/github.com/Masterminds/sprig/v3/CHANGELOG.md b/vendor/github.com/Masterminds/sprig/v3/CHANGELOG.md
index 2ce45dd4eca..b5ef766a7af 100644
--- a/vendor/github.com/Masterminds/sprig/v3/CHANGELOG.md
+++ b/vendor/github.com/Masterminds/sprig/v3/CHANGELOG.md
@@ -1,5 +1,23 @@
# Changelog
+## Release 3.3.0 (2024-08-29)
+
+### Added
+
+- #400: added sha512sum function (thanks @itzik-elayev)
+
+### Changed
+
+- #407: Removed duplicate documentation (functions were documentated in 2 places)
+- #290: Corrected copy/paster oops in math documentation (thanks @zzhu41)
+- #369: Corrected template reference in docs (thanks @chey)
+- #375: Added link to URL documenation (thanks @carlpett)
+- #406: Updated the mergo dependency which had a breaking change (which was accounted for)
+- #376: Fixed documentation error (thanks @jheyduk)
+- #404: Updated dependency tree
+- #391: Fixed misspelling (thanks @chrishalbert)
+- #405: Updated Go versions used in testing
+
## Release 3.2.3 (2022-11-29)
### Changed
@@ -307,7 +325,7 @@ This release adds new functions, including:
- Added `semver` and `semverCompare` for Semantic Versions
- `list` replaces `tuple`
- Fixed issue with `join`
-- Added `first`, `last`, `intial`, `rest`, `prepend`, `append`, `toString`, `toStrings`, `sortAlpha`, `reverse`, `coalesce`, `pluck`, `pick`, `compact`, `keys`, `omit`, `uniq`, `has`, `without`
+- Added `first`, `last`, `initial`, `rest`, `prepend`, `append`, `toString`, `toStrings`, `sortAlpha`, `reverse`, `coalesce`, `pluck`, `pick`, `compact`, `keys`, `omit`, `uniq`, `has`, `without`
## Release 2.9.0 (2017-02-23)
@@ -361,7 +379,7 @@ Because we switched from `int` to `int64` as the return value for all integer ma
- `min` complements `max` (formerly `biggest`)
- `empty` indicates that a value is the empty value for its type
- `tuple` creates a tuple inside of a template: `{{$t := tuple "a", "b" "c"}}`
-- `dict` creates a dictionary inside of a template `{{$d := dict "key1" "val1" "key2" "val2"}}`
+- `dict` creates a dictionary inside of a template `{{$d := dict "key1" "val1" "key2" "val2"}}`
- Date formatters have been added for HTML dates (as used in `date` input fields)
- Integer math functions can convert from a number of types, including `string` (via `strconv.ParseInt`).
diff --git a/vendor/github.com/Masterminds/sprig/v3/crypto.go b/vendor/github.com/Masterminds/sprig/v3/crypto.go
index 13a5cd55934..75fe027e4d3 100644
--- a/vendor/github.com/Masterminds/sprig/v3/crypto.go
+++ b/vendor/github.com/Masterminds/sprig/v3/crypto.go
@@ -14,6 +14,7 @@ import (
"crypto/rsa"
"crypto/sha1"
"crypto/sha256"
+ "crypto/sha512"
"crypto/x509"
"crypto/x509/pkix"
"encoding/asn1"
@@ -36,6 +37,11 @@ import (
"golang.org/x/crypto/scrypt"
)
+func sha512sum(input string) string {
+ hash := sha512.Sum512([]byte(input))
+ return hex.EncodeToString(hash[:])
+}
+
func sha256sum(input string) string {
hash := sha256.Sum256([]byte(input))
return hex.EncodeToString(hash[:])
diff --git a/vendor/github.com/Masterminds/sprig/v3/dict.go b/vendor/github.com/Masterminds/sprig/v3/dict.go
index ade88969840..4315b3542ad 100644
--- a/vendor/github.com/Masterminds/sprig/v3/dict.go
+++ b/vendor/github.com/Masterminds/sprig/v3/dict.go
@@ -1,7 +1,7 @@
package sprig
import (
- "github.com/imdario/mergo"
+ "dario.cat/mergo"
"github.com/mitchellh/copystructure"
)
diff --git a/vendor/github.com/Masterminds/sprig/v3/doc.go b/vendor/github.com/Masterminds/sprig/v3/doc.go
index aabb9d4489f..91031d6d197 100644
--- a/vendor/github.com/Masterminds/sprig/v3/doc.go
+++ b/vendor/github.com/Masterminds/sprig/v3/doc.go
@@ -6,7 +6,7 @@ inside of Go `html/template` and `text/template` files.
To add these functions, use the `template.Funcs()` method:
- t := templates.New("foo").Funcs(sprig.FuncMap())
+ t := template.New("foo").Funcs(sprig.FuncMap())
Note that you should add the function map before you parse any template files.
diff --git a/vendor/github.com/Masterminds/sprig/v3/functions.go b/vendor/github.com/Masterminds/sprig/v3/functions.go
index 57fcec1d9ea..cda47d26f27 100644
--- a/vendor/github.com/Masterminds/sprig/v3/functions.go
+++ b/vendor/github.com/Masterminds/sprig/v3/functions.go
@@ -22,8 +22,7 @@ import (
//
// Use this to pass the functions into the template engine:
//
-// tpl := template.New("foo").Funcs(sprig.FuncMap()))
-//
+// tpl := template.New("foo").Funcs(sprig.FuncMap()))
func FuncMap() template.FuncMap {
return HtmlFuncMap()
}
@@ -142,10 +141,13 @@ var genericMap = map[string]interface{}{
"swapcase": util.SwapCase,
"shuffle": xstrings.Shuffle,
"snakecase": xstrings.ToSnakeCase,
- "camelcase": xstrings.ToCamelCase,
- "kebabcase": xstrings.ToKebabCase,
- "wrap": func(l int, s string) string { return util.Wrap(s, l) },
- "wrapWith": func(l int, sep, str string) string { return util.WrapCustom(str, l, sep, true) },
+ // camelcase used to call xstrings.ToCamelCase, but that function had a breaking change in version
+ // 1.5 that moved it from upper camel case to lower camel case. This is a breaking change for sprig.
+ // A new xstrings.ToPascalCase function was added that provided upper camel case.
+ "camelcase": xstrings.ToPascalCase,
+ "kebabcase": xstrings.ToKebabCase,
+ "wrap": func(l int, s string) string { return util.Wrap(s, l) },
+ "wrapWith": func(l int, sep, str string) string { return util.WrapCustom(str, l, sep, true) },
// Switch order so that "foobar" | contains "foo"
"contains": func(substr string, str string) bool { return strings.Contains(str, substr) },
"hasPrefix": func(substr string, str string) bool { return strings.HasPrefix(str, substr) },
@@ -159,6 +161,7 @@ var genericMap = map[string]interface{}{
"plural": plural,
"sha1sum": sha1sum,
"sha256sum": sha256sum,
+ "sha512sum": sha512sum,
"adler32sum": adler32sum,
"toString": strval,
@@ -336,20 +339,20 @@ var genericMap = map[string]interface{}{
"mustChunk": mustChunk,
// Crypto:
- "bcrypt": bcrypt,
- "htpasswd": htpasswd,
- "genPrivateKey": generatePrivateKey,
- "derivePassword": derivePassword,
- "buildCustomCert": buildCustomCertificate,
- "genCA": generateCertificateAuthority,
- "genCAWithKey": generateCertificateAuthorityWithPEMKey,
- "genSelfSignedCert": generateSelfSignedCertificate,
+ "bcrypt": bcrypt,
+ "htpasswd": htpasswd,
+ "genPrivateKey": generatePrivateKey,
+ "derivePassword": derivePassword,
+ "buildCustomCert": buildCustomCertificate,
+ "genCA": generateCertificateAuthority,
+ "genCAWithKey": generateCertificateAuthorityWithPEMKey,
+ "genSelfSignedCert": generateSelfSignedCertificate,
"genSelfSignedCertWithKey": generateSelfSignedCertificateWithPEMKey,
- "genSignedCert": generateSignedCertificate,
- "genSignedCertWithKey": generateSignedCertificateWithPEMKey,
- "encryptAES": encryptAES,
- "decryptAES": decryptAES,
- "randBytes": randBytes,
+ "genSignedCert": generateSignedCertificate,
+ "genSignedCertWithKey": generateSignedCertificateWithPEMKey,
+ "encryptAES": encryptAES,
+ "decryptAES": decryptAES,
+ "randBytes": randBytes,
// UUIDs:
"uuidv4": uuidv4,
diff --git a/vendor/github.com/Microsoft/go-winio/.golangci.yml b/vendor/github.com/Microsoft/go-winio/.golangci.yml
index 7b503d26a36..faedfe937a7 100644
--- a/vendor/github.com/Microsoft/go-winio/.golangci.yml
+++ b/vendor/github.com/Microsoft/go-winio/.golangci.yml
@@ -1,7 +1,3 @@
-run:
- skip-dirs:
- - pkg/etw/sample
-
linters:
enable:
# style
@@ -20,9 +16,13 @@ linters:
- gofmt # files are gofmt'ed
- gosec # security
- nilerr # returns nil even with non-nil error
+ - thelper # test helpers without t.Helper()
- unparam # unused function params
issues:
+ exclude-dirs:
+ - pkg/etw/sample
+
exclude-rules:
# err is very often shadowed in nested scopes
- linters:
@@ -69,9 +69,7 @@ linters-settings:
# struct order is often for Win32 compat
# also, ignore pointer bytes/GC issues for now until performance becomes an issue
- fieldalignment
- check-shadowing: true
nolintlint:
- allow-leading-space: false
require-explanation: true
require-specific: true
revive:
diff --git a/vendor/github.com/Microsoft/go-winio/backup.go b/vendor/github.com/Microsoft/go-winio/backup.go
index 09621c88463..b54341daacb 100644
--- a/vendor/github.com/Microsoft/go-winio/backup.go
+++ b/vendor/github.com/Microsoft/go-winio/backup.go
@@ -10,14 +10,14 @@ import (
"io"
"os"
"runtime"
- "syscall"
"unicode/utf16"
+ "github.com/Microsoft/go-winio/internal/fs"
"golang.org/x/sys/windows"
)
-//sys backupRead(h syscall.Handle, b []byte, bytesRead *uint32, abort bool, processSecurity bool, context *uintptr) (err error) = BackupRead
-//sys backupWrite(h syscall.Handle, b []byte, bytesWritten *uint32, abort bool, processSecurity bool, context *uintptr) (err error) = BackupWrite
+//sys backupRead(h windows.Handle, b []byte, bytesRead *uint32, abort bool, processSecurity bool, context *uintptr) (err error) = BackupRead
+//sys backupWrite(h windows.Handle, b []byte, bytesWritten *uint32, abort bool, processSecurity bool, context *uintptr) (err error) = BackupWrite
const (
BackupData = uint32(iota + 1)
@@ -104,7 +104,7 @@ func (r *BackupStreamReader) Next() (*BackupHeader, error) {
if err := binary.Read(r.r, binary.LittleEndian, name); err != nil {
return nil, err
}
- hdr.Name = syscall.UTF16ToString(name)
+ hdr.Name = windows.UTF16ToString(name)
}
if wsi.StreamID == BackupSparseBlock {
if err := binary.Read(r.r, binary.LittleEndian, &hdr.Offset); err != nil {
@@ -205,7 +205,7 @@ func NewBackupFileReader(f *os.File, includeSecurity bool) *BackupFileReader {
// Read reads a backup stream from the file by calling the Win32 API BackupRead().
func (r *BackupFileReader) Read(b []byte) (int, error) {
var bytesRead uint32
- err := backupRead(syscall.Handle(r.f.Fd()), b, &bytesRead, false, r.includeSecurity, &r.ctx)
+ err := backupRead(windows.Handle(r.f.Fd()), b, &bytesRead, false, r.includeSecurity, &r.ctx)
if err != nil {
return 0, &os.PathError{Op: "BackupRead", Path: r.f.Name(), Err: err}
}
@@ -220,7 +220,7 @@ func (r *BackupFileReader) Read(b []byte) (int, error) {
// the underlying file.
func (r *BackupFileReader) Close() error {
if r.ctx != 0 {
- _ = backupRead(syscall.Handle(r.f.Fd()), nil, nil, true, false, &r.ctx)
+ _ = backupRead(windows.Handle(r.f.Fd()), nil, nil, true, false, &r.ctx)
runtime.KeepAlive(r.f)
r.ctx = 0
}
@@ -244,7 +244,7 @@ func NewBackupFileWriter(f *os.File, includeSecurity bool) *BackupFileWriter {
// Write restores a portion of the file using the provided backup stream.
func (w *BackupFileWriter) Write(b []byte) (int, error) {
var bytesWritten uint32
- err := backupWrite(syscall.Handle(w.f.Fd()), b, &bytesWritten, false, w.includeSecurity, &w.ctx)
+ err := backupWrite(windows.Handle(w.f.Fd()), b, &bytesWritten, false, w.includeSecurity, &w.ctx)
if err != nil {
return 0, &os.PathError{Op: "BackupWrite", Path: w.f.Name(), Err: err}
}
@@ -259,7 +259,7 @@ func (w *BackupFileWriter) Write(b []byte) (int, error) {
// close the underlying file.
func (w *BackupFileWriter) Close() error {
if w.ctx != 0 {
- _ = backupWrite(syscall.Handle(w.f.Fd()), nil, nil, true, false, &w.ctx)
+ _ = backupWrite(windows.Handle(w.f.Fd()), nil, nil, true, false, &w.ctx)
runtime.KeepAlive(w.f)
w.ctx = 0
}
@@ -271,17 +271,14 @@ func (w *BackupFileWriter) Close() error {
//
// If the file opened was a directory, it cannot be used with Readdir().
func OpenForBackup(path string, access uint32, share uint32, createmode uint32) (*os.File, error) {
- winPath, err := syscall.UTF16FromString(path)
- if err != nil {
- return nil, err
- }
- h, err := syscall.CreateFile(&winPath[0],
- access,
- share,
+ h, err := fs.CreateFile(path,
+ fs.AccessMask(access),
+ fs.FileShareMode(share),
nil,
- createmode,
- syscall.FILE_FLAG_BACKUP_SEMANTICS|syscall.FILE_FLAG_OPEN_REPARSE_POINT,
- 0)
+ fs.FileCreationDisposition(createmode),
+ fs.FILE_FLAG_BACKUP_SEMANTICS|fs.FILE_FLAG_OPEN_REPARSE_POINT,
+ 0,
+ )
if err != nil {
err = &os.PathError{Op: "open", Path: path, Err: err}
return nil, err
diff --git a/vendor/github.com/Microsoft/go-winio/file.go b/vendor/github.com/Microsoft/go-winio/file.go
index 175a99d3f42..fe82a180dbd 100644
--- a/vendor/github.com/Microsoft/go-winio/file.go
+++ b/vendor/github.com/Microsoft/go-winio/file.go
@@ -15,26 +15,11 @@ import (
"golang.org/x/sys/windows"
)
-//sys cancelIoEx(file syscall.Handle, o *syscall.Overlapped) (err error) = CancelIoEx
-//sys createIoCompletionPort(file syscall.Handle, port syscall.Handle, key uintptr, threadCount uint32) (newport syscall.Handle, err error) = CreateIoCompletionPort
-//sys getQueuedCompletionStatus(port syscall.Handle, bytes *uint32, key *uintptr, o **ioOperation, timeout uint32) (err error) = GetQueuedCompletionStatus
-//sys setFileCompletionNotificationModes(h syscall.Handle, flags uint8) (err error) = SetFileCompletionNotificationModes
-//sys wsaGetOverlappedResult(h syscall.Handle, o *syscall.Overlapped, bytes *uint32, wait bool, flags *uint32) (err error) = ws2_32.WSAGetOverlappedResult
-
-type atomicBool int32
-
-func (b *atomicBool) isSet() bool { return atomic.LoadInt32((*int32)(b)) != 0 }
-func (b *atomicBool) setFalse() { atomic.StoreInt32((*int32)(b), 0) }
-func (b *atomicBool) setTrue() { atomic.StoreInt32((*int32)(b), 1) }
-
-//revive:disable-next-line:predeclared Keep "new" to maintain consistency with "atomic" pkg
-func (b *atomicBool) swap(new bool) bool {
- var newInt int32
- if new {
- newInt = 1
- }
- return atomic.SwapInt32((*int32)(b), newInt) == 1
-}
+//sys cancelIoEx(file windows.Handle, o *windows.Overlapped) (err error) = CancelIoEx
+//sys createIoCompletionPort(file windows.Handle, port windows.Handle, key uintptr, threadCount uint32) (newport windows.Handle, err error) = CreateIoCompletionPort
+//sys getQueuedCompletionStatus(port windows.Handle, bytes *uint32, key *uintptr, o **ioOperation, timeout uint32) (err error) = GetQueuedCompletionStatus
+//sys setFileCompletionNotificationModes(h windows.Handle, flags uint8) (err error) = SetFileCompletionNotificationModes
+//sys wsaGetOverlappedResult(h windows.Handle, o *windows.Overlapped, bytes *uint32, wait bool, flags *uint32) (err error) = ws2_32.WSAGetOverlappedResult
var (
ErrFileClosed = errors.New("file has already been closed")
@@ -50,7 +35,7 @@ func (*timeoutError) Temporary() bool { return true }
type timeoutChan chan struct{}
var ioInitOnce sync.Once
-var ioCompletionPort syscall.Handle
+var ioCompletionPort windows.Handle
// ioResult contains the result of an asynchronous IO operation.
type ioResult struct {
@@ -60,12 +45,12 @@ type ioResult struct {
// ioOperation represents an outstanding asynchronous Win32 IO.
type ioOperation struct {
- o syscall.Overlapped
+ o windows.Overlapped
ch chan ioResult
}
func initIO() {
- h, err := createIoCompletionPort(syscall.InvalidHandle, 0, 0, 0xffffffff)
+ h, err := createIoCompletionPort(windows.InvalidHandle, 0, 0, 0xffffffff)
if err != nil {
panic(err)
}
@@ -76,10 +61,10 @@ func initIO() {
// win32File implements Reader, Writer, and Closer on a Win32 handle without blocking in a syscall.
// It takes ownership of this handle and will close it if it is garbage collected.
type win32File struct {
- handle syscall.Handle
+ handle windows.Handle
wg sync.WaitGroup
wgLock sync.RWMutex
- closing atomicBool
+ closing atomic.Bool
socket bool
readDeadline deadlineHandler
writeDeadline deadlineHandler
@@ -90,11 +75,11 @@ type deadlineHandler struct {
channel timeoutChan
channelLock sync.RWMutex
timer *time.Timer
- timedout atomicBool
+ timedout atomic.Bool
}
// makeWin32File makes a new win32File from an existing file handle.
-func makeWin32File(h syscall.Handle) (*win32File, error) {
+func makeWin32File(h windows.Handle) (*win32File, error) {
f := &win32File{handle: h}
ioInitOnce.Do(initIO)
_, err := createIoCompletionPort(h, ioCompletionPort, 0, 0xffffffff)
@@ -110,7 +95,12 @@ func makeWin32File(h syscall.Handle) (*win32File, error) {
return f, nil
}
+// Deprecated: use NewOpenFile instead.
func MakeOpenFile(h syscall.Handle) (io.ReadWriteCloser, error) {
+ return NewOpenFile(windows.Handle(h))
+}
+
+func NewOpenFile(h windows.Handle) (io.ReadWriteCloser, error) {
// If we return the result of makeWin32File directly, it can result in an
// interface-wrapped nil, rather than a nil interface value.
f, err := makeWin32File(h)
@@ -124,13 +114,13 @@ func MakeOpenFile(h syscall.Handle) (io.ReadWriteCloser, error) {
func (f *win32File) closeHandle() {
f.wgLock.Lock()
// Atomically set that we are closing, releasing the resources only once.
- if !f.closing.swap(true) {
+ if !f.closing.Swap(true) {
f.wgLock.Unlock()
// cancel all IO and wait for it to complete
_ = cancelIoEx(f.handle, nil)
f.wg.Wait()
// at this point, no new IO can start
- syscall.Close(f.handle)
+ windows.Close(f.handle)
f.handle = 0
} else {
f.wgLock.Unlock()
@@ -145,14 +135,14 @@ func (f *win32File) Close() error {
// IsClosed checks if the file has been closed.
func (f *win32File) IsClosed() bool {
- return f.closing.isSet()
+ return f.closing.Load()
}
// prepareIO prepares for a new IO operation.
// The caller must call f.wg.Done() when the IO is finished, prior to Close() returning.
func (f *win32File) prepareIO() (*ioOperation, error) {
f.wgLock.RLock()
- if f.closing.isSet() {
+ if f.closing.Load() {
f.wgLock.RUnlock()
return nil, ErrFileClosed
}
@@ -164,12 +154,12 @@ func (f *win32File) prepareIO() (*ioOperation, error) {
}
// ioCompletionProcessor processes completed async IOs forever.
-func ioCompletionProcessor(h syscall.Handle) {
+func ioCompletionProcessor(h windows.Handle) {
for {
var bytes uint32
var key uintptr
var op *ioOperation
- err := getQueuedCompletionStatus(h, &bytes, &key, &op, syscall.INFINITE)
+ err := getQueuedCompletionStatus(h, &bytes, &key, &op, windows.INFINITE)
if op == nil {
panic(err)
}
@@ -182,11 +172,11 @@ func ioCompletionProcessor(h syscall.Handle) {
// asyncIO processes the return value from ReadFile or WriteFile, blocking until
// the operation has actually completed.
func (f *win32File) asyncIO(c *ioOperation, d *deadlineHandler, bytes uint32, err error) (int, error) {
- if err != syscall.ERROR_IO_PENDING { //nolint:errorlint // err is Errno
+ if err != windows.ERROR_IO_PENDING { //nolint:errorlint // err is Errno
return int(bytes), err
}
- if f.closing.isSet() {
+ if f.closing.Load() {
_ = cancelIoEx(f.handle, &c.o)
}
@@ -201,8 +191,8 @@ func (f *win32File) asyncIO(c *ioOperation, d *deadlineHandler, bytes uint32, er
select {
case r = <-c.ch:
err = r.err
- if err == syscall.ERROR_OPERATION_ABORTED { //nolint:errorlint // err is Errno
- if f.closing.isSet() {
+ if err == windows.ERROR_OPERATION_ABORTED { //nolint:errorlint // err is Errno
+ if f.closing.Load() {
err = ErrFileClosed
}
} else if err != nil && f.socket {
@@ -214,7 +204,7 @@ func (f *win32File) asyncIO(c *ioOperation, d *deadlineHandler, bytes uint32, er
_ = cancelIoEx(f.handle, &c.o)
r = <-c.ch
err = r.err
- if err == syscall.ERROR_OPERATION_ABORTED { //nolint:errorlint // err is Errno
+ if err == windows.ERROR_OPERATION_ABORTED { //nolint:errorlint // err is Errno
err = ErrTimeout
}
}
@@ -235,23 +225,22 @@ func (f *win32File) Read(b []byte) (int, error) {
}
defer f.wg.Done()
- if f.readDeadline.timedout.isSet() {
+ if f.readDeadline.timedout.Load() {
return 0, ErrTimeout
}
var bytes uint32
- err = syscall.ReadFile(f.handle, b, &bytes, &c.o)
+ err = windows.ReadFile(f.handle, b, &bytes, &c.o)
n, err := f.asyncIO(c, &f.readDeadline, bytes, err)
runtime.KeepAlive(b)
// Handle EOF conditions.
if err == nil && n == 0 && len(b) != 0 {
return 0, io.EOF
- } else if err == syscall.ERROR_BROKEN_PIPE { //nolint:errorlint // err is Errno
+ } else if err == windows.ERROR_BROKEN_PIPE { //nolint:errorlint // err is Errno
return 0, io.EOF
- } else {
- return n, err
}
+ return n, err
}
// Write writes to a file handle.
@@ -262,12 +251,12 @@ func (f *win32File) Write(b []byte) (int, error) {
}
defer f.wg.Done()
- if f.writeDeadline.timedout.isSet() {
+ if f.writeDeadline.timedout.Load() {
return 0, ErrTimeout
}
var bytes uint32
- err = syscall.WriteFile(f.handle, b, &bytes, &c.o)
+ err = windows.WriteFile(f.handle, b, &bytes, &c.o)
n, err := f.asyncIO(c, &f.writeDeadline, bytes, err)
runtime.KeepAlive(b)
return n, err
@@ -282,7 +271,7 @@ func (f *win32File) SetWriteDeadline(deadline time.Time) error {
}
func (f *win32File) Flush() error {
- return syscall.FlushFileBuffers(f.handle)
+ return windows.FlushFileBuffers(f.handle)
}
func (f *win32File) Fd() uintptr {
@@ -299,7 +288,7 @@ func (d *deadlineHandler) set(deadline time.Time) error {
}
d.timer = nil
}
- d.timedout.setFalse()
+ d.timedout.Store(false)
select {
case <-d.channel:
@@ -314,7 +303,7 @@ func (d *deadlineHandler) set(deadline time.Time) error {
}
timeoutIO := func() {
- d.timedout.setTrue()
+ d.timedout.Store(true)
close(d.channel)
}
diff --git a/vendor/github.com/Microsoft/go-winio/fileinfo.go b/vendor/github.com/Microsoft/go-winio/fileinfo.go
index 702950e72a4..c860eb9917a 100644
--- a/vendor/github.com/Microsoft/go-winio/fileinfo.go
+++ b/vendor/github.com/Microsoft/go-winio/fileinfo.go
@@ -18,9 +18,18 @@ type FileBasicInfo struct {
_ uint32 // padding
}
+// alignedFileBasicInfo is a FileBasicInfo, but aligned to uint64 by containing
+// uint64 rather than windows.Filetime. Filetime contains two uint32s. uint64
+// alignment is necessary to pass this as FILE_BASIC_INFO.
+type alignedFileBasicInfo struct {
+ CreationTime, LastAccessTime, LastWriteTime, ChangeTime uint64
+ FileAttributes uint32
+ _ uint32 // padding
+}
+
// GetFileBasicInfo retrieves times and attributes for a file.
func GetFileBasicInfo(f *os.File) (*FileBasicInfo, error) {
- bi := &FileBasicInfo{}
+ bi := &alignedFileBasicInfo{}
if err := windows.GetFileInformationByHandleEx(
windows.Handle(f.Fd()),
windows.FileBasicInfo,
@@ -30,16 +39,21 @@ func GetFileBasicInfo(f *os.File) (*FileBasicInfo, error) {
return nil, &os.PathError{Op: "GetFileInformationByHandleEx", Path: f.Name(), Err: err}
}
runtime.KeepAlive(f)
- return bi, nil
+ // Reinterpret the alignedFileBasicInfo as a FileBasicInfo so it matches the
+ // public API of this module. The data may be unnecessarily aligned.
+ return (*FileBasicInfo)(unsafe.Pointer(bi)), nil
}
// SetFileBasicInfo sets times and attributes for a file.
func SetFileBasicInfo(f *os.File, bi *FileBasicInfo) error {
+ // Create an alignedFileBasicInfo based on a FileBasicInfo. The copy is
+ // suitable to pass to GetFileInformationByHandleEx.
+ biAligned := *(*alignedFileBasicInfo)(unsafe.Pointer(bi))
if err := windows.SetFileInformationByHandle(
windows.Handle(f.Fd()),
windows.FileBasicInfo,
- (*byte)(unsafe.Pointer(bi)),
- uint32(unsafe.Sizeof(*bi)),
+ (*byte)(unsafe.Pointer(&biAligned)),
+ uint32(unsafe.Sizeof(biAligned)),
); err != nil {
return &os.PathError{Op: "SetFileInformationByHandle", Path: f.Name(), Err: err}
}
diff --git a/vendor/github.com/Microsoft/go-winio/hvsock.go b/vendor/github.com/Microsoft/go-winio/hvsock.go
index c881916583e..c4fdd9d4aec 100644
--- a/vendor/github.com/Microsoft/go-winio/hvsock.go
+++ b/vendor/github.com/Microsoft/go-winio/hvsock.go
@@ -10,7 +10,6 @@ import (
"io"
"net"
"os"
- "syscall"
"time"
"unsafe"
@@ -181,13 +180,13 @@ type HvsockConn struct {
var _ net.Conn = &HvsockConn{}
func newHVSocket() (*win32File, error) {
- fd, err := syscall.Socket(afHVSock, syscall.SOCK_STREAM, 1)
+ fd, err := windows.Socket(afHVSock, windows.SOCK_STREAM, 1)
if err != nil {
return nil, os.NewSyscallError("socket", err)
}
f, err := makeWin32File(fd)
if err != nil {
- syscall.Close(fd)
+ windows.Close(fd)
return nil, err
}
f.socket = true
@@ -197,16 +196,24 @@ func newHVSocket() (*win32File, error) {
// ListenHvsock listens for connections on the specified hvsock address.
func ListenHvsock(addr *HvsockAddr) (_ *HvsockListener, err error) {
l := &HvsockListener{addr: *addr}
- sock, err := newHVSocket()
+
+ var sock *win32File
+ sock, err = newHVSocket()
if err != nil {
return nil, l.opErr("listen", err)
}
+ defer func() {
+ if err != nil {
+ _ = sock.Close()
+ }
+ }()
+
sa := addr.raw()
- err = socket.Bind(windows.Handle(sock.handle), &sa)
+ err = socket.Bind(sock.handle, &sa)
if err != nil {
return nil, l.opErr("listen", os.NewSyscallError("socket", err))
}
- err = syscall.Listen(sock.handle, 16)
+ err = windows.Listen(sock.handle, 16)
if err != nil {
return nil, l.opErr("listen", os.NewSyscallError("listen", err))
}
@@ -246,7 +253,7 @@ func (l *HvsockListener) Accept() (_ net.Conn, err error) {
var addrbuf [addrlen * 2]byte
var bytes uint32
- err = syscall.AcceptEx(l.sock.handle, sock.handle, &addrbuf[0], 0 /* rxdatalen */, addrlen, addrlen, &bytes, &c.o)
+ err = windows.AcceptEx(l.sock.handle, sock.handle, &addrbuf[0], 0 /* rxdatalen */, addrlen, addrlen, &bytes, &c.o)
if _, err = l.sock.asyncIO(c, nil, bytes, err); err != nil {
return nil, l.opErr("accept", os.NewSyscallError("acceptex", err))
}
@@ -263,7 +270,7 @@ func (l *HvsockListener) Accept() (_ net.Conn, err error) {
conn.remote.fromRaw((*rawHvsockAddr)(unsafe.Pointer(&addrbuf[addrlen])))
// initialize the accepted socket and update its properties with those of the listening socket
- if err = windows.Setsockopt(windows.Handle(sock.handle),
+ if err = windows.Setsockopt(sock.handle,
windows.SOL_SOCKET, windows.SO_UPDATE_ACCEPT_CONTEXT,
(*byte)(unsafe.Pointer(&l.sock.handle)), int32(unsafe.Sizeof(l.sock.handle))); err != nil {
return nil, conn.opErr("accept", os.NewSyscallError("setsockopt", err))
@@ -334,7 +341,7 @@ func (d *HvsockDialer) Dial(ctx context.Context, addr *HvsockAddr) (conn *Hvsock
}()
sa := addr.raw()
- err = socket.Bind(windows.Handle(sock.handle), &sa)
+ err = socket.Bind(sock.handle, &sa)
if err != nil {
return nil, conn.opErr(op, os.NewSyscallError("bind", err))
}
@@ -347,7 +354,7 @@ func (d *HvsockDialer) Dial(ctx context.Context, addr *HvsockAddr) (conn *Hvsock
var bytes uint32
for i := uint(0); i <= d.Retries; i++ {
err = socket.ConnectEx(
- windows.Handle(sock.handle),
+ sock.handle,
&sa,
nil, // sendBuf
0, // sendDataLen
@@ -367,7 +374,7 @@ func (d *HvsockDialer) Dial(ctx context.Context, addr *HvsockAddr) (conn *Hvsock
// update the connection properties, so shutdown can be used
if err = windows.Setsockopt(
- windows.Handle(sock.handle),
+ sock.handle,
windows.SOL_SOCKET,
windows.SO_UPDATE_CONNECT_CONTEXT,
nil, // optvalue
@@ -378,7 +385,7 @@ func (d *HvsockDialer) Dial(ctx context.Context, addr *HvsockAddr) (conn *Hvsock
// get the local name
var sal rawHvsockAddr
- err = socket.GetSockName(windows.Handle(sock.handle), &sal)
+ err = socket.GetSockName(sock.handle, &sal)
if err != nil {
return nil, conn.opErr(op, os.NewSyscallError("getsockname", err))
}
@@ -421,7 +428,7 @@ func (d *HvsockDialer) redialWait(ctx context.Context) (err error) {
return ctx.Err()
}
-// assumes error is a plain, unwrapped syscall.Errno provided by direct syscall.
+// assumes error is a plain, unwrapped windows.Errno provided by direct syscall.
func canRedial(err error) bool {
//nolint:errorlint // guaranteed to be an Errno
switch err {
@@ -447,9 +454,9 @@ func (conn *HvsockConn) Read(b []byte) (int, error) {
return 0, conn.opErr("read", err)
}
defer conn.sock.wg.Done()
- buf := syscall.WSABuf{Buf: &b[0], Len: uint32(len(b))}
+ buf := windows.WSABuf{Buf: &b[0], Len: uint32(len(b))}
var flags, bytes uint32
- err = syscall.WSARecv(conn.sock.handle, &buf, 1, &bytes, &flags, &c.o, nil)
+ err = windows.WSARecv(conn.sock.handle, &buf, 1, &bytes, &flags, &c.o, nil)
n, err := conn.sock.asyncIO(c, &conn.sock.readDeadline, bytes, err)
if err != nil {
var eno windows.Errno
@@ -482,9 +489,9 @@ func (conn *HvsockConn) write(b []byte) (int, error) {
return 0, conn.opErr("write", err)
}
defer conn.sock.wg.Done()
- buf := syscall.WSABuf{Buf: &b[0], Len: uint32(len(b))}
+ buf := windows.WSABuf{Buf: &b[0], Len: uint32(len(b))}
var bytes uint32
- err = syscall.WSASend(conn.sock.handle, &buf, 1, &bytes, 0, &c.o, nil)
+ err = windows.WSASend(conn.sock.handle, &buf, 1, &bytes, 0, &c.o, nil)
n, err := conn.sock.asyncIO(c, &conn.sock.writeDeadline, bytes, err)
if err != nil {
var eno windows.Errno
@@ -511,7 +518,7 @@ func (conn *HvsockConn) shutdown(how int) error {
return socket.ErrSocketClosed
}
- err := syscall.Shutdown(conn.sock.handle, how)
+ err := windows.Shutdown(conn.sock.handle, how)
if err != nil {
// If the connection was closed, shutdowns fail with "not connected"
if errors.Is(err, windows.WSAENOTCONN) ||
@@ -525,7 +532,7 @@ func (conn *HvsockConn) shutdown(how int) error {
// CloseRead shuts down the read end of the socket, preventing future read operations.
func (conn *HvsockConn) CloseRead() error {
- err := conn.shutdown(syscall.SHUT_RD)
+ err := conn.shutdown(windows.SHUT_RD)
if err != nil {
return conn.opErr("closeread", err)
}
@@ -535,7 +542,7 @@ func (conn *HvsockConn) CloseRead() error {
// CloseWrite shuts down the write end of the socket, preventing future write operations and
// notifying the other endpoint that no more data will be written.
func (conn *HvsockConn) CloseWrite() error {
- err := conn.shutdown(syscall.SHUT_WR)
+ err := conn.shutdown(windows.SHUT_WR)
if err != nil {
return conn.opErr("closewrite", err)
}
diff --git a/vendor/github.com/Microsoft/go-winio/internal/fs/fs.go b/vendor/github.com/Microsoft/go-winio/internal/fs/fs.go
index 509b3ec6410..0cd9621df78 100644
--- a/vendor/github.com/Microsoft/go-winio/internal/fs/fs.go
+++ b/vendor/github.com/Microsoft/go-winio/internal/fs/fs.go
@@ -11,12 +11,14 @@ import (
//go:generate go run github.com/Microsoft/go-winio/tools/mkwinsyscall -output zsyscall_windows.go fs.go
// https://learn.microsoft.com/en-us/windows/win32/api/fileapi/nf-fileapi-createfilew
-//sys CreateFile(name string, access AccessMask, mode FileShareMode, sa *syscall.SecurityAttributes, createmode FileCreationDisposition, attrs FileFlagOrAttribute, templatefile windows.Handle) (handle windows.Handle, err error) [failretval==windows.InvalidHandle] = CreateFileW
+//sys CreateFile(name string, access AccessMask, mode FileShareMode, sa *windows.SecurityAttributes, createmode FileCreationDisposition, attrs FileFlagOrAttribute, templatefile windows.Handle) (handle windows.Handle, err error) [failretval==windows.InvalidHandle] = CreateFileW
const NullHandle windows.Handle = 0
// AccessMask defines standard, specific, and generic rights.
//
+// Used with CreateFile and NtCreateFile (and co.).
+//
// Bitmask:
// 3 3 2 2 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 1
// 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0
@@ -47,6 +49,12 @@ const (
// https://learn.microsoft.com/en-us/windows/win32/api/fileapi/nf-fileapi-createfilew#parameters
FILE_ANY_ACCESS AccessMask = 0
+ GENERIC_READ AccessMask = 0x8000_0000
+ GENERIC_WRITE AccessMask = 0x4000_0000
+ GENERIC_EXECUTE AccessMask = 0x2000_0000
+ GENERIC_ALL AccessMask = 0x1000_0000
+ ACCESS_SYSTEM_SECURITY AccessMask = 0x0100_0000
+
// Specific Object Access
// from ntioapi.h
@@ -124,14 +132,32 @@ const (
TRUNCATE_EXISTING FileCreationDisposition = 0x05
)
+// Create disposition values for NtCreate*
+type NTFileCreationDisposition uint32
+
+//nolint:revive // SNAKE_CASE is not idiomatic in Go, but aligned with Win32 API.
+const (
+ // From ntioapi.h
+
+ FILE_SUPERSEDE NTFileCreationDisposition = 0x00
+ FILE_OPEN NTFileCreationDisposition = 0x01
+ FILE_CREATE NTFileCreationDisposition = 0x02
+ FILE_OPEN_IF NTFileCreationDisposition = 0x03
+ FILE_OVERWRITE NTFileCreationDisposition = 0x04
+ FILE_OVERWRITE_IF NTFileCreationDisposition = 0x05
+ FILE_MAXIMUM_DISPOSITION NTFileCreationDisposition = 0x05
+)
+
// CreateFile and co. take flags or attributes together as one parameter.
// Define alias until we can use generics to allow both
-
+//
// https://learn.microsoft.com/en-us/windows/win32/fileio/file-attribute-constants
type FileFlagOrAttribute uint32
//nolint:revive // SNAKE_CASE is not idiomatic in Go, but aligned with Win32 API.
-const ( // from winnt.h
+const (
+ // from winnt.h
+
FILE_FLAG_WRITE_THROUGH FileFlagOrAttribute = 0x8000_0000
FILE_FLAG_OVERLAPPED FileFlagOrAttribute = 0x4000_0000
FILE_FLAG_NO_BUFFERING FileFlagOrAttribute = 0x2000_0000
@@ -145,17 +171,51 @@ const ( // from winnt.h
FILE_FLAG_FIRST_PIPE_INSTANCE FileFlagOrAttribute = 0x0008_0000
)
+// NtCreate* functions take a dedicated CreateOptions parameter.
+//
+// https://learn.microsoft.com/en-us/windows/win32/api/Winternl/nf-winternl-ntcreatefile
+//
+// https://learn.microsoft.com/en-us/windows/win32/devnotes/nt-create-named-pipe-file
+type NTCreateOptions uint32
+
+//nolint:revive // SNAKE_CASE is not idiomatic in Go, but aligned with Win32 API.
+const (
+ // From ntioapi.h
+
+ FILE_DIRECTORY_FILE NTCreateOptions = 0x0000_0001
+ FILE_WRITE_THROUGH NTCreateOptions = 0x0000_0002
+ FILE_SEQUENTIAL_ONLY NTCreateOptions = 0x0000_0004
+ FILE_NO_INTERMEDIATE_BUFFERING NTCreateOptions = 0x0000_0008
+
+ FILE_SYNCHRONOUS_IO_ALERT NTCreateOptions = 0x0000_0010
+ FILE_SYNCHRONOUS_IO_NONALERT NTCreateOptions = 0x0000_0020
+ FILE_NON_DIRECTORY_FILE NTCreateOptions = 0x0000_0040
+ FILE_CREATE_TREE_CONNECTION NTCreateOptions = 0x0000_0080
+
+ FILE_COMPLETE_IF_OPLOCKED NTCreateOptions = 0x0000_0100
+ FILE_NO_EA_KNOWLEDGE NTCreateOptions = 0x0000_0200
+ FILE_DISABLE_TUNNELING NTCreateOptions = 0x0000_0400
+ FILE_RANDOM_ACCESS NTCreateOptions = 0x0000_0800
+
+ FILE_DELETE_ON_CLOSE NTCreateOptions = 0x0000_1000
+ FILE_OPEN_BY_FILE_ID NTCreateOptions = 0x0000_2000
+ FILE_OPEN_FOR_BACKUP_INTENT NTCreateOptions = 0x0000_4000
+ FILE_NO_COMPRESSION NTCreateOptions = 0x0000_8000
+)
+
type FileSQSFlag = FileFlagOrAttribute
//nolint:revive // SNAKE_CASE is not idiomatic in Go, but aligned with Win32 API.
-const ( // from winbase.h
+const (
+ // from winbase.h
+
SECURITY_ANONYMOUS FileSQSFlag = FileSQSFlag(SecurityAnonymous << 16)
SECURITY_IDENTIFICATION FileSQSFlag = FileSQSFlag(SecurityIdentification << 16)
SECURITY_IMPERSONATION FileSQSFlag = FileSQSFlag(SecurityImpersonation << 16)
SECURITY_DELEGATION FileSQSFlag = FileSQSFlag(SecurityDelegation << 16)
- SECURITY_SQOS_PRESENT FileSQSFlag = 0x00100000
- SECURITY_VALID_SQOS_FLAGS FileSQSFlag = 0x001F0000
+ SECURITY_SQOS_PRESENT FileSQSFlag = 0x0010_0000
+ SECURITY_VALID_SQOS_FLAGS FileSQSFlag = 0x001F_0000
)
// GetFinalPathNameByHandle flags
diff --git a/vendor/github.com/Microsoft/go-winio/internal/fs/zsyscall_windows.go b/vendor/github.com/Microsoft/go-winio/internal/fs/zsyscall_windows.go
index e2f7bb24e5f..a94e234c706 100644
--- a/vendor/github.com/Microsoft/go-winio/internal/fs/zsyscall_windows.go
+++ b/vendor/github.com/Microsoft/go-winio/internal/fs/zsyscall_windows.go
@@ -33,9 +33,6 @@ func errnoErr(e syscall.Errno) error {
case errnoERROR_IO_PENDING:
return errERROR_IO_PENDING
}
- // TODO: add more here, after collecting data on the common
- // error values see on Windows. (perhaps when running
- // all.bat?)
return e
}
@@ -45,7 +42,7 @@ var (
procCreateFileW = modkernel32.NewProc("CreateFileW")
)
-func CreateFile(name string, access AccessMask, mode FileShareMode, sa *syscall.SecurityAttributes, createmode FileCreationDisposition, attrs FileFlagOrAttribute, templatefile windows.Handle) (handle windows.Handle, err error) {
+func CreateFile(name string, access AccessMask, mode FileShareMode, sa *windows.SecurityAttributes, createmode FileCreationDisposition, attrs FileFlagOrAttribute, templatefile windows.Handle) (handle windows.Handle, err error) {
var _p0 *uint16
_p0, err = syscall.UTF16PtrFromString(name)
if err != nil {
@@ -54,8 +51,8 @@ func CreateFile(name string, access AccessMask, mode FileShareMode, sa *syscall.
return _CreateFile(_p0, access, mode, sa, createmode, attrs, templatefile)
}
-func _CreateFile(name *uint16, access AccessMask, mode FileShareMode, sa *syscall.SecurityAttributes, createmode FileCreationDisposition, attrs FileFlagOrAttribute, templatefile windows.Handle) (handle windows.Handle, err error) {
- r0, _, e1 := syscall.Syscall9(procCreateFileW.Addr(), 7, uintptr(unsafe.Pointer(name)), uintptr(access), uintptr(mode), uintptr(unsafe.Pointer(sa)), uintptr(createmode), uintptr(attrs), uintptr(templatefile), 0, 0)
+func _CreateFile(name *uint16, access AccessMask, mode FileShareMode, sa *windows.SecurityAttributes, createmode FileCreationDisposition, attrs FileFlagOrAttribute, templatefile windows.Handle) (handle windows.Handle, err error) {
+ r0, _, e1 := syscall.SyscallN(procCreateFileW.Addr(), uintptr(unsafe.Pointer(name)), uintptr(access), uintptr(mode), uintptr(unsafe.Pointer(sa)), uintptr(createmode), uintptr(attrs), uintptr(templatefile))
handle = windows.Handle(r0)
if handle == windows.InvalidHandle {
err = errnoErr(e1)
diff --git a/vendor/github.com/Microsoft/go-winio/internal/socket/socket.go b/vendor/github.com/Microsoft/go-winio/internal/socket/socket.go
index aeb7b7250f5..88580d974ec 100644
--- a/vendor/github.com/Microsoft/go-winio/internal/socket/socket.go
+++ b/vendor/github.com/Microsoft/go-winio/internal/socket/socket.go
@@ -156,9 +156,7 @@ func connectEx(
bytesSent *uint32,
overlapped *windows.Overlapped,
) (err error) {
- // todo: after upgrading to 1.18, switch from syscall.Syscall9 to syscall.SyscallN
- r1, _, e1 := syscall.Syscall9(connectExFunc.addr,
- 7,
+ r1, _, e1 := syscall.SyscallN(connectExFunc.addr,
uintptr(s),
uintptr(name),
uintptr(namelen),
@@ -166,8 +164,8 @@ func connectEx(
uintptr(sendDataLen),
uintptr(unsafe.Pointer(bytesSent)),
uintptr(unsafe.Pointer(overlapped)),
- 0,
- 0)
+ )
+
if r1 == 0 {
if e1 != 0 {
err = error(e1)
diff --git a/vendor/github.com/Microsoft/go-winio/internal/socket/zsyscall_windows.go b/vendor/github.com/Microsoft/go-winio/internal/socket/zsyscall_windows.go
index 6d2e1a9e443..e1504126aa6 100644
--- a/vendor/github.com/Microsoft/go-winio/internal/socket/zsyscall_windows.go
+++ b/vendor/github.com/Microsoft/go-winio/internal/socket/zsyscall_windows.go
@@ -33,9 +33,6 @@ func errnoErr(e syscall.Errno) error {
case errnoERROR_IO_PENDING:
return errERROR_IO_PENDING
}
- // TODO: add more here, after collecting data on the common
- // error values see on Windows. (perhaps when running
- // all.bat?)
return e
}
@@ -48,7 +45,7 @@ var (
)
func bind(s windows.Handle, name unsafe.Pointer, namelen int32) (err error) {
- r1, _, e1 := syscall.Syscall(procbind.Addr(), 3, uintptr(s), uintptr(name), uintptr(namelen))
+ r1, _, e1 := syscall.SyscallN(procbind.Addr(), uintptr(s), uintptr(name), uintptr(namelen))
if r1 == socketError {
err = errnoErr(e1)
}
@@ -56,7 +53,7 @@ func bind(s windows.Handle, name unsafe.Pointer, namelen int32) (err error) {
}
func getpeername(s windows.Handle, name unsafe.Pointer, namelen *int32) (err error) {
- r1, _, e1 := syscall.Syscall(procgetpeername.Addr(), 3, uintptr(s), uintptr(name), uintptr(unsafe.Pointer(namelen)))
+ r1, _, e1 := syscall.SyscallN(procgetpeername.Addr(), uintptr(s), uintptr(name), uintptr(unsafe.Pointer(namelen)))
if r1 == socketError {
err = errnoErr(e1)
}
@@ -64,7 +61,7 @@ func getpeername(s windows.Handle, name unsafe.Pointer, namelen *int32) (err err
}
func getsockname(s windows.Handle, name unsafe.Pointer, namelen *int32) (err error) {
- r1, _, e1 := syscall.Syscall(procgetsockname.Addr(), 3, uintptr(s), uintptr(name), uintptr(unsafe.Pointer(namelen)))
+ r1, _, e1 := syscall.SyscallN(procgetsockname.Addr(), uintptr(s), uintptr(name), uintptr(unsafe.Pointer(namelen)))
if r1 == socketError {
err = errnoErr(e1)
}
diff --git a/vendor/github.com/Microsoft/go-winio/internal/stringbuffer/wstring.go b/vendor/github.com/Microsoft/go-winio/internal/stringbuffer/wstring.go
index 7ad50570240..42ebc019fcb 100644
--- a/vendor/github.com/Microsoft/go-winio/internal/stringbuffer/wstring.go
+++ b/vendor/github.com/Microsoft/go-winio/internal/stringbuffer/wstring.go
@@ -62,7 +62,7 @@ func (b *WString) Free() {
// ResizeTo grows the buffer to at least c and returns the new capacity, freeing the
// previous buffer back into pool.
func (b *WString) ResizeTo(c uint32) uint32 {
- // allready sufficient (or n is 0)
+ // already sufficient (or n is 0)
if c <= b.Cap() {
return b.Cap()
}
diff --git a/vendor/github.com/Microsoft/go-winio/pipe.go b/vendor/github.com/Microsoft/go-winio/pipe.go
index 25cc811031b..a2da6639d00 100644
--- a/vendor/github.com/Microsoft/go-winio/pipe.go
+++ b/vendor/github.com/Microsoft/go-winio/pipe.go
@@ -11,7 +11,6 @@ import (
"net"
"os"
"runtime"
- "syscall"
"time"
"unsafe"
@@ -20,20 +19,44 @@ import (
"github.com/Microsoft/go-winio/internal/fs"
)
-//sys connectNamedPipe(pipe syscall.Handle, o *syscall.Overlapped) (err error) = ConnectNamedPipe
-//sys createNamedPipe(name string, flags uint32, pipeMode uint32, maxInstances uint32, outSize uint32, inSize uint32, defaultTimeout uint32, sa *syscall.SecurityAttributes) (handle syscall.Handle, err error) [failretval==syscall.InvalidHandle] = CreateNamedPipeW
-//sys getNamedPipeInfo(pipe syscall.Handle, flags *uint32, outSize *uint32, inSize *uint32, maxInstances *uint32) (err error) = GetNamedPipeInfo
-//sys getNamedPipeHandleState(pipe syscall.Handle, state *uint32, curInstances *uint32, maxCollectionCount *uint32, collectDataTimeout *uint32, userName *uint16, maxUserNameSize uint32) (err error) = GetNamedPipeHandleStateW
-//sys localAlloc(uFlags uint32, length uint32) (ptr uintptr) = LocalAlloc
-//sys ntCreateNamedPipeFile(pipe *syscall.Handle, access uint32, oa *objectAttributes, iosb *ioStatusBlock, share uint32, disposition uint32, options uint32, typ uint32, readMode uint32, completionMode uint32, maxInstances uint32, inboundQuota uint32, outputQuota uint32, timeout *int64) (status ntStatus) = ntdll.NtCreateNamedPipeFile
+//sys connectNamedPipe(pipe windows.Handle, o *windows.Overlapped) (err error) = ConnectNamedPipe
+//sys createNamedPipe(name string, flags uint32, pipeMode uint32, maxInstances uint32, outSize uint32, inSize uint32, defaultTimeout uint32, sa *windows.SecurityAttributes) (handle windows.Handle, err error) [failretval==windows.InvalidHandle] = CreateNamedPipeW
+//sys disconnectNamedPipe(pipe windows.Handle) (err error) = DisconnectNamedPipe
+//sys getNamedPipeInfo(pipe windows.Handle, flags *uint32, outSize *uint32, inSize *uint32, maxInstances *uint32) (err error) = GetNamedPipeInfo
+//sys getNamedPipeHandleState(pipe windows.Handle, state *uint32, curInstances *uint32, maxCollectionCount *uint32, collectDataTimeout *uint32, userName *uint16, maxUserNameSize uint32) (err error) = GetNamedPipeHandleStateW
+//sys ntCreateNamedPipeFile(pipe *windows.Handle, access ntAccessMask, oa *objectAttributes, iosb *ioStatusBlock, share ntFileShareMode, disposition ntFileCreationDisposition, options ntFileOptions, typ uint32, readMode uint32, completionMode uint32, maxInstances uint32, inboundQuota uint32, outputQuota uint32, timeout *int64) (status ntStatus) = ntdll.NtCreateNamedPipeFile
//sys rtlNtStatusToDosError(status ntStatus) (winerr error) = ntdll.RtlNtStatusToDosErrorNoTeb
//sys rtlDosPathNameToNtPathName(name *uint16, ntName *unicodeString, filePart uintptr, reserved uintptr) (status ntStatus) = ntdll.RtlDosPathNameToNtPathName_U
//sys rtlDefaultNpAcl(dacl *uintptr) (status ntStatus) = ntdll.RtlDefaultNpAcl
+type PipeConn interface {
+ net.Conn
+ Disconnect() error
+ Flush() error
+}
+
+// type aliases for mkwinsyscall code
+type (
+ ntAccessMask = fs.AccessMask
+ ntFileShareMode = fs.FileShareMode
+ ntFileCreationDisposition = fs.NTFileCreationDisposition
+ ntFileOptions = fs.NTCreateOptions
+)
+
type ioStatusBlock struct {
Status, Information uintptr
}
+// typedef struct _OBJECT_ATTRIBUTES {
+// ULONG Length;
+// HANDLE RootDirectory;
+// PUNICODE_STRING ObjectName;
+// ULONG Attributes;
+// PVOID SecurityDescriptor;
+// PVOID SecurityQualityOfService;
+// } OBJECT_ATTRIBUTES;
+//
+// https://learn.microsoft.com/en-us/windows/win32/api/ntdef/ns-ntdef-_object_attributes
type objectAttributes struct {
Length uintptr
RootDirectory uintptr
@@ -49,6 +72,17 @@ type unicodeString struct {
Buffer uintptr
}
+// typedef struct _SECURITY_DESCRIPTOR {
+// BYTE Revision;
+// BYTE Sbz1;
+// SECURITY_DESCRIPTOR_CONTROL Control;
+// PSID Owner;
+// PSID Group;
+// PACL Sacl;
+// PACL Dacl;
+// } SECURITY_DESCRIPTOR, *PISECURITY_DESCRIPTOR;
+//
+// https://learn.microsoft.com/en-us/windows/win32/api/winnt/ns-winnt-security_descriptor
type securityDescriptor struct {
Revision byte
Sbz1 byte
@@ -80,6 +114,8 @@ type win32Pipe struct {
path string
}
+var _ PipeConn = (*win32Pipe)(nil)
+
type win32MessageBytePipe struct {
win32Pipe
writeClosed bool
@@ -103,6 +139,10 @@ func (f *win32Pipe) SetDeadline(t time.Time) error {
return f.SetWriteDeadline(t)
}
+func (f *win32Pipe) Disconnect() error {
+ return disconnectNamedPipe(f.win32File.handle)
+}
+
// CloseWrite closes the write side of a message pipe in byte mode.
func (f *win32MessageBytePipe) CloseWrite() error {
if f.writeClosed {
@@ -146,7 +186,7 @@ func (f *win32MessageBytePipe) Read(b []byte) (int, error) {
// zero-byte message, ensure that all future Read() calls
// also return EOF.
f.readEOF = true
- } else if err == syscall.ERROR_MORE_DATA { //nolint:errorlint // err is Errno
+ } else if err == windows.ERROR_MORE_DATA { //nolint:errorlint // err is Errno
// ERROR_MORE_DATA indicates that the pipe's read mode is message mode
// and the message still has more bytes. Treat this as a success, since
// this package presents all named pipes as byte streams.
@@ -164,21 +204,20 @@ func (s pipeAddress) String() string {
}
// tryDialPipe attempts to dial the pipe at `path` until `ctx` cancellation or timeout.
-func tryDialPipe(ctx context.Context, path *string, access fs.AccessMask) (syscall.Handle, error) {
+func tryDialPipe(ctx context.Context, path *string, access fs.AccessMask, impLevel PipeImpLevel) (windows.Handle, error) {
for {
select {
case <-ctx.Done():
- return syscall.Handle(0), ctx.Err()
+ return windows.Handle(0), ctx.Err()
default:
- wh, err := fs.CreateFile(*path,
+ h, err := fs.CreateFile(*path,
access,
0, // mode
nil, // security attributes
fs.OPEN_EXISTING,
- fs.FILE_FLAG_OVERLAPPED|fs.SECURITY_SQOS_PRESENT|fs.SECURITY_ANONYMOUS,
+ fs.FILE_FLAG_OVERLAPPED|fs.SECURITY_SQOS_PRESENT|fs.FileSQSFlag(impLevel),
0, // template file handle
)
- h := syscall.Handle(wh)
if err == nil {
return h, nil
}
@@ -214,15 +253,33 @@ func DialPipe(path string, timeout *time.Duration) (net.Conn, error) {
// DialPipeContext attempts to connect to a named pipe by `path` until `ctx`
// cancellation or timeout.
func DialPipeContext(ctx context.Context, path string) (net.Conn, error) {
- return DialPipeAccess(ctx, path, syscall.GENERIC_READ|syscall.GENERIC_WRITE)
+ return DialPipeAccess(ctx, path, uint32(fs.GENERIC_READ|fs.GENERIC_WRITE))
}
+// PipeImpLevel is an enumeration of impersonation levels that may be set
+// when calling DialPipeAccessImpersonation.
+type PipeImpLevel uint32
+
+const (
+ PipeImpLevelAnonymous = PipeImpLevel(fs.SECURITY_ANONYMOUS)
+ PipeImpLevelIdentification = PipeImpLevel(fs.SECURITY_IDENTIFICATION)
+ PipeImpLevelImpersonation = PipeImpLevel(fs.SECURITY_IMPERSONATION)
+ PipeImpLevelDelegation = PipeImpLevel(fs.SECURITY_DELEGATION)
+)
+
// DialPipeAccess attempts to connect to a named pipe by `path` with `access` until `ctx`
// cancellation or timeout.
func DialPipeAccess(ctx context.Context, path string, access uint32) (net.Conn, error) {
+ return DialPipeAccessImpLevel(ctx, path, access, PipeImpLevelAnonymous)
+}
+
+// DialPipeAccessImpLevel attempts to connect to a named pipe by `path` with
+// `access` at `impLevel` until `ctx` cancellation or timeout. The other
+// DialPipe* implementations use PipeImpLevelAnonymous.
+func DialPipeAccessImpLevel(ctx context.Context, path string, access uint32, impLevel PipeImpLevel) (net.Conn, error) {
var err error
- var h syscall.Handle
- h, err = tryDialPipe(ctx, &path, fs.AccessMask(access))
+ var h windows.Handle
+ h, err = tryDialPipe(ctx, &path, fs.AccessMask(access), impLevel)
if err != nil {
return nil, err
}
@@ -235,7 +292,7 @@ func DialPipeAccess(ctx context.Context, path string, access uint32) (net.Conn,
f, err := makeWin32File(h)
if err != nil {
- syscall.Close(h)
+ windows.Close(h)
return nil, err
}
@@ -255,7 +312,7 @@ type acceptResponse struct {
}
type win32PipeListener struct {
- firstHandle syscall.Handle
+ firstHandle windows.Handle
path string
config PipeConfig
acceptCh chan (chan acceptResponse)
@@ -263,8 +320,8 @@ type win32PipeListener struct {
doneCh chan int
}
-func makeServerPipeHandle(path string, sd []byte, c *PipeConfig, first bool) (syscall.Handle, error) {
- path16, err := syscall.UTF16FromString(path)
+func makeServerPipeHandle(path string, sd []byte, c *PipeConfig, first bool) (windows.Handle, error) {
+ path16, err := windows.UTF16FromString(path)
if err != nil {
return 0, &os.PathError{Op: "open", Path: path, Err: err}
}
@@ -280,16 +337,20 @@ func makeServerPipeHandle(path string, sd []byte, c *PipeConfig, first bool) (sy
).Err(); err != nil {
return 0, &os.PathError{Op: "open", Path: path, Err: err}
}
- defer localFree(ntPath.Buffer)
+ defer windows.LocalFree(windows.Handle(ntPath.Buffer)) //nolint:errcheck
oa.ObjectName = &ntPath
oa.Attributes = windows.OBJ_CASE_INSENSITIVE
// The security descriptor is only needed for the first pipe.
if first {
if sd != nil {
+ //todo: does `sdb` need to be allocated on the heap, or can go allocate it?
l := uint32(len(sd))
- sdb := localAlloc(0, l)
- defer localFree(sdb)
+ sdb, err := windows.LocalAlloc(0, l)
+ if err != nil {
+ return 0, fmt.Errorf("LocalAlloc for security descriptor with of length %d: %w", l, err)
+ }
+ defer windows.LocalFree(windows.Handle(sdb)) //nolint:errcheck
copy((*[0xffff]byte)(unsafe.Pointer(sdb))[:], sd)
oa.SecurityDescriptor = (*securityDescriptor)(unsafe.Pointer(sdb))
} else {
@@ -298,7 +359,7 @@ func makeServerPipeHandle(path string, sd []byte, c *PipeConfig, first bool) (sy
if err := rtlDefaultNpAcl(&dacl).Err(); err != nil {
return 0, fmt.Errorf("getting default named pipe ACL: %w", err)
}
- defer localFree(dacl)
+ defer windows.LocalFree(windows.Handle(dacl)) //nolint:errcheck
sdb := &securityDescriptor{
Revision: 1,
@@ -314,27 +375,27 @@ func makeServerPipeHandle(path string, sd []byte, c *PipeConfig, first bool) (sy
typ |= windows.FILE_PIPE_MESSAGE_TYPE
}
- disposition := uint32(windows.FILE_OPEN)
- access := uint32(syscall.GENERIC_READ | syscall.GENERIC_WRITE | syscall.SYNCHRONIZE)
+ disposition := fs.FILE_OPEN
+ access := fs.GENERIC_READ | fs.GENERIC_WRITE | fs.SYNCHRONIZE
if first {
- disposition = windows.FILE_CREATE
+ disposition = fs.FILE_CREATE
// By not asking for read or write access, the named pipe file system
// will put this pipe into an initially disconnected state, blocking
// client connections until the next call with first == false.
- access = syscall.SYNCHRONIZE
+ access = fs.SYNCHRONIZE
}
timeout := int64(-50 * 10000) // 50ms
var (
- h syscall.Handle
+ h windows.Handle
iosb ioStatusBlock
)
err = ntCreateNamedPipeFile(&h,
access,
&oa,
&iosb,
- syscall.FILE_SHARE_READ|syscall.FILE_SHARE_WRITE,
+ fs.FILE_SHARE_READ|fs.FILE_SHARE_WRITE,
disposition,
0,
typ,
@@ -359,7 +420,7 @@ func (l *win32PipeListener) makeServerPipe() (*win32File, error) {
}
f, err := makeWin32File(h)
if err != nil {
- syscall.Close(h)
+ windows.Close(h)
return nil, err
}
return f, nil
@@ -418,7 +479,7 @@ func (l *win32PipeListener) listenerRoutine() {
closed = err == ErrPipeListenerClosed //nolint:errorlint // err is Errno
}
}
- syscall.Close(l.firstHandle)
+ windows.Close(l.firstHandle)
l.firstHandle = 0
// Notify Close() and Accept() callers that the handle has been closed.
close(l.doneCh)
diff --git a/vendor/github.com/Microsoft/go-winio/privilege.go b/vendor/github.com/Microsoft/go-winio/privilege.go
index 0ff9dac906d..d9b90b6e861 100644
--- a/vendor/github.com/Microsoft/go-winio/privilege.go
+++ b/vendor/github.com/Microsoft/go-winio/privilege.go
@@ -9,7 +9,6 @@ import (
"fmt"
"runtime"
"sync"
- "syscall"
"unicode/utf16"
"golang.org/x/sys/windows"
@@ -18,8 +17,8 @@ import (
//sys adjustTokenPrivileges(token windows.Token, releaseAll bool, input *byte, outputSize uint32, output *byte, requiredSize *uint32) (success bool, err error) [true] = advapi32.AdjustTokenPrivileges
//sys impersonateSelf(level uint32) (err error) = advapi32.ImpersonateSelf
//sys revertToSelf() (err error) = advapi32.RevertToSelf
-//sys openThreadToken(thread syscall.Handle, accessMask uint32, openAsSelf bool, token *windows.Token) (err error) = advapi32.OpenThreadToken
-//sys getCurrentThread() (h syscall.Handle) = GetCurrentThread
+//sys openThreadToken(thread windows.Handle, accessMask uint32, openAsSelf bool, token *windows.Token) (err error) = advapi32.OpenThreadToken
+//sys getCurrentThread() (h windows.Handle) = GetCurrentThread
//sys lookupPrivilegeValue(systemName string, name string, luid *uint64) (err error) = advapi32.LookupPrivilegeValueW
//sys lookupPrivilegeName(systemName string, luid *uint64, buffer *uint16, size *uint32) (err error) = advapi32.LookupPrivilegeNameW
//sys lookupPrivilegeDisplayName(systemName string, name *uint16, buffer *uint16, size *uint32, languageId *uint32) (err error) = advapi32.LookupPrivilegeDisplayNameW
@@ -29,7 +28,7 @@ const (
SE_PRIVILEGE_ENABLED = windows.SE_PRIVILEGE_ENABLED
//revive:disable-next-line:var-naming ALL_CAPS
- ERROR_NOT_ALL_ASSIGNED syscall.Errno = windows.ERROR_NOT_ALL_ASSIGNED
+ ERROR_NOT_ALL_ASSIGNED windows.Errno = windows.ERROR_NOT_ALL_ASSIGNED
SeBackupPrivilege = "SeBackupPrivilege"
SeRestorePrivilege = "SeRestorePrivilege"
@@ -177,7 +176,7 @@ func newThreadToken() (windows.Token, error) {
}
var token windows.Token
- err = openThreadToken(getCurrentThread(), syscall.TOKEN_ADJUST_PRIVILEGES|syscall.TOKEN_QUERY, false, &token)
+ err = openThreadToken(getCurrentThread(), windows.TOKEN_ADJUST_PRIVILEGES|windows.TOKEN_QUERY, false, &token)
if err != nil {
rerr := revertToSelf()
if rerr != nil {
diff --git a/vendor/github.com/Microsoft/go-winio/sd.go b/vendor/github.com/Microsoft/go-winio/sd.go
index 5550ef6b61e..c3685e98e14 100644
--- a/vendor/github.com/Microsoft/go-winio/sd.go
+++ b/vendor/github.com/Microsoft/go-winio/sd.go
@@ -5,7 +5,7 @@ package winio
import (
"errors"
- "syscall"
+ "fmt"
"unsafe"
"golang.org/x/sys/windows"
@@ -15,10 +15,6 @@ import (
//sys lookupAccountSid(systemName *uint16, sid *byte, name *uint16, nameSize *uint32, refDomain *uint16, refDomainSize *uint32, sidNameUse *uint32) (err error) = advapi32.LookupAccountSidW
//sys convertSidToStringSid(sid *byte, str **uint16) (err error) = advapi32.ConvertSidToStringSidW
//sys convertStringSidToSid(str *uint16, sid **byte) (err error) = advapi32.ConvertStringSidToSidW
-//sys convertStringSecurityDescriptorToSecurityDescriptor(str string, revision uint32, sd *uintptr, size *uint32) (err error) = advapi32.ConvertStringSecurityDescriptorToSecurityDescriptorW
-//sys convertSecurityDescriptorToStringSecurityDescriptor(sd *byte, revision uint32, secInfo uint32, sddl **uint16, sddlSize *uint32) (err error) = advapi32.ConvertSecurityDescriptorToStringSecurityDescriptorW
-//sys localFree(mem uintptr) = LocalFree
-//sys getSecurityDescriptorLength(sd uintptr) (len uint32) = advapi32.GetSecurityDescriptorLength
type AccountLookupError struct {
Name string
@@ -64,7 +60,7 @@ func LookupSidByName(name string) (sid string, err error) {
var sidSize, sidNameUse, refDomainSize uint32
err = lookupAccountName(nil, name, nil, &sidSize, nil, &refDomainSize, &sidNameUse)
- if err != nil && err != syscall.ERROR_INSUFFICIENT_BUFFER { //nolint:errorlint // err is Errno
+ if err != nil && err != windows.ERROR_INSUFFICIENT_BUFFER { //nolint:errorlint // err is Errno
return "", &AccountLookupError{name, err}
}
sidBuffer := make([]byte, sidSize)
@@ -78,8 +74,8 @@ func LookupSidByName(name string) (sid string, err error) {
if err != nil {
return "", &AccountLookupError{name, err}
}
- sid = syscall.UTF16ToString((*[0xffff]uint16)(unsafe.Pointer(strBuffer))[:])
- localFree(uintptr(unsafe.Pointer(strBuffer)))
+ sid = windows.UTF16ToString((*[0xffff]uint16)(unsafe.Pointer(strBuffer))[:])
+ _, _ = windows.LocalFree(windows.Handle(unsafe.Pointer(strBuffer)))
return sid, nil
}
@@ -100,7 +96,7 @@ func LookupNameBySid(sid string) (name string, err error) {
if err = convertStringSidToSid(sidBuffer, &sidPtr); err != nil {
return "", &AccountLookupError{sid, err}
}
- defer localFree(uintptr(unsafe.Pointer(sidPtr)))
+ defer windows.LocalFree(windows.Handle(unsafe.Pointer(sidPtr))) //nolint:errcheck
var nameSize, refDomainSize, sidNameUse uint32
err = lookupAccountSid(nil, sidPtr, nil, &nameSize, nil, &refDomainSize, &sidNameUse)
@@ -120,25 +116,18 @@ func LookupNameBySid(sid string) (name string, err error) {
}
func SddlToSecurityDescriptor(sddl string) ([]byte, error) {
- var sdBuffer uintptr
- err := convertStringSecurityDescriptorToSecurityDescriptor(sddl, 1, &sdBuffer, nil)
+ sd, err := windows.SecurityDescriptorFromString(sddl)
if err != nil {
- return nil, &SddlConversionError{sddl, err}
+ return nil, &SddlConversionError{Sddl: sddl, Err: err}
}
- defer localFree(sdBuffer)
- sd := make([]byte, getSecurityDescriptorLength(sdBuffer))
- copy(sd, (*[0xffff]byte)(unsafe.Pointer(sdBuffer))[:len(sd)])
- return sd, nil
+ b := unsafe.Slice((*byte)(unsafe.Pointer(sd)), sd.Length())
+ return b, nil
}
func SecurityDescriptorToSddl(sd []byte) (string, error) {
- var sddl *uint16
- // The returned string length seems to include an arbitrary number of terminating NULs.
- // Don't use it.
- err := convertSecurityDescriptorToStringSecurityDescriptor(&sd[0], 1, 0xff, &sddl, nil)
- if err != nil {
- return "", err
+ if l := int(unsafe.Sizeof(windows.SECURITY_DESCRIPTOR{})); len(sd) < l {
+ return "", fmt.Errorf("SecurityDescriptor (%d) smaller than expected (%d): %w", len(sd), l, windows.ERROR_INCORRECT_SIZE)
}
- defer localFree(uintptr(unsafe.Pointer(sddl)))
- return syscall.UTF16ToString((*[0xffff]uint16)(unsafe.Pointer(sddl))[:]), nil
+ s := (*windows.SECURITY_DESCRIPTOR)(unsafe.Pointer(&sd[0]))
+ return s.String(), nil
}
diff --git a/vendor/github.com/Microsoft/go-winio/tools.go b/vendor/github.com/Microsoft/go-winio/tools.go
deleted file mode 100644
index 2aa045843ea..00000000000
--- a/vendor/github.com/Microsoft/go-winio/tools.go
+++ /dev/null
@@ -1,5 +0,0 @@
-//go:build tools
-
-package winio
-
-import _ "golang.org/x/tools/cmd/stringer"
diff --git a/vendor/github.com/Microsoft/go-winio/zsyscall_windows.go b/vendor/github.com/Microsoft/go-winio/zsyscall_windows.go
index 469b16f6398..89b66eda8cc 100644
--- a/vendor/github.com/Microsoft/go-winio/zsyscall_windows.go
+++ b/vendor/github.com/Microsoft/go-winio/zsyscall_windows.go
@@ -33,9 +33,6 @@ func errnoErr(e syscall.Errno) error {
case errnoERROR_IO_PENDING:
return errERROR_IO_PENDING
}
- // TODO: add more here, after collecting data on the common
- // error values see on Windows. (perhaps when running
- // all.bat?)
return e
}
@@ -45,38 +42,34 @@ var (
modntdll = windows.NewLazySystemDLL("ntdll.dll")
modws2_32 = windows.NewLazySystemDLL("ws2_32.dll")
- procAdjustTokenPrivileges = modadvapi32.NewProc("AdjustTokenPrivileges")
- procConvertSecurityDescriptorToStringSecurityDescriptorW = modadvapi32.NewProc("ConvertSecurityDescriptorToStringSecurityDescriptorW")
- procConvertSidToStringSidW = modadvapi32.NewProc("ConvertSidToStringSidW")
- procConvertStringSecurityDescriptorToSecurityDescriptorW = modadvapi32.NewProc("ConvertStringSecurityDescriptorToSecurityDescriptorW")
- procConvertStringSidToSidW = modadvapi32.NewProc("ConvertStringSidToSidW")
- procGetSecurityDescriptorLength = modadvapi32.NewProc("GetSecurityDescriptorLength")
- procImpersonateSelf = modadvapi32.NewProc("ImpersonateSelf")
- procLookupAccountNameW = modadvapi32.NewProc("LookupAccountNameW")
- procLookupAccountSidW = modadvapi32.NewProc("LookupAccountSidW")
- procLookupPrivilegeDisplayNameW = modadvapi32.NewProc("LookupPrivilegeDisplayNameW")
- procLookupPrivilegeNameW = modadvapi32.NewProc("LookupPrivilegeNameW")
- procLookupPrivilegeValueW = modadvapi32.NewProc("LookupPrivilegeValueW")
- procOpenThreadToken = modadvapi32.NewProc("OpenThreadToken")
- procRevertToSelf = modadvapi32.NewProc("RevertToSelf")
- procBackupRead = modkernel32.NewProc("BackupRead")
- procBackupWrite = modkernel32.NewProc("BackupWrite")
- procCancelIoEx = modkernel32.NewProc("CancelIoEx")
- procConnectNamedPipe = modkernel32.NewProc("ConnectNamedPipe")
- procCreateIoCompletionPort = modkernel32.NewProc("CreateIoCompletionPort")
- procCreateNamedPipeW = modkernel32.NewProc("CreateNamedPipeW")
- procGetCurrentThread = modkernel32.NewProc("GetCurrentThread")
- procGetNamedPipeHandleStateW = modkernel32.NewProc("GetNamedPipeHandleStateW")
- procGetNamedPipeInfo = modkernel32.NewProc("GetNamedPipeInfo")
- procGetQueuedCompletionStatus = modkernel32.NewProc("GetQueuedCompletionStatus")
- procLocalAlloc = modkernel32.NewProc("LocalAlloc")
- procLocalFree = modkernel32.NewProc("LocalFree")
- procSetFileCompletionNotificationModes = modkernel32.NewProc("SetFileCompletionNotificationModes")
- procNtCreateNamedPipeFile = modntdll.NewProc("NtCreateNamedPipeFile")
- procRtlDefaultNpAcl = modntdll.NewProc("RtlDefaultNpAcl")
- procRtlDosPathNameToNtPathName_U = modntdll.NewProc("RtlDosPathNameToNtPathName_U")
- procRtlNtStatusToDosErrorNoTeb = modntdll.NewProc("RtlNtStatusToDosErrorNoTeb")
- procWSAGetOverlappedResult = modws2_32.NewProc("WSAGetOverlappedResult")
+ procAdjustTokenPrivileges = modadvapi32.NewProc("AdjustTokenPrivileges")
+ procConvertSidToStringSidW = modadvapi32.NewProc("ConvertSidToStringSidW")
+ procConvertStringSidToSidW = modadvapi32.NewProc("ConvertStringSidToSidW")
+ procImpersonateSelf = modadvapi32.NewProc("ImpersonateSelf")
+ procLookupAccountNameW = modadvapi32.NewProc("LookupAccountNameW")
+ procLookupAccountSidW = modadvapi32.NewProc("LookupAccountSidW")
+ procLookupPrivilegeDisplayNameW = modadvapi32.NewProc("LookupPrivilegeDisplayNameW")
+ procLookupPrivilegeNameW = modadvapi32.NewProc("LookupPrivilegeNameW")
+ procLookupPrivilegeValueW = modadvapi32.NewProc("LookupPrivilegeValueW")
+ procOpenThreadToken = modadvapi32.NewProc("OpenThreadToken")
+ procRevertToSelf = modadvapi32.NewProc("RevertToSelf")
+ procBackupRead = modkernel32.NewProc("BackupRead")
+ procBackupWrite = modkernel32.NewProc("BackupWrite")
+ procCancelIoEx = modkernel32.NewProc("CancelIoEx")
+ procConnectNamedPipe = modkernel32.NewProc("ConnectNamedPipe")
+ procCreateIoCompletionPort = modkernel32.NewProc("CreateIoCompletionPort")
+ procCreateNamedPipeW = modkernel32.NewProc("CreateNamedPipeW")
+ procDisconnectNamedPipe = modkernel32.NewProc("DisconnectNamedPipe")
+ procGetCurrentThread = modkernel32.NewProc("GetCurrentThread")
+ procGetNamedPipeHandleStateW = modkernel32.NewProc("GetNamedPipeHandleStateW")
+ procGetNamedPipeInfo = modkernel32.NewProc("GetNamedPipeInfo")
+ procGetQueuedCompletionStatus = modkernel32.NewProc("GetQueuedCompletionStatus")
+ procSetFileCompletionNotificationModes = modkernel32.NewProc("SetFileCompletionNotificationModes")
+ procNtCreateNamedPipeFile = modntdll.NewProc("NtCreateNamedPipeFile")
+ procRtlDefaultNpAcl = modntdll.NewProc("RtlDefaultNpAcl")
+ procRtlDosPathNameToNtPathName_U = modntdll.NewProc("RtlDosPathNameToNtPathName_U")
+ procRtlNtStatusToDosErrorNoTeb = modntdll.NewProc("RtlNtStatusToDosErrorNoTeb")
+ procWSAGetOverlappedResult = modws2_32.NewProc("WSAGetOverlappedResult")
)
func adjustTokenPrivileges(token windows.Token, releaseAll bool, input *byte, outputSize uint32, output *byte, requiredSize *uint32) (success bool, err error) {
@@ -84,7 +77,7 @@ func adjustTokenPrivileges(token windows.Token, releaseAll bool, input *byte, ou
if releaseAll {
_p0 = 1
}
- r0, _, e1 := syscall.Syscall6(procAdjustTokenPrivileges.Addr(), 6, uintptr(token), uintptr(_p0), uintptr(unsafe.Pointer(input)), uintptr(outputSize), uintptr(unsafe.Pointer(output)), uintptr(unsafe.Pointer(requiredSize)))
+ r0, _, e1 := syscall.SyscallN(procAdjustTokenPrivileges.Addr(), uintptr(token), uintptr(_p0), uintptr(unsafe.Pointer(input)), uintptr(outputSize), uintptr(unsafe.Pointer(output)), uintptr(unsafe.Pointer(requiredSize)))
success = r0 != 0
if true {
err = errnoErr(e1)
@@ -92,33 +85,8 @@ func adjustTokenPrivileges(token windows.Token, releaseAll bool, input *byte, ou
return
}
-func convertSecurityDescriptorToStringSecurityDescriptor(sd *byte, revision uint32, secInfo uint32, sddl **uint16, sddlSize *uint32) (err error) {
- r1, _, e1 := syscall.Syscall6(procConvertSecurityDescriptorToStringSecurityDescriptorW.Addr(), 5, uintptr(unsafe.Pointer(sd)), uintptr(revision), uintptr(secInfo), uintptr(unsafe.Pointer(sddl)), uintptr(unsafe.Pointer(sddlSize)), 0)
- if r1 == 0 {
- err = errnoErr(e1)
- }
- return
-}
-
func convertSidToStringSid(sid *byte, str **uint16) (err error) {
- r1, _, e1 := syscall.Syscall(procConvertSidToStringSidW.Addr(), 2, uintptr(unsafe.Pointer(sid)), uintptr(unsafe.Pointer(str)), 0)
- if r1 == 0 {
- err = errnoErr(e1)
- }
- return
-}
-
-func convertStringSecurityDescriptorToSecurityDescriptor(str string, revision uint32, sd *uintptr, size *uint32) (err error) {
- var _p0 *uint16
- _p0, err = syscall.UTF16PtrFromString(str)
- if err != nil {
- return
- }
- return _convertStringSecurityDescriptorToSecurityDescriptor(_p0, revision, sd, size)
-}
-
-func _convertStringSecurityDescriptorToSecurityDescriptor(str *uint16, revision uint32, sd *uintptr, size *uint32) (err error) {
- r1, _, e1 := syscall.Syscall6(procConvertStringSecurityDescriptorToSecurityDescriptorW.Addr(), 4, uintptr(unsafe.Pointer(str)), uintptr(revision), uintptr(unsafe.Pointer(sd)), uintptr(unsafe.Pointer(size)), 0, 0)
+ r1, _, e1 := syscall.SyscallN(procConvertSidToStringSidW.Addr(), uintptr(unsafe.Pointer(sid)), uintptr(unsafe.Pointer(str)))
if r1 == 0 {
err = errnoErr(e1)
}
@@ -126,21 +94,15 @@ func _convertStringSecurityDescriptorToSecurityDescriptor(str *uint16, revision
}
func convertStringSidToSid(str *uint16, sid **byte) (err error) {
- r1, _, e1 := syscall.Syscall(procConvertStringSidToSidW.Addr(), 2, uintptr(unsafe.Pointer(str)), uintptr(unsafe.Pointer(sid)), 0)
+ r1, _, e1 := syscall.SyscallN(procConvertStringSidToSidW.Addr(), uintptr(unsafe.Pointer(str)), uintptr(unsafe.Pointer(sid)))
if r1 == 0 {
err = errnoErr(e1)
}
return
}
-func getSecurityDescriptorLength(sd uintptr) (len uint32) {
- r0, _, _ := syscall.Syscall(procGetSecurityDescriptorLength.Addr(), 1, uintptr(sd), 0, 0)
- len = uint32(r0)
- return
-}
-
func impersonateSelf(level uint32) (err error) {
- r1, _, e1 := syscall.Syscall(procImpersonateSelf.Addr(), 1, uintptr(level), 0, 0)
+ r1, _, e1 := syscall.SyscallN(procImpersonateSelf.Addr(), uintptr(level))
if r1 == 0 {
err = errnoErr(e1)
}
@@ -157,7 +119,7 @@ func lookupAccountName(systemName *uint16, accountName string, sid *byte, sidSiz
}
func _lookupAccountName(systemName *uint16, accountName *uint16, sid *byte, sidSize *uint32, refDomain *uint16, refDomainSize *uint32, sidNameUse *uint32) (err error) {
- r1, _, e1 := syscall.Syscall9(procLookupAccountNameW.Addr(), 7, uintptr(unsafe.Pointer(systemName)), uintptr(unsafe.Pointer(accountName)), uintptr(unsafe.Pointer(sid)), uintptr(unsafe.Pointer(sidSize)), uintptr(unsafe.Pointer(refDomain)), uintptr(unsafe.Pointer(refDomainSize)), uintptr(unsafe.Pointer(sidNameUse)), 0, 0)
+ r1, _, e1 := syscall.SyscallN(procLookupAccountNameW.Addr(), uintptr(unsafe.Pointer(systemName)), uintptr(unsafe.Pointer(accountName)), uintptr(unsafe.Pointer(sid)), uintptr(unsafe.Pointer(sidSize)), uintptr(unsafe.Pointer(refDomain)), uintptr(unsafe.Pointer(refDomainSize)), uintptr(unsafe.Pointer(sidNameUse)))
if r1 == 0 {
err = errnoErr(e1)
}
@@ -165,7 +127,7 @@ func _lookupAccountName(systemName *uint16, accountName *uint16, sid *byte, sidS
}
func lookupAccountSid(systemName *uint16, sid *byte, name *uint16, nameSize *uint32, refDomain *uint16, refDomainSize *uint32, sidNameUse *uint32) (err error) {
- r1, _, e1 := syscall.Syscall9(procLookupAccountSidW.Addr(), 7, uintptr(unsafe.Pointer(systemName)), uintptr(unsafe.Pointer(sid)), uintptr(unsafe.Pointer(name)), uintptr(unsafe.Pointer(nameSize)), uintptr(unsafe.Pointer(refDomain)), uintptr(unsafe.Pointer(refDomainSize)), uintptr(unsafe.Pointer(sidNameUse)), 0, 0)
+ r1, _, e1 := syscall.SyscallN(procLookupAccountSidW.Addr(), uintptr(unsafe.Pointer(systemName)), uintptr(unsafe.Pointer(sid)), uintptr(unsafe.Pointer(name)), uintptr(unsafe.Pointer(nameSize)), uintptr(unsafe.Pointer(refDomain)), uintptr(unsafe.Pointer(refDomainSize)), uintptr(unsafe.Pointer(sidNameUse)))
if r1 == 0 {
err = errnoErr(e1)
}
@@ -182,7 +144,7 @@ func lookupPrivilegeDisplayName(systemName string, name *uint16, buffer *uint16,
}
func _lookupPrivilegeDisplayName(systemName *uint16, name *uint16, buffer *uint16, size *uint32, languageId *uint32) (err error) {
- r1, _, e1 := syscall.Syscall6(procLookupPrivilegeDisplayNameW.Addr(), 5, uintptr(unsafe.Pointer(systemName)), uintptr(unsafe.Pointer(name)), uintptr(unsafe.Pointer(buffer)), uintptr(unsafe.Pointer(size)), uintptr(unsafe.Pointer(languageId)), 0)
+ r1, _, e1 := syscall.SyscallN(procLookupPrivilegeDisplayNameW.Addr(), uintptr(unsafe.Pointer(systemName)), uintptr(unsafe.Pointer(name)), uintptr(unsafe.Pointer(buffer)), uintptr(unsafe.Pointer(size)), uintptr(unsafe.Pointer(languageId)))
if r1 == 0 {
err = errnoErr(e1)
}
@@ -199,7 +161,7 @@ func lookupPrivilegeName(systemName string, luid *uint64, buffer *uint16, size *
}
func _lookupPrivilegeName(systemName *uint16, luid *uint64, buffer *uint16, size *uint32) (err error) {
- r1, _, e1 := syscall.Syscall6(procLookupPrivilegeNameW.Addr(), 4, uintptr(unsafe.Pointer(systemName)), uintptr(unsafe.Pointer(luid)), uintptr(unsafe.Pointer(buffer)), uintptr(unsafe.Pointer(size)), 0, 0)
+ r1, _, e1 := syscall.SyscallN(procLookupPrivilegeNameW.Addr(), uintptr(unsafe.Pointer(systemName)), uintptr(unsafe.Pointer(luid)), uintptr(unsafe.Pointer(buffer)), uintptr(unsafe.Pointer(size)))
if r1 == 0 {
err = errnoErr(e1)
}
@@ -221,19 +183,19 @@ func lookupPrivilegeValue(systemName string, name string, luid *uint64) (err err
}
func _lookupPrivilegeValue(systemName *uint16, name *uint16, luid *uint64) (err error) {
- r1, _, e1 := syscall.Syscall(procLookupPrivilegeValueW.Addr(), 3, uintptr(unsafe.Pointer(systemName)), uintptr(unsafe.Pointer(name)), uintptr(unsafe.Pointer(luid)))
+ r1, _, e1 := syscall.SyscallN(procLookupPrivilegeValueW.Addr(), uintptr(unsafe.Pointer(systemName)), uintptr(unsafe.Pointer(name)), uintptr(unsafe.Pointer(luid)))
if r1 == 0 {
err = errnoErr(e1)
}
return
}
-func openThreadToken(thread syscall.Handle, accessMask uint32, openAsSelf bool, token *windows.Token) (err error) {
+func openThreadToken(thread windows.Handle, accessMask uint32, openAsSelf bool, token *windows.Token) (err error) {
var _p0 uint32
if openAsSelf {
_p0 = 1
}
- r1, _, e1 := syscall.Syscall6(procOpenThreadToken.Addr(), 4, uintptr(thread), uintptr(accessMask), uintptr(_p0), uintptr(unsafe.Pointer(token)), 0, 0)
+ r1, _, e1 := syscall.SyscallN(procOpenThreadToken.Addr(), uintptr(thread), uintptr(accessMask), uintptr(_p0), uintptr(unsafe.Pointer(token)))
if r1 == 0 {
err = errnoErr(e1)
}
@@ -241,14 +203,14 @@ func openThreadToken(thread syscall.Handle, accessMask uint32, openAsSelf bool,
}
func revertToSelf() (err error) {
- r1, _, e1 := syscall.Syscall(procRevertToSelf.Addr(), 0, 0, 0, 0)
+ r1, _, e1 := syscall.SyscallN(procRevertToSelf.Addr())
if r1 == 0 {
err = errnoErr(e1)
}
return
}
-func backupRead(h syscall.Handle, b []byte, bytesRead *uint32, abort bool, processSecurity bool, context *uintptr) (err error) {
+func backupRead(h windows.Handle, b []byte, bytesRead *uint32, abort bool, processSecurity bool, context *uintptr) (err error) {
var _p0 *byte
if len(b) > 0 {
_p0 = &b[0]
@@ -261,14 +223,14 @@ func backupRead(h syscall.Handle, b []byte, bytesRead *uint32, abort bool, proce
if processSecurity {
_p2 = 1
}
- r1, _, e1 := syscall.Syscall9(procBackupRead.Addr(), 7, uintptr(h), uintptr(unsafe.Pointer(_p0)), uintptr(len(b)), uintptr(unsafe.Pointer(bytesRead)), uintptr(_p1), uintptr(_p2), uintptr(unsafe.Pointer(context)), 0, 0)
+ r1, _, e1 := syscall.SyscallN(procBackupRead.Addr(), uintptr(h), uintptr(unsafe.Pointer(_p0)), uintptr(len(b)), uintptr(unsafe.Pointer(bytesRead)), uintptr(_p1), uintptr(_p2), uintptr(unsafe.Pointer(context)))
if r1 == 0 {
err = errnoErr(e1)
}
return
}
-func backupWrite(h syscall.Handle, b []byte, bytesWritten *uint32, abort bool, processSecurity bool, context *uintptr) (err error) {
+func backupWrite(h windows.Handle, b []byte, bytesWritten *uint32, abort bool, processSecurity bool, context *uintptr) (err error) {
var _p0 *byte
if len(b) > 0 {
_p0 = &b[0]
@@ -281,39 +243,39 @@ func backupWrite(h syscall.Handle, b []byte, bytesWritten *uint32, abort bool, p
if processSecurity {
_p2 = 1
}
- r1, _, e1 := syscall.Syscall9(procBackupWrite.Addr(), 7, uintptr(h), uintptr(unsafe.Pointer(_p0)), uintptr(len(b)), uintptr(unsafe.Pointer(bytesWritten)), uintptr(_p1), uintptr(_p2), uintptr(unsafe.Pointer(context)), 0, 0)
+ r1, _, e1 := syscall.SyscallN(procBackupWrite.Addr(), uintptr(h), uintptr(unsafe.Pointer(_p0)), uintptr(len(b)), uintptr(unsafe.Pointer(bytesWritten)), uintptr(_p1), uintptr(_p2), uintptr(unsafe.Pointer(context)))
if r1 == 0 {
err = errnoErr(e1)
}
return
}
-func cancelIoEx(file syscall.Handle, o *syscall.Overlapped) (err error) {
- r1, _, e1 := syscall.Syscall(procCancelIoEx.Addr(), 2, uintptr(file), uintptr(unsafe.Pointer(o)), 0)
+func cancelIoEx(file windows.Handle, o *windows.Overlapped) (err error) {
+ r1, _, e1 := syscall.SyscallN(procCancelIoEx.Addr(), uintptr(file), uintptr(unsafe.Pointer(o)))
if r1 == 0 {
err = errnoErr(e1)
}
return
}
-func connectNamedPipe(pipe syscall.Handle, o *syscall.Overlapped) (err error) {
- r1, _, e1 := syscall.Syscall(procConnectNamedPipe.Addr(), 2, uintptr(pipe), uintptr(unsafe.Pointer(o)), 0)
+func connectNamedPipe(pipe windows.Handle, o *windows.Overlapped) (err error) {
+ r1, _, e1 := syscall.SyscallN(procConnectNamedPipe.Addr(), uintptr(pipe), uintptr(unsafe.Pointer(o)))
if r1 == 0 {
err = errnoErr(e1)
}
return
}
-func createIoCompletionPort(file syscall.Handle, port syscall.Handle, key uintptr, threadCount uint32) (newport syscall.Handle, err error) {
- r0, _, e1 := syscall.Syscall6(procCreateIoCompletionPort.Addr(), 4, uintptr(file), uintptr(port), uintptr(key), uintptr(threadCount), 0, 0)
- newport = syscall.Handle(r0)
+func createIoCompletionPort(file windows.Handle, port windows.Handle, key uintptr, threadCount uint32) (newport windows.Handle, err error) {
+ r0, _, e1 := syscall.SyscallN(procCreateIoCompletionPort.Addr(), uintptr(file), uintptr(port), uintptr(key), uintptr(threadCount))
+ newport = windows.Handle(r0)
if newport == 0 {
err = errnoErr(e1)
}
return
}
-func createNamedPipe(name string, flags uint32, pipeMode uint32, maxInstances uint32, outSize uint32, inSize uint32, defaultTimeout uint32, sa *syscall.SecurityAttributes) (handle syscall.Handle, err error) {
+func createNamedPipe(name string, flags uint32, pipeMode uint32, maxInstances uint32, outSize uint32, inSize uint32, defaultTimeout uint32, sa *windows.SecurityAttributes) (handle windows.Handle, err error) {
var _p0 *uint16
_p0, err = syscall.UTF16PtrFromString(name)
if err != nil {
@@ -322,96 +284,93 @@ func createNamedPipe(name string, flags uint32, pipeMode uint32, maxInstances ui
return _createNamedPipe(_p0, flags, pipeMode, maxInstances, outSize, inSize, defaultTimeout, sa)
}
-func _createNamedPipe(name *uint16, flags uint32, pipeMode uint32, maxInstances uint32, outSize uint32, inSize uint32, defaultTimeout uint32, sa *syscall.SecurityAttributes) (handle syscall.Handle, err error) {
- r0, _, e1 := syscall.Syscall9(procCreateNamedPipeW.Addr(), 8, uintptr(unsafe.Pointer(name)), uintptr(flags), uintptr(pipeMode), uintptr(maxInstances), uintptr(outSize), uintptr(inSize), uintptr(defaultTimeout), uintptr(unsafe.Pointer(sa)), 0)
- handle = syscall.Handle(r0)
- if handle == syscall.InvalidHandle {
+func _createNamedPipe(name *uint16, flags uint32, pipeMode uint32, maxInstances uint32, outSize uint32, inSize uint32, defaultTimeout uint32, sa *windows.SecurityAttributes) (handle windows.Handle, err error) {
+ r0, _, e1 := syscall.SyscallN(procCreateNamedPipeW.Addr(), uintptr(unsafe.Pointer(name)), uintptr(flags), uintptr(pipeMode), uintptr(maxInstances), uintptr(outSize), uintptr(inSize), uintptr(defaultTimeout), uintptr(unsafe.Pointer(sa)))
+ handle = windows.Handle(r0)
+ if handle == windows.InvalidHandle {
err = errnoErr(e1)
}
return
}
-func getCurrentThread() (h syscall.Handle) {
- r0, _, _ := syscall.Syscall(procGetCurrentThread.Addr(), 0, 0, 0, 0)
- h = syscall.Handle(r0)
- return
-}
-
-func getNamedPipeHandleState(pipe syscall.Handle, state *uint32, curInstances *uint32, maxCollectionCount *uint32, collectDataTimeout *uint32, userName *uint16, maxUserNameSize uint32) (err error) {
- r1, _, e1 := syscall.Syscall9(procGetNamedPipeHandleStateW.Addr(), 7, uintptr(pipe), uintptr(unsafe.Pointer(state)), uintptr(unsafe.Pointer(curInstances)), uintptr(unsafe.Pointer(maxCollectionCount)), uintptr(unsafe.Pointer(collectDataTimeout)), uintptr(unsafe.Pointer(userName)), uintptr(maxUserNameSize), 0, 0)
+func disconnectNamedPipe(pipe windows.Handle) (err error) {
+ r1, _, e1 := syscall.SyscallN(procDisconnectNamedPipe.Addr(), uintptr(pipe))
if r1 == 0 {
err = errnoErr(e1)
}
return
}
-func getNamedPipeInfo(pipe syscall.Handle, flags *uint32, outSize *uint32, inSize *uint32, maxInstances *uint32) (err error) {
- r1, _, e1 := syscall.Syscall6(procGetNamedPipeInfo.Addr(), 5, uintptr(pipe), uintptr(unsafe.Pointer(flags)), uintptr(unsafe.Pointer(outSize)), uintptr(unsafe.Pointer(inSize)), uintptr(unsafe.Pointer(maxInstances)), 0)
- if r1 == 0 {
- err = errnoErr(e1)
- }
+func getCurrentThread() (h windows.Handle) {
+ r0, _, _ := syscall.SyscallN(procGetCurrentThread.Addr())
+ h = windows.Handle(r0)
return
}
-func getQueuedCompletionStatus(port syscall.Handle, bytes *uint32, key *uintptr, o **ioOperation, timeout uint32) (err error) {
- r1, _, e1 := syscall.Syscall6(procGetQueuedCompletionStatus.Addr(), 5, uintptr(port), uintptr(unsafe.Pointer(bytes)), uintptr(unsafe.Pointer(key)), uintptr(unsafe.Pointer(o)), uintptr(timeout), 0)
+func getNamedPipeHandleState(pipe windows.Handle, state *uint32, curInstances *uint32, maxCollectionCount *uint32, collectDataTimeout *uint32, userName *uint16, maxUserNameSize uint32) (err error) {
+ r1, _, e1 := syscall.SyscallN(procGetNamedPipeHandleStateW.Addr(), uintptr(pipe), uintptr(unsafe.Pointer(state)), uintptr(unsafe.Pointer(curInstances)), uintptr(unsafe.Pointer(maxCollectionCount)), uintptr(unsafe.Pointer(collectDataTimeout)), uintptr(unsafe.Pointer(userName)), uintptr(maxUserNameSize))
if r1 == 0 {
err = errnoErr(e1)
}
return
}
-func localAlloc(uFlags uint32, length uint32) (ptr uintptr) {
- r0, _, _ := syscall.Syscall(procLocalAlloc.Addr(), 2, uintptr(uFlags), uintptr(length), 0)
- ptr = uintptr(r0)
+func getNamedPipeInfo(pipe windows.Handle, flags *uint32, outSize *uint32, inSize *uint32, maxInstances *uint32) (err error) {
+ r1, _, e1 := syscall.SyscallN(procGetNamedPipeInfo.Addr(), uintptr(pipe), uintptr(unsafe.Pointer(flags)), uintptr(unsafe.Pointer(outSize)), uintptr(unsafe.Pointer(inSize)), uintptr(unsafe.Pointer(maxInstances)))
+ if r1 == 0 {
+ err = errnoErr(e1)
+ }
return
}
-func localFree(mem uintptr) {
- syscall.Syscall(procLocalFree.Addr(), 1, uintptr(mem), 0, 0)
+func getQueuedCompletionStatus(port windows.Handle, bytes *uint32, key *uintptr, o **ioOperation, timeout uint32) (err error) {
+ r1, _, e1 := syscall.SyscallN(procGetQueuedCompletionStatus.Addr(), uintptr(port), uintptr(unsafe.Pointer(bytes)), uintptr(unsafe.Pointer(key)), uintptr(unsafe.Pointer(o)), uintptr(timeout))
+ if r1 == 0 {
+ err = errnoErr(e1)
+ }
return
}
-func setFileCompletionNotificationModes(h syscall.Handle, flags uint8) (err error) {
- r1, _, e1 := syscall.Syscall(procSetFileCompletionNotificationModes.Addr(), 2, uintptr(h), uintptr(flags), 0)
+func setFileCompletionNotificationModes(h windows.Handle, flags uint8) (err error) {
+ r1, _, e1 := syscall.SyscallN(procSetFileCompletionNotificationModes.Addr(), uintptr(h), uintptr(flags))
if r1 == 0 {
err = errnoErr(e1)
}
return
}
-func ntCreateNamedPipeFile(pipe *syscall.Handle, access uint32, oa *objectAttributes, iosb *ioStatusBlock, share uint32, disposition uint32, options uint32, typ uint32, readMode uint32, completionMode uint32, maxInstances uint32, inboundQuota uint32, outputQuota uint32, timeout *int64) (status ntStatus) {
- r0, _, _ := syscall.Syscall15(procNtCreateNamedPipeFile.Addr(), 14, uintptr(unsafe.Pointer(pipe)), uintptr(access), uintptr(unsafe.Pointer(oa)), uintptr(unsafe.Pointer(iosb)), uintptr(share), uintptr(disposition), uintptr(options), uintptr(typ), uintptr(readMode), uintptr(completionMode), uintptr(maxInstances), uintptr(inboundQuota), uintptr(outputQuota), uintptr(unsafe.Pointer(timeout)), 0)
+func ntCreateNamedPipeFile(pipe *windows.Handle, access ntAccessMask, oa *objectAttributes, iosb *ioStatusBlock, share ntFileShareMode, disposition ntFileCreationDisposition, options ntFileOptions, typ uint32, readMode uint32, completionMode uint32, maxInstances uint32, inboundQuota uint32, outputQuota uint32, timeout *int64) (status ntStatus) {
+ r0, _, _ := syscall.SyscallN(procNtCreateNamedPipeFile.Addr(), uintptr(unsafe.Pointer(pipe)), uintptr(access), uintptr(unsafe.Pointer(oa)), uintptr(unsafe.Pointer(iosb)), uintptr(share), uintptr(disposition), uintptr(options), uintptr(typ), uintptr(readMode), uintptr(completionMode), uintptr(maxInstances), uintptr(inboundQuota), uintptr(outputQuota), uintptr(unsafe.Pointer(timeout)))
status = ntStatus(r0)
return
}
func rtlDefaultNpAcl(dacl *uintptr) (status ntStatus) {
- r0, _, _ := syscall.Syscall(procRtlDefaultNpAcl.Addr(), 1, uintptr(unsafe.Pointer(dacl)), 0, 0)
+ r0, _, _ := syscall.SyscallN(procRtlDefaultNpAcl.Addr(), uintptr(unsafe.Pointer(dacl)))
status = ntStatus(r0)
return
}
func rtlDosPathNameToNtPathName(name *uint16, ntName *unicodeString, filePart uintptr, reserved uintptr) (status ntStatus) {
- r0, _, _ := syscall.Syscall6(procRtlDosPathNameToNtPathName_U.Addr(), 4, uintptr(unsafe.Pointer(name)), uintptr(unsafe.Pointer(ntName)), uintptr(filePart), uintptr(reserved), 0, 0)
+ r0, _, _ := syscall.SyscallN(procRtlDosPathNameToNtPathName_U.Addr(), uintptr(unsafe.Pointer(name)), uintptr(unsafe.Pointer(ntName)), uintptr(filePart), uintptr(reserved))
status = ntStatus(r0)
return
}
func rtlNtStatusToDosError(status ntStatus) (winerr error) {
- r0, _, _ := syscall.Syscall(procRtlNtStatusToDosErrorNoTeb.Addr(), 1, uintptr(status), 0, 0)
+ r0, _, _ := syscall.SyscallN(procRtlNtStatusToDosErrorNoTeb.Addr(), uintptr(status))
if r0 != 0 {
winerr = syscall.Errno(r0)
}
return
}
-func wsaGetOverlappedResult(h syscall.Handle, o *syscall.Overlapped, bytes *uint32, wait bool, flags *uint32) (err error) {
+func wsaGetOverlappedResult(h windows.Handle, o *windows.Overlapped, bytes *uint32, wait bool, flags *uint32) (err error) {
var _p0 uint32
if wait {
_p0 = 1
}
- r1, _, e1 := syscall.Syscall6(procWSAGetOverlappedResult.Addr(), 5, uintptr(h), uintptr(unsafe.Pointer(o)), uintptr(unsafe.Pointer(bytes)), uintptr(_p0), uintptr(unsafe.Pointer(flags)), 0)
+ r1, _, e1 := syscall.SyscallN(procWSAGetOverlappedResult.Addr(), uintptr(h), uintptr(unsafe.Pointer(o)), uintptr(unsafe.Pointer(bytes)), uintptr(_p0), uintptr(unsafe.Pointer(flags)))
if r1 == 0 {
err = errnoErr(e1)
}
diff --git a/vendor/github.com/Microsoft/hcsshim/LICENSE b/vendor/github.com/Microsoft/hcsshim/LICENSE
deleted file mode 100644
index 49d21669aee..00000000000
--- a/vendor/github.com/Microsoft/hcsshim/LICENSE
+++ /dev/null
@@ -1,21 +0,0 @@
-The MIT License (MIT)
-
-Copyright (c) 2015 Microsoft
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in all
-copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
-SOFTWARE.
\ No newline at end of file
diff --git a/vendor/github.com/Microsoft/hcsshim/osversion/osversion_windows.go b/vendor/github.com/Microsoft/hcsshim/osversion/osversion_windows.go
deleted file mode 100644
index 6c435d2b649..00000000000
--- a/vendor/github.com/Microsoft/hcsshim/osversion/osversion_windows.go
+++ /dev/null
@@ -1,59 +0,0 @@
-package osversion
-
-import (
- "fmt"
- "sync"
-
- "golang.org/x/sys/windows"
-)
-
-// OSVersion is a wrapper for Windows version information
-// https://msdn.microsoft.com/en-us/library/windows/desktop/ms724439(v=vs.85).aspx
-type OSVersion struct {
- Version uint32
- MajorVersion uint8
- MinorVersion uint8
- Build uint16
-}
-
-var (
- osv OSVersion
- once sync.Once
-)
-
-// Get gets the operating system version on Windows.
-// The calling application must be manifested to get the correct version information.
-func Get() OSVersion {
- once.Do(func() {
- var err error
- osv = OSVersion{}
- osv.Version, err = windows.GetVersion()
- if err != nil {
- // GetVersion never fails.
- panic(err)
- }
- osv.MajorVersion = uint8(osv.Version & 0xFF)
- osv.MinorVersion = uint8(osv.Version >> 8 & 0xFF)
- osv.Build = uint16(osv.Version >> 16)
- })
- return osv
-}
-
-// Build gets the build-number on Windows
-// The calling application must be manifested to get the correct version information.
-func Build() uint16 {
- return Get().Build
-}
-
-// String returns the OSVersion formatted as a string. It implements the
-// [fmt.Stringer] interface.
-func (osv OSVersion) String() string {
- return fmt.Sprintf("%d.%d.%d", osv.MajorVersion, osv.MinorVersion, osv.Build)
-}
-
-// ToString returns the OSVersion formatted as a string.
-//
-// Deprecated: use [OSVersion.String].
-func (osv OSVersion) ToString() string {
- return osv.String()
-}
diff --git a/vendor/github.com/Microsoft/hcsshim/osversion/platform_compat_windows.go b/vendor/github.com/Microsoft/hcsshim/osversion/platform_compat_windows.go
deleted file mode 100644
index f8d411ad7e2..00000000000
--- a/vendor/github.com/Microsoft/hcsshim/osversion/platform_compat_windows.go
+++ /dev/null
@@ -1,35 +0,0 @@
-package osversion
-
-// List of stable ABI compliant ltsc releases
-// Note: List must be sorted in ascending order
-var compatLTSCReleases = []uint16{
- V21H2Server,
-}
-
-// CheckHostAndContainerCompat checks if given host and container
-// OS versions are compatible.
-// It includes support for stable ABI compliant versions as well.
-// Every release after WS 2022 will support the previous ltsc
-// container image. Stable ABI is in preview mode for windows 11 client.
-// Refer: https://learn.microsoft.com/en-us/virtualization/windowscontainers/deploy-containers/version-compatibility?tabs=windows-server-2022%2Cwindows-10#windows-server-host-os-compatibility
-func CheckHostAndContainerCompat(host, ctr OSVersion) bool {
- // check major minor versions of host and guest
- if host.MajorVersion != ctr.MajorVersion ||
- host.MinorVersion != ctr.MinorVersion {
- return false
- }
-
- // If host is < WS 2022, exact version match is required
- if host.Build < V21H2Server {
- return host.Build == ctr.Build
- }
-
- var supportedLtscRelease uint16
- for i := len(compatLTSCReleases) - 1; i >= 0; i-- {
- if host.Build >= compatLTSCReleases[i] {
- supportedLtscRelease = compatLTSCReleases[i]
- break
- }
- }
- return ctr.Build >= supportedLtscRelease && ctr.Build <= host.Build
-}
diff --git a/vendor/github.com/Microsoft/hcsshim/osversion/windowsbuilds.go b/vendor/github.com/Microsoft/hcsshim/osversion/windowsbuilds.go
deleted file mode 100644
index 446369591a8..00000000000
--- a/vendor/github.com/Microsoft/hcsshim/osversion/windowsbuilds.go
+++ /dev/null
@@ -1,84 +0,0 @@
-package osversion
-
-// Windows Client and Server build numbers.
-//
-// See:
-// https://learn.microsoft.com/en-us/windows/release-health/release-information
-// https://learn.microsoft.com/en-us/windows/release-health/windows-server-release-info
-// https://learn.microsoft.com/en-us/windows/release-health/windows11-release-information
-const (
- // RS1 (version 1607, codename "Redstone 1") corresponds to Windows Server
- // 2016 (ltsc2016) and Windows 10 (Anniversary Update).
- RS1 = 14393
- // V1607 (version 1607, codename "Redstone 1") is an alias for [RS1].
- V1607 = RS1
- // LTSC2016 (Windows Server 2016) is an alias for [RS1].
- LTSC2016 = RS1
-
- // RS2 (version 1703, codename "Redstone 2") was a client-only update, and
- // corresponds to Windows 10 (Creators Update).
- RS2 = 15063
- // V1703 (version 1703, codename "Redstone 2") is an alias for [RS2].
- V1703 = RS2
-
- // RS3 (version 1709, codename "Redstone 3") corresponds to Windows Server
- // 1709 (Semi-Annual Channel (SAC)), and Windows 10 (Fall Creators Update).
- RS3 = 16299
- // V1709 (version 1709, codename "Redstone 3") is an alias for [RS3].
- V1709 = RS3
-
- // RS4 (version 1803, codename "Redstone 4") corresponds to Windows Server
- // 1803 (Semi-Annual Channel (SAC)), and Windows 10 (April 2018 Update).
- RS4 = 17134
- // V1803 (version 1803, codename "Redstone 4") is an alias for [RS4].
- V1803 = RS4
-
- // RS5 (version 1809, codename "Redstone 5") corresponds to Windows Server
- // 2019 (ltsc2019), and Windows 10 (October 2018 Update).
- RS5 = 17763
- // V1809 (version 1809, codename "Redstone 5") is an alias for [RS5].
- V1809 = RS5
- // LTSC2019 (Windows Server 2019) is an alias for [RS5].
- LTSC2019 = RS5
-
- // V19H1 (version 1903, codename 19H1) corresponds to Windows Server 1903 (semi-annual
- // channel).
- V19H1 = 18362
- // V1903 (version 1903) is an alias for [V19H1].
- V1903 = V19H1
-
- // V19H2 (version 1909, codename 19H2) corresponds to Windows Server 1909 (semi-annual
- // channel).
- V19H2 = 18363
- // V1909 (version 1909) is an alias for [V19H2].
- V1909 = V19H2
-
- // V20H1 (version 2004, codename 20H1) corresponds to Windows Server 2004 (semi-annual
- // channel).
- V20H1 = 19041
- // V2004 (version 2004) is an alias for [V20H1].
- V2004 = V20H1
-
- // V20H2 corresponds to Windows Server 20H2 (semi-annual channel).
- V20H2 = 19042
-
- // V21H1 corresponds to Windows Server 21H1 (semi-annual channel).
- V21H1 = 19043
-
- // V21H2Win10 corresponds to Windows 10 (November 2021 Update).
- V21H2Win10 = 19044
-
- // V21H2Server corresponds to Windows Server 2022 (ltsc2022).
- V21H2Server = 20348
- // LTSC2022 (Windows Server 2022) is an alias for [V21H2Server]
- LTSC2022 = V21H2Server
-
- // V21H2Win11 corresponds to Windows 11 (original release).
- V21H2Win11 = 22000
-
- // V22H2Win10 corresponds to Windows 10 (2022 Update).
- V22H2Win10 = 19045
-
- // V22H2Win11 corresponds to Windows 11 (2022 Update).
- V22H2Win11 = 22621
-)
diff --git a/vendor/github.com/asaskevich/govalidator/.travis.yml b/vendor/github.com/asaskevich/govalidator/.travis.yml
index 17c4d0a7107..bb83c6670df 100644
--- a/vendor/github.com/asaskevich/govalidator/.travis.yml
+++ b/vendor/github.com/asaskevich/govalidator/.travis.yml
@@ -1,18 +1,12 @@
-dist: bionic
language: go
-env: GO111MODULE=on GOFLAGS='-mod vendor'
-install: true
-email: false
-
+dist: xenial
go:
- - 1.10
- - 1.11
- - 1.12
- - 1.13
- - tip
+ - '1.10'
+ - '1.11'
+ - '1.12'
+ - '1.13'
+ - 'tip'
-before_script:
- - go install github.com/golangci/golangci-lint/cmd/golangci-lint
script:
- - golangci-lint run # run a bunch of code checkers/linters in parallel
- - go test -v -race ./... # Run all the tests with the race detector enabled
+ - go test -coverpkg=./... -coverprofile=coverage.info -timeout=5s
+ - bash <(curl -s https://codecov.io/bash)
diff --git a/vendor/github.com/asaskevich/govalidator/CODE_OF_CONDUCT.md b/vendor/github.com/asaskevich/govalidator/CODE_OF_CONDUCT.md
new file mode 100644
index 00000000000..4b462b0d81b
--- /dev/null
+++ b/vendor/github.com/asaskevich/govalidator/CODE_OF_CONDUCT.md
@@ -0,0 +1,43 @@
+# Contributor Code of Conduct
+
+This project adheres to [The Code Manifesto](http://codemanifesto.com)
+as its guidelines for contributor interactions.
+
+## The Code Manifesto
+
+We want to work in an ecosystem that empowers developers to reach their
+potential — one that encourages growth and effective collaboration. A space
+that is safe for all.
+
+A space such as this benefits everyone that participates in it. It encourages
+new developers to enter our field. It is through discussion and collaboration
+that we grow, and through growth that we improve.
+
+In the effort to create such a place, we hold to these values:
+
+1. **Discrimination limits us.** This includes discrimination on the basis of
+ race, gender, sexual orientation, gender identity, age, nationality,
+ technology and any other arbitrary exclusion of a group of people.
+2. **Boundaries honor us.** Your comfort levels are not everyone’s comfort
+ levels. Remember that, and if brought to your attention, heed it.
+3. **We are our biggest assets.** None of us were born masters of our trade.
+ Each of us has been helped along the way. Return that favor, when and where
+ you can.
+4. **We are resources for the future.** As an extension of #3, share what you
+ know. Make yourself a resource to help those that come after you.
+5. **Respect defines us.** Treat others as you wish to be treated. Make your
+ discussions, criticisms and debates from a position of respectfulness. Ask
+ yourself, is it true? Is it necessary? Is it constructive? Anything less is
+ unacceptable.
+6. **Reactions require grace.** Angry responses are valid, but abusive language
+ and vindictive actions are toxic. When something happens that offends you,
+ handle it assertively, but be respectful. Escalate reasonably, and try to
+ allow the offender an opportunity to explain themselves, and possibly
+ correct the issue.
+7. **Opinions are just that: opinions.** Each and every one of us, due to our
+ background and upbringing, have varying opinions. That is perfectly
+ acceptable. Remember this: if you respect your own opinions, you should
+ respect the opinions of others.
+8. **To err is human.** You might not intend it, but mistakes do happen and
+ contribute to build experience. Tolerate honest mistakes, and don't
+ hesitate to apologize if you make one yourself.
diff --git a/vendor/github.com/asaskevich/govalidator/LICENSE b/vendor/github.com/asaskevich/govalidator/LICENSE
index 2f9a31fadf6..cacba910240 100644
--- a/vendor/github.com/asaskevich/govalidator/LICENSE
+++ b/vendor/github.com/asaskevich/govalidator/LICENSE
@@ -1,6 +1,6 @@
The MIT License (MIT)
-Copyright (c) 2014 Alex Saskevich
+Copyright (c) 2014-2020 Alex Saskevich
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
diff --git a/vendor/github.com/asaskevich/govalidator/README.md b/vendor/github.com/asaskevich/govalidator/README.md
index 78f999e8341..2c3fc35eb64 100644
--- a/vendor/github.com/asaskevich/govalidator/README.md
+++ b/vendor/github.com/asaskevich/govalidator/README.md
@@ -1,7 +1,8 @@
govalidator
===========
-[](https://gitter.im/asaskevich/govalidator?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge) [](https://godoc.org/github.com/asaskevich/govalidator) [](https://coveralls.io/r/asaskevich/govalidator?branch=master) [](https://app.wercker.com/project/bykey/1ec990b09ea86c910d5f08b0e02c6043)
-[](https://travis-ci.org/asaskevich/govalidator) [](https://goreportcard.com/report/github.com/asaskevich/govalidator) [](http://go-search.org/view?id=github.com%2Fasaskevich%2Fgovalidator) [](#backers) [](#sponsors) [](https://app.fossa.io/projects/git%2Bgithub.com%2Fasaskevich%2Fgovalidator?ref=badge_shield)
+[](https://gitter.im/asaskevich/govalidator?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge) [](https://godoc.org/github.com/asaskevich/govalidator)
+[](https://travis-ci.org/asaskevich/govalidator)
+[](https://codecov.io/gh/asaskevich/govalidator) [](https://goreportcard.com/report/github.com/asaskevich/govalidator) [](http://go-search.org/view?id=github.com%2Fasaskevich%2Fgovalidator) [](#backers) [](#sponsors) [](https://app.fossa.io/projects/git%2Bgithub.com%2Fasaskevich%2Fgovalidator?ref=badge_shield)
A package of validators and sanitizers for strings, structs and collections. Based on [validator.js](https://github.com/chriso/validator.js).
@@ -176,6 +177,7 @@ func IsPrintableASCII(str string) bool
func IsRFC3339(str string) bool
func IsRFC3339WithoutZone(str string) bool
func IsRGBcolor(str string) bool
+func IsRegex(str string) bool
func IsRequestURI(rawurl string) bool
func IsRequestURL(rawurl string) bool
func IsRipeMD128(str string) bool
@@ -202,6 +204,7 @@ func IsUUID(str string) bool
func IsUUIDv3(str string) bool
func IsUUIDv4(str string) bool
func IsUUIDv5(str string) bool
+func IsULID(str string) bool
func IsUnixTime(str string) bool
func IsUpperCase(str string) bool
func IsVariableWidth(str string) bool
@@ -279,7 +282,7 @@ type User struct {
Age int `valid:"type(int)"`
Meta interface{} `valid:"type(string)"`
}
-result, err := govalidator.ValidateStruct(user{"Bob", 20, "meta"})
+result, err := govalidator.ValidateStruct(User{"Bob", 20, "meta"})
if err != nil {
println("error: " + err.Error())
}
@@ -381,6 +384,7 @@ Here is a list of available validators for struct fields (validator - used funct
"rfc3339WithoutZone": IsRFC3339WithoutZone,
"ISO3166Alpha2": IsISO3166Alpha2,
"ISO3166Alpha3": IsISO3166Alpha3,
+"ulid": IsULID,
```
Validators with parameters
@@ -392,6 +396,8 @@ Validators with parameters
"matches(pattern)": StringMatches,
"in(string1|string2|...|stringN)": IsIn,
"rsapub(keylength)" : IsRsaPub,
+"minstringlength(int): MinStringLength,
+"maxstringlength(int): MaxStringLength,
```
Validators with parameters for any type
diff --git a/vendor/github.com/asaskevich/govalidator/arrays.go b/vendor/github.com/asaskevich/govalidator/arrays.go
index 5bace2654d3..3e1da7cb480 100644
--- a/vendor/github.com/asaskevich/govalidator/arrays.go
+++ b/vendor/github.com/asaskevich/govalidator/arrays.go
@@ -9,6 +9,35 @@ type ResultIterator func(interface{}, int) interface{}
// ConditionIterator is the function that accepts element of slice/array and its index and returns boolean
type ConditionIterator func(interface{}, int) bool
+// ReduceIterator is the function that accepts two element of slice/array and returns result of merging those values
+type ReduceIterator func(interface{}, interface{}) interface{}
+
+// Some validates that any item of array corresponds to ConditionIterator. Returns boolean.
+func Some(array []interface{}, iterator ConditionIterator) bool {
+ res := false
+ for index, data := range array {
+ res = res || iterator(data, index)
+ }
+ return res
+}
+
+// Every validates that every item of array corresponds to ConditionIterator. Returns boolean.
+func Every(array []interface{}, iterator ConditionIterator) bool {
+ res := true
+ for index, data := range array {
+ res = res && iterator(data, index)
+ }
+ return res
+}
+
+// Reduce boils down a list of values into a single value by ReduceIterator
+func Reduce(array []interface{}, iterator ReduceIterator, initialValue interface{}) interface{} {
+ for _, data := range array {
+ initialValue = iterator(initialValue, data)
+ }
+ return initialValue
+}
+
// Each iterates over the slice and apply Iterator to every item
func Each(array []interface{}, iterator Iterator) {
for index, data := range array {
diff --git a/vendor/github.com/asaskevich/govalidator/converter.go b/vendor/github.com/asaskevich/govalidator/converter.go
index cf1e5d569ba..d68e990fc25 100644
--- a/vendor/github.com/asaskevich/govalidator/converter.go
+++ b/vendor/github.com/asaskevich/govalidator/converter.go
@@ -10,7 +10,7 @@ import (
// ToString convert the input to a string.
func ToString(obj interface{}) string {
res := fmt.Sprintf("%v", obj)
- return string(res)
+ return res
}
// ToJSON convert the input to a valid JSON string
@@ -23,12 +23,27 @@ func ToJSON(obj interface{}) (string, error) {
}
// ToFloat convert the input string to a float, or 0.0 if the input is not a float.
-func ToFloat(str string) (float64, error) {
- res, err := strconv.ParseFloat(str, 64)
- if err != nil {
- res = 0.0
+func ToFloat(value interface{}) (res float64, err error) {
+ val := reflect.ValueOf(value)
+
+ switch value.(type) {
+ case int, int8, int16, int32, int64:
+ res = float64(val.Int())
+ case uint, uint8, uint16, uint32, uint64:
+ res = float64(val.Uint())
+ case float32, float64:
+ res = val.Float()
+ case string:
+ res, err = strconv.ParseFloat(val.String(), 64)
+ if err != nil {
+ res = 0
+ }
+ default:
+ err = fmt.Errorf("ToInt: unknown interface type %T", value)
+ res = 0
}
- return res, err
+
+ return
}
// ToInt convert the input string or any int type to an integer type 64, or 0 if the input is not an integer.
@@ -40,6 +55,8 @@ func ToInt(value interface{}) (res int64, err error) {
res = val.Int()
case uint, uint8, uint16, uint32, uint64:
res = int64(val.Uint())
+ case float32, float64:
+ res = int64(val.Float())
case string:
if IsInt(val.String()) {
res, err = strconv.ParseInt(val.String(), 0, 64)
@@ -47,11 +64,11 @@ func ToInt(value interface{}) (res int64, err error) {
res = 0
}
} else {
- err = fmt.Errorf("math: square root of negative number %g", value)
+ err = fmt.Errorf("ToInt: invalid numeric format %g", value)
res = 0
}
default:
- err = fmt.Errorf("math: square root of negative number %g", value)
+ err = fmt.Errorf("ToInt: unknown interface type %T", value)
res = 0
}
diff --git a/vendor/github.com/asaskevich/govalidator/numerics.go b/vendor/github.com/asaskevich/govalidator/numerics.go
index 7e6c652e140..5041d9e8684 100644
--- a/vendor/github.com/asaskevich/govalidator/numerics.go
+++ b/vendor/github.com/asaskevich/govalidator/numerics.go
@@ -2,7 +2,6 @@ package govalidator
import (
"math"
- "reflect"
)
// Abs returns absolute value of number
@@ -41,7 +40,7 @@ func IsNonPositive(value float64) bool {
return value <= 0
}
-// InRange returns true if value lies between left and right border
+// InRangeInt returns true if value lies between left and right border
func InRangeInt(value, left, right interface{}) bool {
value64, _ := ToInt(value)
left64, _ := ToInt(left)
@@ -52,7 +51,7 @@ func InRangeInt(value, left, right interface{}) bool {
return value64 >= left64 && value64 <= right64
}
-// InRange returns true if value lies between left and right border
+// InRangeFloat32 returns true if value lies between left and right border
func InRangeFloat32(value, left, right float32) bool {
if left > right {
left, right = right, left
@@ -60,7 +59,7 @@ func InRangeFloat32(value, left, right float32) bool {
return value >= left && value <= right
}
-// InRange returns true if value lies between left and right border
+// InRangeFloat64 returns true if value lies between left and right border
func InRangeFloat64(value, left, right float64) bool {
if left > right {
left, right = right, left
@@ -68,20 +67,24 @@ func InRangeFloat64(value, left, right float64) bool {
return value >= left && value <= right
}
-// InRange returns true if value lies between left and right border, generic type to handle int, float32 or float64, all types must the same type
+// InRange returns true if value lies between left and right border, generic type to handle int, float32, float64 and string.
+// All types must the same type.
+// False if value doesn't lie in range or if it incompatible or not comparable
func InRange(value interface{}, left interface{}, right interface{}) bool {
-
- reflectValue := reflect.TypeOf(value).Kind()
- reflectLeft := reflect.TypeOf(left).Kind()
- reflectRight := reflect.TypeOf(right).Kind()
-
- if reflectValue == reflect.Int && reflectLeft == reflect.Int && reflectRight == reflect.Int {
- return InRangeInt(value.(int), left.(int), right.(int))
- } else if reflectValue == reflect.Float32 && reflectLeft == reflect.Float32 && reflectRight == reflect.Float32 {
- return InRangeFloat32(value.(float32), left.(float32), right.(float32))
- } else if reflectValue == reflect.Float64 && reflectLeft == reflect.Float64 && reflectRight == reflect.Float64 {
- return InRangeFloat64(value.(float64), left.(float64), right.(float64))
- } else {
+ switch value.(type) {
+ case int:
+ intValue, _ := ToInt(value)
+ intLeft, _ := ToInt(left)
+ intRight, _ := ToInt(right)
+ return InRangeInt(intValue, intLeft, intRight)
+ case float32, float64:
+ intValue, _ := ToFloat(value)
+ intLeft, _ := ToFloat(left)
+ intRight, _ := ToFloat(right)
+ return InRangeFloat64(intValue, intLeft, intRight)
+ case string:
+ return value.(string) >= left.(string) && value.(string) <= right.(string)
+ default:
return false
}
}
diff --git a/vendor/github.com/asaskevich/govalidator/patterns.go b/vendor/github.com/asaskevich/govalidator/patterns.go
index e55451cff57..bafc3765ea1 100644
--- a/vendor/github.com/asaskevich/govalidator/patterns.go
+++ b/vendor/github.com/asaskevich/govalidator/patterns.go
@@ -38,10 +38,12 @@ const (
URLPort string = `(:(\d{1,5}))`
URLIP string = `([1-9]\d?|1\d\d|2[01]\d|22[0-3]|24\d|25[0-5])(\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])){2}(?:\.([0-9]\d?|1\d\d|2[0-4]\d|25[0-5]))`
URLSubdomain string = `((www\.)|([a-zA-Z0-9]+([-_\.]?[a-zA-Z0-9])*[a-zA-Z0-9]\.[a-zA-Z0-9]+))`
- URL string = `^` + URLSchema + `?` + URLUsername + `?` + `((` + URLIP + `|(\[` + IP + `\])|(([a-zA-Z0-9]([a-zA-Z0-9-_]+)?[a-zA-Z0-9]([-\.][a-zA-Z0-9]+)*)|(` + URLSubdomain + `?))?(([a-zA-Z\x{00a1}-\x{ffff}0-9]+-?-?)*[a-zA-Z\x{00a1}-\x{ffff}0-9]+)(?:\.([a-zA-Z\x{00a1}-\x{ffff}]{1,}))?))\.?` + URLPort + `?` + URLPath + `?$`
+ URL = `^` + URLSchema + `?` + URLUsername + `?` + `((` + URLIP + `|(\[` + IP + `\])|(([a-zA-Z0-9]([a-zA-Z0-9-_]+)?[a-zA-Z0-9]([-\.][a-zA-Z0-9]+)*)|(` + URLSubdomain + `?))?(([a-zA-Z\x{00a1}-\x{ffff}0-9]+-?-?)*[a-zA-Z\x{00a1}-\x{ffff}0-9]+)(?:\.([a-zA-Z\x{00a1}-\x{ffff}]{1,}))?))\.?` + URLPort + `?` + URLPath + `?$`
SSN string = `^\d{3}[- ]?\d{2}[- ]?\d{4}$`
WinPath string = `^[a-zA-Z]:\\(?:[^\\/:*?"<>|\r\n]+\\)*[^\\/:*?"<>|\r\n]*$`
UnixPath string = `^(/[^/\x00]*)+/?$`
+ WinARPath string = `^(?:(?:[a-zA-Z]:|\\\\[a-z0-9_.$●-]+\\[a-z0-9_.$●-]+)\\|\\?[^\\/:*?"<>|\r\n]+\\?)(?:[^\\/:*?"<>|\r\n]+\\)*[^\\/:*?"<>|\r\n]*$`
+ UnixARPath string = `^((\.{0,2}/)?([^/\x00]*))+/?$`
Semver string = "^v?(?:0|[1-9]\\d*)\\.(?:0|[1-9]\\d*)\\.(?:0|[1-9]\\d*)(-(0|[1-9]\\d*|\\d*[a-zA-Z-][0-9a-zA-Z-]*)(\\.(0|[1-9]\\d*|\\d*[a-zA-Z-][0-9a-zA-Z-]*))*)?(\\+[0-9a-zA-Z-]+(\\.[0-9a-zA-Z-]+)*)?$"
tagName string = "valid"
hasLowerCase string = ".*[[:lower:]]"
@@ -49,6 +51,8 @@ const (
hasWhitespace string = ".*[[:space:]]"
hasWhitespaceOnly string = "^[[:space:]]+$"
IMEI string = "^[0-9a-f]{14}$|^\\d{15}$|^\\d{18}$"
+ IMSI string = "^\\d{14,15}$"
+ E164 string = `^\+?[1-9]\d{1,14}$`
)
// Used by IsFilePath func
@@ -96,10 +100,14 @@ var (
rxSSN = regexp.MustCompile(SSN)
rxWinPath = regexp.MustCompile(WinPath)
rxUnixPath = regexp.MustCompile(UnixPath)
+ rxARWinPath = regexp.MustCompile(WinARPath)
+ rxARUnixPath = regexp.MustCompile(UnixARPath)
rxSemver = regexp.MustCompile(Semver)
rxHasLowerCase = regexp.MustCompile(hasLowerCase)
rxHasUpperCase = regexp.MustCompile(hasUpperCase)
rxHasWhitespace = regexp.MustCompile(hasWhitespace)
rxHasWhitespaceOnly = regexp.MustCompile(hasWhitespaceOnly)
rxIMEI = regexp.MustCompile(IMEI)
+ rxIMSI = regexp.MustCompile(IMSI)
+ rxE164 = regexp.MustCompile(E164)
)
diff --git a/vendor/github.com/asaskevich/govalidator/types.go b/vendor/github.com/asaskevich/govalidator/types.go
index b57b666f57c..c573abb51af 100644
--- a/vendor/github.com/asaskevich/govalidator/types.go
+++ b/vendor/github.com/asaskevich/govalidator/types.go
@@ -14,8 +14,10 @@ type Validator func(str string) bool
// The second parameter should be the context (in the case of validating a struct: the whole object being validated).
type CustomTypeValidator func(i interface{}, o interface{}) bool
-// ParamValidator is a wrapper for validator functions that accepts additional parameters.
+// ParamValidator is a wrapper for validator functions that accept additional parameters.
type ParamValidator func(str string, params ...string) bool
+
+// InterfaceParamValidator is a wrapper for functions that accept variants parameters for an interface value
type InterfaceParamValidator func(in interface{}, params ...string) bool
type tagOptionsMap map[string]tagOption
@@ -72,13 +74,13 @@ var ParamTagMap = map[string]ParamValidator{
// ParamTagRegexMap maps param tags to their respective regexes.
var ParamTagRegexMap = map[string]*regexp.Regexp{
- "range": regexp.MustCompile("^range\\((\\d+)\\|(\\d+)\\)$"),
- "length": regexp.MustCompile("^length\\((\\d+)\\|(\\d+)\\)$"),
- "runelength": regexp.MustCompile("^runelength\\((\\d+)\\|(\\d+)\\)$"),
- "stringlength": regexp.MustCompile("^stringlength\\((\\d+)\\|(\\d+)\\)$"),
- "in": regexp.MustCompile(`^in\((.*)\)`),
- "matches": regexp.MustCompile(`^matches\((.+)\)$`),
- "rsapub": regexp.MustCompile("^rsapub\\((\\d+)\\)$"),
+ "range": regexp.MustCompile("^range\\((\\d+)\\|(\\d+)\\)$"),
+ "length": regexp.MustCompile("^length\\((\\d+)\\|(\\d+)\\)$"),
+ "runelength": regexp.MustCompile("^runelength\\((\\d+)\\|(\\d+)\\)$"),
+ "stringlength": regexp.MustCompile("^stringlength\\((\\d+)\\|(\\d+)\\)$"),
+ "in": regexp.MustCompile(`^in\((.*)\)`),
+ "matches": regexp.MustCompile(`^matches\((.+)\)$`),
+ "rsapub": regexp.MustCompile("^rsapub\\((\\d+)\\)$"),
"minstringlength": regexp.MustCompile("^minstringlength\\((\\d+)\\)$"),
"maxstringlength": regexp.MustCompile("^maxstringlength\\((\\d+)\\)$"),
}
@@ -163,6 +165,7 @@ var TagMap = map[string]Validator{
"ISO3166Alpha3": IsISO3166Alpha3,
"ISO4217": IsISO4217,
"IMEI": IsIMEI,
+ "ulid": IsULID,
}
// ISO3166Entry stores country codes
@@ -447,10 +450,10 @@ var ISO4217List = []string{
"PAB", "PEN", "PGK", "PHP", "PKR", "PLN", "PYG",
"QAR",
"RON", "RSD", "RUB", "RWF",
- "SAR", "SBD", "SCR", "SDG", "SEK", "SGD", "SHP", "SLL", "SOS", "SRD", "SSP", "STD", "SVC", "SYP", "SZL",
+ "SAR", "SBD", "SCR", "SDG", "SEK", "SGD", "SHP", "SLL", "SOS", "SRD", "SSP", "STD", "STN", "SVC", "SYP", "SZL",
"THB", "TJS", "TMT", "TND", "TOP", "TRY", "TTD", "TWD", "TZS",
- "UAH", "UGX", "USD", "USN", "UYI", "UYU", "UZS",
- "VEF", "VND", "VUV",
+ "UAH", "UGX", "USD", "USN", "UYI", "UYU", "UYW", "UZS",
+ "VEF", "VES", "VND", "VUV",
"WST",
"XAF", "XAG", "XAU", "XBA", "XBB", "XBC", "XBD", "XCD", "XDR", "XOF", "XPD", "XPF", "XPT", "XSU", "XTS", "XUA", "XXX",
"YER",
diff --git a/vendor/github.com/asaskevich/govalidator/validator.go b/vendor/github.com/asaskevich/govalidator/validator.go
index 298f9920d38..c9c4fac0655 100644
--- a/vendor/github.com/asaskevich/govalidator/validator.go
+++ b/vendor/github.com/asaskevich/govalidator/validator.go
@@ -32,7 +32,7 @@ var (
const maxURLRuneCount = 2083
const minURLRuneCount = 3
-const RF3339WithoutZone = "2006-01-02T15:04:05"
+const rfc3339WithoutZone = "2006-01-02T15:04:05"
// SetFieldsRequiredByDefault causes validation to fail when struct fields
// do not include validations or are not explicitly marked as exempt (using `valid:"-"` or `valid:"email,optional"`).
@@ -63,13 +63,13 @@ func SetNilPtrAllowedByRequired(value bool) {
nilPtrAllowedByRequired = value
}
-// IsEmail check if the string is an email.
+// IsEmail checks if the string is an email.
func IsEmail(str string) bool {
// TODO uppercase letters are not supported
return rxEmail.MatchString(str)
}
-// IsExistingEmail check if the string is an email of existing domain
+// IsExistingEmail checks if the string is an email of existing domain
func IsExistingEmail(email string) bool {
if len(email) < 6 || len(email) > 254 {
@@ -84,13 +84,13 @@ func IsExistingEmail(email string) bool {
if len(user) > 64 {
return false
}
- if userDotRegexp.MatchString(user) || !userRegexp.MatchString(user) || !hostRegexp.MatchString(host) {
- return false
- }
switch host {
case "localhost", "example.com":
return true
}
+ if userDotRegexp.MatchString(user) || !userRegexp.MatchString(user) || !hostRegexp.MatchString(host) {
+ return false
+ }
if _, err := net.LookupMX(host); err != nil {
if _, err := net.LookupIP(host); err != nil {
return false
@@ -100,7 +100,7 @@ func IsExistingEmail(email string) bool {
return true
}
-// IsURL check if the string is an URL.
+// IsURL checks if the string is an URL.
func IsURL(str string) bool {
if str == "" || utf8.RuneCountInString(str) >= maxURLRuneCount || len(str) <= minURLRuneCount || strings.HasPrefix(str, ".") {
return false
@@ -124,7 +124,7 @@ func IsURL(str string) bool {
return rxURL.MatchString(str)
}
-// IsRequestURL check if the string rawurl, assuming
+// IsRequestURL checks if the string rawurl, assuming
// it was received in an HTTP request, is a valid
// URL confirm to RFC 3986
func IsRequestURL(rawurl string) bool {
@@ -138,7 +138,7 @@ func IsRequestURL(rawurl string) bool {
return true
}
-// IsRequestURI check if the string rawurl, assuming
+// IsRequestURI checks if the string rawurl, assuming
// it was received in an HTTP request, is an
// absolute URI or an absolute path.
func IsRequestURI(rawurl string) bool {
@@ -146,7 +146,7 @@ func IsRequestURI(rawurl string) bool {
return err == nil
}
-// IsAlpha check if the string contains only letters (a-zA-Z). Empty string is valid.
+// IsAlpha checks if the string contains only letters (a-zA-Z). Empty string is valid.
func IsAlpha(str string) bool {
if IsNull(str) {
return true
@@ -154,7 +154,7 @@ func IsAlpha(str string) bool {
return rxAlpha.MatchString(str)
}
-//IsUTFLetter check if the string contains only unicode letter characters.
+//IsUTFLetter checks if the string contains only unicode letter characters.
//Similar to IsAlpha but for all languages. Empty string is valid.
func IsUTFLetter(str string) bool {
if IsNull(str) {
@@ -170,7 +170,7 @@ func IsUTFLetter(str string) bool {
}
-// IsAlphanumeric check if the string contains only letters and numbers. Empty string is valid.
+// IsAlphanumeric checks if the string contains only letters and numbers. Empty string is valid.
func IsAlphanumeric(str string) bool {
if IsNull(str) {
return true
@@ -178,7 +178,7 @@ func IsAlphanumeric(str string) bool {
return rxAlphanumeric.MatchString(str)
}
-// IsUTFLetterNumeric check if the string contains only unicode letters and numbers. Empty string is valid.
+// IsUTFLetterNumeric checks if the string contains only unicode letters and numbers. Empty string is valid.
func IsUTFLetterNumeric(str string) bool {
if IsNull(str) {
return true
@@ -192,7 +192,7 @@ func IsUTFLetterNumeric(str string) bool {
}
-// IsNumeric check if the string contains only numbers. Empty string is valid.
+// IsNumeric checks if the string contains only numbers. Empty string is valid.
func IsNumeric(str string) bool {
if IsNull(str) {
return true
@@ -200,7 +200,7 @@ func IsNumeric(str string) bool {
return rxNumeric.MatchString(str)
}
-// IsUTFNumeric check if the string contains only unicode numbers of any kind.
+// IsUTFNumeric checks if the string contains only unicode numbers of any kind.
// Numbers can be 0-9 but also Fractions ¾,Roman Ⅸ and Hangzhou 〩. Empty string is valid.
func IsUTFNumeric(str string) bool {
if IsNull(str) {
@@ -222,7 +222,7 @@ func IsUTFNumeric(str string) bool {
}
-// IsUTFDigit check if the string contains only unicode radix-10 decimal digits. Empty string is valid.
+// IsUTFDigit checks if the string contains only unicode radix-10 decimal digits. Empty string is valid.
func IsUTFDigit(str string) bool {
if IsNull(str) {
return true
@@ -243,22 +243,22 @@ func IsUTFDigit(str string) bool {
}
-// IsHexadecimal check if the string is a hexadecimal number.
+// IsHexadecimal checks if the string is a hexadecimal number.
func IsHexadecimal(str string) bool {
return rxHexadecimal.MatchString(str)
}
-// IsHexcolor check if the string is a hexadecimal color.
+// IsHexcolor checks if the string is a hexadecimal color.
func IsHexcolor(str string) bool {
return rxHexcolor.MatchString(str)
}
-// IsRGBcolor check if the string is a valid RGB color in form rgb(RRR, GGG, BBB).
+// IsRGBcolor checks if the string is a valid RGB color in form rgb(RRR, GGG, BBB).
func IsRGBcolor(str string) bool {
return rxRGBcolor.MatchString(str)
}
-// IsLowerCase check if the string is lowercase. Empty string is valid.
+// IsLowerCase checks if the string is lowercase. Empty string is valid.
func IsLowerCase(str string) bool {
if IsNull(str) {
return true
@@ -266,7 +266,7 @@ func IsLowerCase(str string) bool {
return str == strings.ToLower(str)
}
-// IsUpperCase check if the string is uppercase. Empty string is valid.
+// IsUpperCase checks if the string is uppercase. Empty string is valid.
func IsUpperCase(str string) bool {
if IsNull(str) {
return true
@@ -274,7 +274,7 @@ func IsUpperCase(str string) bool {
return str == strings.ToUpper(str)
}
-// HasLowerCase check if the string contains at least 1 lowercase. Empty string is valid.
+// HasLowerCase checks if the string contains at least 1 lowercase. Empty string is valid.
func HasLowerCase(str string) bool {
if IsNull(str) {
return true
@@ -282,7 +282,7 @@ func HasLowerCase(str string) bool {
return rxHasLowerCase.MatchString(str)
}
-// HasUpperCase check if the string contains as least 1 uppercase. Empty string is valid.
+// HasUpperCase checks if the string contains as least 1 uppercase. Empty string is valid.
func HasUpperCase(str string) bool {
if IsNull(str) {
return true
@@ -290,7 +290,7 @@ func HasUpperCase(str string) bool {
return rxHasUpperCase.MatchString(str)
}
-// IsInt check if the string is an integer. Empty string is valid.
+// IsInt checks if the string is an integer. Empty string is valid.
func IsInt(str string) bool {
if IsNull(str) {
return true
@@ -298,12 +298,12 @@ func IsInt(str string) bool {
return rxInt.MatchString(str)
}
-// IsFloat check if the string is a float.
+// IsFloat checks if the string is a float.
func IsFloat(str string) bool {
return str != "" && rxFloat.MatchString(str)
}
-// IsDivisibleBy check if the string is a number that's divisible by another.
+// IsDivisibleBy checks if the string is a number that's divisible by another.
// If second argument is not valid integer or zero, it's return false.
// Otherwise, if first argument is not valid integer or zero, it's return true (Invalid string converts to zero).
func IsDivisibleBy(str, num string) bool {
@@ -316,12 +316,12 @@ func IsDivisibleBy(str, num string) bool {
return (p == 0) || (p%q == 0)
}
-// IsNull check if the string is null.
+// IsNull checks if the string is null.
func IsNull(str string) bool {
return len(str) == 0
}
-// IsNotNull check if the string is not null.
+// IsNotNull checks if the string is not null.
func IsNotNull(str string) bool {
return !IsNull(str)
}
@@ -336,72 +336,158 @@ func HasWhitespace(str string) bool {
return len(str) > 0 && rxHasWhitespace.MatchString(str)
}
-// IsByteLength check if the string's length (in bytes) falls in a range.
+// IsByteLength checks if the string's length (in bytes) falls in a range.
func IsByteLength(str string, min, max int) bool {
return len(str) >= min && len(str) <= max
}
-// IsUUIDv3 check if the string is a UUID version 3.
+// IsUUIDv3 checks if the string is a UUID version 3.
func IsUUIDv3(str string) bool {
return rxUUID3.MatchString(str)
}
-// IsUUIDv4 check if the string is a UUID version 4.
+// IsUUIDv4 checks if the string is a UUID version 4.
func IsUUIDv4(str string) bool {
return rxUUID4.MatchString(str)
}
-// IsUUIDv5 check if the string is a UUID version 5.
+// IsUUIDv5 checks if the string is a UUID version 5.
func IsUUIDv5(str string) bool {
return rxUUID5.MatchString(str)
}
-// IsUUID check if the string is a UUID (version 3, 4 or 5).
+// IsUUID checks if the string is a UUID (version 3, 4 or 5).
func IsUUID(str string) bool {
return rxUUID.MatchString(str)
}
-// IsCreditCard check if the string is a credit card.
+// Byte to index table for O(1) lookups when unmarshaling.
+// We use 0xFF as sentinel value for invalid indexes.
+var ulidDec = [...]byte{
+ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x01,
+ 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E,
+ 0x0F, 0x10, 0x11, 0xFF, 0x12, 0x13, 0xFF, 0x14, 0x15, 0xFF,
+ 0x16, 0x17, 0x18, 0x19, 0x1A, 0xFF, 0x1B, 0x1C, 0x1D, 0x1E,
+ 0x1F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x0A, 0x0B, 0x0C,
+ 0x0D, 0x0E, 0x0F, 0x10, 0x11, 0xFF, 0x12, 0x13, 0xFF, 0x14,
+ 0x15, 0xFF, 0x16, 0x17, 0x18, 0x19, 0x1A, 0xFF, 0x1B, 0x1C,
+ 0x1D, 0x1E, 0x1F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+}
+
+// EncodedSize is the length of a text encoded ULID.
+const ulidEncodedSize = 26
+
+// IsULID checks if the string is a ULID.
+//
+// Implementation got from:
+// https://github.com/oklog/ulid (Apache-2.0 License)
+//
+func IsULID(str string) bool {
+ // Check if a base32 encoded ULID is the right length.
+ if len(str) != ulidEncodedSize {
+ return false
+ }
+
+ // Check if all the characters in a base32 encoded ULID are part of the
+ // expected base32 character set.
+ if ulidDec[str[0]] == 0xFF ||
+ ulidDec[str[1]] == 0xFF ||
+ ulidDec[str[2]] == 0xFF ||
+ ulidDec[str[3]] == 0xFF ||
+ ulidDec[str[4]] == 0xFF ||
+ ulidDec[str[5]] == 0xFF ||
+ ulidDec[str[6]] == 0xFF ||
+ ulidDec[str[7]] == 0xFF ||
+ ulidDec[str[8]] == 0xFF ||
+ ulidDec[str[9]] == 0xFF ||
+ ulidDec[str[10]] == 0xFF ||
+ ulidDec[str[11]] == 0xFF ||
+ ulidDec[str[12]] == 0xFF ||
+ ulidDec[str[13]] == 0xFF ||
+ ulidDec[str[14]] == 0xFF ||
+ ulidDec[str[15]] == 0xFF ||
+ ulidDec[str[16]] == 0xFF ||
+ ulidDec[str[17]] == 0xFF ||
+ ulidDec[str[18]] == 0xFF ||
+ ulidDec[str[19]] == 0xFF ||
+ ulidDec[str[20]] == 0xFF ||
+ ulidDec[str[21]] == 0xFF ||
+ ulidDec[str[22]] == 0xFF ||
+ ulidDec[str[23]] == 0xFF ||
+ ulidDec[str[24]] == 0xFF ||
+ ulidDec[str[25]] == 0xFF {
+ return false
+ }
+
+ // Check if the first character in a base32 encoded ULID will overflow. This
+ // happens because the base32 representation encodes 130 bits, while the
+ // ULID is only 128 bits.
+ //
+ // See https://github.com/oklog/ulid/issues/9 for details.
+ if str[0] > '7' {
+ return false
+ }
+ return true
+}
+
+// IsCreditCard checks if the string is a credit card.
func IsCreditCard(str string) bool {
- sanitized := notNumberRegexp.ReplaceAllString(str, "")
+ sanitized := whiteSpacesAndMinus.ReplaceAllString(str, "")
if !rxCreditCard.MatchString(sanitized) {
return false
}
+
+ number, _ := ToInt(sanitized)
+ number, lastDigit := number / 10, number % 10
+
var sum int64
- var digit string
- var tmpNum int64
- var shouldDouble bool
- for i := len(sanitized) - 1; i >= 0; i-- {
- digit = sanitized[i:(i + 1)]
- tmpNum, _ = ToInt(digit)
- if shouldDouble {
- tmpNum *= 2
- if tmpNum >= 10 {
- sum += ((tmpNum % 10) + 1)
- } else {
- sum += tmpNum
+ for i:=0; number > 0; i++ {
+ digit := number % 10
+
+ if i % 2 == 0 {
+ digit *= 2
+ if digit > 9 {
+ digit -= 9
}
- } else {
- sum += tmpNum
}
- shouldDouble = !shouldDouble
+
+ sum += digit
+ number = number / 10
}
-
- return sum%10 == 0
+
+ return (sum + lastDigit) % 10 == 0
}
-// IsISBN10 check if the string is an ISBN version 10.
+// IsISBN10 checks if the string is an ISBN version 10.
func IsISBN10(str string) bool {
return IsISBN(str, 10)
}
-// IsISBN13 check if the string is an ISBN version 13.
+// IsISBN13 checks if the string is an ISBN version 13.
func IsISBN13(str string) bool {
return IsISBN(str, 13)
}
-// IsISBN check if the string is an ISBN (version 10 or 13).
-// If version value is not equal to 10 or 13, it will be check both variants.
+// IsISBN checks if the string is an ISBN (version 10 or 13).
+// If version value is not equal to 10 or 13, it will be checks both variants.
func IsISBN(str string, version int) bool {
sanitized := whiteSpacesAndMinus.ReplaceAllString(str, "")
var checksum int32
@@ -435,13 +521,13 @@ func IsISBN(str string, version int) bool {
return IsISBN(str, 10) || IsISBN(str, 13)
}
-// IsJSON check if the string is valid JSON (note: uses json.Unmarshal).
+// IsJSON checks if the string is valid JSON (note: uses json.Unmarshal).
func IsJSON(str string) bool {
var js json.RawMessage
return json.Unmarshal([]byte(str), &js) == nil
}
-// IsMultibyte check if the string contains one or more multibyte chars. Empty string is valid.
+// IsMultibyte checks if the string contains one or more multibyte chars. Empty string is valid.
func IsMultibyte(str string) bool {
if IsNull(str) {
return true
@@ -449,7 +535,7 @@ func IsMultibyte(str string) bool {
return rxMultibyte.MatchString(str)
}
-// IsASCII check if the string contains ASCII chars only. Empty string is valid.
+// IsASCII checks if the string contains ASCII chars only. Empty string is valid.
func IsASCII(str string) bool {
if IsNull(str) {
return true
@@ -457,7 +543,7 @@ func IsASCII(str string) bool {
return rxASCII.MatchString(str)
}
-// IsPrintableASCII check if the string contains printable ASCII chars only. Empty string is valid.
+// IsPrintableASCII checks if the string contains printable ASCII chars only. Empty string is valid.
func IsPrintableASCII(str string) bool {
if IsNull(str) {
return true
@@ -465,7 +551,7 @@ func IsPrintableASCII(str string) bool {
return rxPrintableASCII.MatchString(str)
}
-// IsFullWidth check if the string contains any full-width chars. Empty string is valid.
+// IsFullWidth checks if the string contains any full-width chars. Empty string is valid.
func IsFullWidth(str string) bool {
if IsNull(str) {
return true
@@ -473,7 +559,7 @@ func IsFullWidth(str string) bool {
return rxFullWidth.MatchString(str)
}
-// IsHalfWidth check if the string contains any half-width chars. Empty string is valid.
+// IsHalfWidth checks if the string contains any half-width chars. Empty string is valid.
func IsHalfWidth(str string) bool {
if IsNull(str) {
return true
@@ -481,7 +567,7 @@ func IsHalfWidth(str string) bool {
return rxHalfWidth.MatchString(str)
}
-// IsVariableWidth check if the string contains a mixture of full and half-width chars. Empty string is valid.
+// IsVariableWidth checks if the string contains a mixture of full and half-width chars. Empty string is valid.
func IsVariableWidth(str string) bool {
if IsNull(str) {
return true
@@ -489,12 +575,12 @@ func IsVariableWidth(str string) bool {
return rxHalfWidth.MatchString(str) && rxFullWidth.MatchString(str)
}
-// IsBase64 check if a string is base64 encoded.
+// IsBase64 checks if a string is base64 encoded.
func IsBase64(str string) bool {
return rxBase64.MatchString(str)
}
-// IsFilePath check is a string is Win or Unix file path and returns it's type.
+// IsFilePath checks is a string is Win or Unix file path and returns it's type.
func IsFilePath(str string) (bool, int) {
if rxWinPath.MatchString(str) {
//check windows path limit see:
@@ -509,6 +595,27 @@ func IsFilePath(str string) (bool, int) {
return false, Unknown
}
+//IsWinFilePath checks both relative & absolute paths in Windows
+func IsWinFilePath(str string) bool {
+ if rxARWinPath.MatchString(str) {
+ //check windows path limit see:
+ // http://msdn.microsoft.com/en-us/library/aa365247(VS.85).aspx#maxpath
+ if len(str[3:]) > 32767 {
+ return false
+ }
+ return true
+ }
+ return false
+}
+
+//IsUnixFilePath checks both relative & absolute paths in Unix
+func IsUnixFilePath(str string) bool {
+ if rxARUnixPath.MatchString(str) {
+ return true
+ }
+ return false
+}
+
// IsDataURI checks if a string is base64 encoded data URI such as an image
func IsDataURI(str string) bool {
dataURI := strings.Split(str, ",")
@@ -586,11 +693,13 @@ func IsHash(str string, algorithm string) bool {
len = "40"
} else if algo == "tiger192" {
len = "48"
- } else if algo == "sha256" {
+ } else if algo == "sha3-224" {
+ len = "56"
+ } else if algo == "sha256" || algo == "sha3-256" {
len = "64"
- } else if algo == "sha384" {
+ } else if algo == "sha384" || algo == "sha3-384" {
len = "96"
- } else if algo == "sha512" {
+ } else if algo == "sha512" || algo == "sha3-512" {
len = "128"
} else {
return false
@@ -599,6 +708,26 @@ func IsHash(str string, algorithm string) bool {
return Matches(str, "^[a-f0-9]{"+len+"}$")
}
+// IsSHA3224 checks is a string is a SHA3-224 hash. Alias for `IsHash(str, "sha3-224")`
+func IsSHA3224(str string) bool {
+ return IsHash(str, "sha3-224")
+}
+
+// IsSHA3256 checks is a string is a SHA3-256 hash. Alias for `IsHash(str, "sha3-256")`
+func IsSHA3256(str string) bool {
+ return IsHash(str, "sha3-256")
+}
+
+// IsSHA3384 checks is a string is a SHA3-384 hash. Alias for `IsHash(str, "sha3-384")`
+func IsSHA3384(str string) bool {
+ return IsHash(str, "sha3-384")
+}
+
+// IsSHA3512 checks is a string is a SHA3-512 hash. Alias for `IsHash(str, "sha3-512")`
+func IsSHA3512(str string) bool {
+ return IsHash(str, "sha3-512")
+}
+
// IsSHA512 checks is a string is a SHA512 hash. Alias for `IsHash(str, "sha512")`
func IsSHA512(str string) bool {
return IsHash(str, "sha512")
@@ -686,25 +815,25 @@ func IsPort(str string) bool {
return false
}
-// IsIPv4 check if the string is an IP version 4.
+// IsIPv4 checks if the string is an IP version 4.
func IsIPv4(str string) bool {
ip := net.ParseIP(str)
return ip != nil && strings.Contains(str, ".")
}
-// IsIPv6 check if the string is an IP version 6.
+// IsIPv6 checks if the string is an IP version 6.
func IsIPv6(str string) bool {
ip := net.ParseIP(str)
return ip != nil && strings.Contains(str, ":")
}
-// IsCIDR check if the string is an valid CIDR notiation (IPV4 & IPV6)
+// IsCIDR checks if the string is an valid CIDR notiation (IPV4 & IPV6)
func IsCIDR(str string) bool {
_, _, err := net.ParseCIDR(str)
return err == nil
}
-// IsMAC check if a string is valid MAC address.
+// IsMAC checks if a string is valid MAC address.
// Possible MAC formats:
// 01:23:45:67:89:ab
// 01:23:45:67:89:ab:cd:ef
@@ -722,27 +851,70 @@ func IsHost(str string) bool {
return IsIP(str) || IsDNSName(str)
}
-// IsMongoID check if the string is a valid hex-encoded representation of a MongoDB ObjectId.
+// IsMongoID checks if the string is a valid hex-encoded representation of a MongoDB ObjectId.
func IsMongoID(str string) bool {
return rxHexadecimal.MatchString(str) && (len(str) == 24)
}
-// IsLatitude check if a string is valid latitude.
+// IsLatitude checks if a string is valid latitude.
func IsLatitude(str string) bool {
return rxLatitude.MatchString(str)
}
-// IsLongitude check if a string is valid longitude.
+// IsLongitude checks if a string is valid longitude.
func IsLongitude(str string) bool {
return rxLongitude.MatchString(str)
}
-// IsIMEI check if a string is valid IMEI
+// IsIMEI checks if a string is valid IMEI
func IsIMEI(str string) bool {
return rxIMEI.MatchString(str)
}
-// IsRsaPublicKey check if a string is valid public key with provided length
+// IsIMSI checks if a string is valid IMSI
+func IsIMSI(str string) bool {
+ if !rxIMSI.MatchString(str) {
+ return false
+ }
+
+ mcc, err := strconv.ParseInt(str[0:3], 10, 32)
+ if err != nil {
+ return false
+ }
+
+ switch mcc {
+ case 202, 204, 206, 208, 212, 213, 214, 216, 218, 219:
+ case 220, 221, 222, 226, 228, 230, 231, 232, 234, 235:
+ case 238, 240, 242, 244, 246, 247, 248, 250, 255, 257:
+ case 259, 260, 262, 266, 268, 270, 272, 274, 276, 278:
+ case 280, 282, 283, 284, 286, 288, 289, 290, 292, 293:
+ case 294, 295, 297, 302, 308, 310, 311, 312, 313, 314:
+ case 315, 316, 330, 332, 334, 338, 340, 342, 344, 346:
+ case 348, 350, 352, 354, 356, 358, 360, 362, 363, 364:
+ case 365, 366, 368, 370, 372, 374, 376, 400, 401, 402:
+ case 404, 405, 406, 410, 412, 413, 414, 415, 416, 417:
+ case 418, 419, 420, 421, 422, 424, 425, 426, 427, 428:
+ case 429, 430, 431, 432, 434, 436, 437, 438, 440, 441:
+ case 450, 452, 454, 455, 456, 457, 460, 461, 466, 467:
+ case 470, 472, 502, 505, 510, 514, 515, 520, 525, 528:
+ case 530, 536, 537, 539, 540, 541, 542, 543, 544, 545:
+ case 546, 547, 548, 549, 550, 551, 552, 553, 554, 555:
+ case 602, 603, 604, 605, 606, 607, 608, 609, 610, 611:
+ case 612, 613, 614, 615, 616, 617, 618, 619, 620, 621:
+ case 622, 623, 624, 625, 626, 627, 628, 629, 630, 631:
+ case 632, 633, 634, 635, 636, 637, 638, 639, 640, 641:
+ case 642, 643, 645, 646, 647, 648, 649, 650, 651, 652:
+ case 653, 654, 655, 657, 658, 659, 702, 704, 706, 708:
+ case 710, 712, 714, 716, 722, 724, 730, 732, 734, 736:
+ case 738, 740, 742, 744, 746, 748, 750, 995:
+ return true
+ default:
+ return false
+ }
+ return true
+}
+
+// IsRsaPublicKey checks if a string is valid public key with provided length
func IsRsaPublicKey(str string, keylen int) bool {
bb := bytes.NewBufferString(str)
pemBytes, err := ioutil.ReadAll(bb)
@@ -776,6 +948,14 @@ func IsRsaPublicKey(str string, keylen int) bool {
return bitlen == int(keylen)
}
+// IsRegex checks if a give string is a valid regex with RE2 syntax or not
+func IsRegex(str string) bool {
+ if _, err := regexp.Compile(str); err == nil {
+ return true
+ }
+ return false
+}
+
func toJSONName(tag string) string {
if tag == "" {
return ""
@@ -796,7 +976,7 @@ func toJSONName(tag string) string {
return name
}
-func PrependPathToErrors(err error, path string) error {
+func prependPathToErrors(err error, path string) error {
switch err2 := err.(type) {
case Error:
err2.Path = append([]string{path}, err2.Path...)
@@ -804,13 +984,18 @@ func PrependPathToErrors(err error, path string) error {
case Errors:
errors := err2.Errors()
for i, err3 := range errors {
- errors[i] = PrependPathToErrors(err3, path)
+ errors[i] = prependPathToErrors(err3, path)
}
return err2
}
return err
}
+// ValidateArray performs validation according to condition iterator that validates every element of the array
+func ValidateArray(array []interface{}, iterator ConditionIterator) bool {
+ return Every(array, iterator)
+}
+
// ValidateMap use validation map for fields.
// result will be equal to `false` if there are any errors.
// s is the map containing the data to be validated.
@@ -832,7 +1017,7 @@ func ValidateMap(s map[string]interface{}, m map[string]interface{}) (bool, erro
presentResult = false
var err error
err = fmt.Errorf("all map keys has to be present in the validation map; got %s", key)
- err = PrependPathToErrors(err, key)
+ err = prependPathToErrors(err, key)
errs = append(errs, err)
}
valueField := reflect.ValueOf(value)
@@ -846,13 +1031,13 @@ func ValidateMap(s map[string]interface{}, m map[string]interface{}) (bool, erro
if v, ok := value.(map[string]interface{}); !ok {
mapResult = false
err = fmt.Errorf("map validator has to be for the map type only; got %s", valueField.Type().String())
- err = PrependPathToErrors(err, key)
+ err = prependPathToErrors(err, key)
errs = append(errs, err)
} else {
mapResult, err = ValidateMap(v, subValidator)
if err != nil {
mapResult = false
- err = PrependPathToErrors(err, key)
+ err = prependPathToErrors(err, key)
errs = append(errs, err)
}
}
@@ -863,7 +1048,7 @@ func ValidateMap(s map[string]interface{}, m map[string]interface{}) (bool, erro
var err error
structResult, err = ValidateStruct(valueField.Interface())
if err != nil {
- err = PrependPathToErrors(err, key)
+ err = prependPathToErrors(err, key)
errs = append(errs, err)
}
}
@@ -884,13 +1069,13 @@ func ValidateMap(s map[string]interface{}, m map[string]interface{}) (bool, erro
default:
typeResult = false
err = fmt.Errorf("map validator has to be either map[string]interface{} or string; got %s", valueField.Type().String())
- err = PrependPathToErrors(err, key)
+ err = prependPathToErrors(err, key)
errs = append(errs, err)
}
result = result && presentResult && typeResult && resultField && structResult && mapResult
index++
}
- // check required keys
+ // checks required keys
requiredResult := true
for key, value := range m {
if schema, ok := value.(string); ok {
@@ -949,7 +1134,7 @@ func ValidateStruct(s interface{}) (bool, error) {
var err error
structResult, err = ValidateStruct(valueField.Interface())
if err != nil {
- err = PrependPathToErrors(err, typeField.Name)
+ err = prependPathToErrors(err, typeField.Name)
errs = append(errs, err)
}
}
@@ -986,6 +1171,42 @@ func ValidateStruct(s interface{}) (bool, error) {
return result, err
}
+// ValidateStructAsync performs async validation of the struct and returns results through the channels
+func ValidateStructAsync(s interface{}) (<-chan bool, <-chan error) {
+ res := make(chan bool)
+ errors := make(chan error)
+
+ go func() {
+ defer close(res)
+ defer close(errors)
+
+ isValid, isFailed := ValidateStruct(s)
+
+ res <- isValid
+ errors <- isFailed
+ }()
+
+ return res, errors
+}
+
+// ValidateMapAsync performs async validation of the map and returns results through the channels
+func ValidateMapAsync(s map[string]interface{}, m map[string]interface{}) (<-chan bool, <-chan error) {
+ res := make(chan bool)
+ errors := make(chan error)
+
+ go func() {
+ defer close(res)
+ defer close(errors)
+
+ isValid, isFailed := ValidateMap(s, m)
+
+ res <- isValid
+ errors <- isFailed
+ }()
+
+ return res, errors
+}
+
// parseTagIntoMap parses a struct tag `valid:required~Some error message,length(2|3)` into map[string]string{"required": "Some error message", "length(2|3)": ""}
func parseTagIntoMap(tag string) tagOptionsMap {
optionsMap := make(tagOptionsMap)
@@ -1034,12 +1255,12 @@ func IsSSN(str string) bool {
return rxSSN.MatchString(str)
}
-// IsSemver check if string is valid semantic version
+// IsSemver checks if string is valid semantic version
func IsSemver(str string) bool {
return rxSemver.MatchString(str)
}
-// IsType check if interface is of some type
+// IsType checks if interface is of some type
func IsType(v interface{}, params ...string) bool {
if len(params) == 1 {
typ := params[0]
@@ -1048,13 +1269,13 @@ func IsType(v interface{}, params ...string) bool {
return false
}
-// IsTime check if string is valid according to given format
+// IsTime checks if string is valid according to given format
func IsTime(str string, format string) bool {
_, err := time.Parse(format, str)
return err == nil
}
-// IsUnixTime check if string is valid unix timestamp value
+// IsUnixTime checks if string is valid unix timestamp value
func IsUnixTime(str string) bool {
if _, err := strconv.Atoi(str); err == nil {
return true
@@ -1062,17 +1283,17 @@ func IsUnixTime(str string) bool {
return false
}
-// IsRFC3339 check if string is valid timestamp value according to RFC3339
+// IsRFC3339 checks if string is valid timestamp value according to RFC3339
func IsRFC3339(str string) bool {
return IsTime(str, time.RFC3339)
}
-// IsRFC3339WithoutZone check if string is valid timestamp value according to RFC3339 which excludes the timezone.
+// IsRFC3339WithoutZone checks if string is valid timestamp value according to RFC3339 which excludes the timezone.
func IsRFC3339WithoutZone(str string) bool {
- return IsTime(str, RF3339WithoutZone)
+ return IsTime(str, rfc3339WithoutZone)
}
-// IsISO4217 check if string is valid ISO currency code
+// IsISO4217 checks if string is valid ISO currency code
func IsISO4217(str string) bool {
for _, currency := range ISO4217List {
if str == currency {
@@ -1083,7 +1304,7 @@ func IsISO4217(str string) bool {
return false
}
-// ByteLength check string's length
+// ByteLength checks string's length
func ByteLength(str string, params ...string) bool {
if len(params) == 2 {
min, _ := ToInt(params[0])
@@ -1094,13 +1315,13 @@ func ByteLength(str string, params ...string) bool {
return false
}
-// RuneLength check string's length
+// RuneLength checks string's length
// Alias for StringLength
func RuneLength(str string, params ...string) bool {
return StringLength(str, params...)
}
-// IsRsaPub check whether string is valid RSA key
+// IsRsaPub checks whether string is valid RSA key
// Alias for IsRsaPublicKey
func IsRsaPub(str string, params ...string) bool {
if len(params) == 1 {
@@ -1120,7 +1341,7 @@ func StringMatches(s string, params ...string) bool {
return false
}
-// StringLength check string's length (including multi byte strings)
+// StringLength checks string's length (including multi byte strings)
func StringLength(str string, params ...string) bool {
if len(params) == 2 {
@@ -1133,7 +1354,7 @@ func StringLength(str string, params ...string) bool {
return false
}
-// MinStringLength check string's minimum length (including multi byte strings)
+// MinStringLength checks string's minimum length (including multi byte strings)
func MinStringLength(str string, params ...string) bool {
if len(params) == 1 {
@@ -1145,7 +1366,7 @@ func MinStringLength(str string, params ...string) bool {
return false
}
-// MaxStringLength check string's maximum length (including multi byte strings)
+// MaxStringLength checks string's maximum length (including multi byte strings)
func MaxStringLength(str string, params ...string) bool {
if len(params) == 1 {
@@ -1157,7 +1378,7 @@ func MaxStringLength(str string, params ...string) bool {
return false
}
-// Range check string's length
+// Range checks string's length
func Range(str string, params ...string) bool {
if len(params) == 2 {
value, _ := ToFloat(str)
@@ -1169,6 +1390,7 @@ func Range(str string, params ...string) bool {
return false
}
+// IsInRaw checks if string is in list of allowed values
func IsInRaw(str string, params ...string) bool {
if len(params) == 1 {
rawParams := params[0]
@@ -1181,7 +1403,7 @@ func IsInRaw(str string, params ...string) bool {
return false
}
-// IsIn check if string str is a member of the set of strings params
+// IsIn checks if string str is a member of the set of strings params
func IsIn(str string, params ...string) bool {
for _, param := range params {
if str == param {
@@ -1219,7 +1441,7 @@ func typeCheck(v reflect.Value, t reflect.StructField, o reflect.Value, options
tag := t.Tag.Get(tagName)
- // Check if the field should be ignored
+ // checks if the field should be ignored
switch tag {
case "":
if v.Kind() != reflect.Slice && v.Kind() != reflect.Map {
@@ -1238,8 +1460,8 @@ func typeCheck(v reflect.Value, t reflect.StructField, o reflect.Value, options
options = parseTagIntoMap(tag)
}
- if !isFieldSet(v) {
- // an empty value is not validated, check only required
+ if isEmptyValue(v) {
+ // an empty value is not validated, checks only required
isValid, resultErr = checkRequired(v, t, options)
for key := range options {
delete(options, key)
@@ -1292,13 +1514,13 @@ func typeCheck(v reflect.Value, t reflect.StructField, o reflect.Value, options
validator := validatorSpec
customMsgExists := len(validatorStruct.customErrorMessage) > 0
- // Check whether the tag looks like '!something' or 'something'
+ // checks whether the tag looks like '!something' or 'something'
if validator[0] == '!' {
validator = validator[1:]
negate = true
}
- // Check for interface param validators
+ // checks for interface param validators
for key, value := range InterfaceParamTagRegexMap {
ps := value.FindStringSubmatch(validator)
if len(ps) == 0 {
@@ -1331,20 +1553,20 @@ func typeCheck(v reflect.Value, t reflect.StructField, o reflect.Value, options
reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64, reflect.Uintptr,
reflect.Float32, reflect.Float64,
reflect.String:
- // for each tag option check the map of validator functions
+ // for each tag option checks the map of validator functions
for _, validatorSpec := range optionsOrder {
validatorStruct := options[validatorSpec]
var negate bool
validator := validatorSpec
customMsgExists := len(validatorStruct.customErrorMessage) > 0
- // Check whether the tag looks like '!something' or 'something'
+ // checks whether the tag looks like '!something' or 'something'
if validator[0] == '!' {
validator = validator[1:]
negate = true
}
- // Check for param validators
+ // checks for param validators
for key, value := range ParamTagRegexMap {
ps := value.FindStringSubmatch(validator)
if len(ps) == 0 {
@@ -1425,7 +1647,7 @@ func typeCheck(v reflect.Value, t reflect.StructField, o reflect.Value, options
} else {
resultItem, err = ValidateStruct(v.MapIndex(k).Interface())
if err != nil {
- err = PrependPathToErrors(err, t.Name+"."+sv[i].Interface().(string))
+ err = prependPathToErrors(err, t.Name+"."+sv[i].Interface().(string))
return false, err
}
}
@@ -1445,7 +1667,7 @@ func typeCheck(v reflect.Value, t reflect.StructField, o reflect.Value, options
} else {
resultItem, err = ValidateStruct(v.Index(i).Interface())
if err != nil {
- err = PrependPathToErrors(err, t.Name+"."+strconv.Itoa(i))
+ err = prependPathToErrors(err, t.Name+"."+strconv.Itoa(i))
return false, err
}
}
@@ -1459,7 +1681,7 @@ func typeCheck(v reflect.Value, t reflect.StructField, o reflect.Value, options
}
return ValidateStruct(v.Interface())
case reflect.Ptr:
- // If the value is a pointer then check its element
+ // If the value is a pointer then checks its element
if v.IsNil() {
return true, nil
}
@@ -1475,14 +1697,26 @@ func stripParams(validatorString string) string {
return paramsRegexp.ReplaceAllString(validatorString, "")
}
-// isFieldSet returns false for nil pointers, interfaces, maps, and slices. For all other values, it returns true.
-func isFieldSet(v reflect.Value) bool {
+// isEmptyValue checks whether value empty or not
+func isEmptyValue(v reflect.Value) bool {
switch v.Kind() {
- case reflect.Map, reflect.Slice, reflect.Interface, reflect.Ptr:
- return !v.IsNil()
+ case reflect.String, reflect.Array:
+ return v.Len() == 0
+ case reflect.Map, reflect.Slice:
+ return v.Len() == 0 || v.IsNil()
+ case reflect.Bool:
+ return !v.Bool()
+ case reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64:
+ return v.Int() == 0
+ case reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64, reflect.Uintptr:
+ return v.Uint() == 0
+ case reflect.Float32, reflect.Float64:
+ return v.Float() == 0
+ case reflect.Interface, reflect.Ptr:
+ return v.IsNil()
}
- return true
+ return reflect.DeepEqual(v.Interface(), reflect.Zero(v.Type()).Interface())
}
// ErrorByField returns error for specified field of the struct
@@ -1528,3 +1762,7 @@ func (sv stringValues) Len() int { return len(sv) }
func (sv stringValues) Swap(i, j int) { sv[i], sv[j] = sv[j], sv[i] }
func (sv stringValues) Less(i, j int) bool { return sv.get(i) < sv.get(j) }
func (sv stringValues) get(i int) string { return sv[i].String() }
+
+func IsE164(str string) bool {
+ return rxE164.MatchString(str)
+}
diff --git a/vendor/github.com/containerd/containerd/archive/compression/compression.go b/vendor/github.com/containerd/containerd/archive/compression/compression.go
index 31bbe412466..23ddfab1a6b 100644
--- a/vendor/github.com/containerd/containerd/archive/compression/compression.go
+++ b/vendor/github.com/containerd/containerd/archive/compression/compression.go
@@ -29,7 +29,7 @@ import (
"strconv"
"sync"
- "github.com/containerd/containerd/log"
+ "github.com/containerd/log"
"github.com/klauspost/compress/zstd"
)
diff --git a/vendor/github.com/containerd/containerd/content/helpers.go b/vendor/github.com/containerd/containerd/content/helpers.go
index 14700541304..93bcdde106e 100644
--- a/vendor/github.com/containerd/containerd/content/helpers.go
+++ b/vendor/github.com/containerd/containerd/content/helpers.go
@@ -24,15 +24,13 @@ import (
"sync"
"time"
- "github.com/containerd/containerd/errdefs"
- "github.com/containerd/containerd/log"
- "github.com/containerd/containerd/pkg/randutil"
+ "github.com/containerd/log"
"github.com/opencontainers/go-digest"
ocispec "github.com/opencontainers/image-spec/specs-go/v1"
-)
-// maxResets is the no.of times the Copy() method can tolerate a reset of the body
-const maxResets = 5
+ "github.com/containerd/containerd/errdefs"
+ "github.com/containerd/containerd/pkg/randutil"
+)
var ErrReset = errors.New("writer has been reset")
@@ -160,7 +158,7 @@ func Copy(ctx context.Context, cw Writer, or io.Reader, size int64, expected dig
}
}
- for i := 0; i < maxResets; i++ {
+ for i := 0; ; i++ {
if i >= 1 {
log.G(ctx).WithField("digest", expected).Debugf("retrying copy due to reset")
}
@@ -201,9 +199,6 @@ func Copy(ctx context.Context, cw Writer, or io.Reader, size int64, expected dig
}
return nil
}
-
- log.G(ctx).WithField("digest", expected).Errorf("failed to copy after %d retries", maxResets)
- return fmt.Errorf("failed to copy after %d retries", maxResets)
}
// CopyReaderAt copies to a writer from a given reader at for the given
diff --git a/vendor/github.com/containerd/containerd/content/local/store.go b/vendor/github.com/containerd/containerd/content/local/store.go
index baae3565bb4..efe886014cd 100644
--- a/vendor/github.com/containerd/containerd/content/local/store.go
+++ b/vendor/github.com/containerd/containerd/content/local/store.go
@@ -27,12 +27,13 @@ import (
"sync"
"time"
+ "github.com/containerd/log"
+ "github.com/sirupsen/logrus"
+
"github.com/containerd/containerd/content"
"github.com/containerd/containerd/errdefs"
"github.com/containerd/containerd/filters"
- "github.com/containerd/containerd/log"
"github.com/containerd/containerd/pkg/randutil"
- "github.com/sirupsen/logrus"
"github.com/opencontainers/go-digest"
ocispec "github.com/opencontainers/image-spec/specs-go/v1"
@@ -66,6 +67,8 @@ type LabelStore interface {
type store struct {
root string
ls LabelStore
+
+ ensureIngestRootOnce func() error
}
// NewStore returns a local content store
@@ -79,14 +82,13 @@ func NewStore(root string) (content.Store, error) {
// require labels and should use `NewStore`. `NewLabeledStore` is primarily
// useful for tests or standalone implementations.
func NewLabeledStore(root string, ls LabelStore) (content.Store, error) {
- if err := os.MkdirAll(filepath.Join(root, "ingest"), 0777); err != nil {
- return nil, err
- }
-
- return &store{
+ s := &store{
root: root,
ls: ls,
- }, nil
+ }
+
+ s.ensureIngestRootOnce = sync.OnceValue(s.ensureIngestRoot)
+ return s, nil
}
func (s *store) Info(ctx context.Context, dgst digest.Digest) (content.Info, error) {
@@ -293,6 +295,9 @@ func (s *store) Status(ctx context.Context, ref string) (content.Status, error)
func (s *store) ListStatuses(ctx context.Context, fs ...string) ([]content.Status, error) {
fp, err := os.Open(filepath.Join(s.root, "ingest"))
if err != nil {
+ if os.IsNotExist(err) {
+ return nil, nil
+ }
return nil, err
}
@@ -343,6 +348,9 @@ func (s *store) ListStatuses(ctx context.Context, fs ...string) ([]content.Statu
func (s *store) WalkStatusRefs(ctx context.Context, fn func(string) error) error {
fp, err := os.Open(filepath.Join(s.root, "ingest"))
if err != nil {
+ if os.IsNotExist(err) {
+ return nil
+ }
return err
}
@@ -544,6 +552,11 @@ func (s *store) writer(ctx context.Context, ref string, total int64, expected di
)
foundValidIngest := false
+
+ if err := s.ensureIngestRootOnce(); err != nil {
+ return nil, err
+ }
+
// ensure that the ingest path has been created.
if err := os.Mkdir(path, 0755); err != nil {
if !os.IsExist(err) {
@@ -654,6 +667,10 @@ func (s *store) ingestPaths(ref string) (string, string, string) {
return fp, rp, dp
}
+func (s *store) ensureIngestRoot() error {
+ return os.MkdirAll(filepath.Join(s.root, "ingest"), 0777)
+}
+
func readFileString(path string) (string, error) {
p, err := os.ReadFile(path)
return string(p), err
diff --git a/vendor/github.com/containerd/containerd/content/local/writer.go b/vendor/github.com/containerd/containerd/content/local/writer.go
index b187e524cb7..0cd8f2d04bb 100644
--- a/vendor/github.com/containerd/containerd/content/local/writer.go
+++ b/vendor/github.com/containerd/containerd/content/local/writer.go
@@ -26,10 +26,11 @@ import (
"runtime"
"time"
+ "github.com/containerd/log"
+ "github.com/opencontainers/go-digest"
+
"github.com/containerd/containerd/content"
"github.com/containerd/containerd/errdefs"
- "github.com/containerd/containerd/log"
- "github.com/opencontainers/go-digest"
)
// writer represents a write transaction against the blob store.
diff --git a/vendor/github.com/containerd/containerd/errdefs/errors.go b/vendor/github.com/containerd/containerd/errdefs/errors.go
index 87622559708..de22cadd419 100644
--- a/vendor/github.com/containerd/containerd/errdefs/errors.go
+++ b/vendor/github.com/containerd/containerd/errdefs/errors.go
@@ -21,14 +21,10 @@
//
// To detect an error class, use the IsXXX functions to tell whether an error
// is of a certain type.
-//
-// The functions ToGRPC and FromGRPC can be used to map server-side and
-// client-side errors to the correct types.
package errdefs
import (
- "context"
- "errors"
+ "github.com/containerd/errdefs"
)
// Definitions of common error types used throughout containerd. All containerd
@@ -36,57 +32,41 @@ import (
// Packages should return errors of these types when they want to instruct a
// client to take a particular action.
//
-// For the most part, we just try to provide local grpc errors. Most conditions
-// map very well to those defined by grpc.
+// These errors map closely to grpc errors.
var (
- ErrUnknown = errors.New("unknown") // used internally to represent a missed mapping.
- ErrInvalidArgument = errors.New("invalid argument")
- ErrNotFound = errors.New("not found")
- ErrAlreadyExists = errors.New("already exists")
- ErrFailedPrecondition = errors.New("failed precondition")
- ErrUnavailable = errors.New("unavailable")
- ErrNotImplemented = errors.New("not implemented") // represents not supported and unimplemented
-)
-
-// IsInvalidArgument returns true if the error is due to an invalid argument
-func IsInvalidArgument(err error) bool {
- return errors.Is(err, ErrInvalidArgument)
-}
-
-// IsNotFound returns true if the error is due to a missing object
-func IsNotFound(err error) bool {
- return errors.Is(err, ErrNotFound)
-}
-
-// IsAlreadyExists returns true if the error is due to an already existing
-// metadata item
-func IsAlreadyExists(err error) bool {
- return errors.Is(err, ErrAlreadyExists)
-}
+ ErrUnknown = errdefs.ErrUnknown
+ ErrInvalidArgument = errdefs.ErrInvalidArgument
+ ErrNotFound = errdefs.ErrNotFound
+ ErrAlreadyExists = errdefs.ErrAlreadyExists
+ ErrPermissionDenied = errdefs.ErrPermissionDenied
+ ErrResourceExhausted = errdefs.ErrResourceExhausted
+ ErrFailedPrecondition = errdefs.ErrFailedPrecondition
+ ErrConflict = errdefs.ErrConflict
+ ErrNotModified = errdefs.ErrNotModified
+ ErrAborted = errdefs.ErrAborted
+ ErrOutOfRange = errdefs.ErrOutOfRange
+ ErrNotImplemented = errdefs.ErrNotImplemented
+ ErrInternal = errdefs.ErrInternal
+ ErrUnavailable = errdefs.ErrUnavailable
+ ErrDataLoss = errdefs.ErrDataLoss
+ ErrUnauthenticated = errdefs.ErrUnauthenticated
-// IsFailedPrecondition returns true if an operation could not proceed to the
-// lack of a particular condition
-func IsFailedPrecondition(err error) bool {
- return errors.Is(err, ErrFailedPrecondition)
-}
-
-// IsUnavailable returns true if the error is due to a resource being unavailable
-func IsUnavailable(err error) bool {
- return errors.Is(err, ErrUnavailable)
-}
-
-// IsNotImplemented returns true if the error is due to not being implemented
-func IsNotImplemented(err error) bool {
- return errors.Is(err, ErrNotImplemented)
-}
-
-// IsCanceled returns true if the error is due to `context.Canceled`.
-func IsCanceled(err error) bool {
- return errors.Is(err, context.Canceled)
-}
-
-// IsDeadlineExceeded returns true if the error is due to
-// `context.DeadlineExceeded`.
-func IsDeadlineExceeded(err error) bool {
- return errors.Is(err, context.DeadlineExceeded)
-}
+ IsCanceled = errdefs.IsCanceled
+ IsUnknown = errdefs.IsUnknown
+ IsInvalidArgument = errdefs.IsInvalidArgument
+ IsDeadlineExceeded = errdefs.IsDeadlineExceeded
+ IsNotFound = errdefs.IsNotFound
+ IsAlreadyExists = errdefs.IsAlreadyExists
+ IsPermissionDenied = errdefs.IsPermissionDenied
+ IsResourceExhausted = errdefs.IsResourceExhausted
+ IsFailedPrecondition = errdefs.IsFailedPrecondition
+ IsConflict = errdefs.IsConflict
+ IsNotModified = errdefs.IsNotModified
+ IsAborted = errdefs.IsAborted
+ IsOutOfRange = errdefs.IsOutOfRange
+ IsNotImplemented = errdefs.IsNotImplemented
+ IsInternal = errdefs.IsInternal
+ IsUnavailable = errdefs.IsUnavailable
+ IsDataLoss = errdefs.IsDataLoss
+ IsUnauthorized = errdefs.IsUnauthorized
+)
diff --git a/vendor/github.com/containerd/containerd/filters/filter.go b/vendor/github.com/containerd/containerd/filters/filter.go
index e13f2625c73..dcc569a4b7d 100644
--- a/vendor/github.com/containerd/containerd/filters/filter.go
+++ b/vendor/github.com/containerd/containerd/filters/filter.go
@@ -70,7 +70,7 @@ package filters
import (
"regexp"
- "github.com/containerd/containerd/log"
+ "github.com/containerd/log"
)
// Filter matches specific resources based the provided filter
diff --git a/vendor/github.com/containerd/containerd/images/diffid.go b/vendor/github.com/containerd/containerd/images/diffid.go
index 56193cc289f..85577eedee4 100644
--- a/vendor/github.com/containerd/containerd/images/diffid.go
+++ b/vendor/github.com/containerd/containerd/images/diffid.go
@@ -36,7 +36,7 @@ func GetDiffID(ctx context.Context, cs content.Store, desc ocispec.Descriptor) (
MediaTypeDockerSchema2Layer,
ocispec.MediaTypeImageLayer,
MediaTypeDockerSchema2LayerForeign,
- ocispec.MediaTypeImageLayerNonDistributable:
+ ocispec.MediaTypeImageLayerNonDistributable: //nolint:staticcheck // deprecated
return desc.Digest, nil
}
info, err := cs.Info(ctx, desc.Digest)
diff --git a/vendor/github.com/containerd/containerd/images/handlers.go b/vendor/github.com/containerd/containerd/images/handlers.go
index 077d88e7877..a685092e2cb 100644
--- a/vendor/github.com/containerd/containerd/images/handlers.go
+++ b/vendor/github.com/containerd/containerd/images/handlers.go
@@ -22,12 +22,13 @@ import (
"fmt"
"sort"
- "github.com/containerd/containerd/content"
- "github.com/containerd/containerd/errdefs"
- "github.com/containerd/containerd/platforms"
+ "github.com/containerd/platforms"
ocispec "github.com/opencontainers/image-spec/specs-go/v1"
"golang.org/x/sync/errgroup"
"golang.org/x/sync/semaphore"
+
+ "github.com/containerd/containerd/content"
+ "github.com/containerd/containerd/errdefs"
)
var (
diff --git a/vendor/github.com/containerd/containerd/images/image.go b/vendor/github.com/containerd/containerd/images/image.go
index 2d2e36a9a30..b934e349618 100644
--- a/vendor/github.com/containerd/containerd/images/image.go
+++ b/vendor/github.com/containerd/containerd/images/image.go
@@ -23,12 +23,13 @@ import (
"sort"
"time"
- "github.com/containerd/containerd/content"
- "github.com/containerd/containerd/errdefs"
- "github.com/containerd/containerd/log"
- "github.com/containerd/containerd/platforms"
+ "github.com/containerd/log"
+ "github.com/containerd/platforms"
digest "github.com/opencontainers/go-digest"
ocispec "github.com/opencontainers/image-spec/specs-go/v1"
+
+ "github.com/containerd/containerd/content"
+ "github.com/containerd/containerd/errdefs"
)
// Image provides the model for how containerd views container images.
@@ -268,6 +269,9 @@ func Platforms(ctx context.Context, provider content.Provider, image ocispec.Des
var platformSpecs []ocispec.Platform
return platformSpecs, Walk(ctx, Handlers(HandlerFunc(func(ctx context.Context, desc ocispec.Descriptor) ([]ocispec.Descriptor, error) {
if desc.Platform != nil {
+ if desc.Platform.OS == "unknown" || desc.Platform.Architecture == "unknown" {
+ return nil, ErrSkipDesc
+ }
platformSpecs = append(platformSpecs, *desc.Platform)
return nil, ErrSkipDesc
}
diff --git a/vendor/github.com/containerd/containerd/images/mediatypes.go b/vendor/github.com/containerd/containerd/images/mediatypes.go
index 067963babba..d3b28d42dc6 100644
--- a/vendor/github.com/containerd/containerd/images/mediatypes.go
+++ b/vendor/github.com/containerd/containerd/images/mediatypes.go
@@ -81,7 +81,7 @@ func DiffCompression(ctx context.Context, mediaType string) (string, error) {
return "", nil
}
return "gzip", nil
- case ocispec.MediaTypeImageLayer, ocispec.MediaTypeImageLayerNonDistributable:
+ case ocispec.MediaTypeImageLayer, ocispec.MediaTypeImageLayerNonDistributable: //nolint:staticcheck // Non-distributable layers are deprecated
if len(ext) > 0 {
switch ext[len(ext)-1] {
case "gzip":
diff --git a/vendor/github.com/containerd/containerd/reference/docker/helpers.go b/vendor/github.com/containerd/containerd/reference/docker/helpers.go
deleted file mode 100644
index 386025104ae..00000000000
--- a/vendor/github.com/containerd/containerd/reference/docker/helpers.go
+++ /dev/null
@@ -1,58 +0,0 @@
-/*
- Copyright The containerd Authors.
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
-*/
-
-package docker
-
-import "path"
-
-// IsNameOnly returns true if reference only contains a repo name.
-func IsNameOnly(ref Named) bool {
- if _, ok := ref.(NamedTagged); ok {
- return false
- }
- if _, ok := ref.(Canonical); ok {
- return false
- }
- return true
-}
-
-// FamiliarName returns the familiar name string
-// for the given named, familiarizing if needed.
-func FamiliarName(ref Named) string {
- if nn, ok := ref.(normalizedNamed); ok {
- return nn.Familiar().Name()
- }
- return ref.Name()
-}
-
-// FamiliarString returns the familiar string representation
-// for the given reference, familiarizing if needed.
-func FamiliarString(ref Reference) string {
- if nn, ok := ref.(normalizedNamed); ok {
- return nn.Familiar().String()
- }
- return ref.String()
-}
-
-// FamiliarMatch reports whether ref matches the specified pattern.
-// See https://godoc.org/path#Match for supported patterns.
-func FamiliarMatch(pattern string, ref Reference) (bool, error) {
- matched, err := path.Match(pattern, FamiliarString(ref))
- if namedRef, isNamed := ref.(Named); isNamed && !matched {
- matched, _ = path.Match(pattern, FamiliarName(namedRef))
- }
- return matched, err
-}
diff --git a/vendor/github.com/containerd/containerd/reference/docker/normalize.go b/vendor/github.com/containerd/containerd/reference/docker/normalize.go
deleted file mode 100644
index b299bf6c068..00000000000
--- a/vendor/github.com/containerd/containerd/reference/docker/normalize.go
+++ /dev/null
@@ -1,196 +0,0 @@
-/*
- Copyright The containerd Authors.
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
-*/
-
-package docker
-
-import (
- "fmt"
- "strings"
-
- "github.com/opencontainers/go-digest"
-)
-
-var (
- legacyDefaultDomain = "index.docker.io"
- defaultDomain = "docker.io"
- officialRepoName = "library"
- defaultTag = "latest"
-)
-
-// normalizedNamed represents a name which has been
-// normalized and has a familiar form. A familiar name
-// is what is used in Docker UI. An example normalized
-// name is "docker.io/library/ubuntu" and corresponding
-// familiar name of "ubuntu".
-type normalizedNamed interface {
- Named
- Familiar() Named
-}
-
-// ParseNormalizedNamed parses a string into a named reference
-// transforming a familiar name from Docker UI to a fully
-// qualified reference. If the value may be an identifier
-// use ParseAnyReference.
-func ParseNormalizedNamed(s string) (Named, error) {
- if ok := anchoredIdentifierRegexp.MatchString(s); ok {
- return nil, fmt.Errorf("invalid repository name (%s), cannot specify 64-byte hexadecimal strings", s)
- }
- domain, remainder := splitDockerDomain(s)
- var remoteName string
- if tagSep := strings.IndexRune(remainder, ':'); tagSep > -1 {
- remoteName = remainder[:tagSep]
- } else {
- remoteName = remainder
- }
- if strings.ToLower(remoteName) != remoteName {
- return nil, fmt.Errorf("invalid reference format: repository name (%s) must be lowercase", remoteName)
- }
-
- ref, err := Parse(domain + "/" + remainder)
- if err != nil {
- return nil, err
- }
- named, isNamed := ref.(Named)
- if !isNamed {
- return nil, fmt.Errorf("reference %s has no name", ref.String())
- }
- return named, nil
-}
-
-// ParseDockerRef normalizes the image reference following the docker convention. This is added
-// mainly for backward compatibility.
-// The reference returned can only be either tagged or digested. For reference contains both tag
-// and digest, the function returns digested reference, e.g. docker.io/library/busybox:latest@
-// sha256:7cc4b5aefd1d0cadf8d97d4350462ba51c694ebca145b08d7d41b41acc8db5aa will be returned as
-// docker.io/library/busybox@sha256:7cc4b5aefd1d0cadf8d97d4350462ba51c694ebca145b08d7d41b41acc8db5aa.
-func ParseDockerRef(ref string) (Named, error) {
- named, err := ParseNormalizedNamed(ref)
- if err != nil {
- return nil, err
- }
- if _, ok := named.(NamedTagged); ok {
- if canonical, ok := named.(Canonical); ok {
- // The reference is both tagged and digested, only
- // return digested.
- newNamed, err := WithName(canonical.Name())
- if err != nil {
- return nil, err
- }
- newCanonical, err := WithDigest(newNamed, canonical.Digest())
- if err != nil {
- return nil, err
- }
- return newCanonical, nil
- }
- }
- return TagNameOnly(named), nil
-}
-
-// splitDockerDomain splits a repository name to domain and remotename string.
-// If no valid domain is found, the default domain is used. Repository name
-// needs to be already validated before.
-func splitDockerDomain(name string) (domain, remainder string) {
- i := strings.IndexRune(name, '/')
- if i == -1 || (!strings.ContainsAny(name[:i], ".:") && name[:i] != "localhost" && strings.ToLower(name[:i]) == name[:i]) {
- domain, remainder = defaultDomain, name
- } else {
- domain, remainder = name[:i], name[i+1:]
- }
- if domain == legacyDefaultDomain {
- domain = defaultDomain
- }
- if domain == defaultDomain && !strings.ContainsRune(remainder, '/') {
- remainder = officialRepoName + "/" + remainder
- }
- return
-}
-
-// familiarizeName returns a shortened version of the name familiar
-// to the Docker UI. Familiar names have the default domain
-// "docker.io" and "library/" repository prefix removed.
-// For example, "docker.io/library/redis" will have the familiar
-// name "redis" and "docker.io/dmcgowan/myapp" will be "dmcgowan/myapp".
-// Returns a familiarized named only reference.
-func familiarizeName(named namedRepository) repository {
- repo := repository{
- domain: named.Domain(),
- path: named.Path(),
- }
-
- if repo.domain == defaultDomain {
- repo.domain = ""
- // Handle official repositories which have the pattern "library/"
- if split := strings.Split(repo.path, "/"); len(split) == 2 && split[0] == officialRepoName {
- repo.path = split[1]
- }
- }
- return repo
-}
-
-func (r reference) Familiar() Named {
- return reference{
- namedRepository: familiarizeName(r.namedRepository),
- tag: r.tag,
- digest: r.digest,
- }
-}
-
-func (r repository) Familiar() Named {
- return familiarizeName(r)
-}
-
-func (t taggedReference) Familiar() Named {
- return taggedReference{
- namedRepository: familiarizeName(t.namedRepository),
- tag: t.tag,
- }
-}
-
-func (c canonicalReference) Familiar() Named {
- return canonicalReference{
- namedRepository: familiarizeName(c.namedRepository),
- digest: c.digest,
- }
-}
-
-// TagNameOnly adds the default tag "latest" to a reference if it only has
-// a repo name.
-func TagNameOnly(ref Named) Named {
- if IsNameOnly(ref) {
- namedTagged, err := WithTag(ref, defaultTag)
- if err != nil {
- // Default tag must be valid, to create a NamedTagged
- // type with non-validated input the WithTag function
- // should be used instead
- panic(err)
- }
- return namedTagged
- }
- return ref
-}
-
-// ParseAnyReference parses a reference string as a possible identifier,
-// full digest, or familiar name.
-func ParseAnyReference(ref string) (Reference, error) {
- if ok := anchoredIdentifierRegexp.MatchString(ref); ok {
- return digestReference("sha256:" + ref), nil
- }
- if dgst, err := digest.Parse(ref); err == nil {
- return digestReference(dgst), nil
- }
-
- return ParseNormalizedNamed(ref)
-}
diff --git a/vendor/github.com/containerd/containerd/reference/docker/reference.go b/vendor/github.com/containerd/containerd/reference/docker/reference.go
deleted file mode 100644
index 4dc00474ee5..00000000000
--- a/vendor/github.com/containerd/containerd/reference/docker/reference.go
+++ /dev/null
@@ -1,453 +0,0 @@
-/*
- Copyright The containerd Authors.
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
-*/
-
-// Package docker provides a general type to represent any way of referencing images within the registry.
-// Its main purpose is to abstract tags and digests (content-addressable hash).
-//
-// Grammar
-//
-// reference := name [ ":" tag ] [ "@" digest ]
-// name := [domain '/'] path-component ['/' path-component]*
-// domain := host [':' port-number]
-// host := domain-name | IPv4address | \[ IPv6address \] ; rfc3986 appendix-A
-// domain-name := domain-component ['.' domain-component]*
-// domain-component := /([a-zA-Z0-9]|[a-zA-Z0-9][a-zA-Z0-9-]*[a-zA-Z0-9])/
-// port-number := /[0-9]+/
-// path-component := alpha-numeric [separator alpha-numeric]*
-// alpha-numeric := /[a-z0-9]+/
-// separator := /[_.]|__|[-]*/
-//
-// tag := /[\w][\w.-]{0,127}/
-//
-// digest := digest-algorithm ":" digest-hex
-// digest-algorithm := digest-algorithm-component [ digest-algorithm-separator digest-algorithm-component ]*
-// digest-algorithm-separator := /[+.-_]/
-// digest-algorithm-component := /[A-Za-z][A-Za-z0-9]*/
-// digest-hex := /[0-9a-fA-F]{32,}/ ; At least 128 bit digest value
-//
-// identifier := /[a-f0-9]{64}/
-// short-identifier := /[a-f0-9]{6,64}/
-package docker
-
-import (
- "errors"
- "fmt"
- "strings"
-
- "github.com/opencontainers/go-digest"
-)
-
-const (
- // NameTotalLengthMax is the maximum total number of characters in a repository name.
- NameTotalLengthMax = 255
-)
-
-var (
- // ErrReferenceInvalidFormat represents an error while trying to parse a string as a reference.
- ErrReferenceInvalidFormat = errors.New("invalid reference format")
-
- // ErrTagInvalidFormat represents an error while trying to parse a string as a tag.
- ErrTagInvalidFormat = errors.New("invalid tag format")
-
- // ErrDigestInvalidFormat represents an error while trying to parse a string as a tag.
- ErrDigestInvalidFormat = errors.New("invalid digest format")
-
- // ErrNameContainsUppercase is returned for invalid repository names that contain uppercase characters.
- ErrNameContainsUppercase = errors.New("repository name must be lowercase")
-
- // ErrNameEmpty is returned for empty, invalid repository names.
- ErrNameEmpty = errors.New("repository name must have at least one component")
-
- // ErrNameTooLong is returned when a repository name is longer than NameTotalLengthMax.
- ErrNameTooLong = fmt.Errorf("repository name must not be more than %v characters", NameTotalLengthMax)
-
- // ErrNameNotCanonical is returned when a name is not canonical.
- ErrNameNotCanonical = errors.New("repository name must be canonical")
-)
-
-// Reference is an opaque object reference identifier that may include
-// modifiers such as a hostname, name, tag, and digest.
-type Reference interface {
- // String returns the full reference
- String() string
-}
-
-// Field provides a wrapper type for resolving correct reference types when
-// working with encoding.
-type Field struct {
- reference Reference
-}
-
-// AsField wraps a reference in a Field for encoding.
-func AsField(reference Reference) Field {
- return Field{reference}
-}
-
-// Reference unwraps the reference type from the field to
-// return the Reference object. This object should be
-// of the appropriate type to further check for different
-// reference types.
-func (f Field) Reference() Reference {
- return f.reference
-}
-
-// MarshalText serializes the field to byte text which
-// is the string of the reference.
-func (f Field) MarshalText() (p []byte, err error) {
- return []byte(f.reference.String()), nil
-}
-
-// UnmarshalText parses text bytes by invoking the
-// reference parser to ensure the appropriately
-// typed reference object is wrapped by field.
-func (f *Field) UnmarshalText(p []byte) error {
- r, err := Parse(string(p))
- if err != nil {
- return err
- }
-
- f.reference = r
- return nil
-}
-
-// Named is an object with a full name
-type Named interface {
- Reference
- Name() string
-}
-
-// Tagged is an object which has a tag
-type Tagged interface {
- Reference
- Tag() string
-}
-
-// NamedTagged is an object including a name and tag.
-type NamedTagged interface {
- Named
- Tag() string
-}
-
-// Digested is an object which has a digest
-// in which it can be referenced by
-type Digested interface {
- Reference
- Digest() digest.Digest
-}
-
-// Canonical reference is an object with a fully unique
-// name including a name with domain and digest
-type Canonical interface {
- Named
- Digest() digest.Digest
-}
-
-// namedRepository is a reference to a repository with a name.
-// A namedRepository has both domain and path components.
-type namedRepository interface {
- Named
- Domain() string
- Path() string
-}
-
-// Domain returns the domain part of the Named reference
-func Domain(named Named) string {
- if r, ok := named.(namedRepository); ok {
- return r.Domain()
- }
- domain, _ := splitDomain(named.Name())
- return domain
-}
-
-// Path returns the name without the domain part of the Named reference
-func Path(named Named) (name string) {
- if r, ok := named.(namedRepository); ok {
- return r.Path()
- }
- _, path := splitDomain(named.Name())
- return path
-}
-
-func splitDomain(name string) (string, string) {
- match := anchoredNameRegexp.FindStringSubmatch(name)
- if len(match) != 3 {
- return "", name
- }
- return match[1], match[2]
-}
-
-// SplitHostname splits a named reference into a
-// hostname and name string. If no valid hostname is
-// found, the hostname is empty and the full value
-// is returned as name
-// DEPRECATED: Use Domain or Path
-func SplitHostname(named Named) (string, string) {
- if r, ok := named.(namedRepository); ok {
- return r.Domain(), r.Path()
- }
- return splitDomain(named.Name())
-}
-
-// Parse parses s and returns a syntactically valid Reference.
-// If an error was encountered it is returned, along with a nil Reference.
-// NOTE: Parse will not handle short digests.
-func Parse(s string) (Reference, error) {
- matches := ReferenceRegexp.FindStringSubmatch(s)
- if matches == nil {
- if s == "" {
- return nil, ErrNameEmpty
- }
- if ReferenceRegexp.FindStringSubmatch(strings.ToLower(s)) != nil {
- return nil, ErrNameContainsUppercase
- }
- return nil, ErrReferenceInvalidFormat
- }
-
- if len(matches[1]) > NameTotalLengthMax {
- return nil, ErrNameTooLong
- }
-
- var repo repository
-
- nameMatch := anchoredNameRegexp.FindStringSubmatch(matches[1])
- if len(nameMatch) == 3 {
- repo.domain = nameMatch[1]
- repo.path = nameMatch[2]
- } else {
- repo.domain = ""
- repo.path = matches[1]
- }
-
- ref := reference{
- namedRepository: repo,
- tag: matches[2],
- }
- if matches[3] != "" {
- var err error
- ref.digest, err = digest.Parse(matches[3])
- if err != nil {
- return nil, err
- }
- }
-
- r := getBestReferenceType(ref)
- if r == nil {
- return nil, ErrNameEmpty
- }
-
- return r, nil
-}
-
-// ParseNamed parses s and returns a syntactically valid reference implementing
-// the Named interface. The reference must have a name and be in the canonical
-// form, otherwise an error is returned.
-// If an error was encountered it is returned, along with a nil Reference.
-// NOTE: ParseNamed will not handle short digests.
-func ParseNamed(s string) (Named, error) {
- named, err := ParseNormalizedNamed(s)
- if err != nil {
- return nil, err
- }
- if named.String() != s {
- return nil, ErrNameNotCanonical
- }
- return named, nil
-}
-
-// WithName returns a named object representing the given string. If the input
-// is invalid ErrReferenceInvalidFormat will be returned.
-func WithName(name string) (Named, error) {
- if len(name) > NameTotalLengthMax {
- return nil, ErrNameTooLong
- }
-
- match := anchoredNameRegexp.FindStringSubmatch(name)
- if match == nil || len(match) != 3 {
- return nil, ErrReferenceInvalidFormat
- }
- return repository{
- domain: match[1],
- path: match[2],
- }, nil
-}
-
-// WithTag combines the name from "name" and the tag from "tag" to form a
-// reference incorporating both the name and the tag.
-func WithTag(name Named, tag string) (NamedTagged, error) {
- if !anchoredTagRegexp.MatchString(tag) {
- return nil, ErrTagInvalidFormat
- }
- var repo repository
- if r, ok := name.(namedRepository); ok {
- repo.domain = r.Domain()
- repo.path = r.Path()
- } else {
- repo.path = name.Name()
- }
- if canonical, ok := name.(Canonical); ok {
- return reference{
- namedRepository: repo,
- tag: tag,
- digest: canonical.Digest(),
- }, nil
- }
- return taggedReference{
- namedRepository: repo,
- tag: tag,
- }, nil
-}
-
-// WithDigest combines the name from "name" and the digest from "digest" to form
-// a reference incorporating both the name and the digest.
-func WithDigest(name Named, digest digest.Digest) (Canonical, error) {
- if !anchoredDigestRegexp.MatchString(digest.String()) {
- return nil, ErrDigestInvalidFormat
- }
- var repo repository
- if r, ok := name.(namedRepository); ok {
- repo.domain = r.Domain()
- repo.path = r.Path()
- } else {
- repo.path = name.Name()
- }
- if tagged, ok := name.(Tagged); ok {
- return reference{
- namedRepository: repo,
- tag: tagged.Tag(),
- digest: digest,
- }, nil
- }
- return canonicalReference{
- namedRepository: repo,
- digest: digest,
- }, nil
-}
-
-// TrimNamed removes any tag or digest from the named reference.
-func TrimNamed(ref Named) Named {
- repo := repository{}
- if r, ok := ref.(namedRepository); ok {
- repo.domain, repo.path = r.Domain(), r.Path()
- } else {
- repo.domain, repo.path = splitDomain(ref.Name())
- }
- return repo
-}
-
-func getBestReferenceType(ref reference) Reference {
- if ref.Name() == "" {
- // Allow digest only references
- if ref.digest != "" {
- return digestReference(ref.digest)
- }
- return nil
- }
- if ref.tag == "" {
- if ref.digest != "" {
- return canonicalReference{
- namedRepository: ref.namedRepository,
- digest: ref.digest,
- }
- }
- return ref.namedRepository
- }
- if ref.digest == "" {
- return taggedReference{
- namedRepository: ref.namedRepository,
- tag: ref.tag,
- }
- }
-
- return ref
-}
-
-type reference struct {
- namedRepository
- tag string
- digest digest.Digest
-}
-
-func (r reference) String() string {
- return r.Name() + ":" + r.tag + "@" + r.digest.String()
-}
-
-func (r reference) Tag() string {
- return r.tag
-}
-
-func (r reference) Digest() digest.Digest {
- return r.digest
-}
-
-type repository struct {
- domain string
- path string
-}
-
-func (r repository) String() string {
- return r.Name()
-}
-
-func (r repository) Name() string {
- if r.domain == "" {
- return r.path
- }
- return r.domain + "/" + r.path
-}
-
-func (r repository) Domain() string {
- return r.domain
-}
-
-func (r repository) Path() string {
- return r.path
-}
-
-type digestReference digest.Digest
-
-func (d digestReference) String() string {
- return digest.Digest(d).String()
-}
-
-func (d digestReference) Digest() digest.Digest {
- return digest.Digest(d)
-}
-
-type taggedReference struct {
- namedRepository
- tag string
-}
-
-func (t taggedReference) String() string {
- return t.Name() + ":" + t.tag
-}
-
-func (t taggedReference) Tag() string {
- return t.tag
-}
-
-type canonicalReference struct {
- namedRepository
- digest digest.Digest
-}
-
-func (c canonicalReference) String() string {
- return c.Name() + "@" + c.digest.String()
-}
-
-func (c canonicalReference) Digest() digest.Digest {
- return c.digest
-}
diff --git a/vendor/github.com/containerd/containerd/reference/docker/regexp.go b/vendor/github.com/containerd/containerd/reference/docker/regexp.go
deleted file mode 100644
index 4be3c575e04..00000000000
--- a/vendor/github.com/containerd/containerd/reference/docker/regexp.go
+++ /dev/null
@@ -1,191 +0,0 @@
-/*
- Copyright The containerd Authors.
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
-*/
-
-package docker
-
-import "regexp"
-
-var (
- // alphaNumeric defines the alpha numeric atom, typically a
- // component of names. This only allows lower case characters and digits.
- alphaNumeric = `[a-z0-9]+`
-
- // separator defines the separators allowed to be embedded in name
- // components. This allow one period, one or two underscore and multiple
- // dashes. Repeated dashes and underscores are intentionally treated
- // differently. In order to support valid hostnames as name components,
- // supporting repeated dash was added. Additionally double underscore is
- // now allowed as a separator to loosen the restriction for previously
- // supported names.
- separator = `(?:[._]|__|[-]*)`
-
- // nameComponent restricts registry path component names to start
- // with at least one letter or number, with following parts able to be
- // separated by one period, one or two underscore and multiple dashes.
- nameComponent = expression(
- alphaNumeric,
- optional(repeated(separator, alphaNumeric)))
-
- // domainNameComponent restricts the registry domain component of a
- // repository name to start with a component as defined by DomainRegexp.
- domainNameComponent = `(?:[a-zA-Z0-9]|[a-zA-Z0-9][a-zA-Z0-9-]*[a-zA-Z0-9])`
-
- // ipv6address are enclosed between square brackets and may be represented
- // in many ways, see rfc5952. Only IPv6 in compressed or uncompressed format
- // are allowed, IPv6 zone identifiers (rfc6874) or Special addresses such as
- // IPv4-Mapped are deliberately excluded.
- ipv6address = expression(
- literal(`[`), `(?:[a-fA-F0-9:]+)`, literal(`]`),
- )
-
- // domainName defines the structure of potential domain components
- // that may be part of image names. This is purposely a subset of what is
- // allowed by DNS to ensure backwards compatibility with Docker image
- // names. This includes IPv4 addresses on decimal format.
- domainName = expression(
- domainNameComponent,
- optional(repeated(literal(`.`), domainNameComponent)),
- )
-
- // host defines the structure of potential domains based on the URI
- // Host subcomponent on rfc3986. It may be a subset of DNS domain name,
- // or an IPv4 address in decimal format, or an IPv6 address between square
- // brackets (excluding zone identifiers as defined by rfc6874 or special
- // addresses such as IPv4-Mapped).
- host = `(?:` + domainName + `|` + ipv6address + `)`
-
- // allowed by the URI Host subcomponent on rfc3986 to ensure backwards
- // compatibility with Docker image names.
- domain = expression(
- host,
- optional(literal(`:`), `[0-9]+`))
-
- // DomainRegexp defines the structure of potential domain components
- // that may be part of image names. This is purposely a subset of what is
- // allowed by DNS to ensure backwards compatibility with Docker image
- // names.
- DomainRegexp = regexp.MustCompile(domain)
-
- tag = `[\w][\w.-]{0,127}`
- // TagRegexp matches valid tag names. From docker/docker:graph/tags.go.
- TagRegexp = regexp.MustCompile(tag)
-
- anchoredTag = anchored(tag)
- // anchoredTagRegexp matches valid tag names, anchored at the start and
- // end of the matched string.
- anchoredTagRegexp = regexp.MustCompile(anchoredTag)
-
- digestPat = `[A-Za-z][A-Za-z0-9]*(?:[-_+.][A-Za-z][A-Za-z0-9]*)*[:][[:xdigit:]]{32,}`
- // DigestRegexp matches valid digests.
- DigestRegexp = regexp.MustCompile(digestPat)
-
- anchoredDigest = anchored(digestPat)
- // anchoredDigestRegexp matches valid digests, anchored at the start and
- // end of the matched string.
- anchoredDigestRegexp = regexp.MustCompile(anchoredDigest)
-
- namePat = expression(
- optional(domain, literal(`/`)),
- nameComponent,
- optional(repeated(literal(`/`), nameComponent)))
- // NameRegexp is the format for the name component of references. The
- // regexp has capturing groups for the domain and name part omitting
- // the separating forward slash from either.
- NameRegexp = regexp.MustCompile(namePat)
-
- anchoredName = anchored(
- optional(capture(domain), literal(`/`)),
- capture(nameComponent,
- optional(repeated(literal(`/`), nameComponent))))
- // anchoredNameRegexp is used to parse a name value, capturing the
- // domain and trailing components.
- anchoredNameRegexp = regexp.MustCompile(anchoredName)
-
- referencePat = anchored(capture(namePat),
- optional(literal(":"), capture(tag)),
- optional(literal("@"), capture(digestPat)))
- // ReferenceRegexp is the full supported format of a reference. The regexp
- // is anchored and has capturing groups for name, tag, and digest
- // components.
- ReferenceRegexp = regexp.MustCompile(referencePat)
-
- identifier = `([a-f0-9]{64})`
- // IdentifierRegexp is the format for string identifier used as a
- // content addressable identifier using sha256. These identifiers
- // are like digests without the algorithm, since sha256 is used.
- IdentifierRegexp = regexp.MustCompile(identifier)
-
- shortIdentifier = `([a-f0-9]{6,64})`
- // ShortIdentifierRegexp is the format used to represent a prefix
- // of an identifier. A prefix may be used to match a sha256 identifier
- // within a list of trusted identifiers.
- ShortIdentifierRegexp = regexp.MustCompile(shortIdentifier)
-
- anchoredIdentifier = anchored(identifier)
- // anchoredIdentifierRegexp is used to check or match an
- // identifier value, anchored at start and end of string.
- anchoredIdentifierRegexp = regexp.MustCompile(anchoredIdentifier)
-)
-
-// literal compiles s into a literal regular expression, escaping any regexp
-// reserved characters.
-func literal(s string) string {
- re := regexp.MustCompile(regexp.QuoteMeta(s))
-
- if _, complete := re.LiteralPrefix(); !complete {
- panic("must be a literal")
- }
-
- return re.String()
-}
-
-// expression defines a full expression, where each regular expression must
-// follow the previous.
-func expression(res ...string) string {
- var s string
- for _, re := range res {
- s += re
- }
-
- return s
-}
-
-// optional wraps the expression in a non-capturing group and makes the
-// production optional.
-func optional(res ...string) string {
- return group(expression(res...)) + `?`
-}
-
-// repeated wraps the regexp in a non-capturing group to get one or more
-// matches.
-func repeated(res ...string) string {
- return group(expression(res...)) + `+`
-}
-
-// group wraps the regexp in a non-capturing group.
-func group(res ...string) string {
- return `(?:` + expression(res...) + `)`
-}
-
-// capture wraps the expression in a capturing group.
-func capture(res ...string) string {
- return `(` + expression(res...) + `)`
-}
-
-// anchored anchors the regular expression by adding start and end delimiters.
-func anchored(res ...string) string {
- return `^` + expression(res...) + `$`
-}
diff --git a/vendor/github.com/containerd/containerd/reference/docker/sort.go b/vendor/github.com/containerd/containerd/reference/docker/sort.go
deleted file mode 100644
index 984e37528d2..00000000000
--- a/vendor/github.com/containerd/containerd/reference/docker/sort.go
+++ /dev/null
@@ -1,73 +0,0 @@
-/*
- Copyright The containerd Authors.
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
-*/
-
-package docker
-
-import (
- "sort"
-)
-
-// Sort sorts string references preferring higher information references
-// The precedence is as follows:
-// 1. Name + Tag + Digest
-// 2. Name + Tag
-// 3. Name + Digest
-// 4. Name
-// 5. Digest
-// 6. Parse error
-func Sort(references []string) []string {
- var prefs []Reference
- var bad []string
-
- for _, ref := range references {
- pref, err := ParseAnyReference(ref)
- if err != nil {
- bad = append(bad, ref)
- } else {
- prefs = append(prefs, pref)
- }
- }
- sort.Slice(prefs, func(a, b int) bool {
- ar := refRank(prefs[a])
- br := refRank(prefs[b])
- if ar == br {
- return prefs[a].String() < prefs[b].String()
- }
- return ar < br
- })
- sort.Strings(bad)
- var refs []string
- for _, pref := range prefs {
- refs = append(refs, pref.String())
- }
- return append(refs, bad...)
-}
-
-func refRank(ref Reference) uint8 {
- if _, ok := ref.(Named); ok {
- if _, ok = ref.(Tagged); ok {
- if _, ok = ref.(Digested); ok {
- return 1
- }
- return 2
- }
- if _, ok = ref.(Digested); ok {
- return 3
- }
- return 4
- }
- return 5
-}
diff --git a/vendor/github.com/containerd/containerd/reference/reference.go b/vendor/github.com/containerd/containerd/reference/reference.go
index a4bf6da6019..9329a9aab8c 100644
--- a/vendor/github.com/containerd/containerd/reference/reference.go
+++ b/vendor/github.com/containerd/containerd/reference/reference.go
@@ -18,7 +18,6 @@ package reference
import (
"errors"
- "fmt"
"net/url"
"path"
"regexp"
@@ -136,8 +135,12 @@ func (r Spec) Hostname() string {
// Digest returns the digest portion of the reference spec. This may be a
// partial or invalid digest, which may be used to lookup a complete digest.
func (r Spec) Digest() digest.Digest {
- _, dgst := SplitObject(r.Object)
- return dgst
+ i := strings.Index(r.Object, "@")
+
+ if i < 0 {
+ return ""
+ }
+ return digest.Digest(r.Object[i+1:])
}
// String returns the normalized string for the ref.
@@ -146,21 +149,31 @@ func (r Spec) String() string {
return r.Locator
}
if r.Object[:1] == "@" {
- return fmt.Sprintf("%v%v", r.Locator, r.Object)
+ return r.Locator + r.Object
}
- return fmt.Sprintf("%v:%v", r.Locator, r.Object)
+ return r.Locator + ":" + r.Object
}
-// SplitObject provides two parts of the object spec, delimited by an `@`
-// symbol.
+// SplitObject provides two parts of the object spec, delimited by an "@"
+// symbol. It does not perform any validation on correctness of the values
+// returned, and it's the callers' responsibility to validate the result.
+//
+// If an "@" delimiter is found, it returns the part *including* the "@"
+// delimiter as "tag", and the part after the "@" as digest.
+//
+// The example below produces "docker.io/library/ubuntu:latest@" and
+// "sha256:deadbeef";
+//
+// t, d := SplitObject("docker.io/library/ubuntu:latest@sha256:deadbeef")
+// fmt.Println(t) // docker.io/library/ubuntu:latest@
+// fmt.Println(d) // sha256:deadbeef
//
-// Either may be empty and it is the callers job to validate them
-// appropriately.
+// Deprecated: use [Parse] and [Spec.Digest] instead.
func SplitObject(obj string) (tag string, dgst digest.Digest) {
- parts := strings.SplitAfterN(obj, "@", 2)
- if len(parts) < 2 {
- return parts[0], ""
+ if i := strings.Index(obj, "@"); i >= 0 {
+ // Offset by one so preserve the "@" in the tag returned.
+ return obj[:i+1], digest.Digest(obj[i+1:])
}
- return parts[0], digest.Digest(parts[1])
+ return obj, ""
}
diff --git a/vendor/github.com/containerd/containerd/remotes/docker/auth/fetch.go b/vendor/github.com/containerd/containerd/remotes/docker/auth/fetch.go
index 64c6a38f91a..244e03509a7 100644
--- a/vendor/github.com/containerd/containerd/remotes/docker/auth/fetch.go
+++ b/vendor/github.com/containerd/containerd/remotes/docker/auth/fetch.go
@@ -26,9 +26,9 @@ import (
"strings"
"time"
- "github.com/containerd/containerd/log"
remoteserrors "github.com/containerd/containerd/remotes/errors"
"github.com/containerd/containerd/version"
+ "github.com/containerd/log"
)
var (
diff --git a/vendor/github.com/containerd/containerd/remotes/docker/authorizer.go b/vendor/github.com/containerd/containerd/remotes/docker/authorizer.go
index 9b3663cd141..2bf388e8cb0 100644
--- a/vendor/github.com/containerd/containerd/remotes/docker/authorizer.go
+++ b/vendor/github.com/containerd/containerd/remotes/docker/authorizer.go
@@ -25,8 +25,9 @@ import (
"strings"
"sync"
+ "github.com/containerd/log"
+
"github.com/containerd/containerd/errdefs"
- "github.com/containerd/containerd/log"
"github.com/containerd/containerd/remotes/docker/auth"
remoteerrors "github.com/containerd/containerd/remotes/errors"
)
@@ -148,9 +149,11 @@ func (a *dockerAuthorizer) AddResponses(ctx context.Context, responses []*http.R
defer a.mu.Unlock()
for _, c := range auth.ParseAuthHeader(last.Header) {
if c.Scheme == auth.BearerAuth {
- if err := invalidAuthorization(c, responses); err != nil {
+ if retry, err := invalidAuthorization(ctx, c, responses); err != nil {
delete(a.handlers, host)
return err
+ } else if retry {
+ delete(a.handlers, host)
}
// reuse existing handler
@@ -328,18 +331,24 @@ func (ah *authHandler) doBearerAuth(ctx context.Context) (token, refreshToken st
return resp.Token, resp.RefreshToken, nil
}
-func invalidAuthorization(c auth.Challenge, responses []*http.Response) error {
+func invalidAuthorization(ctx context.Context, c auth.Challenge, responses []*http.Response) (retry bool, _ error) {
errStr := c.Parameters["error"]
if errStr == "" {
- return nil
+ return retry, nil
}
n := len(responses)
if n == 1 || (n > 1 && !sameRequest(responses[n-2].Request, responses[n-1].Request)) {
- return nil
+ limitedErr := errStr
+ errLenghLimit := 64
+ if len(limitedErr) > errLenghLimit {
+ limitedErr = limitedErr[:errLenghLimit] + "..."
+ }
+ log.G(ctx).WithField("error", limitedErr).Debug("authorization error using bearer token, retrying")
+ return true, nil
}
- return fmt.Errorf("server message: %s: %w", errStr, ErrInvalidAuthorization)
+ return retry, fmt.Errorf("server message: %s: %w", errStr, ErrInvalidAuthorization)
}
func sameRequest(r1, r2 *http.Request) bool {
diff --git a/vendor/github.com/containerd/containerd/remotes/docker/converter.go b/vendor/github.com/containerd/containerd/remotes/docker/converter.go
index d7dca0d3643..95a68d70e67 100644
--- a/vendor/github.com/containerd/containerd/remotes/docker/converter.go
+++ b/vendor/github.com/containerd/containerd/remotes/docker/converter.go
@@ -24,8 +24,8 @@ import (
"github.com/containerd/containerd/content"
"github.com/containerd/containerd/images"
- "github.com/containerd/containerd/log"
"github.com/containerd/containerd/remotes"
+ "github.com/containerd/log"
digest "github.com/opencontainers/go-digest"
ocispec "github.com/opencontainers/image-spec/specs-go/v1"
)
diff --git a/vendor/github.com/containerd/containerd/remotes/docker/converter_fuzz.go b/vendor/github.com/containerd/containerd/remotes/docker/converter_fuzz.go
index 9082053924b..aa7cf4666f7 100644
--- a/vendor/github.com/containerd/containerd/remotes/docker/converter_fuzz.go
+++ b/vendor/github.com/containerd/containerd/remotes/docker/converter_fuzz.go
@@ -24,7 +24,7 @@ import (
fuzz "github.com/AdaLogics/go-fuzz-headers"
"github.com/containerd/containerd/content/local"
- "github.com/containerd/containerd/log"
+ "github.com/containerd/log"
ocispec "github.com/opencontainers/image-spec/specs-go/v1"
"github.com/sirupsen/logrus"
)
diff --git a/vendor/github.com/containerd/containerd/remotes/docker/fetcher.go b/vendor/github.com/containerd/containerd/remotes/docker/fetcher.go
index ecf245933f7..c4c401ad1d5 100644
--- a/vendor/github.com/containerd/containerd/remotes/docker/fetcher.go
+++ b/vendor/github.com/containerd/containerd/remotes/docker/fetcher.go
@@ -26,11 +26,12 @@ import (
"net/url"
"strings"
- "github.com/containerd/containerd/errdefs"
- "github.com/containerd/containerd/images"
- "github.com/containerd/containerd/log"
+ "github.com/containerd/log"
digest "github.com/opencontainers/go-digest"
ocispec "github.com/opencontainers/image-spec/specs-go/v1"
+
+ "github.com/containerd/containerd/errdefs"
+ "github.com/containerd/containerd/images"
)
type dockerFetcher struct {
diff --git a/vendor/github.com/containerd/containerd/remotes/docker/fetcher_fuzz.go b/vendor/github.com/containerd/containerd/remotes/docker/fetcher_fuzz.go
index b98886c5956..f396a74f4f7 100644
--- a/vendor/github.com/containerd/containerd/remotes/docker/fetcher_fuzz.go
+++ b/vendor/github.com/containerd/containerd/remotes/docker/fetcher_fuzz.go
@@ -25,8 +25,6 @@ import (
"net/http"
"net/http/httptest"
"net/url"
-
- refDocker "github.com/containerd/containerd/reference/docker"
)
func FuzzFetcher(data []byte) int {
@@ -74,8 +72,3 @@ func FuzzFetcher(data []byte) int {
}
return 1
}
-
-func FuzzParseDockerRef(data []byte) int {
- _, _ = refDocker.ParseDockerRef(string(data))
- return 1
-}
diff --git a/vendor/github.com/containerd/containerd/remotes/docker/handler.go b/vendor/github.com/containerd/containerd/remotes/docker/handler.go
index 27638ccc02f..ccec490133b 100644
--- a/vendor/github.com/containerd/containerd/remotes/docker/handler.go
+++ b/vendor/github.com/containerd/containerd/remotes/docker/handler.go
@@ -25,8 +25,8 @@ import (
"github.com/containerd/containerd/content"
"github.com/containerd/containerd/images"
"github.com/containerd/containerd/labels"
- "github.com/containerd/containerd/log"
"github.com/containerd/containerd/reference"
+ "github.com/containerd/log"
ocispec "github.com/opencontainers/image-spec/specs-go/v1"
)
diff --git a/vendor/github.com/containerd/containerd/remotes/docker/httpreadseeker.go b/vendor/github.com/containerd/containerd/remotes/docker/httpreadseeker.go
index 82435933906..deb888cbc8f 100644
--- a/vendor/github.com/containerd/containerd/remotes/docker/httpreadseeker.go
+++ b/vendor/github.com/containerd/containerd/remotes/docker/httpreadseeker.go
@@ -21,8 +21,9 @@ import (
"fmt"
"io"
+ "github.com/containerd/log"
+
"github.com/containerd/containerd/errdefs"
- "github.com/containerd/containerd/log"
)
const maxRetry = 3
diff --git a/vendor/github.com/containerd/containerd/remotes/docker/pusher.go b/vendor/github.com/containerd/containerd/remotes/docker/pusher.go
index 678e17e1230..f97ab144e8b 100644
--- a/vendor/github.com/containerd/containerd/remotes/docker/pusher.go
+++ b/vendor/github.com/containerd/containerd/remotes/docker/pusher.go
@@ -28,14 +28,15 @@ import (
"sync"
"time"
+ "github.com/containerd/log"
+ digest "github.com/opencontainers/go-digest"
+ ocispec "github.com/opencontainers/image-spec/specs-go/v1"
+
"github.com/containerd/containerd/content"
"github.com/containerd/containerd/errdefs"
"github.com/containerd/containerd/images"
- "github.com/containerd/containerd/log"
"github.com/containerd/containerd/remotes"
remoteserrors "github.com/containerd/containerd/remotes/errors"
- digest "github.com/opencontainers/go-digest"
- ocispec "github.com/opencontainers/image-spec/specs-go/v1"
)
type dockerPusher struct {
@@ -284,7 +285,7 @@ func (p dockerPusher) push(ctx context.Context, desc ocispec.Descriptor, ref str
req.body = func() (io.ReadCloser, error) {
pr, pw := io.Pipe()
pushw.setPipe(pw)
- return io.NopCloser(pr), nil
+ return pr, nil
}
req.size = desc.Size
@@ -292,7 +293,6 @@ func (p dockerPusher) push(ctx context.Context, desc ocispec.Descriptor, ref str
resp, err := req.doWithRetries(ctx, nil)
if err != nil {
pushw.setError(err)
- pushw.Close()
return
}
@@ -302,7 +302,7 @@ func (p dockerPusher) push(ctx context.Context, desc ocispec.Descriptor, ref str
err := remoteserrors.NewUnexpectedStatusErr(resp)
log.G(ctx).WithField("resp", resp).WithField("body", string(err.(remoteserrors.ErrUnexpectedStatus).Body)).Debug("unexpected response")
pushw.setError(err)
- pushw.Close()
+ return
}
pushw.setResponse(resp)
}()
@@ -335,10 +335,12 @@ type pushWriter struct {
pipe *io.PipeWriter
- pipeC chan *io.PipeWriter
- respC chan *http.Response
+ done chan struct{}
closeOnce sync.Once
- errC chan error
+
+ pipeC chan *io.PipeWriter
+ respC chan *http.Response
+ errC chan error
isManifest bool
@@ -356,19 +358,51 @@ func newPushWriter(db *dockerBase, ref string, expected digest.Digest, tracker S
pipeC: make(chan *io.PipeWriter, 1),
respC: make(chan *http.Response, 1),
errC: make(chan error, 1),
+ done: make(chan struct{}),
isManifest: isManifest,
}
}
func (pw *pushWriter) setPipe(p *io.PipeWriter) {
- pw.pipeC <- p
+ select {
+ case <-pw.done:
+ case pw.pipeC <- p:
+ }
}
func (pw *pushWriter) setError(err error) {
- pw.errC <- err
+ select {
+ case <-pw.done:
+ case pw.errC <- err:
+ }
}
+
func (pw *pushWriter) setResponse(resp *http.Response) {
- pw.respC <- resp
+ select {
+ case <-pw.done:
+ case pw.respC <- resp:
+ }
+}
+
+func (pw *pushWriter) replacePipe(p *io.PipeWriter) error {
+ if pw.pipe == nil {
+ pw.pipe = p
+ return nil
+ }
+
+ pw.pipe.CloseWithError(content.ErrReset)
+ pw.pipe = p
+
+ // If content has already been written, the bytes
+ // cannot be written again and the caller must reset
+ status, err := pw.tracker.GetStatus(pw.ref)
+ if err != nil {
+ return err
+ }
+ status.Offset = 0
+ status.UpdatedAt = time.Now()
+ pw.tracker.SetStatus(pw.ref, status)
+ return content.ErrReset
}
func (pw *pushWriter) Write(p []byte) (n int, err error) {
@@ -378,26 +412,18 @@ func (pw *pushWriter) Write(p []byte) (n int, err error) {
}
if pw.pipe == nil {
- p, ok := <-pw.pipeC
- if !ok {
+ select {
+ case <-pw.done:
return 0, io.ErrClosedPipe
+ case p := <-pw.pipeC:
+ pw.replacePipe(p)
}
- pw.pipe = p
} else {
select {
- case p, ok := <-pw.pipeC:
- if !ok {
- return 0, io.ErrClosedPipe
- }
- pw.pipe.CloseWithError(content.ErrReset)
- pw.pipe = p
-
- // If content has already been written, the bytes
- // cannot be written and the caller must reset
- status.Offset = 0
- status.UpdatedAt = time.Now()
- pw.tracker.SetStatus(pw.ref, status)
- return 0, content.ErrReset
+ case <-pw.done:
+ return 0, io.ErrClosedPipe
+ case p := <-pw.pipeC:
+ return 0, pw.replacePipe(p)
default:
}
}
@@ -407,9 +433,13 @@ func (pw *pushWriter) Write(p []byte) (n int, err error) {
// if the pipe is closed, we might have the original error on the error
// channel - so we should try and get it
select {
- case err2 := <-pw.errC:
- err = err2
- default:
+ case <-pw.done:
+ case err = <-pw.errC:
+ pw.Close()
+ case p := <-pw.pipeC:
+ return 0, pw.replacePipe(p)
+ case resp := <-pw.respC:
+ pw.setResponse(resp)
}
}
status.Offset += int64(n)
@@ -422,7 +452,7 @@ func (pw *pushWriter) Close() error {
// Ensure pipeC is closed but handle `Close()` being
// called multiple times without panicking
pw.closeOnce.Do(func() {
- close(pw.pipeC)
+ close(pw.done)
})
if pw.pipe != nil {
status, err := pw.tracker.GetStatus(pw.ref)
@@ -462,30 +492,18 @@ func (pw *pushWriter) Commit(ctx context.Context, size int64, expected digest.Di
// TODO: timeout waiting for response
var resp *http.Response
select {
+ case <-pw.done:
+ return io.ErrClosedPipe
case err := <-pw.errC:
+ pw.Close()
return err
case resp = <-pw.respC:
defer resp.Body.Close()
- case p, ok := <-pw.pipeC:
+ case p := <-pw.pipeC:
// check whether the pipe has changed in the commit, because sometimes Write
// can complete successfully, but the pipe may have changed. In that case, the
// content needs to be reset.
- if !ok {
- return io.ErrClosedPipe
- }
- pw.pipe.CloseWithError(content.ErrReset)
- pw.pipe = p
-
- // If content has already been written, the bytes
- // cannot be written again and the caller must reset
- status, err := pw.tracker.GetStatus(pw.ref)
- if err != nil {
- return err
- }
- status.Offset = 0
- status.UpdatedAt = time.Now()
- pw.tracker.SetStatus(pw.ref, status)
- return content.ErrReset
+ return pw.replacePipe(p)
}
// 201 is specified return status, some registries return
diff --git a/vendor/github.com/containerd/containerd/remotes/docker/resolver.go b/vendor/github.com/containerd/containerd/remotes/docker/resolver.go
index cca4ca6a237..8ce4cccc01e 100644
--- a/vendor/github.com/containerd/containerd/remotes/docker/resolver.go
+++ b/vendor/github.com/containerd/containerd/remotes/docker/resolver.go
@@ -25,20 +25,23 @@ import (
"net"
"net/http"
"net/url"
+ "os"
"path"
"strings"
+ "sync"
+
+ "github.com/containerd/log"
+ "github.com/opencontainers/go-digest"
+ ocispec "github.com/opencontainers/image-spec/specs-go/v1"
"github.com/containerd/containerd/errdefs"
"github.com/containerd/containerd/images"
- "github.com/containerd/containerd/log"
"github.com/containerd/containerd/reference"
"github.com/containerd/containerd/remotes"
"github.com/containerd/containerd/remotes/docker/schema1" //nolint:staticcheck // Ignore SA1019. Need to keep deprecated package for compatibility.
remoteerrors "github.com/containerd/containerd/remotes/errors"
"github.com/containerd/containerd/tracing"
"github.com/containerd/containerd/version"
- "github.com/opencontainers/go-digest"
- ocispec "github.com/opencontainers/image-spec/specs-go/v1"
)
var (
@@ -704,9 +707,92 @@ func IsLocalhost(host string) bool {
return ip.IsLoopback()
}
+// NewHTTPFallback returns http.RoundTripper which allows fallback from https to
+// http for registry endpoints with configurations for both http and TLS,
+// such as defaulted localhost endpoints.
+func NewHTTPFallback(transport http.RoundTripper) http.RoundTripper {
+ return &httpFallback{
+ super: transport,
+ }
+}
+
+type httpFallback struct {
+ super http.RoundTripper
+ host string
+ mu sync.Mutex
+}
+
+func (f *httpFallback) RoundTrip(r *http.Request) (*http.Response, error) {
+ f.mu.Lock()
+ fallback := f.host == r.URL.Host
+ f.mu.Unlock()
+
+ // only fall back if the same host had previously fell back
+ if !fallback {
+ resp, err := f.super.RoundTrip(r)
+ if !isTLSError(err) && !isPortError(err, r.URL.Host) {
+ return resp, err
+ }
+ }
+
+ plainHTTPUrl := *r.URL
+ plainHTTPUrl.Scheme = "http"
+
+ plainHTTPRequest := *r
+ plainHTTPRequest.URL = &plainHTTPUrl
+
+ if !fallback {
+ f.mu.Lock()
+ if f.host != r.URL.Host {
+ f.host = r.URL.Host
+ }
+ f.mu.Unlock()
+
+ // update body on the second attempt
+ if r.Body != nil && r.GetBody != nil {
+ body, err := r.GetBody()
+ if err != nil {
+ return nil, err
+ }
+ plainHTTPRequest.Body = body
+ }
+ }
+
+ return f.super.RoundTrip(&plainHTTPRequest)
+}
+
+func isTLSError(err error) bool {
+ if err == nil {
+ return false
+ }
+ var tlsErr tls.RecordHeaderError
+ if errors.As(err, &tlsErr) && string(tlsErr.RecordHeader[:]) == "HTTP/" {
+ return true
+ }
+ if strings.Contains(err.Error(), "TLS handshake timeout") {
+ return true
+ }
+
+ return false
+}
+
+func isPortError(err error, host string) bool {
+ if isConnError(err) || os.IsTimeout(err) {
+ if _, port, _ := net.SplitHostPort(host); port != "" {
+ // Port is specified, will not retry on different port with scheme change
+ return false
+ }
+ return true
+ }
+
+ return false
+}
+
// HTTPFallback is an http.RoundTripper which allows fallback from https to http
// for registry endpoints with configurations for both http and TLS, such as
// defaulted localhost endpoints.
+//
+// Deprecated: Use NewHTTPFallback instead.
type HTTPFallback struct {
http.RoundTripper
}
@@ -722,6 +808,14 @@ func (f HTTPFallback) RoundTrip(r *http.Request) (*http.Response, error) {
plainHTTPRequest := *r
plainHTTPRequest.URL = &plainHTTPUrl
+ if r.Body != nil && r.GetBody != nil {
+ body, err := r.GetBody()
+ if err != nil {
+ return nil, err
+ }
+ plainHTTPRequest.Body = body
+ }
+
return f.RoundTripper.RoundTrip(&plainHTTPRequest)
}
diff --git a/vendor/github.com/containerd/containerd/remotes/docker/resolver_unix.go b/vendor/github.com/containerd/containerd/remotes/docker/resolver_unix.go
new file mode 100644
index 00000000000..4ef0e0062a3
--- /dev/null
+++ b/vendor/github.com/containerd/containerd/remotes/docker/resolver_unix.go
@@ -0,0 +1,28 @@
+//go:build !windows
+
+/*
+ Copyright The containerd Authors.
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+*/
+
+package docker
+
+import (
+ "errors"
+ "syscall"
+)
+
+func isConnError(err error) bool {
+ return errors.Is(err, syscall.ECONNREFUSED)
+}
diff --git a/vendor/github.com/containerd/containerd/remotes/docker/resolver_windows.go b/vendor/github.com/containerd/containerd/remotes/docker/resolver_windows.go
new file mode 100644
index 00000000000..9c98df04bb5
--- /dev/null
+++ b/vendor/github.com/containerd/containerd/remotes/docker/resolver_windows.go
@@ -0,0 +1,30 @@
+//go:build windows
+
+/*
+ Copyright The containerd Authors.
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+*/
+
+package docker
+
+import (
+ "errors"
+ "syscall"
+
+ "golang.org/x/sys/windows"
+)
+
+func isConnError(err error) bool {
+ return errors.Is(err, syscall.ECONNREFUSED) || errors.Is(err, windows.WSAECONNREFUSED)
+}
diff --git a/vendor/github.com/containerd/containerd/remotes/docker/schema1/converter.go b/vendor/github.com/containerd/containerd/remotes/docker/schema1/converter.go
index 8c9e520cd27..b38c738552a 100644
--- a/vendor/github.com/containerd/containerd/remotes/docker/schema1/converter.go
+++ b/vendor/github.com/containerd/containerd/remotes/docker/schema1/converter.go
@@ -32,17 +32,18 @@ import (
"sync"
"time"
+ "github.com/containerd/log"
+ digest "github.com/opencontainers/go-digest"
+ specs "github.com/opencontainers/image-spec/specs-go"
+ ocispec "github.com/opencontainers/image-spec/specs-go/v1"
+ "golang.org/x/sync/errgroup"
+
"github.com/containerd/containerd/archive/compression"
"github.com/containerd/containerd/content"
"github.com/containerd/containerd/errdefs"
"github.com/containerd/containerd/images"
"github.com/containerd/containerd/labels"
- "github.com/containerd/containerd/log"
"github.com/containerd/containerd/remotes"
- digest "github.com/opencontainers/go-digest"
- specs "github.com/opencontainers/image-spec/specs-go"
- ocispec "github.com/opencontainers/image-spec/specs-go/v1"
- "golang.org/x/sync/errgroup"
)
const (
diff --git a/vendor/github.com/containerd/containerd/remotes/handlers.go b/vendor/github.com/containerd/containerd/remotes/handlers.go
index f24669dc4ac..365ff5fc00f 100644
--- a/vendor/github.com/containerd/containerd/remotes/handlers.go
+++ b/vendor/github.com/containerd/containerd/remotes/handlers.go
@@ -25,14 +25,15 @@ import (
"strings"
"sync"
+ "github.com/containerd/log"
+ "github.com/containerd/platforms"
+ ocispec "github.com/opencontainers/image-spec/specs-go/v1"
+ "golang.org/x/sync/semaphore"
+
"github.com/containerd/containerd/content"
"github.com/containerd/containerd/errdefs"
"github.com/containerd/containerd/images"
"github.com/containerd/containerd/labels"
- "github.com/containerd/containerd/log"
- "github.com/containerd/containerd/platforms"
- ocispec "github.com/opencontainers/image-spec/specs-go/v1"
- "golang.org/x/sync/semaphore"
)
type refKeyPrefix struct{}
diff --git a/vendor/github.com/containerd/containerd/version/version.go b/vendor/github.com/containerd/containerd/version/version.go
index 225ddc389d8..b83e7596415 100644
--- a/vendor/github.com/containerd/containerd/version/version.go
+++ b/vendor/github.com/containerd/containerd/version/version.go
@@ -23,7 +23,7 @@ var (
Package = "github.com/containerd/containerd"
// Version holds the complete version number. Filled in at linking time.
- Version = "1.7.13+unknown"
+ Version = "1.7.24+unknown"
// Revision is filled with the VCS (e.g. git) revision being used to build
// the program at linking time.
diff --git a/vendor/github.com/containerd/errdefs/LICENSE b/vendor/github.com/containerd/errdefs/LICENSE
new file mode 100644
index 00000000000..584149b6ee2
--- /dev/null
+++ b/vendor/github.com/containerd/errdefs/LICENSE
@@ -0,0 +1,191 @@
+
+ Apache License
+ Version 2.0, January 2004
+ https://www.apache.org/licenses/
+
+ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+ 1. Definitions.
+
+ "License" shall mean the terms and conditions for use, reproduction,
+ and distribution as defined by Sections 1 through 9 of this document.
+
+ "Licensor" shall mean the copyright owner or entity authorized by
+ the copyright owner that is granting the License.
+
+ "Legal Entity" shall mean the union of the acting entity and all
+ other entities that control, are controlled by, or are under common
+ control with that entity. For the purposes of this definition,
+ "control" means (i) the power, direct or indirect, to cause the
+ direction or management of such entity, whether by contract or
+ otherwise, or (ii) ownership of fifty percent (50%) or more of the
+ outstanding shares, or (iii) beneficial ownership of such entity.
+
+ "You" (or "Your") shall mean an individual or Legal Entity
+ exercising permissions granted by this License.
+
+ "Source" form shall mean the preferred form for making modifications,
+ including but not limited to software source code, documentation
+ source, and configuration files.
+
+ "Object" form shall mean any form resulting from mechanical
+ transformation or translation of a Source form, including but
+ not limited to compiled object code, generated documentation,
+ and conversions to other media types.
+
+ "Work" shall mean the work of authorship, whether in Source or
+ Object form, made available under the License, as indicated by a
+ copyright notice that is included in or attached to the work
+ (an example is provided in the Appendix below).
+
+ "Derivative Works" shall mean any work, whether in Source or Object
+ form, that is based on (or derived from) the Work and for which the
+ editorial revisions, annotations, elaborations, or other modifications
+ represent, as a whole, an original work of authorship. For the purposes
+ of this License, Derivative Works shall not include works that remain
+ separable from, or merely link (or bind by name) to the interfaces of,
+ the Work and Derivative Works thereof.
+
+ "Contribution" shall mean any work of authorship, including
+ the original version of the Work and any modifications or additions
+ to that Work or Derivative Works thereof, that is intentionally
+ submitted to Licensor for inclusion in the Work by the copyright owner
+ or by an individual or Legal Entity authorized to submit on behalf of
+ the copyright owner. For the purposes of this definition, "submitted"
+ means any form of electronic, verbal, or written communication sent
+ to the Licensor or its representatives, including but not limited to
+ communication on electronic mailing lists, source code control systems,
+ and issue tracking systems that are managed by, or on behalf of, the
+ Licensor for the purpose of discussing and improving the Work, but
+ excluding communication that is conspicuously marked or otherwise
+ designated in writing by the copyright owner as "Not a Contribution."
+
+ "Contributor" shall mean Licensor and any individual or Legal Entity
+ on behalf of whom a Contribution has been received by Licensor and
+ subsequently incorporated within the Work.
+
+ 2. Grant of Copyright License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ copyright license to reproduce, prepare Derivative Works of,
+ publicly display, publicly perform, sublicense, and distribute the
+ Work and such Derivative Works in Source or Object form.
+
+ 3. Grant of Patent License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ (except as stated in this section) patent license to make, have made,
+ use, offer to sell, sell, import, and otherwise transfer the Work,
+ where such license applies only to those patent claims licensable
+ by such Contributor that are necessarily infringed by their
+ Contribution(s) alone or by combination of their Contribution(s)
+ with the Work to which such Contribution(s) was submitted. If You
+ institute patent litigation against any entity (including a
+ cross-claim or counterclaim in a lawsuit) alleging that the Work
+ or a Contribution incorporated within the Work constitutes direct
+ or contributory patent infringement, then any patent licenses
+ granted to You under this License for that Work shall terminate
+ as of the date such litigation is filed.
+
+ 4. Redistribution. You may reproduce and distribute copies of the
+ Work or Derivative Works thereof in any medium, with or without
+ modifications, and in Source or Object form, provided that You
+ meet the following conditions:
+
+ (a) You must give any other recipients of the Work or
+ Derivative Works a copy of this License; and
+
+ (b) You must cause any modified files to carry prominent notices
+ stating that You changed the files; and
+
+ (c) You must retain, in the Source form of any Derivative Works
+ that You distribute, all copyright, patent, trademark, and
+ attribution notices from the Source form of the Work,
+ excluding those notices that do not pertain to any part of
+ the Derivative Works; and
+
+ (d) If the Work includes a "NOTICE" text file as part of its
+ distribution, then any Derivative Works that You distribute must
+ include a readable copy of the attribution notices contained
+ within such NOTICE file, excluding those notices that do not
+ pertain to any part of the Derivative Works, in at least one
+ of the following places: within a NOTICE text file distributed
+ as part of the Derivative Works; within the Source form or
+ documentation, if provided along with the Derivative Works; or,
+ within a display generated by the Derivative Works, if and
+ wherever such third-party notices normally appear. The contents
+ of the NOTICE file are for informational purposes only and
+ do not modify the License. You may add Your own attribution
+ notices within Derivative Works that You distribute, alongside
+ or as an addendum to the NOTICE text from the Work, provided
+ that such additional attribution notices cannot be construed
+ as modifying the License.
+
+ You may add Your own copyright statement to Your modifications and
+ may provide additional or different license terms and conditions
+ for use, reproduction, or distribution of Your modifications, or
+ for any such Derivative Works as a whole, provided Your use,
+ reproduction, and distribution of the Work otherwise complies with
+ the conditions stated in this License.
+
+ 5. Submission of Contributions. Unless You explicitly state otherwise,
+ any Contribution intentionally submitted for inclusion in the Work
+ by You to the Licensor shall be under the terms and conditions of
+ this License, without any additional terms or conditions.
+ Notwithstanding the above, nothing herein shall supersede or modify
+ the terms of any separate license agreement you may have executed
+ with Licensor regarding such Contributions.
+
+ 6. Trademarks. This License does not grant permission to use the trade
+ names, trademarks, service marks, or product names of the Licensor,
+ except as required for reasonable and customary use in describing the
+ origin of the Work and reproducing the content of the NOTICE file.
+
+ 7. Disclaimer of Warranty. Unless required by applicable law or
+ agreed to in writing, Licensor provides the Work (and each
+ Contributor provides its Contributions) on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+ implied, including, without limitation, any warranties or conditions
+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+ PARTICULAR PURPOSE. You are solely responsible for determining the
+ appropriateness of using or redistributing the Work and assume any
+ risks associated with Your exercise of permissions under this License.
+
+ 8. Limitation of Liability. In no event and under no legal theory,
+ whether in tort (including negligence), contract, or otherwise,
+ unless required by applicable law (such as deliberate and grossly
+ negligent acts) or agreed to in writing, shall any Contributor be
+ liable to You for damages, including any direct, indirect, special,
+ incidental, or consequential damages of any character arising as a
+ result of this License or out of the use or inability to use the
+ Work (including but not limited to damages for loss of goodwill,
+ work stoppage, computer failure or malfunction, or any and all
+ other commercial damages or losses), even if such Contributor
+ has been advised of the possibility of such damages.
+
+ 9. Accepting Warranty or Additional Liability. While redistributing
+ the Work or Derivative Works thereof, You may choose to offer,
+ and charge a fee for, acceptance of support, warranty, indemnity,
+ or other liability obligations and/or rights consistent with this
+ License. However, in accepting such obligations, You may act only
+ on Your own behalf and on Your sole responsibility, not on behalf
+ of any other Contributor, and only if You agree to indemnify,
+ defend, and hold each Contributor harmless for any liability
+ incurred by, or claims asserted against, such Contributor by reason
+ of your accepting any such warranty or additional liability.
+
+ END OF TERMS AND CONDITIONS
+
+ Copyright The containerd Authors
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ https://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
diff --git a/vendor/github.com/containerd/errdefs/README.md b/vendor/github.com/containerd/errdefs/README.md
new file mode 100644
index 00000000000..bd418c63f98
--- /dev/null
+++ b/vendor/github.com/containerd/errdefs/README.md
@@ -0,0 +1,13 @@
+# errdefs
+
+A Go package for defining and checking common containerd errors.
+
+## Project details
+
+**errdefs** is a containerd sub-project, licensed under the [Apache 2.0 license](./LICENSE).
+As a containerd sub-project, you will find the:
+ * [Project governance](https://github.com/containerd/project/blob/main/GOVERNANCE.md),
+ * [Maintainers](https://github.com/containerd/project/blob/main/MAINTAINERS),
+ * and [Contributing guidelines](https://github.com/containerd/project/blob/main/CONTRIBUTING.md)
+
+information in our [`containerd/project`](https://github.com/containerd/project) repository.
diff --git a/vendor/github.com/containerd/errdefs/errors.go b/vendor/github.com/containerd/errdefs/errors.go
new file mode 100644
index 00000000000..f654d196496
--- /dev/null
+++ b/vendor/github.com/containerd/errdefs/errors.go
@@ -0,0 +1,443 @@
+/*
+ Copyright The containerd Authors.
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+*/
+
+// Package errdefs defines the common errors used throughout containerd
+// packages.
+//
+// Use with fmt.Errorf to add context to an error.
+//
+// To detect an error class, use the IsXXX functions to tell whether an error
+// is of a certain type.
+package errdefs
+
+import (
+ "context"
+ "errors"
+)
+
+// Definitions of common error types used throughout containerd. All containerd
+// errors returned by most packages will map into one of these errors classes.
+// Packages should return errors of these types when they want to instruct a
+// client to take a particular action.
+//
+// These errors map closely to grpc errors.
+var (
+ ErrUnknown = errUnknown{}
+ ErrInvalidArgument = errInvalidArgument{}
+ ErrNotFound = errNotFound{}
+ ErrAlreadyExists = errAlreadyExists{}
+ ErrPermissionDenied = errPermissionDenied{}
+ ErrResourceExhausted = errResourceExhausted{}
+ ErrFailedPrecondition = errFailedPrecondition{}
+ ErrConflict = errConflict{}
+ ErrNotModified = errNotModified{}
+ ErrAborted = errAborted{}
+ ErrOutOfRange = errOutOfRange{}
+ ErrNotImplemented = errNotImplemented{}
+ ErrInternal = errInternal{}
+ ErrUnavailable = errUnavailable{}
+ ErrDataLoss = errDataLoss{}
+ ErrUnauthenticated = errUnauthorized{}
+)
+
+// cancelled maps to Moby's "ErrCancelled"
+type cancelled interface {
+ Cancelled()
+}
+
+// IsCanceled returns true if the error is due to `context.Canceled`.
+func IsCanceled(err error) bool {
+ return errors.Is(err, context.Canceled) || isInterface[cancelled](err)
+}
+
+type errUnknown struct{}
+
+func (errUnknown) Error() string { return "unknown" }
+
+func (errUnknown) Unknown() {}
+
+func (e errUnknown) WithMessage(msg string) error {
+ return customMessage{e, msg}
+}
+
+// unknown maps to Moby's "ErrUnknown"
+type unknown interface {
+ Unknown()
+}
+
+// IsUnknown returns true if the error is due to an unknown error,
+// unhandled condition or unexpected response.
+func IsUnknown(err error) bool {
+ return errors.Is(err, errUnknown{}) || isInterface[unknown](err)
+}
+
+type errInvalidArgument struct{}
+
+func (errInvalidArgument) Error() string { return "invalid argument" }
+
+func (errInvalidArgument) InvalidParameter() {}
+
+func (e errInvalidArgument) WithMessage(msg string) error {
+ return customMessage{e, msg}
+}
+
+// invalidParameter maps to Moby's "ErrInvalidParameter"
+type invalidParameter interface {
+ InvalidParameter()
+}
+
+// IsInvalidArgument returns true if the error is due to an invalid argument
+func IsInvalidArgument(err error) bool {
+ return errors.Is(err, ErrInvalidArgument) || isInterface[invalidParameter](err)
+}
+
+// deadlineExceed maps to Moby's "ErrDeadline"
+type deadlineExceeded interface {
+ DeadlineExceeded()
+}
+
+// IsDeadlineExceeded returns true if the error is due to
+// `context.DeadlineExceeded`.
+func IsDeadlineExceeded(err error) bool {
+ return errors.Is(err, context.DeadlineExceeded) || isInterface[deadlineExceeded](err)
+}
+
+type errNotFound struct{}
+
+func (errNotFound) Error() string { return "not found" }
+
+func (errNotFound) NotFound() {}
+
+func (e errNotFound) WithMessage(msg string) error {
+ return customMessage{e, msg}
+}
+
+// notFound maps to Moby's "ErrNotFound"
+type notFound interface {
+ NotFound()
+}
+
+// IsNotFound returns true if the error is due to a missing object
+func IsNotFound(err error) bool {
+ return errors.Is(err, ErrNotFound) || isInterface[notFound](err)
+}
+
+type errAlreadyExists struct{}
+
+func (errAlreadyExists) Error() string { return "already exists" }
+
+func (errAlreadyExists) AlreadyExists() {}
+
+func (e errAlreadyExists) WithMessage(msg string) error {
+ return customMessage{e, msg}
+}
+
+type alreadyExists interface {
+ AlreadyExists()
+}
+
+// IsAlreadyExists returns true if the error is due to an already existing
+// metadata item
+func IsAlreadyExists(err error) bool {
+ return errors.Is(err, ErrAlreadyExists) || isInterface[alreadyExists](err)
+}
+
+type errPermissionDenied struct{}
+
+func (errPermissionDenied) Error() string { return "permission denied" }
+
+func (errPermissionDenied) Forbidden() {}
+
+func (e errPermissionDenied) WithMessage(msg string) error {
+ return customMessage{e, msg}
+}
+
+// forbidden maps to Moby's "ErrForbidden"
+type forbidden interface {
+ Forbidden()
+}
+
+// IsPermissionDenied returns true if the error is due to permission denied
+// or forbidden (403) response
+func IsPermissionDenied(err error) bool {
+ return errors.Is(err, ErrPermissionDenied) || isInterface[forbidden](err)
+}
+
+type errResourceExhausted struct{}
+
+func (errResourceExhausted) Error() string { return "resource exhausted" }
+
+func (errResourceExhausted) ResourceExhausted() {}
+
+func (e errResourceExhausted) WithMessage(msg string) error {
+ return customMessage{e, msg}
+}
+
+type resourceExhausted interface {
+ ResourceExhausted()
+}
+
+// IsResourceExhausted returns true if the error is due to
+// a lack of resources or too many attempts.
+func IsResourceExhausted(err error) bool {
+ return errors.Is(err, errResourceExhausted{}) || isInterface[resourceExhausted](err)
+}
+
+type errFailedPrecondition struct{}
+
+func (e errFailedPrecondition) Error() string { return "failed precondition" }
+
+func (errFailedPrecondition) FailedPrecondition() {}
+
+func (e errFailedPrecondition) WithMessage(msg string) error {
+ return customMessage{e, msg}
+}
+
+type failedPrecondition interface {
+ FailedPrecondition()
+}
+
+// IsFailedPrecondition returns true if an operation could not proceed due to
+// the lack of a particular condition
+func IsFailedPrecondition(err error) bool {
+ return errors.Is(err, errFailedPrecondition{}) || isInterface[failedPrecondition](err)
+}
+
+type errConflict struct{}
+
+func (errConflict) Error() string { return "conflict" }
+
+func (errConflict) Conflict() {}
+
+func (e errConflict) WithMessage(msg string) error {
+ return customMessage{e, msg}
+}
+
+// conflict maps to Moby's "ErrConflict"
+type conflict interface {
+ Conflict()
+}
+
+// IsConflict returns true if an operation could not proceed due to
+// a conflict.
+func IsConflict(err error) bool {
+ return errors.Is(err, errConflict{}) || isInterface[conflict](err)
+}
+
+type errNotModified struct{}
+
+func (errNotModified) Error() string { return "not modified" }
+
+func (errNotModified) NotModified() {}
+
+func (e errNotModified) WithMessage(msg string) error {
+ return customMessage{e, msg}
+}
+
+// notModified maps to Moby's "ErrNotModified"
+type notModified interface {
+ NotModified()
+}
+
+// IsNotModified returns true if an operation could not proceed due
+// to an object not modified from a previous state.
+func IsNotModified(err error) bool {
+ return errors.Is(err, errNotModified{}) || isInterface[notModified](err)
+}
+
+type errAborted struct{}
+
+func (errAborted) Error() string { return "aborted" }
+
+func (errAborted) Aborted() {}
+
+func (e errAborted) WithMessage(msg string) error {
+ return customMessage{e, msg}
+}
+
+type aborted interface {
+ Aborted()
+}
+
+// IsAborted returns true if an operation was aborted.
+func IsAborted(err error) bool {
+ return errors.Is(err, errAborted{}) || isInterface[aborted](err)
+}
+
+type errOutOfRange struct{}
+
+func (errOutOfRange) Error() string { return "out of range" }
+
+func (errOutOfRange) OutOfRange() {}
+
+func (e errOutOfRange) WithMessage(msg string) error {
+ return customMessage{e, msg}
+}
+
+type outOfRange interface {
+ OutOfRange()
+}
+
+// IsOutOfRange returns true if an operation could not proceed due
+// to data being out of the expected range.
+func IsOutOfRange(err error) bool {
+ return errors.Is(err, errOutOfRange{}) || isInterface[outOfRange](err)
+}
+
+type errNotImplemented struct{}
+
+func (errNotImplemented) Error() string { return "not implemented" }
+
+func (errNotImplemented) NotImplemented() {}
+
+func (e errNotImplemented) WithMessage(msg string) error {
+ return customMessage{e, msg}
+}
+
+// notImplemented maps to Moby's "ErrNotImplemented"
+type notImplemented interface {
+ NotImplemented()
+}
+
+// IsNotImplemented returns true if the error is due to not being implemented
+func IsNotImplemented(err error) bool {
+ return errors.Is(err, errNotImplemented{}) || isInterface[notImplemented](err)
+}
+
+type errInternal struct{}
+
+func (errInternal) Error() string { return "internal" }
+
+func (errInternal) System() {}
+
+func (e errInternal) WithMessage(msg string) error {
+ return customMessage{e, msg}
+}
+
+// system maps to Moby's "ErrSystem"
+type system interface {
+ System()
+}
+
+// IsInternal returns true if the error returns to an internal or system error
+func IsInternal(err error) bool {
+ return errors.Is(err, errInternal{}) || isInterface[system](err)
+}
+
+type errUnavailable struct{}
+
+func (errUnavailable) Error() string { return "unavailable" }
+
+func (errUnavailable) Unavailable() {}
+
+func (e errUnavailable) WithMessage(msg string) error {
+ return customMessage{e, msg}
+}
+
+// unavailable maps to Moby's "ErrUnavailable"
+type unavailable interface {
+ Unavailable()
+}
+
+// IsUnavailable returns true if the error is due to a resource being unavailable
+func IsUnavailable(err error) bool {
+ return errors.Is(err, errUnavailable{}) || isInterface[unavailable](err)
+}
+
+type errDataLoss struct{}
+
+func (errDataLoss) Error() string { return "data loss" }
+
+func (errDataLoss) DataLoss() {}
+
+func (e errDataLoss) WithMessage(msg string) error {
+ return customMessage{e, msg}
+}
+
+// dataLoss maps to Moby's "ErrDataLoss"
+type dataLoss interface {
+ DataLoss()
+}
+
+// IsDataLoss returns true if data during an operation was lost or corrupted
+func IsDataLoss(err error) bool {
+ return errors.Is(err, errDataLoss{}) || isInterface[dataLoss](err)
+}
+
+type errUnauthorized struct{}
+
+func (errUnauthorized) Error() string { return "unauthorized" }
+
+func (errUnauthorized) Unauthorized() {}
+
+func (e errUnauthorized) WithMessage(msg string) error {
+ return customMessage{e, msg}
+}
+
+// unauthorized maps to Moby's "ErrUnauthorized"
+type unauthorized interface {
+ Unauthorized()
+}
+
+// IsUnauthorized returns true if the error indicates that the user was
+// unauthenticated or unauthorized.
+func IsUnauthorized(err error) bool {
+ return errors.Is(err, errUnauthorized{}) || isInterface[unauthorized](err)
+}
+
+func isInterface[T any](err error) bool {
+ for {
+ switch x := err.(type) {
+ case T:
+ return true
+ case customMessage:
+ err = x.err
+ case interface{ Unwrap() error }:
+ err = x.Unwrap()
+ if err == nil {
+ return false
+ }
+ case interface{ Unwrap() []error }:
+ for _, err := range x.Unwrap() {
+ if isInterface[T](err) {
+ return true
+ }
+ }
+ return false
+ default:
+ return false
+ }
+ }
+}
+
+// customMessage is used to provide a defined error with a custom message.
+// The message is not wrapped but can be compared by the `Is(error) bool` interface.
+type customMessage struct {
+ err error
+ msg string
+}
+
+func (c customMessage) Is(err error) bool {
+ return c.err == err
+}
+
+func (c customMessage) As(target any) bool {
+ return errors.As(c.err, target)
+}
+
+func (c customMessage) Error() string {
+ return c.msg
+}
diff --git a/vendor/github.com/containerd/errdefs/resolve.go b/vendor/github.com/containerd/errdefs/resolve.go
new file mode 100644
index 00000000000..c02d4a73f4e
--- /dev/null
+++ b/vendor/github.com/containerd/errdefs/resolve.go
@@ -0,0 +1,147 @@
+/*
+ Copyright The containerd Authors.
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+*/
+
+package errdefs
+
+import "context"
+
+// Resolve returns the first error found in the error chain which matches an
+// error defined in this package or context error. A raw, unwrapped error is
+// returned or ErrUnknown if no matching error is found.
+//
+// This is useful for determining a response code based on the outermost wrapped
+// error rather than the original cause. For example, a not found error deep
+// in the code may be wrapped as an invalid argument. When determining status
+// code from Is* functions, the depth or ordering of the error is not
+// considered.
+//
+// The search order is depth first, a wrapped error returned from any part of
+// the chain from `Unwrap() error` will be returned before any joined errors
+// as returned by `Unwrap() []error`.
+func Resolve(err error) error {
+ if err == nil {
+ return nil
+ }
+ err = firstError(err)
+ if err == nil {
+ err = ErrUnknown
+ }
+ return err
+}
+
+func firstError(err error) error {
+ for {
+ switch err {
+ case ErrUnknown,
+ ErrInvalidArgument,
+ ErrNotFound,
+ ErrAlreadyExists,
+ ErrPermissionDenied,
+ ErrResourceExhausted,
+ ErrFailedPrecondition,
+ ErrConflict,
+ ErrNotModified,
+ ErrAborted,
+ ErrOutOfRange,
+ ErrNotImplemented,
+ ErrInternal,
+ ErrUnavailable,
+ ErrDataLoss,
+ ErrUnauthenticated,
+ context.DeadlineExceeded,
+ context.Canceled:
+ return err
+ }
+ switch e := err.(type) {
+ case customMessage:
+ err = e.err
+ case unknown:
+ return ErrUnknown
+ case invalidParameter:
+ return ErrInvalidArgument
+ case notFound:
+ return ErrNotFound
+ case alreadyExists:
+ return ErrAlreadyExists
+ case forbidden:
+ return ErrPermissionDenied
+ case resourceExhausted:
+ return ErrResourceExhausted
+ case failedPrecondition:
+ return ErrFailedPrecondition
+ case conflict:
+ return ErrConflict
+ case notModified:
+ return ErrNotModified
+ case aborted:
+ return ErrAborted
+ case errOutOfRange:
+ return ErrOutOfRange
+ case notImplemented:
+ return ErrNotImplemented
+ case system:
+ return ErrInternal
+ case unavailable:
+ return ErrUnavailable
+ case dataLoss:
+ return ErrDataLoss
+ case unauthorized:
+ return ErrUnauthenticated
+ case deadlineExceeded:
+ return context.DeadlineExceeded
+ case cancelled:
+ return context.Canceled
+ case interface{ Unwrap() error }:
+ err = e.Unwrap()
+ if err == nil {
+ return nil
+ }
+ case interface{ Unwrap() []error }:
+ for _, ue := range e.Unwrap() {
+ if fe := firstError(ue); fe != nil {
+ return fe
+ }
+ }
+ return nil
+ case interface{ Is(error) bool }:
+ for _, target := range []error{ErrUnknown,
+ ErrInvalidArgument,
+ ErrNotFound,
+ ErrAlreadyExists,
+ ErrPermissionDenied,
+ ErrResourceExhausted,
+ ErrFailedPrecondition,
+ ErrConflict,
+ ErrNotModified,
+ ErrAborted,
+ ErrOutOfRange,
+ ErrNotImplemented,
+ ErrInternal,
+ ErrUnavailable,
+ ErrDataLoss,
+ ErrUnauthenticated,
+ context.DeadlineExceeded,
+ context.Canceled} {
+ if e.Is(target) {
+ return target
+ }
+ }
+ return nil
+ default:
+ return nil
+ }
+ }
+}
diff --git a/vendor/github.com/containerd/platforms/.gitattributes b/vendor/github.com/containerd/platforms/.gitattributes
new file mode 100644
index 00000000000..a0717e4b3b9
--- /dev/null
+++ b/vendor/github.com/containerd/platforms/.gitattributes
@@ -0,0 +1 @@
+*.go text eol=lf
\ No newline at end of file
diff --git a/vendor/github.com/containerd/platforms/.golangci.yml b/vendor/github.com/containerd/platforms/.golangci.yml
new file mode 100644
index 00000000000..a695775df49
--- /dev/null
+++ b/vendor/github.com/containerd/platforms/.golangci.yml
@@ -0,0 +1,30 @@
+linters:
+ enable:
+ - exportloopref # Checks for pointers to enclosing loop variables
+ - gofmt
+ - goimports
+ - gosec
+ - ineffassign
+ - misspell
+ - nolintlint
+ - revive
+ - staticcheck
+ - tenv # Detects using os.Setenv instead of t.Setenv since Go 1.17
+ - unconvert
+ - unused
+ - vet
+ - dupword # Checks for duplicate words in the source code
+ disable:
+ - errcheck
+
+run:
+ timeout: 5m
+ skip-dirs:
+ - api
+ - cluster
+ - design
+ - docs
+ - docs/man
+ - releases
+ - reports
+ - test # e2e scripts
diff --git a/vendor/github.com/containerd/platforms/LICENSE b/vendor/github.com/containerd/platforms/LICENSE
new file mode 100644
index 00000000000..584149b6ee2
--- /dev/null
+++ b/vendor/github.com/containerd/platforms/LICENSE
@@ -0,0 +1,191 @@
+
+ Apache License
+ Version 2.0, January 2004
+ https://www.apache.org/licenses/
+
+ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+ 1. Definitions.
+
+ "License" shall mean the terms and conditions for use, reproduction,
+ and distribution as defined by Sections 1 through 9 of this document.
+
+ "Licensor" shall mean the copyright owner or entity authorized by
+ the copyright owner that is granting the License.
+
+ "Legal Entity" shall mean the union of the acting entity and all
+ other entities that control, are controlled by, or are under common
+ control with that entity. For the purposes of this definition,
+ "control" means (i) the power, direct or indirect, to cause the
+ direction or management of such entity, whether by contract or
+ otherwise, or (ii) ownership of fifty percent (50%) or more of the
+ outstanding shares, or (iii) beneficial ownership of such entity.
+
+ "You" (or "Your") shall mean an individual or Legal Entity
+ exercising permissions granted by this License.
+
+ "Source" form shall mean the preferred form for making modifications,
+ including but not limited to software source code, documentation
+ source, and configuration files.
+
+ "Object" form shall mean any form resulting from mechanical
+ transformation or translation of a Source form, including but
+ not limited to compiled object code, generated documentation,
+ and conversions to other media types.
+
+ "Work" shall mean the work of authorship, whether in Source or
+ Object form, made available under the License, as indicated by a
+ copyright notice that is included in or attached to the work
+ (an example is provided in the Appendix below).
+
+ "Derivative Works" shall mean any work, whether in Source or Object
+ form, that is based on (or derived from) the Work and for which the
+ editorial revisions, annotations, elaborations, or other modifications
+ represent, as a whole, an original work of authorship. For the purposes
+ of this License, Derivative Works shall not include works that remain
+ separable from, or merely link (or bind by name) to the interfaces of,
+ the Work and Derivative Works thereof.
+
+ "Contribution" shall mean any work of authorship, including
+ the original version of the Work and any modifications or additions
+ to that Work or Derivative Works thereof, that is intentionally
+ submitted to Licensor for inclusion in the Work by the copyright owner
+ or by an individual or Legal Entity authorized to submit on behalf of
+ the copyright owner. For the purposes of this definition, "submitted"
+ means any form of electronic, verbal, or written communication sent
+ to the Licensor or its representatives, including but not limited to
+ communication on electronic mailing lists, source code control systems,
+ and issue tracking systems that are managed by, or on behalf of, the
+ Licensor for the purpose of discussing and improving the Work, but
+ excluding communication that is conspicuously marked or otherwise
+ designated in writing by the copyright owner as "Not a Contribution."
+
+ "Contributor" shall mean Licensor and any individual or Legal Entity
+ on behalf of whom a Contribution has been received by Licensor and
+ subsequently incorporated within the Work.
+
+ 2. Grant of Copyright License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ copyright license to reproduce, prepare Derivative Works of,
+ publicly display, publicly perform, sublicense, and distribute the
+ Work and such Derivative Works in Source or Object form.
+
+ 3. Grant of Patent License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ (except as stated in this section) patent license to make, have made,
+ use, offer to sell, sell, import, and otherwise transfer the Work,
+ where such license applies only to those patent claims licensable
+ by such Contributor that are necessarily infringed by their
+ Contribution(s) alone or by combination of their Contribution(s)
+ with the Work to which such Contribution(s) was submitted. If You
+ institute patent litigation against any entity (including a
+ cross-claim or counterclaim in a lawsuit) alleging that the Work
+ or a Contribution incorporated within the Work constitutes direct
+ or contributory patent infringement, then any patent licenses
+ granted to You under this License for that Work shall terminate
+ as of the date such litigation is filed.
+
+ 4. Redistribution. You may reproduce and distribute copies of the
+ Work or Derivative Works thereof in any medium, with or without
+ modifications, and in Source or Object form, provided that You
+ meet the following conditions:
+
+ (a) You must give any other recipients of the Work or
+ Derivative Works a copy of this License; and
+
+ (b) You must cause any modified files to carry prominent notices
+ stating that You changed the files; and
+
+ (c) You must retain, in the Source form of any Derivative Works
+ that You distribute, all copyright, patent, trademark, and
+ attribution notices from the Source form of the Work,
+ excluding those notices that do not pertain to any part of
+ the Derivative Works; and
+
+ (d) If the Work includes a "NOTICE" text file as part of its
+ distribution, then any Derivative Works that You distribute must
+ include a readable copy of the attribution notices contained
+ within such NOTICE file, excluding those notices that do not
+ pertain to any part of the Derivative Works, in at least one
+ of the following places: within a NOTICE text file distributed
+ as part of the Derivative Works; within the Source form or
+ documentation, if provided along with the Derivative Works; or,
+ within a display generated by the Derivative Works, if and
+ wherever such third-party notices normally appear. The contents
+ of the NOTICE file are for informational purposes only and
+ do not modify the License. You may add Your own attribution
+ notices within Derivative Works that You distribute, alongside
+ or as an addendum to the NOTICE text from the Work, provided
+ that such additional attribution notices cannot be construed
+ as modifying the License.
+
+ You may add Your own copyright statement to Your modifications and
+ may provide additional or different license terms and conditions
+ for use, reproduction, or distribution of Your modifications, or
+ for any such Derivative Works as a whole, provided Your use,
+ reproduction, and distribution of the Work otherwise complies with
+ the conditions stated in this License.
+
+ 5. Submission of Contributions. Unless You explicitly state otherwise,
+ any Contribution intentionally submitted for inclusion in the Work
+ by You to the Licensor shall be under the terms and conditions of
+ this License, without any additional terms or conditions.
+ Notwithstanding the above, nothing herein shall supersede or modify
+ the terms of any separate license agreement you may have executed
+ with Licensor regarding such Contributions.
+
+ 6. Trademarks. This License does not grant permission to use the trade
+ names, trademarks, service marks, or product names of the Licensor,
+ except as required for reasonable and customary use in describing the
+ origin of the Work and reproducing the content of the NOTICE file.
+
+ 7. Disclaimer of Warranty. Unless required by applicable law or
+ agreed to in writing, Licensor provides the Work (and each
+ Contributor provides its Contributions) on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+ implied, including, without limitation, any warranties or conditions
+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+ PARTICULAR PURPOSE. You are solely responsible for determining the
+ appropriateness of using or redistributing the Work and assume any
+ risks associated with Your exercise of permissions under this License.
+
+ 8. Limitation of Liability. In no event and under no legal theory,
+ whether in tort (including negligence), contract, or otherwise,
+ unless required by applicable law (such as deliberate and grossly
+ negligent acts) or agreed to in writing, shall any Contributor be
+ liable to You for damages, including any direct, indirect, special,
+ incidental, or consequential damages of any character arising as a
+ result of this License or out of the use or inability to use the
+ Work (including but not limited to damages for loss of goodwill,
+ work stoppage, computer failure or malfunction, or any and all
+ other commercial damages or losses), even if such Contributor
+ has been advised of the possibility of such damages.
+
+ 9. Accepting Warranty or Additional Liability. While redistributing
+ the Work or Derivative Works thereof, You may choose to offer,
+ and charge a fee for, acceptance of support, warranty, indemnity,
+ or other liability obligations and/or rights consistent with this
+ License. However, in accepting such obligations, You may act only
+ on Your own behalf and on Your sole responsibility, not on behalf
+ of any other Contributor, and only if You agree to indemnify,
+ defend, and hold each Contributor harmless for any liability
+ incurred by, or claims asserted against, such Contributor by reason
+ of your accepting any such warranty or additional liability.
+
+ END OF TERMS AND CONDITIONS
+
+ Copyright The containerd Authors
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ https://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
diff --git a/vendor/github.com/containerd/platforms/README.md b/vendor/github.com/containerd/platforms/README.md
new file mode 100644
index 00000000000..2059de771c5
--- /dev/null
+++ b/vendor/github.com/containerd/platforms/README.md
@@ -0,0 +1,32 @@
+# platforms
+
+A Go package for formatting, normalizing and matching container platforms.
+
+This package is based on the Open Containers Image Spec definition of a [platform](https://github.com/opencontainers/image-spec/blob/main/specs-go/v1/descriptor.go#L52).
+
+## Platform Specifier
+
+While the OCI platform specifications provide a tool for components to
+specify structured information, user input typically doesn't need the full
+context and much can be inferred. To solve this problem, this package introduces
+"specifiers". A specifier has the format
+`||/[/]`. The user can provide either the
+operating system or the architecture or both.
+
+An example of a common specifier is `linux/amd64`. If the host has a default
+runtime that matches this, the user can simply provide the component that
+matters. For example, if an image provides `amd64` and `arm64` support, the
+operating system, `linux` can be inferred, so they only have to provide
+`arm64` or `amd64`. Similar behavior is implemented for operating systems,
+where the architecture may be known but a runtime may support images from
+different operating systems.
+
+## Project details
+
+**platforms** is a containerd sub-project, licensed under the [Apache 2.0 license](./LICENSE).
+As a containerd sub-project, you will find the:
+ * [Project governance](https://github.com/containerd/project/blob/main/GOVERNANCE.md),
+ * [Maintainers](https://github.com/containerd/project/blob/main/MAINTAINERS),
+ * and [Contributing guidelines](https://github.com/containerd/project/blob/main/CONTRIBUTING.md)
+
+information in our [`containerd/project`](https://github.com/containerd/project) repository.
\ No newline at end of file
diff --git a/vendor/github.com/containerd/containerd/platforms/compare.go b/vendor/github.com/containerd/platforms/compare.go
similarity index 100%
rename from vendor/github.com/containerd/containerd/platforms/compare.go
rename to vendor/github.com/containerd/platforms/compare.go
diff --git a/vendor/github.com/containerd/containerd/platforms/cpuinfo.go b/vendor/github.com/containerd/platforms/cpuinfo.go
similarity index 96%
rename from vendor/github.com/containerd/containerd/platforms/cpuinfo.go
rename to vendor/github.com/containerd/platforms/cpuinfo.go
index 8c600fc96b1..91f50e8c88a 100644
--- a/vendor/github.com/containerd/containerd/platforms/cpuinfo.go
+++ b/vendor/github.com/containerd/platforms/cpuinfo.go
@@ -20,7 +20,7 @@ import (
"runtime"
"sync"
- "github.com/containerd/containerd/log"
+ "github.com/containerd/log"
)
// Present the ARM instruction set architecture, eg: v7, v8
diff --git a/vendor/github.com/containerd/containerd/platforms/cpuinfo_linux.go b/vendor/github.com/containerd/platforms/cpuinfo_linux.go
similarity index 94%
rename from vendor/github.com/containerd/containerd/platforms/cpuinfo_linux.go
rename to vendor/github.com/containerd/platforms/cpuinfo_linux.go
index 722d86c3578..98c7001f939 100644
--- a/vendor/github.com/containerd/containerd/platforms/cpuinfo_linux.go
+++ b/vendor/github.com/containerd/platforms/cpuinfo_linux.go
@@ -19,12 +19,12 @@ package platforms
import (
"bufio"
"bytes"
+ "errors"
"fmt"
"os"
"runtime"
"strings"
- "github.com/containerd/containerd/errdefs"
"golang.org/x/sys/unix"
)
@@ -70,7 +70,7 @@ func getCPUInfo(pattern string) (info string, err error) {
return "", err
}
- return "", fmt.Errorf("getCPUInfo for pattern %s: %w", pattern, errdefs.ErrNotFound)
+ return "", fmt.Errorf("getCPUInfo for pattern %s: %w", pattern, errNotFound)
}
// getCPUVariantFromArch get CPU variant from arch through a system call
@@ -83,7 +83,7 @@ func getCPUVariantFromArch(arch string) (string, error) {
if arch == "aarch64" {
variant = "8"
} else if arch[0:4] == "armv" && len(arch) >= 5 {
- //Valid arch format is in form of armvXx
+ // Valid arch format is in form of armvXx
switch arch[3:5] {
case "v8":
variant = "8"
@@ -101,7 +101,7 @@ func getCPUVariantFromArch(arch string) (string, error) {
variant = "unknown"
}
} else {
- return "", fmt.Errorf("getCPUVariantFromArch invalid arch: %s, %w", arch, errdefs.ErrInvalidArgument)
+ return "", fmt.Errorf("getCPUVariantFromArch invalid arch: %s, %w", arch, errInvalidArgument)
}
return variant, nil
}
@@ -112,11 +112,10 @@ func getCPUVariantFromArch(arch string) (string, error) {
// This is to cover running ARM in emulated environment on x86 host as this field in /proc/cpuinfo
// was not present.
func getCPUVariant() (string, error) {
-
variant, err := getCPUInfo("Cpu architecture")
if err != nil {
- if errdefs.IsNotFound(err) {
- //Let's try getting CPU variant from machine architecture
+ if errors.Is(err, errNotFound) {
+ // Let's try getting CPU variant from machine architecture
arch, err := getMachineArch()
if err != nil {
return "", fmt.Errorf("failure getting machine architecture: %v", err)
diff --git a/vendor/github.com/containerd/containerd/platforms/cpuinfo_other.go b/vendor/github.com/containerd/platforms/cpuinfo_other.go
similarity index 94%
rename from vendor/github.com/containerd/containerd/platforms/cpuinfo_other.go
rename to vendor/github.com/containerd/platforms/cpuinfo_other.go
index fa5f19c427a..97a1fe8a3e5 100644
--- a/vendor/github.com/containerd/containerd/platforms/cpuinfo_other.go
+++ b/vendor/github.com/containerd/platforms/cpuinfo_other.go
@@ -21,8 +21,6 @@ package platforms
import (
"fmt"
"runtime"
-
- "github.com/containerd/containerd/errdefs"
)
func getCPUVariant() (string, error) {
@@ -49,10 +47,8 @@ func getCPUVariant() (string, error) {
default:
variant = "unknown"
}
-
} else {
- return "", fmt.Errorf("getCPUVariant for OS %s: %v", runtime.GOOS, errdefs.ErrNotImplemented)
-
+ return "", fmt.Errorf("getCPUVariant for OS %s: %v", runtime.GOOS, errNotImplemented)
}
return variant, nil
diff --git a/vendor/github.com/containerd/containerd/platforms/database.go b/vendor/github.com/containerd/platforms/database.go
similarity index 100%
rename from vendor/github.com/containerd/containerd/platforms/database.go
rename to vendor/github.com/containerd/platforms/database.go
diff --git a/vendor/github.com/containerd/containerd/platforms/defaults.go b/vendor/github.com/containerd/platforms/defaults.go
similarity index 81%
rename from vendor/github.com/containerd/containerd/platforms/defaults.go
rename to vendor/github.com/containerd/platforms/defaults.go
index cfa3ff34a19..9d898d60e62 100644
--- a/vendor/github.com/containerd/containerd/platforms/defaults.go
+++ b/vendor/github.com/containerd/platforms/defaults.go
@@ -16,9 +16,11 @@
package platforms
-// DefaultString returns the default string specifier for the platform.
+// DefaultString returns the default string specifier for the platform,
+// with [PR#6](https://github.com/containerd/platforms/pull/6) the result
+// may now also include the OSVersion from the provided platform specification.
func DefaultString() string {
- return Format(DefaultSpec())
+ return FormatAll(DefaultSpec())
}
// DefaultStrict returns strict form of Default.
diff --git a/vendor/github.com/containerd/containerd/platforms/defaults_darwin.go b/vendor/github.com/containerd/platforms/defaults_darwin.go
similarity index 100%
rename from vendor/github.com/containerd/containerd/platforms/defaults_darwin.go
rename to vendor/github.com/containerd/platforms/defaults_darwin.go
diff --git a/vendor/github.com/containerd/containerd/platforms/defaults_freebsd.go b/vendor/github.com/containerd/platforms/defaults_freebsd.go
similarity index 100%
rename from vendor/github.com/containerd/containerd/platforms/defaults_freebsd.go
rename to vendor/github.com/containerd/platforms/defaults_freebsd.go
diff --git a/vendor/github.com/containerd/containerd/platforms/defaults_unix.go b/vendor/github.com/containerd/platforms/defaults_unix.go
similarity index 100%
rename from vendor/github.com/containerd/containerd/platforms/defaults_unix.go
rename to vendor/github.com/containerd/platforms/defaults_unix.go
diff --git a/vendor/github.com/containerd/containerd/platforms/defaults_windows.go b/vendor/github.com/containerd/platforms/defaults_windows.go
similarity index 88%
rename from vendor/github.com/containerd/containerd/platforms/defaults_windows.go
rename to vendor/github.com/containerd/platforms/defaults_windows.go
index d10fa9012bd..427ed72eb61 100644
--- a/vendor/github.com/containerd/containerd/platforms/defaults_windows.go
+++ b/vendor/github.com/containerd/platforms/defaults_windows.go
@@ -22,7 +22,6 @@ import (
"strconv"
"strings"
- "github.com/Microsoft/hcsshim/osversion"
specs "github.com/opencontainers/image-spec/specs-go/v1"
"golang.org/x/sys/windows"
)
@@ -52,29 +51,29 @@ func (m windowsmatcher) Match(p specs.Platform) bool {
if match && m.OS == "windows" {
// HPC containers do not have OS version filled
- if p.OSVersion == "" {
+ if m.OSVersion == "" || p.OSVersion == "" {
return true
}
- hostOsVersion := GetOsVersion(m.osVersionPrefix)
- ctrOsVersion := GetOsVersion(p.OSVersion)
- return osversion.CheckHostAndContainerCompat(hostOsVersion, ctrOsVersion)
+ hostOsVersion := getOSVersion(m.osVersionPrefix)
+ ctrOsVersion := getOSVersion(p.OSVersion)
+ return checkHostAndContainerCompat(hostOsVersion, ctrOsVersion)
}
return match
}
-func GetOsVersion(osVersionPrefix string) osversion.OSVersion {
+func getOSVersion(osVersionPrefix string) osVersion {
parts := strings.Split(osVersionPrefix, ".")
if len(parts) < 3 {
- return osversion.OSVersion{}
+ return osVersion{}
}
majorVersion, _ := strconv.Atoi(parts[0])
minorVersion, _ := strconv.Atoi(parts[1])
buildNumber, _ := strconv.Atoi(parts[2])
- return osversion.OSVersion{
+ return osVersion{
MajorVersion: uint8(majorVersion),
MinorVersion: uint8(minorVersion),
Build: uint16(buildNumber),
diff --git a/vendor/github.com/containerd/platforms/errors.go b/vendor/github.com/containerd/platforms/errors.go
new file mode 100644
index 00000000000..5ad721e779e
--- /dev/null
+++ b/vendor/github.com/containerd/platforms/errors.go
@@ -0,0 +1,30 @@
+/*
+ Copyright The containerd Authors.
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+*/
+
+package platforms
+
+import "errors"
+
+// These errors mirror the errors defined in [github.com/containerd/containerd/errdefs],
+// however, they are not exported as they are not expected to be used as sentinel
+// errors by consumers of this package.
+//
+//nolint:unused // not all errors are used on all platforms.
+var (
+ errNotFound = errors.New("not found")
+ errInvalidArgument = errors.New("invalid argument")
+ errNotImplemented = errors.New("not implemented")
+)
diff --git a/vendor/github.com/containerd/platforms/platform_compat_windows.go b/vendor/github.com/containerd/platforms/platform_compat_windows.go
new file mode 100644
index 00000000000..89e66f0c090
--- /dev/null
+++ b/vendor/github.com/containerd/platforms/platform_compat_windows.go
@@ -0,0 +1,78 @@
+/*
+ Copyright The containerd Authors.
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+*/
+
+package platforms
+
+// osVersion is a wrapper for Windows version information
+// https://msdn.microsoft.com/en-us/library/windows/desktop/ms724439(v=vs.85).aspx
+type osVersion struct {
+ Version uint32
+ MajorVersion uint8
+ MinorVersion uint8
+ Build uint16
+}
+
+// Windows Client and Server build numbers.
+//
+// See:
+// https://learn.microsoft.com/en-us/windows/release-health/release-information
+// https://learn.microsoft.com/en-us/windows/release-health/windows-server-release-info
+// https://learn.microsoft.com/en-us/windows/release-health/windows11-release-information
+const (
+ // rs5 (version 1809, codename "Redstone 5") corresponds to Windows Server
+ // 2019 (ltsc2019), and Windows 10 (October 2018 Update).
+ rs5 = 17763
+
+ // v21H2Server corresponds to Windows Server 2022 (ltsc2022).
+ v21H2Server = 20348
+
+ // v22H2Win11 corresponds to Windows 11 (2022 Update).
+ v22H2Win11 = 22621
+)
+
+// List of stable ABI compliant ltsc releases
+// Note: List must be sorted in ascending order
+var compatLTSCReleases = []uint16{
+ v21H2Server,
+}
+
+// CheckHostAndContainerCompat checks if given host and container
+// OS versions are compatible.
+// It includes support for stable ABI compliant versions as well.
+// Every release after WS 2022 will support the previous ltsc
+// container image. Stable ABI is in preview mode for windows 11 client.
+// Refer: https://learn.microsoft.com/en-us/virtualization/windowscontainers/deploy-containers/version-compatibility?tabs=windows-server-2022%2Cwindows-10#windows-server-host-os-compatibility
+func checkHostAndContainerCompat(host, ctr osVersion) bool {
+ // check major minor versions of host and guest
+ if host.MajorVersion != ctr.MajorVersion ||
+ host.MinorVersion != ctr.MinorVersion {
+ return false
+ }
+
+ // If host is < WS 2022, exact version match is required
+ if host.Build < v21H2Server {
+ return host.Build == ctr.Build
+ }
+
+ var supportedLtscRelease uint16
+ for i := len(compatLTSCReleases) - 1; i >= 0; i-- {
+ if host.Build >= compatLTSCReleases[i] {
+ supportedLtscRelease = compatLTSCReleases[i]
+ break
+ }
+ }
+ return ctr.Build >= supportedLtscRelease && ctr.Build <= host.Build
+}
diff --git a/vendor/github.com/containerd/containerd/platforms/platforms.go b/vendor/github.com/containerd/platforms/platforms.go
similarity index 74%
rename from vendor/github.com/containerd/containerd/platforms/platforms.go
rename to vendor/github.com/containerd/platforms/platforms.go
index 56613b07656..1bbbdb91dbc 100644
--- a/vendor/github.com/containerd/containerd/platforms/platforms.go
+++ b/vendor/github.com/containerd/platforms/platforms.go
@@ -102,6 +102,9 @@
// unless it is explicitly provided. This is treated as equivalent to armhf. A
// previous architecture, armel, will be normalized to arm/v6.
//
+// Similarly, the most common arm64 version v8, and most common amd64 version v1
+// are represented without the variant.
+//
// While these normalizations are provided, their support on arm platforms has
// not yet been fully implemented and tested.
package platforms
@@ -115,14 +118,15 @@ import (
"strings"
specs "github.com/opencontainers/image-spec/specs-go/v1"
-
- "github.com/containerd/containerd/errdefs"
)
var (
- specifierRe = regexp.MustCompile(`^[A-Za-z0-9_-]+$`)
+ specifierRe = regexp.MustCompile(`^[A-Za-z0-9_-]+$`)
+ osAndVersionRe = regexp.MustCompile(`^([A-Za-z0-9_-]+)(?:\(([A-Za-z0-9_.-]*)\))?$`)
)
+const osAndVersionFormat = "%s(%s)"
+
// Platform is a type alias for convenience, so there is no need to import image-spec package everywhere.
type Platform = specs.Platform
@@ -155,40 +159,68 @@ func (m *matcher) Match(platform specs.Platform) bool {
}
func (m *matcher) String() string {
- return Format(m.Platform)
+ return FormatAll(m.Platform)
+}
+
+// ParseAll parses a list of platform specifiers into a list of platform.
+func ParseAll(specifiers []string) ([]specs.Platform, error) {
+ platforms := make([]specs.Platform, len(specifiers))
+ for i, s := range specifiers {
+ p, err := Parse(s)
+ if err != nil {
+ return nil, fmt.Errorf("invalid platform %s: %w", s, err)
+ }
+ platforms[i] = p
+ }
+ return platforms, nil
}
// Parse parses the platform specifier syntax into a platform declaration.
//
-// Platform specifiers are in the format `||/[/]`.
+// Platform specifiers are in the format `[()]||[()]/[/]`.
// The minimum required information for a platform specifier is the operating
-// system or architecture. If there is only a single string (no slashes), the
+// system or architecture. The OSVersion can be part of the OS like `windows(10.0.17763)`
+// When an OSVersion is specified, then specs.Platform.OSVersion is populated with that value,
+// and an empty string otherwise.
+// If there is only a single string (no slashes), the
// value will be matched against the known set of operating systems, then fall
// back to the known set of architectures. The missing component will be
// inferred based on the local environment.
func Parse(specifier string) (specs.Platform, error) {
if strings.Contains(specifier, "*") {
// TODO(stevvooe): need to work out exact wildcard handling
- return specs.Platform{}, fmt.Errorf("%q: wildcards not yet supported: %w", specifier, errdefs.ErrInvalidArgument)
+ return specs.Platform{}, fmt.Errorf("%q: wildcards not yet supported: %w", specifier, errInvalidArgument)
}
- parts := strings.Split(specifier, "/")
+ // Limit to 4 elements to prevent unbounded split
+ parts := strings.SplitN(specifier, "/", 4)
- for _, part := range parts {
- if !specifierRe.MatchString(part) {
- return specs.Platform{}, fmt.Errorf("%q is an invalid component of %q: platform specifier component must match %q: %w", part, specifier, specifierRe.String(), errdefs.ErrInvalidArgument)
+ var p specs.Platform
+ for i, part := range parts {
+ if i == 0 {
+ // First element is [()]
+ osVer := osAndVersionRe.FindStringSubmatch(part)
+ if osVer == nil {
+ return specs.Platform{}, fmt.Errorf("%q is an invalid OS component of %q: OSAndVersion specifier component must match %q: %w", part, specifier, osAndVersionRe.String(), errInvalidArgument)
+ }
+
+ p.OS = normalizeOS(osVer[1])
+ p.OSVersion = osVer[2]
+ } else {
+ if !specifierRe.MatchString(part) {
+ return specs.Platform{}, fmt.Errorf("%q is an invalid component of %q: platform specifier component must match %q: %w", part, specifier, specifierRe.String(), errInvalidArgument)
+ }
}
}
- var p specs.Platform
switch len(parts) {
case 1:
- // in this case, we will test that the value might be an OS, then look
- // it up. If it is not known, we'll treat it as an architecture. Since
+ // in this case, we will test that the value might be an OS (with or
+ // without the optional OSVersion specified) and look it up.
+ // If it is not known, we'll treat it as an architecture. Since
// we have very little information about the platform here, we are
// going to be a little more strict if we don't know about the argument
// value.
- p.OS = normalizeOS(parts[0])
if isKnownOS(p.OS) {
// picks a default architecture
p.Architecture = runtime.GOARCH
@@ -196,10 +228,6 @@ func Parse(specifier string) (specs.Platform, error) {
p.Variant = cpuVariant()
}
- if p.OS == "windows" {
- p.OSVersion = GetWindowsOsVersion()
- }
-
return p, nil
}
@@ -212,37 +240,27 @@ func Parse(specifier string) (specs.Platform, error) {
return p, nil
}
- return specs.Platform{}, fmt.Errorf("%q: unknown operating system or architecture: %w", specifier, errdefs.ErrInvalidArgument)
+ return specs.Platform{}, fmt.Errorf("%q: unknown operating system or architecture: %w", specifier, errInvalidArgument)
case 2:
- // In this case, we treat as a regular os/arch pair. We don't care
+ // In this case, we treat as a regular OS[(OSVersion)]/arch pair. We don't care
// about whether or not we know of the platform.
- p.OS = normalizeOS(parts[0])
p.Architecture, p.Variant = normalizeArch(parts[1], "")
if p.Architecture == "arm" && p.Variant == "v7" {
p.Variant = ""
}
- if p.OS == "windows" {
- p.OSVersion = GetWindowsOsVersion()
- }
-
return p, nil
case 3:
// we have a fully specified variant, this is rare
- p.OS = normalizeOS(parts[0])
p.Architecture, p.Variant = normalizeArch(parts[1], parts[2])
if p.Architecture == "arm64" && p.Variant == "" {
p.Variant = "v8"
}
- if p.OS == "windows" {
- p.OSVersion = GetWindowsOsVersion()
- }
-
return p, nil
}
- return specs.Platform{}, fmt.Errorf("%q: cannot parse platform specifier: %w", specifier, errdefs.ErrInvalidArgument)
+ return specs.Platform{}, fmt.Errorf("%q: cannot parse platform specifier: %w", specifier, errInvalidArgument)
}
// MustParse is like Parses but panics if the specifier cannot be parsed.
@@ -264,6 +282,20 @@ func Format(platform specs.Platform) string {
return path.Join(platform.OS, platform.Architecture, platform.Variant)
}
+// FormatAll returns a string specifier that also includes the OSVersion from the
+// provided platform specification.
+func FormatAll(platform specs.Platform) string {
+ if platform.OS == "" {
+ return "unknown"
+ }
+
+ if platform.OSVersion != "" {
+ OSAndVersion := fmt.Sprintf(osAndVersionFormat, platform.OS, platform.OSVersion)
+ return path.Join(OSAndVersion, platform.Architecture, platform.Variant)
+ }
+ return path.Join(platform.OS, platform.Architecture, platform.Variant)
+}
+
// Normalize validates and translate the platform to the canonical value.
//
// For example, if "Aarch64" is encountered, we change it to "arm64" or if
diff --git a/vendor/github.com/containerd/containerd/platforms/platforms_other.go b/vendor/github.com/containerd/platforms/platforms_other.go
similarity index 94%
rename from vendor/github.com/containerd/containerd/platforms/platforms_other.go
rename to vendor/github.com/containerd/platforms/platforms_other.go
index 59beeb3d1d9..03f4dcd9981 100644
--- a/vendor/github.com/containerd/containerd/platforms/platforms_other.go
+++ b/vendor/github.com/containerd/platforms/platforms_other.go
@@ -28,7 +28,3 @@ func newDefaultMatcher(platform specs.Platform) Matcher {
Platform: Normalize(platform),
}
}
-
-func GetWindowsOsVersion() string {
- return ""
-}
diff --git a/vendor/github.com/containerd/containerd/platforms/platforms_windows.go b/vendor/github.com/containerd/platforms/platforms_windows.go
similarity index 85%
rename from vendor/github.com/containerd/containerd/platforms/platforms_windows.go
rename to vendor/github.com/containerd/platforms/platforms_windows.go
index 733d18ddead..950e2a2ddbb 100644
--- a/vendor/github.com/containerd/containerd/platforms/platforms_windows.go
+++ b/vendor/github.com/containerd/platforms/platforms_windows.go
@@ -17,10 +17,7 @@
package platforms
import (
- "fmt"
-
specs "github.com/opencontainers/image-spec/specs-go/v1"
- "golang.org/x/sys/windows"
)
// NewMatcher returns a Windows matcher that will match on osVersionPrefix if
@@ -35,8 +32,3 @@ func newDefaultMatcher(platform specs.Platform) Matcher {
},
}
}
-
-func GetWindowsOsVersion() string {
- major, minor, build := windows.RtlGetNtVersionNumbers()
- return fmt.Sprintf("%d.%d.%d", major, minor, build)
-}
diff --git a/vendor/github.com/cyphar/filepath-securejoin/CHANGELOG.md b/vendor/github.com/cyphar/filepath-securejoin/CHANGELOG.md
new file mode 100644
index 00000000000..cb1252b53ee
--- /dev/null
+++ b/vendor/github.com/cyphar/filepath-securejoin/CHANGELOG.md
@@ -0,0 +1,209 @@
+# Changelog #
+All notable changes to this project will be documented in this file.
+
+The format is based on [Keep a Changelog](http://keepachangelog.com/)
+and this project adheres to [Semantic Versioning](http://semver.org/).
+
+## [Unreleased] ##
+
+## [0.3.6] - 2024-12-17 ##
+
+### Compatibility ###
+- The minimum Go version requirement for `filepath-securejoin` is now Go 1.18
+ (we use generics internally).
+
+ For reference, `filepath-securejoin@v0.3.0` somewhat-arbitrarily bumped the
+ Go version requirement to 1.21.
+
+ While we did make some use of Go 1.21 stdlib features (and in principle Go
+ versions <= 1.21 are no longer even supported by upstream anymore), some
+ downstreams have complained that the version bump has meant that they have to
+ do workarounds when backporting fixes that use the new `filepath-securejoin`
+ API onto old branches. This is not an ideal situation, but since using this
+ library is probably better for most downstreams than a hand-rolled
+ workaround, we now have compatibility shims that allow us to build on older
+ Go versions.
+- Lower minimum version requirement for `golang.org/x/sys` to `v0.18.0` (we
+ need the wrappers for `fsconfig(2)`), which should also make backporting
+ patches to older branches easier.
+
+## [0.3.5] - 2024-12-06 ##
+
+### Fixed ###
+- `MkdirAll` will now no longer return an `EEXIST` error if two racing
+ processes are creating the same directory. We will still verify that the path
+ is a directory, but this will avoid spurious errors when multiple threads or
+ programs are trying to `MkdirAll` the same path. opencontainers/runc#4543
+
+## [0.3.4] - 2024-10-09 ##
+
+### Fixed ###
+- Previously, some testing mocks we had resulted in us doing `import "testing"`
+ in non-`_test.go` code, which made some downstreams like Kubernetes unhappy.
+ This has been fixed. (#32)
+
+## [0.3.3] - 2024-09-30 ##
+
+### Fixed ###
+- The mode and owner verification logic in `MkdirAll` has been removed. This
+ was originally intended to protect against some theoretical attacks but upon
+ further consideration these protections don't actually buy us anything and
+ they were causing spurious errors with more complicated filesystem setups.
+- The "is the created directory empty" logic in `MkdirAll` has also been
+ removed. This was not causing us issues yet, but some pseudofilesystems (such
+ as `cgroup`) create non-empty directories and so this logic would've been
+ wrong for such cases.
+
+## [0.3.2] - 2024-09-13 ##
+
+### Changed ###
+- Passing the `S_ISUID` or `S_ISGID` modes to `MkdirAllInRoot` will now return
+ an explicit error saying that those bits are ignored by `mkdirat(2)`. In the
+ past a different error was returned, but since the silent ignoring behaviour
+ is codified in the man pages a more explicit error seems apt. While silently
+ ignoring these bits would be the most compatible option, it could lead to
+ users thinking their code sets these bits when it doesn't. Programs that need
+ to deal with compatibility can mask the bits themselves. (#23, #25)
+
+### Fixed ###
+- If a directory has `S_ISGID` set, then all child directories will have
+ `S_ISGID` set when created and a different gid will be used for any inode
+ created under the directory. Previously, the "expected owner and mode"
+ validation in `securejoin.MkdirAll` did not correctly handle this. We now
+ correctly handle this case. (#24, #25)
+
+## [0.3.1] - 2024-07-23 ##
+
+### Changed ###
+- By allowing `Open(at)InRoot` to opt-out of the extra work done by `MkdirAll`
+ to do the necessary "partial lookups", `Open(at)InRoot` now does less work
+ for both implementations (resulting in a many-fold decrease in the number of
+ operations for `openat2`, and a modest improvement for non-`openat2`) and is
+ far more guaranteed to match the correct `openat2(RESOLVE_IN_ROOT)`
+ behaviour.
+- We now use `readlinkat(fd, "")` where possible. For `Open(at)InRoot` this
+ effectively just means that we no longer risk getting spurious errors during
+ rename races. However, for our hardened procfs handler, this in theory should
+ prevent mount attacks from tricking us when doing magic-link readlinks (even
+ when using the unsafe host `/proc` handle). Unfortunately `Reopen` is still
+ potentially vulnerable to those kinds of somewhat-esoteric attacks.
+
+ Technically this [will only work on post-2.6.39 kernels][linux-readlinkat-emptypath]
+ but it seems incredibly unlikely anyone is using `filepath-securejoin` on a
+ pre-2011 kernel.
+
+### Fixed ###
+- Several improvements were made to the errors returned by `Open(at)InRoot` and
+ `MkdirAll` when dealing with invalid paths under the emulated (ie.
+ non-`openat2`) implementation. Previously, some paths would return the wrong
+ error (`ENOENT` when the last component was a non-directory), and other paths
+ would be returned as though they were acceptable (trailing-slash components
+ after a non-directory would be ignored by `Open(at)InRoot`).
+
+ These changes were done to match `openat2`'s behaviour and purely is a
+ consistency fix (most users are going to be using `openat2` anyway).
+
+[linux-readlinkat-emptypath]: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=65cfc6722361570bfe255698d9cd4dccaf47570d
+
+## [0.3.0] - 2024-07-11 ##
+
+### Added ###
+- A new set of `*os.File`-based APIs have been added. These are adapted from
+ [libpathrs][] and we strongly suggest using them if possible (as they provide
+ far more protection against attacks than `SecureJoin`):
+
+ - `Open(at)InRoot` resolves a path inside a rootfs and returns an `*os.File`
+ handle to the path. Note that the handle returned is an `O_PATH` handle,
+ which cannot be used for reading or writing (as well as some other
+ operations -- [see open(2) for more details][open.2])
+
+ - `Reopen` takes an `O_PATH` file handle and safely re-opens it to upgrade
+ it to a regular handle. This can also be used with non-`O_PATH` handles,
+ but `O_PATH` is the most obvious application.
+
+ - `MkdirAll` is an implementation of `os.MkdirAll` that is safe to use to
+ create a directory tree within a rootfs.
+
+ As these are new APIs, they may change in the future. However, they should be
+ safe to start migrating to as we have extensive tests ensuring they behave
+ correctly and are safe against various races and other attacks.
+
+[libpathrs]: https://github.com/openSUSE/libpathrs
+[open.2]: https://www.man7.org/linux/man-pages/man2/open.2.html
+
+## [0.2.5] - 2024-05-03 ##
+
+### Changed ###
+- Some minor changes were made to how lexical components (like `..` and `.`)
+ are handled during path generation in `SecureJoin`. There is no behaviour
+ change as a result of this fix (the resulting paths are the same).
+
+### Fixed ###
+- The error returned when we hit a symlink loop now references the correct
+ path. (#10)
+
+## [0.2.4] - 2023-09-06 ##
+
+### Security ###
+- This release fixes a potential security issue in filepath-securejoin when
+ used on Windows ([GHSA-6xv5-86q9-7xr8][], which could be used to generate
+ paths outside of the provided rootfs in certain cases), as well as improving
+ the overall behaviour of filepath-securejoin when dealing with Windows paths
+ that contain volume names. Thanks to Paulo Gomes for discovering and fixing
+ these issues.
+
+### Fixed ###
+- Switch to GitHub Actions for CI so we can test on Windows as well as Linux
+ and MacOS.
+
+[GHSA-6xv5-86q9-7xr8]: https://github.com/advisories/GHSA-6xv5-86q9-7xr8
+
+## [0.2.3] - 2021-06-04 ##
+
+### Changed ###
+- Switch to Go 1.13-style `%w` error wrapping, letting us drop the dependency
+ on `github.com/pkg/errors`.
+
+## [0.2.2] - 2018-09-05 ##
+
+### Changed ###
+- Use `syscall.ELOOP` as the base error for symlink loops, rather than our own
+ (internal) error. This allows callers to more easily use `errors.Is` to check
+ for this case.
+
+## [0.2.1] - 2018-09-05 ##
+
+### Fixed ###
+- Use our own `IsNotExist` implementation, which lets us handle `ENOTDIR`
+ properly within `SecureJoin`.
+
+## [0.2.0] - 2017-07-19 ##
+
+We now have 100% test coverage!
+
+### Added ###
+- Add a `SecureJoinVFS` API that can be used for mocking (as we do in our new
+ tests) or for implementing custom handling of lookup operations (such as for
+ rootless containers, where work is necessary to access directories with weird
+ modes because we don't have `CAP_DAC_READ_SEARCH` or `CAP_DAC_OVERRIDE`).
+
+## 0.1.0 - 2017-07-19
+
+This is our first release of `github.com/cyphar/filepath-securejoin`,
+containing a full implementation with a coverage of 93.5% (the only missing
+cases are the error cases, which are hard to mocktest at the moment).
+
+[Unreleased]: https://github.com/cyphar/filepath-securejoin/compare/v0.3.6...HEAD
+[0.3.6]: https://github.com/cyphar/filepath-securejoin/compare/v0.3.5...v0.3.6
+[0.3.5]: https://github.com/cyphar/filepath-securejoin/compare/v0.3.4...v0.3.5
+[0.3.4]: https://github.com/cyphar/filepath-securejoin/compare/v0.3.3...v0.3.4
+[0.3.3]: https://github.com/cyphar/filepath-securejoin/compare/v0.3.2...v0.3.3
+[0.3.2]: https://github.com/cyphar/filepath-securejoin/compare/v0.3.1...v0.3.2
+[0.3.1]: https://github.com/cyphar/filepath-securejoin/compare/v0.3.0...v0.3.1
+[0.3.0]: https://github.com/cyphar/filepath-securejoin/compare/v0.2.5...v0.3.0
+[0.2.5]: https://github.com/cyphar/filepath-securejoin/compare/v0.2.4...v0.2.5
+[0.2.4]: https://github.com/cyphar/filepath-securejoin/compare/v0.2.3...v0.2.4
+[0.2.3]: https://github.com/cyphar/filepath-securejoin/compare/v0.2.2...v0.2.3
+[0.2.2]: https://github.com/cyphar/filepath-securejoin/compare/v0.2.1...v0.2.2
+[0.2.1]: https://github.com/cyphar/filepath-securejoin/compare/v0.2.0...v0.2.1
+[0.2.0]: https://github.com/cyphar/filepath-securejoin/compare/v0.1.0...v0.2.0
diff --git a/vendor/github.com/cyphar/filepath-securejoin/LICENSE b/vendor/github.com/cyphar/filepath-securejoin/LICENSE
index bec842f294f..cb1ab88da0f 100644
--- a/vendor/github.com/cyphar/filepath-securejoin/LICENSE
+++ b/vendor/github.com/cyphar/filepath-securejoin/LICENSE
@@ -1,5 +1,5 @@
Copyright (C) 2014-2015 Docker Inc & Go Authors. All rights reserved.
-Copyright (C) 2017 SUSE LLC. All rights reserved.
+Copyright (C) 2017-2024 SUSE LLC. All rights reserved.
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are
diff --git a/vendor/github.com/cyphar/filepath-securejoin/README.md b/vendor/github.com/cyphar/filepath-securejoin/README.md
index 4eca0f23550..eaeb53fcd0a 100644
--- a/vendor/github.com/cyphar/filepath-securejoin/README.md
+++ b/vendor/github.com/cyphar/filepath-securejoin/README.md
@@ -1,32 +1,26 @@
## `filepath-securejoin` ##
+[](https://pkg.go.dev/github.com/cyphar/filepath-securejoin)
[](https://github.com/cyphar/filepath-securejoin/actions/workflows/ci.yml)
-An implementation of `SecureJoin`, a [candidate for inclusion in the Go
-standard library][go#20126]. The purpose of this function is to be a "secure"
-alternative to `filepath.Join`, and in particular it provides certain
-guarantees that are not provided by `filepath.Join`.
-
-> **NOTE**: This code is *only* safe if you are not at risk of other processes
-> modifying path components after you've used `SecureJoin`. If it is possible
-> for a malicious process to modify path components of the resolved path, then
-> you will be vulnerable to some fairly trivial TOCTOU race conditions. [There
-> are some Linux kernel patches I'm working on which might allow for a better
-> solution.][lwn-obeneath]
->
-> In addition, with a slightly modified API it might be possible to use
-> `O_PATH` and verify that the opened path is actually the resolved one -- but
-> I have not done that yet. I might add it in the future as a helper function
-> to help users verify the path (we can't just return `/proc/self/fd/`
-> because that doesn't always work transparently for all users).
-
-This is the function prototype:
+### Old API ###
-```go
-func SecureJoin(root, unsafePath string) (string, error)
-```
+This library was originally just an implementation of `SecureJoin` which was
+[intended to be included in the Go standard library][go#20126] as a safer
+`filepath.Join` that would restrict the path lookup to be inside a root
+directory.
+
+The implementation was based on code that existed in several container
+runtimes. Unfortunately, this API is **fundamentally unsafe** against attackers
+that can modify path components after `SecureJoin` returns and before the
+caller uses the path, allowing for some fairly trivial TOCTOU attacks.
+
+`SecureJoin` (and `SecureJoinVFS`) are still provided by this library to
+support legacy users, but new users are strongly suggested to avoid using
+`SecureJoin` and instead use the [new api](#new-api) or switch to
+[libpathrs][libpathrs].
-This library **guarantees** the following:
+With the above limitations in mind, this library guarantees the following:
* If no error is set, the resulting string **must** be a child path of
`root` and will not contain any symlink path components (they will all be
@@ -47,7 +41,7 @@ This library **guarantees** the following:
A (trivial) implementation of this function on GNU/Linux systems could be done
with the following (note that this requires root privileges and is far more
opaque than the implementation in this library, and also requires that
-`readlink` is inside the `root` path):
+`readlink` is inside the `root` path and is trustworthy):
```go
package securejoin
@@ -70,9 +64,105 @@ func SecureJoin(root, unsafePath string) (string, error) {
}
```
-[lwn-obeneath]: https://lwn.net/Articles/767547/
+[libpathrs]: https://github.com/openSUSE/libpathrs
[go#20126]: https://github.com/golang/go/issues/20126
+### New API ###
+
+While we recommend users switch to [libpathrs][libpathrs] as soon as it has a
+stable release, some methods implemented by libpathrs have been ported to this
+library to ease the transition. These APIs are only supported on Linux.
+
+These APIs are implemented such that `filepath-securejoin` will
+opportunistically use certain newer kernel APIs that make these operations far
+more secure. In particular:
+
+* All of the lookup operations will use [`openat2`][openat2.2] on new enough
+ kernels (Linux 5.6 or later) to restrict lookups through magic-links and
+ bind-mounts (for certain operations) and to make use of `RESOLVE_IN_ROOT` to
+ efficiently resolve symlinks within a rootfs.
+
+* The APIs provide hardening against a malicious `/proc` mount to either detect
+ or avoid being tricked by a `/proc` that is not legitimate. This is done
+ using [`openat2`][openat2.2] for all users, and privileged users will also be
+ further protected by using [`fsopen`][fsopen.2] and [`open_tree`][open_tree.2]
+ (Linux 5.2 or later).
+
+[openat2.2]: https://www.man7.org/linux/man-pages/man2/openat2.2.html
+[fsopen.2]: https://github.com/brauner/man-pages-md/blob/main/fsopen.md
+[open_tree.2]: https://github.com/brauner/man-pages-md/blob/main/open_tree.md
+
+#### `OpenInRoot` ####
+
+```go
+func OpenInRoot(root, unsafePath string) (*os.File, error)
+func OpenatInRoot(root *os.File, unsafePath string) (*os.File, error)
+func Reopen(handle *os.File, flags int) (*os.File, error)
+```
+
+`OpenInRoot` is a much safer version of
+
+```go
+path, err := securejoin.SecureJoin(root, unsafePath)
+file, err := os.OpenFile(path, unix.O_PATH|unix.O_CLOEXEC)
+```
+
+that protects against various race attacks that could lead to serious security
+issues, depending on the application. Note that the returned `*os.File` is an
+`O_PATH` file descriptor, which is quite restricted. Callers will probably need
+to use `Reopen` to get a more usable handle (this split is done to provide
+useful features like PTY spawning and to avoid users accidentally opening bad
+inodes that could cause a DoS).
+
+Callers need to be careful in how they use the returned `*os.File`. Usually it
+is only safe to operate on the handle directly, and it is very easy to create a
+security issue. [libpathrs][libpathrs] provides far more helpers to make using
+these handles safer -- there is currently no plan to port them to
+`filepath-securejoin`.
+
+`OpenatInRoot` is like `OpenInRoot` except that the root is provided using an
+`*os.File`. This allows you to ensure that multiple `OpenatInRoot` (or
+`MkdirAllHandle`) calls are operating on the same rootfs.
+
+> **NOTE**: Unlike `SecureJoin`, `OpenInRoot` will error out as soon as it hits
+> a dangling symlink or non-existent path. This is in contrast to `SecureJoin`
+> which treated non-existent components as though they were real directories,
+> and would allow for partial resolution of dangling symlinks. These behaviours
+> are at odds with how Linux treats non-existent paths and dangling symlinks,
+> and so these are no longer allowed.
+
+#### `MkdirAll` ####
+
+```go
+func MkdirAll(root, unsafePath string, mode int) error
+func MkdirAllHandle(root *os.File, unsafePath string, mode int) (*os.File, error)
+```
+
+`MkdirAll` is a much safer version of
+
+```go
+path, err := securejoin.SecureJoin(root, unsafePath)
+err = os.MkdirAll(path, mode)
+```
+
+that protects against the same kinds of races that `OpenInRoot` protects
+against.
+
+`MkdirAllHandle` is like `MkdirAll` except that the root is provided using an
+`*os.File` (the reason for this is the same as with `OpenatInRoot`) and an
+`*os.File` of the final created directory is returned (this directory is
+guaranteed to be effectively identical to the directory created by
+`MkdirAllHandle`, which is not possible to ensure by just using `OpenatInRoot`
+after `MkdirAll`).
+
+> **NOTE**: Unlike `SecureJoin`, `MkdirAll` will error out as soon as it hits
+> a dangling symlink or non-existent path. This is in contrast to `SecureJoin`
+> which treated non-existent components as though they were real directories,
+> and would allow for partial resolution of dangling symlinks. These behaviours
+> are at odds with how Linux treats non-existent paths and dangling symlinks,
+> and so these are no longer allowed. This means that `MkdirAll` will not
+> create non-existent directories referenced by a dangling symlink.
+
### License ###
The license of this project is the same as Go, which is a BSD 3-clause license
diff --git a/vendor/github.com/cyphar/filepath-securejoin/VERSION b/vendor/github.com/cyphar/filepath-securejoin/VERSION
index abd410582de..449d7e73a96 100644
--- a/vendor/github.com/cyphar/filepath-securejoin/VERSION
+++ b/vendor/github.com/cyphar/filepath-securejoin/VERSION
@@ -1 +1 @@
-0.2.4
+0.3.6
diff --git a/vendor/github.com/cyphar/filepath-securejoin/doc.go b/vendor/github.com/cyphar/filepath-securejoin/doc.go
new file mode 100644
index 00000000000..1ec7d065ef4
--- /dev/null
+++ b/vendor/github.com/cyphar/filepath-securejoin/doc.go
@@ -0,0 +1,39 @@
+// Copyright (C) 2014-2015 Docker Inc & Go Authors. All rights reserved.
+// Copyright (C) 2017-2024 SUSE LLC. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+// Package securejoin implements a set of helpers to make it easier to write Go
+// code that is safe against symlink-related escape attacks. The primary idea
+// is to let you resolve a path within a rootfs directory as if the rootfs was
+// a chroot.
+//
+// securejoin has two APIs, a "legacy" API and a "modern" API.
+//
+// The legacy API is [SecureJoin] and [SecureJoinVFS]. These methods are
+// **not** safe against race conditions where an attacker changes the
+// filesystem after (or during) the [SecureJoin] operation.
+//
+// The new API is made up of [OpenInRoot] and [MkdirAll] (and derived
+// functions). These are safe against racing attackers and have several other
+// protections that are not provided by the legacy API. There are many more
+// operations that most programs expect to be able to do safely, but we do not
+// provide explicit support for them because we want to encourage users to
+// switch to [libpathrs](https://github.com/openSUSE/libpathrs) which is a
+// cross-language next-generation library that is entirely designed around
+// operating on paths safely.
+//
+// securejoin has been used by several container runtimes (Docker, runc,
+// Kubernetes, etc) for quite a few years as a de-facto standard for operating
+// on container filesystem paths "safely". However, most users still use the
+// legacy API which is unsafe against various attacks (there is a fairly long
+// history of CVEs in dependent as a result). Users should switch to the modern
+// API as soon as possible (or even better, switch to libpathrs).
+//
+// This project was initially intended to be included in the Go standard
+// library, but [it was rejected](https://go.dev/issue/20126). There is now a
+// [new Go proposal](https://go.dev/issue/67002) for a safe path resolution API
+// that shares some of the goals of filepath-securejoin. However, that design
+// is intended to work like `openat2(RESOLVE_BENEATH)` which does not fit the
+// usecase of container runtimes and most system tools.
+package securejoin
diff --git a/vendor/github.com/cyphar/filepath-securejoin/gocompat_errors_go120.go b/vendor/github.com/cyphar/filepath-securejoin/gocompat_errors_go120.go
new file mode 100644
index 00000000000..42452bbf9b0
--- /dev/null
+++ b/vendor/github.com/cyphar/filepath-securejoin/gocompat_errors_go120.go
@@ -0,0 +1,18 @@
+//go:build linux && go1.20
+
+// Copyright (C) 2024 SUSE LLC. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package securejoin
+
+import (
+ "fmt"
+)
+
+// wrapBaseError is a helper that is equivalent to fmt.Errorf("%w: %w"), except
+// that on pre-1.20 Go versions only errors.Is() works properly (errors.Unwrap)
+// is only guaranteed to give you baseErr.
+func wrapBaseError(baseErr, extraErr error) error {
+ return fmt.Errorf("%w: %w", extraErr, baseErr)
+}
diff --git a/vendor/github.com/cyphar/filepath-securejoin/gocompat_errors_unsupported.go b/vendor/github.com/cyphar/filepath-securejoin/gocompat_errors_unsupported.go
new file mode 100644
index 00000000000..e7adca3fd12
--- /dev/null
+++ b/vendor/github.com/cyphar/filepath-securejoin/gocompat_errors_unsupported.go
@@ -0,0 +1,38 @@
+//go:build linux && !go1.20
+
+// Copyright (C) 2024 SUSE LLC. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package securejoin
+
+import (
+ "fmt"
+)
+
+type wrappedError struct {
+ inner error
+ isError error
+}
+
+func (err wrappedError) Is(target error) bool {
+ return err.isError == target
+}
+
+func (err wrappedError) Unwrap() error {
+ return err.inner
+}
+
+func (err wrappedError) Error() string {
+ return fmt.Sprintf("%v: %v", err.isError, err.inner)
+}
+
+// wrapBaseError is a helper that is equivalent to fmt.Errorf("%w: %w"), except
+// that on pre-1.20 Go versions only errors.Is() works properly (errors.Unwrap)
+// is only guaranteed to give you baseErr.
+func wrapBaseError(baseErr, extraErr error) error {
+ return wrappedError{
+ inner: baseErr,
+ isError: extraErr,
+ }
+}
diff --git a/vendor/github.com/cyphar/filepath-securejoin/gocompat_generics_go121.go b/vendor/github.com/cyphar/filepath-securejoin/gocompat_generics_go121.go
new file mode 100644
index 00000000000..ddd6fa9a41c
--- /dev/null
+++ b/vendor/github.com/cyphar/filepath-securejoin/gocompat_generics_go121.go
@@ -0,0 +1,32 @@
+//go:build linux && go1.21
+
+// Copyright (C) 2024 SUSE LLC. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package securejoin
+
+import (
+ "slices"
+ "sync"
+)
+
+func slices_DeleteFunc[S ~[]E, E any](slice S, delFn func(E) bool) S {
+ return slices.DeleteFunc(slice, delFn)
+}
+
+func slices_Contains[S ~[]E, E comparable](slice S, val E) bool {
+ return slices.Contains(slice, val)
+}
+
+func slices_Clone[S ~[]E, E any](slice S) S {
+ return slices.Clone(slice)
+}
+
+func sync_OnceValue[T any](f func() T) func() T {
+ return sync.OnceValue(f)
+}
+
+func sync_OnceValues[T1, T2 any](f func() (T1, T2)) func() (T1, T2) {
+ return sync.OnceValues(f)
+}
diff --git a/vendor/github.com/cyphar/filepath-securejoin/gocompat_generics_unsupported.go b/vendor/github.com/cyphar/filepath-securejoin/gocompat_generics_unsupported.go
new file mode 100644
index 00000000000..f1e6fe7e717
--- /dev/null
+++ b/vendor/github.com/cyphar/filepath-securejoin/gocompat_generics_unsupported.go
@@ -0,0 +1,124 @@
+//go:build linux && !go1.21
+
+// Copyright (C) 2024 SUSE LLC. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package securejoin
+
+import (
+ "sync"
+)
+
+// These are very minimal implementations of functions that appear in Go 1.21's
+// stdlib, included so that we can build on older Go versions. Most are
+// borrowed directly from the stdlib, and a few are modified to be "obviously
+// correct" without needing to copy too many other helpers.
+
+// clearSlice is equivalent to the builtin clear from Go 1.21.
+// Copied from the Go 1.24 stdlib implementation.
+func clearSlice[S ~[]E, E any](slice S) {
+ var zero E
+ for i := range slice {
+ slice[i] = zero
+ }
+}
+
+// Copied from the Go 1.24 stdlib implementation.
+func slices_IndexFunc[S ~[]E, E any](s S, f func(E) bool) int {
+ for i := range s {
+ if f(s[i]) {
+ return i
+ }
+ }
+ return -1
+}
+
+// Copied from the Go 1.24 stdlib implementation.
+func slices_DeleteFunc[S ~[]E, E any](s S, del func(E) bool) S {
+ i := slices_IndexFunc(s, del)
+ if i == -1 {
+ return s
+ }
+ // Don't start copying elements until we find one to delete.
+ for j := i + 1; j < len(s); j++ {
+ if v := s[j]; !del(v) {
+ s[i] = v
+ i++
+ }
+ }
+ clearSlice(s[i:]) // zero/nil out the obsolete elements, for GC
+ return s[:i]
+}
+
+// Similar to the stdlib slices.Contains, except that we don't have
+// slices.Index so we need to use slices.IndexFunc for this non-Func helper.
+func slices_Contains[S ~[]E, E comparable](s S, v E) bool {
+ return slices_IndexFunc(s, func(e E) bool { return e == v }) >= 0
+}
+
+// Copied from the Go 1.24 stdlib implementation.
+func slices_Clone[S ~[]E, E any](s S) S {
+ // Preserve nil in case it matters.
+ if s == nil {
+ return nil
+ }
+ return append(S([]E{}), s...)
+}
+
+// Copied from the Go 1.24 stdlib implementation.
+func sync_OnceValue[T any](f func() T) func() T {
+ var (
+ once sync.Once
+ valid bool
+ p any
+ result T
+ )
+ g := func() {
+ defer func() {
+ p = recover()
+ if !valid {
+ panic(p)
+ }
+ }()
+ result = f()
+ f = nil
+ valid = true
+ }
+ return func() T {
+ once.Do(g)
+ if !valid {
+ panic(p)
+ }
+ return result
+ }
+}
+
+// Copied from the Go 1.24 stdlib implementation.
+func sync_OnceValues[T1, T2 any](f func() (T1, T2)) func() (T1, T2) {
+ var (
+ once sync.Once
+ valid bool
+ p any
+ r1 T1
+ r2 T2
+ )
+ g := func() {
+ defer func() {
+ p = recover()
+ if !valid {
+ panic(p)
+ }
+ }()
+ r1, r2 = f()
+ f = nil
+ valid = true
+ }
+ return func() (T1, T2) {
+ once.Do(g)
+ if !valid {
+ panic(p)
+ }
+ return r1, r2
+ }
+}
diff --git a/vendor/github.com/cyphar/filepath-securejoin/join.go b/vendor/github.com/cyphar/filepath-securejoin/join.go
index aa32b85fb84..e0ee3f2b57a 100644
--- a/vendor/github.com/cyphar/filepath-securejoin/join.go
+++ b/vendor/github.com/cyphar/filepath-securejoin/join.go
@@ -1,17 +1,11 @@
// Copyright (C) 2014-2015 Docker Inc & Go Authors. All rights reserved.
-// Copyright (C) 2017 SUSE LLC. All rights reserved.
+// Copyright (C) 2017-2024 SUSE LLC. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
-// Package securejoin is an implementation of the hopefully-soon-to-be-included
-// SecureJoin helper that is meant to be part of the "path/filepath" package.
-// The purpose of this project is to provide a PoC implementation to make the
-// SecureJoin proposal (https://github.com/golang/go/issues/20126) more
-// tangible.
package securejoin
import (
- "bytes"
"errors"
"os"
"path/filepath"
@@ -19,26 +13,34 @@ import (
"syscall"
)
+const maxSymlinkLimit = 255
+
// IsNotExist tells you if err is an error that implies that either the path
// accessed does not exist (or path components don't exist). This is
-// effectively a more broad version of os.IsNotExist.
+// effectively a more broad version of [os.IsNotExist].
func IsNotExist(err error) bool {
// Check that it's not actually an ENOTDIR, which in some cases is a more
// convoluted case of ENOENT (usually involving weird paths).
return errors.Is(err, os.ErrNotExist) || errors.Is(err, syscall.ENOTDIR) || errors.Is(err, syscall.ENOENT)
}
-// SecureJoinVFS joins the two given path components (similar to Join) except
+// SecureJoinVFS joins the two given path components (similar to [filepath.Join]) except
// that the returned path is guaranteed to be scoped inside the provided root
// path (when evaluated). Any symbolic links in the path are evaluated with the
// given root treated as the root of the filesystem, similar to a chroot. The
-// filesystem state is evaluated through the given VFS interface (if nil, the
-// standard os.* family of functions are used).
+// filesystem state is evaluated through the given [VFS] interface (if nil, the
+// standard [os].* family of functions are used).
//
// Note that the guarantees provided by this function only apply if the path
// components in the returned string are not modified (in other words are not
// replaced with symlinks on the filesystem) after this function has returned.
-// Such a symlink race is necessarily out-of-scope of SecureJoin.
+// Such a symlink race is necessarily out-of-scope of SecureJoinVFS.
+//
+// NOTE: Due to the above limitation, Linux users are strongly encouraged to
+// use [OpenInRoot] instead, which does safely protect against these kinds of
+// attacks. There is no way to solve this problem with SecureJoinVFS because
+// the API is fundamentally wrong (you cannot return a "safe" path string and
+// guarantee it won't be modified afterwards).
//
// Volume names in unsafePath are always discarded, regardless if they are
// provided via direct input or when evaluating symlinks. Therefore:
@@ -51,75 +53,73 @@ func SecureJoinVFS(root, unsafePath string, vfs VFS) (string, error) {
}
unsafePath = filepath.FromSlash(unsafePath)
- var path bytes.Buffer
- n := 0
- for unsafePath != "" {
- if n > 255 {
- return "", &os.PathError{Op: "SecureJoin", Path: root + string(filepath.Separator) + unsafePath, Err: syscall.ELOOP}
+ var (
+ currentPath string
+ remainingPath = unsafePath
+ linksWalked int
+ )
+ for remainingPath != "" {
+ if v := filepath.VolumeName(remainingPath); v != "" {
+ remainingPath = remainingPath[len(v):]
}
- if v := filepath.VolumeName(unsafePath); v != "" {
- unsafePath = unsafePath[len(v):]
- }
-
- // Next path component, p.
- i := strings.IndexRune(unsafePath, filepath.Separator)
- var p string
- if i == -1 {
- p, unsafePath = unsafePath, ""
+ // Get the next path component.
+ var part string
+ if i := strings.IndexRune(remainingPath, filepath.Separator); i == -1 {
+ part, remainingPath = remainingPath, ""
} else {
- p, unsafePath = unsafePath[:i], unsafePath[i+1:]
+ part, remainingPath = remainingPath[:i], remainingPath[i+1:]
}
- // Create a cleaned path, using the lexical semantics of /../a, to
- // create a "scoped" path component which can safely be joined to fullP
- // for evaluation. At this point, path.String() doesn't contain any
- // symlink components.
- cleanP := filepath.Clean(string(filepath.Separator) + path.String() + p)
- if cleanP == string(filepath.Separator) {
- path.Reset()
+ // Apply the component lexically to the path we are building.
+ // currentPath does not contain any symlinks, and we are lexically
+ // dealing with a single component, so it's okay to do a filepath.Clean
+ // here.
+ nextPath := filepath.Join(string(filepath.Separator), currentPath, part)
+ if nextPath == string(filepath.Separator) {
+ currentPath = ""
continue
}
- fullP := filepath.Clean(root + cleanP)
+ fullPath := root + string(filepath.Separator) + nextPath
// Figure out whether the path is a symlink.
- fi, err := vfs.Lstat(fullP)
+ fi, err := vfs.Lstat(fullPath)
if err != nil && !IsNotExist(err) {
return "", err
}
// Treat non-existent path components the same as non-symlinks (we
// can't do any better here).
if IsNotExist(err) || fi.Mode()&os.ModeSymlink == 0 {
- path.WriteString(p)
- path.WriteRune(filepath.Separator)
+ currentPath = nextPath
continue
}
- // Only increment when we actually dereference a link.
- n++
+ // It's a symlink, so get its contents and expand it by prepending it
+ // to the yet-unparsed path.
+ linksWalked++
+ if linksWalked > maxSymlinkLimit {
+ return "", &os.PathError{Op: "SecureJoin", Path: root + string(filepath.Separator) + unsafePath, Err: syscall.ELOOP}
+ }
- // It's a symlink, expand it by prepending it to the yet-unparsed path.
- dest, err := vfs.Readlink(fullP)
+ dest, err := vfs.Readlink(fullPath)
if err != nil {
return "", err
}
+ remainingPath = dest + string(filepath.Separator) + remainingPath
// Absolute symlinks reset any work we've already done.
if filepath.IsAbs(dest) {
- path.Reset()
+ currentPath = ""
}
- unsafePath = dest + string(filepath.Separator) + unsafePath
}
- // We have to clean path.String() here because it may contain '..'
- // components that are entirely lexical, but would be misleading otherwise.
- // And finally do a final clean to ensure that root is also lexically
- // clean.
- fullP := filepath.Clean(string(filepath.Separator) + path.String())
- return filepath.Clean(root + fullP), nil
+ // There should be no lexical components like ".." left in the path here,
+ // but for safety clean up the path before joining it to the root.
+ finalPath := filepath.Join(string(filepath.Separator), currentPath)
+ return filepath.Join(root, finalPath), nil
}
-// SecureJoin is a wrapper around SecureJoinVFS that just uses the os.* library
-// of functions as the VFS. If in doubt, use this function over SecureJoinVFS.
+// SecureJoin is a wrapper around [SecureJoinVFS] that just uses the [os].* library
+// of functions as the [VFS]. If in doubt, use this function over [SecureJoinVFS].
func SecureJoin(root, unsafePath string) (string, error) {
return SecureJoinVFS(root, unsafePath, nil)
}
diff --git a/vendor/github.com/cyphar/filepath-securejoin/lookup_linux.go b/vendor/github.com/cyphar/filepath-securejoin/lookup_linux.go
new file mode 100644
index 00000000000..be81e498d72
--- /dev/null
+++ b/vendor/github.com/cyphar/filepath-securejoin/lookup_linux.go
@@ -0,0 +1,388 @@
+//go:build linux
+
+// Copyright (C) 2024 SUSE LLC. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package securejoin
+
+import (
+ "errors"
+ "fmt"
+ "os"
+ "path"
+ "path/filepath"
+ "strings"
+
+ "golang.org/x/sys/unix"
+)
+
+type symlinkStackEntry struct {
+ // (dir, remainingPath) is what we would've returned if the link didn't
+ // exist. This matches what openat2(RESOLVE_IN_ROOT) would return in
+ // this case.
+ dir *os.File
+ remainingPath string
+ // linkUnwalked is the remaining path components from the original
+ // Readlink which we have yet to walk. When this slice is empty, we
+ // drop the link from the stack.
+ linkUnwalked []string
+}
+
+func (se symlinkStackEntry) String() string {
+ return fmt.Sprintf("<%s>/%s [->%s]", se.dir.Name(), se.remainingPath, strings.Join(se.linkUnwalked, "/"))
+}
+
+func (se symlinkStackEntry) Close() {
+ _ = se.dir.Close()
+}
+
+type symlinkStack []*symlinkStackEntry
+
+func (s *symlinkStack) IsEmpty() bool {
+ return s == nil || len(*s) == 0
+}
+
+func (s *symlinkStack) Close() {
+ if s != nil {
+ for _, link := range *s {
+ link.Close()
+ }
+ // TODO: Switch to clear once we switch to Go 1.21.
+ *s = nil
+ }
+}
+
+var (
+ errEmptyStack = errors.New("[internal] stack is empty")
+ errBrokenSymlinkStack = errors.New("[internal error] broken symlink stack")
+)
+
+func (s *symlinkStack) popPart(part string) error {
+ if s == nil || s.IsEmpty() {
+ // If there is nothing in the symlink stack, then the part was from the
+ // real path provided by the user, and this is a no-op.
+ return errEmptyStack
+ }
+ if part == "." {
+ // "." components are no-ops -- we drop them when doing SwapLink.
+ return nil
+ }
+
+ tailEntry := (*s)[len(*s)-1]
+
+ // Double-check that we are popping the component we expect.
+ if len(tailEntry.linkUnwalked) == 0 {
+ return fmt.Errorf("%w: trying to pop component %q of empty stack entry %s", errBrokenSymlinkStack, part, tailEntry)
+ }
+ headPart := tailEntry.linkUnwalked[0]
+ if headPart != part {
+ return fmt.Errorf("%w: trying to pop component %q but the last stack entry is %s (%q)", errBrokenSymlinkStack, part, tailEntry, headPart)
+ }
+
+ // Drop the component, but keep the entry around in case we are dealing
+ // with a "tail-chained" symlink.
+ tailEntry.linkUnwalked = tailEntry.linkUnwalked[1:]
+ return nil
+}
+
+func (s *symlinkStack) PopPart(part string) error {
+ if err := s.popPart(part); err != nil {
+ if errors.Is(err, errEmptyStack) {
+ // Skip empty stacks.
+ err = nil
+ }
+ return err
+ }
+
+ // Clean up any of the trailing stack entries that are empty.
+ for lastGood := len(*s) - 1; lastGood >= 0; lastGood-- {
+ entry := (*s)[lastGood]
+ if len(entry.linkUnwalked) > 0 {
+ break
+ }
+ entry.Close()
+ (*s) = (*s)[:lastGood]
+ }
+ return nil
+}
+
+func (s *symlinkStack) push(dir *os.File, remainingPath, linkTarget string) error {
+ if s == nil {
+ return nil
+ }
+ // Split the link target and clean up any "" parts.
+ linkTargetParts := slices_DeleteFunc(
+ strings.Split(linkTarget, "/"),
+ func(part string) bool { return part == "" || part == "." })
+
+ // Copy the directory so the caller doesn't close our copy.
+ dirCopy, err := dupFile(dir)
+ if err != nil {
+ return err
+ }
+
+ // Add to the stack.
+ *s = append(*s, &symlinkStackEntry{
+ dir: dirCopy,
+ remainingPath: remainingPath,
+ linkUnwalked: linkTargetParts,
+ })
+ return nil
+}
+
+func (s *symlinkStack) SwapLink(linkPart string, dir *os.File, remainingPath, linkTarget string) error {
+ // If we are currently inside a symlink resolution, remove the symlink
+ // component from the last symlink entry, but don't remove the entry even
+ // if it's empty. If we are a "tail-chained" symlink (a trailing symlink we
+ // hit during a symlink resolution) we need to keep the old symlink until
+ // we finish the resolution.
+ if err := s.popPart(linkPart); err != nil {
+ if !errors.Is(err, errEmptyStack) {
+ return err
+ }
+ // Push the component regardless of whether the stack was empty.
+ }
+ return s.push(dir, remainingPath, linkTarget)
+}
+
+func (s *symlinkStack) PopTopSymlink() (*os.File, string, bool) {
+ if s == nil || s.IsEmpty() {
+ return nil, "", false
+ }
+ tailEntry := (*s)[0]
+ *s = (*s)[1:]
+ return tailEntry.dir, tailEntry.remainingPath, true
+}
+
+// partialLookupInRoot tries to lookup as much of the request path as possible
+// within the provided root (a-la RESOLVE_IN_ROOT) and opens the final existing
+// component of the requested path, returning a file handle to the final
+// existing component and a string containing the remaining path components.
+func partialLookupInRoot(root *os.File, unsafePath string) (*os.File, string, error) {
+ return lookupInRoot(root, unsafePath, true)
+}
+
+func completeLookupInRoot(root *os.File, unsafePath string) (*os.File, error) {
+ handle, remainingPath, err := lookupInRoot(root, unsafePath, false)
+ if remainingPath != "" && err == nil {
+ // should never happen
+ err = fmt.Errorf("[bug] non-empty remaining path when doing a non-partial lookup: %q", remainingPath)
+ }
+ // lookupInRoot(partial=false) will always close the handle if an error is
+ // returned, so no need to double-check here.
+ return handle, err
+}
+
+func lookupInRoot(root *os.File, unsafePath string, partial bool) (Handle *os.File, _ string, _ error) {
+ unsafePath = filepath.ToSlash(unsafePath) // noop
+
+ // This is very similar to SecureJoin, except that we operate on the
+ // components using file descriptors. We then return the last component we
+ // managed open, along with the remaining path components not opened.
+
+ // Try to use openat2 if possible.
+ if hasOpenat2() {
+ return lookupOpenat2(root, unsafePath, partial)
+ }
+
+ // Get the "actual" root path from /proc/self/fd. This is necessary if the
+ // root is some magic-link like /proc/$pid/root, in which case we want to
+ // make sure when we do checkProcSelfFdPath that we are using the correct
+ // root path.
+ logicalRootPath, err := procSelfFdReadlink(root)
+ if err != nil {
+ return nil, "", fmt.Errorf("get real root path: %w", err)
+ }
+
+ currentDir, err := dupFile(root)
+ if err != nil {
+ return nil, "", fmt.Errorf("clone root fd: %w", err)
+ }
+ defer func() {
+ // If a handle is not returned, close the internal handle.
+ if Handle == nil {
+ _ = currentDir.Close()
+ }
+ }()
+
+ // symlinkStack is used to emulate how openat2(RESOLVE_IN_ROOT) treats
+ // dangling symlinks. If we hit a non-existent path while resolving a
+ // symlink, we need to return the (dir, remainingPath) that we had when we
+ // hit the symlink (treating the symlink as though it were a regular file).
+ // The set of (dir, remainingPath) sets is stored within the symlinkStack
+ // and we add and remove parts when we hit symlink and non-symlink
+ // components respectively. We need a stack because of recursive symlinks
+ // (symlinks that contain symlink components in their target).
+ //
+ // Note that the stack is ONLY used for book-keeping. All of the actual
+ // path walking logic is still based on currentPath/remainingPath and
+ // currentDir (as in SecureJoin).
+ var symStack *symlinkStack
+ if partial {
+ symStack = new(symlinkStack)
+ defer symStack.Close()
+ }
+
+ var (
+ linksWalked int
+ currentPath string
+ remainingPath = unsafePath
+ )
+ for remainingPath != "" {
+ // Save the current remaining path so if the part is not real we can
+ // return the path including the component.
+ oldRemainingPath := remainingPath
+
+ // Get the next path component.
+ var part string
+ if i := strings.IndexByte(remainingPath, '/'); i == -1 {
+ part, remainingPath = remainingPath, ""
+ } else {
+ part, remainingPath = remainingPath[:i], remainingPath[i+1:]
+ }
+ // If we hit an empty component, we need to treat it as though it is
+ // "." so that trailing "/" and "//" components on a non-directory
+ // correctly return the right error code.
+ if part == "" {
+ part = "."
+ }
+
+ // Apply the component lexically to the path we are building.
+ // currentPath does not contain any symlinks, and we are lexically
+ // dealing with a single component, so it's okay to do a filepath.Clean
+ // here.
+ nextPath := path.Join("/", currentPath, part)
+ // If we logically hit the root, just clone the root rather than
+ // opening the part and doing all of the other checks.
+ if nextPath == "/" {
+ if err := symStack.PopPart(part); err != nil {
+ return nil, "", fmt.Errorf("walking into root with part %q failed: %w", part, err)
+ }
+ // Jump to root.
+ rootClone, err := dupFile(root)
+ if err != nil {
+ return nil, "", fmt.Errorf("clone root fd: %w", err)
+ }
+ _ = currentDir.Close()
+ currentDir = rootClone
+ currentPath = nextPath
+ continue
+ }
+
+ // Try to open the next component.
+ nextDir, err := openatFile(currentDir, part, unix.O_PATH|unix.O_NOFOLLOW|unix.O_CLOEXEC, 0)
+ switch {
+ case err == nil:
+ st, err := nextDir.Stat()
+ if err != nil {
+ _ = nextDir.Close()
+ return nil, "", fmt.Errorf("stat component %q: %w", part, err)
+ }
+
+ switch st.Mode() & os.ModeType {
+ case os.ModeSymlink:
+ // readlinkat implies AT_EMPTY_PATH since Linux 2.6.39. See
+ // Linux commit 65cfc6722361 ("readlinkat(), fchownat() and
+ // fstatat() with empty relative pathnames").
+ linkDest, err := readlinkatFile(nextDir, "")
+ // We don't need the handle anymore.
+ _ = nextDir.Close()
+ if err != nil {
+ return nil, "", err
+ }
+
+ linksWalked++
+ if linksWalked > maxSymlinkLimit {
+ return nil, "", &os.PathError{Op: "securejoin.lookupInRoot", Path: logicalRootPath + "/" + unsafePath, Err: unix.ELOOP}
+ }
+
+ // Swap out the symlink's component for the link entry itself.
+ if err := symStack.SwapLink(part, currentDir, oldRemainingPath, linkDest); err != nil {
+ return nil, "", fmt.Errorf("walking into symlink %q failed: push symlink: %w", part, err)
+ }
+
+ // Update our logical remaining path.
+ remainingPath = linkDest + "/" + remainingPath
+ // Absolute symlinks reset any work we've already done.
+ if path.IsAbs(linkDest) {
+ // Jump to root.
+ rootClone, err := dupFile(root)
+ if err != nil {
+ return nil, "", fmt.Errorf("clone root fd: %w", err)
+ }
+ _ = currentDir.Close()
+ currentDir = rootClone
+ currentPath = "/"
+ }
+
+ default:
+ // If we are dealing with a directory, simply walk into it.
+ _ = currentDir.Close()
+ currentDir = nextDir
+ currentPath = nextPath
+
+ // The part was real, so drop it from the symlink stack.
+ if err := symStack.PopPart(part); err != nil {
+ return nil, "", fmt.Errorf("walking into directory %q failed: %w", part, err)
+ }
+
+ // If we are operating on a .., make sure we haven't escaped.
+ // We only have to check for ".." here because walking down
+ // into a regular component component cannot cause you to
+ // escape. This mirrors the logic in RESOLVE_IN_ROOT, except we
+ // have to check every ".." rather than only checking after a
+ // rename or mount on the system.
+ if part == ".." {
+ // Make sure the root hasn't moved.
+ if err := checkProcSelfFdPath(logicalRootPath, root); err != nil {
+ return nil, "", fmt.Errorf("root path moved during lookup: %w", err)
+ }
+ // Make sure the path is what we expect.
+ fullPath := logicalRootPath + nextPath
+ if err := checkProcSelfFdPath(fullPath, currentDir); err != nil {
+ return nil, "", fmt.Errorf("walking into %q had unexpected result: %w", part, err)
+ }
+ }
+ }
+
+ default:
+ if !partial {
+ return nil, "", err
+ }
+ // If there are any remaining components in the symlink stack, we
+ // are still within a symlink resolution and thus we hit a dangling
+ // symlink. So pretend that the first symlink in the stack we hit
+ // was an ENOENT (to match openat2).
+ if oldDir, remainingPath, ok := symStack.PopTopSymlink(); ok {
+ _ = currentDir.Close()
+ return oldDir, remainingPath, err
+ }
+ // We have hit a final component that doesn't exist, so we have our
+ // partial open result. Note that we have to use the OLD remaining
+ // path, since the lookup failed.
+ return currentDir, oldRemainingPath, err
+ }
+ }
+
+ // If the unsafePath had a trailing slash, we need to make sure we try to
+ // do a relative "." open so that we will correctly return an error when
+ // the final component is a non-directory (to match openat2). In the
+ // context of openat2, a trailing slash and a trailing "/." are completely
+ // equivalent.
+ if strings.HasSuffix(unsafePath, "/") {
+ nextDir, err := openatFile(currentDir, ".", unix.O_PATH|unix.O_NOFOLLOW|unix.O_CLOEXEC, 0)
+ if err != nil {
+ if !partial {
+ _ = currentDir.Close()
+ currentDir = nil
+ }
+ return currentDir, "", err
+ }
+ _ = currentDir.Close()
+ currentDir = nextDir
+ }
+
+ // All of the components existed!
+ return currentDir, "", nil
+}
diff --git a/vendor/github.com/cyphar/filepath-securejoin/mkdir_linux.go b/vendor/github.com/cyphar/filepath-securejoin/mkdir_linux.go
new file mode 100644
index 00000000000..5e559bb7a89
--- /dev/null
+++ b/vendor/github.com/cyphar/filepath-securejoin/mkdir_linux.go
@@ -0,0 +1,215 @@
+//go:build linux
+
+// Copyright (C) 2024 SUSE LLC. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package securejoin
+
+import (
+ "errors"
+ "fmt"
+ "os"
+ "path/filepath"
+ "strings"
+
+ "golang.org/x/sys/unix"
+)
+
+var (
+ errInvalidMode = errors.New("invalid permission mode")
+ errPossibleAttack = errors.New("possible attack detected")
+)
+
+// MkdirAllHandle is equivalent to [MkdirAll], except that it is safer to use
+// in two respects:
+//
+// - The caller provides the root directory as an *[os.File] (preferably O_PATH)
+// handle. This means that the caller can be sure which root directory is
+// being used. Note that this can be emulated by using /proc/self/fd/... as
+// the root path with [os.MkdirAll].
+//
+// - Once all of the directories have been created, an *[os.File] O_PATH handle
+// to the directory at unsafePath is returned to the caller. This is done in
+// an effectively-race-free way (an attacker would only be able to swap the
+// final directory component), which is not possible to emulate with
+// [MkdirAll].
+//
+// In addition, the returned handle is obtained far more efficiently than doing
+// a brand new lookup of unsafePath (such as with [SecureJoin] or openat2) after
+// doing [MkdirAll]. If you intend to open the directory after creating it, you
+// should use MkdirAllHandle.
+func MkdirAllHandle(root *os.File, unsafePath string, mode int) (_ *os.File, Err error) {
+ // Make sure there are no os.FileMode bits set.
+ if mode&^0o7777 != 0 {
+ return nil, fmt.Errorf("%w for mkdir 0o%.3o", errInvalidMode, mode)
+ }
+ // On Linux, mkdirat(2) (and os.Mkdir) silently ignore the suid and sgid
+ // bits. We could also silently ignore them but since we have very few
+ // users it seems more prudent to return an error so users notice that
+ // these bits will not be set.
+ if mode&^0o1777 != 0 {
+ return nil, fmt.Errorf("%w for mkdir 0o%.3o: suid and sgid are ignored by mkdir", errInvalidMode, mode)
+ }
+
+ // Try to open as much of the path as possible.
+ currentDir, remainingPath, err := partialLookupInRoot(root, unsafePath)
+ defer func() {
+ if Err != nil {
+ _ = currentDir.Close()
+ }
+ }()
+ if err != nil && !errors.Is(err, unix.ENOENT) {
+ return nil, fmt.Errorf("find existing subpath of %q: %w", unsafePath, err)
+ }
+
+ // If there is an attacker deleting directories as we walk into them,
+ // detect this proactively. Note this is guaranteed to detect if the
+ // attacker deleted any part of the tree up to currentDir.
+ //
+ // Once we walk into a dead directory, partialLookupInRoot would not be
+ // able to walk further down the tree (directories must be empty before
+ // they are deleted), and if the attacker has removed the entire tree we
+ // can be sure that anything that was originally inside a dead directory
+ // must also be deleted and thus is a dead directory in its own right.
+ //
+ // This is mostly a quality-of-life check, because mkdir will simply fail
+ // later if the attacker deletes the tree after this check.
+ if err := isDeadInode(currentDir); err != nil {
+ return nil, fmt.Errorf("finding existing subpath of %q: %w", unsafePath, err)
+ }
+
+ // Re-open the path to match the O_DIRECTORY reopen loop later (so that we
+ // always return a non-O_PATH handle). We also check that we actually got a
+ // directory.
+ if reopenDir, err := Reopen(currentDir, unix.O_DIRECTORY|unix.O_CLOEXEC); errors.Is(err, unix.ENOTDIR) {
+ return nil, fmt.Errorf("cannot create subdirectories in %q: %w", currentDir.Name(), unix.ENOTDIR)
+ } else if err != nil {
+ return nil, fmt.Errorf("re-opening handle to %q: %w", currentDir.Name(), err)
+ } else {
+ _ = currentDir.Close()
+ currentDir = reopenDir
+ }
+
+ remainingParts := strings.Split(remainingPath, string(filepath.Separator))
+ if slices_Contains(remainingParts, "..") {
+ // The path contained ".." components after the end of the "real"
+ // components. We could try to safely resolve ".." here but that would
+ // add a bunch of extra logic for something that it's not clear even
+ // needs to be supported. So just return an error.
+ //
+ // If we do filepath.Clean(remainingPath) then we end up with the
+ // problem that ".." can erase a trailing dangling symlink and produce
+ // a path that doesn't quite match what the user asked for.
+ return nil, fmt.Errorf("%w: yet-to-be-created path %q contains '..' components", unix.ENOENT, remainingPath)
+ }
+
+ // Make sure the mode doesn't have any type bits.
+ mode &^= unix.S_IFMT
+
+ // Create the remaining components.
+ for _, part := range remainingParts {
+ switch part {
+ case "", ".":
+ // Skip over no-op paths.
+ continue
+ }
+
+ // NOTE: mkdir(2) will not follow trailing symlinks, so we can safely
+ // create the final component without worrying about symlink-exchange
+ // attacks.
+ //
+ // If we get -EEXIST, it's possible that another program created the
+ // directory at the same time as us. In that case, just continue on as
+ // if we created it (if the created inode is not a directory, the
+ // following open call will fail).
+ if err := unix.Mkdirat(int(currentDir.Fd()), part, uint32(mode)); err != nil && !errors.Is(err, unix.EEXIST) {
+ err = &os.PathError{Op: "mkdirat", Path: currentDir.Name() + "/" + part, Err: err}
+ // Make the error a bit nicer if the directory is dead.
+ if deadErr := isDeadInode(currentDir); deadErr != nil {
+ // TODO: Once we bump the minimum Go version to 1.20, we can use
+ // multiple %w verbs for this wrapping. For now we need to use a
+ // compatibility shim for older Go versions.
+ //err = fmt.Errorf("%w (%w)", err, deadErr)
+ err = wrapBaseError(err, deadErr)
+ }
+ return nil, err
+ }
+
+ // Get a handle to the next component. O_DIRECTORY means we don't need
+ // to use O_PATH.
+ var nextDir *os.File
+ if hasOpenat2() {
+ nextDir, err = openat2File(currentDir, part, &unix.OpenHow{
+ Flags: unix.O_NOFOLLOW | unix.O_DIRECTORY | unix.O_CLOEXEC,
+ Resolve: unix.RESOLVE_BENEATH | unix.RESOLVE_NO_SYMLINKS | unix.RESOLVE_NO_XDEV,
+ })
+ } else {
+ nextDir, err = openatFile(currentDir, part, unix.O_NOFOLLOW|unix.O_DIRECTORY|unix.O_CLOEXEC, 0)
+ }
+ if err != nil {
+ return nil, err
+ }
+ _ = currentDir.Close()
+ currentDir = nextDir
+
+ // It's possible that the directory we just opened was swapped by an
+ // attacker. Unfortunately there isn't much we can do to protect
+ // against this, and MkdirAll's behaviour is that we will reuse
+ // existing directories anyway so the need to protect against this is
+ // incredibly limited (and arguably doesn't even deserve mention here).
+ //
+ // Ideally we might want to check that the owner and mode match what we
+ // would've created -- unfortunately, it is non-trivial to verify that
+ // the owner and mode of the created directory match. While plain Unix
+ // DAC rules seem simple enough to emulate, there are a bunch of other
+ // factors that can change the mode or owner of created directories
+ // (default POSIX ACLs, mount options like uid=1,gid=2,umask=0 on
+ // filesystems like vfat, etc etc). We used to try to verify this but
+ // it just lead to a series of spurious errors.
+ //
+ // We could also check that the directory is non-empty, but
+ // unfortunately some pseduofilesystems (like cgroupfs) create
+ // non-empty directories, which would result in different spurious
+ // errors.
+ }
+ return currentDir, nil
+}
+
+// MkdirAll is a race-safe alternative to the [os.MkdirAll] function,
+// where the new directory is guaranteed to be within the root directory (if an
+// attacker can move directories from inside the root to outside the root, the
+// created directory tree might be outside of the root but the key constraint
+// is that at no point will we walk outside of the directory tree we are
+// creating).
+//
+// Effectively, MkdirAll(root, unsafePath, mode) is equivalent to
+//
+// path, _ := securejoin.SecureJoin(root, unsafePath)
+// err := os.MkdirAll(path, mode)
+//
+// But is much safer. The above implementation is unsafe because if an attacker
+// can modify the filesystem tree between [SecureJoin] and [os.MkdirAll], it is
+// possible for MkdirAll to resolve unsafe symlink components and create
+// directories outside of the root.
+//
+// If you plan to open the directory after you have created it or want to use
+// an open directory handle as the root, you should use [MkdirAllHandle] instead.
+// This function is a wrapper around [MkdirAllHandle].
+//
+// NOTE: The mode argument must be set the unix mode bits (unix.S_I...), not
+// the Go generic mode bits ([os.FileMode]...).
+func MkdirAll(root, unsafePath string, mode int) error {
+ rootDir, err := os.OpenFile(root, unix.O_PATH|unix.O_DIRECTORY|unix.O_CLOEXEC, 0)
+ if err != nil {
+ return err
+ }
+ defer rootDir.Close()
+
+ f, err := MkdirAllHandle(rootDir, unsafePath, mode)
+ if err != nil {
+ return err
+ }
+ _ = f.Close()
+ return nil
+}
diff --git a/vendor/github.com/cyphar/filepath-securejoin/open_linux.go b/vendor/github.com/cyphar/filepath-securejoin/open_linux.go
new file mode 100644
index 00000000000..230be73f0eb
--- /dev/null
+++ b/vendor/github.com/cyphar/filepath-securejoin/open_linux.go
@@ -0,0 +1,103 @@
+//go:build linux
+
+// Copyright (C) 2024 SUSE LLC. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package securejoin
+
+import (
+ "fmt"
+ "os"
+ "strconv"
+
+ "golang.org/x/sys/unix"
+)
+
+// OpenatInRoot is equivalent to [OpenInRoot], except that the root is provided
+// using an *[os.File] handle, to ensure that the correct root directory is used.
+func OpenatInRoot(root *os.File, unsafePath string) (*os.File, error) {
+ handle, err := completeLookupInRoot(root, unsafePath)
+ if err != nil {
+ return nil, &os.PathError{Op: "securejoin.OpenInRoot", Path: unsafePath, Err: err}
+ }
+ return handle, nil
+}
+
+// OpenInRoot safely opens the provided unsafePath within the root.
+// Effectively, OpenInRoot(root, unsafePath) is equivalent to
+//
+// path, _ := securejoin.SecureJoin(root, unsafePath)
+// handle, err := os.OpenFile(path, unix.O_PATH|unix.O_CLOEXEC)
+//
+// But is much safer. The above implementation is unsafe because if an attacker
+// can modify the filesystem tree between [SecureJoin] and [os.OpenFile], it is
+// possible for the returned file to be outside of the root.
+//
+// Note that the returned handle is an O_PATH handle, meaning that only a very
+// limited set of operations will work on the handle. This is done to avoid
+// accidentally opening an untrusted file that could cause issues (such as a
+// disconnected TTY that could cause a DoS, or some other issue). In order to
+// use the returned handle, you can "upgrade" it to a proper handle using
+// [Reopen].
+func OpenInRoot(root, unsafePath string) (*os.File, error) {
+ rootDir, err := os.OpenFile(root, unix.O_PATH|unix.O_DIRECTORY|unix.O_CLOEXEC, 0)
+ if err != nil {
+ return nil, err
+ }
+ defer rootDir.Close()
+ return OpenatInRoot(rootDir, unsafePath)
+}
+
+// Reopen takes an *[os.File] handle and re-opens it through /proc/self/fd.
+// Reopen(file, flags) is effectively equivalent to
+//
+// fdPath := fmt.Sprintf("/proc/self/fd/%d", file.Fd())
+// os.OpenFile(fdPath, flags|unix.O_CLOEXEC)
+//
+// But with some extra hardenings to ensure that we are not tricked by a
+// maliciously-configured /proc mount. While this attack scenario is not
+// common, in container runtimes it is possible for higher-level runtimes to be
+// tricked into configuring an unsafe /proc that can be used to attack file
+// operations. See [CVE-2019-19921] for more details.
+//
+// [CVE-2019-19921]: https://github.com/advisories/GHSA-fh74-hm69-rqjw
+func Reopen(handle *os.File, flags int) (*os.File, error) {
+ procRoot, err := getProcRoot()
+ if err != nil {
+ return nil, err
+ }
+
+ // We can't operate on /proc/thread-self/fd/$n directly when doing a
+ // re-open, so we need to open /proc/thread-self/fd and then open a single
+ // final component.
+ procFdDir, closer, err := procThreadSelf(procRoot, "fd/")
+ if err != nil {
+ return nil, fmt.Errorf("get safe /proc/thread-self/fd handle: %w", err)
+ }
+ defer procFdDir.Close()
+ defer closer()
+
+ // Try to detect if there is a mount on top of the magic-link we are about
+ // to open. If we are using unsafeHostProcRoot(), this could change after
+ // we check it (and there's nothing we can do about that) but for
+ // privateProcRoot() this should be guaranteed to be safe (at least since
+ // Linux 5.12[1], when anonymous mount namespaces were completely isolated
+ // from external mounts including mount propagation events).
+ //
+ // [1]: Linux commit ee2e3f50629f ("mount: fix mounting of detached mounts
+ // onto targets that reside on shared mounts").
+ fdStr := strconv.Itoa(int(handle.Fd()))
+ if err := checkSymlinkOvermount(procRoot, procFdDir, fdStr); err != nil {
+ return nil, fmt.Errorf("check safety of /proc/thread-self/fd/%s magiclink: %w", fdStr, err)
+ }
+
+ flags |= unix.O_CLOEXEC
+ // Rather than just wrapping openatFile, open-code it so we can copy
+ // handle.Name().
+ reopenFd, err := unix.Openat(int(procFdDir.Fd()), fdStr, flags, 0)
+ if err != nil {
+ return nil, fmt.Errorf("reopen fd %d: %w", handle.Fd(), err)
+ }
+ return os.NewFile(uintptr(reopenFd), handle.Name()), nil
+}
diff --git a/vendor/github.com/cyphar/filepath-securejoin/openat2_linux.go b/vendor/github.com/cyphar/filepath-securejoin/openat2_linux.go
new file mode 100644
index 00000000000..f7a13e69ce8
--- /dev/null
+++ b/vendor/github.com/cyphar/filepath-securejoin/openat2_linux.go
@@ -0,0 +1,127 @@
+//go:build linux
+
+// Copyright (C) 2024 SUSE LLC. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package securejoin
+
+import (
+ "errors"
+ "fmt"
+ "os"
+ "path/filepath"
+ "strings"
+
+ "golang.org/x/sys/unix"
+)
+
+var hasOpenat2 = sync_OnceValue(func() bool {
+ fd, err := unix.Openat2(unix.AT_FDCWD, ".", &unix.OpenHow{
+ Flags: unix.O_PATH | unix.O_CLOEXEC,
+ Resolve: unix.RESOLVE_NO_SYMLINKS | unix.RESOLVE_IN_ROOT,
+ })
+ if err != nil {
+ return false
+ }
+ _ = unix.Close(fd)
+ return true
+})
+
+func scopedLookupShouldRetry(how *unix.OpenHow, err error) bool {
+ // RESOLVE_IN_ROOT (and RESOLVE_BENEATH) can return -EAGAIN if we resolve
+ // ".." while a mount or rename occurs anywhere on the system. This could
+ // happen spuriously, or as the result of an attacker trying to mess with
+ // us during lookup.
+ //
+ // In addition, scoped lookups have a "safety check" at the end of
+ // complete_walk which will return -EXDEV if the final path is not in the
+ // root.
+ return how.Resolve&(unix.RESOLVE_IN_ROOT|unix.RESOLVE_BENEATH) != 0 &&
+ (errors.Is(err, unix.EAGAIN) || errors.Is(err, unix.EXDEV))
+}
+
+const scopedLookupMaxRetries = 10
+
+func openat2File(dir *os.File, path string, how *unix.OpenHow) (*os.File, error) {
+ fullPath := dir.Name() + "/" + path
+ // Make sure we always set O_CLOEXEC.
+ how.Flags |= unix.O_CLOEXEC
+ var tries int
+ for tries < scopedLookupMaxRetries {
+ fd, err := unix.Openat2(int(dir.Fd()), path, how)
+ if err != nil {
+ if scopedLookupShouldRetry(how, err) {
+ // We retry a couple of times to avoid the spurious errors, and
+ // if we are being attacked then returning -EAGAIN is the best
+ // we can do.
+ tries++
+ continue
+ }
+ return nil, &os.PathError{Op: "openat2", Path: fullPath, Err: err}
+ }
+ // If we are using RESOLVE_IN_ROOT, the name we generated may be wrong.
+ // NOTE: The procRoot code MUST NOT use RESOLVE_IN_ROOT, otherwise
+ // you'll get infinite recursion here.
+ if how.Resolve&unix.RESOLVE_IN_ROOT == unix.RESOLVE_IN_ROOT {
+ if actualPath, err := rawProcSelfFdReadlink(fd); err == nil {
+ fullPath = actualPath
+ }
+ }
+ return os.NewFile(uintptr(fd), fullPath), nil
+ }
+ return nil, &os.PathError{Op: "openat2", Path: fullPath, Err: errPossibleAttack}
+}
+
+func lookupOpenat2(root *os.File, unsafePath string, partial bool) (*os.File, string, error) {
+ if !partial {
+ file, err := openat2File(root, unsafePath, &unix.OpenHow{
+ Flags: unix.O_PATH | unix.O_CLOEXEC,
+ Resolve: unix.RESOLVE_IN_ROOT | unix.RESOLVE_NO_MAGICLINKS,
+ })
+ return file, "", err
+ }
+ return partialLookupOpenat2(root, unsafePath)
+}
+
+// partialLookupOpenat2 is an alternative implementation of
+// partialLookupInRoot, using openat2(RESOLVE_IN_ROOT) to more safely get a
+// handle to the deepest existing child of the requested path within the root.
+func partialLookupOpenat2(root *os.File, unsafePath string) (*os.File, string, error) {
+ // TODO: Implement this as a git-bisect-like binary search.
+
+ unsafePath = filepath.ToSlash(unsafePath) // noop
+ endIdx := len(unsafePath)
+ var lastError error
+ for endIdx > 0 {
+ subpath := unsafePath[:endIdx]
+
+ handle, err := openat2File(root, subpath, &unix.OpenHow{
+ Flags: unix.O_PATH | unix.O_CLOEXEC,
+ Resolve: unix.RESOLVE_IN_ROOT | unix.RESOLVE_NO_MAGICLINKS,
+ })
+ if err == nil {
+ // Jump over the slash if we have a non-"" remainingPath.
+ if endIdx < len(unsafePath) {
+ endIdx += 1
+ }
+ // We found a subpath!
+ return handle, unsafePath[endIdx:], lastError
+ }
+ if errors.Is(err, unix.ENOENT) || errors.Is(err, unix.ENOTDIR) {
+ // That path doesn't exist, let's try the next directory up.
+ endIdx = strings.LastIndexByte(subpath, '/')
+ lastError = err
+ continue
+ }
+ return nil, "", fmt.Errorf("open subpath: %w", err)
+ }
+ // If we couldn't open anything, the whole subpath is missing. Return a
+ // copy of the root fd so that the caller doesn't close this one by
+ // accident.
+ rootClone, err := dupFile(root)
+ if err != nil {
+ return nil, "", err
+ }
+ return rootClone, unsafePath, lastError
+}
diff --git a/vendor/github.com/cyphar/filepath-securejoin/openat_linux.go b/vendor/github.com/cyphar/filepath-securejoin/openat_linux.go
new file mode 100644
index 00000000000..949fb5f2d82
--- /dev/null
+++ b/vendor/github.com/cyphar/filepath-securejoin/openat_linux.go
@@ -0,0 +1,59 @@
+//go:build linux
+
+// Copyright (C) 2024 SUSE LLC. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package securejoin
+
+import (
+ "os"
+ "path/filepath"
+
+ "golang.org/x/sys/unix"
+)
+
+func dupFile(f *os.File) (*os.File, error) {
+ fd, err := unix.FcntlInt(f.Fd(), unix.F_DUPFD_CLOEXEC, 0)
+ if err != nil {
+ return nil, os.NewSyscallError("fcntl(F_DUPFD_CLOEXEC)", err)
+ }
+ return os.NewFile(uintptr(fd), f.Name()), nil
+}
+
+func openatFile(dir *os.File, path string, flags int, mode int) (*os.File, error) {
+ // Make sure we always set O_CLOEXEC.
+ flags |= unix.O_CLOEXEC
+ fd, err := unix.Openat(int(dir.Fd()), path, flags, uint32(mode))
+ if err != nil {
+ return nil, &os.PathError{Op: "openat", Path: dir.Name() + "/" + path, Err: err}
+ }
+ // All of the paths we use with openatFile(2) are guaranteed to be
+ // lexically safe, so we can use path.Join here.
+ fullPath := filepath.Join(dir.Name(), path)
+ return os.NewFile(uintptr(fd), fullPath), nil
+}
+
+func fstatatFile(dir *os.File, path string, flags int) (unix.Stat_t, error) {
+ var stat unix.Stat_t
+ if err := unix.Fstatat(int(dir.Fd()), path, &stat, flags); err != nil {
+ return stat, &os.PathError{Op: "fstatat", Path: dir.Name() + "/" + path, Err: err}
+ }
+ return stat, nil
+}
+
+func readlinkatFile(dir *os.File, path string) (string, error) {
+ size := 4096
+ for {
+ linkBuf := make([]byte, size)
+ n, err := unix.Readlinkat(int(dir.Fd()), path, linkBuf)
+ if err != nil {
+ return "", &os.PathError{Op: "readlinkat", Path: dir.Name() + "/" + path, Err: err}
+ }
+ if n != size {
+ return string(linkBuf[:n]), nil
+ }
+ // Possible truncation, resize the buffer.
+ size *= 2
+ }
+}
diff --git a/vendor/github.com/cyphar/filepath-securejoin/procfs_linux.go b/vendor/github.com/cyphar/filepath-securejoin/procfs_linux.go
new file mode 100644
index 00000000000..809a579cbdb
--- /dev/null
+++ b/vendor/github.com/cyphar/filepath-securejoin/procfs_linux.go
@@ -0,0 +1,452 @@
+//go:build linux
+
+// Copyright (C) 2024 SUSE LLC. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package securejoin
+
+import (
+ "errors"
+ "fmt"
+ "os"
+ "runtime"
+ "strconv"
+
+ "golang.org/x/sys/unix"
+)
+
+func fstat(f *os.File) (unix.Stat_t, error) {
+ var stat unix.Stat_t
+ if err := unix.Fstat(int(f.Fd()), &stat); err != nil {
+ return stat, &os.PathError{Op: "fstat", Path: f.Name(), Err: err}
+ }
+ return stat, nil
+}
+
+func fstatfs(f *os.File) (unix.Statfs_t, error) {
+ var statfs unix.Statfs_t
+ if err := unix.Fstatfs(int(f.Fd()), &statfs); err != nil {
+ return statfs, &os.PathError{Op: "fstatfs", Path: f.Name(), Err: err}
+ }
+ return statfs, nil
+}
+
+// The kernel guarantees that the root inode of a procfs mount has an
+// f_type of PROC_SUPER_MAGIC and st_ino of PROC_ROOT_INO.
+const (
+ procSuperMagic = 0x9fa0 // PROC_SUPER_MAGIC
+ procRootIno = 1 // PROC_ROOT_INO
+)
+
+func verifyProcRoot(procRoot *os.File) error {
+ if statfs, err := fstatfs(procRoot); err != nil {
+ return err
+ } else if statfs.Type != procSuperMagic {
+ return fmt.Errorf("%w: incorrect procfs root filesystem type 0x%x", errUnsafeProcfs, statfs.Type)
+ }
+ if stat, err := fstat(procRoot); err != nil {
+ return err
+ } else if stat.Ino != procRootIno {
+ return fmt.Errorf("%w: incorrect procfs root inode number %d", errUnsafeProcfs, stat.Ino)
+ }
+ return nil
+}
+
+var hasNewMountApi = sync_OnceValue(func() bool {
+ // All of the pieces of the new mount API we use (fsopen, fsconfig,
+ // fsmount, open_tree) were added together in Linux 5.1[1,2], so we can
+ // just check for one of the syscalls and the others should also be
+ // available.
+ //
+ // Just try to use open_tree(2) to open a file without OPEN_TREE_CLONE.
+ // This is equivalent to openat(2), but tells us if open_tree is
+ // available (and thus all of the other basic new mount API syscalls).
+ // open_tree(2) is most light-weight syscall to test here.
+ //
+ // [1]: merge commit 400913252d09
+ // [2]:
+ fd, err := unix.OpenTree(-int(unix.EBADF), "/", unix.OPEN_TREE_CLOEXEC)
+ if err != nil {
+ return false
+ }
+ _ = unix.Close(fd)
+ return true
+})
+
+func fsopen(fsName string, flags int) (*os.File, error) {
+ // Make sure we always set O_CLOEXEC.
+ flags |= unix.FSOPEN_CLOEXEC
+ fd, err := unix.Fsopen(fsName, flags)
+ if err != nil {
+ return nil, os.NewSyscallError("fsopen "+fsName, err)
+ }
+ return os.NewFile(uintptr(fd), "fscontext:"+fsName), nil
+}
+
+func fsmount(ctx *os.File, flags, mountAttrs int) (*os.File, error) {
+ // Make sure we always set O_CLOEXEC.
+ flags |= unix.FSMOUNT_CLOEXEC
+ fd, err := unix.Fsmount(int(ctx.Fd()), flags, mountAttrs)
+ if err != nil {
+ return nil, os.NewSyscallError("fsmount "+ctx.Name(), err)
+ }
+ return os.NewFile(uintptr(fd), "fsmount:"+ctx.Name()), nil
+}
+
+func newPrivateProcMount() (*os.File, error) {
+ procfsCtx, err := fsopen("proc", unix.FSOPEN_CLOEXEC)
+ if err != nil {
+ return nil, err
+ }
+ defer procfsCtx.Close()
+
+ // Try to configure hidepid=ptraceable,subset=pid if possible, but ignore errors.
+ _ = unix.FsconfigSetString(int(procfsCtx.Fd()), "hidepid", "ptraceable")
+ _ = unix.FsconfigSetString(int(procfsCtx.Fd()), "subset", "pid")
+
+ // Get an actual handle.
+ if err := unix.FsconfigCreate(int(procfsCtx.Fd())); err != nil {
+ return nil, os.NewSyscallError("fsconfig create procfs", err)
+ }
+ return fsmount(procfsCtx, unix.FSMOUNT_CLOEXEC, unix.MS_RDONLY|unix.MS_NODEV|unix.MS_NOEXEC|unix.MS_NOSUID)
+}
+
+func openTree(dir *os.File, path string, flags uint) (*os.File, error) {
+ dirFd := -int(unix.EBADF)
+ dirName := "."
+ if dir != nil {
+ dirFd = int(dir.Fd())
+ dirName = dir.Name()
+ }
+ // Make sure we always set O_CLOEXEC.
+ flags |= unix.OPEN_TREE_CLOEXEC
+ fd, err := unix.OpenTree(dirFd, path, flags)
+ if err != nil {
+ return nil, &os.PathError{Op: "open_tree", Path: path, Err: err}
+ }
+ return os.NewFile(uintptr(fd), dirName+"/"+path), nil
+}
+
+func clonePrivateProcMount() (_ *os.File, Err error) {
+ // Try to make a clone without using AT_RECURSIVE if we can. If this works,
+ // we can be sure there are no over-mounts and so if the root is valid then
+ // we're golden. Otherwise, we have to deal with over-mounts.
+ procfsHandle, err := openTree(nil, "/proc", unix.OPEN_TREE_CLONE)
+ if err != nil || hookForcePrivateProcRootOpenTreeAtRecursive(procfsHandle) {
+ procfsHandle, err = openTree(nil, "/proc", unix.OPEN_TREE_CLONE|unix.AT_RECURSIVE)
+ }
+ if err != nil {
+ return nil, fmt.Errorf("creating a detached procfs clone: %w", err)
+ }
+ defer func() {
+ if Err != nil {
+ _ = procfsHandle.Close()
+ }
+ }()
+ if err := verifyProcRoot(procfsHandle); err != nil {
+ return nil, err
+ }
+ return procfsHandle, nil
+}
+
+func privateProcRoot() (*os.File, error) {
+ if !hasNewMountApi() || hookForceGetProcRootUnsafe() {
+ return nil, fmt.Errorf("new mount api: %w", unix.ENOTSUP)
+ }
+ // Try to create a new procfs mount from scratch if we can. This ensures we
+ // can get a procfs mount even if /proc is fake (for whatever reason).
+ procRoot, err := newPrivateProcMount()
+ if err != nil || hookForcePrivateProcRootOpenTree(procRoot) {
+ // Try to clone /proc then...
+ procRoot, err = clonePrivateProcMount()
+ }
+ return procRoot, err
+}
+
+func unsafeHostProcRoot() (_ *os.File, Err error) {
+ procRoot, err := os.OpenFile("/proc", unix.O_PATH|unix.O_NOFOLLOW|unix.O_DIRECTORY|unix.O_CLOEXEC, 0)
+ if err != nil {
+ return nil, err
+ }
+ defer func() {
+ if Err != nil {
+ _ = procRoot.Close()
+ }
+ }()
+ if err := verifyProcRoot(procRoot); err != nil {
+ return nil, err
+ }
+ return procRoot, nil
+}
+
+func doGetProcRoot() (*os.File, error) {
+ procRoot, err := privateProcRoot()
+ if err != nil {
+ // Fall back to using a /proc handle if making a private mount failed.
+ // If we have openat2, at least we can avoid some kinds of over-mount
+ // attacks, but without openat2 there's not much we can do.
+ procRoot, err = unsafeHostProcRoot()
+ }
+ return procRoot, err
+}
+
+var getProcRoot = sync_OnceValues(func() (*os.File, error) {
+ return doGetProcRoot()
+})
+
+var hasProcThreadSelf = sync_OnceValue(func() bool {
+ return unix.Access("/proc/thread-self/", unix.F_OK) == nil
+})
+
+var errUnsafeProcfs = errors.New("unsafe procfs detected")
+
+type procThreadSelfCloser func()
+
+// procThreadSelf returns a handle to /proc/thread-self/ (or an
+// equivalent handle on older kernels where /proc/thread-self doesn't exist).
+// Once finished with the handle, you must call the returned closer function
+// (runtime.UnlockOSThread). You must not pass the returned *os.File to other
+// Go threads or use the handle after calling the closer.
+//
+// This is similar to ProcThreadSelf from runc, but with extra hardening
+// applied and using *os.File.
+func procThreadSelf(procRoot *os.File, subpath string) (_ *os.File, _ procThreadSelfCloser, Err error) {
+ // We need to lock our thread until the caller is done with the handle
+ // because between getting the handle and using it we could get interrupted
+ // by the Go runtime and hit the case where the underlying thread is
+ // swapped out and the original thread is killed, resulting in
+ // pull-your-hair-out-hard-to-debug issues in the caller.
+ runtime.LockOSThread()
+ defer func() {
+ if Err != nil {
+ runtime.UnlockOSThread()
+ }
+ }()
+
+ // Figure out what prefix we want to use.
+ threadSelf := "thread-self/"
+ if !hasProcThreadSelf() || hookForceProcSelfTask() {
+ /// Pre-3.17 kernels don't have /proc/thread-self, so do it manually.
+ threadSelf = "self/task/" + strconv.Itoa(unix.Gettid()) + "/"
+ if _, err := fstatatFile(procRoot, threadSelf, unix.AT_SYMLINK_NOFOLLOW); err != nil || hookForceProcSelf() {
+ // In this case, we running in a pid namespace that doesn't match
+ // the /proc mount we have. This can happen inside runc.
+ //
+ // Unfortunately, there is no nice way to get the correct TID to
+ // use here because of the age of the kernel, so we have to just
+ // use /proc/self and hope that it works.
+ threadSelf = "self/"
+ }
+ }
+
+ // Grab the handle.
+ var (
+ handle *os.File
+ err error
+ )
+ if hasOpenat2() {
+ // We prefer being able to use RESOLVE_NO_XDEV if we can, to be
+ // absolutely sure we are operating on a clean /proc handle that
+ // doesn't have any cheeky overmounts that could trick us (including
+ // symlink mounts on top of /proc/thread-self). RESOLVE_BENEATH isn't
+ // strictly needed, but just use it since we have it.
+ //
+ // NOTE: /proc/self is technically a magic-link (the contents of the
+ // symlink are generated dynamically), but it doesn't use
+ // nd_jump_link() so RESOLVE_NO_MAGICLINKS allows it.
+ //
+ // NOTE: We MUST NOT use RESOLVE_IN_ROOT here, as openat2File uses
+ // procSelfFdReadlink to clean up the returned f.Name() if we use
+ // RESOLVE_IN_ROOT (which would lead to an infinite recursion).
+ handle, err = openat2File(procRoot, threadSelf+subpath, &unix.OpenHow{
+ Flags: unix.O_PATH | unix.O_NOFOLLOW | unix.O_CLOEXEC,
+ Resolve: unix.RESOLVE_BENEATH | unix.RESOLVE_NO_XDEV | unix.RESOLVE_NO_MAGICLINKS,
+ })
+ if err != nil {
+ // TODO: Once we bump the minimum Go version to 1.20, we can use
+ // multiple %w verbs for this wrapping. For now we need to use a
+ // compatibility shim for older Go versions.
+ //err = fmt.Errorf("%w: %w", errUnsafeProcfs, err)
+ return nil, nil, wrapBaseError(err, errUnsafeProcfs)
+ }
+ } else {
+ handle, err = openatFile(procRoot, threadSelf+subpath, unix.O_PATH|unix.O_NOFOLLOW|unix.O_CLOEXEC, 0)
+ if err != nil {
+ // TODO: Once we bump the minimum Go version to 1.20, we can use
+ // multiple %w verbs for this wrapping. For now we need to use a
+ // compatibility shim for older Go versions.
+ //err = fmt.Errorf("%w: %w", errUnsafeProcfs, err)
+ return nil, nil, wrapBaseError(err, errUnsafeProcfs)
+ }
+ defer func() {
+ if Err != nil {
+ _ = handle.Close()
+ }
+ }()
+ // We can't detect bind-mounts of different parts of procfs on top of
+ // /proc (a-la RESOLVE_NO_XDEV), but we can at least be sure that we
+ // aren't on the wrong filesystem here.
+ if statfs, err := fstatfs(handle); err != nil {
+ return nil, nil, err
+ } else if statfs.Type != procSuperMagic {
+ return nil, nil, fmt.Errorf("%w: incorrect /proc/self/fd filesystem type 0x%x", errUnsafeProcfs, statfs.Type)
+ }
+ }
+ return handle, runtime.UnlockOSThread, nil
+}
+
+// STATX_MNT_ID_UNIQUE is provided in golang.org/x/sys@v0.20.0, but in order to
+// avoid bumping the requirement for a single constant we can just define it
+// ourselves.
+const STATX_MNT_ID_UNIQUE = 0x4000
+
+var hasStatxMountId = sync_OnceValue(func() bool {
+ var (
+ stx unix.Statx_t
+ // We don't care which mount ID we get. The kernel will give us the
+ // unique one if it is supported.
+ wantStxMask uint32 = STATX_MNT_ID_UNIQUE | unix.STATX_MNT_ID
+ )
+ err := unix.Statx(-int(unix.EBADF), "/", 0, int(wantStxMask), &stx)
+ return err == nil && stx.Mask&wantStxMask != 0
+})
+
+func getMountId(dir *os.File, path string) (uint64, error) {
+ // If we don't have statx(STATX_MNT_ID*) support, we can't do anything.
+ if !hasStatxMountId() {
+ return 0, nil
+ }
+
+ var (
+ stx unix.Statx_t
+ // We don't care which mount ID we get. The kernel will give us the
+ // unique one if it is supported.
+ wantStxMask uint32 = STATX_MNT_ID_UNIQUE | unix.STATX_MNT_ID
+ )
+
+ err := unix.Statx(int(dir.Fd()), path, unix.AT_EMPTY_PATH|unix.AT_SYMLINK_NOFOLLOW, int(wantStxMask), &stx)
+ if stx.Mask&wantStxMask == 0 {
+ // It's not a kernel limitation, for some reason we couldn't get a
+ // mount ID. Assume it's some kind of attack.
+ err = fmt.Errorf("%w: could not get mount id", errUnsafeProcfs)
+ }
+ if err != nil {
+ return 0, &os.PathError{Op: "statx(STATX_MNT_ID_...)", Path: dir.Name() + "/" + path, Err: err}
+ }
+ return stx.Mnt_id, nil
+}
+
+func checkSymlinkOvermount(procRoot *os.File, dir *os.File, path string) error {
+ // Get the mntId of our procfs handle.
+ expectedMountId, err := getMountId(procRoot, "")
+ if err != nil {
+ return err
+ }
+ // Get the mntId of the target magic-link.
+ gotMountId, err := getMountId(dir, path)
+ if err != nil {
+ return err
+ }
+ // As long as the directory mount is alive, even with wrapping mount IDs,
+ // we would expect to see a different mount ID here. (Of course, if we're
+ // using unsafeHostProcRoot() then an attaker could change this after we
+ // did this check.)
+ if expectedMountId != gotMountId {
+ return fmt.Errorf("%w: symlink %s/%s has an overmount obscuring the real link (mount ids do not match %d != %d)", errUnsafeProcfs, dir.Name(), path, expectedMountId, gotMountId)
+ }
+ return nil
+}
+
+func doRawProcSelfFdReadlink(procRoot *os.File, fd int) (string, error) {
+ fdPath := fmt.Sprintf("fd/%d", fd)
+ procFdLink, closer, err := procThreadSelf(procRoot, fdPath)
+ if err != nil {
+ return "", fmt.Errorf("get safe /proc/thread-self/%s handle: %w", fdPath, err)
+ }
+ defer procFdLink.Close()
+ defer closer()
+
+ // Try to detect if there is a mount on top of the magic-link. Since we use the handle directly
+ // provide to the closure. If the closure uses the handle directly, this
+ // should be safe in general (a mount on top of the path afterwards would
+ // not affect the handle itself) and will definitely be safe if we are
+ // using privateProcRoot() (at least since Linux 5.12[1], when anonymous
+ // mount namespaces were completely isolated from external mounts including
+ // mount propagation events).
+ //
+ // [1]: Linux commit ee2e3f50629f ("mount: fix mounting of detached mounts
+ // onto targets that reside on shared mounts").
+ if err := checkSymlinkOvermount(procRoot, procFdLink, ""); err != nil {
+ return "", fmt.Errorf("check safety of /proc/thread-self/fd/%d magiclink: %w", fd, err)
+ }
+
+ // readlinkat implies AT_EMPTY_PATH since Linux 2.6.39. See Linux commit
+ // 65cfc6722361 ("readlinkat(), fchownat() and fstatat() with empty
+ // relative pathnames").
+ return readlinkatFile(procFdLink, "")
+}
+
+func rawProcSelfFdReadlink(fd int) (string, error) {
+ procRoot, err := getProcRoot()
+ if err != nil {
+ return "", err
+ }
+ return doRawProcSelfFdReadlink(procRoot, fd)
+}
+
+func procSelfFdReadlink(f *os.File) (string, error) {
+ return rawProcSelfFdReadlink(int(f.Fd()))
+}
+
+var (
+ errPossibleBreakout = errors.New("possible breakout detected")
+ errInvalidDirectory = errors.New("wandered into deleted directory")
+ errDeletedInode = errors.New("cannot verify path of deleted inode")
+)
+
+func isDeadInode(file *os.File) error {
+ // If the nlink of a file drops to 0, there is an attacker deleting
+ // directories during our walk, which could result in weird /proc values.
+ // It's better to error out in this case.
+ stat, err := fstat(file)
+ if err != nil {
+ return fmt.Errorf("check for dead inode: %w", err)
+ }
+ if stat.Nlink == 0 {
+ err := errDeletedInode
+ if stat.Mode&unix.S_IFMT == unix.S_IFDIR {
+ err = errInvalidDirectory
+ }
+ return fmt.Errorf("%w %q", err, file.Name())
+ }
+ return nil
+}
+
+func checkProcSelfFdPath(path string, file *os.File) error {
+ if err := isDeadInode(file); err != nil {
+ return err
+ }
+ actualPath, err := procSelfFdReadlink(file)
+ if err != nil {
+ return fmt.Errorf("get path of handle: %w", err)
+ }
+ if actualPath != path {
+ return fmt.Errorf("%w: handle path %q doesn't match expected path %q", errPossibleBreakout, actualPath, path)
+ }
+ return nil
+}
+
+// Test hooks used in the procfs tests to verify that the fallback logic works.
+// See testing_mocks_linux_test.go and procfs_linux_test.go for more details.
+var (
+ hookForcePrivateProcRootOpenTree = hookDummyFile
+ hookForcePrivateProcRootOpenTreeAtRecursive = hookDummyFile
+ hookForceGetProcRootUnsafe = hookDummy
+
+ hookForceProcSelfTask = hookDummy
+ hookForceProcSelf = hookDummy
+)
+
+func hookDummy() bool { return false }
+func hookDummyFile(_ *os.File) bool { return false }
diff --git a/vendor/github.com/cyphar/filepath-securejoin/vfs.go b/vendor/github.com/cyphar/filepath-securejoin/vfs.go
index a82a5eae11e..36373f8c517 100644
--- a/vendor/github.com/cyphar/filepath-securejoin/vfs.go
+++ b/vendor/github.com/cyphar/filepath-securejoin/vfs.go
@@ -1,4 +1,4 @@
-// Copyright (C) 2017 SUSE LLC. All rights reserved.
+// Copyright (C) 2017-2024 SUSE LLC. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
@@ -10,19 +10,19 @@ import "os"
// are several projects (umoci and go-mtree) that are using this sort of
// interface.
-// VFS is the minimal interface necessary to use SecureJoinVFS. A nil VFS is
-// equivalent to using the standard os.* family of functions. This is mainly
+// VFS is the minimal interface necessary to use [SecureJoinVFS]. A nil VFS is
+// equivalent to using the standard [os].* family of functions. This is mainly
// used for the purposes of mock testing, but also can be used to otherwise use
-// SecureJoin with VFS-like system.
+// [SecureJoinVFS] with VFS-like system.
type VFS interface {
- // Lstat returns a FileInfo describing the named file. If the file is a
- // symbolic link, the returned FileInfo describes the symbolic link. Lstat
- // makes no attempt to follow the link. These semantics are identical to
- // os.Lstat.
+ // Lstat returns an [os.FileInfo] describing the named file. If the
+ // file is a symbolic link, the returned [os.FileInfo] describes the
+ // symbolic link. Lstat makes no attempt to follow the link.
+ // The semantics are identical to [os.Lstat].
Lstat(name string) (os.FileInfo, error)
- // Readlink returns the destination of the named symbolic link. These
- // semantics are identical to os.Readlink.
+ // Readlink returns the destination of the named symbolic link.
+ // The semantics are identical to [os.Readlink].
Readlink(name string) (string, error)
}
@@ -30,12 +30,6 @@ type VFS interface {
// module.
type osVFS struct{}
-// Lstat returns a FileInfo describing the named file. If the file is a
-// symbolic link, the returned FileInfo describes the symbolic link. Lstat
-// makes no attempt to follow the link. These semantics are identical to
-// os.Lstat.
func (o osVFS) Lstat(name string) (os.FileInfo, error) { return os.Lstat(name) }
-// Readlink returns the destination of the named symbolic link. These
-// semantics are identical to os.Readlink.
func (o osVFS) Readlink(name string) (string, error) { return os.Readlink(name) }
diff --git a/vendor/github.com/distribution/reference/README.md b/vendor/github.com/distribution/reference/README.md
index e2531e49c4f..172a02e0b3b 100644
--- a/vendor/github.com/distribution/reference/README.md
+++ b/vendor/github.com/distribution/reference/README.md
@@ -10,7 +10,7 @@ Go library to handle references to container images.
[](https://codecov.io/gh/distribution/reference)
[](https://app.fossa.com/projects/custom%2B162%2Fgithub.com%2Fdistribution%2Freference?ref=badge_shield)
-This repository contains a library for handling refrences to container images held in container registries. Please see [godoc](https://pkg.go.dev/github.com/distribution/reference) for details.
+This repository contains a library for handling references to container images held in container registries. Please see [godoc](https://pkg.go.dev/github.com/distribution/reference) for details.
## Contribution
diff --git a/vendor/github.com/distribution/reference/normalize.go b/vendor/github.com/distribution/reference/normalize.go
index a30229d01bb..f4128314c15 100644
--- a/vendor/github.com/distribution/reference/normalize.go
+++ b/vendor/github.com/distribution/reference/normalize.go
@@ -123,20 +123,51 @@ func ParseDockerRef(ref string) (Named, error) {
// splitDockerDomain splits a repository name to domain and remote-name.
// If no valid domain is found, the default domain is used. Repository name
// needs to be already validated before.
-func splitDockerDomain(name string) (domain, remainder string) {
- i := strings.IndexRune(name, '/')
- if i == -1 || (!strings.ContainsAny(name[:i], ".:") && name[:i] != localhost && strings.ToLower(name[:i]) == name[:i]) {
- domain, remainder = defaultDomain, name
- } else {
- domain, remainder = name[:i], name[i+1:]
- }
- if domain == legacyDefaultDomain {
- domain = defaultDomain
- }
- if domain == defaultDomain && !strings.ContainsRune(remainder, '/') {
- remainder = officialRepoPrefix + remainder
- }
- return
+func splitDockerDomain(name string) (domain, remoteName string) {
+ maybeDomain, maybeRemoteName, ok := strings.Cut(name, "/")
+ if !ok {
+ // Fast-path for single element ("familiar" names), such as "ubuntu"
+ // or "ubuntu:latest". Familiar names must be handled separately, to
+ // prevent them from being handled as "hostname:port".
+ //
+ // Canonicalize them as "docker.io/library/name[:tag]"
+
+ // FIXME(thaJeztah): account for bare "localhost" or "example.com" names, which SHOULD be considered a domain.
+ return defaultDomain, officialRepoPrefix + name
+ }
+
+ switch {
+ case maybeDomain == localhost:
+ // localhost is a reserved namespace and always considered a domain.
+ domain, remoteName = maybeDomain, maybeRemoteName
+ case maybeDomain == legacyDefaultDomain:
+ // canonicalize the Docker Hub and legacy "Docker Index" domains.
+ domain, remoteName = defaultDomain, maybeRemoteName
+ case strings.ContainsAny(maybeDomain, ".:"):
+ // Likely a domain or IP-address:
+ //
+ // - contains a "." (e.g., "example.com" or "127.0.0.1")
+ // - contains a ":" (e.g., "example:5000", "::1", or "[::1]:5000")
+ domain, remoteName = maybeDomain, maybeRemoteName
+ case strings.ToLower(maybeDomain) != maybeDomain:
+ // Uppercase namespaces are not allowed, so if the first element
+ // is not lowercase, we assume it to be a domain-name.
+ domain, remoteName = maybeDomain, maybeRemoteName
+ default:
+ // None of the above: it's not a domain, so use the default, and
+ // use the name input the remote-name.
+ domain, remoteName = defaultDomain, name
+ }
+
+ if domain == defaultDomain && !strings.ContainsRune(remoteName, '/') {
+ // Canonicalize "familiar" names, but only on Docker Hub, not
+ // on other domains:
+ //
+ // "docker.io/ubuntu[:tag]" => "docker.io/library/ubuntu[:tag]"
+ remoteName = officialRepoPrefix + remoteName
+ }
+
+ return domain, remoteName
}
// familiarizeName returns a shortened version of the name familiar
diff --git a/vendor/github.com/distribution/reference/reference.go b/vendor/github.com/distribution/reference/reference.go
index e98c44daa2a..900398bde7d 100644
--- a/vendor/github.com/distribution/reference/reference.go
+++ b/vendor/github.com/distribution/reference/reference.go
@@ -35,8 +35,13 @@ import (
)
const (
+ // RepositoryNameTotalLengthMax is the maximum total number of characters in a repository name.
+ RepositoryNameTotalLengthMax = 255
+
// NameTotalLengthMax is the maximum total number of characters in a repository name.
- NameTotalLengthMax = 255
+ //
+ // Deprecated: use [RepositoryNameTotalLengthMax] instead.
+ NameTotalLengthMax = RepositoryNameTotalLengthMax
)
var (
@@ -55,8 +60,8 @@ var (
// ErrNameEmpty is returned for empty, invalid repository names.
ErrNameEmpty = errors.New("repository name must have at least one component")
- // ErrNameTooLong is returned when a repository name is longer than NameTotalLengthMax.
- ErrNameTooLong = fmt.Errorf("repository name must not be more than %v characters", NameTotalLengthMax)
+ // ErrNameTooLong is returned when a repository name is longer than RepositoryNameTotalLengthMax.
+ ErrNameTooLong = fmt.Errorf("repository name must not be more than %v characters", RepositoryNameTotalLengthMax)
// ErrNameNotCanonical is returned when a name is not canonical.
ErrNameNotCanonical = errors.New("repository name must be canonical")
@@ -165,6 +170,9 @@ func Path(named Named) (name string) {
return path
}
+// splitDomain splits a named reference into a hostname and path string.
+// If no valid hostname is found, the hostname is empty and the full value
+// is returned as name
func splitDomain(name string) (string, string) {
match := anchoredNameRegexp.FindStringSubmatch(name)
if len(match) != 3 {
@@ -173,19 +181,6 @@ func splitDomain(name string) (string, string) {
return match[1], match[2]
}
-// SplitHostname splits a named reference into a
-// hostname and name string. If no valid hostname is
-// found, the hostname is empty and the full value
-// is returned as name
-//
-// Deprecated: Use [Domain] or [Path].
-func SplitHostname(named Named) (string, string) {
- if r, ok := named.(namedRepository); ok {
- return r.Domain(), r.Path()
- }
- return splitDomain(named.Name())
-}
-
// Parse parses s and returns a syntactically valid Reference.
// If an error was encountered it is returned, along with a nil Reference.
func Parse(s string) (Reference, error) {
@@ -200,10 +195,6 @@ func Parse(s string) (Reference, error) {
return nil, ErrReferenceInvalidFormat
}
- if len(matches[1]) > NameTotalLengthMax {
- return nil, ErrNameTooLong
- }
-
var repo repository
nameMatch := anchoredNameRegexp.FindStringSubmatch(matches[1])
@@ -215,6 +206,10 @@ func Parse(s string) (Reference, error) {
repo.path = matches[1]
}
+ if len(repo.path) > RepositoryNameTotalLengthMax {
+ return nil, ErrNameTooLong
+ }
+
ref := reference{
namedRepository: repo,
tag: matches[2],
@@ -253,14 +248,15 @@ func ParseNamed(s string) (Named, error) {
// WithName returns a named object representing the given string. If the input
// is invalid ErrReferenceInvalidFormat will be returned.
func WithName(name string) (Named, error) {
- if len(name) > NameTotalLengthMax {
- return nil, ErrNameTooLong
- }
-
match := anchoredNameRegexp.FindStringSubmatch(name)
if match == nil || len(match) != 3 {
return nil, ErrReferenceInvalidFormat
}
+
+ if len(match[2]) > RepositoryNameTotalLengthMax {
+ return nil, ErrNameTooLong
+ }
+
return repository{
domain: match[1],
path: match[2],
diff --git a/vendor/github.com/docker/docker/pkg/ioutils/readers.go b/vendor/github.com/docker/docker/pkg/ioutils/readers.go
index de00b95e3f6..e03d3fee757 100644
--- a/vendor/github.com/docker/docker/pkg/ioutils/readers.go
+++ b/vendor/github.com/docker/docker/pkg/ioutils/readers.go
@@ -3,11 +3,15 @@ package ioutils // import "github.com/docker/docker/pkg/ioutils"
import (
"context"
"io"
+ "runtime/debug"
+ "sync/atomic"
// make sure crypto.SHA256, crypto.sha512 and crypto.SHA384 are registered
// TODO remove once https://github.com/opencontainers/go-digest/pull/64 is merged.
_ "crypto/sha256"
_ "crypto/sha512"
+
+ "github.com/containerd/log"
)
// ReadCloserWrapper wraps an io.Reader, and implements an io.ReadCloser
@@ -16,10 +20,15 @@ import (
type ReadCloserWrapper struct {
io.Reader
closer func() error
+ closed atomic.Bool
}
// Close calls back the passed closer function
func (r *ReadCloserWrapper) Close() error {
+ if !r.closed.CompareAndSwap(false, true) {
+ subsequentCloseWarn("ReadCloserWrapper")
+ return nil
+ }
return r.closer()
}
@@ -87,6 +96,7 @@ type cancelReadCloser struct {
cancel func()
pR *io.PipeReader // Stream to read from
pW *io.PipeWriter
+ closed atomic.Bool
}
// NewCancelReadCloser creates a wrapper that closes the ReadCloser when the
@@ -146,6 +156,17 @@ func (p *cancelReadCloser) closeWithError(err error) {
// Close closes the wrapper its underlying reader. It will cause
// future calls to Read to return io.EOF.
func (p *cancelReadCloser) Close() error {
+ if !p.closed.CompareAndSwap(false, true) {
+ subsequentCloseWarn("cancelReadCloser")
+ return nil
+ }
p.closeWithError(io.EOF)
return nil
}
+
+func subsequentCloseWarn(name string) {
+ log.G(context.TODO()).Error("subsequent attempt to close " + name)
+ if log.GetLevel() >= log.DebugLevel {
+ log.G(context.TODO()).Errorf("stack trace: %s", string(debug.Stack()))
+ }
+}
diff --git a/vendor/github.com/docker/docker/pkg/ioutils/writers.go b/vendor/github.com/docker/docker/pkg/ioutils/writers.go
index 61c679497da..1f50602f28c 100644
--- a/vendor/github.com/docker/docker/pkg/ioutils/writers.go
+++ b/vendor/github.com/docker/docker/pkg/ioutils/writers.go
@@ -1,6 +1,9 @@
package ioutils // import "github.com/docker/docker/pkg/ioutils"
-import "io"
+import (
+ "io"
+ "sync/atomic"
+)
// NopWriter represents a type which write operation is nop.
type NopWriter struct{}
@@ -29,9 +32,14 @@ func (f *NopFlusher) Flush() {}
type writeCloserWrapper struct {
io.Writer
closer func() error
+ closed atomic.Bool
}
func (r *writeCloserWrapper) Close() error {
+ if !r.closed.CompareAndSwap(false, true) {
+ subsequentCloseWarn("WriteCloserWrapper")
+ return nil
+ }
return r.closer()
}
diff --git a/vendor/github.com/exponent-io/jsonpath/.travis.yml b/vendor/github.com/exponent-io/jsonpath/.travis.yml
index f4f458a416d..53bb8b3f952 100644
--- a/vendor/github.com/exponent-io/jsonpath/.travis.yml
+++ b/vendor/github.com/exponent-io/jsonpath/.travis.yml
@@ -1,5 +1,7 @@
language: go
-
+arch:
+ - amd64
+ - ppc64le
go:
- - 1.5
+ - 1.15
- tip
diff --git a/vendor/github.com/exponent-io/jsonpath/decoder.go b/vendor/github.com/exponent-io/jsonpath/decoder.go
index 31de46c7381..5e3a06548af 100644
--- a/vendor/github.com/exponent-io/jsonpath/decoder.go
+++ b/vendor/github.com/exponent-io/jsonpath/decoder.go
@@ -39,16 +39,15 @@ func NewDecoder(r io.Reader) *Decoder {
// Decoder is intended to be used with a stream of tokens. As a result it navigates forward only.
func (d *Decoder) SeekTo(path ...interface{}) (bool, error) {
- if len(path) == 0 {
- return len(d.path) == 0, nil
- }
- last := len(path) - 1
- if i, ok := path[last].(int); ok {
- path[last] = i - 1
+ if len(path) > 0 {
+ last := len(path) - 1
+ if i, ok := path[last].(int); ok {
+ path[last] = i - 1
+ }
}
for {
- if d.path.Equal(path) {
+ if len(path) == len(d.path) && d.path.Equal(path) {
return true, nil
}
_, err := d.Token()
diff --git a/vendor/github.com/huandu/xstrings/README.md b/vendor/github.com/huandu/xstrings/README.md
index 750c3c7eb69..e809c79abc5 100644
--- a/vendor/github.com/huandu/xstrings/README.md
+++ b/vendor/github.com/huandu/xstrings/README.md
@@ -39,8 +39,8 @@ _Keep this table sorted by Function in ascending order._
| [Count](https://godoc.org/github.com/huandu/xstrings#Count) | `String#count` in Ruby | [#16](https://github.com/huandu/xstrings/issues/16) |
| [Delete](https://godoc.org/github.com/huandu/xstrings#Delete) | `String#delete` in Ruby | [#17](https://github.com/huandu/xstrings/issues/17) |
| [ExpandTabs](https://godoc.org/github.com/huandu/xstrings#ExpandTabs) | `str.expandtabs` in Python | [#27](https://github.com/huandu/xstrings/issues/27) |
-| [FirstRuneToLower](https://godoc.org/github.com/huandu/xstrings#FirstRuneToLower) | `lcfirst` in PHP or Perl | [#15](https://github.com/huandu/xstrings/issues/15) |
-| [FirstRuneToUpper](https://godoc.org/github.com/huandu/xstrings#FirstRuneToUpper) | `String#capitalize` in Ruby; `ucfirst` in PHP or Perl | [#15](https://github.com/huandu/xstrings/issues/15) |
+| [FirstRuneToLower](https://godoc.org/github.com/huandu/xstrings#FirstRuneToLower) | `lcfirst` in PHP or Perl | [#15](https://github.com/huandu/xstrings/issues/15) |
+| [FirstRuneToUpper](https://godoc.org/github.com/huandu/xstrings#FirstRuneToUpper) | `String#capitalize` in Ruby; `ucfirst` in PHP or Perl | [#15](https://github.com/huandu/xstrings/issues/15) |
| [Insert](https://godoc.org/github.com/huandu/xstrings#Insert) | `String#insert` in Ruby | [#18](https://github.com/huandu/xstrings/issues/18) |
| [LastPartition](https://godoc.org/github.com/huandu/xstrings#LastPartition) | `str.rpartition` in Python; `String#rpartition` in Ruby | [#19](https://github.com/huandu/xstrings/issues/19) |
| [LeftJustify](https://godoc.org/github.com/huandu/xstrings#LeftJustify) | `str.ljust` in Python; `String#ljust` in Ruby | [#28](https://github.com/huandu/xstrings/issues/28) |
@@ -50,14 +50,15 @@ _Keep this table sorted by Function in ascending order._
| [RightJustify](https://godoc.org/github.com/huandu/xstrings#RightJustify) | `str.rjust` in Python; `String#rjust` in Ruby | [#29](https://github.com/huandu/xstrings/issues/29) |
| [RuneWidth](https://godoc.org/github.com/huandu/xstrings#RuneWidth) | - | [#27](https://github.com/huandu/xstrings/issues/27) |
| [Scrub](https://godoc.org/github.com/huandu/xstrings#Scrub) | `String#scrub` in Ruby | [#20](https://github.com/huandu/xstrings/issues/20) |
-| [Shuffle](https://godoc.org/github.com/huandu/xstrings#Shuffle) | `str_shuffle` in PHP | [#13](https://github.com/huandu/xstrings/issues/13) |
-| [ShuffleSource](https://godoc.org/github.com/huandu/xstrings#ShuffleSource) | `str_shuffle` in PHP | [#13](https://github.com/huandu/xstrings/issues/13) |
+| [Shuffle](https://godoc.org/github.com/huandu/xstrings#Shuffle) | `str_shuffle` in PHP | [#13](https://github.com/huandu/xstrings/issues/13) |
+| [ShuffleSource](https://godoc.org/github.com/huandu/xstrings#ShuffleSource) | `str_shuffle` in PHP | [#13](https://github.com/huandu/xstrings/issues/13) |
| [Slice](https://godoc.org/github.com/huandu/xstrings#Slice) | `mb_substr` in PHP | [#9](https://github.com/huandu/xstrings/issues/9) |
| [Squeeze](https://godoc.org/github.com/huandu/xstrings#Squeeze) | `String#squeeze` in Ruby | [#11](https://github.com/huandu/xstrings/issues/11) |
| [Successor](https://godoc.org/github.com/huandu/xstrings#Successor) | `String#succ` or `String#next` in Ruby | [#22](https://github.com/huandu/xstrings/issues/22) |
| [SwapCase](https://godoc.org/github.com/huandu/xstrings#SwapCase) | `str.swapcase` in Python; `String#swapcase` in Ruby | [#12](https://github.com/huandu/xstrings/issues/12) |
| [ToCamelCase](https://godoc.org/github.com/huandu/xstrings#ToCamelCase) | `String#camelize` in RoR | [#1](https://github.com/huandu/xstrings/issues/1) |
| [ToKebab](https://godoc.org/github.com/huandu/xstrings#ToKebabCase) | - | [#41](https://github.com/huandu/xstrings/issues/41) |
+| [ToPascalCase](https://godoc.org/github.com/huandu/xstrings#ToPascalCase) | - | [#1](https://github.com/huandu/xstrings/issues/1) |
| [ToSnakeCase](https://godoc.org/github.com/huandu/xstrings#ToSnakeCase) | `String#underscore` in RoR | [#1](https://github.com/huandu/xstrings/issues/1) |
| [Translate](https://godoc.org/github.com/huandu/xstrings#Translate) | `str.translate` in Python; `String#tr` in Ruby; `strtr` in PHP; `tr///` in Perl | [#21](https://github.com/huandu/xstrings/issues/21) |
| [Width](https://godoc.org/github.com/huandu/xstrings#Width) | `mb_strwidth` in PHP | [#26](https://github.com/huandu/xstrings/issues/26) |
diff --git a/vendor/github.com/huandu/xstrings/convert.go b/vendor/github.com/huandu/xstrings/convert.go
index cba0d072520..5d8cfee470b 100644
--- a/vendor/github.com/huandu/xstrings/convert.go
+++ b/vendor/github.com/huandu/xstrings/convert.go
@@ -13,17 +13,37 @@ import (
//
// Some samples.
//
+// "some_words" => "someWords"
+// "http_server" => "httpServer"
+// "no_https" => "noHttps"
+// "_complex__case_" => "_complex_Case_"
+// "some words" => "someWords"
+// "GOLANG_IS_GREAT" => "golangIsGreat"
+func ToCamelCase(str string) string {
+ return toCamelCase(str, false)
+}
+
+// ToPascalCase is to convert words separated by space, underscore and hyphen to pascal case.
+//
+// Some samples.
+//
// "some_words" => "SomeWords"
// "http_server" => "HttpServer"
// "no_https" => "NoHttps"
// "_complex__case_" => "_Complex_Case_"
// "some words" => "SomeWords"
-func ToCamelCase(str string) string {
+// "GOLANG_IS_GREAT" => "GolangIsGreat"
+func ToPascalCase(str string) string {
+ return toCamelCase(str, true)
+}
+
+func toCamelCase(str string, isBig bool) string {
if len(str) == 0 {
return ""
}
buf := &stringBuilder{}
+ var isFirstRuneUpper bool
var r0, r1 rune
var size int
@@ -33,7 +53,14 @@ func ToCamelCase(str string) string {
str = str[size:]
if !isConnector(r0) {
- r0 = unicode.ToUpper(r0)
+ isFirstRuneUpper = unicode.IsUpper(r0)
+
+ if isBig {
+ r0 = unicode.ToUpper(r0)
+ } else {
+ r0 = unicode.ToLower(r0)
+ }
+
break
}
@@ -60,12 +87,25 @@ func ToCamelCase(str string) string {
}
if isConnector(r1) {
+ isFirstRuneUpper = unicode.IsUpper(r0)
r0 = unicode.ToUpper(r0)
} else {
+ if isFirstRuneUpper {
+ if unicode.IsUpper(r0) {
+ r0 = unicode.ToLower(r0)
+ } else {
+ isFirstRuneUpper = false
+ }
+ }
+
buf.WriteRune(r1)
}
}
+ if isFirstRuneUpper && !isBig {
+ r0 = unicode.ToLower(r0)
+ }
+
buf.WriteRune(r0)
return buf.String()
}
diff --git a/vendor/github.com/jmoiron/sqlx/.travis.yml b/vendor/github.com/jmoiron/sqlx/.travis.yml
deleted file mode 100644
index 1cfa28cb356..00000000000
--- a/vendor/github.com/jmoiron/sqlx/.travis.yml
+++ /dev/null
@@ -1,26 +0,0 @@
-# vim: ft=yaml sw=2 ts=2
-
-language: go
-
-# enable database services
-services:
- - mysql
- - postgresql
-
-# create test database
-before_install:
- - mysql -e 'CREATE DATABASE IF NOT EXISTS sqlxtest;'
- - psql -c 'create database sqlxtest;' -U postgres
- - go get github.com/mattn/goveralls
- - export SQLX_MYSQL_DSN="travis:@/sqlxtest?parseTime=true"
- - export SQLX_POSTGRES_DSN="postgres://postgres:@localhost/sqlxtest?sslmode=disable"
- - export SQLX_SQLITE_DSN="$HOME/sqlxtest.db"
-
-# go versions to test
-go:
- - "1.15.x"
- - "1.16.x"
-
-# run tests w/ coverage
-script:
- - travis_retry $GOPATH/bin/goveralls -service=travis-ci
diff --git a/vendor/github.com/jmoiron/sqlx/Makefile b/vendor/github.com/jmoiron/sqlx/Makefile
new file mode 100644
index 00000000000..448b9ddd9cf
--- /dev/null
+++ b/vendor/github.com/jmoiron/sqlx/Makefile
@@ -0,0 +1,30 @@
+.ONESHELL:
+SHELL = /bin/sh
+.SHELLFLAGS = -ec
+
+BASE_PACKAGE := github.com/jmoiron/sqlx
+
+tooling:
+ go install honnef.co/go/tools/cmd/staticcheck@v0.4.7
+ go install golang.org/x/vuln/cmd/govulncheck@v1.0.4
+ go install golang.org/x/tools/cmd/goimports@v0.20.0
+
+has-changes:
+ git diff --exit-code --quiet HEAD --
+
+lint:
+ go vet ./...
+ staticcheck -checks=all ./...
+
+fmt:
+ go list -f '{{.Dir}}' ./... | xargs -I {} goimports -local $(BASE_PACKAGE) -w {}
+
+vuln-check:
+ govulncheck ./...
+
+test-race:
+ go test -v -race -count=1 ./...
+
+update-dependencies:
+ go get -u -t -v ./...
+ go mod tidy
diff --git a/vendor/github.com/jmoiron/sqlx/README.md b/vendor/github.com/jmoiron/sqlx/README.md
index 0d7159290d9..5bfd231a11c 100644
--- a/vendor/github.com/jmoiron/sqlx/README.md
+++ b/vendor/github.com/jmoiron/sqlx/README.md
@@ -1,6 +1,6 @@
# sqlx
-[](https://travis-ci.org/jmoiron/sqlx) [](https://coveralls.io/github/jmoiron/sqlx?branch=master) [](https://godoc.org/github.com/jmoiron/sqlx) [](https://raw.githubusercontent.com/jmoiron/sqlx/master/LICENSE)
+[](https://dl.circleci.com/status-badge/redirect/gh/jmoiron/sqlx/tree/master) [](https://coveralls.io/github/jmoiron/sqlx?branch=master) [](https://godoc.org/github.com/jmoiron/sqlx) [](https://raw.githubusercontent.com/jmoiron/sqlx/master/LICENSE)
sqlx is a library which provides a set of extensions on go's standard
`database/sql` library. The sqlx versions of `sql.DB`, `sql.TX`, `sql.Stmt`,
diff --git a/vendor/github.com/jmoiron/sqlx/doc.go b/vendor/github.com/jmoiron/sqlx/doc.go
index e2b4e60b2e6..b80104175d1 100644
--- a/vendor/github.com/jmoiron/sqlx/doc.go
+++ b/vendor/github.com/jmoiron/sqlx/doc.go
@@ -8,5 +8,4 @@
// Additions include scanning into structs, named query support, rebinding
// queries for different drivers, convenient shorthands for common error handling
// and more.
-//
package sqlx
diff --git a/vendor/github.com/jmoiron/sqlx/named.go b/vendor/github.com/jmoiron/sqlx/named.go
index 728aa04d047..6ac44777131 100644
--- a/vendor/github.com/jmoiron/sqlx/named.go
+++ b/vendor/github.com/jmoiron/sqlx/named.go
@@ -174,7 +174,7 @@ func bindArgs(names []string, arg interface{}, m *reflectx.Mapper) ([]interface{
arglist := make([]interface{}, 0, len(names))
// grab the indirected value of arg
- v := reflect.ValueOf(arg)
+ var v reflect.Value
for v = reflect.ValueOf(arg); v.Kind() == reflect.Ptr; {
v = v.Elem()
}
diff --git a/vendor/github.com/jmoiron/sqlx/named_context.go b/vendor/github.com/jmoiron/sqlx/named_context.go
index 07ad2165d01..9ad23f4ed18 100644
--- a/vendor/github.com/jmoiron/sqlx/named_context.go
+++ b/vendor/github.com/jmoiron/sqlx/named_context.go
@@ -1,3 +1,4 @@
+//go:build go1.8
// +build go1.8
package sqlx
diff --git a/vendor/github.com/jmoiron/sqlx/reflectx/reflect.go b/vendor/github.com/jmoiron/sqlx/reflectx/reflect.go
index 0b1099428da..8ec6a138283 100644
--- a/vendor/github.com/jmoiron/sqlx/reflectx/reflect.go
+++ b/vendor/github.com/jmoiron/sqlx/reflectx/reflect.go
@@ -3,7 +3,6 @@
// allows for Go-compatible named attribute access, including accessing embedded
// struct attributes and the ability to use functions and struct tags to
// customize field names.
-//
package reflectx
import (
diff --git a/vendor/github.com/jmoiron/sqlx/sqlx.go b/vendor/github.com/jmoiron/sqlx/sqlx.go
index f7b2876834f..8259a4feb69 100644
--- a/vendor/github.com/jmoiron/sqlx/sqlx.go
+++ b/vendor/github.com/jmoiron/sqlx/sqlx.go
@@ -5,7 +5,6 @@ import (
"database/sql/driver"
"errors"
"fmt"
-
"io/ioutil"
"path/filepath"
"reflect"
@@ -51,9 +50,9 @@ func mapper() *reflectx.Mapper {
// isScannable takes the reflect.Type and the actual dest value and returns
// whether or not it's Scannable. Something is scannable if:
-// * it is not a struct
-// * it implements sql.Scanner
-// * it has no exported fields
+// - it is not a struct
+// - it implements sql.Scanner
+// - it has no exported fields
func isScannable(t reflect.Type) bool {
if reflect.PtrTo(t).Implements(_scannerInterface) {
return true
@@ -160,6 +159,8 @@ func mapperFor(i interface{}) *reflectx.Mapper {
}
var _scannerInterface = reflect.TypeOf((*sql.Scanner)(nil)).Elem()
+
+//lint:ignore U1000 ignoring this for now
var _valuerInterface = reflect.TypeOf((*driver.Valuer)(nil)).Elem()
// Row is a reimplementation of sql.Row in order to gain access to the underlying
@@ -248,6 +249,8 @@ type DB struct {
// NewDb returns a new sqlx DB wrapper for a pre-existing *sql.DB. The
// driverName of the original database is required for named query support.
+//
+//lint:ignore ST1003 changing this would break the package interface.
func NewDb(db *sql.DB, driverName string) *DB {
return &DB{DB: db, driverName: driverName, Mapper: mapper()}
}
@@ -884,9 +887,9 @@ func structOnlyError(t reflect.Type) error {
// then each row must only have one column which can scan into that type. This
// allows you to do something like:
//
-// rows, _ := db.Query("select id from people;")
-// var ids []int
-// scanAll(rows, &ids, false)
+// rows, _ := db.Query("select id from people;")
+// var ids []int
+// scanAll(rows, &ids, false)
//
// and ids will be a list of the id results. I realize that this is a desirable
// interface to expose to users, but for now it will only be exposed via changes
@@ -935,9 +938,9 @@ func scanAll(rows rowsi, dest interface{}, structOnly bool) error {
var values []interface{}
var m *reflectx.Mapper
- switch rows.(type) {
+ switch rows := rows.(type) {
case *Rows:
- m = rows.(*Rows).Mapper
+ m = rows.Mapper
default:
m = mapper()
}
diff --git a/vendor/github.com/jmoiron/sqlx/sqlx_context.go b/vendor/github.com/jmoiron/sqlx/sqlx_context.go
index 7aa4dd01e19..32621d56d72 100644
--- a/vendor/github.com/jmoiron/sqlx/sqlx_context.go
+++ b/vendor/github.com/jmoiron/sqlx/sqlx_context.go
@@ -1,3 +1,4 @@
+//go:build go1.8
// +build go1.8
package sqlx
diff --git a/vendor/github.com/rubenv/sql-migrate/.golangci.yaml b/vendor/github.com/rubenv/sql-migrate/.golangci.yaml
index 40d1720e7dc..f0a970753ea 100644
--- a/vendor/github.com/rubenv/sql-migrate/.golangci.yaml
+++ b/vendor/github.com/rubenv/sql-migrate/.golangci.yaml
@@ -9,9 +9,18 @@ linters-settings:
disable:
- fieldalignment
depguard:
- list-type: blacklist
- include-go-root: true
- include-go-std-lib: true
+ rules:
+ main:
+ allow:
+ - $gostd
+ - github.com/denisenkom/go-mssqldb
+ - github.com/go-sql-driver/mysql
+ - github.com/go-gorp/gorp/v3
+ - github.com/lib/pq
+ - github.com/mattn/go-sqlite3
+ - github.com/mitchellh/cli
+ - github.com/olekukonko/tablewriter
+ - github.com/rubenv/sql-migrate
exhaustive:
default-signifies-exhaustive: true
nolintlint:
diff --git a/vendor/github.com/rubenv/sql-migrate/README.md b/vendor/github.com/rubenv/sql-migrate/README.md
index dfb73cbf5f4..65fd7f70efe 100644
--- a/vendor/github.com/rubenv/sql-migrate/README.md
+++ b/vendor/github.com/rubenv/sql-migrate/README.md
@@ -219,6 +219,7 @@ migrations := &migrate.FileMigrationSource{
}
// OR: Use migrations from a packr box
+// Note: Packr is no longer supported, your best option these days is [embed](https://pkg.go.dev/embed)
migrations := &migrate.PackrMigrationSource{
Box: packr.New("migrations", "./migrations"),
}
@@ -316,62 +317,31 @@ CREATE UNIQUE INDEX CONCURRENTLY people_unique_id_idx ON people (id);
DROP INDEX people_unique_id_idx;
```
-## Embedding migrations with [packr](https://github.com/gobuffalo/packr)
+## Embedding migrations with [embed](https://pkg.go.dev/embed)
-If you like your Go applications self-contained (that is: a single binary): use [packr](https://github.com/gobuffalo/packr) to embed the migration files.
+If you like your Go applications self-contained (that is: a single binary): use [embed](https://pkg.go.dev/embed) to embed the migration files.
Just write your migration files as usual, as a set of SQL files in a folder.
-Import the packr package into your application:
+Import the embed package into your application and point it to your migrations:
```go
-import "github.com/gobuffalo/packr/v2"
-```
-
-Use the `PackrMigrationSource` in your application to find the migrations:
+import "embed"
-```go
-migrations := &migrate.PackrMigrationSource{
- Box: packr.New("migrations", "./migrations"),
-}
+//go:embed migrations/*
+var dbMigrations embed.FS
```
-If you already have a box and would like to use a subdirectory:
+Use the `EmbedFileSystemMigrationSource` in your application to find the migrations:
```go
-migrations := &migrate.PackrMigrationSource{
- Box: myBox,
- Dir: "./migrations",
+migrations := migrate.EmbedFileSystemMigrationSource{
+ FileSystem: dbMigrations,
+ Root: "migrations",
}
```
-## Embedding migrations with [bindata](https://github.com/shuLhan/go-bindata)
-
-As an alternative, but slightly less maintained, you can use [bindata](https://github.com/shuLhan/go-bindata) to embed the migration files.
-
-Just write your migration files as usual, as a set of SQL files in a folder.
-
-Then use bindata to generate a `.go` file with the migrations embedded:
-
-```bash
-go-bindata -pkg myapp -o bindata.go db/migrations/
-```
-
-The resulting `bindata.go` file will contain your migrations. Remember to regenerate your `bindata.go` file whenever you add/modify a migration (`go generate` will help here, once it arrives).
-
-Use the `AssetMigrationSource` in your application to find the migrations:
-
-```go
-migrations := &migrate.AssetMigrationSource{
- Asset: Asset,
- AssetDir: AssetDir,
- Dir: "db/migrations",
-}
-```
-
-Both `Asset` and `AssetDir` are functions provided by bindata.
-
-Then proceed as usual.
+Other options such as [packr](https://github.com/gobuffalo/packr) or [go-bindata](https://github.com/shuLhan/go-bindata) are no longer recommended.
## Embedding migrations with libraries that implement `http.FileSystem`
diff --git a/vendor/github.com/rubenv/sql-migrate/migrate.go b/vendor/github.com/rubenv/sql-migrate/migrate.go
index 0974eb61205..7fb56f1a955 100644
--- a/vendor/github.com/rubenv/sql-migrate/migrate.go
+++ b/vendor/github.com/rubenv/sql-migrate/migrate.go
@@ -4,6 +4,7 @@ import (
"bytes"
"context"
"database/sql"
+ "embed"
"errors"
"fmt"
"io"
@@ -343,6 +344,19 @@ func (a AssetMigrationSource) FindMigrations() ([]*Migration, error) {
return migrations, nil
}
+// A set of migrations loaded from an go1.16 embed.FS
+type EmbedFileSystemMigrationSource struct {
+ FileSystem embed.FS
+
+ Root string
+}
+
+var _ MigrationSource = (*EmbedFileSystemMigrationSource)(nil)
+
+func (f EmbedFileSystemMigrationSource) FindMigrations() ([]*Migration, error) {
+ return findMigrations(http.FS(f.FileSystem), f.Root)
+}
+
// Avoids pulling in the packr library for everyone, mimicks the bits of
// packr.Box that we need.
type PackrBox interface {
diff --git a/vendor/github.com/rubenv/sql-migrate/migrate_go116.go b/vendor/github.com/rubenv/sql-migrate/migrate_go116.go
deleted file mode 100644
index a1c94a3d0f5..00000000000
--- a/vendor/github.com/rubenv/sql-migrate/migrate_go116.go
+++ /dev/null
@@ -1,23 +0,0 @@
-//go:build go1.16
-// +build go1.16
-
-package migrate
-
-import (
- "embed"
- "net/http"
-)
-
-// A set of migrations loaded from an go1.16 embed.FS
-
-type EmbedFileSystemMigrationSource struct {
- FileSystem embed.FS
-
- Root string
-}
-
-var _ MigrationSource = (*EmbedFileSystemMigrationSource)(nil)
-
-func (f EmbedFileSystemMigrationSource) FindMigrations() ([]*Migration, error) {
- return findMigrations(http.FS(f.FileSystem), f.Root)
-}
diff --git a/vendor/github.com/shopspring/decimal/.travis.yml b/vendor/github.com/shopspring/decimal/.travis.yml
deleted file mode 100644
index 6326d40f0e9..00000000000
--- a/vendor/github.com/shopspring/decimal/.travis.yml
+++ /dev/null
@@ -1,19 +0,0 @@
-language: go
-
-arch:
- - amd64
- - ppc64le
-
-go:
- - 1.7.x
- - 1.14.x
- - 1.15.x
- - 1.16.x
- - 1.17.x
- - tip
-
-install:
- - go build .
-
-script:
- - go test -v
diff --git a/vendor/github.com/shopspring/decimal/CHANGELOG.md b/vendor/github.com/shopspring/decimal/CHANGELOG.md
index aea61154b8c..432d0fd4ea6 100644
--- a/vendor/github.com/shopspring/decimal/CHANGELOG.md
+++ b/vendor/github.com/shopspring/decimal/CHANGELOG.md
@@ -1,3 +1,30 @@
+## Decimal v1.4.0
+#### BREAKING
+- Drop support for Go version older than 1.10 [#361](https://github.com/shopspring/decimal/pull/361)
+
+#### FEATURES
+- Add implementation of natural logarithm [#339](https://github.com/shopspring/decimal/pull/339) [#357](https://github.com/shopspring/decimal/pull/357)
+- Add improved implementation of power operation [#358](https://github.com/shopspring/decimal/pull/358)
+- Add Compare method which forwards calls to Cmp [#346](https://github.com/shopspring/decimal/pull/346)
+- Add NewFromBigRat constructor [#288](https://github.com/shopspring/decimal/pull/288)
+- Add NewFromUint64 constructor [#352](https://github.com/shopspring/decimal/pull/352)
+
+#### ENHANCEMENTS
+- Migrate to Github Actions [#245](https://github.com/shopspring/decimal/pull/245) [#340](https://github.com/shopspring/decimal/pull/340)
+- Fix examples for RoundDown, RoundFloor, RoundUp, and RoundCeil [#285](https://github.com/shopspring/decimal/pull/285) [#328](https://github.com/shopspring/decimal/pull/328) [#341](https://github.com/shopspring/decimal/pull/341)
+- Use Godoc standard to mark deprecated Equals and StringScaled methods [#342](https://github.com/shopspring/decimal/pull/342)
+- Removed unnecessary min function for RescalePair method [#265](https://github.com/shopspring/decimal/pull/265)
+- Avoid reallocation of initial slice in MarshalBinary (GobEncode) [#355](https://github.com/shopspring/decimal/pull/355)
+- Optimize NumDigits method [#301](https://github.com/shopspring/decimal/pull/301) [#356](https://github.com/shopspring/decimal/pull/356)
+- Optimize BigInt method [#359](https://github.com/shopspring/decimal/pull/359)
+- Support scanning uint64 [#131](https://github.com/shopspring/decimal/pull/131) [#364](https://github.com/shopspring/decimal/pull/364)
+- Add docs section with alternative libraries [#363](https://github.com/shopspring/decimal/pull/363)
+
+#### BUGFIXES
+- Fix incorrect calculation of decimal modulo [#258](https://github.com/shopspring/decimal/pull/258) [#317](https://github.com/shopspring/decimal/pull/317)
+- Allocate new(big.Int) in Copy method to deeply clone it [#278](https://github.com/shopspring/decimal/pull/278)
+- Fix overflow edge case in QuoRem method [#322](https://github.com/shopspring/decimal/pull/322)
+
## Decimal v1.3.1
#### ENHANCEMENTS
diff --git a/vendor/github.com/shopspring/decimal/README.md b/vendor/github.com/shopspring/decimal/README.md
index 2e35df068ea..318c9df5813 100644
--- a/vendor/github.com/shopspring/decimal/README.md
+++ b/vendor/github.com/shopspring/decimal/README.md
@@ -1,6 +1,8 @@
# decimal
-[](https://app.travis-ci.com/shopspring/decimal) [](https://godoc.org/github.com/shopspring/decimal) [](https://goreportcard.com/report/github.com/shopspring/decimal)
+[](https://github.com/shopspring/decimal/actions/workflows/ci.yml)
+[](https://godoc.org/github.com/shopspring/decimal)
+[](https://goreportcard.com/report/github.com/shopspring/decimal)
Arbitrary-precision fixed-point decimal numbers in go.
@@ -20,7 +22,12 @@ Run `go get github.com/shopspring/decimal`
## Requirements
-Decimal library requires Go version `>=1.7`
+Decimal library requires Go version `>=1.10`
+
+## Documentation
+
+http://godoc.org/github.com/shopspring/decimal
+
## Usage
@@ -57,14 +64,16 @@ func main() {
}
```
-## Documentation
-
-http://godoc.org/github.com/shopspring/decimal
+## Alternative libraries
-## Production Usage
+When working with decimal numbers, you might face problems this library is not perfectly suited for.
+Fortunately, thanks to the wonderful community we have a dozen other libraries that you can choose from.
+Explore other alternatives to find the one that best fits your needs :)
-* [Spring](https://shopspring.com/), since August 14, 2014.
-* If you are using this in production, please let us know!
+* [cockroachdb/apd](https://github.com/cockroachdb/apd) - arbitrary precision, mutable and rich API similar to `big.Int`, more performant than this library
+* [alpacahq/alpacadecimal](https://github.com/alpacahq/alpacadecimal) - high performance, low precision (12 digits), fully compatible API with this library
+* [govalues/decimal](https://github.com/govalues/decimal) - high performance, zero-allocation, low precision (19 digits)
+* [greatcloak/decimal](https://github.com/greatcloak/decimal) - fork focusing on billing and e-commerce web application related use cases, includes out-of-the-box BSON marshaling support
## FAQ
diff --git a/vendor/github.com/shopspring/decimal/const.go b/vendor/github.com/shopspring/decimal/const.go
new file mode 100644
index 00000000000..e5d6fa87e8d
--- /dev/null
+++ b/vendor/github.com/shopspring/decimal/const.go
@@ -0,0 +1,63 @@
+package decimal
+
+import (
+ "strings"
+)
+
+const (
+ strLn10 = "2.302585092994045684017991454684364207601101488628772976033327900967572609677352480235997205089598298341967784042286248633409525465082806756666287369098781689482907208325554680843799894826233198528393505308965377732628846163366222287698219886746543667474404243274365155048934314939391479619404400222105101714174800368808401264708068556774321622835522011480466371565912137345074785694768346361679210180644507064800027750268491674655058685693567342067058113642922455440575892572420824131469568901675894025677631135691929203337658714166023010570308963457207544037084746994016826928280848118428931484852494864487192780967627127577539702766860595249671667418348570442250719796500471495105049221477656763693866297697952211071826454973477266242570942932258279850258550978526538320760672631716430950599508780752371033310119785754733154142180842754386359177811705430982748238504564801909561029929182431823752535770975053956518769751037497088869218020518933950723853920514463419726528728696511086257149219884997874887377134568620916705849807828059751193854445009978131146915934666241071846692310107598438319191292230792503747298650929009880391941702654416816335727555703151596113564846546190897042819763365836983716328982174407366009162177850541779276367731145041782137660111010731042397832521894898817597921798666394319523936855916447118246753245630912528778330963604262982153040874560927760726641354787576616262926568298704957954913954918049209069438580790032763017941503117866862092408537949861264933479354871737451675809537088281067452440105892444976479686075120275724181874989395971643105518848195288330746699317814634930000321200327765654130472621883970596794457943468343218395304414844803701305753674262153675579814770458031413637793236291560128185336498466942261465206459942072917119370602444929358037007718981097362533224548366988505528285966192805098447175198503666680874970496982273220244823343097169111136813588418696549323714996941979687803008850408979618598756579894836445212043698216415292987811742973332588607915912510967187510929248475023930572665446276200923068791518135803477701295593646298412366497023355174586195564772461857717369368404676577047874319780573853271810933883496338813069945569399346101090745616033312247949360455361849123333063704751724871276379140924398331810164737823379692265637682071706935846394531616949411701841938119405416449466111274712819705817783293841742231409930022911502362192186723337268385688273533371925103412930705632544426611429765388301822384091026198582888433587455960453004548370789052578473166283701953392231047527564998119228742789713715713228319641003422124210082180679525276689858180956119208391760721080919923461516952599099473782780648128058792731993893453415320185969711021407542282796298237068941764740642225757212455392526179373652434440560595336591539160312524480149313234572453879524389036839236450507881731359711238145323701508413491122324390927681724749607955799151363982881058285740538000653371655553014196332241918087621018204919492651483892"
+)
+
+var (
+ ln10 = newConstApproximation(strLn10)
+)
+
+type constApproximation struct {
+ exact Decimal
+ approximations []Decimal
+}
+
+func newConstApproximation(value string) constApproximation {
+ parts := strings.Split(value, ".")
+ coeff, fractional := parts[0], parts[1]
+
+ coeffLen := len(coeff)
+ maxPrecision := len(fractional)
+
+ var approximations []Decimal
+ for p := 1; p < maxPrecision; p *= 2 {
+ r := RequireFromString(value[:coeffLen+p])
+ approximations = append(approximations, r)
+ }
+
+ return constApproximation{
+ RequireFromString(value),
+ approximations,
+ }
+}
+
+// Returns the smallest approximation available that's at least as precise
+// as the passed precision (places after decimal point), i.e. Floor[ log2(precision) ] + 1
+func (c constApproximation) withPrecision(precision int32) Decimal {
+ i := 0
+
+ if precision >= 1 {
+ i++
+ }
+
+ for precision >= 16 {
+ precision /= 16
+ i += 4
+ }
+
+ for precision >= 2 {
+ precision /= 2
+ i++
+ }
+
+ if i >= len(c.approximations) {
+ return c.exact
+ }
+
+ return c.approximations[i]
+}
diff --git a/vendor/github.com/shopspring/decimal/decimal.go b/vendor/github.com/shopspring/decimal/decimal.go
index 84405ec1cf0..a37a2301ef0 100644
--- a/vendor/github.com/shopspring/decimal/decimal.go
+++ b/vendor/github.com/shopspring/decimal/decimal.go
@@ -4,14 +4,14 @@
//
// The best way to create a new Decimal is to use decimal.NewFromString, ex:
//
-// n, err := decimal.NewFromString("-123.4567")
-// n.String() // output: "-123.4567"
+// n, err := decimal.NewFromString("-123.4567")
+// n.String() // output: "-123.4567"
//
// To use Decimal as part of a struct:
//
-// type Struct struct {
-// Number Decimal
-// }
+// type StructName struct {
+// Number Decimal
+// }
//
// Note: This can "only" represent numbers with a maximum of 2^31 digits after the decimal point.
package decimal
@@ -32,18 +32,31 @@ import (
//
// Example:
//
-// d1 := decimal.NewFromFloat(2).Div(decimal.NewFromFloat(3))
-// d1.String() // output: "0.6666666666666667"
-// d2 := decimal.NewFromFloat(2).Div(decimal.NewFromFloat(30000))
-// d2.String() // output: "0.0000666666666667"
-// d3 := decimal.NewFromFloat(20000).Div(decimal.NewFromFloat(3))
-// d3.String() // output: "6666.6666666666666667"
-// decimal.DivisionPrecision = 3
-// d4 := decimal.NewFromFloat(2).Div(decimal.NewFromFloat(3))
-// d4.String() // output: "0.667"
-//
+// d1 := decimal.NewFromFloat(2).Div(decimal.NewFromFloat(3))
+// d1.String() // output: "0.6666666666666667"
+// d2 := decimal.NewFromFloat(2).Div(decimal.NewFromFloat(30000))
+// d2.String() // output: "0.0000666666666667"
+// d3 := decimal.NewFromFloat(20000).Div(decimal.NewFromFloat(3))
+// d3.String() // output: "6666.6666666666666667"
+// decimal.DivisionPrecision = 3
+// d4 := decimal.NewFromFloat(2).Div(decimal.NewFromFloat(3))
+// d4.String() // output: "0.667"
var DivisionPrecision = 16
+// PowPrecisionNegativeExponent specifies the maximum precision of the result (digits after decimal point)
+// when calculating decimal power. Only used for cases where the exponent is a negative number.
+// This constant applies to Pow, PowInt32 and PowBigInt methods, PowWithPrecision method is not constrained by it.
+//
+// Example:
+//
+// d1, err := decimal.NewFromFloat(15.2).PowInt32(-2)
+// d1.String() // output: "0.0043282548476454"
+//
+// decimal.PowPrecisionNegativeExponent = 24
+// d2, err := decimal.NewFromFloat(15.2).PowInt32(-2)
+// d2.String() // output: "0.004328254847645429362881"
+var PowPrecisionNegativeExponent = 16
+
// MarshalJSONWithoutQuotes should be set to true if you want the decimal to
// be JSON marshaled as a number, instead of as a string.
// WARNING: this is dangerous for decimals with many digits, since many JSON
@@ -91,12 +104,12 @@ func New(value int64, exp int32) Decimal {
}
}
-// NewFromInt converts a int64 to Decimal.
+// NewFromInt converts an int64 to Decimal.
//
// Example:
//
-// NewFromInt(123).String() // output: "123"
-// NewFromInt(-10).String() // output: "-10"
+// NewFromInt(123).String() // output: "123"
+// NewFromInt(-10).String() // output: "-10"
func NewFromInt(value int64) Decimal {
return Decimal{
value: big.NewInt(value),
@@ -104,12 +117,12 @@ func NewFromInt(value int64) Decimal {
}
}
-// NewFromInt32 converts a int32 to Decimal.
+// NewFromInt32 converts an int32 to Decimal.
//
// Example:
//
-// NewFromInt(123).String() // output: "123"
-// NewFromInt(-10).String() // output: "-10"
+// NewFromInt(123).String() // output: "123"
+// NewFromInt(-10).String() // output: "-10"
func NewFromInt32(value int32) Decimal {
return Decimal{
value: big.NewInt(int64(value)),
@@ -117,6 +130,18 @@ func NewFromInt32(value int32) Decimal {
}
}
+// NewFromUint64 converts an uint64 to Decimal.
+//
+// Example:
+//
+// NewFromUint64(123).String() // output: "123"
+func NewFromUint64(value uint64) Decimal {
+ return Decimal{
+ value: new(big.Int).SetUint64(value),
+ exp: 0,
+ }
+}
+
// NewFromBigInt returns a new Decimal from a big.Int, value * 10 ^ exp
func NewFromBigInt(value *big.Int, exp int32) Decimal {
return Decimal{
@@ -125,15 +150,33 @@ func NewFromBigInt(value *big.Int, exp int32) Decimal {
}
}
+// NewFromBigRat returns a new Decimal from a big.Rat. The numerator and
+// denominator are divided and rounded to the given precision.
+//
+// Example:
+//
+// d1 := NewFromBigRat(big.NewRat(0, 1), 0) // output: "0"
+// d2 := NewFromBigRat(big.NewRat(4, 5), 1) // output: "0.8"
+// d3 := NewFromBigRat(big.NewRat(1000, 3), 3) // output: "333.333"
+// d4 := NewFromBigRat(big.NewRat(2, 7), 4) // output: "0.2857"
+func NewFromBigRat(value *big.Rat, precision int32) Decimal {
+ return Decimal{
+ value: new(big.Int).Set(value.Num()),
+ exp: 0,
+ }.DivRound(Decimal{
+ value: new(big.Int).Set(value.Denom()),
+ exp: 0,
+ }, precision)
+}
+
// NewFromString returns a new Decimal from a string representation.
// Trailing zeroes are not trimmed.
//
// Example:
//
-// d, err := NewFromString("-123.45")
-// d2, err := NewFromString(".0001")
-// d3, err := NewFromString("1.47000")
-//
+// d, err := NewFromString("-123.45")
+// d2, err := NewFromString(".0001")
+// d3, err := NewFromString("1.47000")
func NewFromString(value string) (Decimal, error) {
originalInput := value
var intString string
@@ -211,15 +254,14 @@ func NewFromString(value string) (Decimal, error) {
//
// Example:
//
-// r := regexp.MustCompile("[$,]")
-// d1, err := NewFromFormattedString("$5,125.99", r)
+// r := regexp.MustCompile("[$,]")
+// d1, err := NewFromFormattedString("$5,125.99", r)
//
-// r2 := regexp.MustCompile("[_]")
-// d2, err := NewFromFormattedString("1_000_000", r2)
-//
-// r3 := regexp.MustCompile("[USD\\s]")
-// d3, err := NewFromFormattedString("5000 USD", r3)
+// r2 := regexp.MustCompile("[_]")
+// d2, err := NewFromFormattedString("1_000_000", r2)
//
+// r3 := regexp.MustCompile("[USD\\s]")
+// d3, err := NewFromFormattedString("5000 USD", r3)
func NewFromFormattedString(value string, replRegexp *regexp.Regexp) (Decimal, error) {
parsedValue := replRegexp.ReplaceAllString(value, "")
d, err := NewFromString(parsedValue)
@@ -230,13 +272,12 @@ func NewFromFormattedString(value string, replRegexp *regexp.Regexp) (Decimal, e
}
// RequireFromString returns a new Decimal from a string representation
-// or panics if NewFromString would have returned an error.
+// or panics if NewFromString had returned an error.
//
// Example:
//
-// d := RequireFromString("-123.45")
-// d2 := RequireFromString(".0001")
-//
+// d := RequireFromString("-123.45")
+// d2 := RequireFromString(".0001")
func RequireFromString(value string) Decimal {
dec, err := NewFromString(value)
if err != nil {
@@ -332,8 +373,7 @@ func newFromFloat(val float64, bits uint64, flt *floatInfo) Decimal {
//
// Example:
//
-// NewFromFloatWithExponent(123.456, -2).String() // output: "123.46"
-//
+// NewFromFloatWithExponent(123.456, -2).String() // output: "123.46"
func NewFromFloatWithExponent(value float64, exp int32) Decimal {
if math.IsNaN(value) || math.IsInf(value, 0) {
panic(fmt.Sprintf("Cannot create a Decimal from %v", value))
@@ -418,7 +458,7 @@ func NewFromFloatWithExponent(value float64, exp int32) Decimal {
func (d Decimal) Copy() Decimal {
d.ensureInitialized()
return Decimal{
- value: &(*d.value),
+ value: new(big.Int).Set(d.value),
exp: d.exp,
}
}
@@ -430,7 +470,7 @@ func (d Decimal) Copy() Decimal {
//
// Example:
//
-// d := New(12345, -4)
+// d := New(12345, -4)
// d2 := d.rescale(-1)
// d3 := d2.rescale(-4)
// println(d1)
@@ -442,7 +482,6 @@ func (d Decimal) Copy() Decimal {
// 1.2345
// 1.2
// 1.2000
-//
func (d Decimal) rescale(exp int32) Decimal {
d.ensureInitialized()
@@ -552,11 +591,13 @@ func (d Decimal) Div(d2 Decimal) Decimal {
return d.DivRound(d2, int32(DivisionPrecision))
}
-// QuoRem does divsion with remainder
+// QuoRem does division with remainder
// d.QuoRem(d2,precision) returns quotient q and remainder r such that
-// d = d2 * q + r, q an integer multiple of 10^(-precision)
-// 0 <= r < abs(d2) * 10 ^(-precision) if d>=0
-// 0 >= r > -abs(d2) * 10 ^(-precision) if d<0
+//
+// d = d2 * q + r, q an integer multiple of 10^(-precision)
+// 0 <= r < abs(d2) * 10 ^(-precision) if d>=0
+// 0 >= r > -abs(d2) * 10 ^(-precision) if d<0
+//
// Note that precision<0 is allowed as input.
func (d Decimal) QuoRem(d2 Decimal, precision int32) (Decimal, Decimal) {
d.ensureInitialized()
@@ -565,7 +606,7 @@ func (d Decimal) QuoRem(d2 Decimal, precision int32) (Decimal, Decimal) {
panic("decimal division by 0")
}
scale := -precision
- e := int64(d.exp - d2.exp - scale)
+ e := int64(d.exp) - int64(d2.exp) - int64(scale)
if e > math.MaxInt32 || e < math.MinInt32 {
panic("overflow in decimal QuoRem")
}
@@ -599,8 +640,10 @@ func (d Decimal) QuoRem(d2 Decimal, precision int32) (Decimal, Decimal) {
// DivRound divides and rounds to a given precision
// i.e. to an integer multiple of 10^(-precision)
-// for a positive quotient digit 5 is rounded up, away from 0
-// if the quotient is negative then digit 5 is rounded down, away from 0
+//
+// for a positive quotient digit 5 is rounded up, away from 0
+// if the quotient is negative then digit 5 is rounded down, away from 0
+//
// Note that precision<0 is allowed as input.
func (d Decimal) DivRound(d2 Decimal, precision int32) Decimal {
// QuoRem already checks initialization
@@ -628,24 +671,278 @@ func (d Decimal) DivRound(d2 Decimal, precision int32) Decimal {
// Mod returns d % d2.
func (d Decimal) Mod(d2 Decimal) Decimal {
- quo := d.Div(d2).Truncate(0)
- return d.Sub(d2.Mul(quo))
+ _, r := d.QuoRem(d2, 0)
+ return r
}
-// Pow returns d to the power d2
+// Pow returns d to the power of d2.
+// When exponent is negative the returned decimal will have maximum precision of PowPrecisionNegativeExponent places after decimal point.
+//
+// Pow returns 0 (zero-value of Decimal) instead of error for power operation edge cases, to handle those edge cases use PowWithPrecision
+// Edge cases not handled by Pow:
+// - 0 ** 0 => undefined value
+// - 0 ** y, where y < 0 => infinity
+// - x ** y, where x < 0 and y is non-integer decimal => imaginary value
+//
+// Example:
+//
+// d1 := decimal.NewFromFloat(4.0)
+// d2 := decimal.NewFromFloat(4.0)
+// res1 := d1.Pow(d2)
+// res1.String() // output: "256"
+//
+// d3 := decimal.NewFromFloat(5.0)
+// d4 := decimal.NewFromFloat(5.73)
+// res2 := d3.Pow(d4)
+// res2.String() // output: "10118.08037125"
func (d Decimal) Pow(d2 Decimal) Decimal {
- var temp Decimal
- if d2.IntPart() == 0 {
- return NewFromFloat(1)
+ baseSign := d.Sign()
+ expSign := d2.Sign()
+
+ if baseSign == 0 {
+ if expSign == 0 {
+ return Decimal{}
+ }
+ if expSign == 1 {
+ return Decimal{zeroInt, 0}
+ }
+ if expSign == -1 {
+ return Decimal{}
+ }
+ }
+
+ if expSign == 0 {
+ return Decimal{oneInt, 0}
+ }
+
+ // TODO: optimize extraction of fractional part
+ one := Decimal{oneInt, 0}
+ expIntPart, expFracPart := d2.QuoRem(one, 0)
+
+ if baseSign == -1 && !expFracPart.IsZero() {
+ return Decimal{}
+ }
+
+ intPartPow, _ := d.PowBigInt(expIntPart.value)
+
+ // if exponent is an integer we don't need to calculate d1**frac(d2)
+ if expFracPart.value.Sign() == 0 {
+ return intPartPow
+ }
+
+ // TODO: optimize NumDigits for more performant precision adjustment
+ digitsBase := d.NumDigits()
+ digitsExponent := d2.NumDigits()
+
+ precision := digitsBase
+
+ if digitsExponent > precision {
+ precision += digitsExponent
+ }
+
+ precision += 6
+
+ // Calculate x ** frac(y), where
+ // x ** frac(y) = exp(ln(x ** frac(y)) = exp(ln(x) * frac(y))
+ fracPartPow, err := d.Abs().Ln(-d.exp + int32(precision))
+ if err != nil {
+ return Decimal{}
+ }
+
+ fracPartPow = fracPartPow.Mul(expFracPart)
+
+ fracPartPow, err = fracPartPow.ExpTaylor(-d.exp + int32(precision))
+ if err != nil {
+ return Decimal{}
+ }
+
+ // Join integer and fractional part,
+ // base ** (expBase + expFrac) = base ** expBase * base ** expFrac
+ res := intPartPow.Mul(fracPartPow)
+
+ return res
+}
+
+// PowWithPrecision returns d to the power of d2.
+// Precision parameter specifies minimum precision of the result (digits after decimal point).
+// Returned decimal is not rounded to 'precision' places after decimal point.
+//
+// PowWithPrecision returns error when:
+// - 0 ** 0 => undefined value
+// - 0 ** y, where y < 0 => infinity
+// - x ** y, where x < 0 and y is non-integer decimal => imaginary value
+//
+// Example:
+//
+// d1 := decimal.NewFromFloat(4.0)
+// d2 := decimal.NewFromFloat(4.0)
+// res1, err := d1.PowWithPrecision(d2, 2)
+// res1.String() // output: "256"
+//
+// d3 := decimal.NewFromFloat(5.0)
+// d4 := decimal.NewFromFloat(5.73)
+// res2, err := d3.PowWithPrecision(d4, 5)
+// res2.String() // output: "10118.080371595015625"
+//
+// d5 := decimal.NewFromFloat(-3.0)
+// d6 := decimal.NewFromFloat(-6.0)
+// res3, err := d5.PowWithPrecision(d6, 10)
+// res3.String() // output: "0.0013717421"
+func (d Decimal) PowWithPrecision(d2 Decimal, precision int32) (Decimal, error) {
+ baseSign := d.Sign()
+ expSign := d2.Sign()
+
+ if baseSign == 0 {
+ if expSign == 0 {
+ return Decimal{}, fmt.Errorf("cannot represent undefined value of 0**0")
+ }
+ if expSign == 1 {
+ return Decimal{zeroInt, 0}, nil
+ }
+ if expSign == -1 {
+ return Decimal{}, fmt.Errorf("cannot represent infinity value of 0 ** y, where y < 0")
+ }
+ }
+
+ if expSign == 0 {
+ return Decimal{oneInt, 0}, nil
+ }
+
+ // TODO: optimize extraction of fractional part
+ one := Decimal{oneInt, 0}
+ expIntPart, expFracPart := d2.QuoRem(one, 0)
+
+ if baseSign == -1 && !expFracPart.IsZero() {
+ return Decimal{}, fmt.Errorf("cannot represent imaginary value of x ** y, where x < 0 and y is non-integer decimal")
+ }
+
+ intPartPow, _ := d.powBigIntWithPrecision(expIntPart.value, precision)
+
+ // if exponent is an integer we don't need to calculate d1**frac(d2)
+ if expFracPart.value.Sign() == 0 {
+ return intPartPow, nil
+ }
+
+ // TODO: optimize NumDigits for more performant precision adjustment
+ digitsBase := d.NumDigits()
+ digitsExponent := d2.NumDigits()
+
+ if int32(digitsBase) > precision {
+ precision = int32(digitsBase)
+ }
+ if int32(digitsExponent) > precision {
+ precision += int32(digitsExponent)
+ }
+ // increase precision by 10 to compensate for errors in further calculations
+ precision += 10
+
+ // Calculate x ** frac(y), where
+ // x ** frac(y) = exp(ln(x ** frac(y)) = exp(ln(x) * frac(y))
+ fracPartPow, err := d.Abs().Ln(precision)
+ if err != nil {
+ return Decimal{}, err
+ }
+
+ fracPartPow = fracPartPow.Mul(expFracPart)
+
+ fracPartPow, err = fracPartPow.ExpTaylor(precision)
+ if err != nil {
+ return Decimal{}, err
+ }
+
+ // Join integer and fractional part,
+ // base ** (expBase + expFrac) = base ** expBase * base ** expFrac
+ res := intPartPow.Mul(fracPartPow)
+
+ return res, nil
+}
+
+// PowInt32 returns d to the power of exp, where exp is int32.
+// Only returns error when d and exp is 0, thus result is undefined.
+//
+// When exponent is negative the returned decimal will have maximum precision of PowPrecisionNegativeExponent places after decimal point.
+//
+// Example:
+//
+// d1, err := decimal.NewFromFloat(4.0).PowInt32(4)
+// d1.String() // output: "256"
+//
+// d2, err := decimal.NewFromFloat(3.13).PowInt32(5)
+// d2.String() // output: "300.4150512793"
+func (d Decimal) PowInt32(exp int32) (Decimal, error) {
+ if d.IsZero() && exp == 0 {
+ return Decimal{}, fmt.Errorf("cannot represent undefined value of 0**0")
+ }
+
+ isExpNeg := exp < 0
+ exp = abs(exp)
+
+ n, result := d, New(1, 0)
+
+ for exp > 0 {
+ if exp%2 == 1 {
+ result = result.Mul(n)
+ }
+ exp /= 2
+
+ if exp > 0 {
+ n = n.Mul(n)
+ }
+ }
+
+ if isExpNeg {
+ return New(1, 0).DivRound(result, int32(PowPrecisionNegativeExponent)), nil
+ }
+
+ return result, nil
+}
+
+// PowBigInt returns d to the power of exp, where exp is big.Int.
+// Only returns error when d and exp is 0, thus result is undefined.
+//
+// When exponent is negative the returned decimal will have maximum precision of PowPrecisionNegativeExponent places after decimal point.
+//
+// Example:
+//
+// d1, err := decimal.NewFromFloat(3.0).PowBigInt(big.NewInt(3))
+// d1.String() // output: "27"
+//
+// d2, err := decimal.NewFromFloat(629.25).PowBigInt(big.NewInt(5))
+// d2.String() // output: "98654323103449.5673828125"
+func (d Decimal) PowBigInt(exp *big.Int) (Decimal, error) {
+ return d.powBigIntWithPrecision(exp, int32(PowPrecisionNegativeExponent))
+}
+
+func (d Decimal) powBigIntWithPrecision(exp *big.Int, precision int32) (Decimal, error) {
+ if d.IsZero() && exp.Sign() == 0 {
+ return Decimal{}, fmt.Errorf("cannot represent undefined value of 0**0")
}
- temp = d.Pow(d2.Div(NewFromFloat(2)))
- if d2.IntPart()%2 == 0 {
- return temp.Mul(temp)
+
+ tmpExp := new(big.Int).Set(exp)
+ isExpNeg := exp.Sign() < 0
+
+ if isExpNeg {
+ tmpExp.Abs(tmpExp)
+ }
+
+ n, result := d, New(1, 0)
+
+ for tmpExp.Sign() > 0 {
+ if tmpExp.Bit(0) == 1 {
+ result = result.Mul(n)
+ }
+ tmpExp.Rsh(tmpExp, 1)
+
+ if tmpExp.Sign() > 0 {
+ n = n.Mul(n)
+ }
}
- if d2.IntPart() > 0 {
- return temp.Mul(temp).Mul(d)
+
+ if isExpNeg {
+ return New(1, 0).DivRound(result, precision), nil
}
- return temp.Mul(temp).Div(d)
+
+ return result, nil
}
// ExpHullAbrham calculates the natural exponent of decimal (e to the power of d) using Hull-Abraham algorithm.
@@ -655,9 +952,8 @@ func (d Decimal) Pow(d2 Decimal) Decimal {
//
// Example:
//
-// NewFromFloat(26.1).ExpHullAbrham(2).String() // output: "220000000000"
-// NewFromFloat(26.1).ExpHullAbrham(20).String() // output: "216314672147.05767284"
-//
+// NewFromFloat(26.1).ExpHullAbrham(2).String() // output: "220000000000"
+// NewFromFloat(26.1).ExpHullAbrham(20).String() // output: "216314672147.05767284"
func (d Decimal) ExpHullAbrham(overallPrecision uint32) (Decimal, error) {
// Algorithm based on Variable precision exponential function.
// ACM Transactions on Mathematical Software by T. E. Hull & A. Abrham.
@@ -747,15 +1043,14 @@ func (d Decimal) ExpHullAbrham(overallPrecision uint32) (Decimal, error) {
//
// Example:
//
-// d, err := NewFromFloat(26.1).ExpTaylor(2).String()
-// d.String() // output: "216314672147.06"
-//
-// NewFromFloat(26.1).ExpTaylor(20).String()
-// d.String() // output: "216314672147.05767284062928674083"
+// d, err := NewFromFloat(26.1).ExpTaylor(2).String()
+// d.String() // output: "216314672147.06"
//
-// NewFromFloat(26.1).ExpTaylor(-10).String()
-// d.String() // output: "220000000000"
+// NewFromFloat(26.1).ExpTaylor(20).String()
+// d.String() // output: "216314672147.05767284062928674083"
//
+// NewFromFloat(26.1).ExpTaylor(-10).String()
+// d.String() // output: "220000000000"
func (d Decimal) ExpTaylor(precision int32) (Decimal, error) {
// Note(mwoss): Implementation can be optimized by exclusively using big.Int API only
if d.IsZero() {
@@ -812,14 +1107,162 @@ func (d Decimal) ExpTaylor(precision int32) (Decimal, error) {
return result, nil
}
+// Ln calculates natural logarithm of d.
+// Precision argument specifies how precise the result must be (number of digits after decimal point).
+// Negative precision is allowed.
+//
+// Example:
+//
+// d1, err := NewFromFloat(13.3).Ln(2)
+// d1.String() // output: "2.59"
+//
+// d2, err := NewFromFloat(579.161).Ln(10)
+// d2.String() // output: "6.3615805046"
+func (d Decimal) Ln(precision int32) (Decimal, error) {
+ // Algorithm based on The Use of Iteration Methods for Approximating the Natural Logarithm,
+ // James F. Epperson, The American Mathematical Monthly, Vol. 96, No. 9, November 1989, pp. 831-835.
+ if d.IsNegative() {
+ return Decimal{}, fmt.Errorf("cannot calculate natural logarithm for negative decimals")
+ }
+
+ if d.IsZero() {
+ return Decimal{}, fmt.Errorf("cannot represent natural logarithm of 0, result: -infinity")
+ }
+
+ calcPrecision := precision + 2
+ z := d.Copy()
+
+ var comp1, comp3, comp2, comp4, reduceAdjust Decimal
+ comp1 = z.Sub(Decimal{oneInt, 0})
+ comp3 = Decimal{oneInt, -1}
+
+ // for decimal in range [0.9, 1.1] where ln(d) is close to 0
+ usePowerSeries := false
+
+ if comp1.Abs().Cmp(comp3) <= 0 {
+ usePowerSeries = true
+ } else {
+ // reduce input decimal to range [0.1, 1)
+ expDelta := int32(z.NumDigits()) + z.exp
+ z.exp -= expDelta
+
+ // Input decimal was reduced by factor of 10^expDelta, thus we will need to add
+ // ln(10^expDelta) = expDelta * ln(10)
+ // to the result to compensate that
+ ln10 := ln10.withPrecision(calcPrecision)
+ reduceAdjust = NewFromInt32(expDelta)
+ reduceAdjust = reduceAdjust.Mul(ln10)
+
+ comp1 = z.Sub(Decimal{oneInt, 0})
+
+ if comp1.Abs().Cmp(comp3) <= 0 {
+ usePowerSeries = true
+ } else {
+ // initial estimate using floats
+ zFloat := z.InexactFloat64()
+ comp1 = NewFromFloat(math.Log(zFloat))
+ }
+ }
+
+ epsilon := Decimal{oneInt, -calcPrecision}
+
+ if usePowerSeries {
+ // Power Series - https://en.wikipedia.org/wiki/Logarithm#Power_series
+ // Calculating n-th term of formula: ln(z+1) = 2 sum [ 1 / (2n+1) * (z / (z+2))^(2n+1) ]
+ // until the difference between current and next term is smaller than epsilon.
+ // Coverage quite fast for decimals close to 1.0
+
+ // z + 2
+ comp2 = comp1.Add(Decimal{twoInt, 0})
+ // z / (z + 2)
+ comp3 = comp1.DivRound(comp2, calcPrecision)
+ // 2 * (z / (z + 2))
+ comp1 = comp3.Add(comp3)
+ comp2 = comp1.Copy()
+
+ for n := 1; ; n++ {
+ // 2 * (z / (z+2))^(2n+1)
+ comp2 = comp2.Mul(comp3).Mul(comp3)
+
+ // 1 / (2n+1) * 2 * (z / (z+2))^(2n+1)
+ comp4 = NewFromInt(int64(2*n + 1))
+ comp4 = comp2.DivRound(comp4, calcPrecision)
+
+ // comp1 = 2 sum [ 1 / (2n+1) * (z / (z+2))^(2n+1) ]
+ comp1 = comp1.Add(comp4)
+
+ if comp4.Abs().Cmp(epsilon) <= 0 {
+ break
+ }
+ }
+ } else {
+ // Halley's Iteration.
+ // Calculating n-th term of formula: a_(n+1) = a_n - 2 * (exp(a_n) - z) / (exp(a_n) + z),
+ // until the difference between current and next term is smaller than epsilon
+ var prevStep Decimal
+ maxIters := calcPrecision*2 + 10
+
+ for i := int32(0); i < maxIters; i++ {
+ // exp(a_n)
+ comp3, _ = comp1.ExpTaylor(calcPrecision)
+ // exp(a_n) - z
+ comp2 = comp3.Sub(z)
+ // 2 * (exp(a_n) - z)
+ comp2 = comp2.Add(comp2)
+ // exp(a_n) + z
+ comp4 = comp3.Add(z)
+ // 2 * (exp(a_n) - z) / (exp(a_n) + z)
+ comp3 = comp2.DivRound(comp4, calcPrecision)
+ // comp1 = a_(n+1) = a_n - 2 * (exp(a_n) - z) / (exp(a_n) + z)
+ comp1 = comp1.Sub(comp3)
+
+ if prevStep.Add(comp3).IsZero() {
+ // If iteration steps oscillate we should return early and prevent an infinity loop
+ // NOTE(mwoss): This should be quite a rare case, returning error is not necessary
+ break
+ }
+
+ if comp3.Abs().Cmp(epsilon) <= 0 {
+ break
+ }
+
+ prevStep = comp3
+ }
+ }
+
+ comp1 = comp1.Add(reduceAdjust)
+
+ return comp1.Round(precision), nil
+}
+
// NumDigits returns the number of digits of the decimal coefficient (d.Value)
-// Note: Current implementation is extremely slow for large decimals and/or decimals with large fractional part
func (d Decimal) NumDigits() int {
- // Note(mwoss): It can be optimized, unnecessary cast of big.Int to string
- if d.IsNegative() {
- return len(d.value.String()) - 1
+ if d.value == nil {
+ return 1
+ }
+
+ if d.value.IsInt64() {
+ i64 := d.value.Int64()
+ // restrict fast path to integers with exact conversion to float64
+ if i64 <= (1<<53) && i64 >= -(1<<53) {
+ if i64 == 0 {
+ return 1
+ }
+ return int(math.Log10(math.Abs(float64(i64)))) + 1
+ }
+ }
+
+ estimatedNumDigits := int(float64(d.value.BitLen()) / math.Log2(10))
+
+ // estimatedNumDigits (lg10) may be off by 1, need to verify
+ digitsBigInt := big.NewInt(int64(estimatedNumDigits))
+ errorCorrectionUnit := digitsBigInt.Exp(tenInt, digitsBigInt, nil)
+
+ if d.value.CmpAbs(errorCorrectionUnit) >= 0 {
+ return estimatedNumDigits + 1
}
- return len(d.value.String())
+
+ return estimatedNumDigits
}
// IsInteger returns true when decimal can be represented as an integer value, otherwise, it returns false.
@@ -851,10 +1294,9 @@ func abs(n int32) int32 {
// Cmp compares the numbers represented by d and d2 and returns:
//
-// -1 if d < d2
-// 0 if d == d2
-// +1 if d > d2
-//
+// -1 if d < d2
+// 0 if d == d2
+// +1 if d > d2
func (d Decimal) Cmp(d2 Decimal) int {
d.ensureInitialized()
d2.ensureInitialized()
@@ -868,12 +1310,21 @@ func (d Decimal) Cmp(d2 Decimal) int {
return rd.value.Cmp(rd2.value)
}
+// Compare compares the numbers represented by d and d2 and returns:
+//
+// -1 if d < d2
+// 0 if d == d2
+// +1 if d > d2
+func (d Decimal) Compare(d2 Decimal) int {
+ return d.Cmp(d2)
+}
+
// Equal returns whether the numbers represented by d and d2 are equal.
func (d Decimal) Equal(d2 Decimal) bool {
return d.Cmp(d2) == 0
}
-// Equals is deprecated, please use Equal method instead
+// Deprecated: Equals is deprecated, please use Equal method instead.
func (d Decimal) Equals(d2 Decimal) bool {
return d.Equal(d2)
}
@@ -905,7 +1356,6 @@ func (d Decimal) LessThanOrEqual(d2 Decimal) bool {
// -1 if d < 0
// 0 if d == 0
// +1 if d > 0
-//
func (d Decimal) Sign() int {
if d.value == nil {
return 0
@@ -968,9 +1418,7 @@ func (d Decimal) IntPart() int64 {
// BigInt returns integer component of the decimal as a BigInt.
func (d Decimal) BigInt() *big.Int {
scaledD := d.rescale(0)
- i := &big.Int{}
- i.SetString(scaledD.String(), 10)
- return i
+ return scaledD.value
}
// BigFloat returns decimal as BigFloat.
@@ -1014,13 +1462,12 @@ func (d Decimal) InexactFloat64() float64 {
//
// Example:
//
-// d := New(-12345, -3)
-// println(d.String())
+// d := New(-12345, -3)
+// println(d.String())
//
// Output:
//
-// -12.345
-//
+// -12.345
func (d Decimal) String() string {
return d.string(true)
}
@@ -1030,14 +1477,13 @@ func (d Decimal) String() string {
//
// Example:
//
-// NewFromFloat(0).StringFixed(2) // output: "0.00"
-// NewFromFloat(0).StringFixed(0) // output: "0"
-// NewFromFloat(5.45).StringFixed(0) // output: "5"
-// NewFromFloat(5.45).StringFixed(1) // output: "5.5"
-// NewFromFloat(5.45).StringFixed(2) // output: "5.45"
-// NewFromFloat(5.45).StringFixed(3) // output: "5.450"
-// NewFromFloat(545).StringFixed(-1) // output: "550"
-//
+// NewFromFloat(0).StringFixed(2) // output: "0.00"
+// NewFromFloat(0).StringFixed(0) // output: "0"
+// NewFromFloat(5.45).StringFixed(0) // output: "5"
+// NewFromFloat(5.45).StringFixed(1) // output: "5.5"
+// NewFromFloat(5.45).StringFixed(2) // output: "5.45"
+// NewFromFloat(5.45).StringFixed(3) // output: "5.450"
+// NewFromFloat(545).StringFixed(-1) // output: "550"
func (d Decimal) StringFixed(places int32) string {
rounded := d.Round(places)
return rounded.string(false)
@@ -1048,14 +1494,13 @@ func (d Decimal) StringFixed(places int32) string {
//
// Example:
//
-// NewFromFloat(0).StringFixedBank(2) // output: "0.00"
-// NewFromFloat(0).StringFixedBank(0) // output: "0"
-// NewFromFloat(5.45).StringFixedBank(0) // output: "5"
-// NewFromFloat(5.45).StringFixedBank(1) // output: "5.4"
-// NewFromFloat(5.45).StringFixedBank(2) // output: "5.45"
-// NewFromFloat(5.45).StringFixedBank(3) // output: "5.450"
-// NewFromFloat(545).StringFixedBank(-1) // output: "540"
-//
+// NewFromFloat(0).StringFixedBank(2) // output: "0.00"
+// NewFromFloat(0).StringFixedBank(0) // output: "0"
+// NewFromFloat(5.45).StringFixedBank(0) // output: "5"
+// NewFromFloat(5.45).StringFixedBank(1) // output: "5.4"
+// NewFromFloat(5.45).StringFixedBank(2) // output: "5.45"
+// NewFromFloat(5.45).StringFixedBank(3) // output: "5.450"
+// NewFromFloat(545).StringFixedBank(-1) // output: "540"
func (d Decimal) StringFixedBank(places int32) string {
rounded := d.RoundBank(places)
return rounded.string(false)
@@ -1073,9 +1518,8 @@ func (d Decimal) StringFixedCash(interval uint8) string {
//
// Example:
//
-// NewFromFloat(5.45).Round(1).String() // output: "5.5"
-// NewFromFloat(545).Round(-1).String() // output: "550"
-//
+// NewFromFloat(5.45).Round(1).String() // output: "5.5"
+// NewFromFloat(545).Round(-1).String() // output: "550"
func (d Decimal) Round(places int32) Decimal {
if d.exp == -places {
return d
@@ -1104,11 +1548,10 @@ func (d Decimal) Round(places int32) Decimal {
//
// Example:
//
-// NewFromFloat(545).RoundCeil(-2).String() // output: "600"
-// NewFromFloat(500).RoundCeil(-2).String() // output: "500"
-// NewFromFloat(1.1001).RoundCeil(2).String() // output: "1.11"
-// NewFromFloat(-1.454).RoundCeil(1).String() // output: "-1.5"
-//
+// NewFromFloat(545).RoundCeil(-2).String() // output: "600"
+// NewFromFloat(500).RoundCeil(-2).String() // output: "500"
+// NewFromFloat(1.1001).RoundCeil(2).String() // output: "1.11"
+// NewFromFloat(-1.454).RoundCeil(1).String() // output: "-1.4"
func (d Decimal) RoundCeil(places int32) Decimal {
if d.exp >= -places {
return d
@@ -1130,11 +1573,10 @@ func (d Decimal) RoundCeil(places int32) Decimal {
//
// Example:
//
-// NewFromFloat(545).RoundFloor(-2).String() // output: "500"
-// NewFromFloat(-500).RoundFloor(-2).String() // output: "-500"
-// NewFromFloat(1.1001).RoundFloor(2).String() // output: "1.1"
-// NewFromFloat(-1.454).RoundFloor(1).String() // output: "-1.4"
-//
+// NewFromFloat(545).RoundFloor(-2).String() // output: "500"
+// NewFromFloat(-500).RoundFloor(-2).String() // output: "-500"
+// NewFromFloat(1.1001).RoundFloor(2).String() // output: "1.1"
+// NewFromFloat(-1.454).RoundFloor(1).String() // output: "-1.5"
func (d Decimal) RoundFloor(places int32) Decimal {
if d.exp >= -places {
return d
@@ -1156,11 +1598,10 @@ func (d Decimal) RoundFloor(places int32) Decimal {
//
// Example:
//
-// NewFromFloat(545).RoundUp(-2).String() // output: "600"
-// NewFromFloat(500).RoundUp(-2).String() // output: "500"
-// NewFromFloat(1.1001).RoundUp(2).String() // output: "1.11"
-// NewFromFloat(-1.454).RoundUp(1).String() // output: "-1.4"
-//
+// NewFromFloat(545).RoundUp(-2).String() // output: "600"
+// NewFromFloat(500).RoundUp(-2).String() // output: "500"
+// NewFromFloat(1.1001).RoundUp(2).String() // output: "1.11"
+// NewFromFloat(-1.454).RoundUp(1).String() // output: "-1.5"
func (d Decimal) RoundUp(places int32) Decimal {
if d.exp >= -places {
return d
@@ -1184,11 +1625,10 @@ func (d Decimal) RoundUp(places int32) Decimal {
//
// Example:
//
-// NewFromFloat(545).RoundDown(-2).String() // output: "500"
-// NewFromFloat(-500).RoundDown(-2).String() // output: "-500"
-// NewFromFloat(1.1001).RoundDown(2).String() // output: "1.1"
-// NewFromFloat(-1.454).RoundDown(1).String() // output: "-1.5"
-//
+// NewFromFloat(545).RoundDown(-2).String() // output: "500"
+// NewFromFloat(-500).RoundDown(-2).String() // output: "-500"
+// NewFromFloat(1.1001).RoundDown(2).String() // output: "1.1"
+// NewFromFloat(-1.454).RoundDown(1).String() // output: "-1.4"
func (d Decimal) RoundDown(places int32) Decimal {
if d.exp >= -places {
return d
@@ -1209,13 +1649,12 @@ func (d Decimal) RoundDown(places int32) Decimal {
//
// Examples:
//
-// NewFromFloat(5.45).RoundBank(1).String() // output: "5.4"
-// NewFromFloat(545).RoundBank(-1).String() // output: "540"
-// NewFromFloat(5.46).RoundBank(1).String() // output: "5.5"
-// NewFromFloat(546).RoundBank(-1).String() // output: "550"
-// NewFromFloat(5.55).RoundBank(1).String() // output: "5.6"
-// NewFromFloat(555).RoundBank(-1).String() // output: "560"
-//
+// NewFromFloat(5.45).RoundBank(1).String() // output: "5.4"
+// NewFromFloat(545).RoundBank(-1).String() // output: "540"
+// NewFromFloat(5.46).RoundBank(1).String() // output: "5.5"
+// NewFromFloat(546).RoundBank(-1).String() // output: "550"
+// NewFromFloat(5.55).RoundBank(1).String() // output: "5.6"
+// NewFromFloat(555).RoundBank(-1).String() // output: "560"
func (d Decimal) RoundBank(places int32) Decimal {
round := d.Round(places)
@@ -1237,11 +1676,13 @@ func (d Decimal) RoundBank(places int32) Decimal {
// interval. The amount payable for a cash transaction is rounded to the nearest
// multiple of the minimum currency unit available. The following intervals are
// available: 5, 10, 25, 50 and 100; any other number throws a panic.
-// 5: 5 cent rounding 3.43 => 3.45
-// 10: 10 cent rounding 3.45 => 3.50 (5 gets rounded up)
-// 25: 25 cent rounding 3.41 => 3.50
-// 50: 50 cent rounding 3.75 => 4.00
-// 100: 100 cent rounding 3.50 => 4.00
+//
+// 5: 5 cent rounding 3.43 => 3.45
+// 10: 10 cent rounding 3.45 => 3.50 (5 gets rounded up)
+// 25: 25 cent rounding 3.41 => 3.50
+// 50: 50 cent rounding 3.75 => 4.00
+// 100: 100 cent rounding 3.50 => 4.00
+//
// For more details: https://en.wikipedia.org/wiki/Cash_rounding
func (d Decimal) RoundCash(interval uint8) Decimal {
var iVal *big.Int
@@ -1310,8 +1751,7 @@ func (d Decimal) Ceil() Decimal {
//
// Example:
//
-// decimal.NewFromString("123.456").Truncate(2).String() // "123.45"
-//
+// decimal.NewFromString("123.456").Truncate(2).String() // "123.45"
func (d Decimal) Truncate(precision int32) Decimal {
d.ensureInitialized()
if precision >= 0 && -precision > d.exp {
@@ -1373,19 +1813,18 @@ func (d *Decimal) UnmarshalBinary(data []byte) error {
// MarshalBinary implements the encoding.BinaryMarshaler interface.
func (d Decimal) MarshalBinary() (data []byte, err error) {
- // Write the exponent first since it's a fixed size
- v1 := make([]byte, 4)
- binary.BigEndian.PutUint32(v1, uint32(d.exp))
-
- // Add the value
- var v2 []byte
- if v2, err = d.value.GobEncode(); err != nil {
- return
+ // exp is written first, but encode value first to know output size
+ var valueData []byte
+ if valueData, err = d.value.GobEncode(); err != nil {
+ return nil, err
}
+ // Write the exponent in front, since it's a fixed size
+ expData := make([]byte, 4, len(valueData)+4)
+ binary.BigEndian.PutUint32(expData, uint32(d.exp))
+
// Return the byte array
- data = append(v1, v2...)
- return
+ return append(expData, valueData...), nil
}
// Scan implements the sql.Scanner interface for database deserialization.
@@ -1408,6 +1847,11 @@ func (d *Decimal) Scan(value interface{}) error {
*d = New(v, 0)
return nil
+ case uint64:
+ // while clickhouse may send 0 in db as uint64
+ *d = NewFromUint64(v)
+ return nil
+
default:
// default is trying to interpret value stored as string
str, err := unquoteIfQuoted(v)
@@ -1455,7 +1899,8 @@ func (d *Decimal) GobDecode(data []byte) error {
}
// StringScaled first scales the decimal then calls .String() on it.
-// NOTE: buggy, unintuitive, and DEPRECATED! Use StringFixed instead.
+//
+// Deprecated: buggy and unintuitive. Use StringFixed instead.
func (d Decimal) StringScaled(exp int32) string {
return d.rescale(exp).String()
}
@@ -1515,7 +1960,7 @@ func (d *Decimal) ensureInitialized() {
//
// To call this function with an array, you must do:
//
-// Min(arr[0], arr[1:]...)
+// Min(arr[0], arr[1:]...)
//
// This makes it harder to accidentally call Min with 0 arguments.
func Min(first Decimal, rest ...Decimal) Decimal {
@@ -1532,7 +1977,7 @@ func Min(first Decimal, rest ...Decimal) Decimal {
//
// To call this function with an array, you must do:
//
-// Max(arr[0], arr[1:]...)
+// Max(arr[0], arr[1:]...)
//
// This makes it harder to accidentally call Max with 0 arguments.
func Max(first Decimal, rest ...Decimal) Decimal {
@@ -1567,22 +2012,13 @@ func RescalePair(d1 Decimal, d2 Decimal) (Decimal, Decimal) {
d1.ensureInitialized()
d2.ensureInitialized()
- if d1.exp == d2.exp {
- return d1, d2
+ if d1.exp < d2.exp {
+ return d1, d2.rescale(d1.exp)
+ } else if d1.exp > d2.exp {
+ return d1.rescale(d2.exp), d2
}
- baseScale := min(d1.exp, d2.exp)
- if baseScale != d1.exp {
- return d1.rescale(baseScale), d2
- }
- return d1, d2.rescale(baseScale)
-}
-
-func min(x, y int32) int32 {
- if x >= y {
- return y
- }
- return x
+ return d1, d2
}
func unquoteIfQuoted(value interface{}) (string, error) {
@@ -1594,8 +2030,7 @@ func unquoteIfQuoted(value interface{}) (string, error) {
case []byte:
bytes = v
default:
- return "", fmt.Errorf("could not convert value '%+v' to byte array of type '%T'",
- value, value)
+ return "", fmt.Errorf("could not convert value '%+v' to byte array of type '%T'", value, value)
}
// If the amount is quoted, strip the quotes
diff --git a/vendor/github.com/spf13/cast/caste.go b/vendor/github.com/spf13/cast/caste.go
index d49bbf83ecb..cd9c04885ac 100644
--- a/vendor/github.com/spf13/cast/caste.go
+++ b/vendor/github.com/spf13/cast/caste.go
@@ -18,6 +18,14 @@ import (
var errNegativeNotAllowed = errors.New("unable to cast negative value")
+type float64EProvider interface {
+ Float64() (float64, error)
+}
+
+type float64Provider interface {
+ Float64() float64
+}
+
// ToTimeE casts an interface to a time.Time type.
func ToTimeE(i interface{}) (tim time.Time, err error) {
return ToTimeInDefaultLocationE(i, time.UTC)
@@ -77,11 +85,14 @@ func ToDurationE(i interface{}) (d time.Duration, err error) {
d, err = time.ParseDuration(s + "ns")
}
return
- case json.Number:
+ case float64EProvider:
var v float64
v, err = s.Float64()
d = time.Duration(v)
return
+ case float64Provider:
+ d = time.Duration(s.Float64())
+ return
default:
err = fmt.Errorf("unable to cast %#v of type %T to Duration", i, i)
return
@@ -174,12 +185,14 @@ func ToFloat64E(i interface{}) (float64, error) {
return v, nil
}
return 0, fmt.Errorf("unable to cast %#v of type %T to float64", i, i)
- case json.Number:
+ case float64EProvider:
v, err := s.Float64()
if err == nil {
return v, nil
}
return 0, fmt.Errorf("unable to cast %#v of type %T to float64", i, i)
+ case float64Provider:
+ return s.Float64(), nil
case bool:
if s {
return 1, nil
@@ -230,12 +243,14 @@ func ToFloat32E(i interface{}) (float32, error) {
return float32(v), nil
}
return 0, fmt.Errorf("unable to cast %#v of type %T to float32", i, i)
- case json.Number:
+ case float64EProvider:
v, err := s.Float64()
if err == nil {
return float32(v), nil
}
return 0, fmt.Errorf("unable to cast %#v of type %T to float32", i, i)
+ case float64Provider:
+ return float32(s.Float64()), nil
case bool:
if s {
return 1, nil
@@ -917,8 +932,8 @@ func indirectToStringerOrError(a interface{}) interface{} {
return nil
}
- var errorType = reflect.TypeOf((*error)(nil)).Elem()
- var fmtStringerType = reflect.TypeOf((*fmt.Stringer)(nil)).Elem()
+ errorType := reflect.TypeOf((*error)(nil)).Elem()
+ fmtStringerType := reflect.TypeOf((*fmt.Stringer)(nil)).Elem()
v := reflect.ValueOf(a)
for !v.Type().Implements(fmtStringerType) && !v.Type().Implements(errorType) && v.Kind() == reflect.Ptr && !v.IsNil() {
@@ -987,7 +1002,7 @@ func ToStringE(i interface{}) (string, error) {
// ToStringMapStringE casts an interface to a map[string]string type.
func ToStringMapStringE(i interface{}) (map[string]string, error) {
- var m = map[string]string{}
+ m := map[string]string{}
switch v := i.(type) {
case map[string]string:
@@ -1017,7 +1032,7 @@ func ToStringMapStringE(i interface{}) (map[string]string, error) {
// ToStringMapStringSliceE casts an interface to a map[string][]string type.
func ToStringMapStringSliceE(i interface{}) (map[string][]string, error) {
- var m = map[string][]string{}
+ m := map[string][]string{}
switch v := i.(type) {
case map[string][]string:
@@ -1081,7 +1096,7 @@ func ToStringMapStringSliceE(i interface{}) (map[string][]string, error) {
// ToStringMapBoolE casts an interface to a map[string]bool type.
func ToStringMapBoolE(i interface{}) (map[string]bool, error) {
- var m = map[string]bool{}
+ m := map[string]bool{}
switch v := i.(type) {
case map[interface{}]interface{}:
@@ -1106,7 +1121,7 @@ func ToStringMapBoolE(i interface{}) (map[string]bool, error) {
// ToStringMapE casts an interface to a map[string]interface{} type.
func ToStringMapE(i interface{}) (map[string]interface{}, error) {
- var m = map[string]interface{}{}
+ m := map[string]interface{}{}
switch v := i.(type) {
case map[interface{}]interface{}:
@@ -1126,7 +1141,7 @@ func ToStringMapE(i interface{}) (map[string]interface{}, error) {
// ToStringMapIntE casts an interface to a map[string]int{} type.
func ToStringMapIntE(i interface{}) (map[string]int, error) {
- var m = map[string]int{}
+ m := map[string]int{}
if i == nil {
return m, fmt.Errorf("unable to cast %#v of type %T to map[string]int", i, i)
}
@@ -1167,7 +1182,7 @@ func ToStringMapIntE(i interface{}) (map[string]int, error) {
// ToStringMapInt64E casts an interface to a map[string]int64{} type.
func ToStringMapInt64E(i interface{}) (map[string]int64, error) {
- var m = map[string]int64{}
+ m := map[string]int64{}
if i == nil {
return m, fmt.Errorf("unable to cast %#v of type %T to map[string]int64", i, i)
}
@@ -1404,38 +1419,35 @@ func (f timeFormat) hasTimezone() bool {
return f.typ >= timeFormatNumericTimezone && f.typ <= timeFormatNumericAndNamedTimezone
}
-var (
- timeFormats = []timeFormat{
- // Keep common formats at the top.
- {"2006-01-02", timeFormatNoTimezone},
- {time.RFC3339, timeFormatNumericTimezone},
- {"2006-01-02T15:04:05", timeFormatNoTimezone}, // iso8601 without timezone
- {time.RFC1123Z, timeFormatNumericTimezone},
- {time.RFC1123, timeFormatNamedTimezone},
- {time.RFC822Z, timeFormatNumericTimezone},
- {time.RFC822, timeFormatNamedTimezone},
- {time.RFC850, timeFormatNamedTimezone},
- {"2006-01-02 15:04:05.999999999 -0700 MST", timeFormatNumericAndNamedTimezone}, // Time.String()
- {"2006-01-02T15:04:05-0700", timeFormatNumericTimezone}, // RFC3339 without timezone hh:mm colon
- {"2006-01-02 15:04:05Z0700", timeFormatNumericTimezone}, // RFC3339 without T or timezone hh:mm colon
- {"2006-01-02 15:04:05", timeFormatNoTimezone},
- {time.ANSIC, timeFormatNoTimezone},
- {time.UnixDate, timeFormatNamedTimezone},
- {time.RubyDate, timeFormatNumericTimezone},
- {"2006-01-02 15:04:05Z07:00", timeFormatNumericTimezone},
- {"02 Jan 2006", timeFormatNoTimezone},
- {"2006-01-02 15:04:05 -07:00", timeFormatNumericTimezone},
- {"2006-01-02 15:04:05 -0700", timeFormatNumericTimezone},
- {time.Kitchen, timeFormatTimeOnly},
- {time.Stamp, timeFormatTimeOnly},
- {time.StampMilli, timeFormatTimeOnly},
- {time.StampMicro, timeFormatTimeOnly},
- {time.StampNano, timeFormatTimeOnly},
- }
-)
+var timeFormats = []timeFormat{
+ // Keep common formats at the top.
+ {"2006-01-02", timeFormatNoTimezone},
+ {time.RFC3339, timeFormatNumericTimezone},
+ {"2006-01-02T15:04:05", timeFormatNoTimezone}, // iso8601 without timezone
+ {time.RFC1123Z, timeFormatNumericTimezone},
+ {time.RFC1123, timeFormatNamedTimezone},
+ {time.RFC822Z, timeFormatNumericTimezone},
+ {time.RFC822, timeFormatNamedTimezone},
+ {time.RFC850, timeFormatNamedTimezone},
+ {"2006-01-02 15:04:05.999999999 -0700 MST", timeFormatNumericAndNamedTimezone}, // Time.String()
+ {"2006-01-02T15:04:05-0700", timeFormatNumericTimezone}, // RFC3339 without timezone hh:mm colon
+ {"2006-01-02 15:04:05Z0700", timeFormatNumericTimezone}, // RFC3339 without T or timezone hh:mm colon
+ {"2006-01-02 15:04:05", timeFormatNoTimezone},
+ {time.ANSIC, timeFormatNoTimezone},
+ {time.UnixDate, timeFormatNamedTimezone},
+ {time.RubyDate, timeFormatNumericTimezone},
+ {"2006-01-02 15:04:05Z07:00", timeFormatNumericTimezone},
+ {"02 Jan 2006", timeFormatNoTimezone},
+ {"2006-01-02 15:04:05 -07:00", timeFormatNumericTimezone},
+ {"2006-01-02 15:04:05 -0700", timeFormatNumericTimezone},
+ {time.Kitchen, timeFormatTimeOnly},
+ {time.Stamp, timeFormatTimeOnly},
+ {time.StampMilli, timeFormatTimeOnly},
+ {time.StampMicro, timeFormatTimeOnly},
+ {time.StampNano, timeFormatTimeOnly},
+}
func parseDateWith(s string, location *time.Location, formats []timeFormat) (d time.Time, e error) {
-
for _, format := range formats {
if d, e = time.Parse(format.format, s); e == nil {
diff --git a/vendor/github.com/stretchr/testify/assert/assertion_compare.go b/vendor/github.com/stretchr/testify/assert/assertion_compare.go
index 4d4b4aad6fe..7e19eba0904 100644
--- a/vendor/github.com/stretchr/testify/assert/assertion_compare.go
+++ b/vendor/github.com/stretchr/testify/assert/assertion_compare.go
@@ -7,10 +7,13 @@ import (
"time"
)
-type CompareType int
+// Deprecated: CompareType has only ever been for internal use and has accidentally been published since v1.6.0. Do not use it.
+type CompareType = compareResult
+
+type compareResult int
const (
- compareLess CompareType = iota - 1
+ compareLess compareResult = iota - 1
compareEqual
compareGreater
)
@@ -39,7 +42,7 @@ var (
bytesType = reflect.TypeOf([]byte{})
)
-func compare(obj1, obj2 interface{}, kind reflect.Kind) (CompareType, bool) {
+func compare(obj1, obj2 interface{}, kind reflect.Kind) (compareResult, bool) {
obj1Value := reflect.ValueOf(obj1)
obj2Value := reflect.ValueOf(obj2)
@@ -325,7 +328,13 @@ func compare(obj1, obj2 interface{}, kind reflect.Kind) (CompareType, bool) {
timeObj2 = obj2Value.Convert(timeType).Interface().(time.Time)
}
- return compare(timeObj1.UnixNano(), timeObj2.UnixNano(), reflect.Int64)
+ if timeObj1.Before(timeObj2) {
+ return compareLess, true
+ }
+ if timeObj1.Equal(timeObj2) {
+ return compareEqual, true
+ }
+ return compareGreater, true
}
case reflect.Slice:
{
@@ -345,7 +354,7 @@ func compare(obj1, obj2 interface{}, kind reflect.Kind) (CompareType, bool) {
bytesObj2 = obj2Value.Convert(bytesType).Interface().([]byte)
}
- return CompareType(bytes.Compare(bytesObj1, bytesObj2)), true
+ return compareResult(bytes.Compare(bytesObj1, bytesObj2)), true
}
case reflect.Uintptr:
{
@@ -381,7 +390,7 @@ func Greater(t TestingT, e1 interface{}, e2 interface{}, msgAndArgs ...interface
if h, ok := t.(tHelper); ok {
h.Helper()
}
- return compareTwoValues(t, e1, e2, []CompareType{compareGreater}, "\"%v\" is not greater than \"%v\"", msgAndArgs...)
+ return compareTwoValues(t, e1, e2, []compareResult{compareGreater}, "\"%v\" is not greater than \"%v\"", msgAndArgs...)
}
// GreaterOrEqual asserts that the first element is greater than or equal to the second
@@ -394,7 +403,7 @@ func GreaterOrEqual(t TestingT, e1 interface{}, e2 interface{}, msgAndArgs ...in
if h, ok := t.(tHelper); ok {
h.Helper()
}
- return compareTwoValues(t, e1, e2, []CompareType{compareGreater, compareEqual}, "\"%v\" is not greater than or equal to \"%v\"", msgAndArgs...)
+ return compareTwoValues(t, e1, e2, []compareResult{compareGreater, compareEqual}, "\"%v\" is not greater than or equal to \"%v\"", msgAndArgs...)
}
// Less asserts that the first element is less than the second
@@ -406,7 +415,7 @@ func Less(t TestingT, e1 interface{}, e2 interface{}, msgAndArgs ...interface{})
if h, ok := t.(tHelper); ok {
h.Helper()
}
- return compareTwoValues(t, e1, e2, []CompareType{compareLess}, "\"%v\" is not less than \"%v\"", msgAndArgs...)
+ return compareTwoValues(t, e1, e2, []compareResult{compareLess}, "\"%v\" is not less than \"%v\"", msgAndArgs...)
}
// LessOrEqual asserts that the first element is less than or equal to the second
@@ -419,7 +428,7 @@ func LessOrEqual(t TestingT, e1 interface{}, e2 interface{}, msgAndArgs ...inter
if h, ok := t.(tHelper); ok {
h.Helper()
}
- return compareTwoValues(t, e1, e2, []CompareType{compareLess, compareEqual}, "\"%v\" is not less than or equal to \"%v\"", msgAndArgs...)
+ return compareTwoValues(t, e1, e2, []compareResult{compareLess, compareEqual}, "\"%v\" is not less than or equal to \"%v\"", msgAndArgs...)
}
// Positive asserts that the specified element is positive
@@ -431,7 +440,7 @@ func Positive(t TestingT, e interface{}, msgAndArgs ...interface{}) bool {
h.Helper()
}
zero := reflect.Zero(reflect.TypeOf(e))
- return compareTwoValues(t, e, zero.Interface(), []CompareType{compareGreater}, "\"%v\" is not positive", msgAndArgs...)
+ return compareTwoValues(t, e, zero.Interface(), []compareResult{compareGreater}, "\"%v\" is not positive", msgAndArgs...)
}
// Negative asserts that the specified element is negative
@@ -443,10 +452,10 @@ func Negative(t TestingT, e interface{}, msgAndArgs ...interface{}) bool {
h.Helper()
}
zero := reflect.Zero(reflect.TypeOf(e))
- return compareTwoValues(t, e, zero.Interface(), []CompareType{compareLess}, "\"%v\" is not negative", msgAndArgs...)
+ return compareTwoValues(t, e, zero.Interface(), []compareResult{compareLess}, "\"%v\" is not negative", msgAndArgs...)
}
-func compareTwoValues(t TestingT, e1 interface{}, e2 interface{}, allowedComparesResults []CompareType, failMessage string, msgAndArgs ...interface{}) bool {
+func compareTwoValues(t TestingT, e1 interface{}, e2 interface{}, allowedComparesResults []compareResult, failMessage string, msgAndArgs ...interface{}) bool {
if h, ok := t.(tHelper); ok {
h.Helper()
}
@@ -469,7 +478,7 @@ func compareTwoValues(t TestingT, e1 interface{}, e2 interface{}, allowedCompare
return true
}
-func containsValue(values []CompareType, value CompareType) bool {
+func containsValue(values []compareResult, value compareResult) bool {
for _, v := range values {
if v == value {
return true
diff --git a/vendor/github.com/stretchr/testify/assert/assertion_format.go b/vendor/github.com/stretchr/testify/assert/assertion_format.go
index 3ddab109ad9..19063416577 100644
--- a/vendor/github.com/stretchr/testify/assert/assertion_format.go
+++ b/vendor/github.com/stretchr/testify/assert/assertion_format.go
@@ -104,8 +104,8 @@ func EqualExportedValuesf(t TestingT, expected interface{}, actual interface{},
return EqualExportedValues(t, expected, actual, append([]interface{}{msg}, args...)...)
}
-// EqualValuesf asserts that two objects are equal or convertible to the same types
-// and equal.
+// EqualValuesf asserts that two objects are equal or convertible to the larger
+// type and equal.
//
// assert.EqualValuesf(t, uint32(123), int32(123), "error message %s", "formatted")
func EqualValuesf(t TestingT, expected interface{}, actual interface{}, msg string, args ...interface{}) bool {
@@ -186,7 +186,7 @@ func Eventuallyf(t TestingT, condition func() bool, waitFor time.Duration, tick
// assert.EventuallyWithTf(t, func(c *assert.CollectT, "error message %s", "formatted") {
// // add assertions as needed; any assertion failure will fail the current tick
// assert.True(c, externalValue, "expected 'externalValue' to be true")
-// }, 1*time.Second, 10*time.Second, "external state has not changed to 'true'; still false")
+// }, 10*time.Second, 1*time.Second, "external state has not changed to 'true'; still false")
func EventuallyWithTf(t TestingT, condition func(collect *CollectT), waitFor time.Duration, tick time.Duration, msg string, args ...interface{}) bool {
if h, ok := t.(tHelper); ok {
h.Helper()
@@ -568,6 +568,23 @@ func NotContainsf(t TestingT, s interface{}, contains interface{}, msg string, a
return NotContains(t, s, contains, append([]interface{}{msg}, args...)...)
}
+// NotElementsMatchf asserts that the specified listA(array, slice...) is NOT equal to specified
+// listB(array, slice...) ignoring the order of the elements. If there are duplicate elements,
+// the number of appearances of each of them in both lists should not match.
+// This is an inverse of ElementsMatch.
+//
+// assert.NotElementsMatchf(t, [1, 1, 2, 3], [1, 1, 2, 3], "error message %s", "formatted") -> false
+//
+// assert.NotElementsMatchf(t, [1, 1, 2, 3], [1, 2, 3], "error message %s", "formatted") -> true
+//
+// assert.NotElementsMatchf(t, [1, 2, 3], [1, 2, 4], "error message %s", "formatted") -> true
+func NotElementsMatchf(t TestingT, listA interface{}, listB interface{}, msg string, args ...interface{}) bool {
+ if h, ok := t.(tHelper); ok {
+ h.Helper()
+ }
+ return NotElementsMatch(t, listA, listB, append([]interface{}{msg}, args...)...)
+}
+
// NotEmptyf asserts that the specified object is NOT empty. I.e. not nil, "", false, 0 or either
// a slice or a channel with len == 0.
//
@@ -604,7 +621,16 @@ func NotEqualValuesf(t TestingT, expected interface{}, actual interface{}, msg s
return NotEqualValues(t, expected, actual, append([]interface{}{msg}, args...)...)
}
-// NotErrorIsf asserts that at none of the errors in err's chain matches target.
+// NotErrorAsf asserts that none of the errors in err's chain matches target,
+// but if so, sets target to that error value.
+func NotErrorAsf(t TestingT, err error, target interface{}, msg string, args ...interface{}) bool {
+ if h, ok := t.(tHelper); ok {
+ h.Helper()
+ }
+ return NotErrorAs(t, err, target, append([]interface{}{msg}, args...)...)
+}
+
+// NotErrorIsf asserts that none of the errors in err's chain matches target.
// This is a wrapper for errors.Is.
func NotErrorIsf(t TestingT, err error, target error, msg string, args ...interface{}) bool {
if h, ok := t.(tHelper); ok {
diff --git a/vendor/github.com/stretchr/testify/assert/assertion_forward.go b/vendor/github.com/stretchr/testify/assert/assertion_forward.go
index a84e09bd409..21629087baf 100644
--- a/vendor/github.com/stretchr/testify/assert/assertion_forward.go
+++ b/vendor/github.com/stretchr/testify/assert/assertion_forward.go
@@ -186,8 +186,8 @@ func (a *Assertions) EqualExportedValuesf(expected interface{}, actual interface
return EqualExportedValuesf(a.t, expected, actual, msg, args...)
}
-// EqualValues asserts that two objects are equal or convertible to the same types
-// and equal.
+// EqualValues asserts that two objects are equal or convertible to the larger
+// type and equal.
//
// a.EqualValues(uint32(123), int32(123))
func (a *Assertions) EqualValues(expected interface{}, actual interface{}, msgAndArgs ...interface{}) bool {
@@ -197,8 +197,8 @@ func (a *Assertions) EqualValues(expected interface{}, actual interface{}, msgAn
return EqualValues(a.t, expected, actual, msgAndArgs...)
}
-// EqualValuesf asserts that two objects are equal or convertible to the same types
-// and equal.
+// EqualValuesf asserts that two objects are equal or convertible to the larger
+// type and equal.
//
// a.EqualValuesf(uint32(123), int32(123), "error message %s", "formatted")
func (a *Assertions) EqualValuesf(expected interface{}, actual interface{}, msg string, args ...interface{}) bool {
@@ -336,7 +336,7 @@ func (a *Assertions) Eventually(condition func() bool, waitFor time.Duration, ti
// a.EventuallyWithT(func(c *assert.CollectT) {
// // add assertions as needed; any assertion failure will fail the current tick
// assert.True(c, externalValue, "expected 'externalValue' to be true")
-// }, 1*time.Second, 10*time.Second, "external state has not changed to 'true'; still false")
+// }, 10*time.Second, 1*time.Second, "external state has not changed to 'true'; still false")
func (a *Assertions) EventuallyWithT(condition func(collect *CollectT), waitFor time.Duration, tick time.Duration, msgAndArgs ...interface{}) bool {
if h, ok := a.t.(tHelper); ok {
h.Helper()
@@ -361,7 +361,7 @@ func (a *Assertions) EventuallyWithT(condition func(collect *CollectT), waitFor
// a.EventuallyWithTf(func(c *assert.CollectT, "error message %s", "formatted") {
// // add assertions as needed; any assertion failure will fail the current tick
// assert.True(c, externalValue, "expected 'externalValue' to be true")
-// }, 1*time.Second, 10*time.Second, "external state has not changed to 'true'; still false")
+// }, 10*time.Second, 1*time.Second, "external state has not changed to 'true'; still false")
func (a *Assertions) EventuallyWithTf(condition func(collect *CollectT), waitFor time.Duration, tick time.Duration, msg string, args ...interface{}) bool {
if h, ok := a.t.(tHelper); ok {
h.Helper()
@@ -1128,6 +1128,40 @@ func (a *Assertions) NotContainsf(s interface{}, contains interface{}, msg strin
return NotContainsf(a.t, s, contains, msg, args...)
}
+// NotElementsMatch asserts that the specified listA(array, slice...) is NOT equal to specified
+// listB(array, slice...) ignoring the order of the elements. If there are duplicate elements,
+// the number of appearances of each of them in both lists should not match.
+// This is an inverse of ElementsMatch.
+//
+// a.NotElementsMatch([1, 1, 2, 3], [1, 1, 2, 3]) -> false
+//
+// a.NotElementsMatch([1, 1, 2, 3], [1, 2, 3]) -> true
+//
+// a.NotElementsMatch([1, 2, 3], [1, 2, 4]) -> true
+func (a *Assertions) NotElementsMatch(listA interface{}, listB interface{}, msgAndArgs ...interface{}) bool {
+ if h, ok := a.t.(tHelper); ok {
+ h.Helper()
+ }
+ return NotElementsMatch(a.t, listA, listB, msgAndArgs...)
+}
+
+// NotElementsMatchf asserts that the specified listA(array, slice...) is NOT equal to specified
+// listB(array, slice...) ignoring the order of the elements. If there are duplicate elements,
+// the number of appearances of each of them in both lists should not match.
+// This is an inverse of ElementsMatch.
+//
+// a.NotElementsMatchf([1, 1, 2, 3], [1, 1, 2, 3], "error message %s", "formatted") -> false
+//
+// a.NotElementsMatchf([1, 1, 2, 3], [1, 2, 3], "error message %s", "formatted") -> true
+//
+// a.NotElementsMatchf([1, 2, 3], [1, 2, 4], "error message %s", "formatted") -> true
+func (a *Assertions) NotElementsMatchf(listA interface{}, listB interface{}, msg string, args ...interface{}) bool {
+ if h, ok := a.t.(tHelper); ok {
+ h.Helper()
+ }
+ return NotElementsMatchf(a.t, listA, listB, msg, args...)
+}
+
// NotEmpty asserts that the specified object is NOT empty. I.e. not nil, "", false, 0 or either
// a slice or a channel with len == 0.
//
@@ -1200,7 +1234,25 @@ func (a *Assertions) NotEqualf(expected interface{}, actual interface{}, msg str
return NotEqualf(a.t, expected, actual, msg, args...)
}
-// NotErrorIs asserts that at none of the errors in err's chain matches target.
+// NotErrorAs asserts that none of the errors in err's chain matches target,
+// but if so, sets target to that error value.
+func (a *Assertions) NotErrorAs(err error, target interface{}, msgAndArgs ...interface{}) bool {
+ if h, ok := a.t.(tHelper); ok {
+ h.Helper()
+ }
+ return NotErrorAs(a.t, err, target, msgAndArgs...)
+}
+
+// NotErrorAsf asserts that none of the errors in err's chain matches target,
+// but if so, sets target to that error value.
+func (a *Assertions) NotErrorAsf(err error, target interface{}, msg string, args ...interface{}) bool {
+ if h, ok := a.t.(tHelper); ok {
+ h.Helper()
+ }
+ return NotErrorAsf(a.t, err, target, msg, args...)
+}
+
+// NotErrorIs asserts that none of the errors in err's chain matches target.
// This is a wrapper for errors.Is.
func (a *Assertions) NotErrorIs(err error, target error, msgAndArgs ...interface{}) bool {
if h, ok := a.t.(tHelper); ok {
@@ -1209,7 +1261,7 @@ func (a *Assertions) NotErrorIs(err error, target error, msgAndArgs ...interface
return NotErrorIs(a.t, err, target, msgAndArgs...)
}
-// NotErrorIsf asserts that at none of the errors in err's chain matches target.
+// NotErrorIsf asserts that none of the errors in err's chain matches target.
// This is a wrapper for errors.Is.
func (a *Assertions) NotErrorIsf(err error, target error, msg string, args ...interface{}) bool {
if h, ok := a.t.(tHelper); ok {
diff --git a/vendor/github.com/stretchr/testify/assert/assertion_order.go b/vendor/github.com/stretchr/testify/assert/assertion_order.go
index 00df62a0599..1d2f71824aa 100644
--- a/vendor/github.com/stretchr/testify/assert/assertion_order.go
+++ b/vendor/github.com/stretchr/testify/assert/assertion_order.go
@@ -6,7 +6,7 @@ import (
)
// isOrdered checks that collection contains orderable elements.
-func isOrdered(t TestingT, object interface{}, allowedComparesResults []CompareType, failMessage string, msgAndArgs ...interface{}) bool {
+func isOrdered(t TestingT, object interface{}, allowedComparesResults []compareResult, failMessage string, msgAndArgs ...interface{}) bool {
objKind := reflect.TypeOf(object).Kind()
if objKind != reflect.Slice && objKind != reflect.Array {
return false
@@ -50,7 +50,7 @@ func isOrdered(t TestingT, object interface{}, allowedComparesResults []CompareT
// assert.IsIncreasing(t, []float{1, 2})
// assert.IsIncreasing(t, []string{"a", "b"})
func IsIncreasing(t TestingT, object interface{}, msgAndArgs ...interface{}) bool {
- return isOrdered(t, object, []CompareType{compareLess}, "\"%v\" is not less than \"%v\"", msgAndArgs...)
+ return isOrdered(t, object, []compareResult{compareLess}, "\"%v\" is not less than \"%v\"", msgAndArgs...)
}
// IsNonIncreasing asserts that the collection is not increasing
@@ -59,7 +59,7 @@ func IsIncreasing(t TestingT, object interface{}, msgAndArgs ...interface{}) boo
// assert.IsNonIncreasing(t, []float{2, 1})
// assert.IsNonIncreasing(t, []string{"b", "a"})
func IsNonIncreasing(t TestingT, object interface{}, msgAndArgs ...interface{}) bool {
- return isOrdered(t, object, []CompareType{compareEqual, compareGreater}, "\"%v\" is not greater than or equal to \"%v\"", msgAndArgs...)
+ return isOrdered(t, object, []compareResult{compareEqual, compareGreater}, "\"%v\" is not greater than or equal to \"%v\"", msgAndArgs...)
}
// IsDecreasing asserts that the collection is decreasing
@@ -68,7 +68,7 @@ func IsNonIncreasing(t TestingT, object interface{}, msgAndArgs ...interface{})
// assert.IsDecreasing(t, []float{2, 1})
// assert.IsDecreasing(t, []string{"b", "a"})
func IsDecreasing(t TestingT, object interface{}, msgAndArgs ...interface{}) bool {
- return isOrdered(t, object, []CompareType{compareGreater}, "\"%v\" is not greater than \"%v\"", msgAndArgs...)
+ return isOrdered(t, object, []compareResult{compareGreater}, "\"%v\" is not greater than \"%v\"", msgAndArgs...)
}
// IsNonDecreasing asserts that the collection is not decreasing
@@ -77,5 +77,5 @@ func IsDecreasing(t TestingT, object interface{}, msgAndArgs ...interface{}) boo
// assert.IsNonDecreasing(t, []float{1, 2})
// assert.IsNonDecreasing(t, []string{"a", "b"})
func IsNonDecreasing(t TestingT, object interface{}, msgAndArgs ...interface{}) bool {
- return isOrdered(t, object, []CompareType{compareLess, compareEqual}, "\"%v\" is not less than or equal to \"%v\"", msgAndArgs...)
+ return isOrdered(t, object, []compareResult{compareLess, compareEqual}, "\"%v\" is not less than or equal to \"%v\"", msgAndArgs...)
}
diff --git a/vendor/github.com/stretchr/testify/assert/assertions.go b/vendor/github.com/stretchr/testify/assert/assertions.go
index 0b7570f21c6..4e91332bb51 100644
--- a/vendor/github.com/stretchr/testify/assert/assertions.go
+++ b/vendor/github.com/stretchr/testify/assert/assertions.go
@@ -19,7 +19,9 @@ import (
"github.com/davecgh/go-spew/spew"
"github.com/pmezard/go-difflib/difflib"
- "gopkg.in/yaml.v3"
+
+ // Wrapper around gopkg.in/yaml.v3
+ "github.com/stretchr/testify/assert/yaml"
)
//go:generate sh -c "cd ../_codegen && go build && cd - && ../_codegen/_codegen -output-package=assert -template=assertion_format.go.tmpl"
@@ -45,6 +47,10 @@ type BoolAssertionFunc func(TestingT, bool, ...interface{}) bool
// for table driven tests.
type ErrorAssertionFunc func(TestingT, error, ...interface{}) bool
+// PanicAssertionFunc is a common function prototype when validating a panic value. Can be useful
+// for table driven tests.
+type PanicAssertionFunc = func(t TestingT, f PanicTestFunc, msgAndArgs ...interface{}) bool
+
// Comparison is a custom function that returns true on success and false on failure
type Comparison func() (success bool)
@@ -496,7 +502,13 @@ func Same(t TestingT, expected, actual interface{}, msgAndArgs ...interface{}) b
h.Helper()
}
- if !samePointers(expected, actual) {
+ same, ok := samePointers(expected, actual)
+ if !ok {
+ return Fail(t, "Both arguments must be pointers", msgAndArgs...)
+ }
+
+ if !same {
+ // both are pointers but not the same type & pointing to the same address
return Fail(t, fmt.Sprintf("Not same: \n"+
"expected: %p %#v\n"+
"actual : %p %#v", expected, expected, actual, actual), msgAndArgs...)
@@ -516,7 +528,13 @@ func NotSame(t TestingT, expected, actual interface{}, msgAndArgs ...interface{}
h.Helper()
}
- if samePointers(expected, actual) {
+ same, ok := samePointers(expected, actual)
+ if !ok {
+ //fails when the arguments are not pointers
+ return !(Fail(t, "Both arguments must be pointers", msgAndArgs...))
+ }
+
+ if same {
return Fail(t, fmt.Sprintf(
"Expected and actual point to the same object: %p %#v",
expected, expected), msgAndArgs...)
@@ -524,21 +542,23 @@ func NotSame(t TestingT, expected, actual interface{}, msgAndArgs ...interface{}
return true
}
-// samePointers compares two generic interface objects and returns whether
-// they point to the same object
-func samePointers(first, second interface{}) bool {
+// samePointers checks if two generic interface objects are pointers of the same
+// type pointing to the same object. It returns two values: same indicating if
+// they are the same type and point to the same object, and ok indicating that
+// both inputs are pointers.
+func samePointers(first, second interface{}) (same bool, ok bool) {
firstPtr, secondPtr := reflect.ValueOf(first), reflect.ValueOf(second)
if firstPtr.Kind() != reflect.Ptr || secondPtr.Kind() != reflect.Ptr {
- return false
+ return false, false //not both are pointers
}
firstType, secondType := reflect.TypeOf(first), reflect.TypeOf(second)
if firstType != secondType {
- return false
+ return false, true // both are pointers, but of different types
}
// compare pointer addresses
- return first == second
+ return first == second, true
}
// formatUnequalValues takes two values of arbitrary types and returns string
@@ -572,8 +592,8 @@ func truncatingFormat(data interface{}) string {
return value
}
-// EqualValues asserts that two objects are equal or convertible to the same types
-// and equal.
+// EqualValues asserts that two objects are equal or convertible to the larger
+// type and equal.
//
// assert.EqualValues(t, uint32(123), int32(123))
func EqualValues(t TestingT, expected, actual interface{}, msgAndArgs ...interface{}) bool {
@@ -615,21 +635,6 @@ func EqualExportedValues(t TestingT, expected, actual interface{}, msgAndArgs ..
return Fail(t, fmt.Sprintf("Types expected to match exactly\n\t%v != %v", aType, bType), msgAndArgs...)
}
- if aType.Kind() == reflect.Ptr {
- aType = aType.Elem()
- }
- if bType.Kind() == reflect.Ptr {
- bType = bType.Elem()
- }
-
- if aType.Kind() != reflect.Struct {
- return Fail(t, fmt.Sprintf("Types expected to both be struct or pointer to struct \n\t%v != %v", aType.Kind(), reflect.Struct), msgAndArgs...)
- }
-
- if bType.Kind() != reflect.Struct {
- return Fail(t, fmt.Sprintf("Types expected to both be struct or pointer to struct \n\t%v != %v", bType.Kind(), reflect.Struct), msgAndArgs...)
- }
-
expected = copyExportedFields(expected)
actual = copyExportedFields(actual)
@@ -1170,6 +1175,39 @@ func formatListDiff(listA, listB interface{}, extraA, extraB []interface{}) stri
return msg.String()
}
+// NotElementsMatch asserts that the specified listA(array, slice...) is NOT equal to specified
+// listB(array, slice...) ignoring the order of the elements. If there are duplicate elements,
+// the number of appearances of each of them in both lists should not match.
+// This is an inverse of ElementsMatch.
+//
+// assert.NotElementsMatch(t, [1, 1, 2, 3], [1, 1, 2, 3]) -> false
+//
+// assert.NotElementsMatch(t, [1, 1, 2, 3], [1, 2, 3]) -> true
+//
+// assert.NotElementsMatch(t, [1, 2, 3], [1, 2, 4]) -> true
+func NotElementsMatch(t TestingT, listA, listB interface{}, msgAndArgs ...interface{}) (ok bool) {
+ if h, ok := t.(tHelper); ok {
+ h.Helper()
+ }
+ if isEmpty(listA) && isEmpty(listB) {
+ return Fail(t, "listA and listB contain the same elements", msgAndArgs)
+ }
+
+ if !isList(t, listA, msgAndArgs...) {
+ return Fail(t, "listA is not a list type", msgAndArgs...)
+ }
+ if !isList(t, listB, msgAndArgs...) {
+ return Fail(t, "listB is not a list type", msgAndArgs...)
+ }
+
+ extraA, extraB := diffLists(listA, listB)
+ if len(extraA) == 0 && len(extraB) == 0 {
+ return Fail(t, "listA and listB contain the same elements", msgAndArgs)
+ }
+
+ return true
+}
+
// Condition uses a Comparison to assert a complex condition.
func Condition(t TestingT, comp Comparison, msgAndArgs ...interface{}) bool {
if h, ok := t.(tHelper); ok {
@@ -1488,6 +1526,9 @@ func InEpsilon(t TestingT, expected, actual interface{}, epsilon float64, msgAnd
if err != nil {
return Fail(t, err.Error(), msgAndArgs...)
}
+ if math.IsNaN(actualEpsilon) {
+ return Fail(t, "relative error is NaN", msgAndArgs...)
+ }
if actualEpsilon > epsilon {
return Fail(t, fmt.Sprintf("Relative error is too high: %#v (expected)\n"+
" < %#v (actual)", epsilon, actualEpsilon), msgAndArgs...)
@@ -1611,7 +1652,6 @@ func ErrorContains(t TestingT, theError error, contains string, msgAndArgs ...in
// matchRegexp return true if a specified regexp matches a string.
func matchRegexp(rx interface{}, str interface{}) bool {
-
var r *regexp.Regexp
if rr, ok := rx.(*regexp.Regexp); ok {
r = rr
@@ -1619,7 +1659,14 @@ func matchRegexp(rx interface{}, str interface{}) bool {
r = regexp.MustCompile(fmt.Sprint(rx))
}
- return (r.FindStringIndex(fmt.Sprint(str)) != nil)
+ switch v := str.(type) {
+ case []byte:
+ return r.Match(v)
+ case string:
+ return r.MatchString(v)
+ default:
+ return r.MatchString(fmt.Sprint(v))
+ }
}
@@ -1872,7 +1919,7 @@ var spewConfigStringerEnabled = spew.ConfigState{
MaxDepth: 10,
}
-type tHelper interface {
+type tHelper = interface {
Helper()
}
@@ -1911,6 +1958,9 @@ func Eventually(t TestingT, condition func() bool, waitFor time.Duration, tick t
// CollectT implements the TestingT interface and collects all errors.
type CollectT struct {
+ // A slice of errors. Non-nil slice denotes a failure.
+ // If it's non-nil but len(c.errors) == 0, this is also a failure
+ // obtained by direct c.FailNow() call.
errors []error
}
@@ -1919,9 +1969,10 @@ func (c *CollectT) Errorf(format string, args ...interface{}) {
c.errors = append(c.errors, fmt.Errorf(format, args...))
}
-// FailNow panics.
-func (*CollectT) FailNow() {
- panic("Assertion failed")
+// FailNow stops execution by calling runtime.Goexit.
+func (c *CollectT) FailNow() {
+ c.fail()
+ runtime.Goexit()
}
// Deprecated: That was a method for internal usage that should not have been published. Now just panics.
@@ -1934,6 +1985,16 @@ func (*CollectT) Copy(TestingT) {
panic("Copy() is deprecated")
}
+func (c *CollectT) fail() {
+ if !c.failed() {
+ c.errors = []error{} // Make it non-nil to mark a failure.
+ }
+}
+
+func (c *CollectT) failed() bool {
+ return c.errors != nil
+}
+
// EventuallyWithT asserts that given condition will be met in waitFor time,
// periodically checking target function each tick. In contrast to Eventually,
// it supplies a CollectT to the condition function, so that the condition
@@ -1951,14 +2012,14 @@ func (*CollectT) Copy(TestingT) {
// assert.EventuallyWithT(t, func(c *assert.CollectT) {
// // add assertions as needed; any assertion failure will fail the current tick
// assert.True(c, externalValue, "expected 'externalValue' to be true")
-// }, 1*time.Second, 10*time.Second, "external state has not changed to 'true'; still false")
+// }, 10*time.Second, 1*time.Second, "external state has not changed to 'true'; still false")
func EventuallyWithT(t TestingT, condition func(collect *CollectT), waitFor time.Duration, tick time.Duration, msgAndArgs ...interface{}) bool {
if h, ok := t.(tHelper); ok {
h.Helper()
}
var lastFinishedTickErrs []error
- ch := make(chan []error, 1)
+ ch := make(chan *CollectT, 1)
timer := time.NewTimer(waitFor)
defer timer.Stop()
@@ -1978,16 +2039,16 @@ func EventuallyWithT(t TestingT, condition func(collect *CollectT), waitFor time
go func() {
collect := new(CollectT)
defer func() {
- ch <- collect.errors
+ ch <- collect
}()
condition(collect)
}()
- case errs := <-ch:
- if len(errs) == 0 {
+ case collect := <-ch:
+ if !collect.failed() {
return true
}
// Keep the errors from the last ended condition, so that they can be copied to t if timeout is reached.
- lastFinishedTickErrs = errs
+ lastFinishedTickErrs = collect.errors
tick = ticker.C
}
}
@@ -2049,7 +2110,7 @@ func ErrorIs(t TestingT, err, target error, msgAndArgs ...interface{}) bool {
), msgAndArgs...)
}
-// NotErrorIs asserts that at none of the errors in err's chain matches target.
+// NotErrorIs asserts that none of the errors in err's chain matches target.
// This is a wrapper for errors.Is.
func NotErrorIs(t TestingT, err, target error, msgAndArgs ...interface{}) bool {
if h, ok := t.(tHelper); ok {
@@ -2090,6 +2151,24 @@ func ErrorAs(t TestingT, err error, target interface{}, msgAndArgs ...interface{
), msgAndArgs...)
}
+// NotErrorAs asserts that none of the errors in err's chain matches target,
+// but if so, sets target to that error value.
+func NotErrorAs(t TestingT, err error, target interface{}, msgAndArgs ...interface{}) bool {
+ if h, ok := t.(tHelper); ok {
+ h.Helper()
+ }
+ if !errors.As(err, target) {
+ return true
+ }
+
+ chain := buildErrorChainString(err)
+
+ return Fail(t, fmt.Sprintf("Target error should not be in err chain:\n"+
+ "found: %q\n"+
+ "in chain: %s", target, chain,
+ ), msgAndArgs...)
+}
+
func buildErrorChainString(err error) string {
if err == nil {
return ""
diff --git a/vendor/github.com/stretchr/testify/assert/yaml/yaml_custom.go b/vendor/github.com/stretchr/testify/assert/yaml/yaml_custom.go
new file mode 100644
index 00000000000..baa0cc7d7fc
--- /dev/null
+++ b/vendor/github.com/stretchr/testify/assert/yaml/yaml_custom.go
@@ -0,0 +1,25 @@
+//go:build testify_yaml_custom && !testify_yaml_fail && !testify_yaml_default
+// +build testify_yaml_custom,!testify_yaml_fail,!testify_yaml_default
+
+// Package yaml is an implementation of YAML functions that calls a pluggable implementation.
+//
+// This implementation is selected with the testify_yaml_custom build tag.
+//
+// go test -tags testify_yaml_custom
+//
+// This implementation can be used at build time to replace the default implementation
+// to avoid linking with [gopkg.in/yaml.v3].
+//
+// In your test package:
+//
+// import assertYaml "github.com/stretchr/testify/assert/yaml"
+//
+// func init() {
+// assertYaml.Unmarshal = func (in []byte, out interface{}) error {
+// // ...
+// return nil
+// }
+// }
+package yaml
+
+var Unmarshal func(in []byte, out interface{}) error
diff --git a/vendor/github.com/stretchr/testify/assert/yaml/yaml_default.go b/vendor/github.com/stretchr/testify/assert/yaml/yaml_default.go
new file mode 100644
index 00000000000..b83c6cf64c2
--- /dev/null
+++ b/vendor/github.com/stretchr/testify/assert/yaml/yaml_default.go
@@ -0,0 +1,37 @@
+//go:build !testify_yaml_fail && !testify_yaml_custom
+// +build !testify_yaml_fail,!testify_yaml_custom
+
+// Package yaml is just an indirection to handle YAML deserialization.
+//
+// This package is just an indirection that allows the builder to override the
+// indirection with an alternative implementation of this package that uses
+// another implementation of YAML deserialization. This allows to not either not
+// use YAML deserialization at all, or to use another implementation than
+// [gopkg.in/yaml.v3] (for example for license compatibility reasons, see [PR #1120]).
+//
+// Alternative implementations are selected using build tags:
+//
+// - testify_yaml_fail: [Unmarshal] always fails with an error
+// - testify_yaml_custom: [Unmarshal] is a variable. Caller must initialize it
+// before calling any of [github.com/stretchr/testify/assert.YAMLEq] or
+// [github.com/stretchr/testify/assert.YAMLEqf].
+//
+// Usage:
+//
+// go test -tags testify_yaml_fail
+//
+// You can check with "go list" which implementation is linked:
+//
+// go list -f '{{.Imports}}' github.com/stretchr/testify/assert/yaml
+// go list -tags testify_yaml_fail -f '{{.Imports}}' github.com/stretchr/testify/assert/yaml
+// go list -tags testify_yaml_custom -f '{{.Imports}}' github.com/stretchr/testify/assert/yaml
+//
+// [PR #1120]: https://github.com/stretchr/testify/pull/1120
+package yaml
+
+import goyaml "gopkg.in/yaml.v3"
+
+// Unmarshal is just a wrapper of [gopkg.in/yaml.v3.Unmarshal].
+func Unmarshal(in []byte, out interface{}) error {
+ return goyaml.Unmarshal(in, out)
+}
diff --git a/vendor/github.com/stretchr/testify/assert/yaml/yaml_fail.go b/vendor/github.com/stretchr/testify/assert/yaml/yaml_fail.go
new file mode 100644
index 00000000000..e78f7dfe69a
--- /dev/null
+++ b/vendor/github.com/stretchr/testify/assert/yaml/yaml_fail.go
@@ -0,0 +1,18 @@
+//go:build testify_yaml_fail && !testify_yaml_custom && !testify_yaml_default
+// +build testify_yaml_fail,!testify_yaml_custom,!testify_yaml_default
+
+// Package yaml is an implementation of YAML functions that always fail.
+//
+// This implementation can be used at build time to replace the default implementation
+// to avoid linking with [gopkg.in/yaml.v3]:
+//
+// go test -tags testify_yaml_fail
+package yaml
+
+import "errors"
+
+var errNotImplemented = errors.New("YAML functions are not available (see https://pkg.go.dev/github.com/stretchr/testify/assert/yaml)")
+
+func Unmarshal([]byte, interface{}) error {
+ return errNotImplemented
+}
diff --git a/vendor/github.com/stretchr/testify/require/require.go b/vendor/github.com/stretchr/testify/require/require.go
index 506a82f8077..d8921950d7b 100644
--- a/vendor/github.com/stretchr/testify/require/require.go
+++ b/vendor/github.com/stretchr/testify/require/require.go
@@ -34,9 +34,9 @@ func Conditionf(t TestingT, comp assert.Comparison, msg string, args ...interfac
// Contains asserts that the specified string, list(array, slice...) or map contains the
// specified substring or element.
//
-// assert.Contains(t, "Hello World", "World")
-// assert.Contains(t, ["Hello", "World"], "World")
-// assert.Contains(t, {"Hello": "World"}, "Hello")
+// require.Contains(t, "Hello World", "World")
+// require.Contains(t, ["Hello", "World"], "World")
+// require.Contains(t, {"Hello": "World"}, "Hello")
func Contains(t TestingT, s interface{}, contains interface{}, msgAndArgs ...interface{}) {
if h, ok := t.(tHelper); ok {
h.Helper()
@@ -50,9 +50,9 @@ func Contains(t TestingT, s interface{}, contains interface{}, msgAndArgs ...int
// Containsf asserts that the specified string, list(array, slice...) or map contains the
// specified substring or element.
//
-// assert.Containsf(t, "Hello World", "World", "error message %s", "formatted")
-// assert.Containsf(t, ["Hello", "World"], "World", "error message %s", "formatted")
-// assert.Containsf(t, {"Hello": "World"}, "Hello", "error message %s", "formatted")
+// require.Containsf(t, "Hello World", "World", "error message %s", "formatted")
+// require.Containsf(t, ["Hello", "World"], "World", "error message %s", "formatted")
+// require.Containsf(t, {"Hello": "World"}, "Hello", "error message %s", "formatted")
func Containsf(t TestingT, s interface{}, contains interface{}, msg string, args ...interface{}) {
if h, ok := t.(tHelper); ok {
h.Helper()
@@ -91,7 +91,7 @@ func DirExistsf(t TestingT, path string, msg string, args ...interface{}) {
// listB(array, slice...) ignoring the order of the elements. If there are duplicate elements,
// the number of appearances of each of them in both lists should match.
//
-// assert.ElementsMatch(t, [1, 3, 2, 3], [1, 3, 3, 2])
+// require.ElementsMatch(t, [1, 3, 2, 3], [1, 3, 3, 2])
func ElementsMatch(t TestingT, listA interface{}, listB interface{}, msgAndArgs ...interface{}) {
if h, ok := t.(tHelper); ok {
h.Helper()
@@ -106,7 +106,7 @@ func ElementsMatch(t TestingT, listA interface{}, listB interface{}, msgAndArgs
// listB(array, slice...) ignoring the order of the elements. If there are duplicate elements,
// the number of appearances of each of them in both lists should match.
//
-// assert.ElementsMatchf(t, [1, 3, 2, 3], [1, 3, 3, 2], "error message %s", "formatted")
+// require.ElementsMatchf(t, [1, 3, 2, 3], [1, 3, 3, 2], "error message %s", "formatted")
func ElementsMatchf(t TestingT, listA interface{}, listB interface{}, msg string, args ...interface{}) {
if h, ok := t.(tHelper); ok {
h.Helper()
@@ -120,7 +120,7 @@ func ElementsMatchf(t TestingT, listA interface{}, listB interface{}, msg string
// Empty asserts that the specified object is empty. I.e. nil, "", false, 0 or either
// a slice or a channel with len == 0.
//
-// assert.Empty(t, obj)
+// require.Empty(t, obj)
func Empty(t TestingT, object interface{}, msgAndArgs ...interface{}) {
if h, ok := t.(tHelper); ok {
h.Helper()
@@ -134,7 +134,7 @@ func Empty(t TestingT, object interface{}, msgAndArgs ...interface{}) {
// Emptyf asserts that the specified object is empty. I.e. nil, "", false, 0 or either
// a slice or a channel with len == 0.
//
-// assert.Emptyf(t, obj, "error message %s", "formatted")
+// require.Emptyf(t, obj, "error message %s", "formatted")
func Emptyf(t TestingT, object interface{}, msg string, args ...interface{}) {
if h, ok := t.(tHelper); ok {
h.Helper()
@@ -147,7 +147,7 @@ func Emptyf(t TestingT, object interface{}, msg string, args ...interface{}) {
// Equal asserts that two objects are equal.
//
-// assert.Equal(t, 123, 123)
+// require.Equal(t, 123, 123)
//
// Pointer variable equality is determined based on the equality of the
// referenced values (as opposed to the memory addresses). Function equality
@@ -166,7 +166,7 @@ func Equal(t TestingT, expected interface{}, actual interface{}, msgAndArgs ...i
// and that it is equal to the provided error.
//
// actualObj, err := SomeFunction()
-// assert.EqualError(t, err, expectedErrorString)
+// require.EqualError(t, err, expectedErrorString)
func EqualError(t TestingT, theError error, errString string, msgAndArgs ...interface{}) {
if h, ok := t.(tHelper); ok {
h.Helper()
@@ -181,7 +181,7 @@ func EqualError(t TestingT, theError error, errString string, msgAndArgs ...inte
// and that it is equal to the provided error.
//
// actualObj, err := SomeFunction()
-// assert.EqualErrorf(t, err, expectedErrorString, "error message %s", "formatted")
+// require.EqualErrorf(t, err, expectedErrorString, "error message %s", "formatted")
func EqualErrorf(t TestingT, theError error, errString string, msg string, args ...interface{}) {
if h, ok := t.(tHelper); ok {
h.Helper()
@@ -200,8 +200,8 @@ func EqualErrorf(t TestingT, theError error, errString string, msg string, args
// Exported int
// notExported int
// }
-// assert.EqualExportedValues(t, S{1, 2}, S{1, 3}) => true
-// assert.EqualExportedValues(t, S{1, 2}, S{2, 3}) => false
+// require.EqualExportedValues(t, S{1, 2}, S{1, 3}) => true
+// require.EqualExportedValues(t, S{1, 2}, S{2, 3}) => false
func EqualExportedValues(t TestingT, expected interface{}, actual interface{}, msgAndArgs ...interface{}) {
if h, ok := t.(tHelper); ok {
h.Helper()
@@ -220,8 +220,8 @@ func EqualExportedValues(t TestingT, expected interface{}, actual interface{}, m
// Exported int
// notExported int
// }
-// assert.EqualExportedValuesf(t, S{1, 2}, S{1, 3}, "error message %s", "formatted") => true
-// assert.EqualExportedValuesf(t, S{1, 2}, S{2, 3}, "error message %s", "formatted") => false
+// require.EqualExportedValuesf(t, S{1, 2}, S{1, 3}, "error message %s", "formatted") => true
+// require.EqualExportedValuesf(t, S{1, 2}, S{2, 3}, "error message %s", "formatted") => false
func EqualExportedValuesf(t TestingT, expected interface{}, actual interface{}, msg string, args ...interface{}) {
if h, ok := t.(tHelper); ok {
h.Helper()
@@ -232,10 +232,10 @@ func EqualExportedValuesf(t TestingT, expected interface{}, actual interface{},
t.FailNow()
}
-// EqualValues asserts that two objects are equal or convertible to the same types
-// and equal.
+// EqualValues asserts that two objects are equal or convertible to the larger
+// type and equal.
//
-// assert.EqualValues(t, uint32(123), int32(123))
+// require.EqualValues(t, uint32(123), int32(123))
func EqualValues(t TestingT, expected interface{}, actual interface{}, msgAndArgs ...interface{}) {
if h, ok := t.(tHelper); ok {
h.Helper()
@@ -246,10 +246,10 @@ func EqualValues(t TestingT, expected interface{}, actual interface{}, msgAndArg
t.FailNow()
}
-// EqualValuesf asserts that two objects are equal or convertible to the same types
-// and equal.
+// EqualValuesf asserts that two objects are equal or convertible to the larger
+// type and equal.
//
-// assert.EqualValuesf(t, uint32(123), int32(123), "error message %s", "formatted")
+// require.EqualValuesf(t, uint32(123), int32(123), "error message %s", "formatted")
func EqualValuesf(t TestingT, expected interface{}, actual interface{}, msg string, args ...interface{}) {
if h, ok := t.(tHelper); ok {
h.Helper()
@@ -262,7 +262,7 @@ func EqualValuesf(t TestingT, expected interface{}, actual interface{}, msg stri
// Equalf asserts that two objects are equal.
//
-// assert.Equalf(t, 123, 123, "error message %s", "formatted")
+// require.Equalf(t, 123, 123, "error message %s", "formatted")
//
// Pointer variable equality is determined based on the equality of the
// referenced values (as opposed to the memory addresses). Function equality
@@ -280,8 +280,8 @@ func Equalf(t TestingT, expected interface{}, actual interface{}, msg string, ar
// Error asserts that a function returned an error (i.e. not `nil`).
//
// actualObj, err := SomeFunction()
-// if assert.Error(t, err) {
-// assert.Equal(t, expectedError, err)
+// if require.Error(t, err) {
+// require.Equal(t, expectedError, err)
// }
func Error(t TestingT, err error, msgAndArgs ...interface{}) {
if h, ok := t.(tHelper); ok {
@@ -321,7 +321,7 @@ func ErrorAsf(t TestingT, err error, target interface{}, msg string, args ...int
// and that the error contains the specified substring.
//
// actualObj, err := SomeFunction()
-// assert.ErrorContains(t, err, expectedErrorSubString)
+// require.ErrorContains(t, err, expectedErrorSubString)
func ErrorContains(t TestingT, theError error, contains string, msgAndArgs ...interface{}) {
if h, ok := t.(tHelper); ok {
h.Helper()
@@ -336,7 +336,7 @@ func ErrorContains(t TestingT, theError error, contains string, msgAndArgs ...in
// and that the error contains the specified substring.
//
// actualObj, err := SomeFunction()
-// assert.ErrorContainsf(t, err, expectedErrorSubString, "error message %s", "formatted")
+// require.ErrorContainsf(t, err, expectedErrorSubString, "error message %s", "formatted")
func ErrorContainsf(t TestingT, theError error, contains string, msg string, args ...interface{}) {
if h, ok := t.(tHelper); ok {
h.Helper()
@@ -374,8 +374,8 @@ func ErrorIsf(t TestingT, err error, target error, msg string, args ...interface
// Errorf asserts that a function returned an error (i.e. not `nil`).
//
// actualObj, err := SomeFunction()
-// if assert.Errorf(t, err, "error message %s", "formatted") {
-// assert.Equal(t, expectedErrorf, err)
+// if require.Errorf(t, err, "error message %s", "formatted") {
+// require.Equal(t, expectedErrorf, err)
// }
func Errorf(t TestingT, err error, msg string, args ...interface{}) {
if h, ok := t.(tHelper); ok {
@@ -390,7 +390,7 @@ func Errorf(t TestingT, err error, msg string, args ...interface{}) {
// Eventually asserts that given condition will be met in waitFor time,
// periodically checking target function each tick.
//
-// assert.Eventually(t, func() bool { return true; }, time.Second, 10*time.Millisecond)
+// require.Eventually(t, func() bool { return true; }, time.Second, 10*time.Millisecond)
func Eventually(t TestingT, condition func() bool, waitFor time.Duration, tick time.Duration, msgAndArgs ...interface{}) {
if h, ok := t.(tHelper); ok {
h.Helper()
@@ -415,10 +415,10 @@ func Eventually(t TestingT, condition func() bool, waitFor time.Duration, tick t
// time.Sleep(8*time.Second)
// externalValue = true
// }()
-// assert.EventuallyWithT(t, func(c *assert.CollectT) {
+// require.EventuallyWithT(t, func(c *require.CollectT) {
// // add assertions as needed; any assertion failure will fail the current tick
-// assert.True(c, externalValue, "expected 'externalValue' to be true")
-// }, 1*time.Second, 10*time.Second, "external state has not changed to 'true'; still false")
+// require.True(c, externalValue, "expected 'externalValue' to be true")
+// }, 10*time.Second, 1*time.Second, "external state has not changed to 'true'; still false")
func EventuallyWithT(t TestingT, condition func(collect *assert.CollectT), waitFor time.Duration, tick time.Duration, msgAndArgs ...interface{}) {
if h, ok := t.(tHelper); ok {
h.Helper()
@@ -443,10 +443,10 @@ func EventuallyWithT(t TestingT, condition func(collect *assert.CollectT), waitF
// time.Sleep(8*time.Second)
// externalValue = true
// }()
-// assert.EventuallyWithTf(t, func(c *assert.CollectT, "error message %s", "formatted") {
+// require.EventuallyWithTf(t, func(c *require.CollectT, "error message %s", "formatted") {
// // add assertions as needed; any assertion failure will fail the current tick
-// assert.True(c, externalValue, "expected 'externalValue' to be true")
-// }, 1*time.Second, 10*time.Second, "external state has not changed to 'true'; still false")
+// require.True(c, externalValue, "expected 'externalValue' to be true")
+// }, 10*time.Second, 1*time.Second, "external state has not changed to 'true'; still false")
func EventuallyWithTf(t TestingT, condition func(collect *assert.CollectT), waitFor time.Duration, tick time.Duration, msg string, args ...interface{}) {
if h, ok := t.(tHelper); ok {
h.Helper()
@@ -460,7 +460,7 @@ func EventuallyWithTf(t TestingT, condition func(collect *assert.CollectT), wait
// Eventuallyf asserts that given condition will be met in waitFor time,
// periodically checking target function each tick.
//
-// assert.Eventuallyf(t, func() bool { return true; }, time.Second, 10*time.Millisecond, "error message %s", "formatted")
+// require.Eventuallyf(t, func() bool { return true; }, time.Second, 10*time.Millisecond, "error message %s", "formatted")
func Eventuallyf(t TestingT, condition func() bool, waitFor time.Duration, tick time.Duration, msg string, args ...interface{}) {
if h, ok := t.(tHelper); ok {
h.Helper()
@@ -473,7 +473,7 @@ func Eventuallyf(t TestingT, condition func() bool, waitFor time.Duration, tick
// Exactly asserts that two objects are equal in value and type.
//
-// assert.Exactly(t, int32(123), int64(123))
+// require.Exactly(t, int32(123), int64(123))
func Exactly(t TestingT, expected interface{}, actual interface{}, msgAndArgs ...interface{}) {
if h, ok := t.(tHelper); ok {
h.Helper()
@@ -486,7 +486,7 @@ func Exactly(t TestingT, expected interface{}, actual interface{}, msgAndArgs ..
// Exactlyf asserts that two objects are equal in value and type.
//
-// assert.Exactlyf(t, int32(123), int64(123), "error message %s", "formatted")
+// require.Exactlyf(t, int32(123), int64(123), "error message %s", "formatted")
func Exactlyf(t TestingT, expected interface{}, actual interface{}, msg string, args ...interface{}) {
if h, ok := t.(tHelper); ok {
h.Helper()
@@ -543,7 +543,7 @@ func Failf(t TestingT, failureMessage string, msg string, args ...interface{}) {
// False asserts that the specified value is false.
//
-// assert.False(t, myBool)
+// require.False(t, myBool)
func False(t TestingT, value bool, msgAndArgs ...interface{}) {
if h, ok := t.(tHelper); ok {
h.Helper()
@@ -556,7 +556,7 @@ func False(t TestingT, value bool, msgAndArgs ...interface{}) {
// Falsef asserts that the specified value is false.
//
-// assert.Falsef(t, myBool, "error message %s", "formatted")
+// require.Falsef(t, myBool, "error message %s", "formatted")
func Falsef(t TestingT, value bool, msg string, args ...interface{}) {
if h, ok := t.(tHelper); ok {
h.Helper()
@@ -593,9 +593,9 @@ func FileExistsf(t TestingT, path string, msg string, args ...interface{}) {
// Greater asserts that the first element is greater than the second
//
-// assert.Greater(t, 2, 1)
-// assert.Greater(t, float64(2), float64(1))
-// assert.Greater(t, "b", "a")
+// require.Greater(t, 2, 1)
+// require.Greater(t, float64(2), float64(1))
+// require.Greater(t, "b", "a")
func Greater(t TestingT, e1 interface{}, e2 interface{}, msgAndArgs ...interface{}) {
if h, ok := t.(tHelper); ok {
h.Helper()
@@ -608,10 +608,10 @@ func Greater(t TestingT, e1 interface{}, e2 interface{}, msgAndArgs ...interface
// GreaterOrEqual asserts that the first element is greater than or equal to the second
//
-// assert.GreaterOrEqual(t, 2, 1)
-// assert.GreaterOrEqual(t, 2, 2)
-// assert.GreaterOrEqual(t, "b", "a")
-// assert.GreaterOrEqual(t, "b", "b")
+// require.GreaterOrEqual(t, 2, 1)
+// require.GreaterOrEqual(t, 2, 2)
+// require.GreaterOrEqual(t, "b", "a")
+// require.GreaterOrEqual(t, "b", "b")
func GreaterOrEqual(t TestingT, e1 interface{}, e2 interface{}, msgAndArgs ...interface{}) {
if h, ok := t.(tHelper); ok {
h.Helper()
@@ -624,10 +624,10 @@ func GreaterOrEqual(t TestingT, e1 interface{}, e2 interface{}, msgAndArgs ...in
// GreaterOrEqualf asserts that the first element is greater than or equal to the second
//
-// assert.GreaterOrEqualf(t, 2, 1, "error message %s", "formatted")
-// assert.GreaterOrEqualf(t, 2, 2, "error message %s", "formatted")
-// assert.GreaterOrEqualf(t, "b", "a", "error message %s", "formatted")
-// assert.GreaterOrEqualf(t, "b", "b", "error message %s", "formatted")
+// require.GreaterOrEqualf(t, 2, 1, "error message %s", "formatted")
+// require.GreaterOrEqualf(t, 2, 2, "error message %s", "formatted")
+// require.GreaterOrEqualf(t, "b", "a", "error message %s", "formatted")
+// require.GreaterOrEqualf(t, "b", "b", "error message %s", "formatted")
func GreaterOrEqualf(t TestingT, e1 interface{}, e2 interface{}, msg string, args ...interface{}) {
if h, ok := t.(tHelper); ok {
h.Helper()
@@ -640,9 +640,9 @@ func GreaterOrEqualf(t TestingT, e1 interface{}, e2 interface{}, msg string, arg
// Greaterf asserts that the first element is greater than the second
//
-// assert.Greaterf(t, 2, 1, "error message %s", "formatted")
-// assert.Greaterf(t, float64(2), float64(1), "error message %s", "formatted")
-// assert.Greaterf(t, "b", "a", "error message %s", "formatted")
+// require.Greaterf(t, 2, 1, "error message %s", "formatted")
+// require.Greaterf(t, float64(2), float64(1), "error message %s", "formatted")
+// require.Greaterf(t, "b", "a", "error message %s", "formatted")
func Greaterf(t TestingT, e1 interface{}, e2 interface{}, msg string, args ...interface{}) {
if h, ok := t.(tHelper); ok {
h.Helper()
@@ -656,7 +656,7 @@ func Greaterf(t TestingT, e1 interface{}, e2 interface{}, msg string, args ...in
// HTTPBodyContains asserts that a specified handler returns a
// body that contains a string.
//
-// assert.HTTPBodyContains(t, myHandler, "GET", "www.google.com", nil, "I'm Feeling Lucky")
+// require.HTTPBodyContains(t, myHandler, "GET", "www.google.com", nil, "I'm Feeling Lucky")
//
// Returns whether the assertion was successful (true) or not (false).
func HTTPBodyContains(t TestingT, handler http.HandlerFunc, method string, url string, values url.Values, str interface{}, msgAndArgs ...interface{}) {
@@ -672,7 +672,7 @@ func HTTPBodyContains(t TestingT, handler http.HandlerFunc, method string, url s
// HTTPBodyContainsf asserts that a specified handler returns a
// body that contains a string.
//
-// assert.HTTPBodyContainsf(t, myHandler, "GET", "www.google.com", nil, "I'm Feeling Lucky", "error message %s", "formatted")
+// require.HTTPBodyContainsf(t, myHandler, "GET", "www.google.com", nil, "I'm Feeling Lucky", "error message %s", "formatted")
//
// Returns whether the assertion was successful (true) or not (false).
func HTTPBodyContainsf(t TestingT, handler http.HandlerFunc, method string, url string, values url.Values, str interface{}, msg string, args ...interface{}) {
@@ -688,7 +688,7 @@ func HTTPBodyContainsf(t TestingT, handler http.HandlerFunc, method string, url
// HTTPBodyNotContains asserts that a specified handler returns a
// body that does not contain a string.
//
-// assert.HTTPBodyNotContains(t, myHandler, "GET", "www.google.com", nil, "I'm Feeling Lucky")
+// require.HTTPBodyNotContains(t, myHandler, "GET", "www.google.com", nil, "I'm Feeling Lucky")
//
// Returns whether the assertion was successful (true) or not (false).
func HTTPBodyNotContains(t TestingT, handler http.HandlerFunc, method string, url string, values url.Values, str interface{}, msgAndArgs ...interface{}) {
@@ -704,7 +704,7 @@ func HTTPBodyNotContains(t TestingT, handler http.HandlerFunc, method string, ur
// HTTPBodyNotContainsf asserts that a specified handler returns a
// body that does not contain a string.
//
-// assert.HTTPBodyNotContainsf(t, myHandler, "GET", "www.google.com", nil, "I'm Feeling Lucky", "error message %s", "formatted")
+// require.HTTPBodyNotContainsf(t, myHandler, "GET", "www.google.com", nil, "I'm Feeling Lucky", "error message %s", "formatted")
//
// Returns whether the assertion was successful (true) or not (false).
func HTTPBodyNotContainsf(t TestingT, handler http.HandlerFunc, method string, url string, values url.Values, str interface{}, msg string, args ...interface{}) {
@@ -719,7 +719,7 @@ func HTTPBodyNotContainsf(t TestingT, handler http.HandlerFunc, method string, u
// HTTPError asserts that a specified handler returns an error status code.
//
-// assert.HTTPError(t, myHandler, "POST", "/a/b/c", url.Values{"a": []string{"b", "c"}}
+// require.HTTPError(t, myHandler, "POST", "/a/b/c", url.Values{"a": []string{"b", "c"}}
//
// Returns whether the assertion was successful (true) or not (false).
func HTTPError(t TestingT, handler http.HandlerFunc, method string, url string, values url.Values, msgAndArgs ...interface{}) {
@@ -734,7 +734,7 @@ func HTTPError(t TestingT, handler http.HandlerFunc, method string, url string,
// HTTPErrorf asserts that a specified handler returns an error status code.
//
-// assert.HTTPErrorf(t, myHandler, "POST", "/a/b/c", url.Values{"a": []string{"b", "c"}}
+// require.HTTPErrorf(t, myHandler, "POST", "/a/b/c", url.Values{"a": []string{"b", "c"}}
//
// Returns whether the assertion was successful (true) or not (false).
func HTTPErrorf(t TestingT, handler http.HandlerFunc, method string, url string, values url.Values, msg string, args ...interface{}) {
@@ -749,7 +749,7 @@ func HTTPErrorf(t TestingT, handler http.HandlerFunc, method string, url string,
// HTTPRedirect asserts that a specified handler returns a redirect status code.
//
-// assert.HTTPRedirect(t, myHandler, "GET", "/a/b/c", url.Values{"a": []string{"b", "c"}}
+// require.HTTPRedirect(t, myHandler, "GET", "/a/b/c", url.Values{"a": []string{"b", "c"}}
//
// Returns whether the assertion was successful (true) or not (false).
func HTTPRedirect(t TestingT, handler http.HandlerFunc, method string, url string, values url.Values, msgAndArgs ...interface{}) {
@@ -764,7 +764,7 @@ func HTTPRedirect(t TestingT, handler http.HandlerFunc, method string, url strin
// HTTPRedirectf asserts that a specified handler returns a redirect status code.
//
-// assert.HTTPRedirectf(t, myHandler, "GET", "/a/b/c", url.Values{"a": []string{"b", "c"}}
+// require.HTTPRedirectf(t, myHandler, "GET", "/a/b/c", url.Values{"a": []string{"b", "c"}}
//
// Returns whether the assertion was successful (true) or not (false).
func HTTPRedirectf(t TestingT, handler http.HandlerFunc, method string, url string, values url.Values, msg string, args ...interface{}) {
@@ -779,7 +779,7 @@ func HTTPRedirectf(t TestingT, handler http.HandlerFunc, method string, url stri
// HTTPStatusCode asserts that a specified handler returns a specified status code.
//
-// assert.HTTPStatusCode(t, myHandler, "GET", "/notImplemented", nil, 501)
+// require.HTTPStatusCode(t, myHandler, "GET", "/notImplemented", nil, 501)
//
// Returns whether the assertion was successful (true) or not (false).
func HTTPStatusCode(t TestingT, handler http.HandlerFunc, method string, url string, values url.Values, statuscode int, msgAndArgs ...interface{}) {
@@ -794,7 +794,7 @@ func HTTPStatusCode(t TestingT, handler http.HandlerFunc, method string, url str
// HTTPStatusCodef asserts that a specified handler returns a specified status code.
//
-// assert.HTTPStatusCodef(t, myHandler, "GET", "/notImplemented", nil, 501, "error message %s", "formatted")
+// require.HTTPStatusCodef(t, myHandler, "GET", "/notImplemented", nil, 501, "error message %s", "formatted")
//
// Returns whether the assertion was successful (true) or not (false).
func HTTPStatusCodef(t TestingT, handler http.HandlerFunc, method string, url string, values url.Values, statuscode int, msg string, args ...interface{}) {
@@ -809,7 +809,7 @@ func HTTPStatusCodef(t TestingT, handler http.HandlerFunc, method string, url st
// HTTPSuccess asserts that a specified handler returns a success status code.
//
-// assert.HTTPSuccess(t, myHandler, "POST", "http://www.google.com", nil)
+// require.HTTPSuccess(t, myHandler, "POST", "http://www.google.com", nil)
//
// Returns whether the assertion was successful (true) or not (false).
func HTTPSuccess(t TestingT, handler http.HandlerFunc, method string, url string, values url.Values, msgAndArgs ...interface{}) {
@@ -824,7 +824,7 @@ func HTTPSuccess(t TestingT, handler http.HandlerFunc, method string, url string
// HTTPSuccessf asserts that a specified handler returns a success status code.
//
-// assert.HTTPSuccessf(t, myHandler, "POST", "http://www.google.com", nil, "error message %s", "formatted")
+// require.HTTPSuccessf(t, myHandler, "POST", "http://www.google.com", nil, "error message %s", "formatted")
//
// Returns whether the assertion was successful (true) or not (false).
func HTTPSuccessf(t TestingT, handler http.HandlerFunc, method string, url string, values url.Values, msg string, args ...interface{}) {
@@ -839,7 +839,7 @@ func HTTPSuccessf(t TestingT, handler http.HandlerFunc, method string, url strin
// Implements asserts that an object is implemented by the specified interface.
//
-// assert.Implements(t, (*MyInterface)(nil), new(MyObject))
+// require.Implements(t, (*MyInterface)(nil), new(MyObject))
func Implements(t TestingT, interfaceObject interface{}, object interface{}, msgAndArgs ...interface{}) {
if h, ok := t.(tHelper); ok {
h.Helper()
@@ -852,7 +852,7 @@ func Implements(t TestingT, interfaceObject interface{}, object interface{}, msg
// Implementsf asserts that an object is implemented by the specified interface.
//
-// assert.Implementsf(t, (*MyInterface)(nil), new(MyObject), "error message %s", "formatted")
+// require.Implementsf(t, (*MyInterface)(nil), new(MyObject), "error message %s", "formatted")
func Implementsf(t TestingT, interfaceObject interface{}, object interface{}, msg string, args ...interface{}) {
if h, ok := t.(tHelper); ok {
h.Helper()
@@ -865,7 +865,7 @@ func Implementsf(t TestingT, interfaceObject interface{}, object interface{}, ms
// InDelta asserts that the two numerals are within delta of each other.
//
-// assert.InDelta(t, math.Pi, 22/7.0, 0.01)
+// require.InDelta(t, math.Pi, 22/7.0, 0.01)
func InDelta(t TestingT, expected interface{}, actual interface{}, delta float64, msgAndArgs ...interface{}) {
if h, ok := t.(tHelper); ok {
h.Helper()
@@ -922,7 +922,7 @@ func InDeltaSlicef(t TestingT, expected interface{}, actual interface{}, delta f
// InDeltaf asserts that the two numerals are within delta of each other.
//
-// assert.InDeltaf(t, math.Pi, 22/7.0, 0.01, "error message %s", "formatted")
+// require.InDeltaf(t, math.Pi, 22/7.0, 0.01, "error message %s", "formatted")
func InDeltaf(t TestingT, expected interface{}, actual interface{}, delta float64, msg string, args ...interface{}) {
if h, ok := t.(tHelper); ok {
h.Helper()
@@ -979,9 +979,9 @@ func InEpsilonf(t TestingT, expected interface{}, actual interface{}, epsilon fl
// IsDecreasing asserts that the collection is decreasing
//
-// assert.IsDecreasing(t, []int{2, 1, 0})
-// assert.IsDecreasing(t, []float{2, 1})
-// assert.IsDecreasing(t, []string{"b", "a"})
+// require.IsDecreasing(t, []int{2, 1, 0})
+// require.IsDecreasing(t, []float{2, 1})
+// require.IsDecreasing(t, []string{"b", "a"})
func IsDecreasing(t TestingT, object interface{}, msgAndArgs ...interface{}) {
if h, ok := t.(tHelper); ok {
h.Helper()
@@ -994,9 +994,9 @@ func IsDecreasing(t TestingT, object interface{}, msgAndArgs ...interface{}) {
// IsDecreasingf asserts that the collection is decreasing
//
-// assert.IsDecreasingf(t, []int{2, 1, 0}, "error message %s", "formatted")
-// assert.IsDecreasingf(t, []float{2, 1}, "error message %s", "formatted")
-// assert.IsDecreasingf(t, []string{"b", "a"}, "error message %s", "formatted")
+// require.IsDecreasingf(t, []int{2, 1, 0}, "error message %s", "formatted")
+// require.IsDecreasingf(t, []float{2, 1}, "error message %s", "formatted")
+// require.IsDecreasingf(t, []string{"b", "a"}, "error message %s", "formatted")
func IsDecreasingf(t TestingT, object interface{}, msg string, args ...interface{}) {
if h, ok := t.(tHelper); ok {
h.Helper()
@@ -1009,9 +1009,9 @@ func IsDecreasingf(t TestingT, object interface{}, msg string, args ...interface
// IsIncreasing asserts that the collection is increasing
//
-// assert.IsIncreasing(t, []int{1, 2, 3})
-// assert.IsIncreasing(t, []float{1, 2})
-// assert.IsIncreasing(t, []string{"a", "b"})
+// require.IsIncreasing(t, []int{1, 2, 3})
+// require.IsIncreasing(t, []float{1, 2})
+// require.IsIncreasing(t, []string{"a", "b"})
func IsIncreasing(t TestingT, object interface{}, msgAndArgs ...interface{}) {
if h, ok := t.(tHelper); ok {
h.Helper()
@@ -1024,9 +1024,9 @@ func IsIncreasing(t TestingT, object interface{}, msgAndArgs ...interface{}) {
// IsIncreasingf asserts that the collection is increasing
//
-// assert.IsIncreasingf(t, []int{1, 2, 3}, "error message %s", "formatted")
-// assert.IsIncreasingf(t, []float{1, 2}, "error message %s", "formatted")
-// assert.IsIncreasingf(t, []string{"a", "b"}, "error message %s", "formatted")
+// require.IsIncreasingf(t, []int{1, 2, 3}, "error message %s", "formatted")
+// require.IsIncreasingf(t, []float{1, 2}, "error message %s", "formatted")
+// require.IsIncreasingf(t, []string{"a", "b"}, "error message %s", "formatted")
func IsIncreasingf(t TestingT, object interface{}, msg string, args ...interface{}) {
if h, ok := t.(tHelper); ok {
h.Helper()
@@ -1039,9 +1039,9 @@ func IsIncreasingf(t TestingT, object interface{}, msg string, args ...interface
// IsNonDecreasing asserts that the collection is not decreasing
//
-// assert.IsNonDecreasing(t, []int{1, 1, 2})
-// assert.IsNonDecreasing(t, []float{1, 2})
-// assert.IsNonDecreasing(t, []string{"a", "b"})
+// require.IsNonDecreasing(t, []int{1, 1, 2})
+// require.IsNonDecreasing(t, []float{1, 2})
+// require.IsNonDecreasing(t, []string{"a", "b"})
func IsNonDecreasing(t TestingT, object interface{}, msgAndArgs ...interface{}) {
if h, ok := t.(tHelper); ok {
h.Helper()
@@ -1054,9 +1054,9 @@ func IsNonDecreasing(t TestingT, object interface{}, msgAndArgs ...interface{})
// IsNonDecreasingf asserts that the collection is not decreasing
//
-// assert.IsNonDecreasingf(t, []int{1, 1, 2}, "error message %s", "formatted")
-// assert.IsNonDecreasingf(t, []float{1, 2}, "error message %s", "formatted")
-// assert.IsNonDecreasingf(t, []string{"a", "b"}, "error message %s", "formatted")
+// require.IsNonDecreasingf(t, []int{1, 1, 2}, "error message %s", "formatted")
+// require.IsNonDecreasingf(t, []float{1, 2}, "error message %s", "formatted")
+// require.IsNonDecreasingf(t, []string{"a", "b"}, "error message %s", "formatted")
func IsNonDecreasingf(t TestingT, object interface{}, msg string, args ...interface{}) {
if h, ok := t.(tHelper); ok {
h.Helper()
@@ -1069,9 +1069,9 @@ func IsNonDecreasingf(t TestingT, object interface{}, msg string, args ...interf
// IsNonIncreasing asserts that the collection is not increasing
//
-// assert.IsNonIncreasing(t, []int{2, 1, 1})
-// assert.IsNonIncreasing(t, []float{2, 1})
-// assert.IsNonIncreasing(t, []string{"b", "a"})
+// require.IsNonIncreasing(t, []int{2, 1, 1})
+// require.IsNonIncreasing(t, []float{2, 1})
+// require.IsNonIncreasing(t, []string{"b", "a"})
func IsNonIncreasing(t TestingT, object interface{}, msgAndArgs ...interface{}) {
if h, ok := t.(tHelper); ok {
h.Helper()
@@ -1084,9 +1084,9 @@ func IsNonIncreasing(t TestingT, object interface{}, msgAndArgs ...interface{})
// IsNonIncreasingf asserts that the collection is not increasing
//
-// assert.IsNonIncreasingf(t, []int{2, 1, 1}, "error message %s", "formatted")
-// assert.IsNonIncreasingf(t, []float{2, 1}, "error message %s", "formatted")
-// assert.IsNonIncreasingf(t, []string{"b", "a"}, "error message %s", "formatted")
+// require.IsNonIncreasingf(t, []int{2, 1, 1}, "error message %s", "formatted")
+// require.IsNonIncreasingf(t, []float{2, 1}, "error message %s", "formatted")
+// require.IsNonIncreasingf(t, []string{"b", "a"}, "error message %s", "formatted")
func IsNonIncreasingf(t TestingT, object interface{}, msg string, args ...interface{}) {
if h, ok := t.(tHelper); ok {
h.Helper()
@@ -1121,7 +1121,7 @@ func IsTypef(t TestingT, expectedType interface{}, object interface{}, msg strin
// JSONEq asserts that two JSON strings are equivalent.
//
-// assert.JSONEq(t, `{"hello": "world", "foo": "bar"}`, `{"foo": "bar", "hello": "world"}`)
+// require.JSONEq(t, `{"hello": "world", "foo": "bar"}`, `{"foo": "bar", "hello": "world"}`)
func JSONEq(t TestingT, expected string, actual string, msgAndArgs ...interface{}) {
if h, ok := t.(tHelper); ok {
h.Helper()
@@ -1134,7 +1134,7 @@ func JSONEq(t TestingT, expected string, actual string, msgAndArgs ...interface{
// JSONEqf asserts that two JSON strings are equivalent.
//
-// assert.JSONEqf(t, `{"hello": "world", "foo": "bar"}`, `{"foo": "bar", "hello": "world"}`, "error message %s", "formatted")
+// require.JSONEqf(t, `{"hello": "world", "foo": "bar"}`, `{"foo": "bar", "hello": "world"}`, "error message %s", "formatted")
func JSONEqf(t TestingT, expected string, actual string, msg string, args ...interface{}) {
if h, ok := t.(tHelper); ok {
h.Helper()
@@ -1148,7 +1148,7 @@ func JSONEqf(t TestingT, expected string, actual string, msg string, args ...int
// Len asserts that the specified object has specific length.
// Len also fails if the object has a type that len() not accept.
//
-// assert.Len(t, mySlice, 3)
+// require.Len(t, mySlice, 3)
func Len(t TestingT, object interface{}, length int, msgAndArgs ...interface{}) {
if h, ok := t.(tHelper); ok {
h.Helper()
@@ -1162,7 +1162,7 @@ func Len(t TestingT, object interface{}, length int, msgAndArgs ...interface{})
// Lenf asserts that the specified object has specific length.
// Lenf also fails if the object has a type that len() not accept.
//
-// assert.Lenf(t, mySlice, 3, "error message %s", "formatted")
+// require.Lenf(t, mySlice, 3, "error message %s", "formatted")
func Lenf(t TestingT, object interface{}, length int, msg string, args ...interface{}) {
if h, ok := t.(tHelper); ok {
h.Helper()
@@ -1175,9 +1175,9 @@ func Lenf(t TestingT, object interface{}, length int, msg string, args ...interf
// Less asserts that the first element is less than the second
//
-// assert.Less(t, 1, 2)
-// assert.Less(t, float64(1), float64(2))
-// assert.Less(t, "a", "b")
+// require.Less(t, 1, 2)
+// require.Less(t, float64(1), float64(2))
+// require.Less(t, "a", "b")
func Less(t TestingT, e1 interface{}, e2 interface{}, msgAndArgs ...interface{}) {
if h, ok := t.(tHelper); ok {
h.Helper()
@@ -1190,10 +1190,10 @@ func Less(t TestingT, e1 interface{}, e2 interface{}, msgAndArgs ...interface{})
// LessOrEqual asserts that the first element is less than or equal to the second
//
-// assert.LessOrEqual(t, 1, 2)
-// assert.LessOrEqual(t, 2, 2)
-// assert.LessOrEqual(t, "a", "b")
-// assert.LessOrEqual(t, "b", "b")
+// require.LessOrEqual(t, 1, 2)
+// require.LessOrEqual(t, 2, 2)
+// require.LessOrEqual(t, "a", "b")
+// require.LessOrEqual(t, "b", "b")
func LessOrEqual(t TestingT, e1 interface{}, e2 interface{}, msgAndArgs ...interface{}) {
if h, ok := t.(tHelper); ok {
h.Helper()
@@ -1206,10 +1206,10 @@ func LessOrEqual(t TestingT, e1 interface{}, e2 interface{}, msgAndArgs ...inter
// LessOrEqualf asserts that the first element is less than or equal to the second
//
-// assert.LessOrEqualf(t, 1, 2, "error message %s", "formatted")
-// assert.LessOrEqualf(t, 2, 2, "error message %s", "formatted")
-// assert.LessOrEqualf(t, "a", "b", "error message %s", "formatted")
-// assert.LessOrEqualf(t, "b", "b", "error message %s", "formatted")
+// require.LessOrEqualf(t, 1, 2, "error message %s", "formatted")
+// require.LessOrEqualf(t, 2, 2, "error message %s", "formatted")
+// require.LessOrEqualf(t, "a", "b", "error message %s", "formatted")
+// require.LessOrEqualf(t, "b", "b", "error message %s", "formatted")
func LessOrEqualf(t TestingT, e1 interface{}, e2 interface{}, msg string, args ...interface{}) {
if h, ok := t.(tHelper); ok {
h.Helper()
@@ -1222,9 +1222,9 @@ func LessOrEqualf(t TestingT, e1 interface{}, e2 interface{}, msg string, args .
// Lessf asserts that the first element is less than the second
//
-// assert.Lessf(t, 1, 2, "error message %s", "formatted")
-// assert.Lessf(t, float64(1), float64(2), "error message %s", "formatted")
-// assert.Lessf(t, "a", "b", "error message %s", "formatted")
+// require.Lessf(t, 1, 2, "error message %s", "formatted")
+// require.Lessf(t, float64(1), float64(2), "error message %s", "formatted")
+// require.Lessf(t, "a", "b", "error message %s", "formatted")
func Lessf(t TestingT, e1 interface{}, e2 interface{}, msg string, args ...interface{}) {
if h, ok := t.(tHelper); ok {
h.Helper()
@@ -1237,8 +1237,8 @@ func Lessf(t TestingT, e1 interface{}, e2 interface{}, msg string, args ...inter
// Negative asserts that the specified element is negative
//
-// assert.Negative(t, -1)
-// assert.Negative(t, -1.23)
+// require.Negative(t, -1)
+// require.Negative(t, -1.23)
func Negative(t TestingT, e interface{}, msgAndArgs ...interface{}) {
if h, ok := t.(tHelper); ok {
h.Helper()
@@ -1251,8 +1251,8 @@ func Negative(t TestingT, e interface{}, msgAndArgs ...interface{}) {
// Negativef asserts that the specified element is negative
//
-// assert.Negativef(t, -1, "error message %s", "formatted")
-// assert.Negativef(t, -1.23, "error message %s", "formatted")
+// require.Negativef(t, -1, "error message %s", "formatted")
+// require.Negativef(t, -1.23, "error message %s", "formatted")
func Negativef(t TestingT, e interface{}, msg string, args ...interface{}) {
if h, ok := t.(tHelper); ok {
h.Helper()
@@ -1266,7 +1266,7 @@ func Negativef(t TestingT, e interface{}, msg string, args ...interface{}) {
// Never asserts that the given condition doesn't satisfy in waitFor time,
// periodically checking the target function each tick.
//
-// assert.Never(t, func() bool { return false; }, time.Second, 10*time.Millisecond)
+// require.Never(t, func() bool { return false; }, time.Second, 10*time.Millisecond)
func Never(t TestingT, condition func() bool, waitFor time.Duration, tick time.Duration, msgAndArgs ...interface{}) {
if h, ok := t.(tHelper); ok {
h.Helper()
@@ -1280,7 +1280,7 @@ func Never(t TestingT, condition func() bool, waitFor time.Duration, tick time.D
// Neverf asserts that the given condition doesn't satisfy in waitFor time,
// periodically checking the target function each tick.
//
-// assert.Neverf(t, func() bool { return false; }, time.Second, 10*time.Millisecond, "error message %s", "formatted")
+// require.Neverf(t, func() bool { return false; }, time.Second, 10*time.Millisecond, "error message %s", "formatted")
func Neverf(t TestingT, condition func() bool, waitFor time.Duration, tick time.Duration, msg string, args ...interface{}) {
if h, ok := t.(tHelper); ok {
h.Helper()
@@ -1293,7 +1293,7 @@ func Neverf(t TestingT, condition func() bool, waitFor time.Duration, tick time.
// Nil asserts that the specified object is nil.
//
-// assert.Nil(t, err)
+// require.Nil(t, err)
func Nil(t TestingT, object interface{}, msgAndArgs ...interface{}) {
if h, ok := t.(tHelper); ok {
h.Helper()
@@ -1306,7 +1306,7 @@ func Nil(t TestingT, object interface{}, msgAndArgs ...interface{}) {
// Nilf asserts that the specified object is nil.
//
-// assert.Nilf(t, err, "error message %s", "formatted")
+// require.Nilf(t, err, "error message %s", "formatted")
func Nilf(t TestingT, object interface{}, msg string, args ...interface{}) {
if h, ok := t.(tHelper); ok {
h.Helper()
@@ -1344,8 +1344,8 @@ func NoDirExistsf(t TestingT, path string, msg string, args ...interface{}) {
// NoError asserts that a function returned no error (i.e. `nil`).
//
// actualObj, err := SomeFunction()
-// if assert.NoError(t, err) {
-// assert.Equal(t, expectedObj, actualObj)
+// if require.NoError(t, err) {
+// require.Equal(t, expectedObj, actualObj)
// }
func NoError(t TestingT, err error, msgAndArgs ...interface{}) {
if h, ok := t.(tHelper); ok {
@@ -1360,8 +1360,8 @@ func NoError(t TestingT, err error, msgAndArgs ...interface{}) {
// NoErrorf asserts that a function returned no error (i.e. `nil`).
//
// actualObj, err := SomeFunction()
-// if assert.NoErrorf(t, err, "error message %s", "formatted") {
-// assert.Equal(t, expectedObj, actualObj)
+// if require.NoErrorf(t, err, "error message %s", "formatted") {
+// require.Equal(t, expectedObj, actualObj)
// }
func NoErrorf(t TestingT, err error, msg string, args ...interface{}) {
if h, ok := t.(tHelper); ok {
@@ -1400,9 +1400,9 @@ func NoFileExistsf(t TestingT, path string, msg string, args ...interface{}) {
// NotContains asserts that the specified string, list(array, slice...) or map does NOT contain the
// specified substring or element.
//
-// assert.NotContains(t, "Hello World", "Earth")
-// assert.NotContains(t, ["Hello", "World"], "Earth")
-// assert.NotContains(t, {"Hello": "World"}, "Earth")
+// require.NotContains(t, "Hello World", "Earth")
+// require.NotContains(t, ["Hello", "World"], "Earth")
+// require.NotContains(t, {"Hello": "World"}, "Earth")
func NotContains(t TestingT, s interface{}, contains interface{}, msgAndArgs ...interface{}) {
if h, ok := t.(tHelper); ok {
h.Helper()
@@ -1416,9 +1416,9 @@ func NotContains(t TestingT, s interface{}, contains interface{}, msgAndArgs ...
// NotContainsf asserts that the specified string, list(array, slice...) or map does NOT contain the
// specified substring or element.
//
-// assert.NotContainsf(t, "Hello World", "Earth", "error message %s", "formatted")
-// assert.NotContainsf(t, ["Hello", "World"], "Earth", "error message %s", "formatted")
-// assert.NotContainsf(t, {"Hello": "World"}, "Earth", "error message %s", "formatted")
+// require.NotContainsf(t, "Hello World", "Earth", "error message %s", "formatted")
+// require.NotContainsf(t, ["Hello", "World"], "Earth", "error message %s", "formatted")
+// require.NotContainsf(t, {"Hello": "World"}, "Earth", "error message %s", "formatted")
func NotContainsf(t TestingT, s interface{}, contains interface{}, msg string, args ...interface{}) {
if h, ok := t.(tHelper); ok {
h.Helper()
@@ -1429,11 +1429,51 @@ func NotContainsf(t TestingT, s interface{}, contains interface{}, msg string, a
t.FailNow()
}
+// NotElementsMatch asserts that the specified listA(array, slice...) is NOT equal to specified
+// listB(array, slice...) ignoring the order of the elements. If there are duplicate elements,
+// the number of appearances of each of them in both lists should not match.
+// This is an inverse of ElementsMatch.
+//
+// require.NotElementsMatch(t, [1, 1, 2, 3], [1, 1, 2, 3]) -> false
+//
+// require.NotElementsMatch(t, [1, 1, 2, 3], [1, 2, 3]) -> true
+//
+// require.NotElementsMatch(t, [1, 2, 3], [1, 2, 4]) -> true
+func NotElementsMatch(t TestingT, listA interface{}, listB interface{}, msgAndArgs ...interface{}) {
+ if h, ok := t.(tHelper); ok {
+ h.Helper()
+ }
+ if assert.NotElementsMatch(t, listA, listB, msgAndArgs...) {
+ return
+ }
+ t.FailNow()
+}
+
+// NotElementsMatchf asserts that the specified listA(array, slice...) is NOT equal to specified
+// listB(array, slice...) ignoring the order of the elements. If there are duplicate elements,
+// the number of appearances of each of them in both lists should not match.
+// This is an inverse of ElementsMatch.
+//
+// require.NotElementsMatchf(t, [1, 1, 2, 3], [1, 1, 2, 3], "error message %s", "formatted") -> false
+//
+// require.NotElementsMatchf(t, [1, 1, 2, 3], [1, 2, 3], "error message %s", "formatted") -> true
+//
+// require.NotElementsMatchf(t, [1, 2, 3], [1, 2, 4], "error message %s", "formatted") -> true
+func NotElementsMatchf(t TestingT, listA interface{}, listB interface{}, msg string, args ...interface{}) {
+ if h, ok := t.(tHelper); ok {
+ h.Helper()
+ }
+ if assert.NotElementsMatchf(t, listA, listB, msg, args...) {
+ return
+ }
+ t.FailNow()
+}
+
// NotEmpty asserts that the specified object is NOT empty. I.e. not nil, "", false, 0 or either
// a slice or a channel with len == 0.
//
-// if assert.NotEmpty(t, obj) {
-// assert.Equal(t, "two", obj[1])
+// if require.NotEmpty(t, obj) {
+// require.Equal(t, "two", obj[1])
// }
func NotEmpty(t TestingT, object interface{}, msgAndArgs ...interface{}) {
if h, ok := t.(tHelper); ok {
@@ -1448,8 +1488,8 @@ func NotEmpty(t TestingT, object interface{}, msgAndArgs ...interface{}) {
// NotEmptyf asserts that the specified object is NOT empty. I.e. not nil, "", false, 0 or either
// a slice or a channel with len == 0.
//
-// if assert.NotEmptyf(t, obj, "error message %s", "formatted") {
-// assert.Equal(t, "two", obj[1])
+// if require.NotEmptyf(t, obj, "error message %s", "formatted") {
+// require.Equal(t, "two", obj[1])
// }
func NotEmptyf(t TestingT, object interface{}, msg string, args ...interface{}) {
if h, ok := t.(tHelper); ok {
@@ -1463,7 +1503,7 @@ func NotEmptyf(t TestingT, object interface{}, msg string, args ...interface{})
// NotEqual asserts that the specified values are NOT equal.
//
-// assert.NotEqual(t, obj1, obj2)
+// require.NotEqual(t, obj1, obj2)
//
// Pointer variable equality is determined based on the equality of the
// referenced values (as opposed to the memory addresses).
@@ -1479,7 +1519,7 @@ func NotEqual(t TestingT, expected interface{}, actual interface{}, msgAndArgs .
// NotEqualValues asserts that two objects are not equal even when converted to the same type
//
-// assert.NotEqualValues(t, obj1, obj2)
+// require.NotEqualValues(t, obj1, obj2)
func NotEqualValues(t TestingT, expected interface{}, actual interface{}, msgAndArgs ...interface{}) {
if h, ok := t.(tHelper); ok {
h.Helper()
@@ -1492,7 +1532,7 @@ func NotEqualValues(t TestingT, expected interface{}, actual interface{}, msgAnd
// NotEqualValuesf asserts that two objects are not equal even when converted to the same type
//
-// assert.NotEqualValuesf(t, obj1, obj2, "error message %s", "formatted")
+// require.NotEqualValuesf(t, obj1, obj2, "error message %s", "formatted")
func NotEqualValuesf(t TestingT, expected interface{}, actual interface{}, msg string, args ...interface{}) {
if h, ok := t.(tHelper); ok {
h.Helper()
@@ -1505,7 +1545,7 @@ func NotEqualValuesf(t TestingT, expected interface{}, actual interface{}, msg s
// NotEqualf asserts that the specified values are NOT equal.
//
-// assert.NotEqualf(t, obj1, obj2, "error message %s", "formatted")
+// require.NotEqualf(t, obj1, obj2, "error message %s", "formatted")
//
// Pointer variable equality is determined based on the equality of the
// referenced values (as opposed to the memory addresses).
@@ -1519,7 +1559,31 @@ func NotEqualf(t TestingT, expected interface{}, actual interface{}, msg string,
t.FailNow()
}
-// NotErrorIs asserts that at none of the errors in err's chain matches target.
+// NotErrorAs asserts that none of the errors in err's chain matches target,
+// but if so, sets target to that error value.
+func NotErrorAs(t TestingT, err error, target interface{}, msgAndArgs ...interface{}) {
+ if h, ok := t.(tHelper); ok {
+ h.Helper()
+ }
+ if assert.NotErrorAs(t, err, target, msgAndArgs...) {
+ return
+ }
+ t.FailNow()
+}
+
+// NotErrorAsf asserts that none of the errors in err's chain matches target,
+// but if so, sets target to that error value.
+func NotErrorAsf(t TestingT, err error, target interface{}, msg string, args ...interface{}) {
+ if h, ok := t.(tHelper); ok {
+ h.Helper()
+ }
+ if assert.NotErrorAsf(t, err, target, msg, args...) {
+ return
+ }
+ t.FailNow()
+}
+
+// NotErrorIs asserts that none of the errors in err's chain matches target.
// This is a wrapper for errors.Is.
func NotErrorIs(t TestingT, err error, target error, msgAndArgs ...interface{}) {
if h, ok := t.(tHelper); ok {
@@ -1531,7 +1595,7 @@ func NotErrorIs(t TestingT, err error, target error, msgAndArgs ...interface{})
t.FailNow()
}
-// NotErrorIsf asserts that at none of the errors in err's chain matches target.
+// NotErrorIsf asserts that none of the errors in err's chain matches target.
// This is a wrapper for errors.Is.
func NotErrorIsf(t TestingT, err error, target error, msg string, args ...interface{}) {
if h, ok := t.(tHelper); ok {
@@ -1545,7 +1609,7 @@ func NotErrorIsf(t TestingT, err error, target error, msg string, args ...interf
// NotImplements asserts that an object does not implement the specified interface.
//
-// assert.NotImplements(t, (*MyInterface)(nil), new(MyObject))
+// require.NotImplements(t, (*MyInterface)(nil), new(MyObject))
func NotImplements(t TestingT, interfaceObject interface{}, object interface{}, msgAndArgs ...interface{}) {
if h, ok := t.(tHelper); ok {
h.Helper()
@@ -1558,7 +1622,7 @@ func NotImplements(t TestingT, interfaceObject interface{}, object interface{},
// NotImplementsf asserts that an object does not implement the specified interface.
//
-// assert.NotImplementsf(t, (*MyInterface)(nil), new(MyObject), "error message %s", "formatted")
+// require.NotImplementsf(t, (*MyInterface)(nil), new(MyObject), "error message %s", "formatted")
func NotImplementsf(t TestingT, interfaceObject interface{}, object interface{}, msg string, args ...interface{}) {
if h, ok := t.(tHelper); ok {
h.Helper()
@@ -1571,7 +1635,7 @@ func NotImplementsf(t TestingT, interfaceObject interface{}, object interface{},
// NotNil asserts that the specified object is not nil.
//
-// assert.NotNil(t, err)
+// require.NotNil(t, err)
func NotNil(t TestingT, object interface{}, msgAndArgs ...interface{}) {
if h, ok := t.(tHelper); ok {
h.Helper()
@@ -1584,7 +1648,7 @@ func NotNil(t TestingT, object interface{}, msgAndArgs ...interface{}) {
// NotNilf asserts that the specified object is not nil.
//
-// assert.NotNilf(t, err, "error message %s", "formatted")
+// require.NotNilf(t, err, "error message %s", "formatted")
func NotNilf(t TestingT, object interface{}, msg string, args ...interface{}) {
if h, ok := t.(tHelper); ok {
h.Helper()
@@ -1597,7 +1661,7 @@ func NotNilf(t TestingT, object interface{}, msg string, args ...interface{}) {
// NotPanics asserts that the code inside the specified PanicTestFunc does NOT panic.
//
-// assert.NotPanics(t, func(){ RemainCalm() })
+// require.NotPanics(t, func(){ RemainCalm() })
func NotPanics(t TestingT, f assert.PanicTestFunc, msgAndArgs ...interface{}) {
if h, ok := t.(tHelper); ok {
h.Helper()
@@ -1610,7 +1674,7 @@ func NotPanics(t TestingT, f assert.PanicTestFunc, msgAndArgs ...interface{}) {
// NotPanicsf asserts that the code inside the specified PanicTestFunc does NOT panic.
//
-// assert.NotPanicsf(t, func(){ RemainCalm() }, "error message %s", "formatted")
+// require.NotPanicsf(t, func(){ RemainCalm() }, "error message %s", "formatted")
func NotPanicsf(t TestingT, f assert.PanicTestFunc, msg string, args ...interface{}) {
if h, ok := t.(tHelper); ok {
h.Helper()
@@ -1623,8 +1687,8 @@ func NotPanicsf(t TestingT, f assert.PanicTestFunc, msg string, args ...interfac
// NotRegexp asserts that a specified regexp does not match a string.
//
-// assert.NotRegexp(t, regexp.MustCompile("starts"), "it's starting")
-// assert.NotRegexp(t, "^start", "it's not starting")
+// require.NotRegexp(t, regexp.MustCompile("starts"), "it's starting")
+// require.NotRegexp(t, "^start", "it's not starting")
func NotRegexp(t TestingT, rx interface{}, str interface{}, msgAndArgs ...interface{}) {
if h, ok := t.(tHelper); ok {
h.Helper()
@@ -1637,8 +1701,8 @@ func NotRegexp(t TestingT, rx interface{}, str interface{}, msgAndArgs ...interf
// NotRegexpf asserts that a specified regexp does not match a string.
//
-// assert.NotRegexpf(t, regexp.MustCompile("starts"), "it's starting", "error message %s", "formatted")
-// assert.NotRegexpf(t, "^start", "it's not starting", "error message %s", "formatted")
+// require.NotRegexpf(t, regexp.MustCompile("starts"), "it's starting", "error message %s", "formatted")
+// require.NotRegexpf(t, "^start", "it's not starting", "error message %s", "formatted")
func NotRegexpf(t TestingT, rx interface{}, str interface{}, msg string, args ...interface{}) {
if h, ok := t.(tHelper); ok {
h.Helper()
@@ -1651,7 +1715,7 @@ func NotRegexpf(t TestingT, rx interface{}, str interface{}, msg string, args ..
// NotSame asserts that two pointers do not reference the same object.
//
-// assert.NotSame(t, ptr1, ptr2)
+// require.NotSame(t, ptr1, ptr2)
//
// Both arguments must be pointer variables. Pointer variable sameness is
// determined based on the equality of both type and value.
@@ -1667,7 +1731,7 @@ func NotSame(t TestingT, expected interface{}, actual interface{}, msgAndArgs ..
// NotSamef asserts that two pointers do not reference the same object.
//
-// assert.NotSamef(t, ptr1, ptr2, "error message %s", "formatted")
+// require.NotSamef(t, ptr1, ptr2, "error message %s", "formatted")
//
// Both arguments must be pointer variables. Pointer variable sameness is
// determined based on the equality of both type and value.
@@ -1685,8 +1749,8 @@ func NotSamef(t TestingT, expected interface{}, actual interface{}, msg string,
// contain all elements given in the specified subset list(array, slice...) or
// map.
//
-// assert.NotSubset(t, [1, 3, 4], [1, 2])
-// assert.NotSubset(t, {"x": 1, "y": 2}, {"z": 3})
+// require.NotSubset(t, [1, 3, 4], [1, 2])
+// require.NotSubset(t, {"x": 1, "y": 2}, {"z": 3})
func NotSubset(t TestingT, list interface{}, subset interface{}, msgAndArgs ...interface{}) {
if h, ok := t.(tHelper); ok {
h.Helper()
@@ -1701,8 +1765,8 @@ func NotSubset(t TestingT, list interface{}, subset interface{}, msgAndArgs ...i
// contain all elements given in the specified subset list(array, slice...) or
// map.
//
-// assert.NotSubsetf(t, [1, 3, 4], [1, 2], "error message %s", "formatted")
-// assert.NotSubsetf(t, {"x": 1, "y": 2}, {"z": 3}, "error message %s", "formatted")
+// require.NotSubsetf(t, [1, 3, 4], [1, 2], "error message %s", "formatted")
+// require.NotSubsetf(t, {"x": 1, "y": 2}, {"z": 3}, "error message %s", "formatted")
func NotSubsetf(t TestingT, list interface{}, subset interface{}, msg string, args ...interface{}) {
if h, ok := t.(tHelper); ok {
h.Helper()
@@ -1737,7 +1801,7 @@ func NotZerof(t TestingT, i interface{}, msg string, args ...interface{}) {
// Panics asserts that the code inside the specified PanicTestFunc panics.
//
-// assert.Panics(t, func(){ GoCrazy() })
+// require.Panics(t, func(){ GoCrazy() })
func Panics(t TestingT, f assert.PanicTestFunc, msgAndArgs ...interface{}) {
if h, ok := t.(tHelper); ok {
h.Helper()
@@ -1752,7 +1816,7 @@ func Panics(t TestingT, f assert.PanicTestFunc, msgAndArgs ...interface{}) {
// panics, and that the recovered panic value is an error that satisfies the
// EqualError comparison.
//
-// assert.PanicsWithError(t, "crazy error", func(){ GoCrazy() })
+// require.PanicsWithError(t, "crazy error", func(){ GoCrazy() })
func PanicsWithError(t TestingT, errString string, f assert.PanicTestFunc, msgAndArgs ...interface{}) {
if h, ok := t.(tHelper); ok {
h.Helper()
@@ -1767,7 +1831,7 @@ func PanicsWithError(t TestingT, errString string, f assert.PanicTestFunc, msgAn
// panics, and that the recovered panic value is an error that satisfies the
// EqualError comparison.
//
-// assert.PanicsWithErrorf(t, "crazy error", func(){ GoCrazy() }, "error message %s", "formatted")
+// require.PanicsWithErrorf(t, "crazy error", func(){ GoCrazy() }, "error message %s", "formatted")
func PanicsWithErrorf(t TestingT, errString string, f assert.PanicTestFunc, msg string, args ...interface{}) {
if h, ok := t.(tHelper); ok {
h.Helper()
@@ -1781,7 +1845,7 @@ func PanicsWithErrorf(t TestingT, errString string, f assert.PanicTestFunc, msg
// PanicsWithValue asserts that the code inside the specified PanicTestFunc panics, and that
// the recovered panic value equals the expected panic value.
//
-// assert.PanicsWithValue(t, "crazy error", func(){ GoCrazy() })
+// require.PanicsWithValue(t, "crazy error", func(){ GoCrazy() })
func PanicsWithValue(t TestingT, expected interface{}, f assert.PanicTestFunc, msgAndArgs ...interface{}) {
if h, ok := t.(tHelper); ok {
h.Helper()
@@ -1795,7 +1859,7 @@ func PanicsWithValue(t TestingT, expected interface{}, f assert.PanicTestFunc, m
// PanicsWithValuef asserts that the code inside the specified PanicTestFunc panics, and that
// the recovered panic value equals the expected panic value.
//
-// assert.PanicsWithValuef(t, "crazy error", func(){ GoCrazy() }, "error message %s", "formatted")
+// require.PanicsWithValuef(t, "crazy error", func(){ GoCrazy() }, "error message %s", "formatted")
func PanicsWithValuef(t TestingT, expected interface{}, f assert.PanicTestFunc, msg string, args ...interface{}) {
if h, ok := t.(tHelper); ok {
h.Helper()
@@ -1808,7 +1872,7 @@ func PanicsWithValuef(t TestingT, expected interface{}, f assert.PanicTestFunc,
// Panicsf asserts that the code inside the specified PanicTestFunc panics.
//
-// assert.Panicsf(t, func(){ GoCrazy() }, "error message %s", "formatted")
+// require.Panicsf(t, func(){ GoCrazy() }, "error message %s", "formatted")
func Panicsf(t TestingT, f assert.PanicTestFunc, msg string, args ...interface{}) {
if h, ok := t.(tHelper); ok {
h.Helper()
@@ -1821,8 +1885,8 @@ func Panicsf(t TestingT, f assert.PanicTestFunc, msg string, args ...interface{}
// Positive asserts that the specified element is positive
//
-// assert.Positive(t, 1)
-// assert.Positive(t, 1.23)
+// require.Positive(t, 1)
+// require.Positive(t, 1.23)
func Positive(t TestingT, e interface{}, msgAndArgs ...interface{}) {
if h, ok := t.(tHelper); ok {
h.Helper()
@@ -1835,8 +1899,8 @@ func Positive(t TestingT, e interface{}, msgAndArgs ...interface{}) {
// Positivef asserts that the specified element is positive
//
-// assert.Positivef(t, 1, "error message %s", "formatted")
-// assert.Positivef(t, 1.23, "error message %s", "formatted")
+// require.Positivef(t, 1, "error message %s", "formatted")
+// require.Positivef(t, 1.23, "error message %s", "formatted")
func Positivef(t TestingT, e interface{}, msg string, args ...interface{}) {
if h, ok := t.(tHelper); ok {
h.Helper()
@@ -1849,8 +1913,8 @@ func Positivef(t TestingT, e interface{}, msg string, args ...interface{}) {
// Regexp asserts that a specified regexp matches a string.
//
-// assert.Regexp(t, regexp.MustCompile("start"), "it's starting")
-// assert.Regexp(t, "start...$", "it's not starting")
+// require.Regexp(t, regexp.MustCompile("start"), "it's starting")
+// require.Regexp(t, "start...$", "it's not starting")
func Regexp(t TestingT, rx interface{}, str interface{}, msgAndArgs ...interface{}) {
if h, ok := t.(tHelper); ok {
h.Helper()
@@ -1863,8 +1927,8 @@ func Regexp(t TestingT, rx interface{}, str interface{}, msgAndArgs ...interface
// Regexpf asserts that a specified regexp matches a string.
//
-// assert.Regexpf(t, regexp.MustCompile("start"), "it's starting", "error message %s", "formatted")
-// assert.Regexpf(t, "start...$", "it's not starting", "error message %s", "formatted")
+// require.Regexpf(t, regexp.MustCompile("start"), "it's starting", "error message %s", "formatted")
+// require.Regexpf(t, "start...$", "it's not starting", "error message %s", "formatted")
func Regexpf(t TestingT, rx interface{}, str interface{}, msg string, args ...interface{}) {
if h, ok := t.(tHelper); ok {
h.Helper()
@@ -1877,7 +1941,7 @@ func Regexpf(t TestingT, rx interface{}, str interface{}, msg string, args ...in
// Same asserts that two pointers reference the same object.
//
-// assert.Same(t, ptr1, ptr2)
+// require.Same(t, ptr1, ptr2)
//
// Both arguments must be pointer variables. Pointer variable sameness is
// determined based on the equality of both type and value.
@@ -1893,7 +1957,7 @@ func Same(t TestingT, expected interface{}, actual interface{}, msgAndArgs ...in
// Samef asserts that two pointers reference the same object.
//
-// assert.Samef(t, ptr1, ptr2, "error message %s", "formatted")
+// require.Samef(t, ptr1, ptr2, "error message %s", "formatted")
//
// Both arguments must be pointer variables. Pointer variable sameness is
// determined based on the equality of both type and value.
@@ -1910,8 +1974,8 @@ func Samef(t TestingT, expected interface{}, actual interface{}, msg string, arg
// Subset asserts that the specified list(array, slice...) or map contains all
// elements given in the specified subset list(array, slice...) or map.
//
-// assert.Subset(t, [1, 2, 3], [1, 2])
-// assert.Subset(t, {"x": 1, "y": 2}, {"x": 1})
+// require.Subset(t, [1, 2, 3], [1, 2])
+// require.Subset(t, {"x": 1, "y": 2}, {"x": 1})
func Subset(t TestingT, list interface{}, subset interface{}, msgAndArgs ...interface{}) {
if h, ok := t.(tHelper); ok {
h.Helper()
@@ -1925,8 +1989,8 @@ func Subset(t TestingT, list interface{}, subset interface{}, msgAndArgs ...inte
// Subsetf asserts that the specified list(array, slice...) or map contains all
// elements given in the specified subset list(array, slice...) or map.
//
-// assert.Subsetf(t, [1, 2, 3], [1, 2], "error message %s", "formatted")
-// assert.Subsetf(t, {"x": 1, "y": 2}, {"x": 1}, "error message %s", "formatted")
+// require.Subsetf(t, [1, 2, 3], [1, 2], "error message %s", "formatted")
+// require.Subsetf(t, {"x": 1, "y": 2}, {"x": 1}, "error message %s", "formatted")
func Subsetf(t TestingT, list interface{}, subset interface{}, msg string, args ...interface{}) {
if h, ok := t.(tHelper); ok {
h.Helper()
@@ -1939,7 +2003,7 @@ func Subsetf(t TestingT, list interface{}, subset interface{}, msg string, args
// True asserts that the specified value is true.
//
-// assert.True(t, myBool)
+// require.True(t, myBool)
func True(t TestingT, value bool, msgAndArgs ...interface{}) {
if h, ok := t.(tHelper); ok {
h.Helper()
@@ -1952,7 +2016,7 @@ func True(t TestingT, value bool, msgAndArgs ...interface{}) {
// Truef asserts that the specified value is true.
//
-// assert.Truef(t, myBool, "error message %s", "formatted")
+// require.Truef(t, myBool, "error message %s", "formatted")
func Truef(t TestingT, value bool, msg string, args ...interface{}) {
if h, ok := t.(tHelper); ok {
h.Helper()
@@ -1965,7 +2029,7 @@ func Truef(t TestingT, value bool, msg string, args ...interface{}) {
// WithinDuration asserts that the two times are within duration delta of each other.
//
-// assert.WithinDuration(t, time.Now(), time.Now(), 10*time.Second)
+// require.WithinDuration(t, time.Now(), time.Now(), 10*time.Second)
func WithinDuration(t TestingT, expected time.Time, actual time.Time, delta time.Duration, msgAndArgs ...interface{}) {
if h, ok := t.(tHelper); ok {
h.Helper()
@@ -1978,7 +2042,7 @@ func WithinDuration(t TestingT, expected time.Time, actual time.Time, delta time
// WithinDurationf asserts that the two times are within duration delta of each other.
//
-// assert.WithinDurationf(t, time.Now(), time.Now(), 10*time.Second, "error message %s", "formatted")
+// require.WithinDurationf(t, time.Now(), time.Now(), 10*time.Second, "error message %s", "formatted")
func WithinDurationf(t TestingT, expected time.Time, actual time.Time, delta time.Duration, msg string, args ...interface{}) {
if h, ok := t.(tHelper); ok {
h.Helper()
@@ -1991,7 +2055,7 @@ func WithinDurationf(t TestingT, expected time.Time, actual time.Time, delta tim
// WithinRange asserts that a time is within a time range (inclusive).
//
-// assert.WithinRange(t, time.Now(), time.Now().Add(-time.Second), time.Now().Add(time.Second))
+// require.WithinRange(t, time.Now(), time.Now().Add(-time.Second), time.Now().Add(time.Second))
func WithinRange(t TestingT, actual time.Time, start time.Time, end time.Time, msgAndArgs ...interface{}) {
if h, ok := t.(tHelper); ok {
h.Helper()
@@ -2004,7 +2068,7 @@ func WithinRange(t TestingT, actual time.Time, start time.Time, end time.Time, m
// WithinRangef asserts that a time is within a time range (inclusive).
//
-// assert.WithinRangef(t, time.Now(), time.Now().Add(-time.Second), time.Now().Add(time.Second), "error message %s", "formatted")
+// require.WithinRangef(t, time.Now(), time.Now().Add(-time.Second), time.Now().Add(time.Second), "error message %s", "formatted")
func WithinRangef(t TestingT, actual time.Time, start time.Time, end time.Time, msg string, args ...interface{}) {
if h, ok := t.(tHelper); ok {
h.Helper()
diff --git a/vendor/github.com/stretchr/testify/require/require.go.tmpl b/vendor/github.com/stretchr/testify/require/require.go.tmpl
index 55e42ddebdc..8b328368509 100644
--- a/vendor/github.com/stretchr/testify/require/require.go.tmpl
+++ b/vendor/github.com/stretchr/testify/require/require.go.tmpl
@@ -1,4 +1,4 @@
-{{.Comment}}
+{{ replace .Comment "assert." "require."}}
func {{.DocInfo.Name}}(t TestingT, {{.Params}}) {
if h, ok := t.(tHelper); ok { h.Helper() }
if assert.{{.DocInfo.Name}}(t, {{.ForwardedParams}}) { return }
diff --git a/vendor/github.com/stretchr/testify/require/require_forward.go b/vendor/github.com/stretchr/testify/require/require_forward.go
index eee8310a5fa..1bd87304f43 100644
--- a/vendor/github.com/stretchr/testify/require/require_forward.go
+++ b/vendor/github.com/stretchr/testify/require/require_forward.go
@@ -187,8 +187,8 @@ func (a *Assertions) EqualExportedValuesf(expected interface{}, actual interface
EqualExportedValuesf(a.t, expected, actual, msg, args...)
}
-// EqualValues asserts that two objects are equal or convertible to the same types
-// and equal.
+// EqualValues asserts that two objects are equal or convertible to the larger
+// type and equal.
//
// a.EqualValues(uint32(123), int32(123))
func (a *Assertions) EqualValues(expected interface{}, actual interface{}, msgAndArgs ...interface{}) {
@@ -198,8 +198,8 @@ func (a *Assertions) EqualValues(expected interface{}, actual interface{}, msgAn
EqualValues(a.t, expected, actual, msgAndArgs...)
}
-// EqualValuesf asserts that two objects are equal or convertible to the same types
-// and equal.
+// EqualValuesf asserts that two objects are equal or convertible to the larger
+// type and equal.
//
// a.EqualValuesf(uint32(123), int32(123), "error message %s", "formatted")
func (a *Assertions) EqualValuesf(expected interface{}, actual interface{}, msg string, args ...interface{}) {
@@ -337,7 +337,7 @@ func (a *Assertions) Eventually(condition func() bool, waitFor time.Duration, ti
// a.EventuallyWithT(func(c *assert.CollectT) {
// // add assertions as needed; any assertion failure will fail the current tick
// assert.True(c, externalValue, "expected 'externalValue' to be true")
-// }, 1*time.Second, 10*time.Second, "external state has not changed to 'true'; still false")
+// }, 10*time.Second, 1*time.Second, "external state has not changed to 'true'; still false")
func (a *Assertions) EventuallyWithT(condition func(collect *assert.CollectT), waitFor time.Duration, tick time.Duration, msgAndArgs ...interface{}) {
if h, ok := a.t.(tHelper); ok {
h.Helper()
@@ -362,7 +362,7 @@ func (a *Assertions) EventuallyWithT(condition func(collect *assert.CollectT), w
// a.EventuallyWithTf(func(c *assert.CollectT, "error message %s", "formatted") {
// // add assertions as needed; any assertion failure will fail the current tick
// assert.True(c, externalValue, "expected 'externalValue' to be true")
-// }, 1*time.Second, 10*time.Second, "external state has not changed to 'true'; still false")
+// }, 10*time.Second, 1*time.Second, "external state has not changed to 'true'; still false")
func (a *Assertions) EventuallyWithTf(condition func(collect *assert.CollectT), waitFor time.Duration, tick time.Duration, msg string, args ...interface{}) {
if h, ok := a.t.(tHelper); ok {
h.Helper()
@@ -1129,6 +1129,40 @@ func (a *Assertions) NotContainsf(s interface{}, contains interface{}, msg strin
NotContainsf(a.t, s, contains, msg, args...)
}
+// NotElementsMatch asserts that the specified listA(array, slice...) is NOT equal to specified
+// listB(array, slice...) ignoring the order of the elements. If there are duplicate elements,
+// the number of appearances of each of them in both lists should not match.
+// This is an inverse of ElementsMatch.
+//
+// a.NotElementsMatch([1, 1, 2, 3], [1, 1, 2, 3]) -> false
+//
+// a.NotElementsMatch([1, 1, 2, 3], [1, 2, 3]) -> true
+//
+// a.NotElementsMatch([1, 2, 3], [1, 2, 4]) -> true
+func (a *Assertions) NotElementsMatch(listA interface{}, listB interface{}, msgAndArgs ...interface{}) {
+ if h, ok := a.t.(tHelper); ok {
+ h.Helper()
+ }
+ NotElementsMatch(a.t, listA, listB, msgAndArgs...)
+}
+
+// NotElementsMatchf asserts that the specified listA(array, slice...) is NOT equal to specified
+// listB(array, slice...) ignoring the order of the elements. If there are duplicate elements,
+// the number of appearances of each of them in both lists should not match.
+// This is an inverse of ElementsMatch.
+//
+// a.NotElementsMatchf([1, 1, 2, 3], [1, 1, 2, 3], "error message %s", "formatted") -> false
+//
+// a.NotElementsMatchf([1, 1, 2, 3], [1, 2, 3], "error message %s", "formatted") -> true
+//
+// a.NotElementsMatchf([1, 2, 3], [1, 2, 4], "error message %s", "formatted") -> true
+func (a *Assertions) NotElementsMatchf(listA interface{}, listB interface{}, msg string, args ...interface{}) {
+ if h, ok := a.t.(tHelper); ok {
+ h.Helper()
+ }
+ NotElementsMatchf(a.t, listA, listB, msg, args...)
+}
+
// NotEmpty asserts that the specified object is NOT empty. I.e. not nil, "", false, 0 or either
// a slice or a channel with len == 0.
//
@@ -1201,7 +1235,25 @@ func (a *Assertions) NotEqualf(expected interface{}, actual interface{}, msg str
NotEqualf(a.t, expected, actual, msg, args...)
}
-// NotErrorIs asserts that at none of the errors in err's chain matches target.
+// NotErrorAs asserts that none of the errors in err's chain matches target,
+// but if so, sets target to that error value.
+func (a *Assertions) NotErrorAs(err error, target interface{}, msgAndArgs ...interface{}) {
+ if h, ok := a.t.(tHelper); ok {
+ h.Helper()
+ }
+ NotErrorAs(a.t, err, target, msgAndArgs...)
+}
+
+// NotErrorAsf asserts that none of the errors in err's chain matches target,
+// but if so, sets target to that error value.
+func (a *Assertions) NotErrorAsf(err error, target interface{}, msg string, args ...interface{}) {
+ if h, ok := a.t.(tHelper); ok {
+ h.Helper()
+ }
+ NotErrorAsf(a.t, err, target, msg, args...)
+}
+
+// NotErrorIs asserts that none of the errors in err's chain matches target.
// This is a wrapper for errors.Is.
func (a *Assertions) NotErrorIs(err error, target error, msgAndArgs ...interface{}) {
if h, ok := a.t.(tHelper); ok {
@@ -1210,7 +1262,7 @@ func (a *Assertions) NotErrorIs(err error, target error, msgAndArgs ...interface
NotErrorIs(a.t, err, target, msgAndArgs...)
}
-// NotErrorIsf asserts that at none of the errors in err's chain matches target.
+// NotErrorIsf asserts that none of the errors in err's chain matches target.
// This is a wrapper for errors.Is.
func (a *Assertions) NotErrorIsf(err error, target error, msg string, args ...interface{}) {
if h, ok := a.t.(tHelper); ok {
diff --git a/vendor/github.com/stretchr/testify/require/requirements.go b/vendor/github.com/stretchr/testify/require/requirements.go
index 91772dfeb91..6b7ce929eb1 100644
--- a/vendor/github.com/stretchr/testify/require/requirements.go
+++ b/vendor/github.com/stretchr/testify/require/requirements.go
@@ -6,7 +6,7 @@ type TestingT interface {
FailNow()
}
-type tHelper interface {
+type tHelper = interface {
Helper()
}
diff --git a/vendor/golang.org/x/crypto/chacha20/chacha_noasm.go b/vendor/golang.org/x/crypto/chacha20/chacha_noasm.go
index db42e6676ab..c709b728477 100644
--- a/vendor/golang.org/x/crypto/chacha20/chacha_noasm.go
+++ b/vendor/golang.org/x/crypto/chacha20/chacha_noasm.go
@@ -2,7 +2,7 @@
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
-//go:build (!arm64 && !s390x && !ppc64le) || !gc || purego
+//go:build (!arm64 && !s390x && !ppc64 && !ppc64le) || !gc || purego
package chacha20
diff --git a/vendor/golang.org/x/crypto/chacha20/chacha_ppc64le.go b/vendor/golang.org/x/crypto/chacha20/chacha_ppc64x.go
similarity index 89%
rename from vendor/golang.org/x/crypto/chacha20/chacha_ppc64le.go
rename to vendor/golang.org/x/crypto/chacha20/chacha_ppc64x.go
index 3a4287f9900..bd183d9ba12 100644
--- a/vendor/golang.org/x/crypto/chacha20/chacha_ppc64le.go
+++ b/vendor/golang.org/x/crypto/chacha20/chacha_ppc64x.go
@@ -2,7 +2,7 @@
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
-//go:build gc && !purego
+//go:build gc && !purego && (ppc64 || ppc64le)
package chacha20
diff --git a/vendor/golang.org/x/crypto/chacha20/chacha_ppc64le.s b/vendor/golang.org/x/crypto/chacha20/chacha_ppc64x.s
similarity index 76%
rename from vendor/golang.org/x/crypto/chacha20/chacha_ppc64le.s
rename to vendor/golang.org/x/crypto/chacha20/chacha_ppc64x.s
index c672ccf6986..a660b4112fa 100644
--- a/vendor/golang.org/x/crypto/chacha20/chacha_ppc64le.s
+++ b/vendor/golang.org/x/crypto/chacha20/chacha_ppc64x.s
@@ -19,7 +19,7 @@
// The differences in this and the original implementation are
// due to the calling conventions and initialization of constants.
-//go:build gc && !purego
+//go:build gc && !purego && (ppc64 || ppc64le)
#include "textflag.h"
@@ -36,32 +36,68 @@
// for VPERMXOR
#define MASK R18
-DATA consts<>+0x00(SB)/8, $0x3320646e61707865
-DATA consts<>+0x08(SB)/8, $0x6b20657479622d32
-DATA consts<>+0x10(SB)/8, $0x0000000000000001
-DATA consts<>+0x18(SB)/8, $0x0000000000000000
-DATA consts<>+0x20(SB)/8, $0x0000000000000004
-DATA consts<>+0x28(SB)/8, $0x0000000000000000
-DATA consts<>+0x30(SB)/8, $0x0a0b08090e0f0c0d
-DATA consts<>+0x38(SB)/8, $0x0203000106070405
-DATA consts<>+0x40(SB)/8, $0x090a0b080d0e0f0c
-DATA consts<>+0x48(SB)/8, $0x0102030005060704
-DATA consts<>+0x50(SB)/8, $0x6170786561707865
-DATA consts<>+0x58(SB)/8, $0x6170786561707865
-DATA consts<>+0x60(SB)/8, $0x3320646e3320646e
-DATA consts<>+0x68(SB)/8, $0x3320646e3320646e
-DATA consts<>+0x70(SB)/8, $0x79622d3279622d32
-DATA consts<>+0x78(SB)/8, $0x79622d3279622d32
-DATA consts<>+0x80(SB)/8, $0x6b2065746b206574
-DATA consts<>+0x88(SB)/8, $0x6b2065746b206574
-DATA consts<>+0x90(SB)/8, $0x0000000100000000
-DATA consts<>+0x98(SB)/8, $0x0000000300000002
-DATA consts<>+0xa0(SB)/8, $0x5566774411223300
-DATA consts<>+0xa8(SB)/8, $0xddeeffcc99aabb88
-DATA consts<>+0xb0(SB)/8, $0x6677445522330011
-DATA consts<>+0xb8(SB)/8, $0xeeffccddaabb8899
+DATA consts<>+0x00(SB)/4, $0x61707865
+DATA consts<>+0x04(SB)/4, $0x3320646e
+DATA consts<>+0x08(SB)/4, $0x79622d32
+DATA consts<>+0x0c(SB)/4, $0x6b206574
+DATA consts<>+0x10(SB)/4, $0x00000001
+DATA consts<>+0x14(SB)/4, $0x00000000
+DATA consts<>+0x18(SB)/4, $0x00000000
+DATA consts<>+0x1c(SB)/4, $0x00000000
+DATA consts<>+0x20(SB)/4, $0x00000004
+DATA consts<>+0x24(SB)/4, $0x00000000
+DATA consts<>+0x28(SB)/4, $0x00000000
+DATA consts<>+0x2c(SB)/4, $0x00000000
+DATA consts<>+0x30(SB)/4, $0x0e0f0c0d
+DATA consts<>+0x34(SB)/4, $0x0a0b0809
+DATA consts<>+0x38(SB)/4, $0x06070405
+DATA consts<>+0x3c(SB)/4, $0x02030001
+DATA consts<>+0x40(SB)/4, $0x0d0e0f0c
+DATA consts<>+0x44(SB)/4, $0x090a0b08
+DATA consts<>+0x48(SB)/4, $0x05060704
+DATA consts<>+0x4c(SB)/4, $0x01020300
+DATA consts<>+0x50(SB)/4, $0x61707865
+DATA consts<>+0x54(SB)/4, $0x61707865
+DATA consts<>+0x58(SB)/4, $0x61707865
+DATA consts<>+0x5c(SB)/4, $0x61707865
+DATA consts<>+0x60(SB)/4, $0x3320646e
+DATA consts<>+0x64(SB)/4, $0x3320646e
+DATA consts<>+0x68(SB)/4, $0x3320646e
+DATA consts<>+0x6c(SB)/4, $0x3320646e
+DATA consts<>+0x70(SB)/4, $0x79622d32
+DATA consts<>+0x74(SB)/4, $0x79622d32
+DATA consts<>+0x78(SB)/4, $0x79622d32
+DATA consts<>+0x7c(SB)/4, $0x79622d32
+DATA consts<>+0x80(SB)/4, $0x6b206574
+DATA consts<>+0x84(SB)/4, $0x6b206574
+DATA consts<>+0x88(SB)/4, $0x6b206574
+DATA consts<>+0x8c(SB)/4, $0x6b206574
+DATA consts<>+0x90(SB)/4, $0x00000000
+DATA consts<>+0x94(SB)/4, $0x00000001
+DATA consts<>+0x98(SB)/4, $0x00000002
+DATA consts<>+0x9c(SB)/4, $0x00000003
+DATA consts<>+0xa0(SB)/4, $0x11223300
+DATA consts<>+0xa4(SB)/4, $0x55667744
+DATA consts<>+0xa8(SB)/4, $0x99aabb88
+DATA consts<>+0xac(SB)/4, $0xddeeffcc
+DATA consts<>+0xb0(SB)/4, $0x22330011
+DATA consts<>+0xb4(SB)/4, $0x66774455
+DATA consts<>+0xb8(SB)/4, $0xaabb8899
+DATA consts<>+0xbc(SB)/4, $0xeeffccdd
GLOBL consts<>(SB), RODATA, $0xc0
+#ifdef GOARCH_ppc64
+#define BE_XXBRW_INIT() \
+ LVSL (R0)(R0), V24 \
+ VSPLTISB $3, V25 \
+ VXOR V24, V25, V24 \
+
+#define BE_XXBRW(vr) VPERM vr, vr, V24, vr
+#else
+#define BE_XXBRW_INIT()
+#define BE_XXBRW(vr)
+#endif
+
//func chaCha20_ctr32_vsx(out, inp *byte, len int, key *[8]uint32, counter *uint32)
TEXT ·chaCha20_ctr32_vsx(SB),NOSPLIT,$64-40
MOVD out+0(FP), OUT
@@ -94,6 +130,8 @@ TEXT ·chaCha20_ctr32_vsx(SB),NOSPLIT,$64-40
// Clear V27
VXOR V27, V27, V27
+ BE_XXBRW_INIT()
+
// V28
LXVW4X (CONSTBASE)(R11), VS60
@@ -299,6 +337,11 @@ loop_vsx:
VADDUWM V8, V18, V8
VADDUWM V12, V19, V12
+ BE_XXBRW(V0)
+ BE_XXBRW(V4)
+ BE_XXBRW(V8)
+ BE_XXBRW(V12)
+
CMPU LEN, $64
BLT tail_vsx
@@ -327,6 +370,11 @@ loop_vsx:
VADDUWM V9, V18, V8
VADDUWM V13, V19, V12
+ BE_XXBRW(V0)
+ BE_XXBRW(V4)
+ BE_XXBRW(V8)
+ BE_XXBRW(V12)
+
CMPU LEN, $64
BLT tail_vsx
@@ -334,8 +382,8 @@ loop_vsx:
LXVW4X (INP)(R8), VS60
LXVW4X (INP)(R9), VS61
LXVW4X (INP)(R10), VS62
- VXOR V27, V0, V27
+ VXOR V27, V0, V27
VXOR V28, V4, V28
VXOR V29, V8, V29
VXOR V30, V12, V30
@@ -354,6 +402,11 @@ loop_vsx:
VADDUWM V10, V18, V8
VADDUWM V14, V19, V12
+ BE_XXBRW(V0)
+ BE_XXBRW(V4)
+ BE_XXBRW(V8)
+ BE_XXBRW(V12)
+
CMPU LEN, $64
BLT tail_vsx
@@ -381,6 +434,11 @@ loop_vsx:
VADDUWM V11, V18, V8
VADDUWM V15, V19, V12
+ BE_XXBRW(V0)
+ BE_XXBRW(V4)
+ BE_XXBRW(V8)
+ BE_XXBRW(V12)
+
CMPU LEN, $64
BLT tail_vsx
@@ -408,9 +466,9 @@ loop_vsx:
done_vsx:
// Increment counter by number of 64 byte blocks
- MOVD (CNT), R14
+ MOVWZ (CNT), R14
ADD BLOCKS, R14
- MOVD R14, (CNT)
+ MOVWZ R14, (CNT)
RET
tail_vsx:
diff --git a/vendor/golang.org/x/crypto/internal/poly1305/mac_noasm.go b/vendor/golang.org/x/crypto/internal/poly1305/mac_noasm.go
index 333da285b32..bd896bdc76d 100644
--- a/vendor/golang.org/x/crypto/internal/poly1305/mac_noasm.go
+++ b/vendor/golang.org/x/crypto/internal/poly1305/mac_noasm.go
@@ -2,7 +2,7 @@
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
-//go:build (!amd64 && !ppc64le && !s390x) || !gc || purego
+//go:build (!amd64 && !ppc64le && !ppc64 && !s390x) || !gc || purego
package poly1305
diff --git a/vendor/golang.org/x/crypto/internal/poly1305/sum_ppc64le.go b/vendor/golang.org/x/crypto/internal/poly1305/sum_ppc64x.go
similarity index 95%
rename from vendor/golang.org/x/crypto/internal/poly1305/sum_ppc64le.go
rename to vendor/golang.org/x/crypto/internal/poly1305/sum_ppc64x.go
index 4aec4874b50..1a1679aaad9 100644
--- a/vendor/golang.org/x/crypto/internal/poly1305/sum_ppc64le.go
+++ b/vendor/golang.org/x/crypto/internal/poly1305/sum_ppc64x.go
@@ -2,7 +2,7 @@
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
-//go:build gc && !purego
+//go:build gc && !purego && (ppc64 || ppc64le)
package poly1305
diff --git a/vendor/golang.org/x/crypto/internal/poly1305/sum_ppc64le.s b/vendor/golang.org/x/crypto/internal/poly1305/sum_ppc64x.s
similarity index 89%
rename from vendor/golang.org/x/crypto/internal/poly1305/sum_ppc64le.s
rename to vendor/golang.org/x/crypto/internal/poly1305/sum_ppc64x.s
index b3c1699bff5..6899a1dabc0 100644
--- a/vendor/golang.org/x/crypto/internal/poly1305/sum_ppc64le.s
+++ b/vendor/golang.org/x/crypto/internal/poly1305/sum_ppc64x.s
@@ -2,15 +2,25 @@
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
-//go:build gc && !purego
+//go:build gc && !purego && (ppc64 || ppc64le)
#include "textflag.h"
// This was ported from the amd64 implementation.
+#ifdef GOARCH_ppc64le
+#define LE_MOVD MOVD
+#define LE_MOVWZ MOVWZ
+#define LE_MOVHZ MOVHZ
+#else
+#define LE_MOVD MOVDBR
+#define LE_MOVWZ MOVWBR
+#define LE_MOVHZ MOVHBR
+#endif
+
#define POLY1305_ADD(msg, h0, h1, h2, t0, t1, t2) \
- MOVD (msg), t0; \
- MOVD 8(msg), t1; \
+ LE_MOVD (msg)( R0), t0; \
+ LE_MOVD (msg)(R24), t1; \
MOVD $1, t2; \
ADDC t0, h0, h0; \
ADDE t1, h1, h1; \
@@ -50,10 +60,6 @@
ADDE t3, h1, h1; \
ADDZE h2
-DATA ·poly1305Mask<>+0x00(SB)/8, $0x0FFFFFFC0FFFFFFF
-DATA ·poly1305Mask<>+0x08(SB)/8, $0x0FFFFFFC0FFFFFFC
-GLOBL ·poly1305Mask<>(SB), RODATA, $16
-
// func update(state *[7]uint64, msg []byte)
TEXT ·update(SB), $0-32
MOVD state+0(FP), R3
@@ -66,6 +72,8 @@ TEXT ·update(SB), $0-32
MOVD 24(R3), R11 // r0
MOVD 32(R3), R12 // r1
+ MOVD $8, R24
+
CMP R5, $16
BLT bytes_between_0_and_15
@@ -94,7 +102,7 @@ flush_buffer:
// Greater than 8 -- load the rightmost remaining bytes in msg
// and put into R17 (h1)
- MOVD (R4)(R21), R17
+ LE_MOVD (R4)(R21), R17
MOVD $16, R22
// Find the offset to those bytes
@@ -118,7 +126,7 @@ just1:
BLT less8
// Exactly 8
- MOVD (R4), R16
+ LE_MOVD (R4), R16
CMP R17, $0
@@ -133,7 +141,7 @@ less8:
MOVD $0, R22 // shift count
CMP R5, $4
BLT less4
- MOVWZ (R4), R16
+ LE_MOVWZ (R4), R16
ADD $4, R4
ADD $-4, R5
MOVD $32, R22
@@ -141,7 +149,7 @@ less8:
less4:
CMP R5, $2
BLT less2
- MOVHZ (R4), R21
+ LE_MOVHZ (R4), R21
SLD R22, R21, R21
OR R16, R21, R16
ADD $16, R22
diff --git a/vendor/golang.org/x/crypto/sha3/doc.go b/vendor/golang.org/x/crypto/sha3/doc.go
index 7e023090707..bbf391fe6e5 100644
--- a/vendor/golang.org/x/crypto/sha3/doc.go
+++ b/vendor/golang.org/x/crypto/sha3/doc.go
@@ -5,6 +5,10 @@
// Package sha3 implements the SHA-3 fixed-output-length hash functions and
// the SHAKE variable-output-length hash functions defined by FIPS-202.
//
+// All types in this package also implement [encoding.BinaryMarshaler],
+// [encoding.BinaryAppender] and [encoding.BinaryUnmarshaler] to marshal and
+// unmarshal the internal state of the hash.
+//
// Both types of hash function use the "sponge" construction and the Keccak
// permutation. For a detailed specification see http://keccak.noekeon.org/
//
diff --git a/vendor/golang.org/x/crypto/sha3/hashes.go b/vendor/golang.org/x/crypto/sha3/hashes.go
index c544b29e5f2..31fffbe0440 100644
--- a/vendor/golang.org/x/crypto/sha3/hashes.go
+++ b/vendor/golang.org/x/crypto/sha3/hashes.go
@@ -48,33 +48,52 @@ func init() {
crypto.RegisterHash(crypto.SHA3_512, New512)
}
+const (
+ dsbyteSHA3 = 0b00000110
+ dsbyteKeccak = 0b00000001
+ dsbyteShake = 0b00011111
+ dsbyteCShake = 0b00000100
+
+ // rateK[c] is the rate in bytes for Keccak[c] where c is the capacity in
+ // bits. Given the sponge size is 1600 bits, the rate is 1600 - c bits.
+ rateK256 = (1600 - 256) / 8
+ rateK448 = (1600 - 448) / 8
+ rateK512 = (1600 - 512) / 8
+ rateK768 = (1600 - 768) / 8
+ rateK1024 = (1600 - 1024) / 8
+)
+
func new224Generic() *state {
- return &state{rate: 144, outputLen: 28, dsbyte: 0x06}
+ return &state{rate: rateK448, outputLen: 28, dsbyte: dsbyteSHA3}
}
func new256Generic() *state {
- return &state{rate: 136, outputLen: 32, dsbyte: 0x06}
+ return &state{rate: rateK512, outputLen: 32, dsbyte: dsbyteSHA3}
}
func new384Generic() *state {
- return &state{rate: 104, outputLen: 48, dsbyte: 0x06}
+ return &state{rate: rateK768, outputLen: 48, dsbyte: dsbyteSHA3}
}
func new512Generic() *state {
- return &state{rate: 72, outputLen: 64, dsbyte: 0x06}
+ return &state{rate: rateK1024, outputLen: 64, dsbyte: dsbyteSHA3}
}
// NewLegacyKeccak256 creates a new Keccak-256 hash.
//
// Only use this function if you require compatibility with an existing cryptosystem
// that uses non-standard padding. All other users should use New256 instead.
-func NewLegacyKeccak256() hash.Hash { return &state{rate: 136, outputLen: 32, dsbyte: 0x01} }
+func NewLegacyKeccak256() hash.Hash {
+ return &state{rate: rateK512, outputLen: 32, dsbyte: dsbyteKeccak}
+}
// NewLegacyKeccak512 creates a new Keccak-512 hash.
//
// Only use this function if you require compatibility with an existing cryptosystem
// that uses non-standard padding. All other users should use New512 instead.
-func NewLegacyKeccak512() hash.Hash { return &state{rate: 72, outputLen: 64, dsbyte: 0x01} }
+func NewLegacyKeccak512() hash.Hash {
+ return &state{rate: rateK1024, outputLen: 64, dsbyte: dsbyteKeccak}
+}
// Sum224 returns the SHA3-224 digest of the data.
func Sum224(data []byte) (digest [28]byte) {
diff --git a/vendor/golang.org/x/crypto/sha3/sha3.go b/vendor/golang.org/x/crypto/sha3/sha3.go
index afedde5abf1..6658c44479b 100644
--- a/vendor/golang.org/x/crypto/sha3/sha3.go
+++ b/vendor/golang.org/x/crypto/sha3/sha3.go
@@ -4,6 +4,15 @@
package sha3
+import (
+ "crypto/subtle"
+ "encoding/binary"
+ "errors"
+ "unsafe"
+
+ "golang.org/x/sys/cpu"
+)
+
// spongeDirection indicates the direction bytes are flowing through the sponge.
type spongeDirection int
@@ -14,16 +23,13 @@ const (
spongeSqueezing
)
-const (
- // maxRate is the maximum size of the internal buffer. SHAKE-256
- // currently needs the largest buffer.
- maxRate = 168
-)
-
type state struct {
- // Generic sponge components.
- a [25]uint64 // main state of the hash
- rate int // the number of bytes of state to use
+ a [1600 / 8]byte // main state of the hash
+
+ // a[n:rate] is the buffer. If absorbing, it's the remaining space to XOR
+ // into before running the permutation. If squeezing, it's the remaining
+ // output to produce before running the permutation.
+ n, rate int
// dsbyte contains the "domain separation" bits and the first bit of
// the padding. Sections 6.1 and 6.2 of [1] separate the outputs of the
@@ -39,10 +45,6 @@ type state struct {
// Extendable-Output Functions (May 2014)"
dsbyte byte
- i, n int // storage[i:n] is the buffer, i is only used while squeezing
- storage [maxRate]byte
-
- // Specific to SHA-3 and SHAKE.
outputLen int // the default output size in bytes
state spongeDirection // whether the sponge is absorbing or squeezing
}
@@ -61,7 +63,7 @@ func (d *state) Reset() {
d.a[i] = 0
}
d.state = spongeAbsorbing
- d.i, d.n = 0, 0
+ d.n = 0
}
func (d *state) clone() *state {
@@ -69,22 +71,25 @@ func (d *state) clone() *state {
return &ret
}
-// permute applies the KeccakF-1600 permutation. It handles
-// any input-output buffering.
+// permute applies the KeccakF-1600 permutation.
func (d *state) permute() {
- switch d.state {
- case spongeAbsorbing:
- // If we're absorbing, we need to xor the input into the state
- // before applying the permutation.
- xorIn(d, d.storage[:d.rate])
- d.n = 0
- keccakF1600(&d.a)
- case spongeSqueezing:
- // If we're squeezing, we need to apply the permutation before
- // copying more output.
- keccakF1600(&d.a)
- d.i = 0
- copyOut(d, d.storage[:d.rate])
+ var a *[25]uint64
+ if cpu.IsBigEndian {
+ a = new([25]uint64)
+ for i := range a {
+ a[i] = binary.LittleEndian.Uint64(d.a[i*8:])
+ }
+ } else {
+ a = (*[25]uint64)(unsafe.Pointer(&d.a))
+ }
+
+ keccakF1600(a)
+ d.n = 0
+
+ if cpu.IsBigEndian {
+ for i := range a {
+ binary.LittleEndian.PutUint64(d.a[i*8:], a[i])
+ }
}
}
@@ -92,53 +97,36 @@ func (d *state) permute() {
// the multi-bitrate 10..1 padding rule, and permutes the state.
func (d *state) padAndPermute() {
// Pad with this instance's domain-separator bits. We know that there's
- // at least one byte of space in d.buf because, if it were full,
+ // at least one byte of space in the sponge because, if it were full,
// permute would have been called to empty it. dsbyte also contains the
// first one bit for the padding. See the comment in the state struct.
- d.storage[d.n] = d.dsbyte
- d.n++
- for d.n < d.rate {
- d.storage[d.n] = 0
- d.n++
- }
+ d.a[d.n] ^= d.dsbyte
// This adds the final one bit for the padding. Because of the way that
// bits are numbered from the LSB upwards, the final bit is the MSB of
// the last byte.
- d.storage[d.rate-1] ^= 0x80
+ d.a[d.rate-1] ^= 0x80
// Apply the permutation
d.permute()
d.state = spongeSqueezing
- d.n = d.rate
- copyOut(d, d.storage[:d.rate])
}
// Write absorbs more data into the hash's state. It panics if any
// output has already been read.
-func (d *state) Write(p []byte) (written int, err error) {
+func (d *state) Write(p []byte) (n int, err error) {
if d.state != spongeAbsorbing {
panic("sha3: Write after Read")
}
- written = len(p)
+
+ n = len(p)
for len(p) > 0 {
- if d.n == 0 && len(p) >= d.rate {
- // The fast path; absorb a full "rate" bytes of input and apply the permutation.
- xorIn(d, p[:d.rate])
- p = p[d.rate:]
- keccakF1600(&d.a)
- } else {
- // The slow path; buffer the input until we can fill the sponge, and then xor it in.
- todo := d.rate - d.n
- if todo > len(p) {
- todo = len(p)
- }
- d.n += copy(d.storage[d.n:], p[:todo])
- p = p[todo:]
-
- // If the sponge is full, apply the permutation.
- if d.n == d.rate {
- d.permute()
- }
+ x := subtle.XORBytes(d.a[d.n:d.rate], d.a[d.n:d.rate], p)
+ d.n += x
+ p = p[x:]
+
+ // If the sponge is full, apply the permutation.
+ if d.n == d.rate {
+ d.permute()
}
}
@@ -156,14 +144,14 @@ func (d *state) Read(out []byte) (n int, err error) {
// Now, do the squeezing.
for len(out) > 0 {
- n := copy(out, d.storage[d.i:d.n])
- d.i += n
- out = out[n:]
-
// Apply the permutation if we've squeezed the sponge dry.
- if d.i == d.rate {
+ if d.n == d.rate {
d.permute()
}
+
+ x := copy(out, d.a[d.n:d.rate])
+ d.n += x
+ out = out[x:]
}
return
@@ -183,3 +171,74 @@ func (d *state) Sum(in []byte) []byte {
dup.Read(hash)
return append(in, hash...)
}
+
+const (
+ magicSHA3 = "sha\x08"
+ magicShake = "sha\x09"
+ magicCShake = "sha\x0a"
+ magicKeccak = "sha\x0b"
+ // magic || rate || main state || n || sponge direction
+ marshaledSize = len(magicSHA3) + 1 + 200 + 1 + 1
+)
+
+func (d *state) MarshalBinary() ([]byte, error) {
+ return d.AppendBinary(make([]byte, 0, marshaledSize))
+}
+
+func (d *state) AppendBinary(b []byte) ([]byte, error) {
+ switch d.dsbyte {
+ case dsbyteSHA3:
+ b = append(b, magicSHA3...)
+ case dsbyteShake:
+ b = append(b, magicShake...)
+ case dsbyteCShake:
+ b = append(b, magicCShake...)
+ case dsbyteKeccak:
+ b = append(b, magicKeccak...)
+ default:
+ panic("unknown dsbyte")
+ }
+ // rate is at most 168, and n is at most rate.
+ b = append(b, byte(d.rate))
+ b = append(b, d.a[:]...)
+ b = append(b, byte(d.n), byte(d.state))
+ return b, nil
+}
+
+func (d *state) UnmarshalBinary(b []byte) error {
+ if len(b) != marshaledSize {
+ return errors.New("sha3: invalid hash state")
+ }
+
+ magic := string(b[:len(magicSHA3)])
+ b = b[len(magicSHA3):]
+ switch {
+ case magic == magicSHA3 && d.dsbyte == dsbyteSHA3:
+ case magic == magicShake && d.dsbyte == dsbyteShake:
+ case magic == magicCShake && d.dsbyte == dsbyteCShake:
+ case magic == magicKeccak && d.dsbyte == dsbyteKeccak:
+ default:
+ return errors.New("sha3: invalid hash state identifier")
+ }
+
+ rate := int(b[0])
+ b = b[1:]
+ if rate != d.rate {
+ return errors.New("sha3: invalid hash state function")
+ }
+
+ copy(d.a[:], b)
+ b = b[len(d.a):]
+
+ n, state := int(b[0]), spongeDirection(b[1])
+ if n > d.rate {
+ return errors.New("sha3: invalid hash state")
+ }
+ d.n = n
+ if state != spongeAbsorbing && state != spongeSqueezing {
+ return errors.New("sha3: invalid hash state")
+ }
+ d.state = state
+
+ return nil
+}
diff --git a/vendor/golang.org/x/crypto/sha3/shake.go b/vendor/golang.org/x/crypto/sha3/shake.go
index a01ef43577d..a6b3a4281f5 100644
--- a/vendor/golang.org/x/crypto/sha3/shake.go
+++ b/vendor/golang.org/x/crypto/sha3/shake.go
@@ -16,9 +16,12 @@ package sha3
// [2] https://doi.org/10.6028/NIST.SP.800-185
import (
+ "bytes"
"encoding/binary"
+ "errors"
"hash"
"io"
+ "math/bits"
)
// ShakeHash defines the interface to hash functions that support
@@ -50,41 +53,33 @@ type cshakeState struct {
initBlock []byte
}
-// Consts for configuring initial SHA-3 state
-const (
- dsbyteShake = 0x1f
- dsbyteCShake = 0x04
- rate128 = 168
- rate256 = 136
-)
+func bytepad(data []byte, rate int) []byte {
+ out := make([]byte, 0, 9+len(data)+rate-1)
+ out = append(out, leftEncode(uint64(rate))...)
+ out = append(out, data...)
+ if padlen := rate - len(out)%rate; padlen < rate {
+ out = append(out, make([]byte, padlen)...)
+ }
+ return out
+}
-func bytepad(input []byte, w int) []byte {
- // leftEncode always returns max 9 bytes
- buf := make([]byte, 0, 9+len(input)+w)
- buf = append(buf, leftEncode(uint64(w))...)
- buf = append(buf, input...)
- padlen := w - (len(buf) % w)
- return append(buf, make([]byte, padlen)...)
-}
-
-func leftEncode(value uint64) []byte {
- var b [9]byte
- binary.BigEndian.PutUint64(b[1:], value)
- // Trim all but last leading zero bytes
- i := byte(1)
- for i < 8 && b[i] == 0 {
- i++
+func leftEncode(x uint64) []byte {
+ // Let n be the smallest positive integer for which 2^(8n) > x.
+ n := (bits.Len64(x) + 7) / 8
+ if n == 0 {
+ n = 1
}
- // Prepend number of encoded bytes
- b[i-1] = 9 - i
- return b[i-1:]
+ // Return n || x with n as a byte and x an n bytes in big-endian order.
+ b := make([]byte, 9)
+ binary.BigEndian.PutUint64(b[1:], x)
+ b = b[9-n-1:]
+ b[0] = byte(n)
+ return b
}
func newCShake(N, S []byte, rate, outputLen int, dsbyte byte) ShakeHash {
c := cshakeState{state: &state{rate: rate, outputLen: outputLen, dsbyte: dsbyte}}
-
- // leftEncode returns max 9 bytes
- c.initBlock = make([]byte, 0, 9*2+len(N)+len(S))
+ c.initBlock = make([]byte, 0, 9+len(N)+9+len(S)) // leftEncode returns max 9 bytes
c.initBlock = append(c.initBlock, leftEncode(uint64(len(N))*8)...)
c.initBlock = append(c.initBlock, N...)
c.initBlock = append(c.initBlock, leftEncode(uint64(len(S))*8)...)
@@ -111,6 +106,30 @@ func (c *state) Clone() ShakeHash {
return c.clone()
}
+func (c *cshakeState) MarshalBinary() ([]byte, error) {
+ return c.AppendBinary(make([]byte, 0, marshaledSize+len(c.initBlock)))
+}
+
+func (c *cshakeState) AppendBinary(b []byte) ([]byte, error) {
+ b, err := c.state.AppendBinary(b)
+ if err != nil {
+ return nil, err
+ }
+ b = append(b, c.initBlock...)
+ return b, nil
+}
+
+func (c *cshakeState) UnmarshalBinary(b []byte) error {
+ if len(b) <= marshaledSize {
+ return errors.New("sha3: invalid hash state")
+ }
+ if err := c.state.UnmarshalBinary(b[:marshaledSize]); err != nil {
+ return err
+ }
+ c.initBlock = bytes.Clone(b[marshaledSize:])
+ return nil
+}
+
// NewShake128 creates a new SHAKE128 variable-output-length ShakeHash.
// Its generic security strength is 128 bits against all attacks if at
// least 32 bytes of its output are used.
@@ -126,11 +145,11 @@ func NewShake256() ShakeHash {
}
func newShake128Generic() *state {
- return &state{rate: rate128, outputLen: 32, dsbyte: dsbyteShake}
+ return &state{rate: rateK256, outputLen: 32, dsbyte: dsbyteShake}
}
func newShake256Generic() *state {
- return &state{rate: rate256, outputLen: 64, dsbyte: dsbyteShake}
+ return &state{rate: rateK512, outputLen: 64, dsbyte: dsbyteShake}
}
// NewCShake128 creates a new instance of cSHAKE128 variable-output-length ShakeHash,
@@ -143,7 +162,7 @@ func NewCShake128(N, S []byte) ShakeHash {
if len(N) == 0 && len(S) == 0 {
return NewShake128()
}
- return newCShake(N, S, rate128, 32, dsbyteCShake)
+ return newCShake(N, S, rateK256, 32, dsbyteCShake)
}
// NewCShake256 creates a new instance of cSHAKE256 variable-output-length ShakeHash,
@@ -156,7 +175,7 @@ func NewCShake256(N, S []byte) ShakeHash {
if len(N) == 0 && len(S) == 0 {
return NewShake256()
}
- return newCShake(N, S, rate256, 64, dsbyteCShake)
+ return newCShake(N, S, rateK512, 64, dsbyteCShake)
}
// ShakeSum128 writes an arbitrary-length digest of data into hash.
diff --git a/vendor/golang.org/x/crypto/sha3/xor.go b/vendor/golang.org/x/crypto/sha3/xor.go
deleted file mode 100644
index 6ada5c9574e..00000000000
--- a/vendor/golang.org/x/crypto/sha3/xor.go
+++ /dev/null
@@ -1,40 +0,0 @@
-// Copyright 2015 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-package sha3
-
-import (
- "crypto/subtle"
- "encoding/binary"
- "unsafe"
-
- "golang.org/x/sys/cpu"
-)
-
-// xorIn xors the bytes in buf into the state.
-func xorIn(d *state, buf []byte) {
- if cpu.IsBigEndian {
- for i := 0; len(buf) >= 8; i++ {
- a := binary.LittleEndian.Uint64(buf)
- d.a[i] ^= a
- buf = buf[8:]
- }
- } else {
- ab := (*[25 * 64 / 8]byte)(unsafe.Pointer(&d.a))
- subtle.XORBytes(ab[:], ab[:], buf)
- }
-}
-
-// copyOut copies uint64s to a byte buffer.
-func copyOut(d *state, b []byte) {
- if cpu.IsBigEndian {
- for i := 0; len(b) >= 8; i++ {
- binary.LittleEndian.PutUint64(b, d.a[i])
- b = b[8:]
- }
- } else {
- ab := (*[25 * 64 / 8]byte)(unsafe.Pointer(&d.a))
- copy(b, ab[:])
- }
-}
diff --git a/vendor/golang.org/x/crypto/ssh/client_auth.go b/vendor/golang.org/x/crypto/ssh/client_auth.go
index b93961010d3..b86dde151d7 100644
--- a/vendor/golang.org/x/crypto/ssh/client_auth.go
+++ b/vendor/golang.org/x/crypto/ssh/client_auth.go
@@ -555,6 +555,7 @@ func (cb KeyboardInteractiveChallenge) auth(session []byte, user string, c packe
}
gotMsgExtInfo := false
+ gotUserAuthInfoRequest := false
for {
packet, err := c.readPacket()
if err != nil {
@@ -585,6 +586,9 @@ func (cb KeyboardInteractiveChallenge) auth(session []byte, user string, c packe
if msg.PartialSuccess {
return authPartialSuccess, msg.Methods, nil
}
+ if !gotUserAuthInfoRequest {
+ return authFailure, msg.Methods, unexpectedMessageError(msgUserAuthInfoRequest, packet[0])
+ }
return authFailure, msg.Methods, nil
case msgUserAuthSuccess:
return authSuccess, nil, nil
@@ -596,6 +600,7 @@ func (cb KeyboardInteractiveChallenge) auth(session []byte, user string, c packe
if err := Unmarshal(packet, &msg); err != nil {
return authFailure, nil, err
}
+ gotUserAuthInfoRequest = true
// Manually unpack the prompt/echo pairs.
rest := msg.Prompts
diff --git a/vendor/golang.org/x/crypto/ssh/handshake.go b/vendor/golang.org/x/crypto/ssh/handshake.go
index 56cdc7c21c3..c9202b05da1 100644
--- a/vendor/golang.org/x/crypto/ssh/handshake.go
+++ b/vendor/golang.org/x/crypto/ssh/handshake.go
@@ -25,6 +25,11 @@ const debugHandshake = false
// quickly.
const chanSize = 16
+// maxPendingPackets sets the maximum number of packets to queue while waiting
+// for KEX to complete. This limits the total pending data to maxPendingPackets
+// * maxPacket bytes, which is ~16.8MB.
+const maxPendingPackets = 64
+
// keyingTransport is a packet based transport that supports key
// changes. It need not be thread-safe. It should pass through
// msgNewKeys in both directions.
@@ -73,13 +78,22 @@ type handshakeTransport struct {
incoming chan []byte
readError error
- mu sync.Mutex
- writeError error
- sentInitPacket []byte
- sentInitMsg *kexInitMsg
- pendingPackets [][]byte // Used when a key exchange is in progress.
+ mu sync.Mutex
+ // Condition for the above mutex. It is used to notify a completed key
+ // exchange or a write failure. Writes can wait for this condition while a
+ // key exchange is in progress.
+ writeCond *sync.Cond
+ writeError error
+ sentInitPacket []byte
+ sentInitMsg *kexInitMsg
+ // Used to queue writes when a key exchange is in progress. The length is
+ // limited by pendingPacketsSize. Once full, writes will block until the key
+ // exchange is completed or an error occurs. If not empty, it is emptied
+ // all at once when the key exchange is completed in kexLoop.
+ pendingPackets [][]byte
writePacketsLeft uint32
writeBytesLeft int64
+ userAuthComplete bool // whether the user authentication phase is complete
// If the read loop wants to schedule a kex, it pings this
// channel, and the write loop will send out a kex
@@ -133,6 +147,7 @@ func newHandshakeTransport(conn keyingTransport, config *Config, clientVersion,
config: config,
}
+ t.writeCond = sync.NewCond(&t.mu)
t.resetReadThresholds()
t.resetWriteThresholds()
@@ -259,6 +274,7 @@ func (t *handshakeTransport) recordWriteError(err error) {
defer t.mu.Unlock()
if t.writeError == nil && err != nil {
t.writeError = err
+ t.writeCond.Broadcast()
}
}
@@ -362,6 +378,8 @@ write:
}
}
t.pendingPackets = t.pendingPackets[:0]
+ // Unblock writePacket if waiting for KEX.
+ t.writeCond.Broadcast()
t.mu.Unlock()
}
@@ -552,26 +570,44 @@ func (t *handshakeTransport) sendKexInit() error {
return nil
}
+var errSendBannerPhase = errors.New("ssh: SendAuthBanner outside of authentication phase")
+
func (t *handshakeTransport) writePacket(p []byte) error {
+ t.mu.Lock()
+ defer t.mu.Unlock()
+
switch p[0] {
case msgKexInit:
return errors.New("ssh: only handshakeTransport can send kexInit")
case msgNewKeys:
return errors.New("ssh: only handshakeTransport can send newKeys")
+ case msgUserAuthBanner:
+ if t.userAuthComplete {
+ return errSendBannerPhase
+ }
+ case msgUserAuthSuccess:
+ t.userAuthComplete = true
}
- t.mu.Lock()
- defer t.mu.Unlock()
if t.writeError != nil {
return t.writeError
}
if t.sentInitMsg != nil {
- // Copy the packet so the writer can reuse the buffer.
- cp := make([]byte, len(p))
- copy(cp, p)
- t.pendingPackets = append(t.pendingPackets, cp)
- return nil
+ if len(t.pendingPackets) < maxPendingPackets {
+ // Copy the packet so the writer can reuse the buffer.
+ cp := make([]byte, len(p))
+ copy(cp, p)
+ t.pendingPackets = append(t.pendingPackets, cp)
+ return nil
+ }
+ for t.sentInitMsg != nil {
+ // Block and wait for KEX to complete or an error.
+ t.writeCond.Wait()
+ if t.writeError != nil {
+ return t.writeError
+ }
+ }
}
if t.writeBytesLeft > 0 {
@@ -588,6 +624,7 @@ func (t *handshakeTransport) writePacket(p []byte) error {
if err := t.pushPacket(p); err != nil {
t.writeError = err
+ t.writeCond.Broadcast()
}
return nil
diff --git a/vendor/golang.org/x/crypto/ssh/messages.go b/vendor/golang.org/x/crypto/ssh/messages.go
index b55f860564f..118427bc059 100644
--- a/vendor/golang.org/x/crypto/ssh/messages.go
+++ b/vendor/golang.org/x/crypto/ssh/messages.go
@@ -818,6 +818,8 @@ func decode(packet []byte) (interface{}, error) {
return new(userAuthSuccessMsg), nil
case msgUserAuthFailure:
msg = new(userAuthFailureMsg)
+ case msgUserAuthBanner:
+ msg = new(userAuthBannerMsg)
case msgUserAuthPubKeyOk:
msg = new(userAuthPubKeyOkMsg)
case msgGlobalRequest:
diff --git a/vendor/golang.org/x/crypto/ssh/server.go b/vendor/golang.org/x/crypto/ssh/server.go
index c0d1c29e6f9..1839ddc6a4b 100644
--- a/vendor/golang.org/x/crypto/ssh/server.go
+++ b/vendor/golang.org/x/crypto/ssh/server.go
@@ -59,6 +59,27 @@ type GSSAPIWithMICConfig struct {
Server GSSAPIServer
}
+// SendAuthBanner implements [ServerPreAuthConn].
+func (s *connection) SendAuthBanner(msg string) error {
+ return s.transport.writePacket(Marshal(&userAuthBannerMsg{
+ Message: msg,
+ }))
+}
+
+func (*connection) unexportedMethodForFutureProofing() {}
+
+// ServerPreAuthConn is the interface available on an incoming server
+// connection before authentication has completed.
+type ServerPreAuthConn interface {
+ unexportedMethodForFutureProofing() // permits growing ServerPreAuthConn safely later, ala testing.TB
+
+ ConnMetadata
+
+ // SendAuthBanner sends a banner message to the client.
+ // It returns an error once the authentication phase has ended.
+ SendAuthBanner(string) error
+}
+
// ServerConfig holds server specific configuration data.
type ServerConfig struct {
// Config contains configuration shared between client and server.
@@ -118,6 +139,12 @@ type ServerConfig struct {
// attempts.
AuthLogCallback func(conn ConnMetadata, method string, err error)
+ // PreAuthConnCallback, if non-nil, is called upon receiving a new connection
+ // before any authentication has started. The provided ServerPreAuthConn
+ // can be used at any time before authentication is complete, including
+ // after this callback has returned.
+ PreAuthConnCallback func(ServerPreAuthConn)
+
// ServerVersion is the version identification string to announce in
// the public handshake.
// If empty, a reasonable default is used.
@@ -149,7 +176,7 @@ func (s *ServerConfig) AddHostKey(key Signer) {
}
// cachedPubKey contains the results of querying whether a public key is
-// acceptable for a user.
+// acceptable for a user. This is a FIFO cache.
type cachedPubKey struct {
user string
pubKeyData []byte
@@ -157,7 +184,13 @@ type cachedPubKey struct {
perms *Permissions
}
-const maxCachedPubKeys = 16
+// maxCachedPubKeys is the number of cache entries we store.
+//
+// Due to consistent misuse of the PublicKeyCallback API, we have reduced this
+// to 1, such that the only key in the cache is the most recently seen one. This
+// forces the behavior that the last call to PublicKeyCallback will always be
+// with the key that is used for authentication.
+const maxCachedPubKeys = 1
// pubKeyCache caches tests for public keys. Since SSH clients
// will query whether a public key is acceptable before attempting to
@@ -179,9 +212,10 @@ func (c *pubKeyCache) get(user string, pubKeyData []byte) (cachedPubKey, bool) {
// add adds the given tuple to the cache.
func (c *pubKeyCache) add(candidate cachedPubKey) {
- if len(c.keys) < maxCachedPubKeys {
- c.keys = append(c.keys, candidate)
+ if len(c.keys) >= maxCachedPubKeys {
+ c.keys = c.keys[1:]
}
+ c.keys = append(c.keys, candidate)
}
// ServerConn is an authenticated SSH connection, as seen from the
@@ -481,6 +515,10 @@ func (b *BannerError) Error() string {
}
func (s *connection) serverAuthenticate(config *ServerConfig) (*Permissions, error) {
+ if config.PreAuthConnCallback != nil {
+ config.PreAuthConnCallback(s)
+ }
+
sessionID := s.transport.getSessionID()
var cache pubKeyCache
var perms *Permissions
@@ -488,7 +526,7 @@ func (s *connection) serverAuthenticate(config *ServerConfig) (*Permissions, err
authFailures := 0
noneAuthCount := 0
var authErrs []error
- var displayedBanner bool
+ var calledBannerCallback bool
partialSuccessReturned := false
// Set the initial authentication callbacks from the config. They can be
// changed if a PartialSuccessError is returned.
@@ -535,14 +573,10 @@ userAuthLoop:
s.user = userAuthReq.User
- if !displayedBanner && config.BannerCallback != nil {
- displayedBanner = true
- msg := config.BannerCallback(s)
- if msg != "" {
- bannerMsg := &userAuthBannerMsg{
- Message: msg,
- }
- if err := s.transport.writePacket(Marshal(bannerMsg)); err != nil {
+ if !calledBannerCallback && config.BannerCallback != nil {
+ calledBannerCallback = true
+ if msg := config.BannerCallback(s); msg != "" {
+ if err := s.SendAuthBanner(msg); err != nil {
return nil, err
}
}
@@ -755,10 +789,7 @@ userAuthLoop:
var bannerErr *BannerError
if errors.As(authErr, &bannerErr) {
if bannerErr.Message != "" {
- bannerMsg := &userAuthBannerMsg{
- Message: bannerErr.Message,
- }
- if err := s.transport.writePacket(Marshal(bannerMsg)); err != nil {
+ if err := s.SendAuthBanner(bannerErr.Message); err != nil {
return nil, err
}
}
diff --git a/vendor/golang.org/x/crypto/ssh/tcpip.go b/vendor/golang.org/x/crypto/ssh/tcpip.go
index ef5059a11d7..93d844f0351 100644
--- a/vendor/golang.org/x/crypto/ssh/tcpip.go
+++ b/vendor/golang.org/x/crypto/ssh/tcpip.go
@@ -459,7 +459,7 @@ func (c *Client) dial(laddr string, lport int, raddr string, rport int) (Channel
return nil, err
}
go DiscardRequests(in)
- return ch, err
+ return ch, nil
}
type tcpChan struct {
diff --git a/vendor/golang.org/x/net/context/context.go b/vendor/golang.org/x/net/context/context.go
index cf66309c4a8..db1c95fab1d 100644
--- a/vendor/golang.org/x/net/context/context.go
+++ b/vendor/golang.org/x/net/context/context.go
@@ -3,29 +3,31 @@
// license that can be found in the LICENSE file.
// Package context defines the Context type, which carries deadlines,
-// cancelation signals, and other request-scoped values across API boundaries
+// cancellation signals, and other request-scoped values across API boundaries
// and between processes.
// As of Go 1.7 this package is available in the standard library under the
-// name context. https://golang.org/pkg/context.
+// name [context], and migrating to it can be done automatically with [go fix].
//
-// Incoming requests to a server should create a Context, and outgoing calls to
-// servers should accept a Context. The chain of function calls between must
-// propagate the Context, optionally replacing it with a modified copy created
-// using WithDeadline, WithTimeout, WithCancel, or WithValue.
+// Incoming requests to a server should create a [Context], and outgoing
+// calls to servers should accept a Context. The chain of function
+// calls between them must propagate the Context, optionally replacing
+// it with a derived Context created using [WithCancel], [WithDeadline],
+// [WithTimeout], or [WithValue].
//
// Programs that use Contexts should follow these rules to keep interfaces
// consistent across packages and enable static analysis tools to check context
// propagation:
//
// Do not store Contexts inside a struct type; instead, pass a Context
-// explicitly to each function that needs it. The Context should be the first
+// explicitly to each function that needs it. This is discussed further in
+// https://go.dev/blog/context-and-structs. The Context should be the first
// parameter, typically named ctx:
//
// func DoSomething(ctx context.Context, arg Arg) error {
// // ... use ctx ...
// }
//
-// Do not pass a nil Context, even if a function permits it. Pass context.TODO
+// Do not pass a nil [Context], even if a function permits it. Pass [context.TODO]
// if you are unsure about which Context to use.
//
// Use context Values only for request-scoped data that transits processes and
@@ -34,9 +36,30 @@
// The same Context may be passed to functions running in different goroutines;
// Contexts are safe for simultaneous use by multiple goroutines.
//
-// See http://blog.golang.org/context for example code for a server that uses
+// See https://go.dev/blog/context for example code for a server that uses
// Contexts.
-package context // import "golang.org/x/net/context"
+//
+// [go fix]: https://go.dev/cmd/go#hdr-Update_packages_to_use_new_APIs
+package context
+
+import (
+ "context" // standard library's context, as of Go 1.7
+ "time"
+)
+
+// A Context carries a deadline, a cancellation signal, and other values across
+// API boundaries.
+//
+// Context's methods may be called by multiple goroutines simultaneously.
+type Context = context.Context
+
+// Canceled is the error returned by [Context.Err] when the context is canceled
+// for some reason other than its deadline passing.
+var Canceled = context.Canceled
+
+// DeadlineExceeded is the error returned by [Context.Err] when the context is canceled
+// due to its deadline passing.
+var DeadlineExceeded = context.DeadlineExceeded
// Background returns a non-nil, empty Context. It is never canceled, has no
// values, and has no deadline. It is typically used by the main function,
@@ -49,8 +72,73 @@ func Background() Context {
// TODO returns a non-nil, empty Context. Code should use context.TODO when
// it's unclear which Context to use or it is not yet available (because the
// surrounding function has not yet been extended to accept a Context
-// parameter). TODO is recognized by static analysis tools that determine
-// whether Contexts are propagated correctly in a program.
+// parameter).
func TODO() Context {
return todo
}
+
+var (
+ background = context.Background()
+ todo = context.TODO()
+)
+
+// A CancelFunc tells an operation to abandon its work.
+// A CancelFunc does not wait for the work to stop.
+// A CancelFunc may be called by multiple goroutines simultaneously.
+// After the first call, subsequent calls to a CancelFunc do nothing.
+type CancelFunc = context.CancelFunc
+
+// WithCancel returns a derived context that points to the parent context
+// but has a new Done channel. The returned context's Done channel is closed
+// when the returned cancel function is called or when the parent context's
+// Done channel is closed, whichever happens first.
+//
+// Canceling this context releases resources associated with it, so code should
+// call cancel as soon as the operations running in this [Context] complete.
+func WithCancel(parent Context) (ctx Context, cancel CancelFunc) {
+ return context.WithCancel(parent)
+}
+
+// WithDeadline returns a derived context that points to the parent context
+// but has the deadline adjusted to be no later than d. If the parent's
+// deadline is already earlier than d, WithDeadline(parent, d) is semantically
+// equivalent to parent. The returned [Context.Done] channel is closed when
+// the deadline expires, when the returned cancel function is called,
+// or when the parent context's Done channel is closed, whichever happens first.
+//
+// Canceling this context releases resources associated with it, so code should
+// call cancel as soon as the operations running in this [Context] complete.
+func WithDeadline(parent Context, d time.Time) (Context, CancelFunc) {
+ return context.WithDeadline(parent, d)
+}
+
+// WithTimeout returns WithDeadline(parent, time.Now().Add(timeout)).
+//
+// Canceling this context releases resources associated with it, so code should
+// call cancel as soon as the operations running in this [Context] complete:
+//
+// func slowOperationWithTimeout(ctx context.Context) (Result, error) {
+// ctx, cancel := context.WithTimeout(ctx, 100*time.Millisecond)
+// defer cancel() // releases resources if slowOperation completes before timeout elapses
+// return slowOperation(ctx)
+// }
+func WithTimeout(parent Context, timeout time.Duration) (Context, CancelFunc) {
+ return context.WithTimeout(parent, timeout)
+}
+
+// WithValue returns a derived context that points to the parent Context.
+// In the derived context, the value associated with key is val.
+//
+// Use context Values only for request-scoped data that transits processes and
+// APIs, not for passing optional parameters to functions.
+//
+// The provided key must be comparable and should not be of type
+// string or any other built-in type to avoid collisions between
+// packages using context. Users of WithValue should define their own
+// types for keys. To avoid allocating when assigning to an
+// interface{}, context keys often have concrete type
+// struct{}. Alternatively, exported context key variables' static
+// type should be a pointer or interface.
+func WithValue(parent Context, key, val interface{}) Context {
+ return context.WithValue(parent, key, val)
+}
diff --git a/vendor/golang.org/x/net/context/go17.go b/vendor/golang.org/x/net/context/go17.go
deleted file mode 100644
index 0c1b8679376..00000000000
--- a/vendor/golang.org/x/net/context/go17.go
+++ /dev/null
@@ -1,72 +0,0 @@
-// Copyright 2016 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-//go:build go1.7
-
-package context
-
-import (
- "context" // standard library's context, as of Go 1.7
- "time"
-)
-
-var (
- todo = context.TODO()
- background = context.Background()
-)
-
-// Canceled is the error returned by Context.Err when the context is canceled.
-var Canceled = context.Canceled
-
-// DeadlineExceeded is the error returned by Context.Err when the context's
-// deadline passes.
-var DeadlineExceeded = context.DeadlineExceeded
-
-// WithCancel returns a copy of parent with a new Done channel. The returned
-// context's Done channel is closed when the returned cancel function is called
-// or when the parent context's Done channel is closed, whichever happens first.
-//
-// Canceling this context releases resources associated with it, so code should
-// call cancel as soon as the operations running in this Context complete.
-func WithCancel(parent Context) (ctx Context, cancel CancelFunc) {
- ctx, f := context.WithCancel(parent)
- return ctx, f
-}
-
-// WithDeadline returns a copy of the parent context with the deadline adjusted
-// to be no later than d. If the parent's deadline is already earlier than d,
-// WithDeadline(parent, d) is semantically equivalent to parent. The returned
-// context's Done channel is closed when the deadline expires, when the returned
-// cancel function is called, or when the parent context's Done channel is
-// closed, whichever happens first.
-//
-// Canceling this context releases resources associated with it, so code should
-// call cancel as soon as the operations running in this Context complete.
-func WithDeadline(parent Context, deadline time.Time) (Context, CancelFunc) {
- ctx, f := context.WithDeadline(parent, deadline)
- return ctx, f
-}
-
-// WithTimeout returns WithDeadline(parent, time.Now().Add(timeout)).
-//
-// Canceling this context releases resources associated with it, so code should
-// call cancel as soon as the operations running in this Context complete:
-//
-// func slowOperationWithTimeout(ctx context.Context) (Result, error) {
-// ctx, cancel := context.WithTimeout(ctx, 100*time.Millisecond)
-// defer cancel() // releases resources if slowOperation completes before timeout elapses
-// return slowOperation(ctx)
-// }
-func WithTimeout(parent Context, timeout time.Duration) (Context, CancelFunc) {
- return WithDeadline(parent, time.Now().Add(timeout))
-}
-
-// WithValue returns a copy of parent in which the value associated with key is
-// val.
-//
-// Use context Values only for request-scoped data that transits processes and
-// APIs, not for passing optional parameters to functions.
-func WithValue(parent Context, key interface{}, val interface{}) Context {
- return context.WithValue(parent, key, val)
-}
diff --git a/vendor/golang.org/x/net/context/go19.go b/vendor/golang.org/x/net/context/go19.go
deleted file mode 100644
index e31e35a9045..00000000000
--- a/vendor/golang.org/x/net/context/go19.go
+++ /dev/null
@@ -1,20 +0,0 @@
-// Copyright 2017 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-//go:build go1.9
-
-package context
-
-import "context" // standard library's context, as of Go 1.7
-
-// A Context carries a deadline, a cancelation signal, and other values across
-// API boundaries.
-//
-// Context's methods may be called by multiple goroutines simultaneously.
-type Context = context.Context
-
-// A CancelFunc tells an operation to abandon its work.
-// A CancelFunc does not wait for the work to stop.
-// After the first call, subsequent calls to a CancelFunc do nothing.
-type CancelFunc = context.CancelFunc
diff --git a/vendor/golang.org/x/net/context/pre_go17.go b/vendor/golang.org/x/net/context/pre_go17.go
deleted file mode 100644
index 065ff3dfa52..00000000000
--- a/vendor/golang.org/x/net/context/pre_go17.go
+++ /dev/null
@@ -1,300 +0,0 @@
-// Copyright 2014 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-//go:build !go1.7
-
-package context
-
-import (
- "errors"
- "fmt"
- "sync"
- "time"
-)
-
-// An emptyCtx is never canceled, has no values, and has no deadline. It is not
-// struct{}, since vars of this type must have distinct addresses.
-type emptyCtx int
-
-func (*emptyCtx) Deadline() (deadline time.Time, ok bool) {
- return
-}
-
-func (*emptyCtx) Done() <-chan struct{} {
- return nil
-}
-
-func (*emptyCtx) Err() error {
- return nil
-}
-
-func (*emptyCtx) Value(key interface{}) interface{} {
- return nil
-}
-
-func (e *emptyCtx) String() string {
- switch e {
- case background:
- return "context.Background"
- case todo:
- return "context.TODO"
- }
- return "unknown empty Context"
-}
-
-var (
- background = new(emptyCtx)
- todo = new(emptyCtx)
-)
-
-// Canceled is the error returned by Context.Err when the context is canceled.
-var Canceled = errors.New("context canceled")
-
-// DeadlineExceeded is the error returned by Context.Err when the context's
-// deadline passes.
-var DeadlineExceeded = errors.New("context deadline exceeded")
-
-// WithCancel returns a copy of parent with a new Done channel. The returned
-// context's Done channel is closed when the returned cancel function is called
-// or when the parent context's Done channel is closed, whichever happens first.
-//
-// Canceling this context releases resources associated with it, so code should
-// call cancel as soon as the operations running in this Context complete.
-func WithCancel(parent Context) (ctx Context, cancel CancelFunc) {
- c := newCancelCtx(parent)
- propagateCancel(parent, c)
- return c, func() { c.cancel(true, Canceled) }
-}
-
-// newCancelCtx returns an initialized cancelCtx.
-func newCancelCtx(parent Context) *cancelCtx {
- return &cancelCtx{
- Context: parent,
- done: make(chan struct{}),
- }
-}
-
-// propagateCancel arranges for child to be canceled when parent is.
-func propagateCancel(parent Context, child canceler) {
- if parent.Done() == nil {
- return // parent is never canceled
- }
- if p, ok := parentCancelCtx(parent); ok {
- p.mu.Lock()
- if p.err != nil {
- // parent has already been canceled
- child.cancel(false, p.err)
- } else {
- if p.children == nil {
- p.children = make(map[canceler]bool)
- }
- p.children[child] = true
- }
- p.mu.Unlock()
- } else {
- go func() {
- select {
- case <-parent.Done():
- child.cancel(false, parent.Err())
- case <-child.Done():
- }
- }()
- }
-}
-
-// parentCancelCtx follows a chain of parent references until it finds a
-// *cancelCtx. This function understands how each of the concrete types in this
-// package represents its parent.
-func parentCancelCtx(parent Context) (*cancelCtx, bool) {
- for {
- switch c := parent.(type) {
- case *cancelCtx:
- return c, true
- case *timerCtx:
- return c.cancelCtx, true
- case *valueCtx:
- parent = c.Context
- default:
- return nil, false
- }
- }
-}
-
-// removeChild removes a context from its parent.
-func removeChild(parent Context, child canceler) {
- p, ok := parentCancelCtx(parent)
- if !ok {
- return
- }
- p.mu.Lock()
- if p.children != nil {
- delete(p.children, child)
- }
- p.mu.Unlock()
-}
-
-// A canceler is a context type that can be canceled directly. The
-// implementations are *cancelCtx and *timerCtx.
-type canceler interface {
- cancel(removeFromParent bool, err error)
- Done() <-chan struct{}
-}
-
-// A cancelCtx can be canceled. When canceled, it also cancels any children
-// that implement canceler.
-type cancelCtx struct {
- Context
-
- done chan struct{} // closed by the first cancel call.
-
- mu sync.Mutex
- children map[canceler]bool // set to nil by the first cancel call
- err error // set to non-nil by the first cancel call
-}
-
-func (c *cancelCtx) Done() <-chan struct{} {
- return c.done
-}
-
-func (c *cancelCtx) Err() error {
- c.mu.Lock()
- defer c.mu.Unlock()
- return c.err
-}
-
-func (c *cancelCtx) String() string {
- return fmt.Sprintf("%v.WithCancel", c.Context)
-}
-
-// cancel closes c.done, cancels each of c's children, and, if
-// removeFromParent is true, removes c from its parent's children.
-func (c *cancelCtx) cancel(removeFromParent bool, err error) {
- if err == nil {
- panic("context: internal error: missing cancel error")
- }
- c.mu.Lock()
- if c.err != nil {
- c.mu.Unlock()
- return // already canceled
- }
- c.err = err
- close(c.done)
- for child := range c.children {
- // NOTE: acquiring the child's lock while holding parent's lock.
- child.cancel(false, err)
- }
- c.children = nil
- c.mu.Unlock()
-
- if removeFromParent {
- removeChild(c.Context, c)
- }
-}
-
-// WithDeadline returns a copy of the parent context with the deadline adjusted
-// to be no later than d. If the parent's deadline is already earlier than d,
-// WithDeadline(parent, d) is semantically equivalent to parent. The returned
-// context's Done channel is closed when the deadline expires, when the returned
-// cancel function is called, or when the parent context's Done channel is
-// closed, whichever happens first.
-//
-// Canceling this context releases resources associated with it, so code should
-// call cancel as soon as the operations running in this Context complete.
-func WithDeadline(parent Context, deadline time.Time) (Context, CancelFunc) {
- if cur, ok := parent.Deadline(); ok && cur.Before(deadline) {
- // The current deadline is already sooner than the new one.
- return WithCancel(parent)
- }
- c := &timerCtx{
- cancelCtx: newCancelCtx(parent),
- deadline: deadline,
- }
- propagateCancel(parent, c)
- d := deadline.Sub(time.Now())
- if d <= 0 {
- c.cancel(true, DeadlineExceeded) // deadline has already passed
- return c, func() { c.cancel(true, Canceled) }
- }
- c.mu.Lock()
- defer c.mu.Unlock()
- if c.err == nil {
- c.timer = time.AfterFunc(d, func() {
- c.cancel(true, DeadlineExceeded)
- })
- }
- return c, func() { c.cancel(true, Canceled) }
-}
-
-// A timerCtx carries a timer and a deadline. It embeds a cancelCtx to
-// implement Done and Err. It implements cancel by stopping its timer then
-// delegating to cancelCtx.cancel.
-type timerCtx struct {
- *cancelCtx
- timer *time.Timer // Under cancelCtx.mu.
-
- deadline time.Time
-}
-
-func (c *timerCtx) Deadline() (deadline time.Time, ok bool) {
- return c.deadline, true
-}
-
-func (c *timerCtx) String() string {
- return fmt.Sprintf("%v.WithDeadline(%s [%s])", c.cancelCtx.Context, c.deadline, c.deadline.Sub(time.Now()))
-}
-
-func (c *timerCtx) cancel(removeFromParent bool, err error) {
- c.cancelCtx.cancel(false, err)
- if removeFromParent {
- // Remove this timerCtx from its parent cancelCtx's children.
- removeChild(c.cancelCtx.Context, c)
- }
- c.mu.Lock()
- if c.timer != nil {
- c.timer.Stop()
- c.timer = nil
- }
- c.mu.Unlock()
-}
-
-// WithTimeout returns WithDeadline(parent, time.Now().Add(timeout)).
-//
-// Canceling this context releases resources associated with it, so code should
-// call cancel as soon as the operations running in this Context complete:
-//
-// func slowOperationWithTimeout(ctx context.Context) (Result, error) {
-// ctx, cancel := context.WithTimeout(ctx, 100*time.Millisecond)
-// defer cancel() // releases resources if slowOperation completes before timeout elapses
-// return slowOperation(ctx)
-// }
-func WithTimeout(parent Context, timeout time.Duration) (Context, CancelFunc) {
- return WithDeadline(parent, time.Now().Add(timeout))
-}
-
-// WithValue returns a copy of parent in which the value associated with key is
-// val.
-//
-// Use context Values only for request-scoped data that transits processes and
-// APIs, not for passing optional parameters to functions.
-func WithValue(parent Context, key interface{}, val interface{}) Context {
- return &valueCtx{parent, key, val}
-}
-
-// A valueCtx carries a key-value pair. It implements Value for that key and
-// delegates all other calls to the embedded Context.
-type valueCtx struct {
- Context
- key, val interface{}
-}
-
-func (c *valueCtx) String() string {
- return fmt.Sprintf("%v.WithValue(%#v, %#v)", c.Context, c.key, c.val)
-}
-
-func (c *valueCtx) Value(key interface{}) interface{} {
- if c.key == key {
- return c.val
- }
- return c.Context.Value(key)
-}
diff --git a/vendor/golang.org/x/net/context/pre_go19.go b/vendor/golang.org/x/net/context/pre_go19.go
deleted file mode 100644
index ec5a6380335..00000000000
--- a/vendor/golang.org/x/net/context/pre_go19.go
+++ /dev/null
@@ -1,109 +0,0 @@
-// Copyright 2014 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-//go:build !go1.9
-
-package context
-
-import "time"
-
-// A Context carries a deadline, a cancelation signal, and other values across
-// API boundaries.
-//
-// Context's methods may be called by multiple goroutines simultaneously.
-type Context interface {
- // Deadline returns the time when work done on behalf of this context
- // should be canceled. Deadline returns ok==false when no deadline is
- // set. Successive calls to Deadline return the same results.
- Deadline() (deadline time.Time, ok bool)
-
- // Done returns a channel that's closed when work done on behalf of this
- // context should be canceled. Done may return nil if this context can
- // never be canceled. Successive calls to Done return the same value.
- //
- // WithCancel arranges for Done to be closed when cancel is called;
- // WithDeadline arranges for Done to be closed when the deadline
- // expires; WithTimeout arranges for Done to be closed when the timeout
- // elapses.
- //
- // Done is provided for use in select statements:
- //
- // // Stream generates values with DoSomething and sends them to out
- // // until DoSomething returns an error or ctx.Done is closed.
- // func Stream(ctx context.Context, out chan<- Value) error {
- // for {
- // v, err := DoSomething(ctx)
- // if err != nil {
- // return err
- // }
- // select {
- // case <-ctx.Done():
- // return ctx.Err()
- // case out <- v:
- // }
- // }
- // }
- //
- // See http://blog.golang.org/pipelines for more examples of how to use
- // a Done channel for cancelation.
- Done() <-chan struct{}
-
- // Err returns a non-nil error value after Done is closed. Err returns
- // Canceled if the context was canceled or DeadlineExceeded if the
- // context's deadline passed. No other values for Err are defined.
- // After Done is closed, successive calls to Err return the same value.
- Err() error
-
- // Value returns the value associated with this context for key, or nil
- // if no value is associated with key. Successive calls to Value with
- // the same key returns the same result.
- //
- // Use context values only for request-scoped data that transits
- // processes and API boundaries, not for passing optional parameters to
- // functions.
- //
- // A key identifies a specific value in a Context. Functions that wish
- // to store values in Context typically allocate a key in a global
- // variable then use that key as the argument to context.WithValue and
- // Context.Value. A key can be any type that supports equality;
- // packages should define keys as an unexported type to avoid
- // collisions.
- //
- // Packages that define a Context key should provide type-safe accessors
- // for the values stores using that key:
- //
- // // Package user defines a User type that's stored in Contexts.
- // package user
- //
- // import "golang.org/x/net/context"
- //
- // // User is the type of value stored in the Contexts.
- // type User struct {...}
- //
- // // key is an unexported type for keys defined in this package.
- // // This prevents collisions with keys defined in other packages.
- // type key int
- //
- // // userKey is the key for user.User values in Contexts. It is
- // // unexported; clients use user.NewContext and user.FromContext
- // // instead of using this key directly.
- // var userKey key = 0
- //
- // // NewContext returns a new Context that carries value u.
- // func NewContext(ctx context.Context, u *User) context.Context {
- // return context.WithValue(ctx, userKey, u)
- // }
- //
- // // FromContext returns the User value stored in ctx, if any.
- // func FromContext(ctx context.Context) (*User, bool) {
- // u, ok := ctx.Value(userKey).(*User)
- // return u, ok
- // }
- Value(key interface{}) interface{}
-}
-
-// A CancelFunc tells an operation to abandon its work.
-// A CancelFunc does not wait for the work to stop.
-// After the first call, subsequent calls to a CancelFunc do nothing.
-type CancelFunc func()
diff --git a/vendor/golang.org/x/net/html/doc.go b/vendor/golang.org/x/net/html/doc.go
index 3a7e5ab1765..885c4c5936b 100644
--- a/vendor/golang.org/x/net/html/doc.go
+++ b/vendor/golang.org/x/net/html/doc.go
@@ -78,16 +78,11 @@ example, to process each anchor node in depth-first order:
if err != nil {
// ...
}
- var f func(*html.Node)
- f = func(n *html.Node) {
+ for n := range doc.Descendants() {
if n.Type == html.ElementNode && n.Data == "a" {
// Do something with n...
}
- for c := n.FirstChild; c != nil; c = c.NextSibling {
- f(c)
- }
}
- f(doc)
The relevant specifications include:
https://html.spec.whatwg.org/multipage/syntax.html and
diff --git a/vendor/golang.org/x/net/html/doctype.go b/vendor/golang.org/x/net/html/doctype.go
index c484e5a94fb..bca3ae9a0c2 100644
--- a/vendor/golang.org/x/net/html/doctype.go
+++ b/vendor/golang.org/x/net/html/doctype.go
@@ -87,7 +87,7 @@ func parseDoctype(s string) (n *Node, quirks bool) {
}
}
if lastAttr := n.Attr[len(n.Attr)-1]; lastAttr.Key == "system" &&
- strings.ToLower(lastAttr.Val) == "http://www.ibm.com/data/dtd/v11/ibmxhtml1-transitional.dtd" {
+ strings.EqualFold(lastAttr.Val, "http://www.ibm.com/data/dtd/v11/ibmxhtml1-transitional.dtd") {
quirks = true
}
}
diff --git a/vendor/golang.org/x/net/html/foreign.go b/vendor/golang.org/x/net/html/foreign.go
index 9da9e9dc424..e8515d8e887 100644
--- a/vendor/golang.org/x/net/html/foreign.go
+++ b/vendor/golang.org/x/net/html/foreign.go
@@ -40,8 +40,7 @@ func htmlIntegrationPoint(n *Node) bool {
if n.Data == "annotation-xml" {
for _, a := range n.Attr {
if a.Key == "encoding" {
- val := strings.ToLower(a.Val)
- if val == "text/html" || val == "application/xhtml+xml" {
+ if strings.EqualFold(a.Val, "text/html") || strings.EqualFold(a.Val, "application/xhtml+xml") {
return true
}
}
diff --git a/vendor/golang.org/x/net/html/iter.go b/vendor/golang.org/x/net/html/iter.go
new file mode 100644
index 00000000000..54be8fd30fd
--- /dev/null
+++ b/vendor/golang.org/x/net/html/iter.go
@@ -0,0 +1,56 @@
+// Copyright 2024 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+//go:build go1.23
+
+package html
+
+import "iter"
+
+// Ancestors returns an iterator over the ancestors of n, starting with n.Parent.
+//
+// Mutating a Node or its parents while iterating may have unexpected results.
+func (n *Node) Ancestors() iter.Seq[*Node] {
+ _ = n.Parent // eager nil check
+
+ return func(yield func(*Node) bool) {
+ for p := n.Parent; p != nil && yield(p); p = p.Parent {
+ }
+ }
+}
+
+// ChildNodes returns an iterator over the immediate children of n,
+// starting with n.FirstChild.
+//
+// Mutating a Node or its children while iterating may have unexpected results.
+func (n *Node) ChildNodes() iter.Seq[*Node] {
+ _ = n.FirstChild // eager nil check
+
+ return func(yield func(*Node) bool) {
+ for c := n.FirstChild; c != nil && yield(c); c = c.NextSibling {
+ }
+ }
+
+}
+
+// Descendants returns an iterator over all nodes recursively beneath
+// n, excluding n itself. Nodes are visited in depth-first preorder.
+//
+// Mutating a Node or its descendants while iterating may have unexpected results.
+func (n *Node) Descendants() iter.Seq[*Node] {
+ _ = n.FirstChild // eager nil check
+
+ return func(yield func(*Node) bool) {
+ n.descendants(yield)
+ }
+}
+
+func (n *Node) descendants(yield func(*Node) bool) bool {
+ for c := range n.ChildNodes() {
+ if !yield(c) || !c.descendants(yield) {
+ return false
+ }
+ }
+ return true
+}
diff --git a/vendor/golang.org/x/net/html/node.go b/vendor/golang.org/x/net/html/node.go
index 1350eef22c3..77741a1950e 100644
--- a/vendor/golang.org/x/net/html/node.go
+++ b/vendor/golang.org/x/net/html/node.go
@@ -38,6 +38,10 @@ var scopeMarker = Node{Type: scopeMarkerNode}
// that it looks like "a 1<<24-1 {
return ConnectionError(ErrCodeProtocol)
}
+ case SettingEnableConnectProtocol:
+ if s.Val != 1 && s.Val != 0 {
+ return ConnectionError(ErrCodeProtocol)
+ }
}
return nil
}
@@ -150,21 +166,23 @@ func (s Setting) Valid() error {
type SettingID uint16
const (
- SettingHeaderTableSize SettingID = 0x1
- SettingEnablePush SettingID = 0x2
- SettingMaxConcurrentStreams SettingID = 0x3
- SettingInitialWindowSize SettingID = 0x4
- SettingMaxFrameSize SettingID = 0x5
- SettingMaxHeaderListSize SettingID = 0x6
+ SettingHeaderTableSize SettingID = 0x1
+ SettingEnablePush SettingID = 0x2
+ SettingMaxConcurrentStreams SettingID = 0x3
+ SettingInitialWindowSize SettingID = 0x4
+ SettingMaxFrameSize SettingID = 0x5
+ SettingMaxHeaderListSize SettingID = 0x6
+ SettingEnableConnectProtocol SettingID = 0x8
)
var settingName = map[SettingID]string{
- SettingHeaderTableSize: "HEADER_TABLE_SIZE",
- SettingEnablePush: "ENABLE_PUSH",
- SettingMaxConcurrentStreams: "MAX_CONCURRENT_STREAMS",
- SettingInitialWindowSize: "INITIAL_WINDOW_SIZE",
- SettingMaxFrameSize: "MAX_FRAME_SIZE",
- SettingMaxHeaderListSize: "MAX_HEADER_LIST_SIZE",
+ SettingHeaderTableSize: "HEADER_TABLE_SIZE",
+ SettingEnablePush: "ENABLE_PUSH",
+ SettingMaxConcurrentStreams: "MAX_CONCURRENT_STREAMS",
+ SettingInitialWindowSize: "INITIAL_WINDOW_SIZE",
+ SettingMaxFrameSize: "MAX_FRAME_SIZE",
+ SettingMaxHeaderListSize: "MAX_HEADER_LIST_SIZE",
+ SettingEnableConnectProtocol: "ENABLE_CONNECT_PROTOCOL",
}
func (s SettingID) String() string {
@@ -397,23 +415,6 @@ func (s *sorter) SortStrings(ss []string) {
s.v = save
}
-// validPseudoPath reports whether v is a valid :path pseudo-header
-// value. It must be either:
-//
-// - a non-empty string starting with '/'
-// - the string '*', for OPTIONS requests.
-//
-// For now this is only used a quick check for deciding when to clean
-// up Opaque URLs before sending requests from the Transport.
-// See golang.org/issue/16847
-//
-// We used to enforce that the path also didn't start with "//", but
-// Google's GFE accepts such paths and Chrome sends them, so ignore
-// that part of the spec. See golang.org/issue/19103.
-func validPseudoPath(v string) bool {
- return (len(v) > 0 && v[0] == '/') || v == "*"
-}
-
// incomparable is a zero-width, non-comparable type. Adding it to a struct
// makes that struct also non-comparable, and generally doesn't add
// any size (as long as it's first).
diff --git a/vendor/golang.org/x/net/http2/server.go b/vendor/golang.org/x/net/http2/server.go
index 617b4a47623..b640deb0e0a 100644
--- a/vendor/golang.org/x/net/http2/server.go
+++ b/vendor/golang.org/x/net/http2/server.go
@@ -50,6 +50,7 @@ import (
"golang.org/x/net/http/httpguts"
"golang.org/x/net/http2/hpack"
+ "golang.org/x/net/internal/httpcommon"
)
const (
@@ -306,7 +307,7 @@ func ConfigureServer(s *http.Server, conf *Server) error {
if s.TLSNextProto == nil {
s.TLSNextProto = map[string]func(*http.Server, *tls.Conn, http.Handler){}
}
- protoHandler := func(hs *http.Server, c *tls.Conn, h http.Handler) {
+ protoHandler := func(hs *http.Server, c net.Conn, h http.Handler, sawClientPreface bool) {
if testHookOnConn != nil {
testHookOnConn()
}
@@ -323,12 +324,31 @@ func ConfigureServer(s *http.Server, conf *Server) error {
ctx = bc.BaseContext()
}
conf.ServeConn(c, &ServeConnOpts{
- Context: ctx,
- Handler: h,
- BaseConfig: hs,
+ Context: ctx,
+ Handler: h,
+ BaseConfig: hs,
+ SawClientPreface: sawClientPreface,
})
}
- s.TLSNextProto[NextProtoTLS] = protoHandler
+ s.TLSNextProto[NextProtoTLS] = func(hs *http.Server, c *tls.Conn, h http.Handler) {
+ protoHandler(hs, c, h, false)
+ }
+ // The "unencrypted_http2" TLSNextProto key is used to pass off non-TLS HTTP/2 conns.
+ //
+ // A connection passed in this method has already had the HTTP/2 preface read from it.
+ s.TLSNextProto[nextProtoUnencryptedHTTP2] = func(hs *http.Server, c *tls.Conn, h http.Handler) {
+ nc, err := unencryptedNetConnFromTLSConn(c)
+ if err != nil {
+ if lg := hs.ErrorLog; lg != nil {
+ lg.Print(err)
+ } else {
+ log.Print(err)
+ }
+ go c.Close()
+ return
+ }
+ protoHandler(hs, nc, h, true)
+ }
return nil
}
@@ -793,8 +813,7 @@ const maxCachedCanonicalHeadersKeysSize = 2048
func (sc *serverConn) canonicalHeader(v string) string {
sc.serveG.check()
- buildCommonHeaderMapsOnce()
- cv, ok := commonCanonHeader[v]
+ cv, ok := httpcommon.CachedCanonicalHeader(v)
if ok {
return cv
}
@@ -913,14 +932,18 @@ func (sc *serverConn) serve(conf http2Config) {
sc.vlogf("http2: server connection from %v on %p", sc.conn.RemoteAddr(), sc.hs)
}
+ settings := writeSettings{
+ {SettingMaxFrameSize, conf.MaxReadFrameSize},
+ {SettingMaxConcurrentStreams, sc.advMaxStreams},
+ {SettingMaxHeaderListSize, sc.maxHeaderListSize()},
+ {SettingHeaderTableSize, conf.MaxDecoderHeaderTableSize},
+ {SettingInitialWindowSize, uint32(sc.initialStreamRecvWindowSize)},
+ }
+ if !disableExtendedConnectProtocol {
+ settings = append(settings, Setting{SettingEnableConnectProtocol, 1})
+ }
sc.writeFrame(FrameWriteRequest{
- write: writeSettings{
- {SettingMaxFrameSize, conf.MaxReadFrameSize},
- {SettingMaxConcurrentStreams, sc.advMaxStreams},
- {SettingMaxHeaderListSize, sc.maxHeaderListSize()},
- {SettingHeaderTableSize, conf.MaxDecoderHeaderTableSize},
- {SettingInitialWindowSize, uint32(sc.initialStreamRecvWindowSize)},
- },
+ write: settings,
})
sc.unackedSettings++
@@ -1782,6 +1805,9 @@ func (sc *serverConn) processSetting(s Setting) error {
sc.maxFrameSize = int32(s.Val) // the maximum valid s.Val is < 2^31
case SettingMaxHeaderListSize:
sc.peerMaxHeaderListSize = s.Val
+ case SettingEnableConnectProtocol:
+ // Receipt of this parameter by a server does not
+ // have any impact
default:
// Unknown setting: "An endpoint that receives a SETTINGS
// frame with any unknown or unsupported identifier MUST
@@ -2207,19 +2233,25 @@ func (sc *serverConn) newStream(id, pusherID uint32, state streamState) *stream
func (sc *serverConn) newWriterAndRequest(st *stream, f *MetaHeadersFrame) (*responseWriter, *http.Request, error) {
sc.serveG.check()
- rp := requestParam{
- method: f.PseudoValue("method"),
- scheme: f.PseudoValue("scheme"),
- authority: f.PseudoValue("authority"),
- path: f.PseudoValue("path"),
+ rp := httpcommon.ServerRequestParam{
+ Method: f.PseudoValue("method"),
+ Scheme: f.PseudoValue("scheme"),
+ Authority: f.PseudoValue("authority"),
+ Path: f.PseudoValue("path"),
+ Protocol: f.PseudoValue("protocol"),
+ }
+
+ // extended connect is disabled, so we should not see :protocol
+ if disableExtendedConnectProtocol && rp.Protocol != "" {
+ return nil, nil, sc.countError("bad_connect", streamError(f.StreamID, ErrCodeProtocol))
}
- isConnect := rp.method == "CONNECT"
+ isConnect := rp.Method == "CONNECT"
if isConnect {
- if rp.path != "" || rp.scheme != "" || rp.authority == "" {
+ if rp.Protocol == "" && (rp.Path != "" || rp.Scheme != "" || rp.Authority == "") {
return nil, nil, sc.countError("bad_connect", streamError(f.StreamID, ErrCodeProtocol))
}
- } else if rp.method == "" || rp.path == "" || (rp.scheme != "https" && rp.scheme != "http") {
+ } else if rp.Method == "" || rp.Path == "" || (rp.Scheme != "https" && rp.Scheme != "http") {
// See 8.1.2.6 Malformed Requests and Responses:
//
// Malformed requests or responses that are detected
@@ -2233,12 +2265,16 @@ func (sc *serverConn) newWriterAndRequest(st *stream, f *MetaHeadersFrame) (*res
return nil, nil, sc.countError("bad_path_method", streamError(f.StreamID, ErrCodeProtocol))
}
- rp.header = make(http.Header)
+ header := make(http.Header)
+ rp.Header = header
for _, hf := range f.RegularFields() {
- rp.header.Add(sc.canonicalHeader(hf.Name), hf.Value)
+ header.Add(sc.canonicalHeader(hf.Name), hf.Value)
}
- if rp.authority == "" {
- rp.authority = rp.header.Get("Host")
+ if rp.Authority == "" {
+ rp.Authority = header.Get("Host")
+ }
+ if rp.Protocol != "" {
+ header.Set(":protocol", rp.Protocol)
}
rw, req, err := sc.newWriterAndRequestNoBody(st, rp)
@@ -2247,7 +2283,7 @@ func (sc *serverConn) newWriterAndRequest(st *stream, f *MetaHeadersFrame) (*res
}
bodyOpen := !f.StreamEnded()
if bodyOpen {
- if vv, ok := rp.header["Content-Length"]; ok {
+ if vv, ok := rp.Header["Content-Length"]; ok {
if cl, err := strconv.ParseUint(vv[0], 10, 63); err == nil {
req.ContentLength = int64(cl)
} else {
@@ -2263,83 +2299,38 @@ func (sc *serverConn) newWriterAndRequest(st *stream, f *MetaHeadersFrame) (*res
return rw, req, nil
}
-type requestParam struct {
- method string
- scheme, authority, path string
- header http.Header
-}
-
-func (sc *serverConn) newWriterAndRequestNoBody(st *stream, rp requestParam) (*responseWriter, *http.Request, error) {
+func (sc *serverConn) newWriterAndRequestNoBody(st *stream, rp httpcommon.ServerRequestParam) (*responseWriter, *http.Request, error) {
sc.serveG.check()
var tlsState *tls.ConnectionState // nil if not scheme https
- if rp.scheme == "https" {
+ if rp.Scheme == "https" {
tlsState = sc.tlsState
}
- needsContinue := httpguts.HeaderValuesContainsToken(rp.header["Expect"], "100-continue")
- if needsContinue {
- rp.header.Del("Expect")
- }
- // Merge Cookie headers into one "; "-delimited value.
- if cookies := rp.header["Cookie"]; len(cookies) > 1 {
- rp.header.Set("Cookie", strings.Join(cookies, "; "))
- }
-
- // Setup Trailers
- var trailer http.Header
- for _, v := range rp.header["Trailer"] {
- for _, key := range strings.Split(v, ",") {
- key = http.CanonicalHeaderKey(textproto.TrimString(key))
- switch key {
- case "Transfer-Encoding", "Trailer", "Content-Length":
- // Bogus. (copy of http1 rules)
- // Ignore.
- default:
- if trailer == nil {
- trailer = make(http.Header)
- }
- trailer[key] = nil
- }
- }
- }
- delete(rp.header, "Trailer")
-
- var url_ *url.URL
- var requestURI string
- if rp.method == "CONNECT" {
- url_ = &url.URL{Host: rp.authority}
- requestURI = rp.authority // mimic HTTP/1 server behavior
- } else {
- var err error
- url_, err = url.ParseRequestURI(rp.path)
- if err != nil {
- return nil, nil, sc.countError("bad_path", streamError(st.id, ErrCodeProtocol))
- }
- requestURI = rp.path
+ res := httpcommon.NewServerRequest(rp)
+ if res.InvalidReason != "" {
+ return nil, nil, sc.countError(res.InvalidReason, streamError(st.id, ErrCodeProtocol))
}
body := &requestBody{
conn: sc,
stream: st,
- needsContinue: needsContinue,
+ needsContinue: res.NeedsContinue,
}
- req := &http.Request{
- Method: rp.method,
- URL: url_,
+ req := (&http.Request{
+ Method: rp.Method,
+ URL: res.URL,
RemoteAddr: sc.remoteAddrStr,
- Header: rp.header,
- RequestURI: requestURI,
+ Header: rp.Header,
+ RequestURI: res.RequestURI,
Proto: "HTTP/2.0",
ProtoMajor: 2,
ProtoMinor: 0,
TLS: tlsState,
- Host: rp.authority,
+ Host: rp.Authority,
Body: body,
- Trailer: trailer,
- }
- req = req.WithContext(st.ctx)
-
+ Trailer: res.Trailer,
+ }).WithContext(st.ctx)
rw := sc.newResponseWriter(st, req)
return rw, req, nil
}
@@ -2880,6 +2871,11 @@ func (w *responseWriter) SetWriteDeadline(deadline time.Time) error {
return nil
}
+func (w *responseWriter) EnableFullDuplex() error {
+ // We always support full duplex responses, so this is a no-op.
+ return nil
+}
+
func (w *responseWriter) Flush() {
w.FlushError()
}
@@ -3229,12 +3225,12 @@ func (sc *serverConn) startPush(msg *startPushRequest) {
// we start in "half closed (remote)" for simplicity.
// See further comments at the definition of stateHalfClosedRemote.
promised := sc.newStream(promisedID, msg.parent.id, stateHalfClosedRemote)
- rw, req, err := sc.newWriterAndRequestNoBody(promised, requestParam{
- method: msg.method,
- scheme: msg.url.Scheme,
- authority: msg.url.Host,
- path: msg.url.RequestURI(),
- header: cloneHeader(msg.header), // clone since handler runs concurrently with writing the PUSH_PROMISE
+ rw, req, err := sc.newWriterAndRequestNoBody(promised, httpcommon.ServerRequestParam{
+ Method: msg.method,
+ Scheme: msg.url.Scheme,
+ Authority: msg.url.Host,
+ Path: msg.url.RequestURI(),
+ Header: cloneHeader(msg.header), // clone since handler runs concurrently with writing the PUSH_PROMISE
})
if err != nil {
// Should not happen, since we've already validated msg.url.
diff --git a/vendor/golang.org/x/net/http2/transport.go b/vendor/golang.org/x/net/http2/transport.go
index 0c5f64aa8be..f26356b9cd9 100644
--- a/vendor/golang.org/x/net/http2/transport.go
+++ b/vendor/golang.org/x/net/http2/transport.go
@@ -25,7 +25,6 @@ import (
"net/http"
"net/http/httptrace"
"net/textproto"
- "sort"
"strconv"
"strings"
"sync"
@@ -35,6 +34,7 @@ import (
"golang.org/x/net/http/httpguts"
"golang.org/x/net/http2/hpack"
"golang.org/x/net/idna"
+ "golang.org/x/net/internal/httpcommon"
)
const (
@@ -202,6 +202,20 @@ func (t *Transport) markNewGoroutine() {
}
}
+func (t *Transport) now() time.Time {
+ if t != nil && t.transportTestHooks != nil {
+ return t.transportTestHooks.group.Now()
+ }
+ return time.Now()
+}
+
+func (t *Transport) timeSince(when time.Time) time.Duration {
+ if t != nil && t.transportTestHooks != nil {
+ return t.now().Sub(when)
+ }
+ return time.Since(when)
+}
+
// newTimer creates a new time.Timer, or a synthetic timer in tests.
func (t *Transport) newTimer(d time.Duration) timer {
if t.transportTestHooks != nil {
@@ -281,8 +295,8 @@ func configureTransports(t1 *http.Transport) (*Transport, error) {
if !strSliceContains(t1.TLSClientConfig.NextProtos, "http/1.1") {
t1.TLSClientConfig.NextProtos = append(t1.TLSClientConfig.NextProtos, "http/1.1")
}
- upgradeFn := func(authority string, c *tls.Conn) http.RoundTripper {
- addr := authorityAddr("https", authority)
+ upgradeFn := func(scheme, authority string, c net.Conn) http.RoundTripper {
+ addr := authorityAddr(scheme, authority)
if used, err := connPool.addConnIfNeeded(addr, t2, c); err != nil {
go c.Close()
return erringRoundTripper{err}
@@ -293,18 +307,37 @@ func configureTransports(t1 *http.Transport) (*Transport, error) {
// was unknown)
go c.Close()
}
+ if scheme == "http" {
+ return (*unencryptedTransport)(t2)
+ }
return t2
}
- if m := t1.TLSNextProto; len(m) == 0 {
- t1.TLSNextProto = map[string]func(string, *tls.Conn) http.RoundTripper{
- "h2": upgradeFn,
+ if t1.TLSNextProto == nil {
+ t1.TLSNextProto = make(map[string]func(string, *tls.Conn) http.RoundTripper)
+ }
+ t1.TLSNextProto[NextProtoTLS] = func(authority string, c *tls.Conn) http.RoundTripper {
+ return upgradeFn("https", authority, c)
+ }
+ // The "unencrypted_http2" TLSNextProto key is used to pass off non-TLS HTTP/2 conns.
+ t1.TLSNextProto[nextProtoUnencryptedHTTP2] = func(authority string, c *tls.Conn) http.RoundTripper {
+ nc, err := unencryptedNetConnFromTLSConn(c)
+ if err != nil {
+ go c.Close()
+ return erringRoundTripper{err}
}
- } else {
- m["h2"] = upgradeFn
+ return upgradeFn("http", authority, nc)
}
return t2, nil
}
+// unencryptedTransport is a Transport with a RoundTrip method that
+// always permits http:// URLs.
+type unencryptedTransport Transport
+
+func (t *unencryptedTransport) RoundTrip(req *http.Request) (*http.Response, error) {
+ return (*Transport)(t).RoundTripOpt(req, RoundTripOpt{allowHTTP: true})
+}
+
func (t *Transport) connPool() ClientConnPool {
t.connPoolOnce.Do(t.initConnPool)
return t.connPoolOrDef
@@ -324,7 +357,7 @@ type ClientConn struct {
t *Transport
tconn net.Conn // usually *tls.Conn, except specialized impls
tlsState *tls.ConnectionState // nil only for specialized impls
- reused uint32 // whether conn is being reused; atomic
+ atomicReused uint32 // whether conn is being reused; atomic
singleUse bool // whether being used for a single http.Request
getConnCalled bool // used by clientConnPool
@@ -335,25 +368,27 @@ type ClientConn struct {
idleTimeout time.Duration // or 0 for never
idleTimer timer
- mu sync.Mutex // guards following
- cond *sync.Cond // hold mu; broadcast on flow/closed changes
- flow outflow // our conn-level flow control quota (cs.outflow is per stream)
- inflow inflow // peer's conn-level flow control
- doNotReuse bool // whether conn is marked to not be reused for any future requests
- closing bool
- closed bool
- seenSettings bool // true if we've seen a settings frame, false otherwise
- wantSettingsAck bool // we sent a SETTINGS frame and haven't heard back
- goAway *GoAwayFrame // if non-nil, the GoAwayFrame we received
- goAwayDebug string // goAway frame's debug data, retained as a string
- streams map[uint32]*clientStream // client-initiated
- streamsReserved int // incr by ReserveNewRequest; decr on RoundTrip
- nextStreamID uint32
- pendingRequests int // requests blocked and waiting to be sent because len(streams) == maxConcurrentStreams
- pings map[[8]byte]chan struct{} // in flight ping data to notification channel
- br *bufio.Reader
- lastActive time.Time
- lastIdle time.Time // time last idle
+ mu sync.Mutex // guards following
+ cond *sync.Cond // hold mu; broadcast on flow/closed changes
+ flow outflow // our conn-level flow control quota (cs.outflow is per stream)
+ inflow inflow // peer's conn-level flow control
+ doNotReuse bool // whether conn is marked to not be reused for any future requests
+ closing bool
+ closed bool
+ closedOnIdle bool // true if conn was closed for idleness
+ seenSettings bool // true if we've seen a settings frame, false otherwise
+ seenSettingsChan chan struct{} // closed when seenSettings is true or frame reading fails
+ wantSettingsAck bool // we sent a SETTINGS frame and haven't heard back
+ goAway *GoAwayFrame // if non-nil, the GoAwayFrame we received
+ goAwayDebug string // goAway frame's debug data, retained as a string
+ streams map[uint32]*clientStream // client-initiated
+ streamsReserved int // incr by ReserveNewRequest; decr on RoundTrip
+ nextStreamID uint32
+ pendingRequests int // requests blocked and waiting to be sent because len(streams) == maxConcurrentStreams
+ pings map[[8]byte]chan struct{} // in flight ping data to notification channel
+ br *bufio.Reader
+ lastActive time.Time
+ lastIdle time.Time // time last idle
// Settings from peer: (also guarded by wmu)
maxFrameSize uint32
maxConcurrentStreams uint32
@@ -363,6 +398,25 @@ type ClientConn struct {
initialStreamRecvWindowSize int32
readIdleTimeout time.Duration
pingTimeout time.Duration
+ extendedConnectAllowed bool
+
+ // rstStreamPingsBlocked works around an unfortunate gRPC behavior.
+ // gRPC strictly limits the number of PING frames that it will receive.
+ // The default is two pings per two hours, but the limit resets every time
+ // the gRPC endpoint sends a HEADERS or DATA frame. See golang/go#70575.
+ //
+ // rstStreamPingsBlocked is set after receiving a response to a PING frame
+ // bundled with an RST_STREAM (see pendingResets below), and cleared after
+ // receiving a HEADERS or DATA frame.
+ rstStreamPingsBlocked bool
+
+ // pendingResets is the number of RST_STREAM frames we have sent to the peer,
+ // without confirming that the peer has received them. When we send a RST_STREAM,
+ // we bundle it with a PING frame, unless a PING is already in flight. We count
+ // the reset stream against the connection's concurrency limit until we get
+ // a PING response. This limits the number of requests we'll try to send to a
+ // completely unresponsive connection.
+ pendingResets int
// reqHeaderMu is a 1-element semaphore channel controlling access to sending new requests.
// Write to reqHeaderMu to lock it, read from it to unlock.
@@ -420,12 +474,12 @@ type clientStream struct {
sentHeaders bool
// owned by clientConnReadLoop:
- firstByte bool // got the first response byte
- pastHeaders bool // got first MetaHeadersFrame (actual headers)
- pastTrailers bool // got optional second MetaHeadersFrame (trailers)
- num1xx uint8 // number of 1xx responses seen
- readClosed bool // peer sent an END_STREAM flag
- readAborted bool // read loop reset the stream
+ firstByte bool // got the first response byte
+ pastHeaders bool // got first MetaHeadersFrame (actual headers)
+ pastTrailers bool // got optional second MetaHeadersFrame (trailers)
+ readClosed bool // peer sent an END_STREAM flag
+ readAborted bool // read loop reset the stream
+ totalHeaderSize int64 // total size of 1xx headers seen
trailer http.Header // accumulated trailers
resTrailer *http.Header // client's Response.Trailer
@@ -530,6 +584,8 @@ type RoundTripOpt struct {
// no cached connection is available, RoundTripOpt
// will return ErrNoCachedConn.
OnlyCachedConn bool
+
+ allowHTTP bool // allow http:// URLs
}
func (t *Transport) RoundTrip(req *http.Request) (*http.Response, error) {
@@ -562,7 +618,14 @@ func authorityAddr(scheme string, authority string) (addr string) {
// RoundTripOpt is like RoundTrip, but takes options.
func (t *Transport) RoundTripOpt(req *http.Request, opt RoundTripOpt) (*http.Response, error) {
- if !(req.URL.Scheme == "https" || (req.URL.Scheme == "http" && t.AllowHTTP)) {
+ switch req.URL.Scheme {
+ case "https":
+ // Always okay.
+ case "http":
+ if !t.AllowHTTP && !opt.allowHTTP {
+ return nil, errors.New("http2: unencrypted HTTP/2 not enabled")
+ }
+ default:
return nil, errors.New("http2: unsupported scheme")
}
@@ -573,7 +636,7 @@ func (t *Transport) RoundTripOpt(req *http.Request, opt RoundTripOpt) (*http.Res
t.vlogf("http2: Transport failed to get client conn for %s: %v", addr, err)
return nil, err
}
- reused := !atomic.CompareAndSwapUint32(&cc.reused, 0, 1)
+ reused := !atomic.CompareAndSwapUint32(&cc.atomicReused, 0, 1)
traceGotConn(req, cc, reused)
res, err := cc.RoundTrip(req)
if err != nil && retry <= 6 {
@@ -598,6 +661,22 @@ func (t *Transport) RoundTripOpt(req *http.Request, opt RoundTripOpt) (*http.Res
}
}
}
+ if err == errClientConnNotEstablished {
+ // This ClientConn was created recently,
+ // this is the first request to use it,
+ // and the connection is closed and not usable.
+ //
+ // In this state, cc.idleTimer will remove the conn from the pool
+ // when it fires. Stop the timer and remove it here so future requests
+ // won't try to use this connection.
+ //
+ // If the timer has already fired and we're racing it, the redundant
+ // call to MarkDead is harmless.
+ if cc.idleTimer != nil {
+ cc.idleTimer.Stop()
+ }
+ t.connPool().MarkDead(cc)
+ }
if err != nil {
t.vlogf("RoundTrip failure: %v", err)
return nil, err
@@ -616,9 +695,10 @@ func (t *Transport) CloseIdleConnections() {
}
var (
- errClientConnClosed = errors.New("http2: client conn is closed")
- errClientConnUnusable = errors.New("http2: client conn not usable")
- errClientConnGotGoAway = errors.New("http2: Transport received Server's graceful shutdown GOAWAY")
+ errClientConnClosed = errors.New("http2: client conn is closed")
+ errClientConnUnusable = errors.New("http2: client conn not usable")
+ errClientConnNotEstablished = errors.New("http2: client conn could not be established")
+ errClientConnGotGoAway = errors.New("http2: Transport received Server's graceful shutdown GOAWAY")
)
// shouldRetryRequest is called by RoundTrip when a request fails to get
@@ -752,11 +832,13 @@ func (t *Transport) newClientConn(c net.Conn, singleUse bool) (*ClientConn, erro
peerMaxHeaderListSize: 0xffffffffffffffff, // "infinite", per spec. Use 2^64-1 instead.
streams: make(map[uint32]*clientStream),
singleUse: singleUse,
+ seenSettingsChan: make(chan struct{}),
wantSettingsAck: true,
readIdleTimeout: conf.SendPingTimeout,
pingTimeout: conf.PingTimeout,
pings: make(map[[8]byte]chan struct{}),
reqHeaderMu: make(chan struct{}, 1),
+ lastActive: t.now(),
}
var group synctestGroupInterface
if t.transportTestHooks != nil {
@@ -960,7 +1042,7 @@ func (cc *ClientConn) State() ClientConnState {
return ClientConnState{
Closed: cc.closed,
Closing: cc.closing || cc.singleUse || cc.doNotReuse || cc.goAway != nil,
- StreamsActive: len(cc.streams),
+ StreamsActive: len(cc.streams) + cc.pendingResets,
StreamsReserved: cc.streamsReserved,
StreamsPending: cc.pendingRequests,
LastIdle: cc.lastIdle,
@@ -992,16 +1074,40 @@ func (cc *ClientConn) idleStateLocked() (st clientConnIdleState) {
// writing it.
maxConcurrentOkay = true
} else {
- maxConcurrentOkay = int64(len(cc.streams)+cc.streamsReserved+1) <= int64(cc.maxConcurrentStreams)
+ // We can take a new request if the total of
+ // - active streams;
+ // - reservation slots for new streams; and
+ // - streams for which we have sent a RST_STREAM and a PING,
+ // but received no subsequent frame
+ // is less than the concurrency limit.
+ maxConcurrentOkay = cc.currentRequestCountLocked() < int(cc.maxConcurrentStreams)
}
st.canTakeNewRequest = cc.goAway == nil && !cc.closed && !cc.closing && maxConcurrentOkay &&
!cc.doNotReuse &&
int64(cc.nextStreamID)+2*int64(cc.pendingRequests) < math.MaxInt32 &&
!cc.tooIdleLocked()
+
+ // If this connection has never been used for a request and is closed,
+ // then let it take a request (which will fail).
+ // If the conn was closed for idleness, we're racing the idle timer;
+ // don't try to use the conn. (Issue #70515.)
+ //
+ // This avoids a situation where an error early in a connection's lifetime
+ // goes unreported.
+ if cc.nextStreamID == 1 && cc.streamsReserved == 0 && cc.closed && !cc.closedOnIdle {
+ st.canTakeNewRequest = true
+ }
+
return
}
+// currentRequestCountLocked reports the number of concurrency slots currently in use,
+// including active streams, reserved slots, and reset streams waiting for acknowledgement.
+func (cc *ClientConn) currentRequestCountLocked() int {
+ return len(cc.streams) + cc.streamsReserved + cc.pendingResets
+}
+
func (cc *ClientConn) canTakeNewRequestLocked() bool {
st := cc.idleStateLocked()
return st.canTakeNewRequest
@@ -1014,7 +1120,7 @@ func (cc *ClientConn) tooIdleLocked() bool {
// times are compared based on their wall time. We don't want
// to reuse a connection that's been sitting idle during
// VM/laptop suspend if monotonic time was also frozen.
- return cc.idleTimeout != 0 && !cc.lastIdle.IsZero() && time.Since(cc.lastIdle.Round(0)) > cc.idleTimeout
+ return cc.idleTimeout != 0 && !cc.lastIdle.IsZero() && cc.t.timeSince(cc.lastIdle.Round(0)) > cc.idleTimeout
}
// onIdleTimeout is called from a time.AfterFunc goroutine. It will
@@ -1052,6 +1158,7 @@ func (cc *ClientConn) closeIfIdle() {
return
}
cc.closed = true
+ cc.closedOnIdle = true
nextID := cc.nextStreamID
// TODO: do clients send GOAWAY too? maybe? Just Close:
cc.mu.Unlock()
@@ -1168,23 +1275,6 @@ func (cc *ClientConn) closeForLostPing() {
// exported. At least they'll be DeepEqual for h1-vs-h2 comparisons tests.
var errRequestCanceled = errors.New("net/http: request canceled")
-func commaSeparatedTrailers(req *http.Request) (string, error) {
- keys := make([]string, 0, len(req.Trailer))
- for k := range req.Trailer {
- k = canonicalHeader(k)
- switch k {
- case "Transfer-Encoding", "Trailer", "Content-Length":
- return "", fmt.Errorf("invalid Trailer key %q", k)
- }
- keys = append(keys, k)
- }
- if len(keys) > 0 {
- sort.Strings(keys)
- return strings.Join(keys, ","), nil
- }
- return "", nil
-}
-
func (cc *ClientConn) responseHeaderTimeout() time.Duration {
if cc.t.t1 != nil {
return cc.t.t1.ResponseHeaderTimeout
@@ -1196,22 +1286,6 @@ func (cc *ClientConn) responseHeaderTimeout() time.Duration {
return 0
}
-// checkConnHeaders checks whether req has any invalid connection-level headers.
-// per RFC 7540 section 8.1.2.2: Connection-Specific Header Fields.
-// Certain headers are special-cased as okay but not transmitted later.
-func checkConnHeaders(req *http.Request) error {
- if v := req.Header.Get("Upgrade"); v != "" {
- return fmt.Errorf("http2: invalid Upgrade request header: %q", req.Header["Upgrade"])
- }
- if vv := req.Header["Transfer-Encoding"]; len(vv) > 0 && (len(vv) > 1 || vv[0] != "" && vv[0] != "chunked") {
- return fmt.Errorf("http2: invalid Transfer-Encoding request header: %q", vv)
- }
- if vv := req.Header["Connection"]; len(vv) > 0 && (len(vv) > 1 || vv[0] != "" && !asciiEqualFold(vv[0], "close") && !asciiEqualFold(vv[0], "keep-alive")) {
- return fmt.Errorf("http2: invalid Connection request header: %q", vv)
- }
- return nil
-}
-
// actualContentLength returns a sanitized version of
// req.ContentLength, where 0 actually means zero (not unknown) and -1
// means unknown.
@@ -1257,25 +1331,7 @@ func (cc *ClientConn) roundTrip(req *http.Request, streamf func(*clientStream))
donec: make(chan struct{}),
}
- // TODO(bradfitz): this is a copy of the logic in net/http. Unify somewhere?
- if !cc.t.disableCompression() &&
- req.Header.Get("Accept-Encoding") == "" &&
- req.Header.Get("Range") == "" &&
- !cs.isHead {
- // Request gzip only, not deflate. Deflate is ambiguous and
- // not as universally supported anyway.
- // See: https://zlib.net/zlib_faq.html#faq39
- //
- // Note that we don't request this for HEAD requests,
- // due to a bug in nginx:
- // http://trac.nginx.org/nginx/ticket/358
- // https://golang.org/issue/5522
- //
- // We don't request gzip if the request is for a range, since
- // auto-decoding a portion of a gzipped document will just fail
- // anyway. See https://golang.org/issue/8923
- cs.requestedGzip = true
- }
+ cs.requestedGzip = httpcommon.IsRequestGzip(req.Method, req.Header, cc.t.disableCompression())
go cs.doRequest(req, streamf)
@@ -1376,6 +1432,8 @@ func (cs *clientStream) doRequest(req *http.Request, streamf func(*clientStream)
cs.cleanupWriteRequest(err)
}
+var errExtendedConnectNotSupported = errors.New("net/http: extended connect not supported by peer")
+
// writeRequest sends a request.
//
// It returns nil after the request is written, the response read,
@@ -1387,8 +1445,11 @@ func (cs *clientStream) writeRequest(req *http.Request, streamf func(*clientStre
cc := cs.cc
ctx := cs.ctx
- if err := checkConnHeaders(req); err != nil {
- return err
+ // wait for setting frames to be received, a server can change this value later,
+ // but we just wait for the first settings frame
+ var isExtendedConnect bool
+ if req.Method == "CONNECT" && req.Header.Get(":protocol") != "" {
+ isExtendedConnect = true
}
// Acquire the new-request lock by writing to reqHeaderMu.
@@ -1397,6 +1458,18 @@ func (cs *clientStream) writeRequest(req *http.Request, streamf func(*clientStre
if cc.reqHeaderMu == nil {
panic("RoundTrip on uninitialized ClientConn") // for tests
}
+ if isExtendedConnect {
+ select {
+ case <-cs.reqCancel:
+ return errRequestCanceled
+ case <-ctx.Done():
+ return ctx.Err()
+ case <-cc.seenSettingsChan:
+ if !cc.extendedConnectAllowed {
+ return errExtendedConnectNotSupported
+ }
+ }
+ }
select {
case cc.reqHeaderMu <- struct{}{}:
case <-cs.reqCancel:
@@ -1535,26 +1608,39 @@ func (cs *clientStream) encodeAndWriteHeaders(req *http.Request) error {
// we send: HEADERS{1}, CONTINUATION{0,} + DATA{0,} (DATA is
// sent by writeRequestBody below, along with any Trailers,
// again in form HEADERS{1}, CONTINUATION{0,})
- trailers, err := commaSeparatedTrailers(req)
- if err != nil {
- return err
- }
- hasTrailers := trailers != ""
- contentLen := actualContentLength(req)
- hasBody := contentLen != 0
- hdrs, err := cc.encodeHeaders(req, cs.requestedGzip, trailers, contentLen)
+ cc.hbuf.Reset()
+ res, err := encodeRequestHeaders(req, cs.requestedGzip, cc.peerMaxHeaderListSize, func(name, value string) {
+ cc.writeHeader(name, value)
+ })
if err != nil {
- return err
+ return fmt.Errorf("http2: %w", err)
}
+ hdrs := cc.hbuf.Bytes()
// Write the request.
- endStream := !hasBody && !hasTrailers
+ endStream := !res.HasBody && !res.HasTrailers
cs.sentHeaders = true
err = cc.writeHeaders(cs.ID, endStream, int(cc.maxFrameSize), hdrs)
traceWroteHeaders(cs.trace)
return err
}
+func encodeRequestHeaders(req *http.Request, addGzipHeader bool, peerMaxHeaderListSize uint64, headerf func(name, value string)) (httpcommon.EncodeHeadersResult, error) {
+ return httpcommon.EncodeHeaders(req.Context(), httpcommon.EncodeHeadersParam{
+ Request: httpcommon.Request{
+ Header: req.Header,
+ Trailer: req.Trailer,
+ URL: req.URL,
+ Host: req.Host,
+ Method: req.Method,
+ ActualContentLength: actualContentLength(req),
+ },
+ AddGzipHeader: addGzipHeader,
+ PeerMaxHeaderListSize: peerMaxHeaderListSize,
+ DefaultUserAgent: defaultUserAgent,
+ }, headerf)
+}
+
// cleanupWriteRequest performs post-request tasks.
//
// If err (the result of writeRequest) is non-nil and the stream is not closed,
@@ -1578,6 +1664,7 @@ func (cs *clientStream) cleanupWriteRequest(err error) {
cs.reqBodyClosed = make(chan struct{})
}
bodyClosed := cs.reqBodyClosed
+ closeOnIdle := cc.singleUse || cc.doNotReuse || cc.t.disableKeepAlives() || cc.goAway != nil
cc.mu.Unlock()
if mustCloseBody {
cs.reqBody.Close()
@@ -1602,16 +1689,44 @@ func (cs *clientStream) cleanupWriteRequest(err error) {
if cs.sentHeaders {
if se, ok := err.(StreamError); ok {
if se.Cause != errFromPeer {
- cc.writeStreamReset(cs.ID, se.Code, err)
+ cc.writeStreamReset(cs.ID, se.Code, false, err)
}
} else {
- cc.writeStreamReset(cs.ID, ErrCodeCancel, err)
+ // We're cancelling an in-flight request.
+ //
+ // This could be due to the server becoming unresponsive.
+ // To avoid sending too many requests on a dead connection,
+ // we let the request continue to consume a concurrency slot
+ // until we can confirm the server is still responding.
+ // We do this by sending a PING frame along with the RST_STREAM
+ // (unless a ping is already in flight).
+ //
+ // For simplicity, we don't bother tracking the PING payload:
+ // We reset cc.pendingResets any time we receive a PING ACK.
+ //
+ // We skip this if the conn is going to be closed on idle,
+ // because it's short lived and will probably be closed before
+ // we get the ping response.
+ ping := false
+ if !closeOnIdle {
+ cc.mu.Lock()
+ // rstStreamPingsBlocked works around a gRPC behavior:
+ // see comment on the field for details.
+ if !cc.rstStreamPingsBlocked {
+ if cc.pendingResets == 0 {
+ ping = true
+ }
+ cc.pendingResets++
+ }
+ cc.mu.Unlock()
+ }
+ cc.writeStreamReset(cs.ID, ErrCodeCancel, ping, err)
}
}
cs.bufPipe.CloseWithError(err) // no-op if already closed
} else {
if cs.sentHeaders && !cs.sentEndStream {
- cc.writeStreamReset(cs.ID, ErrCodeNo, nil)
+ cc.writeStreamReset(cs.ID, ErrCodeNo, false, nil)
}
cs.bufPipe.CloseWithError(errRequestCanceled)
}
@@ -1633,12 +1748,17 @@ func (cs *clientStream) cleanupWriteRequest(err error) {
// Must hold cc.mu.
func (cc *ClientConn) awaitOpenSlotForStreamLocked(cs *clientStream) error {
for {
- cc.lastActive = time.Now()
+ if cc.closed && cc.nextStreamID == 1 && cc.streamsReserved == 0 {
+ // This is the very first request sent to this connection.
+ // Return a fatal error which aborts the retry loop.
+ return errClientConnNotEstablished
+ }
+ cc.lastActive = cc.t.now()
if cc.closed || !cc.canTakeNewRequestLocked() {
return errClientConnUnusable
}
cc.lastIdle = time.Time{}
- if int64(len(cc.streams)) < int64(cc.maxConcurrentStreams) {
+ if cc.currentRequestCountLocked() < int(cc.maxConcurrentStreams) {
return nil
}
cc.pendingRequests++
@@ -1908,214 +2028,6 @@ func (cs *clientStream) awaitFlowControl(maxBytes int) (taken int32, err error)
}
}
-func validateHeaders(hdrs http.Header) string {
- for k, vv := range hdrs {
- if !httpguts.ValidHeaderFieldName(k) {
- return fmt.Sprintf("name %q", k)
- }
- for _, v := range vv {
- if !httpguts.ValidHeaderFieldValue(v) {
- // Don't include the value in the error,
- // because it may be sensitive.
- return fmt.Sprintf("value for header %q", k)
- }
- }
- }
- return ""
-}
-
-var errNilRequestURL = errors.New("http2: Request.URI is nil")
-
-// requires cc.wmu be held.
-func (cc *ClientConn) encodeHeaders(req *http.Request, addGzipHeader bool, trailers string, contentLength int64) ([]byte, error) {
- cc.hbuf.Reset()
- if req.URL == nil {
- return nil, errNilRequestURL
- }
-
- host := req.Host
- if host == "" {
- host = req.URL.Host
- }
- host, err := httpguts.PunycodeHostPort(host)
- if err != nil {
- return nil, err
- }
- if !httpguts.ValidHostHeader(host) {
- return nil, errors.New("http2: invalid Host header")
- }
-
- var path string
- if req.Method != "CONNECT" {
- path = req.URL.RequestURI()
- if !validPseudoPath(path) {
- orig := path
- path = strings.TrimPrefix(path, req.URL.Scheme+"://"+host)
- if !validPseudoPath(path) {
- if req.URL.Opaque != "" {
- return nil, fmt.Errorf("invalid request :path %q from URL.Opaque = %q", orig, req.URL.Opaque)
- } else {
- return nil, fmt.Errorf("invalid request :path %q", orig)
- }
- }
- }
- }
-
- // Check for any invalid headers+trailers and return an error before we
- // potentially pollute our hpack state. (We want to be able to
- // continue to reuse the hpack encoder for future requests)
- if err := validateHeaders(req.Header); err != "" {
- return nil, fmt.Errorf("invalid HTTP header %s", err)
- }
- if err := validateHeaders(req.Trailer); err != "" {
- return nil, fmt.Errorf("invalid HTTP trailer %s", err)
- }
-
- enumerateHeaders := func(f func(name, value string)) {
- // 8.1.2.3 Request Pseudo-Header Fields
- // The :path pseudo-header field includes the path and query parts of the
- // target URI (the path-absolute production and optionally a '?' character
- // followed by the query production, see Sections 3.3 and 3.4 of
- // [RFC3986]).
- f(":authority", host)
- m := req.Method
- if m == "" {
- m = http.MethodGet
- }
- f(":method", m)
- if req.Method != "CONNECT" {
- f(":path", path)
- f(":scheme", req.URL.Scheme)
- }
- if trailers != "" {
- f("trailer", trailers)
- }
-
- var didUA bool
- for k, vv := range req.Header {
- if asciiEqualFold(k, "host") || asciiEqualFold(k, "content-length") {
- // Host is :authority, already sent.
- // Content-Length is automatic, set below.
- continue
- } else if asciiEqualFold(k, "connection") ||
- asciiEqualFold(k, "proxy-connection") ||
- asciiEqualFold(k, "transfer-encoding") ||
- asciiEqualFold(k, "upgrade") ||
- asciiEqualFold(k, "keep-alive") {
- // Per 8.1.2.2 Connection-Specific Header
- // Fields, don't send connection-specific
- // fields. We have already checked if any
- // are error-worthy so just ignore the rest.
- continue
- } else if asciiEqualFold(k, "user-agent") {
- // Match Go's http1 behavior: at most one
- // User-Agent. If set to nil or empty string,
- // then omit it. Otherwise if not mentioned,
- // include the default (below).
- didUA = true
- if len(vv) < 1 {
- continue
- }
- vv = vv[:1]
- if vv[0] == "" {
- continue
- }
- } else if asciiEqualFold(k, "cookie") {
- // Per 8.1.2.5 To allow for better compression efficiency, the
- // Cookie header field MAY be split into separate header fields,
- // each with one or more cookie-pairs.
- for _, v := range vv {
- for {
- p := strings.IndexByte(v, ';')
- if p < 0 {
- break
- }
- f("cookie", v[:p])
- p++
- // strip space after semicolon if any.
- for p+1 <= len(v) && v[p] == ' ' {
- p++
- }
- v = v[p:]
- }
- if len(v) > 0 {
- f("cookie", v)
- }
- }
- continue
- }
-
- for _, v := range vv {
- f(k, v)
- }
- }
- if shouldSendReqContentLength(req.Method, contentLength) {
- f("content-length", strconv.FormatInt(contentLength, 10))
- }
- if addGzipHeader {
- f("accept-encoding", "gzip")
- }
- if !didUA {
- f("user-agent", defaultUserAgent)
- }
- }
-
- // Do a first pass over the headers counting bytes to ensure
- // we don't exceed cc.peerMaxHeaderListSize. This is done as a
- // separate pass before encoding the headers to prevent
- // modifying the hpack state.
- hlSize := uint64(0)
- enumerateHeaders(func(name, value string) {
- hf := hpack.HeaderField{Name: name, Value: value}
- hlSize += uint64(hf.Size())
- })
-
- if hlSize > cc.peerMaxHeaderListSize {
- return nil, errRequestHeaderListSize
- }
-
- trace := httptrace.ContextClientTrace(req.Context())
- traceHeaders := traceHasWroteHeaderField(trace)
-
- // Header list size is ok. Write the headers.
- enumerateHeaders(func(name, value string) {
- name, ascii := lowerHeader(name)
- if !ascii {
- // Skip writing invalid headers. Per RFC 7540, Section 8.1.2, header
- // field names have to be ASCII characters (just as in HTTP/1.x).
- return
- }
- cc.writeHeader(name, value)
- if traceHeaders {
- traceWroteHeaderField(trace, name, value)
- }
- })
-
- return cc.hbuf.Bytes(), nil
-}
-
-// shouldSendReqContentLength reports whether the http2.Transport should send
-// a "content-length" request header. This logic is basically a copy of the net/http
-// transferWriter.shouldSendContentLength.
-// The contentLength is the corrected contentLength (so 0 means actually 0, not unknown).
-// -1 means unknown.
-func shouldSendReqContentLength(method string, contentLength int64) bool {
- if contentLength > 0 {
- return true
- }
- if contentLength < 0 {
- return false
- }
- // For zero bodies, whether we send a content-length depends on the method.
- // It also kinda doesn't matter for http2 either way, with END_STREAM.
- switch method {
- case "POST", "PUT", "PATCH":
- return true
- default:
- return false
- }
-}
-
// requires cc.wmu be held.
func (cc *ClientConn) encodeTrailers(trailer http.Header) ([]byte, error) {
cc.hbuf.Reset()
@@ -2132,7 +2044,7 @@ func (cc *ClientConn) encodeTrailers(trailer http.Header) ([]byte, error) {
}
for k, vv := range trailer {
- lowKey, ascii := lowerHeader(k)
+ lowKey, ascii := httpcommon.LowerHeader(k)
if !ascii {
// Skip writing invalid headers. Per RFC 7540, Section 8.1.2, header
// field names have to be ASCII characters (just as in HTTP/1.x).
@@ -2180,10 +2092,10 @@ func (cc *ClientConn) forgetStreamID(id uint32) {
if len(cc.streams) != slen-1 {
panic("forgetting unknown stream id")
}
- cc.lastActive = time.Now()
+ cc.lastActive = cc.t.now()
if len(cc.streams) == 0 && cc.idleTimer != nil {
cc.idleTimer.Reset(cc.idleTimeout)
- cc.lastIdle = time.Now()
+ cc.lastIdle = cc.t.now()
}
// Wake up writeRequestBody via clientStream.awaitFlowControl and
// wake up RoundTrip if there is a pending request.
@@ -2243,7 +2155,6 @@ func isEOFOrNetReadError(err error) bool {
func (rl *clientConnReadLoop) cleanup() {
cc := rl.cc
- cc.t.connPool().MarkDead(cc)
defer cc.closeConn()
defer close(cc.readerDone)
@@ -2267,6 +2178,27 @@ func (rl *clientConnReadLoop) cleanup() {
}
cc.closed = true
+ // If the connection has never been used, and has been open for only a short time,
+ // leave it in the connection pool for a little while.
+ //
+ // This avoids a situation where new connections are constantly created,
+ // added to the pool, fail, and are removed from the pool, without any error
+ // being surfaced to the user.
+ unusedWaitTime := 5 * time.Second
+ if cc.idleTimeout > 0 && unusedWaitTime > cc.idleTimeout {
+ unusedWaitTime = cc.idleTimeout
+ }
+ idleTime := cc.t.now().Sub(cc.lastActive)
+ if atomic.LoadUint32(&cc.atomicReused) == 0 && idleTime < unusedWaitTime && !cc.closedOnIdle {
+ cc.idleTimer = cc.t.afterFunc(unusedWaitTime-idleTime, func() {
+ cc.t.connPool().MarkDead(cc)
+ })
+ } else {
+ cc.mu.Unlock() // avoid any deadlocks in MarkDead
+ cc.t.connPool().MarkDead(cc)
+ cc.mu.Lock()
+ }
+
for _, cs := range cc.streams {
select {
case <-cs.peerClosed:
@@ -2278,6 +2210,13 @@ func (rl *clientConnReadLoop) cleanup() {
}
cc.cond.Broadcast()
cc.mu.Unlock()
+
+ if !cc.seenSettings {
+ // If we have a pending request that wants extended CONNECT,
+ // let it continue and fail with the connection error.
+ cc.extendedConnectAllowed = true
+ close(cc.seenSettingsChan)
+ }
}
// countReadFrameError calls Transport.CountError with a string
@@ -2324,7 +2263,7 @@ func (rl *clientConnReadLoop) run() error {
cc.vlogf("http2: Transport readFrame error on conn %p: (%T) %v", cc, err, err)
}
if se, ok := err.(StreamError); ok {
- if cs := rl.streamByID(se.StreamID); cs != nil {
+ if cs := rl.streamByID(se.StreamID, notHeaderOrDataFrame); cs != nil {
if se.Cause == nil {
se.Cause = cc.fr.errDetail
}
@@ -2376,7 +2315,7 @@ func (rl *clientConnReadLoop) run() error {
}
func (rl *clientConnReadLoop) processHeaders(f *MetaHeadersFrame) error {
- cs := rl.streamByID(f.StreamID)
+ cs := rl.streamByID(f.StreamID, headerOrDataFrame)
if cs == nil {
// We'd get here if we canceled a request while the
// server had its response still in flight. So if this
@@ -2464,7 +2403,7 @@ func (rl *clientConnReadLoop) handleResponse(cs *clientStream, f *MetaHeadersFra
Status: status + " " + http.StatusText(statusCode),
}
for _, hf := range regularFields {
- key := canonicalHeader(hf.Name)
+ key := httpcommon.CanonicalHeader(hf.Name)
if key == "Trailer" {
t := res.Trailer
if t == nil {
@@ -2472,7 +2411,7 @@ func (rl *clientConnReadLoop) handleResponse(cs *clientStream, f *MetaHeadersFra
res.Trailer = t
}
foreachHeaderElement(hf.Value, func(v string) {
- t[canonicalHeader(v)] = nil
+ t[httpcommon.CanonicalHeader(v)] = nil
})
} else {
vv := header[key]
@@ -2494,15 +2433,34 @@ func (rl *clientConnReadLoop) handleResponse(cs *clientStream, f *MetaHeadersFra
if f.StreamEnded() {
return nil, errors.New("1xx informational response with END_STREAM flag")
}
- cs.num1xx++
- const max1xxResponses = 5 // arbitrary bound on number of informational responses, same as net/http
- if cs.num1xx > max1xxResponses {
- return nil, errors.New("http2: too many 1xx informational responses")
- }
if fn := cs.get1xxTraceFunc(); fn != nil {
+ // If the 1xx response is being delivered to the user,
+ // then they're responsible for limiting the number
+ // of responses.
if err := fn(statusCode, textproto.MIMEHeader(header)); err != nil {
return nil, err
}
+ } else {
+ // If the user didn't examine the 1xx response, then we
+ // limit the size of all 1xx headers.
+ //
+ // This differs a bit from the HTTP/1 implementation, which
+ // limits the size of all 1xx headers plus the final response.
+ // Use the larger limit of MaxHeaderListSize and
+ // net/http.Transport.MaxResponseHeaderBytes.
+ limit := int64(cs.cc.t.maxHeaderListSize())
+ if t1 := cs.cc.t.t1; t1 != nil && t1.MaxResponseHeaderBytes > limit {
+ limit = t1.MaxResponseHeaderBytes
+ }
+ for _, h := range f.Fields {
+ cs.totalHeaderSize += int64(h.Size())
+ }
+ if cs.totalHeaderSize > limit {
+ if VerboseLogs {
+ log.Printf("http2: 1xx informational responses too large")
+ }
+ return nil, errors.New("header list too large")
+ }
}
if statusCode == 100 {
traceGot100Continue(cs.trace)
@@ -2577,7 +2535,7 @@ func (rl *clientConnReadLoop) processTrailers(cs *clientStream, f *MetaHeadersFr
trailer := make(http.Header)
for _, hf := range f.RegularFields() {
- key := canonicalHeader(hf.Name)
+ key := httpcommon.CanonicalHeader(hf.Name)
trailer[key] = append(trailer[key], hf.Value)
}
cs.trailer = trailer
@@ -2686,7 +2644,7 @@ func (b transportResponseBody) Close() error {
func (rl *clientConnReadLoop) processData(f *DataFrame) error {
cc := rl.cc
- cs := rl.streamByID(f.StreamID)
+ cs := rl.streamByID(f.StreamID, headerOrDataFrame)
data := f.Data()
if cs == nil {
cc.mu.Lock()
@@ -2821,9 +2779,22 @@ func (rl *clientConnReadLoop) endStreamError(cs *clientStream, err error) {
cs.abortStream(err)
}
-func (rl *clientConnReadLoop) streamByID(id uint32) *clientStream {
+// Constants passed to streamByID for documentation purposes.
+const (
+ headerOrDataFrame = true
+ notHeaderOrDataFrame = false
+)
+
+// streamByID returns the stream with the given id, or nil if no stream has that id.
+// If headerOrData is true, it clears rst.StreamPingsBlocked.
+func (rl *clientConnReadLoop) streamByID(id uint32, headerOrData bool) *clientStream {
rl.cc.mu.Lock()
defer rl.cc.mu.Unlock()
+ if headerOrData {
+ // Work around an unfortunate gRPC behavior.
+ // See comment on ClientConn.rstStreamPingsBlocked for details.
+ rl.cc.rstStreamPingsBlocked = false
+ }
cs := rl.cc.streams[id]
if cs != nil && !cs.readAborted {
return cs
@@ -2917,6 +2888,21 @@ func (rl *clientConnReadLoop) processSettingsNoWrite(f *SettingsFrame) error {
case SettingHeaderTableSize:
cc.henc.SetMaxDynamicTableSize(s.Val)
cc.peerMaxHeaderTableSize = s.Val
+ case SettingEnableConnectProtocol:
+ if err := s.Valid(); err != nil {
+ return err
+ }
+ // If the peer wants to send us SETTINGS_ENABLE_CONNECT_PROTOCOL,
+ // we require that it do so in the first SETTINGS frame.
+ //
+ // When we attempt to use extended CONNECT, we wait for the first
+ // SETTINGS frame to see if the server supports it. If we let the
+ // server enable the feature with a later SETTINGS frame, then
+ // users will see inconsistent results depending on whether we've
+ // seen that frame or not.
+ if !cc.seenSettings {
+ cc.extendedConnectAllowed = s.Val == 1
+ }
default:
cc.vlogf("Unhandled Setting: %v", s)
}
@@ -2934,6 +2920,7 @@ func (rl *clientConnReadLoop) processSettingsNoWrite(f *SettingsFrame) error {
// connection can establish to our default.
cc.maxConcurrentStreams = defaultMaxConcurrentStreams
}
+ close(cc.seenSettingsChan)
cc.seenSettings = true
}
@@ -2942,7 +2929,7 @@ func (rl *clientConnReadLoop) processSettingsNoWrite(f *SettingsFrame) error {
func (rl *clientConnReadLoop) processWindowUpdate(f *WindowUpdateFrame) error {
cc := rl.cc
- cs := rl.streamByID(f.StreamID)
+ cs := rl.streamByID(f.StreamID, notHeaderOrDataFrame)
if f.StreamID != 0 && cs == nil {
return nil
}
@@ -2971,7 +2958,7 @@ func (rl *clientConnReadLoop) processWindowUpdate(f *WindowUpdateFrame) error {
}
func (rl *clientConnReadLoop) processResetStream(f *RSTStreamFrame) error {
- cs := rl.streamByID(f.StreamID)
+ cs := rl.streamByID(f.StreamID, notHeaderOrDataFrame)
if cs == nil {
// TODO: return error if server tries to RST_STREAM an idle stream
return nil
@@ -3046,6 +3033,12 @@ func (rl *clientConnReadLoop) processPing(f *PingFrame) error {
close(c)
delete(cc.pings, f.Data)
}
+ if cc.pendingResets > 0 {
+ // See clientStream.cleanupWriteRequest.
+ cc.pendingResets = 0
+ cc.rstStreamPingsBlocked = true
+ cc.cond.Broadcast()
+ }
return nil
}
cc := rl.cc
@@ -3068,20 +3061,27 @@ func (rl *clientConnReadLoop) processPushPromise(f *PushPromiseFrame) error {
return ConnectionError(ErrCodeProtocol)
}
-func (cc *ClientConn) writeStreamReset(streamID uint32, code ErrCode, err error) {
+// writeStreamReset sends a RST_STREAM frame.
+// When ping is true, it also sends a PING frame with a random payload.
+func (cc *ClientConn) writeStreamReset(streamID uint32, code ErrCode, ping bool, err error) {
// TODO: map err to more interesting error codes, once the
// HTTP community comes up with some. But currently for
// RST_STREAM there's no equivalent to GOAWAY frame's debug
// data, and the error codes are all pretty vague ("cancel").
cc.wmu.Lock()
cc.fr.WriteRSTStream(streamID, code)
+ if ping {
+ var payload [8]byte
+ rand.Read(payload[:])
+ cc.fr.WritePing(false, payload)
+ }
cc.bw.Flush()
cc.wmu.Unlock()
}
var (
errResponseHeaderListSize = errors.New("http2: response header list larger than advertised limit")
- errRequestHeaderListSize = errors.New("http2: request header list larger than peer's advertised limit")
+ errRequestHeaderListSize = httpcommon.ErrRequestHeaderListSize
)
func (cc *ClientConn) logf(format string, args ...interface{}) {
@@ -3228,7 +3228,7 @@ func traceGotConn(req *http.Request, cc *ClientConn, reused bool) {
cc.mu.Lock()
ci.WasIdle = len(cc.streams) == 0 && reused
if ci.WasIdle && !cc.lastActive.IsZero() {
- ci.IdleTime = time.Since(cc.lastActive)
+ ci.IdleTime = cc.t.timeSince(cc.lastActive)
}
cc.mu.Unlock()
@@ -3265,16 +3265,6 @@ func traceFirstResponseByte(trace *httptrace.ClientTrace) {
}
}
-func traceHasWroteHeaderField(trace *httptrace.ClientTrace) bool {
- return trace != nil && trace.WroteHeaderField != nil
-}
-
-func traceWroteHeaderField(trace *httptrace.ClientTrace, k, v string) {
- if trace != nil && trace.WroteHeaderField != nil {
- trace.WroteHeaderField(k, []string{v})
- }
-}
-
func traceGot1xxResponseFunc(trace *httptrace.ClientTrace) func(int, textproto.MIMEHeader) error {
if trace != nil {
return trace.Got1xxResponse
diff --git a/vendor/golang.org/x/net/http2/unencrypted.go b/vendor/golang.org/x/net/http2/unencrypted.go
new file mode 100644
index 00000000000..b2de2116135
--- /dev/null
+++ b/vendor/golang.org/x/net/http2/unencrypted.go
@@ -0,0 +1,32 @@
+// Copyright 2024 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package http2
+
+import (
+ "crypto/tls"
+ "errors"
+ "net"
+)
+
+const nextProtoUnencryptedHTTP2 = "unencrypted_http2"
+
+// unencryptedNetConnFromTLSConn retrieves a net.Conn wrapped in a *tls.Conn.
+//
+// TLSNextProto functions accept a *tls.Conn.
+//
+// When passing an unencrypted HTTP/2 connection to a TLSNextProto function,
+// we pass a *tls.Conn with an underlying net.Conn containing the unencrypted connection.
+// To be extra careful about mistakes (accidentally dropping TLS encryption in a place
+// where we want it), the tls.Conn contains a net.Conn with an UnencryptedNetConn method
+// that returns the actual connection we want to use.
+func unencryptedNetConnFromTLSConn(tc *tls.Conn) (net.Conn, error) {
+ conner, ok := tc.NetConn().(interface {
+ UnencryptedNetConn() net.Conn
+ })
+ if !ok {
+ return nil, errors.New("http2: TLS conn unexpectedly found in unencrypted handoff")
+ }
+ return conner.UnencryptedNetConn(), nil
+}
diff --git a/vendor/golang.org/x/net/http2/write.go b/vendor/golang.org/x/net/http2/write.go
index 6ff6bee7e95..fdb35b9477e 100644
--- a/vendor/golang.org/x/net/http2/write.go
+++ b/vendor/golang.org/x/net/http2/write.go
@@ -13,6 +13,7 @@ import (
"golang.org/x/net/http/httpguts"
"golang.org/x/net/http2/hpack"
+ "golang.org/x/net/internal/httpcommon"
)
// writeFramer is implemented by any type that is used to write frames.
@@ -351,7 +352,7 @@ func encodeHeaders(enc *hpack.Encoder, h http.Header, keys []string) {
}
for _, k := range keys {
vv := h[k]
- k, ascii := lowerHeader(k)
+ k, ascii := httpcommon.LowerHeader(k)
if !ascii {
// Skip writing invalid headers. Per RFC 7540, Section 8.1.2, header
// field names have to be ASCII characters (just as in HTTP/1.x).
diff --git a/vendor/golang.org/x/net/internal/httpcommon/ascii.go b/vendor/golang.org/x/net/internal/httpcommon/ascii.go
new file mode 100644
index 00000000000..ed14da5afcc
--- /dev/null
+++ b/vendor/golang.org/x/net/internal/httpcommon/ascii.go
@@ -0,0 +1,53 @@
+// Copyright 2025 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package httpcommon
+
+import "strings"
+
+// The HTTP protocols are defined in terms of ASCII, not Unicode. This file
+// contains helper functions which may use Unicode-aware functions which would
+// otherwise be unsafe and could introduce vulnerabilities if used improperly.
+
+// asciiEqualFold is strings.EqualFold, ASCII only. It reports whether s and t
+// are equal, ASCII-case-insensitively.
+func asciiEqualFold(s, t string) bool {
+ if len(s) != len(t) {
+ return false
+ }
+ for i := 0; i < len(s); i++ {
+ if lower(s[i]) != lower(t[i]) {
+ return false
+ }
+ }
+ return true
+}
+
+// lower returns the ASCII lowercase version of b.
+func lower(b byte) byte {
+ if 'A' <= b && b <= 'Z' {
+ return b + ('a' - 'A')
+ }
+ return b
+}
+
+// isASCIIPrint returns whether s is ASCII and printable according to
+// https://tools.ietf.org/html/rfc20#section-4.2.
+func isASCIIPrint(s string) bool {
+ for i := 0; i < len(s); i++ {
+ if s[i] < ' ' || s[i] > '~' {
+ return false
+ }
+ }
+ return true
+}
+
+// asciiToLower returns the lowercase version of s if s is ASCII and printable,
+// and whether or not it was.
+func asciiToLower(s string) (lower string, ok bool) {
+ if !isASCIIPrint(s) {
+ return "", false
+ }
+ return strings.ToLower(s), true
+}
diff --git a/vendor/golang.org/x/net/http2/headermap.go b/vendor/golang.org/x/net/internal/httpcommon/headermap.go
similarity index 74%
rename from vendor/golang.org/x/net/http2/headermap.go
rename to vendor/golang.org/x/net/internal/httpcommon/headermap.go
index 149b3dd20e4..92483d8e41a 100644
--- a/vendor/golang.org/x/net/http2/headermap.go
+++ b/vendor/golang.org/x/net/internal/httpcommon/headermap.go
@@ -1,11 +1,11 @@
-// Copyright 2014 The Go Authors. All rights reserved.
+// Copyright 2025 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
-package http2
+package httpcommon
import (
- "net/http"
+ "net/textproto"
"sync"
)
@@ -82,13 +82,15 @@ func buildCommonHeaderMaps() {
commonLowerHeader = make(map[string]string, len(common))
commonCanonHeader = make(map[string]string, len(common))
for _, v := range common {
- chk := http.CanonicalHeaderKey(v)
+ chk := textproto.CanonicalMIMEHeaderKey(v)
commonLowerHeader[chk] = v
commonCanonHeader[v] = chk
}
}
-func lowerHeader(v string) (lower string, ascii bool) {
+// LowerHeader returns the lowercase form of a header name,
+// used on the wire for HTTP/2 and HTTP/3 requests.
+func LowerHeader(v string) (lower string, ascii bool) {
buildCommonHeaderMapsOnce()
if s, ok := commonLowerHeader[v]; ok {
return s, true
@@ -96,10 +98,18 @@ func lowerHeader(v string) (lower string, ascii bool) {
return asciiToLower(v)
}
-func canonicalHeader(v string) string {
+// CanonicalHeader canonicalizes a header name. (For example, "host" becomes "Host".)
+func CanonicalHeader(v string) string {
buildCommonHeaderMapsOnce()
if s, ok := commonCanonHeader[v]; ok {
return s
}
- return http.CanonicalHeaderKey(v)
+ return textproto.CanonicalMIMEHeaderKey(v)
+}
+
+// CachedCanonicalHeader returns the canonical form of a well-known header name.
+func CachedCanonicalHeader(v string) (string, bool) {
+ buildCommonHeaderMapsOnce()
+ s, ok := commonCanonHeader[v]
+ return s, ok
}
diff --git a/vendor/golang.org/x/net/internal/httpcommon/request.go b/vendor/golang.org/x/net/internal/httpcommon/request.go
new file mode 100644
index 00000000000..4b705531793
--- /dev/null
+++ b/vendor/golang.org/x/net/internal/httpcommon/request.go
@@ -0,0 +1,467 @@
+// Copyright 2025 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package httpcommon
+
+import (
+ "context"
+ "errors"
+ "fmt"
+ "net/http/httptrace"
+ "net/textproto"
+ "net/url"
+ "sort"
+ "strconv"
+ "strings"
+
+ "golang.org/x/net/http/httpguts"
+ "golang.org/x/net/http2/hpack"
+)
+
+var (
+ ErrRequestHeaderListSize = errors.New("request header list larger than peer's advertised limit")
+)
+
+// Request is a subset of http.Request.
+// It'd be simpler to pass an *http.Request, of course, but we can't depend on net/http
+// without creating a dependency cycle.
+type Request struct {
+ URL *url.URL
+ Method string
+ Host string
+ Header map[string][]string
+ Trailer map[string][]string
+ ActualContentLength int64 // 0 means 0, -1 means unknown
+}
+
+// EncodeHeadersParam is parameters to EncodeHeaders.
+type EncodeHeadersParam struct {
+ Request Request
+
+ // AddGzipHeader indicates that an "accept-encoding: gzip" header should be
+ // added to the request.
+ AddGzipHeader bool
+
+ // PeerMaxHeaderListSize, when non-zero, is the peer's MAX_HEADER_LIST_SIZE setting.
+ PeerMaxHeaderListSize uint64
+
+ // DefaultUserAgent is the User-Agent header to send when the request
+ // neither contains a User-Agent nor disables it.
+ DefaultUserAgent string
+}
+
+// EncodeHeadersParam is the result of EncodeHeaders.
+type EncodeHeadersResult struct {
+ HasBody bool
+ HasTrailers bool
+}
+
+// EncodeHeaders constructs request headers common to HTTP/2 and HTTP/3.
+// It validates a request and calls headerf with each pseudo-header and header
+// for the request.
+// The headerf function is called with the validated, canonicalized header name.
+func EncodeHeaders(ctx context.Context, param EncodeHeadersParam, headerf func(name, value string)) (res EncodeHeadersResult, _ error) {
+ req := param.Request
+
+ // Check for invalid connection-level headers.
+ if err := checkConnHeaders(req.Header); err != nil {
+ return res, err
+ }
+
+ if req.URL == nil {
+ return res, errors.New("Request.URL is nil")
+ }
+
+ host := req.Host
+ if host == "" {
+ host = req.URL.Host
+ }
+ host, err := httpguts.PunycodeHostPort(host)
+ if err != nil {
+ return res, err
+ }
+ if !httpguts.ValidHostHeader(host) {
+ return res, errors.New("invalid Host header")
+ }
+
+ // isNormalConnect is true if this is a non-extended CONNECT request.
+ isNormalConnect := false
+ var protocol string
+ if vv := req.Header[":protocol"]; len(vv) > 0 {
+ protocol = vv[0]
+ }
+ if req.Method == "CONNECT" && protocol == "" {
+ isNormalConnect = true
+ } else if protocol != "" && req.Method != "CONNECT" {
+ return res, errors.New("invalid :protocol header in non-CONNECT request")
+ }
+
+ // Validate the path, except for non-extended CONNECT requests which have no path.
+ var path string
+ if !isNormalConnect {
+ path = req.URL.RequestURI()
+ if !validPseudoPath(path) {
+ orig := path
+ path = strings.TrimPrefix(path, req.URL.Scheme+"://"+host)
+ if !validPseudoPath(path) {
+ if req.URL.Opaque != "" {
+ return res, fmt.Errorf("invalid request :path %q from URL.Opaque = %q", orig, req.URL.Opaque)
+ } else {
+ return res, fmt.Errorf("invalid request :path %q", orig)
+ }
+ }
+ }
+ }
+
+ // Check for any invalid headers+trailers and return an error before we
+ // potentially pollute our hpack state. (We want to be able to
+ // continue to reuse the hpack encoder for future requests)
+ if err := validateHeaders(req.Header); err != "" {
+ return res, fmt.Errorf("invalid HTTP header %s", err)
+ }
+ if err := validateHeaders(req.Trailer); err != "" {
+ return res, fmt.Errorf("invalid HTTP trailer %s", err)
+ }
+
+ trailers, err := commaSeparatedTrailers(req.Trailer)
+ if err != nil {
+ return res, err
+ }
+
+ enumerateHeaders := func(f func(name, value string)) {
+ // 8.1.2.3 Request Pseudo-Header Fields
+ // The :path pseudo-header field includes the path and query parts of the
+ // target URI (the path-absolute production and optionally a '?' character
+ // followed by the query production, see Sections 3.3 and 3.4 of
+ // [RFC3986]).
+ f(":authority", host)
+ m := req.Method
+ if m == "" {
+ m = "GET"
+ }
+ f(":method", m)
+ if !isNormalConnect {
+ f(":path", path)
+ f(":scheme", req.URL.Scheme)
+ }
+ if protocol != "" {
+ f(":protocol", protocol)
+ }
+ if trailers != "" {
+ f("trailer", trailers)
+ }
+
+ var didUA bool
+ for k, vv := range req.Header {
+ if asciiEqualFold(k, "host") || asciiEqualFold(k, "content-length") {
+ // Host is :authority, already sent.
+ // Content-Length is automatic, set below.
+ continue
+ } else if asciiEqualFold(k, "connection") ||
+ asciiEqualFold(k, "proxy-connection") ||
+ asciiEqualFold(k, "transfer-encoding") ||
+ asciiEqualFold(k, "upgrade") ||
+ asciiEqualFold(k, "keep-alive") {
+ // Per 8.1.2.2 Connection-Specific Header
+ // Fields, don't send connection-specific
+ // fields. We have already checked if any
+ // are error-worthy so just ignore the rest.
+ continue
+ } else if asciiEqualFold(k, "user-agent") {
+ // Match Go's http1 behavior: at most one
+ // User-Agent. If set to nil or empty string,
+ // then omit it. Otherwise if not mentioned,
+ // include the default (below).
+ didUA = true
+ if len(vv) < 1 {
+ continue
+ }
+ vv = vv[:1]
+ if vv[0] == "" {
+ continue
+ }
+ } else if asciiEqualFold(k, "cookie") {
+ // Per 8.1.2.5 To allow for better compression efficiency, the
+ // Cookie header field MAY be split into separate header fields,
+ // each with one or more cookie-pairs.
+ for _, v := range vv {
+ for {
+ p := strings.IndexByte(v, ';')
+ if p < 0 {
+ break
+ }
+ f("cookie", v[:p])
+ p++
+ // strip space after semicolon if any.
+ for p+1 <= len(v) && v[p] == ' ' {
+ p++
+ }
+ v = v[p:]
+ }
+ if len(v) > 0 {
+ f("cookie", v)
+ }
+ }
+ continue
+ } else if k == ":protocol" {
+ // :protocol pseudo-header was already sent above.
+ continue
+ }
+
+ for _, v := range vv {
+ f(k, v)
+ }
+ }
+ if shouldSendReqContentLength(req.Method, req.ActualContentLength) {
+ f("content-length", strconv.FormatInt(req.ActualContentLength, 10))
+ }
+ if param.AddGzipHeader {
+ f("accept-encoding", "gzip")
+ }
+ if !didUA {
+ f("user-agent", param.DefaultUserAgent)
+ }
+ }
+
+ // Do a first pass over the headers counting bytes to ensure
+ // we don't exceed cc.peerMaxHeaderListSize. This is done as a
+ // separate pass before encoding the headers to prevent
+ // modifying the hpack state.
+ if param.PeerMaxHeaderListSize > 0 {
+ hlSize := uint64(0)
+ enumerateHeaders(func(name, value string) {
+ hf := hpack.HeaderField{Name: name, Value: value}
+ hlSize += uint64(hf.Size())
+ })
+
+ if hlSize > param.PeerMaxHeaderListSize {
+ return res, ErrRequestHeaderListSize
+ }
+ }
+
+ trace := httptrace.ContextClientTrace(ctx)
+
+ // Header list size is ok. Write the headers.
+ enumerateHeaders(func(name, value string) {
+ name, ascii := LowerHeader(name)
+ if !ascii {
+ // Skip writing invalid headers. Per RFC 7540, Section 8.1.2, header
+ // field names have to be ASCII characters (just as in HTTP/1.x).
+ return
+ }
+
+ headerf(name, value)
+
+ if trace != nil && trace.WroteHeaderField != nil {
+ trace.WroteHeaderField(name, []string{value})
+ }
+ })
+
+ res.HasBody = req.ActualContentLength != 0
+ res.HasTrailers = trailers != ""
+ return res, nil
+}
+
+// IsRequestGzip reports whether we should add an Accept-Encoding: gzip header
+// for a request.
+func IsRequestGzip(method string, header map[string][]string, disableCompression bool) bool {
+ // TODO(bradfitz): this is a copy of the logic in net/http. Unify somewhere?
+ if !disableCompression &&
+ len(header["Accept-Encoding"]) == 0 &&
+ len(header["Range"]) == 0 &&
+ method != "HEAD" {
+ // Request gzip only, not deflate. Deflate is ambiguous and
+ // not as universally supported anyway.
+ // See: https://zlib.net/zlib_faq.html#faq39
+ //
+ // Note that we don't request this for HEAD requests,
+ // due to a bug in nginx:
+ // http://trac.nginx.org/nginx/ticket/358
+ // https://golang.org/issue/5522
+ //
+ // We don't request gzip if the request is for a range, since
+ // auto-decoding a portion of a gzipped document will just fail
+ // anyway. See https://golang.org/issue/8923
+ return true
+ }
+ return false
+}
+
+// checkConnHeaders checks whether req has any invalid connection-level headers.
+//
+// https://www.rfc-editor.org/rfc/rfc9114.html#section-4.2-3
+// https://www.rfc-editor.org/rfc/rfc9113.html#section-8.2.2-1
+//
+// Certain headers are special-cased as okay but not transmitted later.
+// For example, we allow "Transfer-Encoding: chunked", but drop the header when encoding.
+func checkConnHeaders(h map[string][]string) error {
+ if vv := h["Upgrade"]; len(vv) > 0 && (vv[0] != "" && vv[0] != "chunked") {
+ return fmt.Errorf("invalid Upgrade request header: %q", vv)
+ }
+ if vv := h["Transfer-Encoding"]; len(vv) > 0 && (len(vv) > 1 || vv[0] != "" && vv[0] != "chunked") {
+ return fmt.Errorf("invalid Transfer-Encoding request header: %q", vv)
+ }
+ if vv := h["Connection"]; len(vv) > 0 && (len(vv) > 1 || vv[0] != "" && !asciiEqualFold(vv[0], "close") && !asciiEqualFold(vv[0], "keep-alive")) {
+ return fmt.Errorf("invalid Connection request header: %q", vv)
+ }
+ return nil
+}
+
+func commaSeparatedTrailers(trailer map[string][]string) (string, error) {
+ keys := make([]string, 0, len(trailer))
+ for k := range trailer {
+ k = CanonicalHeader(k)
+ switch k {
+ case "Transfer-Encoding", "Trailer", "Content-Length":
+ return "", fmt.Errorf("invalid Trailer key %q", k)
+ }
+ keys = append(keys, k)
+ }
+ if len(keys) > 0 {
+ sort.Strings(keys)
+ return strings.Join(keys, ","), nil
+ }
+ return "", nil
+}
+
+// validPseudoPath reports whether v is a valid :path pseudo-header
+// value. It must be either:
+//
+// - a non-empty string starting with '/'
+// - the string '*', for OPTIONS requests.
+//
+// For now this is only used a quick check for deciding when to clean
+// up Opaque URLs before sending requests from the Transport.
+// See golang.org/issue/16847
+//
+// We used to enforce that the path also didn't start with "//", but
+// Google's GFE accepts such paths and Chrome sends them, so ignore
+// that part of the spec. See golang.org/issue/19103.
+func validPseudoPath(v string) bool {
+ return (len(v) > 0 && v[0] == '/') || v == "*"
+}
+
+func validateHeaders(hdrs map[string][]string) string {
+ for k, vv := range hdrs {
+ if !httpguts.ValidHeaderFieldName(k) && k != ":protocol" {
+ return fmt.Sprintf("name %q", k)
+ }
+ for _, v := range vv {
+ if !httpguts.ValidHeaderFieldValue(v) {
+ // Don't include the value in the error,
+ // because it may be sensitive.
+ return fmt.Sprintf("value for header %q", k)
+ }
+ }
+ }
+ return ""
+}
+
+// shouldSendReqContentLength reports whether we should send
+// a "content-length" request header. This logic is basically a copy of the net/http
+// transferWriter.shouldSendContentLength.
+// The contentLength is the corrected contentLength (so 0 means actually 0, not unknown).
+// -1 means unknown.
+func shouldSendReqContentLength(method string, contentLength int64) bool {
+ if contentLength > 0 {
+ return true
+ }
+ if contentLength < 0 {
+ return false
+ }
+ // For zero bodies, whether we send a content-length depends on the method.
+ // It also kinda doesn't matter for http2 either way, with END_STREAM.
+ switch method {
+ case "POST", "PUT", "PATCH":
+ return true
+ default:
+ return false
+ }
+}
+
+// ServerRequestParam is parameters to NewServerRequest.
+type ServerRequestParam struct {
+ Method string
+ Scheme, Authority, Path string
+ Protocol string
+ Header map[string][]string
+}
+
+// ServerRequestResult is the result of NewServerRequest.
+type ServerRequestResult struct {
+ // Various http.Request fields.
+ URL *url.URL
+ RequestURI string
+ Trailer map[string][]string
+
+ NeedsContinue bool // client provided an "Expect: 100-continue" header
+
+ // If the request should be rejected, this is a short string suitable for passing
+ // to the http2 package's CountError function.
+ // It might be a bit odd to return errors this way rather than returing an error,
+ // but this ensures we don't forget to include a CountError reason.
+ InvalidReason string
+}
+
+func NewServerRequest(rp ServerRequestParam) ServerRequestResult {
+ needsContinue := httpguts.HeaderValuesContainsToken(rp.Header["Expect"], "100-continue")
+ if needsContinue {
+ delete(rp.Header, "Expect")
+ }
+ // Merge Cookie headers into one "; "-delimited value.
+ if cookies := rp.Header["Cookie"]; len(cookies) > 1 {
+ rp.Header["Cookie"] = []string{strings.Join(cookies, "; ")}
+ }
+
+ // Setup Trailers
+ var trailer map[string][]string
+ for _, v := range rp.Header["Trailer"] {
+ for _, key := range strings.Split(v, ",") {
+ key = textproto.CanonicalMIMEHeaderKey(textproto.TrimString(key))
+ switch key {
+ case "Transfer-Encoding", "Trailer", "Content-Length":
+ // Bogus. (copy of http1 rules)
+ // Ignore.
+ default:
+ if trailer == nil {
+ trailer = make(map[string][]string)
+ }
+ trailer[key] = nil
+ }
+ }
+ }
+ delete(rp.Header, "Trailer")
+
+ // "':authority' MUST NOT include the deprecated userinfo subcomponent
+ // for "http" or "https" schemed URIs."
+ // https://www.rfc-editor.org/rfc/rfc9113.html#section-8.3.1-2.3.8
+ if strings.IndexByte(rp.Authority, '@') != -1 && (rp.Scheme == "http" || rp.Scheme == "https") {
+ return ServerRequestResult{
+ InvalidReason: "userinfo_in_authority",
+ }
+ }
+
+ var url_ *url.URL
+ var requestURI string
+ if rp.Method == "CONNECT" && rp.Protocol == "" {
+ url_ = &url.URL{Host: rp.Authority}
+ requestURI = rp.Authority // mimic HTTP/1 server behavior
+ } else {
+ var err error
+ url_, err = url.ParseRequestURI(rp.Path)
+ if err != nil {
+ return ServerRequestResult{
+ InvalidReason: "bad_path",
+ }
+ }
+ requestURI = rp.Path
+ }
+
+ return ServerRequestResult{
+ URL: url_,
+ NeedsContinue: needsContinue,
+ RequestURI: requestURI,
+ Trailer: trailer,
+ }
+}
diff --git a/vendor/golang.org/x/net/proxy/per_host.go b/vendor/golang.org/x/net/proxy/per_host.go
index d7d4b8b6e35..32bdf435ecd 100644
--- a/vendor/golang.org/x/net/proxy/per_host.go
+++ b/vendor/golang.org/x/net/proxy/per_host.go
@@ -7,6 +7,7 @@ package proxy
import (
"context"
"net"
+ "net/netip"
"strings"
)
@@ -57,7 +58,8 @@ func (p *PerHost) DialContext(ctx context.Context, network, addr string) (c net.
}
func (p *PerHost) dialerForRequest(host string) Dialer {
- if ip := net.ParseIP(host); ip != nil {
+ if nip, err := netip.ParseAddr(host); err == nil {
+ ip := net.IP(nip.AsSlice())
for _, net := range p.bypassNetworks {
if net.Contains(ip) {
return p.bypass
@@ -108,8 +110,8 @@ func (p *PerHost) AddFromString(s string) {
}
continue
}
- if ip := net.ParseIP(host); ip != nil {
- p.AddIP(ip)
+ if nip, err := netip.ParseAddr(host); err == nil {
+ p.AddIP(net.IP(nip.AsSlice()))
continue
}
if strings.HasPrefix(host, "*.") {
diff --git a/vendor/golang.org/x/sync/errgroup/errgroup.go b/vendor/golang.org/x/sync/errgroup/errgroup.go
index 948a3ee63d4..a4ea5d14f15 100644
--- a/vendor/golang.org/x/sync/errgroup/errgroup.go
+++ b/vendor/golang.org/x/sync/errgroup/errgroup.go
@@ -46,7 +46,7 @@ func (g *Group) done() {
// returns a non-nil error or the first time Wait returns, whichever occurs
// first.
func WithContext(ctx context.Context) (*Group, context.Context) {
- ctx, cancel := withCancelCause(ctx)
+ ctx, cancel := context.WithCancelCause(ctx)
return &Group{cancel: cancel}, ctx
}
@@ -118,6 +118,7 @@ func (g *Group) TryGo(f func() error) bool {
// SetLimit limits the number of active goroutines in this group to at most n.
// A negative value indicates no limit.
+// A limit of zero will prevent any new goroutines from being added.
//
// Any subsequent call to the Go method will block until it can add an active
// goroutine without exceeding the configured limit.
diff --git a/vendor/golang.org/x/sync/errgroup/go120.go b/vendor/golang.org/x/sync/errgroup/go120.go
deleted file mode 100644
index f93c740b638..00000000000
--- a/vendor/golang.org/x/sync/errgroup/go120.go
+++ /dev/null
@@ -1,13 +0,0 @@
-// Copyright 2023 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-//go:build go1.20
-
-package errgroup
-
-import "context"
-
-func withCancelCause(parent context.Context) (context.Context, func(error)) {
- return context.WithCancelCause(parent)
-}
diff --git a/vendor/golang.org/x/sync/errgroup/pre_go120.go b/vendor/golang.org/x/sync/errgroup/pre_go120.go
deleted file mode 100644
index 88ce33434e2..00000000000
--- a/vendor/golang.org/x/sync/errgroup/pre_go120.go
+++ /dev/null
@@ -1,14 +0,0 @@
-// Copyright 2023 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-//go:build !go1.20
-
-package errgroup
-
-import "context"
-
-func withCancelCause(parent context.Context) (context.Context, func(error)) {
- ctx, cancel := context.WithCancel(parent)
- return ctx, func(error) { cancel() }
-}
diff --git a/vendor/golang.org/x/sys/cpu/asm_darwin_x86_gc.s b/vendor/golang.org/x/sys/cpu/asm_darwin_x86_gc.s
new file mode 100644
index 00000000000..ec2acfe540e
--- /dev/null
+++ b/vendor/golang.org/x/sys/cpu/asm_darwin_x86_gc.s
@@ -0,0 +1,17 @@
+// Copyright 2024 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+//go:build darwin && amd64 && gc
+
+#include "textflag.h"
+
+TEXT libc_sysctl_trampoline<>(SB),NOSPLIT,$0-0
+ JMP libc_sysctl(SB)
+GLOBL ·libc_sysctl_trampoline_addr(SB), RODATA, $8
+DATA ·libc_sysctl_trampoline_addr(SB)/8, $libc_sysctl_trampoline<>(SB)
+
+TEXT libc_sysctlbyname_trampoline<>(SB),NOSPLIT,$0-0
+ JMP libc_sysctlbyname(SB)
+GLOBL ·libc_sysctlbyname_trampoline_addr(SB), RODATA, $8
+DATA ·libc_sysctlbyname_trampoline_addr(SB)/8, $libc_sysctlbyname_trampoline<>(SB)
diff --git a/vendor/golang.org/x/sys/cpu/cpu.go b/vendor/golang.org/x/sys/cpu/cpu.go
index 02609d5b21d..9c105f23afc 100644
--- a/vendor/golang.org/x/sys/cpu/cpu.go
+++ b/vendor/golang.org/x/sys/cpu/cpu.go
@@ -72,6 +72,9 @@ var X86 struct {
HasSSSE3 bool // Supplemental streaming SIMD extension 3
HasSSE41 bool // Streaming SIMD extension 4 and 4.1
HasSSE42 bool // Streaming SIMD extension 4 and 4.2
+ HasAVXIFMA bool // Advanced vector extension Integer Fused Multiply Add
+ HasAVXVNNI bool // Advanced vector extension Vector Neural Network Instructions
+ HasAVXVNNIInt8 bool // Advanced vector extension Vector Neural Network Int8 instructions
_ CacheLinePad
}
diff --git a/vendor/golang.org/x/sys/cpu/cpu_darwin_x86.go b/vendor/golang.org/x/sys/cpu/cpu_darwin_x86.go
new file mode 100644
index 00000000000..b838cb9e956
--- /dev/null
+++ b/vendor/golang.org/x/sys/cpu/cpu_darwin_x86.go
@@ -0,0 +1,61 @@
+// Copyright 2024 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+//go:build darwin && amd64 && gc
+
+package cpu
+
+// darwinSupportsAVX512 checks Darwin kernel for AVX512 support via sysctl
+// call (see issue 43089). It also restricts AVX512 support for Darwin to
+// kernel version 21.3.0 (MacOS 12.2.0) or later (see issue 49233).
+//
+// Background:
+// Darwin implements a special mechanism to economize on thread state when
+// AVX512 specific registers are not in use. This scheme minimizes state when
+// preempting threads that haven't yet used any AVX512 instructions, but adds
+// special requirements to check for AVX512 hardware support at runtime (e.g.
+// via sysctl call or commpage inspection). See issue 43089 and link below for
+// full background:
+// https://github.com/apple-oss-distributions/xnu/blob/xnu-11215.1.10/osfmk/i386/fpu.c#L214-L240
+//
+// Additionally, all versions of the Darwin kernel from 19.6.0 through 21.2.0
+// (corresponding to MacOS 10.15.6 - 12.1) have a bug that can cause corruption
+// of the AVX512 mask registers (K0-K7) upon signal return. For this reason
+// AVX512 is considered unsafe to use on Darwin for kernel versions prior to
+// 21.3.0, where a fix has been confirmed. See issue 49233 for full background.
+func darwinSupportsAVX512() bool {
+ return darwinSysctlEnabled([]byte("hw.optional.avx512f\x00")) && darwinKernelVersionCheck(21, 3, 0)
+}
+
+// Ensure Darwin kernel version is at least major.minor.patch, avoiding dependencies
+func darwinKernelVersionCheck(major, minor, patch int) bool {
+ var release [256]byte
+ err := darwinOSRelease(&release)
+ if err != nil {
+ return false
+ }
+
+ var mmp [3]int
+ c := 0
+Loop:
+ for _, b := range release[:] {
+ switch {
+ case b >= '0' && b <= '9':
+ mmp[c] = 10*mmp[c] + int(b-'0')
+ case b == '.':
+ c++
+ if c > 2 {
+ return false
+ }
+ case b == 0:
+ break Loop
+ default:
+ return false
+ }
+ }
+ if c != 2 {
+ return false
+ }
+ return mmp[0] > major || mmp[0] == major && (mmp[1] > minor || mmp[1] == minor && mmp[2] >= patch)
+}
diff --git a/vendor/golang.org/x/sys/cpu/cpu_gc_x86.go b/vendor/golang.org/x/sys/cpu/cpu_gc_x86.go
index 910728fb163..32a44514e24 100644
--- a/vendor/golang.org/x/sys/cpu/cpu_gc_x86.go
+++ b/vendor/golang.org/x/sys/cpu/cpu_gc_x86.go
@@ -6,10 +6,10 @@
package cpu
-// cpuid is implemented in cpu_x86.s for gc compiler
+// cpuid is implemented in cpu_gc_x86.s for gc compiler
// and in cpu_gccgo.c for gccgo.
func cpuid(eaxArg, ecxArg uint32) (eax, ebx, ecx, edx uint32)
-// xgetbv with ecx = 0 is implemented in cpu_x86.s for gc compiler
+// xgetbv with ecx = 0 is implemented in cpu_gc_x86.s for gc compiler
// and in cpu_gccgo.c for gccgo.
func xgetbv() (eax, edx uint32)
diff --git a/vendor/golang.org/x/sys/cpu/cpu_x86.s b/vendor/golang.org/x/sys/cpu/cpu_gc_x86.s
similarity index 94%
rename from vendor/golang.org/x/sys/cpu/cpu_x86.s
rename to vendor/golang.org/x/sys/cpu/cpu_gc_x86.s
index 7d7ba33efb8..ce208ce6d6a 100644
--- a/vendor/golang.org/x/sys/cpu/cpu_x86.s
+++ b/vendor/golang.org/x/sys/cpu/cpu_gc_x86.s
@@ -18,7 +18,7 @@ TEXT ·cpuid(SB), NOSPLIT, $0-24
RET
// func xgetbv() (eax, edx uint32)
-TEXT ·xgetbv(SB),NOSPLIT,$0-8
+TEXT ·xgetbv(SB), NOSPLIT, $0-8
MOVL $0, CX
XGETBV
MOVL AX, eax+0(FP)
diff --git a/vendor/golang.org/x/sys/cpu/cpu_gccgo_x86.go b/vendor/golang.org/x/sys/cpu/cpu_gccgo_x86.go
index 99c60fe9f9c..170d21ddfda 100644
--- a/vendor/golang.org/x/sys/cpu/cpu_gccgo_x86.go
+++ b/vendor/golang.org/x/sys/cpu/cpu_gccgo_x86.go
@@ -23,9 +23,3 @@ func xgetbv() (eax, edx uint32) {
gccgoXgetbv(&a, &d)
return a, d
}
-
-// gccgo doesn't build on Darwin, per:
-// https://github.com/Homebrew/homebrew-core/blob/HEAD/Formula/gcc.rb#L76
-func darwinSupportsAVX512() bool {
- return false
-}
diff --git a/vendor/golang.org/x/sys/cpu/cpu_linux_arm64.go b/vendor/golang.org/x/sys/cpu/cpu_linux_arm64.go
index 08f35ea1773..f1caf0f78e2 100644
--- a/vendor/golang.org/x/sys/cpu/cpu_linux_arm64.go
+++ b/vendor/golang.org/x/sys/cpu/cpu_linux_arm64.go
@@ -110,7 +110,6 @@ func doinit() {
ARM64.HasASIMDFHM = isSet(hwCap, hwcap_ASIMDFHM)
ARM64.HasDIT = isSet(hwCap, hwcap_DIT)
-
// HWCAP2 feature bits
ARM64.HasSVE2 = isSet(hwCap2, hwcap2_SVE2)
ARM64.HasI8MM = isSet(hwCap2, hwcap2_I8MM)
diff --git a/vendor/golang.org/x/tools/internal/versions/constraint_go121.go b/vendor/golang.org/x/sys/cpu/cpu_other_x86.go
similarity index 50%
rename from vendor/golang.org/x/tools/internal/versions/constraint_go121.go
rename to vendor/golang.org/x/sys/cpu/cpu_other_x86.go
index 38011407d5f..a0fd7e2f75d 100644
--- a/vendor/golang.org/x/tools/internal/versions/constraint_go121.go
+++ b/vendor/golang.org/x/sys/cpu/cpu_other_x86.go
@@ -2,13 +2,10 @@
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
-//go:build go1.21
-// +build go1.21
+//go:build 386 || amd64p32 || (amd64 && (!darwin || !gc))
-package versions
+package cpu
-import "go/build/constraint"
-
-func init() {
- ConstraintGoVersion = constraint.GoVersion
+func darwinSupportsAVX512() bool {
+ panic("only implemented for gc && amd64 && darwin")
}
diff --git a/vendor/golang.org/x/sys/cpu/cpu_x86.go b/vendor/golang.org/x/sys/cpu/cpu_x86.go
index c29f5e4c5a6..1e642f3304f 100644
--- a/vendor/golang.org/x/sys/cpu/cpu_x86.go
+++ b/vendor/golang.org/x/sys/cpu/cpu_x86.go
@@ -53,6 +53,9 @@ func initOptions() {
{Name: "sse41", Feature: &X86.HasSSE41},
{Name: "sse42", Feature: &X86.HasSSE42},
{Name: "ssse3", Feature: &X86.HasSSSE3},
+ {Name: "avxifma", Feature: &X86.HasAVXIFMA},
+ {Name: "avxvnni", Feature: &X86.HasAVXVNNI},
+ {Name: "avxvnniint8", Feature: &X86.HasAVXVNNIInt8},
// These capabilities should always be enabled on amd64:
{Name: "sse2", Feature: &X86.HasSSE2, Required: runtime.GOARCH == "amd64"},
@@ -92,10 +95,8 @@ func archInit() {
osSupportsAVX = isSet(1, eax) && isSet(2, eax)
if runtime.GOOS == "darwin" {
- // Darwin doesn't save/restore AVX-512 mask registers correctly across signal handlers.
- // Since users can't rely on mask register contents, let's not advertise AVX-512 support.
- // See issue 49233.
- osSupportsAVX512 = false
+ // Darwin requires special AVX512 checks, see cpu_darwin_x86.go
+ osSupportsAVX512 = osSupportsAVX && darwinSupportsAVX512()
} else {
// Check if OPMASK and ZMM registers have OS support.
osSupportsAVX512 = osSupportsAVX && isSet(5, eax) && isSet(6, eax) && isSet(7, eax)
@@ -108,7 +109,7 @@ func archInit() {
return
}
- _, ebx7, ecx7, edx7 := cpuid(7, 0)
+ eax7, ebx7, ecx7, edx7 := cpuid(7, 0)
X86.HasBMI1 = isSet(3, ebx7)
X86.HasAVX2 = isSet(5, ebx7) && osSupportsAVX
X86.HasBMI2 = isSet(8, ebx7)
@@ -136,14 +137,24 @@ func archInit() {
X86.HasAVX512VAES = isSet(9, ecx7)
X86.HasAVX512VBMI2 = isSet(6, ecx7)
X86.HasAVX512BITALG = isSet(12, ecx7)
-
- eax71, _, _, _ := cpuid(7, 1)
- X86.HasAVX512BF16 = isSet(5, eax71)
}
X86.HasAMXTile = isSet(24, edx7)
X86.HasAMXInt8 = isSet(25, edx7)
X86.HasAMXBF16 = isSet(22, edx7)
+
+ // These features depend on the second level of extended features.
+ if eax7 >= 1 {
+ eax71, _, _, edx71 := cpuid(7, 1)
+ if X86.HasAVX512 {
+ X86.HasAVX512BF16 = isSet(5, eax71)
+ }
+ if X86.HasAVX {
+ X86.HasAVXIFMA = isSet(23, eax71)
+ X86.HasAVXVNNI = isSet(4, eax71)
+ X86.HasAVXVNNIInt8 = isSet(4, edx71)
+ }
+ }
}
func isSet(bitpos uint, value uint32) bool {
diff --git a/vendor/golang.org/x/sys/cpu/syscall_darwin_x86_gc.go b/vendor/golang.org/x/sys/cpu/syscall_darwin_x86_gc.go
new file mode 100644
index 00000000000..4d0888b0c01
--- /dev/null
+++ b/vendor/golang.org/x/sys/cpu/syscall_darwin_x86_gc.go
@@ -0,0 +1,98 @@
+// Copyright 2024 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+// Minimal copy of x/sys/unix so the cpu package can make a
+// system call on Darwin without depending on x/sys/unix.
+
+//go:build darwin && amd64 && gc
+
+package cpu
+
+import (
+ "syscall"
+ "unsafe"
+)
+
+type _C_int int32
+
+// adapted from unix.Uname() at x/sys/unix/syscall_darwin.go L419
+func darwinOSRelease(release *[256]byte) error {
+ // from x/sys/unix/zerrors_openbsd_amd64.go
+ const (
+ CTL_KERN = 0x1
+ KERN_OSRELEASE = 0x2
+ )
+
+ mib := []_C_int{CTL_KERN, KERN_OSRELEASE}
+ n := unsafe.Sizeof(*release)
+
+ return sysctl(mib, &release[0], &n, nil, 0)
+}
+
+type Errno = syscall.Errno
+
+var _zero uintptr // Single-word zero for use when we need a valid pointer to 0 bytes.
+
+// from x/sys/unix/zsyscall_darwin_amd64.go L791-807
+func sysctl(mib []_C_int, old *byte, oldlen *uintptr, new *byte, newlen uintptr) error {
+ var _p0 unsafe.Pointer
+ if len(mib) > 0 {
+ _p0 = unsafe.Pointer(&mib[0])
+ } else {
+ _p0 = unsafe.Pointer(&_zero)
+ }
+ if _, _, err := syscall_syscall6(
+ libc_sysctl_trampoline_addr,
+ uintptr(_p0),
+ uintptr(len(mib)),
+ uintptr(unsafe.Pointer(old)),
+ uintptr(unsafe.Pointer(oldlen)),
+ uintptr(unsafe.Pointer(new)),
+ uintptr(newlen),
+ ); err != 0 {
+ return err
+ }
+
+ return nil
+}
+
+var libc_sysctl_trampoline_addr uintptr
+
+// adapted from internal/cpu/cpu_arm64_darwin.go
+func darwinSysctlEnabled(name []byte) bool {
+ out := int32(0)
+ nout := unsafe.Sizeof(out)
+ if ret := sysctlbyname(&name[0], (*byte)(unsafe.Pointer(&out)), &nout, nil, 0); ret != nil {
+ return false
+ }
+ return out > 0
+}
+
+//go:cgo_import_dynamic libc_sysctl sysctl "/usr/lib/libSystem.B.dylib"
+
+var libc_sysctlbyname_trampoline_addr uintptr
+
+// adapted from runtime/sys_darwin.go in the pattern of sysctl() above, as defined in x/sys/unix
+func sysctlbyname(name *byte, old *byte, oldlen *uintptr, new *byte, newlen uintptr) error {
+ if _, _, err := syscall_syscall6(
+ libc_sysctlbyname_trampoline_addr,
+ uintptr(unsafe.Pointer(name)),
+ uintptr(unsafe.Pointer(old)),
+ uintptr(unsafe.Pointer(oldlen)),
+ uintptr(unsafe.Pointer(new)),
+ uintptr(newlen),
+ 0,
+ ); err != 0 {
+ return err
+ }
+
+ return nil
+}
+
+//go:cgo_import_dynamic libc_sysctlbyname sysctlbyname "/usr/lib/libSystem.B.dylib"
+
+// Implemented in the runtime package (runtime/sys_darwin.go)
+func syscall_syscall6(fn, a1, a2, a3, a4, a5, a6 uintptr) (r1, r2 uintptr, err Errno)
+
+//go:linkname syscall_syscall6 syscall.syscall6
diff --git a/vendor/golang.org/x/sys/unix/auxv.go b/vendor/golang.org/x/sys/unix/auxv.go
new file mode 100644
index 00000000000..37a82528f58
--- /dev/null
+++ b/vendor/golang.org/x/sys/unix/auxv.go
@@ -0,0 +1,36 @@
+// Copyright 2025 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+//go:build go1.21 && (aix || darwin || dragonfly || freebsd || linux || netbsd || openbsd || solaris || zos)
+
+package unix
+
+import (
+ "syscall"
+ "unsafe"
+)
+
+//go:linkname runtime_getAuxv runtime.getAuxv
+func runtime_getAuxv() []uintptr
+
+// Auxv returns the ELF auxiliary vector as a sequence of key/value pairs.
+// The returned slice is always a fresh copy, owned by the caller.
+// It returns an error on non-ELF platforms, or if the auxiliary vector cannot be accessed,
+// which happens in some locked-down environments and build modes.
+func Auxv() ([][2]uintptr, error) {
+ vec := runtime_getAuxv()
+ vecLen := len(vec)
+
+ if vecLen == 0 {
+ return nil, syscall.ENOENT
+ }
+
+ if vecLen%2 != 0 {
+ return nil, syscall.EINVAL
+ }
+
+ result := make([]uintptr, vecLen)
+ copy(result, vec)
+ return unsafe.Slice((*[2]uintptr)(unsafe.Pointer(&result[0])), vecLen/2), nil
+}
diff --git a/vendor/golang.org/x/sys/unix/auxv_unsupported.go b/vendor/golang.org/x/sys/unix/auxv_unsupported.go
new file mode 100644
index 00000000000..1200487f2e8
--- /dev/null
+++ b/vendor/golang.org/x/sys/unix/auxv_unsupported.go
@@ -0,0 +1,13 @@
+// Copyright 2025 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+//go:build !go1.21 && (aix || darwin || dragonfly || freebsd || linux || netbsd || openbsd || solaris || zos)
+
+package unix
+
+import "syscall"
+
+func Auxv() ([][2]uintptr, error) {
+ return nil, syscall.ENOTSUP
+}
diff --git a/vendor/golang.org/x/sys/unix/ioctl_linux.go b/vendor/golang.org/x/sys/unix/ioctl_linux.go
index dbe680eab88..7ca4fa12aa6 100644
--- a/vendor/golang.org/x/sys/unix/ioctl_linux.go
+++ b/vendor/golang.org/x/sys/unix/ioctl_linux.go
@@ -58,6 +58,102 @@ func IoctlGetEthtoolDrvinfo(fd int, ifname string) (*EthtoolDrvinfo, error) {
return &value, err
}
+// IoctlGetEthtoolTsInfo fetches ethtool timestamping and PHC
+// association for the network device specified by ifname.
+func IoctlGetEthtoolTsInfo(fd int, ifname string) (*EthtoolTsInfo, error) {
+ ifr, err := NewIfreq(ifname)
+ if err != nil {
+ return nil, err
+ }
+
+ value := EthtoolTsInfo{Cmd: ETHTOOL_GET_TS_INFO}
+ ifrd := ifr.withData(unsafe.Pointer(&value))
+
+ err = ioctlIfreqData(fd, SIOCETHTOOL, &ifrd)
+ return &value, err
+}
+
+// IoctlGetHwTstamp retrieves the hardware timestamping configuration
+// for the network device specified by ifname.
+func IoctlGetHwTstamp(fd int, ifname string) (*HwTstampConfig, error) {
+ ifr, err := NewIfreq(ifname)
+ if err != nil {
+ return nil, err
+ }
+
+ value := HwTstampConfig{}
+ ifrd := ifr.withData(unsafe.Pointer(&value))
+
+ err = ioctlIfreqData(fd, SIOCGHWTSTAMP, &ifrd)
+ return &value, err
+}
+
+// IoctlSetHwTstamp updates the hardware timestamping configuration for
+// the network device specified by ifname.
+func IoctlSetHwTstamp(fd int, ifname string, cfg *HwTstampConfig) error {
+ ifr, err := NewIfreq(ifname)
+ if err != nil {
+ return err
+ }
+ ifrd := ifr.withData(unsafe.Pointer(cfg))
+ return ioctlIfreqData(fd, SIOCSHWTSTAMP, &ifrd)
+}
+
+// FdToClockID derives the clock ID from the file descriptor number
+// - see clock_gettime(3), FD_TO_CLOCKID macros. The resulting ID is
+// suitable for system calls like ClockGettime.
+func FdToClockID(fd int) int32 { return int32((int(^fd) << 3) | 3) }
+
+// IoctlPtpClockGetcaps returns the description of a given PTP device.
+func IoctlPtpClockGetcaps(fd int) (*PtpClockCaps, error) {
+ var value PtpClockCaps
+ err := ioctlPtr(fd, PTP_CLOCK_GETCAPS2, unsafe.Pointer(&value))
+ return &value, err
+}
+
+// IoctlPtpSysOffsetPrecise returns a description of the clock
+// offset compared to the system clock.
+func IoctlPtpSysOffsetPrecise(fd int) (*PtpSysOffsetPrecise, error) {
+ var value PtpSysOffsetPrecise
+ err := ioctlPtr(fd, PTP_SYS_OFFSET_PRECISE2, unsafe.Pointer(&value))
+ return &value, err
+}
+
+// IoctlPtpSysOffsetExtended returns an extended description of the
+// clock offset compared to the system clock. The samples parameter
+// specifies the desired number of measurements.
+func IoctlPtpSysOffsetExtended(fd int, samples uint) (*PtpSysOffsetExtended, error) {
+ value := PtpSysOffsetExtended{Samples: uint32(samples)}
+ err := ioctlPtr(fd, PTP_SYS_OFFSET_EXTENDED2, unsafe.Pointer(&value))
+ return &value, err
+}
+
+// IoctlPtpPinGetfunc returns the configuration of the specified
+// I/O pin on given PTP device.
+func IoctlPtpPinGetfunc(fd int, index uint) (*PtpPinDesc, error) {
+ value := PtpPinDesc{Index: uint32(index)}
+ err := ioctlPtr(fd, PTP_PIN_GETFUNC2, unsafe.Pointer(&value))
+ return &value, err
+}
+
+// IoctlPtpPinSetfunc updates configuration of the specified PTP
+// I/O pin.
+func IoctlPtpPinSetfunc(fd int, pd *PtpPinDesc) error {
+ return ioctlPtr(fd, PTP_PIN_SETFUNC2, unsafe.Pointer(pd))
+}
+
+// IoctlPtpPeroutRequest configures the periodic output mode of the
+// PTP I/O pins.
+func IoctlPtpPeroutRequest(fd int, r *PtpPeroutRequest) error {
+ return ioctlPtr(fd, PTP_PEROUT_REQUEST2, unsafe.Pointer(r))
+}
+
+// IoctlPtpExttsRequest configures the external timestamping mode
+// of the PTP I/O pins.
+func IoctlPtpExttsRequest(fd int, r *PtpExttsRequest) error {
+ return ioctlPtr(fd, PTP_EXTTS_REQUEST2, unsafe.Pointer(r))
+}
+
// IoctlGetWatchdogInfo fetches information about a watchdog device from the
// Linux watchdog API. For more information, see:
// https://www.kernel.org/doc/html/latest/watchdog/watchdog-api.html.
diff --git a/vendor/golang.org/x/sys/unix/mkerrors.sh b/vendor/golang.org/x/sys/unix/mkerrors.sh
index ac54ecaba0a..6ab02b6c312 100644
--- a/vendor/golang.org/x/sys/unix/mkerrors.sh
+++ b/vendor/golang.org/x/sys/unix/mkerrors.sh
@@ -158,6 +158,16 @@ includes_Linux='
#endif
#define _GNU_SOURCE
+// See the description in unix/linux/types.go
+#if defined(__ARM_EABI__) || \
+ (defined(__mips__) && (_MIPS_SIM == _ABIO32)) || \
+ (defined(__powerpc__) && (!defined(__powerpc64__)))
+# ifdef _TIME_BITS
+# undef _TIME_BITS
+# endif
+# define _TIME_BITS 32
+#endif
+
// is broken on powerpc64, as it fails to include definitions of
// these structures. We just include them copied from .
#if defined(__powerpc__)
@@ -256,6 +266,7 @@ struct ltchars {
#include
#include
#include
+#include
#include
#include
#include
@@ -527,6 +538,7 @@ ccflags="$@"
$2 ~ /^(AF|SOCK|SO|SOL|IPPROTO|IP|IPV6|TCP|MCAST|EVFILT|NOTE|SHUT|PROT|MAP|MREMAP|MFD|T?PACKET|MSG|SCM|MCL|DT|MADV|PR|LOCAL|TCPOPT|UDP)_/ ||
$2 ~ /^NFC_(GENL|PROTO|COMM|RF|SE|DIRECTION|LLCP|SOCKPROTO)_/ ||
$2 ~ /^NFC_.*_(MAX)?SIZE$/ ||
+ $2 ~ /^PTP_/ ||
$2 ~ /^RAW_PAYLOAD_/ ||
$2 ~ /^[US]F_/ ||
$2 ~ /^TP_STATUS_/ ||
diff --git a/vendor/golang.org/x/sys/unix/syscall_dragonfly.go b/vendor/golang.org/x/sys/unix/syscall_dragonfly.go
index 97cb916f2c9..be8c0020701 100644
--- a/vendor/golang.org/x/sys/unix/syscall_dragonfly.go
+++ b/vendor/golang.org/x/sys/unix/syscall_dragonfly.go
@@ -246,6 +246,18 @@ func Sendfile(outfd int, infd int, offset *int64, count int) (written int, err e
return sendfile(outfd, infd, offset, count)
}
+func Dup3(oldfd, newfd, flags int) error {
+ if oldfd == newfd || flags&^O_CLOEXEC != 0 {
+ return EINVAL
+ }
+ how := F_DUP2FD
+ if flags&O_CLOEXEC != 0 {
+ how = F_DUP2FD_CLOEXEC
+ }
+ _, err := fcntl(oldfd, how, newfd)
+ return err
+}
+
/*
* Exposed directly
*/
diff --git a/vendor/golang.org/x/sys/unix/syscall_linux.go b/vendor/golang.org/x/sys/unix/syscall_linux.go
index f08abd434ff..230a94549a7 100644
--- a/vendor/golang.org/x/sys/unix/syscall_linux.go
+++ b/vendor/golang.org/x/sys/unix/syscall_linux.go
@@ -1860,6 +1860,7 @@ func Sendfile(outfd int, infd int, offset *int64, count int) (written int, err e
//sys ClockAdjtime(clockid int32, buf *Timex) (state int, err error)
//sys ClockGetres(clockid int32, res *Timespec) (err error)
//sys ClockGettime(clockid int32, time *Timespec) (err error)
+//sys ClockSettime(clockid int32, time *Timespec) (err error)
//sys ClockNanosleep(clockid int32, flags int, request *Timespec, remain *Timespec) (err error)
//sys Close(fd int) (err error)
//sys CloseRange(first uint, last uint, flags uint) (err error)
diff --git a/vendor/golang.org/x/sys/unix/syscall_solaris.go b/vendor/golang.org/x/sys/unix/syscall_solaris.go
index 21974af064d..abc3955477c 100644
--- a/vendor/golang.org/x/sys/unix/syscall_solaris.go
+++ b/vendor/golang.org/x/sys/unix/syscall_solaris.go
@@ -1102,3 +1102,90 @@ func (s *Strioctl) SetInt(i int) {
func IoctlSetStrioctlRetInt(fd int, req int, s *Strioctl) (int, error) {
return ioctlPtrRet(fd, req, unsafe.Pointer(s))
}
+
+// Ucred Helpers
+// See ucred(3c) and getpeerucred(3c)
+
+//sys getpeerucred(fd uintptr, ucred *uintptr) (err error)
+//sys ucredFree(ucred uintptr) = ucred_free
+//sys ucredGet(pid int) (ucred uintptr, err error) = ucred_get
+//sys ucredGeteuid(ucred uintptr) (uid int) = ucred_geteuid
+//sys ucredGetegid(ucred uintptr) (gid int) = ucred_getegid
+//sys ucredGetruid(ucred uintptr) (uid int) = ucred_getruid
+//sys ucredGetrgid(ucred uintptr) (gid int) = ucred_getrgid
+//sys ucredGetsuid(ucred uintptr) (uid int) = ucred_getsuid
+//sys ucredGetsgid(ucred uintptr) (gid int) = ucred_getsgid
+//sys ucredGetpid(ucred uintptr) (pid int) = ucred_getpid
+
+// Ucred is an opaque struct that holds user credentials.
+type Ucred struct {
+ ucred uintptr
+}
+
+// We need to ensure that ucredFree is called on the underlying ucred
+// when the Ucred is garbage collected.
+func ucredFinalizer(u *Ucred) {
+ ucredFree(u.ucred)
+}
+
+func GetPeerUcred(fd uintptr) (*Ucred, error) {
+ var ucred uintptr
+ err := getpeerucred(fd, &ucred)
+ if err != nil {
+ return nil, err
+ }
+ result := &Ucred{
+ ucred: ucred,
+ }
+ // set the finalizer on the result so that the ucred will be freed
+ runtime.SetFinalizer(result, ucredFinalizer)
+ return result, nil
+}
+
+func UcredGet(pid int) (*Ucred, error) {
+ ucred, err := ucredGet(pid)
+ if err != nil {
+ return nil, err
+ }
+ result := &Ucred{
+ ucred: ucred,
+ }
+ // set the finalizer on the result so that the ucred will be freed
+ runtime.SetFinalizer(result, ucredFinalizer)
+ return result, nil
+}
+
+func (u *Ucred) Geteuid() int {
+ defer runtime.KeepAlive(u)
+ return ucredGeteuid(u.ucred)
+}
+
+func (u *Ucred) Getruid() int {
+ defer runtime.KeepAlive(u)
+ return ucredGetruid(u.ucred)
+}
+
+func (u *Ucred) Getsuid() int {
+ defer runtime.KeepAlive(u)
+ return ucredGetsuid(u.ucred)
+}
+
+func (u *Ucred) Getegid() int {
+ defer runtime.KeepAlive(u)
+ return ucredGetegid(u.ucred)
+}
+
+func (u *Ucred) Getrgid() int {
+ defer runtime.KeepAlive(u)
+ return ucredGetrgid(u.ucred)
+}
+
+func (u *Ucred) Getsgid() int {
+ defer runtime.KeepAlive(u)
+ return ucredGetsgid(u.ucred)
+}
+
+func (u *Ucred) Getpid() int {
+ defer runtime.KeepAlive(u)
+ return ucredGetpid(u.ucred)
+}
diff --git a/vendor/golang.org/x/sys/unix/syscall_zos_s390x.go b/vendor/golang.org/x/sys/unix/syscall_zos_s390x.go
index 312ae6ac1d2..7bf5c04bb0a 100644
--- a/vendor/golang.org/x/sys/unix/syscall_zos_s390x.go
+++ b/vendor/golang.org/x/sys/unix/syscall_zos_s390x.go
@@ -768,6 +768,15 @@ func Munmap(b []byte) (err error) {
return mapper.Munmap(b)
}
+func MmapPtr(fd int, offset int64, addr unsafe.Pointer, length uintptr, prot int, flags int) (ret unsafe.Pointer, err error) {
+ xaddr, err := mapper.mmap(uintptr(addr), length, prot, flags, fd, offset)
+ return unsafe.Pointer(xaddr), err
+}
+
+func MunmapPtr(addr unsafe.Pointer, length uintptr) (err error) {
+ return mapper.munmap(uintptr(addr), length)
+}
+
//sys Gethostname(buf []byte) (err error) = SYS___GETHOSTNAME_A
//sysnb Getgid() (gid int)
//sysnb Getpid() (pid int)
@@ -816,10 +825,10 @@ func Lstat(path string, stat *Stat_t) (err error) {
// for checking symlinks begins with $VERSION/ $SYSNAME/ $SYSSYMR/ $SYSSYMA/
func isSpecialPath(path []byte) (v bool) {
var special = [4][8]byte{
- [8]byte{'V', 'E', 'R', 'S', 'I', 'O', 'N', '/'},
- [8]byte{'S', 'Y', 'S', 'N', 'A', 'M', 'E', '/'},
- [8]byte{'S', 'Y', 'S', 'S', 'Y', 'M', 'R', '/'},
- [8]byte{'S', 'Y', 'S', 'S', 'Y', 'M', 'A', '/'}}
+ {'V', 'E', 'R', 'S', 'I', 'O', 'N', '/'},
+ {'S', 'Y', 'S', 'N', 'A', 'M', 'E', '/'},
+ {'S', 'Y', 'S', 'S', 'Y', 'M', 'R', '/'},
+ {'S', 'Y', 'S', 'S', 'Y', 'M', 'A', '/'}}
var i, j int
for i = 0; i < len(special); i++ {
@@ -3115,3 +3124,90 @@ func legacy_Mkfifoat(dirfd int, path string, mode uint32) (err error) {
//sys Posix_openpt(oflag int) (fd int, err error) = SYS_POSIX_OPENPT
//sys Grantpt(fildes int) (rc int, err error) = SYS_GRANTPT
//sys Unlockpt(fildes int) (rc int, err error) = SYS_UNLOCKPT
+
+func fcntlAsIs(fd uintptr, cmd int, arg uintptr) (val int, err error) {
+ runtime.EnterSyscall()
+ r0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS_FCNTL<<4, uintptr(fd), uintptr(cmd), arg)
+ runtime.ExitSyscall()
+ val = int(r0)
+ if int64(r0) == -1 {
+ err = errnoErr2(e1, e2)
+ }
+ return
+}
+
+func Fcntl(fd uintptr, cmd int, op interface{}) (ret int, err error) {
+ switch op.(type) {
+ case *Flock_t:
+ err = FcntlFlock(fd, cmd, op.(*Flock_t))
+ if err != nil {
+ ret = -1
+ }
+ return
+ case int:
+ return FcntlInt(fd, cmd, op.(int))
+ case *F_cnvrt:
+ return fcntlAsIs(fd, cmd, uintptr(unsafe.Pointer(op.(*F_cnvrt))))
+ case unsafe.Pointer:
+ return fcntlAsIs(fd, cmd, uintptr(op.(unsafe.Pointer)))
+ default:
+ return -1, EINVAL
+ }
+ return
+}
+
+func Sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) {
+ if raceenabled {
+ raceReleaseMerge(unsafe.Pointer(&ioSync))
+ }
+ return sendfile(outfd, infd, offset, count)
+}
+
+func sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) {
+ // TODO: use LE call instead if the call is implemented
+ originalOffset, err := Seek(infd, 0, SEEK_CUR)
+ if err != nil {
+ return -1, err
+ }
+ //start reading data from in_fd
+ if offset != nil {
+ _, err := Seek(infd, *offset, SEEK_SET)
+ if err != nil {
+ return -1, err
+ }
+ }
+
+ buf := make([]byte, count)
+ readBuf := make([]byte, 0)
+ var n int = 0
+ for i := 0; i < count; i += n {
+ n, err := Read(infd, buf)
+ if n == 0 {
+ if err != nil {
+ return -1, err
+ } else { // EOF
+ break
+ }
+ }
+ readBuf = append(readBuf, buf...)
+ buf = buf[0:0]
+ }
+
+ n2, err := Write(outfd, readBuf)
+ if err != nil {
+ return -1, err
+ }
+
+ //When sendfile() returns, this variable will be set to the
+ // offset of the byte following the last byte that was read.
+ if offset != nil {
+ *offset = *offset + int64(n)
+ // If offset is not NULL, then sendfile() does not modify the file
+ // offset of in_fd
+ _, err := Seek(infd, originalOffset, SEEK_SET)
+ if err != nil {
+ return -1, err
+ }
+ }
+ return n2, nil
+}
diff --git a/vendor/golang.org/x/sys/unix/zerrors_linux.go b/vendor/golang.org/x/sys/unix/zerrors_linux.go
index de3b462489c..4f432bfe8fe 100644
--- a/vendor/golang.org/x/sys/unix/zerrors_linux.go
+++ b/vendor/golang.org/x/sys/unix/zerrors_linux.go
@@ -321,6 +321,9 @@ const (
AUDIT_INTEGRITY_STATUS = 0x70a
AUDIT_IPC = 0x517
AUDIT_IPC_SET_PERM = 0x51f
+ AUDIT_IPE_ACCESS = 0x58c
+ AUDIT_IPE_CONFIG_CHANGE = 0x58d
+ AUDIT_IPE_POLICY_LOAD = 0x58e
AUDIT_KERNEL = 0x7d0
AUDIT_KERNEL_OTHER = 0x524
AUDIT_KERN_MODULE = 0x532
@@ -489,6 +492,7 @@ const (
BPF_F_ID = 0x20
BPF_F_NETFILTER_IP_DEFRAG = 0x1
BPF_F_QUERY_EFFECTIVE = 0x1
+ BPF_F_REDIRECT_FLAGS = 0x19
BPF_F_REPLACE = 0x4
BPF_F_SLEEPABLE = 0x10
BPF_F_STRICT_ALIGNMENT = 0x1
@@ -1166,6 +1170,7 @@ const (
EXTA = 0xe
EXTB = 0xf
F2FS_SUPER_MAGIC = 0xf2f52010
+ FALLOC_FL_ALLOCATE_RANGE = 0x0
FALLOC_FL_COLLAPSE_RANGE = 0x8
FALLOC_FL_INSERT_RANGE = 0x20
FALLOC_FL_KEEP_SIZE = 0x1
@@ -1240,6 +1245,7 @@ const (
FAN_REPORT_DFID_NAME = 0xc00
FAN_REPORT_DFID_NAME_TARGET = 0x1e00
FAN_REPORT_DIR_FID = 0x400
+ FAN_REPORT_FD_ERROR = 0x2000
FAN_REPORT_FID = 0x200
FAN_REPORT_NAME = 0x800
FAN_REPORT_PIDFD = 0x80
@@ -1325,8 +1331,10 @@ const (
FUSE_SUPER_MAGIC = 0x65735546
FUTEXFS_SUPER_MAGIC = 0xbad1dea
F_ADD_SEALS = 0x409
+ F_CREATED_QUERY = 0x404
F_DUPFD = 0x0
F_DUPFD_CLOEXEC = 0x406
+ F_DUPFD_QUERY = 0x403
F_EXLCK = 0x4
F_GETFD = 0x1
F_GETFL = 0x3
@@ -1546,6 +1554,7 @@ const (
IPPROTO_ROUTING = 0x2b
IPPROTO_RSVP = 0x2e
IPPROTO_SCTP = 0x84
+ IPPROTO_SMC = 0x100
IPPROTO_TCP = 0x6
IPPROTO_TP = 0x1d
IPPROTO_UDP = 0x11
@@ -1618,6 +1627,8 @@ const (
IPV6_UNICAST_IF = 0x4c
IPV6_USER_FLOW = 0xe
IPV6_V6ONLY = 0x1a
+ IPV6_VERSION = 0x60
+ IPV6_VERSION_MASK = 0xf0
IPV6_XFRM_POLICY = 0x23
IP_ADD_MEMBERSHIP = 0x23
IP_ADD_SOURCE_MEMBERSHIP = 0x27
@@ -1799,6 +1810,8 @@ const (
LANDLOCK_ACCESS_NET_BIND_TCP = 0x1
LANDLOCK_ACCESS_NET_CONNECT_TCP = 0x2
LANDLOCK_CREATE_RULESET_VERSION = 0x1
+ LANDLOCK_SCOPE_ABSTRACT_UNIX_SOCKET = 0x1
+ LANDLOCK_SCOPE_SIGNAL = 0x2
LINUX_REBOOT_CMD_CAD_OFF = 0x0
LINUX_REBOOT_CMD_CAD_ON = 0x89abcdef
LINUX_REBOOT_CMD_HALT = 0xcdef0123
@@ -1860,6 +1873,7 @@ const (
MADV_UNMERGEABLE = 0xd
MADV_WILLNEED = 0x3
MADV_WIPEONFORK = 0x12
+ MAP_DROPPABLE = 0x8
MAP_FILE = 0x0
MAP_FIXED = 0x10
MAP_FIXED_NOREPLACE = 0x100000
@@ -1924,6 +1938,7 @@ const (
MNT_FORCE = 0x1
MNT_ID_REQ_SIZE_VER0 = 0x18
MNT_ID_REQ_SIZE_VER1 = 0x20
+ MNT_NS_INFO_SIZE_VER0 = 0x10
MODULE_INIT_COMPRESSED_FILE = 0x4
MODULE_INIT_IGNORE_MODVERSIONS = 0x1
MODULE_INIT_IGNORE_VERMAGIC = 0x2
@@ -1959,6 +1974,7 @@ const (
MSG_PEEK = 0x2
MSG_PROXY = 0x10
MSG_RST = 0x1000
+ MSG_SOCK_DEVMEM = 0x2000000
MSG_SYN = 0x400
MSG_TRUNC = 0x20
MSG_TRYHARD = 0x4
@@ -2075,6 +2091,7 @@ const (
NFC_ATR_REQ_MAXSIZE = 0x40
NFC_ATR_RES_GB_MAXSIZE = 0x2f
NFC_ATR_RES_MAXSIZE = 0x40
+ NFC_ATS_MAXSIZE = 0x14
NFC_COMM_ACTIVE = 0x0
NFC_COMM_PASSIVE = 0x1
NFC_DEVICE_NAME_MAXSIZE = 0x8
@@ -2155,6 +2172,7 @@ const (
NFNL_SUBSYS_QUEUE = 0x3
NFNL_SUBSYS_ULOG = 0x4
NFS_SUPER_MAGIC = 0x6969
+ NFT_BITWISE_BOOL = 0x0
NFT_CHAIN_FLAGS = 0x7
NFT_CHAIN_MAXNAMELEN = 0x100
NFT_CT_MAX = 0x17
@@ -2483,6 +2501,7 @@ const (
PR_GET_PDEATHSIG = 0x2
PR_GET_SECCOMP = 0x15
PR_GET_SECUREBITS = 0x1b
+ PR_GET_SHADOW_STACK_STATUS = 0x4a
PR_GET_SPECULATION_CTRL = 0x34
PR_GET_TAGGED_ADDR_CTRL = 0x38
PR_GET_THP_DISABLE = 0x2a
@@ -2491,6 +2510,7 @@ const (
PR_GET_TIMING = 0xd
PR_GET_TSC = 0x19
PR_GET_UNALIGN = 0x5
+ PR_LOCK_SHADOW_STACK_STATUS = 0x4c
PR_MCE_KILL = 0x21
PR_MCE_KILL_CLEAR = 0x0
PR_MCE_KILL_DEFAULT = 0x2
@@ -2517,6 +2537,8 @@ const (
PR_PAC_GET_ENABLED_KEYS = 0x3d
PR_PAC_RESET_KEYS = 0x36
PR_PAC_SET_ENABLED_KEYS = 0x3c
+ PR_PMLEN_MASK = 0x7f000000
+ PR_PMLEN_SHIFT = 0x18
PR_PPC_DEXCR_CTRL_CLEAR = 0x4
PR_PPC_DEXCR_CTRL_CLEAR_ONEXEC = 0x10
PR_PPC_DEXCR_CTRL_EDITABLE = 0x1
@@ -2584,6 +2606,7 @@ const (
PR_SET_PTRACER = 0x59616d61
PR_SET_SECCOMP = 0x16
PR_SET_SECUREBITS = 0x1c
+ PR_SET_SHADOW_STACK_STATUS = 0x4b
PR_SET_SPECULATION_CTRL = 0x35
PR_SET_SYSCALL_USER_DISPATCH = 0x3b
PR_SET_TAGGED_ADDR_CTRL = 0x37
@@ -2594,6 +2617,9 @@ const (
PR_SET_UNALIGN = 0x6
PR_SET_VMA = 0x53564d41
PR_SET_VMA_ANON_NAME = 0x0
+ PR_SHADOW_STACK_ENABLE = 0x1
+ PR_SHADOW_STACK_PUSH = 0x4
+ PR_SHADOW_STACK_WRITE = 0x2
PR_SME_GET_VL = 0x40
PR_SME_SET_VL = 0x3f
PR_SME_SET_VL_ONEXEC = 0x40000
@@ -2625,6 +2651,28 @@ const (
PR_UNALIGN_NOPRINT = 0x1
PR_UNALIGN_SIGBUS = 0x2
PSTOREFS_MAGIC = 0x6165676c
+ PTP_CLK_MAGIC = '='
+ PTP_ENABLE_FEATURE = 0x1
+ PTP_EXTTS_EDGES = 0x6
+ PTP_EXTTS_EVENT_VALID = 0x1
+ PTP_EXTTS_V1_VALID_FLAGS = 0x7
+ PTP_EXTTS_VALID_FLAGS = 0x1f
+ PTP_EXT_OFFSET = 0x10
+ PTP_FALLING_EDGE = 0x4
+ PTP_MAX_SAMPLES = 0x19
+ PTP_PEROUT_DUTY_CYCLE = 0x2
+ PTP_PEROUT_ONE_SHOT = 0x1
+ PTP_PEROUT_PHASE = 0x4
+ PTP_PEROUT_V1_VALID_FLAGS = 0x0
+ PTP_PEROUT_VALID_FLAGS = 0x7
+ PTP_PIN_GETFUNC = 0xc0603d06
+ PTP_PIN_GETFUNC2 = 0xc0603d0f
+ PTP_RISING_EDGE = 0x2
+ PTP_STRICT_FLAGS = 0x8
+ PTP_SYS_OFFSET_EXTENDED = 0xc4c03d09
+ PTP_SYS_OFFSET_EXTENDED2 = 0xc4c03d12
+ PTP_SYS_OFFSET_PRECISE = 0xc0403d08
+ PTP_SYS_OFFSET_PRECISE2 = 0xc0403d11
PTRACE_ATTACH = 0x10
PTRACE_CONT = 0x7
PTRACE_DETACH = 0x11
@@ -2881,7 +2929,6 @@ const (
RTM_NEWNEXTHOP = 0x68
RTM_NEWNEXTHOPBUCKET = 0x74
RTM_NEWNSID = 0x58
- RTM_NEWNVLAN = 0x70
RTM_NEWPREFIX = 0x34
RTM_NEWQDISC = 0x24
RTM_NEWROUTE = 0x18
@@ -2890,6 +2937,7 @@ const (
RTM_NEWTCLASS = 0x28
RTM_NEWTFILTER = 0x2c
RTM_NEWTUNNEL = 0x78
+ RTM_NEWVLAN = 0x70
RTM_NR_FAMILIES = 0x1b
RTM_NR_MSGTYPES = 0x6c
RTM_SETDCB = 0x4f
@@ -2948,6 +2996,7 @@ const (
RWF_WRITE_LIFE_NOT_SET = 0x0
SCHED_BATCH = 0x3
SCHED_DEADLINE = 0x6
+ SCHED_EXT = 0x7
SCHED_FIFO = 0x1
SCHED_FLAG_ALL = 0x7f
SCHED_FLAG_DL_OVERRUN = 0x4
diff --git a/vendor/golang.org/x/sys/unix/zerrors_linux_386.go b/vendor/golang.org/x/sys/unix/zerrors_linux_386.go
index 8aa6d77c018..75207613c78 100644
--- a/vendor/golang.org/x/sys/unix/zerrors_linux_386.go
+++ b/vendor/golang.org/x/sys/unix/zerrors_linux_386.go
@@ -109,12 +109,15 @@ const (
HIDIOCGRAWINFO = 0x80084803
HIDIOCGRDESC = 0x90044802
HIDIOCGRDESCSIZE = 0x80044801
+ HIDIOCREVOKE = 0x4004480d
HUPCL = 0x400
ICANON = 0x2
IEXTEN = 0x8000
IN_CLOEXEC = 0x80000
IN_NONBLOCK = 0x800
IOCTL_VM_SOCKETS_GET_LOCAL_CID = 0x7b9
+ IPV6_FLOWINFO_MASK = 0xffffff0f
+ IPV6_FLOWLABEL_MASK = 0xffff0f00
ISIG = 0x1
IUCLC = 0x200
IXOFF = 0x1000
@@ -237,6 +240,20 @@ const (
PPPIOCUNBRIDGECHAN = 0x7434
PPPIOCXFERUNIT = 0x744e
PR_SET_PTRACER_ANY = 0xffffffff
+ PTP_CLOCK_GETCAPS = 0x80503d01
+ PTP_CLOCK_GETCAPS2 = 0x80503d0a
+ PTP_ENABLE_PPS = 0x40043d04
+ PTP_ENABLE_PPS2 = 0x40043d0d
+ PTP_EXTTS_REQUEST = 0x40103d02
+ PTP_EXTTS_REQUEST2 = 0x40103d0b
+ PTP_MASK_CLEAR_ALL = 0x3d13
+ PTP_MASK_EN_SINGLE = 0x40043d14
+ PTP_PEROUT_REQUEST = 0x40383d03
+ PTP_PEROUT_REQUEST2 = 0x40383d0c
+ PTP_PIN_SETFUNC = 0x40603d07
+ PTP_PIN_SETFUNC2 = 0x40603d10
+ PTP_SYS_OFFSET = 0x43403d05
+ PTP_SYS_OFFSET2 = 0x43403d0e
PTRACE_GETFPREGS = 0xe
PTRACE_GETFPXREGS = 0x12
PTRACE_GET_THREAD_AREA = 0x19
@@ -283,10 +300,13 @@ const (
RTC_WIE_ON = 0x700f
RTC_WKALM_RD = 0x80287010
RTC_WKALM_SET = 0x4028700f
+ SCM_DEVMEM_DMABUF = 0x4f
+ SCM_DEVMEM_LINEAR = 0x4e
SCM_TIMESTAMPING = 0x25
SCM_TIMESTAMPING_OPT_STATS = 0x36
SCM_TIMESTAMPING_PKTINFO = 0x3a
SCM_TIMESTAMPNS = 0x23
+ SCM_TS_OPT_ID = 0x51
SCM_TXTIME = 0x3d
SCM_WIFI_STATUS = 0x29
SECCOMP_IOCTL_NOTIF_ADDFD = 0x40182103
@@ -321,6 +341,9 @@ const (
SO_CNX_ADVICE = 0x35
SO_COOKIE = 0x39
SO_DETACH_REUSEPORT_BPF = 0x44
+ SO_DEVMEM_DMABUF = 0x4f
+ SO_DEVMEM_DONTNEED = 0x50
+ SO_DEVMEM_LINEAR = 0x4e
SO_DOMAIN = 0x27
SO_DONTROUTE = 0x5
SO_ERROR = 0x4
diff --git a/vendor/golang.org/x/sys/unix/zerrors_linux_amd64.go b/vendor/golang.org/x/sys/unix/zerrors_linux_amd64.go
index da428f42533..c68acda5352 100644
--- a/vendor/golang.org/x/sys/unix/zerrors_linux_amd64.go
+++ b/vendor/golang.org/x/sys/unix/zerrors_linux_amd64.go
@@ -109,12 +109,15 @@ const (
HIDIOCGRAWINFO = 0x80084803
HIDIOCGRDESC = 0x90044802
HIDIOCGRDESCSIZE = 0x80044801
+ HIDIOCREVOKE = 0x4004480d
HUPCL = 0x400
ICANON = 0x2
IEXTEN = 0x8000
IN_CLOEXEC = 0x80000
IN_NONBLOCK = 0x800
IOCTL_VM_SOCKETS_GET_LOCAL_CID = 0x7b9
+ IPV6_FLOWINFO_MASK = 0xffffff0f
+ IPV6_FLOWLABEL_MASK = 0xffff0f00
ISIG = 0x1
IUCLC = 0x200
IXOFF = 0x1000
@@ -237,6 +240,20 @@ const (
PPPIOCUNBRIDGECHAN = 0x7434
PPPIOCXFERUNIT = 0x744e
PR_SET_PTRACER_ANY = 0xffffffffffffffff
+ PTP_CLOCK_GETCAPS = 0x80503d01
+ PTP_CLOCK_GETCAPS2 = 0x80503d0a
+ PTP_ENABLE_PPS = 0x40043d04
+ PTP_ENABLE_PPS2 = 0x40043d0d
+ PTP_EXTTS_REQUEST = 0x40103d02
+ PTP_EXTTS_REQUEST2 = 0x40103d0b
+ PTP_MASK_CLEAR_ALL = 0x3d13
+ PTP_MASK_EN_SINGLE = 0x40043d14
+ PTP_PEROUT_REQUEST = 0x40383d03
+ PTP_PEROUT_REQUEST2 = 0x40383d0c
+ PTP_PIN_SETFUNC = 0x40603d07
+ PTP_PIN_SETFUNC2 = 0x40603d10
+ PTP_SYS_OFFSET = 0x43403d05
+ PTP_SYS_OFFSET2 = 0x43403d0e
PTRACE_ARCH_PRCTL = 0x1e
PTRACE_GETFPREGS = 0xe
PTRACE_GETFPXREGS = 0x12
@@ -284,10 +301,13 @@ const (
RTC_WIE_ON = 0x700f
RTC_WKALM_RD = 0x80287010
RTC_WKALM_SET = 0x4028700f
+ SCM_DEVMEM_DMABUF = 0x4f
+ SCM_DEVMEM_LINEAR = 0x4e
SCM_TIMESTAMPING = 0x25
SCM_TIMESTAMPING_OPT_STATS = 0x36
SCM_TIMESTAMPING_PKTINFO = 0x3a
SCM_TIMESTAMPNS = 0x23
+ SCM_TS_OPT_ID = 0x51
SCM_TXTIME = 0x3d
SCM_WIFI_STATUS = 0x29
SECCOMP_IOCTL_NOTIF_ADDFD = 0x40182103
@@ -322,6 +342,9 @@ const (
SO_CNX_ADVICE = 0x35
SO_COOKIE = 0x39
SO_DETACH_REUSEPORT_BPF = 0x44
+ SO_DEVMEM_DMABUF = 0x4f
+ SO_DEVMEM_DONTNEED = 0x50
+ SO_DEVMEM_LINEAR = 0x4e
SO_DOMAIN = 0x27
SO_DONTROUTE = 0x5
SO_ERROR = 0x4
diff --git a/vendor/golang.org/x/sys/unix/zerrors_linux_arm.go b/vendor/golang.org/x/sys/unix/zerrors_linux_arm.go
index bf45bfec78a..a8c607ab86b 100644
--- a/vendor/golang.org/x/sys/unix/zerrors_linux_arm.go
+++ b/vendor/golang.org/x/sys/unix/zerrors_linux_arm.go
@@ -108,12 +108,15 @@ const (
HIDIOCGRAWINFO = 0x80084803
HIDIOCGRDESC = 0x90044802
HIDIOCGRDESCSIZE = 0x80044801
+ HIDIOCREVOKE = 0x4004480d
HUPCL = 0x400
ICANON = 0x2
IEXTEN = 0x8000
IN_CLOEXEC = 0x80000
IN_NONBLOCK = 0x800
IOCTL_VM_SOCKETS_GET_LOCAL_CID = 0x7b9
+ IPV6_FLOWINFO_MASK = 0xffffff0f
+ IPV6_FLOWLABEL_MASK = 0xffff0f00
ISIG = 0x1
IUCLC = 0x200
IXOFF = 0x1000
@@ -234,6 +237,20 @@ const (
PPPIOCUNBRIDGECHAN = 0x7434
PPPIOCXFERUNIT = 0x744e
PR_SET_PTRACER_ANY = 0xffffffff
+ PTP_CLOCK_GETCAPS = 0x80503d01
+ PTP_CLOCK_GETCAPS2 = 0x80503d0a
+ PTP_ENABLE_PPS = 0x40043d04
+ PTP_ENABLE_PPS2 = 0x40043d0d
+ PTP_EXTTS_REQUEST = 0x40103d02
+ PTP_EXTTS_REQUEST2 = 0x40103d0b
+ PTP_MASK_CLEAR_ALL = 0x3d13
+ PTP_MASK_EN_SINGLE = 0x40043d14
+ PTP_PEROUT_REQUEST = 0x40383d03
+ PTP_PEROUT_REQUEST2 = 0x40383d0c
+ PTP_PIN_SETFUNC = 0x40603d07
+ PTP_PIN_SETFUNC2 = 0x40603d10
+ PTP_SYS_OFFSET = 0x43403d05
+ PTP_SYS_OFFSET2 = 0x43403d0e
PTRACE_GETCRUNCHREGS = 0x19
PTRACE_GETFDPIC = 0x1f
PTRACE_GETFDPIC_EXEC = 0x0
@@ -289,10 +306,13 @@ const (
RTC_WIE_ON = 0x700f
RTC_WKALM_RD = 0x80287010
RTC_WKALM_SET = 0x4028700f
+ SCM_DEVMEM_DMABUF = 0x4f
+ SCM_DEVMEM_LINEAR = 0x4e
SCM_TIMESTAMPING = 0x25
SCM_TIMESTAMPING_OPT_STATS = 0x36
SCM_TIMESTAMPING_PKTINFO = 0x3a
SCM_TIMESTAMPNS = 0x23
+ SCM_TS_OPT_ID = 0x51
SCM_TXTIME = 0x3d
SCM_WIFI_STATUS = 0x29
SECCOMP_IOCTL_NOTIF_ADDFD = 0x40182103
@@ -327,6 +347,9 @@ const (
SO_CNX_ADVICE = 0x35
SO_COOKIE = 0x39
SO_DETACH_REUSEPORT_BPF = 0x44
+ SO_DEVMEM_DMABUF = 0x4f
+ SO_DEVMEM_DONTNEED = 0x50
+ SO_DEVMEM_LINEAR = 0x4e
SO_DOMAIN = 0x27
SO_DONTROUTE = 0x5
SO_ERROR = 0x4
diff --git a/vendor/golang.org/x/sys/unix/zerrors_linux_arm64.go b/vendor/golang.org/x/sys/unix/zerrors_linux_arm64.go
index 71c67162b73..18563dd8d33 100644
--- a/vendor/golang.org/x/sys/unix/zerrors_linux_arm64.go
+++ b/vendor/golang.org/x/sys/unix/zerrors_linux_arm64.go
@@ -109,15 +109,19 @@ const (
F_SETOWN = 0x8
F_UNLCK = 0x2
F_WRLCK = 0x1
+ GCS_MAGIC = 0x47435300
HIDIOCGRAWINFO = 0x80084803
HIDIOCGRDESC = 0x90044802
HIDIOCGRDESCSIZE = 0x80044801
+ HIDIOCREVOKE = 0x4004480d
HUPCL = 0x400
ICANON = 0x2
IEXTEN = 0x8000
IN_CLOEXEC = 0x80000
IN_NONBLOCK = 0x800
IOCTL_VM_SOCKETS_GET_LOCAL_CID = 0x7b9
+ IPV6_FLOWINFO_MASK = 0xffffff0f
+ IPV6_FLOWLABEL_MASK = 0xffff0f00
ISIG = 0x1
IUCLC = 0x200
IXOFF = 0x1000
@@ -205,6 +209,7 @@ const (
PERF_EVENT_IOC_SET_BPF = 0x40042408
PERF_EVENT_IOC_SET_FILTER = 0x40082406
PERF_EVENT_IOC_SET_OUTPUT = 0x2405
+ POE_MAGIC = 0x504f4530
PPPIOCATTACH = 0x4004743d
PPPIOCATTCHAN = 0x40047438
PPPIOCBRIDGECHAN = 0x40047435
@@ -240,6 +245,20 @@ const (
PROT_BTI = 0x10
PROT_MTE = 0x20
PR_SET_PTRACER_ANY = 0xffffffffffffffff
+ PTP_CLOCK_GETCAPS = 0x80503d01
+ PTP_CLOCK_GETCAPS2 = 0x80503d0a
+ PTP_ENABLE_PPS = 0x40043d04
+ PTP_ENABLE_PPS2 = 0x40043d0d
+ PTP_EXTTS_REQUEST = 0x40103d02
+ PTP_EXTTS_REQUEST2 = 0x40103d0b
+ PTP_MASK_CLEAR_ALL = 0x3d13
+ PTP_MASK_EN_SINGLE = 0x40043d14
+ PTP_PEROUT_REQUEST = 0x40383d03
+ PTP_PEROUT_REQUEST2 = 0x40383d0c
+ PTP_PIN_SETFUNC = 0x40603d07
+ PTP_PIN_SETFUNC2 = 0x40603d10
+ PTP_SYS_OFFSET = 0x43403d05
+ PTP_SYS_OFFSET2 = 0x43403d0e
PTRACE_PEEKMTETAGS = 0x21
PTRACE_POKEMTETAGS = 0x22
PTRACE_SYSEMU = 0x1f
@@ -280,10 +299,13 @@ const (
RTC_WIE_ON = 0x700f
RTC_WKALM_RD = 0x80287010
RTC_WKALM_SET = 0x4028700f
+ SCM_DEVMEM_DMABUF = 0x4f
+ SCM_DEVMEM_LINEAR = 0x4e
SCM_TIMESTAMPING = 0x25
SCM_TIMESTAMPING_OPT_STATS = 0x36
SCM_TIMESTAMPING_PKTINFO = 0x3a
SCM_TIMESTAMPNS = 0x23
+ SCM_TS_OPT_ID = 0x51
SCM_TXTIME = 0x3d
SCM_WIFI_STATUS = 0x29
SECCOMP_IOCTL_NOTIF_ADDFD = 0x40182103
@@ -318,6 +340,9 @@ const (
SO_CNX_ADVICE = 0x35
SO_COOKIE = 0x39
SO_DETACH_REUSEPORT_BPF = 0x44
+ SO_DEVMEM_DMABUF = 0x4f
+ SO_DEVMEM_DONTNEED = 0x50
+ SO_DEVMEM_LINEAR = 0x4e
SO_DOMAIN = 0x27
SO_DONTROUTE = 0x5
SO_ERROR = 0x4
diff --git a/vendor/golang.org/x/sys/unix/zerrors_linux_loong64.go b/vendor/golang.org/x/sys/unix/zerrors_linux_loong64.go
index 9476628fa02..22912cdaa94 100644
--- a/vendor/golang.org/x/sys/unix/zerrors_linux_loong64.go
+++ b/vendor/golang.org/x/sys/unix/zerrors_linux_loong64.go
@@ -109,12 +109,15 @@ const (
HIDIOCGRAWINFO = 0x80084803
HIDIOCGRDESC = 0x90044802
HIDIOCGRDESCSIZE = 0x80044801
+ HIDIOCREVOKE = 0x4004480d
HUPCL = 0x400
ICANON = 0x2
IEXTEN = 0x8000
IN_CLOEXEC = 0x80000
IN_NONBLOCK = 0x800
IOCTL_VM_SOCKETS_GET_LOCAL_CID = 0x7b9
+ IPV6_FLOWINFO_MASK = 0xffffff0f
+ IPV6_FLOWLABEL_MASK = 0xffff0f00
ISIG = 0x1
IUCLC = 0x200
IXOFF = 0x1000
@@ -238,6 +241,20 @@ const (
PPPIOCUNBRIDGECHAN = 0x7434
PPPIOCXFERUNIT = 0x744e
PR_SET_PTRACER_ANY = 0xffffffffffffffff
+ PTP_CLOCK_GETCAPS = 0x80503d01
+ PTP_CLOCK_GETCAPS2 = 0x80503d0a
+ PTP_ENABLE_PPS = 0x40043d04
+ PTP_ENABLE_PPS2 = 0x40043d0d
+ PTP_EXTTS_REQUEST = 0x40103d02
+ PTP_EXTTS_REQUEST2 = 0x40103d0b
+ PTP_MASK_CLEAR_ALL = 0x3d13
+ PTP_MASK_EN_SINGLE = 0x40043d14
+ PTP_PEROUT_REQUEST = 0x40383d03
+ PTP_PEROUT_REQUEST2 = 0x40383d0c
+ PTP_PIN_SETFUNC = 0x40603d07
+ PTP_PIN_SETFUNC2 = 0x40603d10
+ PTP_SYS_OFFSET = 0x43403d05
+ PTP_SYS_OFFSET2 = 0x43403d0e
PTRACE_SYSEMU = 0x1f
PTRACE_SYSEMU_SINGLESTEP = 0x20
RLIMIT_AS = 0x9
@@ -276,10 +293,13 @@ const (
RTC_WIE_ON = 0x700f
RTC_WKALM_RD = 0x80287010
RTC_WKALM_SET = 0x4028700f
+ SCM_DEVMEM_DMABUF = 0x4f
+ SCM_DEVMEM_LINEAR = 0x4e
SCM_TIMESTAMPING = 0x25
SCM_TIMESTAMPING_OPT_STATS = 0x36
SCM_TIMESTAMPING_PKTINFO = 0x3a
SCM_TIMESTAMPNS = 0x23
+ SCM_TS_OPT_ID = 0x51
SCM_TXTIME = 0x3d
SCM_WIFI_STATUS = 0x29
SECCOMP_IOCTL_NOTIF_ADDFD = 0x40182103
@@ -314,6 +334,9 @@ const (
SO_CNX_ADVICE = 0x35
SO_COOKIE = 0x39
SO_DETACH_REUSEPORT_BPF = 0x44
+ SO_DEVMEM_DMABUF = 0x4f
+ SO_DEVMEM_DONTNEED = 0x50
+ SO_DEVMEM_LINEAR = 0x4e
SO_DOMAIN = 0x27
SO_DONTROUTE = 0x5
SO_ERROR = 0x4
diff --git a/vendor/golang.org/x/sys/unix/zerrors_linux_mips.go b/vendor/golang.org/x/sys/unix/zerrors_linux_mips.go
index b9e85f3cf0c..29344eb37ab 100644
--- a/vendor/golang.org/x/sys/unix/zerrors_linux_mips.go
+++ b/vendor/golang.org/x/sys/unix/zerrors_linux_mips.go
@@ -108,12 +108,15 @@ const (
HIDIOCGRAWINFO = 0x40084803
HIDIOCGRDESC = 0x50044802
HIDIOCGRDESCSIZE = 0x40044801
+ HIDIOCREVOKE = 0x8004480d
HUPCL = 0x400
ICANON = 0x2
IEXTEN = 0x100
IN_CLOEXEC = 0x80000
IN_NONBLOCK = 0x80
IOCTL_VM_SOCKETS_GET_LOCAL_CID = 0x200007b9
+ IPV6_FLOWINFO_MASK = 0xfffffff
+ IPV6_FLOWLABEL_MASK = 0xfffff
ISIG = 0x1
IUCLC = 0x200
IXOFF = 0x1000
@@ -234,6 +237,20 @@ const (
PPPIOCUNBRIDGECHAN = 0x20007434
PPPIOCXFERUNIT = 0x2000744e
PR_SET_PTRACER_ANY = 0xffffffff
+ PTP_CLOCK_GETCAPS = 0x40503d01
+ PTP_CLOCK_GETCAPS2 = 0x40503d0a
+ PTP_ENABLE_PPS = 0x80043d04
+ PTP_ENABLE_PPS2 = 0x80043d0d
+ PTP_EXTTS_REQUEST = 0x80103d02
+ PTP_EXTTS_REQUEST2 = 0x80103d0b
+ PTP_MASK_CLEAR_ALL = 0x20003d13
+ PTP_MASK_EN_SINGLE = 0x80043d14
+ PTP_PEROUT_REQUEST = 0x80383d03
+ PTP_PEROUT_REQUEST2 = 0x80383d0c
+ PTP_PIN_SETFUNC = 0x80603d07
+ PTP_PIN_SETFUNC2 = 0x80603d10
+ PTP_SYS_OFFSET = 0x83403d05
+ PTP_SYS_OFFSET2 = 0x83403d0e
PTRACE_GETFPREGS = 0xe
PTRACE_GET_THREAD_AREA = 0x19
PTRACE_GET_THREAD_AREA_3264 = 0xc4
@@ -282,10 +299,13 @@ const (
RTC_WIE_ON = 0x2000700f
RTC_WKALM_RD = 0x40287010
RTC_WKALM_SET = 0x8028700f
+ SCM_DEVMEM_DMABUF = 0x4f
+ SCM_DEVMEM_LINEAR = 0x4e
SCM_TIMESTAMPING = 0x25
SCM_TIMESTAMPING_OPT_STATS = 0x36
SCM_TIMESTAMPING_PKTINFO = 0x3a
SCM_TIMESTAMPNS = 0x23
+ SCM_TS_OPT_ID = 0x51
SCM_TXTIME = 0x3d
SCM_WIFI_STATUS = 0x29
SECCOMP_IOCTL_NOTIF_ADDFD = 0x80182103
@@ -320,6 +340,9 @@ const (
SO_CNX_ADVICE = 0x35
SO_COOKIE = 0x39
SO_DETACH_REUSEPORT_BPF = 0x44
+ SO_DEVMEM_DMABUF = 0x4f
+ SO_DEVMEM_DONTNEED = 0x50
+ SO_DEVMEM_LINEAR = 0x4e
SO_DOMAIN = 0x1029
SO_DONTROUTE = 0x10
SO_ERROR = 0x1007
diff --git a/vendor/golang.org/x/sys/unix/zerrors_linux_mips64.go b/vendor/golang.org/x/sys/unix/zerrors_linux_mips64.go
index a48b68a7647..20d51fb96a8 100644
--- a/vendor/golang.org/x/sys/unix/zerrors_linux_mips64.go
+++ b/vendor/golang.org/x/sys/unix/zerrors_linux_mips64.go
@@ -108,12 +108,15 @@ const (
HIDIOCGRAWINFO = 0x40084803
HIDIOCGRDESC = 0x50044802
HIDIOCGRDESCSIZE = 0x40044801
+ HIDIOCREVOKE = 0x8004480d
HUPCL = 0x400
ICANON = 0x2
IEXTEN = 0x100
IN_CLOEXEC = 0x80000
IN_NONBLOCK = 0x80
IOCTL_VM_SOCKETS_GET_LOCAL_CID = 0x200007b9
+ IPV6_FLOWINFO_MASK = 0xfffffff
+ IPV6_FLOWLABEL_MASK = 0xfffff
ISIG = 0x1
IUCLC = 0x200
IXOFF = 0x1000
@@ -234,6 +237,20 @@ const (
PPPIOCUNBRIDGECHAN = 0x20007434
PPPIOCXFERUNIT = 0x2000744e
PR_SET_PTRACER_ANY = 0xffffffffffffffff
+ PTP_CLOCK_GETCAPS = 0x40503d01
+ PTP_CLOCK_GETCAPS2 = 0x40503d0a
+ PTP_ENABLE_PPS = 0x80043d04
+ PTP_ENABLE_PPS2 = 0x80043d0d
+ PTP_EXTTS_REQUEST = 0x80103d02
+ PTP_EXTTS_REQUEST2 = 0x80103d0b
+ PTP_MASK_CLEAR_ALL = 0x20003d13
+ PTP_MASK_EN_SINGLE = 0x80043d14
+ PTP_PEROUT_REQUEST = 0x80383d03
+ PTP_PEROUT_REQUEST2 = 0x80383d0c
+ PTP_PIN_SETFUNC = 0x80603d07
+ PTP_PIN_SETFUNC2 = 0x80603d10
+ PTP_SYS_OFFSET = 0x83403d05
+ PTP_SYS_OFFSET2 = 0x83403d0e
PTRACE_GETFPREGS = 0xe
PTRACE_GET_THREAD_AREA = 0x19
PTRACE_GET_THREAD_AREA_3264 = 0xc4
@@ -282,10 +299,13 @@ const (
RTC_WIE_ON = 0x2000700f
RTC_WKALM_RD = 0x40287010
RTC_WKALM_SET = 0x8028700f
+ SCM_DEVMEM_DMABUF = 0x4f
+ SCM_DEVMEM_LINEAR = 0x4e
SCM_TIMESTAMPING = 0x25
SCM_TIMESTAMPING_OPT_STATS = 0x36
SCM_TIMESTAMPING_PKTINFO = 0x3a
SCM_TIMESTAMPNS = 0x23
+ SCM_TS_OPT_ID = 0x51
SCM_TXTIME = 0x3d
SCM_WIFI_STATUS = 0x29
SECCOMP_IOCTL_NOTIF_ADDFD = 0x80182103
@@ -320,6 +340,9 @@ const (
SO_CNX_ADVICE = 0x35
SO_COOKIE = 0x39
SO_DETACH_REUSEPORT_BPF = 0x44
+ SO_DEVMEM_DMABUF = 0x4f
+ SO_DEVMEM_DONTNEED = 0x50
+ SO_DEVMEM_LINEAR = 0x4e
SO_DOMAIN = 0x1029
SO_DONTROUTE = 0x10
SO_ERROR = 0x1007
diff --git a/vendor/golang.org/x/sys/unix/zerrors_linux_mips64le.go b/vendor/golang.org/x/sys/unix/zerrors_linux_mips64le.go
index ea00e8522a1..321b60902ae 100644
--- a/vendor/golang.org/x/sys/unix/zerrors_linux_mips64le.go
+++ b/vendor/golang.org/x/sys/unix/zerrors_linux_mips64le.go
@@ -108,12 +108,15 @@ const (
HIDIOCGRAWINFO = 0x40084803
HIDIOCGRDESC = 0x50044802
HIDIOCGRDESCSIZE = 0x40044801
+ HIDIOCREVOKE = 0x8004480d
HUPCL = 0x400
ICANON = 0x2
IEXTEN = 0x100
IN_CLOEXEC = 0x80000
IN_NONBLOCK = 0x80
IOCTL_VM_SOCKETS_GET_LOCAL_CID = 0x200007b9
+ IPV6_FLOWINFO_MASK = 0xffffff0f
+ IPV6_FLOWLABEL_MASK = 0xffff0f00
ISIG = 0x1
IUCLC = 0x200
IXOFF = 0x1000
@@ -234,6 +237,20 @@ const (
PPPIOCUNBRIDGECHAN = 0x20007434
PPPIOCXFERUNIT = 0x2000744e
PR_SET_PTRACER_ANY = 0xffffffffffffffff
+ PTP_CLOCK_GETCAPS = 0x40503d01
+ PTP_CLOCK_GETCAPS2 = 0x40503d0a
+ PTP_ENABLE_PPS = 0x80043d04
+ PTP_ENABLE_PPS2 = 0x80043d0d
+ PTP_EXTTS_REQUEST = 0x80103d02
+ PTP_EXTTS_REQUEST2 = 0x80103d0b
+ PTP_MASK_CLEAR_ALL = 0x20003d13
+ PTP_MASK_EN_SINGLE = 0x80043d14
+ PTP_PEROUT_REQUEST = 0x80383d03
+ PTP_PEROUT_REQUEST2 = 0x80383d0c
+ PTP_PIN_SETFUNC = 0x80603d07
+ PTP_PIN_SETFUNC2 = 0x80603d10
+ PTP_SYS_OFFSET = 0x83403d05
+ PTP_SYS_OFFSET2 = 0x83403d0e
PTRACE_GETFPREGS = 0xe
PTRACE_GET_THREAD_AREA = 0x19
PTRACE_GET_THREAD_AREA_3264 = 0xc4
@@ -282,10 +299,13 @@ const (
RTC_WIE_ON = 0x2000700f
RTC_WKALM_RD = 0x40287010
RTC_WKALM_SET = 0x8028700f
+ SCM_DEVMEM_DMABUF = 0x4f
+ SCM_DEVMEM_LINEAR = 0x4e
SCM_TIMESTAMPING = 0x25
SCM_TIMESTAMPING_OPT_STATS = 0x36
SCM_TIMESTAMPING_PKTINFO = 0x3a
SCM_TIMESTAMPNS = 0x23
+ SCM_TS_OPT_ID = 0x51
SCM_TXTIME = 0x3d
SCM_WIFI_STATUS = 0x29
SECCOMP_IOCTL_NOTIF_ADDFD = 0x80182103
@@ -320,6 +340,9 @@ const (
SO_CNX_ADVICE = 0x35
SO_COOKIE = 0x39
SO_DETACH_REUSEPORT_BPF = 0x44
+ SO_DEVMEM_DMABUF = 0x4f
+ SO_DEVMEM_DONTNEED = 0x50
+ SO_DEVMEM_LINEAR = 0x4e
SO_DOMAIN = 0x1029
SO_DONTROUTE = 0x10
SO_ERROR = 0x1007
diff --git a/vendor/golang.org/x/sys/unix/zerrors_linux_mipsle.go b/vendor/golang.org/x/sys/unix/zerrors_linux_mipsle.go
index 91c64687176..9bacdf1e279 100644
--- a/vendor/golang.org/x/sys/unix/zerrors_linux_mipsle.go
+++ b/vendor/golang.org/x/sys/unix/zerrors_linux_mipsle.go
@@ -108,12 +108,15 @@ const (
HIDIOCGRAWINFO = 0x40084803
HIDIOCGRDESC = 0x50044802
HIDIOCGRDESCSIZE = 0x40044801
+ HIDIOCREVOKE = 0x8004480d
HUPCL = 0x400
ICANON = 0x2
IEXTEN = 0x100
IN_CLOEXEC = 0x80000
IN_NONBLOCK = 0x80
IOCTL_VM_SOCKETS_GET_LOCAL_CID = 0x200007b9
+ IPV6_FLOWINFO_MASK = 0xffffff0f
+ IPV6_FLOWLABEL_MASK = 0xffff0f00
ISIG = 0x1
IUCLC = 0x200
IXOFF = 0x1000
@@ -234,6 +237,20 @@ const (
PPPIOCUNBRIDGECHAN = 0x20007434
PPPIOCXFERUNIT = 0x2000744e
PR_SET_PTRACER_ANY = 0xffffffff
+ PTP_CLOCK_GETCAPS = 0x40503d01
+ PTP_CLOCK_GETCAPS2 = 0x40503d0a
+ PTP_ENABLE_PPS = 0x80043d04
+ PTP_ENABLE_PPS2 = 0x80043d0d
+ PTP_EXTTS_REQUEST = 0x80103d02
+ PTP_EXTTS_REQUEST2 = 0x80103d0b
+ PTP_MASK_CLEAR_ALL = 0x20003d13
+ PTP_MASK_EN_SINGLE = 0x80043d14
+ PTP_PEROUT_REQUEST = 0x80383d03
+ PTP_PEROUT_REQUEST2 = 0x80383d0c
+ PTP_PIN_SETFUNC = 0x80603d07
+ PTP_PIN_SETFUNC2 = 0x80603d10
+ PTP_SYS_OFFSET = 0x83403d05
+ PTP_SYS_OFFSET2 = 0x83403d0e
PTRACE_GETFPREGS = 0xe
PTRACE_GET_THREAD_AREA = 0x19
PTRACE_GET_THREAD_AREA_3264 = 0xc4
@@ -282,10 +299,13 @@ const (
RTC_WIE_ON = 0x2000700f
RTC_WKALM_RD = 0x40287010
RTC_WKALM_SET = 0x8028700f
+ SCM_DEVMEM_DMABUF = 0x4f
+ SCM_DEVMEM_LINEAR = 0x4e
SCM_TIMESTAMPING = 0x25
SCM_TIMESTAMPING_OPT_STATS = 0x36
SCM_TIMESTAMPING_PKTINFO = 0x3a
SCM_TIMESTAMPNS = 0x23
+ SCM_TS_OPT_ID = 0x51
SCM_TXTIME = 0x3d
SCM_WIFI_STATUS = 0x29
SECCOMP_IOCTL_NOTIF_ADDFD = 0x80182103
@@ -320,6 +340,9 @@ const (
SO_CNX_ADVICE = 0x35
SO_COOKIE = 0x39
SO_DETACH_REUSEPORT_BPF = 0x44
+ SO_DEVMEM_DMABUF = 0x4f
+ SO_DEVMEM_DONTNEED = 0x50
+ SO_DEVMEM_LINEAR = 0x4e
SO_DOMAIN = 0x1029
SO_DONTROUTE = 0x10
SO_ERROR = 0x1007
diff --git a/vendor/golang.org/x/sys/unix/zerrors_linux_ppc.go b/vendor/golang.org/x/sys/unix/zerrors_linux_ppc.go
index 8cbf38d6390..c2242726156 100644
--- a/vendor/golang.org/x/sys/unix/zerrors_linux_ppc.go
+++ b/vendor/golang.org/x/sys/unix/zerrors_linux_ppc.go
@@ -108,12 +108,15 @@ const (
HIDIOCGRAWINFO = 0x40084803
HIDIOCGRDESC = 0x50044802
HIDIOCGRDESCSIZE = 0x40044801
+ HIDIOCREVOKE = 0x8004480d
HUPCL = 0x4000
ICANON = 0x100
IEXTEN = 0x400
IN_CLOEXEC = 0x80000
IN_NONBLOCK = 0x800
IOCTL_VM_SOCKETS_GET_LOCAL_CID = 0x200007b9
+ IPV6_FLOWINFO_MASK = 0xfffffff
+ IPV6_FLOWLABEL_MASK = 0xfffff
ISIG = 0x80
IUCLC = 0x1000
IXOFF = 0x400
@@ -237,6 +240,20 @@ const (
PPPIOCXFERUNIT = 0x2000744e
PROT_SAO = 0x10
PR_SET_PTRACER_ANY = 0xffffffff
+ PTP_CLOCK_GETCAPS = 0x40503d01
+ PTP_CLOCK_GETCAPS2 = 0x40503d0a
+ PTP_ENABLE_PPS = 0x80043d04
+ PTP_ENABLE_PPS2 = 0x80043d0d
+ PTP_EXTTS_REQUEST = 0x80103d02
+ PTP_EXTTS_REQUEST2 = 0x80103d0b
+ PTP_MASK_CLEAR_ALL = 0x20003d13
+ PTP_MASK_EN_SINGLE = 0x80043d14
+ PTP_PEROUT_REQUEST = 0x80383d03
+ PTP_PEROUT_REQUEST2 = 0x80383d0c
+ PTP_PIN_SETFUNC = 0x80603d07
+ PTP_PIN_SETFUNC2 = 0x80603d10
+ PTP_SYS_OFFSET = 0x83403d05
+ PTP_SYS_OFFSET2 = 0x83403d0e
PTRACE_GETEVRREGS = 0x14
PTRACE_GETFPREGS = 0xe
PTRACE_GETREGS64 = 0x16
@@ -337,10 +354,13 @@ const (
RTC_WIE_ON = 0x2000700f
RTC_WKALM_RD = 0x40287010
RTC_WKALM_SET = 0x8028700f
+ SCM_DEVMEM_DMABUF = 0x4f
+ SCM_DEVMEM_LINEAR = 0x4e
SCM_TIMESTAMPING = 0x25
SCM_TIMESTAMPING_OPT_STATS = 0x36
SCM_TIMESTAMPING_PKTINFO = 0x3a
SCM_TIMESTAMPNS = 0x23
+ SCM_TS_OPT_ID = 0x51
SCM_TXTIME = 0x3d
SCM_WIFI_STATUS = 0x29
SECCOMP_IOCTL_NOTIF_ADDFD = 0x80182103
@@ -375,6 +395,9 @@ const (
SO_CNX_ADVICE = 0x35
SO_COOKIE = 0x39
SO_DETACH_REUSEPORT_BPF = 0x44
+ SO_DEVMEM_DMABUF = 0x4f
+ SO_DEVMEM_DONTNEED = 0x50
+ SO_DEVMEM_LINEAR = 0x4e
SO_DOMAIN = 0x27
SO_DONTROUTE = 0x5
SO_ERROR = 0x4
diff --git a/vendor/golang.org/x/sys/unix/zerrors_linux_ppc64.go b/vendor/golang.org/x/sys/unix/zerrors_linux_ppc64.go
index a2df7341917..6270c8ee13e 100644
--- a/vendor/golang.org/x/sys/unix/zerrors_linux_ppc64.go
+++ b/vendor/golang.org/x/sys/unix/zerrors_linux_ppc64.go
@@ -108,12 +108,15 @@ const (
HIDIOCGRAWINFO = 0x40084803
HIDIOCGRDESC = 0x50044802
HIDIOCGRDESCSIZE = 0x40044801
+ HIDIOCREVOKE = 0x8004480d
HUPCL = 0x4000
ICANON = 0x100
IEXTEN = 0x400
IN_CLOEXEC = 0x80000
IN_NONBLOCK = 0x800
IOCTL_VM_SOCKETS_GET_LOCAL_CID = 0x200007b9
+ IPV6_FLOWINFO_MASK = 0xfffffff
+ IPV6_FLOWLABEL_MASK = 0xfffff
ISIG = 0x80
IUCLC = 0x1000
IXOFF = 0x400
@@ -237,6 +240,20 @@ const (
PPPIOCXFERUNIT = 0x2000744e
PROT_SAO = 0x10
PR_SET_PTRACER_ANY = 0xffffffffffffffff
+ PTP_CLOCK_GETCAPS = 0x40503d01
+ PTP_CLOCK_GETCAPS2 = 0x40503d0a
+ PTP_ENABLE_PPS = 0x80043d04
+ PTP_ENABLE_PPS2 = 0x80043d0d
+ PTP_EXTTS_REQUEST = 0x80103d02
+ PTP_EXTTS_REQUEST2 = 0x80103d0b
+ PTP_MASK_CLEAR_ALL = 0x20003d13
+ PTP_MASK_EN_SINGLE = 0x80043d14
+ PTP_PEROUT_REQUEST = 0x80383d03
+ PTP_PEROUT_REQUEST2 = 0x80383d0c
+ PTP_PIN_SETFUNC = 0x80603d07
+ PTP_PIN_SETFUNC2 = 0x80603d10
+ PTP_SYS_OFFSET = 0x83403d05
+ PTP_SYS_OFFSET2 = 0x83403d0e
PTRACE_GETEVRREGS = 0x14
PTRACE_GETFPREGS = 0xe
PTRACE_GETREGS64 = 0x16
@@ -341,10 +358,13 @@ const (
RTC_WIE_ON = 0x2000700f
RTC_WKALM_RD = 0x40287010
RTC_WKALM_SET = 0x8028700f
+ SCM_DEVMEM_DMABUF = 0x4f
+ SCM_DEVMEM_LINEAR = 0x4e
SCM_TIMESTAMPING = 0x25
SCM_TIMESTAMPING_OPT_STATS = 0x36
SCM_TIMESTAMPING_PKTINFO = 0x3a
SCM_TIMESTAMPNS = 0x23
+ SCM_TS_OPT_ID = 0x51
SCM_TXTIME = 0x3d
SCM_WIFI_STATUS = 0x29
SECCOMP_IOCTL_NOTIF_ADDFD = 0x80182103
@@ -379,6 +399,9 @@ const (
SO_CNX_ADVICE = 0x35
SO_COOKIE = 0x39
SO_DETACH_REUSEPORT_BPF = 0x44
+ SO_DEVMEM_DMABUF = 0x4f
+ SO_DEVMEM_DONTNEED = 0x50
+ SO_DEVMEM_LINEAR = 0x4e
SO_DOMAIN = 0x27
SO_DONTROUTE = 0x5
SO_ERROR = 0x4
diff --git a/vendor/golang.org/x/sys/unix/zerrors_linux_ppc64le.go b/vendor/golang.org/x/sys/unix/zerrors_linux_ppc64le.go
index 24791379233..9966c1941f8 100644
--- a/vendor/golang.org/x/sys/unix/zerrors_linux_ppc64le.go
+++ b/vendor/golang.org/x/sys/unix/zerrors_linux_ppc64le.go
@@ -108,12 +108,15 @@ const (
HIDIOCGRAWINFO = 0x40084803
HIDIOCGRDESC = 0x50044802
HIDIOCGRDESCSIZE = 0x40044801
+ HIDIOCREVOKE = 0x8004480d
HUPCL = 0x4000
ICANON = 0x100
IEXTEN = 0x400
IN_CLOEXEC = 0x80000
IN_NONBLOCK = 0x800
IOCTL_VM_SOCKETS_GET_LOCAL_CID = 0x200007b9
+ IPV6_FLOWINFO_MASK = 0xffffff0f
+ IPV6_FLOWLABEL_MASK = 0xffff0f00
ISIG = 0x80
IUCLC = 0x1000
IXOFF = 0x400
@@ -237,6 +240,20 @@ const (
PPPIOCXFERUNIT = 0x2000744e
PROT_SAO = 0x10
PR_SET_PTRACER_ANY = 0xffffffffffffffff
+ PTP_CLOCK_GETCAPS = 0x40503d01
+ PTP_CLOCK_GETCAPS2 = 0x40503d0a
+ PTP_ENABLE_PPS = 0x80043d04
+ PTP_ENABLE_PPS2 = 0x80043d0d
+ PTP_EXTTS_REQUEST = 0x80103d02
+ PTP_EXTTS_REQUEST2 = 0x80103d0b
+ PTP_MASK_CLEAR_ALL = 0x20003d13
+ PTP_MASK_EN_SINGLE = 0x80043d14
+ PTP_PEROUT_REQUEST = 0x80383d03
+ PTP_PEROUT_REQUEST2 = 0x80383d0c
+ PTP_PIN_SETFUNC = 0x80603d07
+ PTP_PIN_SETFUNC2 = 0x80603d10
+ PTP_SYS_OFFSET = 0x83403d05
+ PTP_SYS_OFFSET2 = 0x83403d0e
PTRACE_GETEVRREGS = 0x14
PTRACE_GETFPREGS = 0xe
PTRACE_GETREGS64 = 0x16
@@ -341,10 +358,13 @@ const (
RTC_WIE_ON = 0x2000700f
RTC_WKALM_RD = 0x40287010
RTC_WKALM_SET = 0x8028700f
+ SCM_DEVMEM_DMABUF = 0x4f
+ SCM_DEVMEM_LINEAR = 0x4e
SCM_TIMESTAMPING = 0x25
SCM_TIMESTAMPING_OPT_STATS = 0x36
SCM_TIMESTAMPING_PKTINFO = 0x3a
SCM_TIMESTAMPNS = 0x23
+ SCM_TS_OPT_ID = 0x51
SCM_TXTIME = 0x3d
SCM_WIFI_STATUS = 0x29
SECCOMP_IOCTL_NOTIF_ADDFD = 0x80182103
@@ -379,6 +399,9 @@ const (
SO_CNX_ADVICE = 0x35
SO_COOKIE = 0x39
SO_DETACH_REUSEPORT_BPF = 0x44
+ SO_DEVMEM_DMABUF = 0x4f
+ SO_DEVMEM_DONTNEED = 0x50
+ SO_DEVMEM_LINEAR = 0x4e
SO_DOMAIN = 0x27
SO_DONTROUTE = 0x5
SO_ERROR = 0x4
diff --git a/vendor/golang.org/x/sys/unix/zerrors_linux_riscv64.go b/vendor/golang.org/x/sys/unix/zerrors_linux_riscv64.go
index d265f146ee0..848e5fcc42e 100644
--- a/vendor/golang.org/x/sys/unix/zerrors_linux_riscv64.go
+++ b/vendor/golang.org/x/sys/unix/zerrors_linux_riscv64.go
@@ -108,12 +108,15 @@ const (
HIDIOCGRAWINFO = 0x80084803
HIDIOCGRDESC = 0x90044802
HIDIOCGRDESCSIZE = 0x80044801
+ HIDIOCREVOKE = 0x4004480d
HUPCL = 0x400
ICANON = 0x2
IEXTEN = 0x8000
IN_CLOEXEC = 0x80000
IN_NONBLOCK = 0x800
IOCTL_VM_SOCKETS_GET_LOCAL_CID = 0x7b9
+ IPV6_FLOWINFO_MASK = 0xffffff0f
+ IPV6_FLOWLABEL_MASK = 0xffff0f00
ISIG = 0x1
IUCLC = 0x200
IXOFF = 0x1000
@@ -234,6 +237,20 @@ const (
PPPIOCUNBRIDGECHAN = 0x7434
PPPIOCXFERUNIT = 0x744e
PR_SET_PTRACER_ANY = 0xffffffffffffffff
+ PTP_CLOCK_GETCAPS = 0x80503d01
+ PTP_CLOCK_GETCAPS2 = 0x80503d0a
+ PTP_ENABLE_PPS = 0x40043d04
+ PTP_ENABLE_PPS2 = 0x40043d0d
+ PTP_EXTTS_REQUEST = 0x40103d02
+ PTP_EXTTS_REQUEST2 = 0x40103d0b
+ PTP_MASK_CLEAR_ALL = 0x3d13
+ PTP_MASK_EN_SINGLE = 0x40043d14
+ PTP_PEROUT_REQUEST = 0x40383d03
+ PTP_PEROUT_REQUEST2 = 0x40383d0c
+ PTP_PIN_SETFUNC = 0x40603d07
+ PTP_PIN_SETFUNC2 = 0x40603d10
+ PTP_SYS_OFFSET = 0x43403d05
+ PTP_SYS_OFFSET2 = 0x43403d0e
PTRACE_GETFDPIC = 0x21
PTRACE_GETFDPIC_EXEC = 0x0
PTRACE_GETFDPIC_INTERP = 0x1
@@ -273,10 +290,13 @@ const (
RTC_WIE_ON = 0x700f
RTC_WKALM_RD = 0x80287010
RTC_WKALM_SET = 0x4028700f
+ SCM_DEVMEM_DMABUF = 0x4f
+ SCM_DEVMEM_LINEAR = 0x4e
SCM_TIMESTAMPING = 0x25
SCM_TIMESTAMPING_OPT_STATS = 0x36
SCM_TIMESTAMPING_PKTINFO = 0x3a
SCM_TIMESTAMPNS = 0x23
+ SCM_TS_OPT_ID = 0x51
SCM_TXTIME = 0x3d
SCM_WIFI_STATUS = 0x29
SECCOMP_IOCTL_NOTIF_ADDFD = 0x40182103
@@ -311,6 +331,9 @@ const (
SO_CNX_ADVICE = 0x35
SO_COOKIE = 0x39
SO_DETACH_REUSEPORT_BPF = 0x44
+ SO_DEVMEM_DMABUF = 0x4f
+ SO_DEVMEM_DONTNEED = 0x50
+ SO_DEVMEM_LINEAR = 0x4e
SO_DOMAIN = 0x27
SO_DONTROUTE = 0x5
SO_ERROR = 0x4
diff --git a/vendor/golang.org/x/sys/unix/zerrors_linux_s390x.go b/vendor/golang.org/x/sys/unix/zerrors_linux_s390x.go
index 3f2d6443964..669b2adb80b 100644
--- a/vendor/golang.org/x/sys/unix/zerrors_linux_s390x.go
+++ b/vendor/golang.org/x/sys/unix/zerrors_linux_s390x.go
@@ -108,12 +108,15 @@ const (
HIDIOCGRAWINFO = 0x80084803
HIDIOCGRDESC = 0x90044802
HIDIOCGRDESCSIZE = 0x80044801
+ HIDIOCREVOKE = 0x4004480d
HUPCL = 0x400
ICANON = 0x2
IEXTEN = 0x8000
IN_CLOEXEC = 0x80000
IN_NONBLOCK = 0x800
IOCTL_VM_SOCKETS_GET_LOCAL_CID = 0x7b9
+ IPV6_FLOWINFO_MASK = 0xfffffff
+ IPV6_FLOWLABEL_MASK = 0xfffff
ISIG = 0x1
IUCLC = 0x200
IXOFF = 0x1000
@@ -234,6 +237,20 @@ const (
PPPIOCUNBRIDGECHAN = 0x7434
PPPIOCXFERUNIT = 0x744e
PR_SET_PTRACER_ANY = 0xffffffffffffffff
+ PTP_CLOCK_GETCAPS = 0x80503d01
+ PTP_CLOCK_GETCAPS2 = 0x80503d0a
+ PTP_ENABLE_PPS = 0x40043d04
+ PTP_ENABLE_PPS2 = 0x40043d0d
+ PTP_EXTTS_REQUEST = 0x40103d02
+ PTP_EXTTS_REQUEST2 = 0x40103d0b
+ PTP_MASK_CLEAR_ALL = 0x3d13
+ PTP_MASK_EN_SINGLE = 0x40043d14
+ PTP_PEROUT_REQUEST = 0x40383d03
+ PTP_PEROUT_REQUEST2 = 0x40383d0c
+ PTP_PIN_SETFUNC = 0x40603d07
+ PTP_PIN_SETFUNC2 = 0x40603d10
+ PTP_SYS_OFFSET = 0x43403d05
+ PTP_SYS_OFFSET2 = 0x43403d0e
PTRACE_DISABLE_TE = 0x5010
PTRACE_ENABLE_TE = 0x5009
PTRACE_GET_LAST_BREAK = 0x5006
@@ -345,10 +362,13 @@ const (
RTC_WIE_ON = 0x700f
RTC_WKALM_RD = 0x80287010
RTC_WKALM_SET = 0x4028700f
+ SCM_DEVMEM_DMABUF = 0x4f
+ SCM_DEVMEM_LINEAR = 0x4e
SCM_TIMESTAMPING = 0x25
SCM_TIMESTAMPING_OPT_STATS = 0x36
SCM_TIMESTAMPING_PKTINFO = 0x3a
SCM_TIMESTAMPNS = 0x23
+ SCM_TS_OPT_ID = 0x51
SCM_TXTIME = 0x3d
SCM_WIFI_STATUS = 0x29
SECCOMP_IOCTL_NOTIF_ADDFD = 0x40182103
@@ -383,6 +403,9 @@ const (
SO_CNX_ADVICE = 0x35
SO_COOKIE = 0x39
SO_DETACH_REUSEPORT_BPF = 0x44
+ SO_DEVMEM_DMABUF = 0x4f
+ SO_DEVMEM_DONTNEED = 0x50
+ SO_DEVMEM_LINEAR = 0x4e
SO_DOMAIN = 0x27
SO_DONTROUTE = 0x5
SO_ERROR = 0x4
diff --git a/vendor/golang.org/x/sys/unix/zerrors_linux_sparc64.go b/vendor/golang.org/x/sys/unix/zerrors_linux_sparc64.go
index 5d8b727a1c8..4834e57514e 100644
--- a/vendor/golang.org/x/sys/unix/zerrors_linux_sparc64.go
+++ b/vendor/golang.org/x/sys/unix/zerrors_linux_sparc64.go
@@ -112,12 +112,15 @@ const (
HIDIOCGRAWINFO = 0x40084803
HIDIOCGRDESC = 0x50044802
HIDIOCGRDESCSIZE = 0x40044801
+ HIDIOCREVOKE = 0x8004480d
HUPCL = 0x400
ICANON = 0x2
IEXTEN = 0x8000
IN_CLOEXEC = 0x400000
IN_NONBLOCK = 0x4000
IOCTL_VM_SOCKETS_GET_LOCAL_CID = 0x200007b9
+ IPV6_FLOWINFO_MASK = 0xfffffff
+ IPV6_FLOWLABEL_MASK = 0xfffff
ISIG = 0x1
IUCLC = 0x200
IXOFF = 0x1000
@@ -239,6 +242,20 @@ const (
PPPIOCUNBRIDGECHAN = 0x20007434
PPPIOCXFERUNIT = 0x2000744e
PR_SET_PTRACER_ANY = 0xffffffffffffffff
+ PTP_CLOCK_GETCAPS = 0x40503d01
+ PTP_CLOCK_GETCAPS2 = 0x40503d0a
+ PTP_ENABLE_PPS = 0x80043d04
+ PTP_ENABLE_PPS2 = 0x80043d0d
+ PTP_EXTTS_REQUEST = 0x80103d02
+ PTP_EXTTS_REQUEST2 = 0x80103d0b
+ PTP_MASK_CLEAR_ALL = 0x20003d13
+ PTP_MASK_EN_SINGLE = 0x80043d14
+ PTP_PEROUT_REQUEST = 0x80383d03
+ PTP_PEROUT_REQUEST2 = 0x80383d0c
+ PTP_PIN_SETFUNC = 0x80603d07
+ PTP_PIN_SETFUNC2 = 0x80603d10
+ PTP_SYS_OFFSET = 0x83403d05
+ PTP_SYS_OFFSET2 = 0x83403d0e
PTRACE_GETFPAREGS = 0x14
PTRACE_GETFPREGS = 0xe
PTRACE_GETFPREGS64 = 0x19
@@ -336,10 +353,13 @@ const (
RTC_WIE_ON = 0x2000700f
RTC_WKALM_RD = 0x40287010
RTC_WKALM_SET = 0x8028700f
+ SCM_DEVMEM_DMABUF = 0x58
+ SCM_DEVMEM_LINEAR = 0x57
SCM_TIMESTAMPING = 0x23
SCM_TIMESTAMPING_OPT_STATS = 0x38
SCM_TIMESTAMPING_PKTINFO = 0x3c
SCM_TIMESTAMPNS = 0x21
+ SCM_TS_OPT_ID = 0x5a
SCM_TXTIME = 0x3f
SCM_WIFI_STATUS = 0x25
SECCOMP_IOCTL_NOTIF_ADDFD = 0x80182103
@@ -422,6 +442,9 @@ const (
SO_CNX_ADVICE = 0x37
SO_COOKIE = 0x3b
SO_DETACH_REUSEPORT_BPF = 0x47
+ SO_DEVMEM_DMABUF = 0x58
+ SO_DEVMEM_DONTNEED = 0x59
+ SO_DEVMEM_LINEAR = 0x57
SO_DOMAIN = 0x1029
SO_DONTROUTE = 0x10
SO_ERROR = 0x1007
diff --git a/vendor/golang.org/x/sys/unix/zsyscall_linux.go b/vendor/golang.org/x/sys/unix/zsyscall_linux.go
index af30da55780..5cc1e8eb2f3 100644
--- a/vendor/golang.org/x/sys/unix/zsyscall_linux.go
+++ b/vendor/golang.org/x/sys/unix/zsyscall_linux.go
@@ -592,6 +592,16 @@ func ClockGettime(clockid int32, time *Timespec) (err error) {
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+func ClockSettime(clockid int32, time *Timespec) (err error) {
+ _, _, e1 := Syscall(SYS_CLOCK_SETTIME, uintptr(clockid), uintptr(unsafe.Pointer(time)), 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
func ClockNanosleep(clockid int32, flags int, request *Timespec, remain *Timespec) (err error) {
_, _, e1 := Syscall6(SYS_CLOCK_NANOSLEEP, uintptr(clockid), uintptr(flags), uintptr(unsafe.Pointer(request)), uintptr(unsafe.Pointer(remain)), 0, 0)
if e1 != 0 {
diff --git a/vendor/golang.org/x/sys/unix/zsyscall_solaris_amd64.go b/vendor/golang.org/x/sys/unix/zsyscall_solaris_amd64.go
index 829b87feb8d..c6545413c45 100644
--- a/vendor/golang.org/x/sys/unix/zsyscall_solaris_amd64.go
+++ b/vendor/golang.org/x/sys/unix/zsyscall_solaris_amd64.go
@@ -141,6 +141,16 @@ import (
//go:cgo_import_dynamic libc_getpeername getpeername "libsocket.so"
//go:cgo_import_dynamic libc_setsockopt setsockopt "libsocket.so"
//go:cgo_import_dynamic libc_recvfrom recvfrom "libsocket.so"
+//go:cgo_import_dynamic libc_getpeerucred getpeerucred "libc.so"
+//go:cgo_import_dynamic libc_ucred_get ucred_get "libc.so"
+//go:cgo_import_dynamic libc_ucred_geteuid ucred_geteuid "libc.so"
+//go:cgo_import_dynamic libc_ucred_getegid ucred_getegid "libc.so"
+//go:cgo_import_dynamic libc_ucred_getruid ucred_getruid "libc.so"
+//go:cgo_import_dynamic libc_ucred_getrgid ucred_getrgid "libc.so"
+//go:cgo_import_dynamic libc_ucred_getsuid ucred_getsuid "libc.so"
+//go:cgo_import_dynamic libc_ucred_getsgid ucred_getsgid "libc.so"
+//go:cgo_import_dynamic libc_ucred_getpid ucred_getpid "libc.so"
+//go:cgo_import_dynamic libc_ucred_free ucred_free "libc.so"
//go:cgo_import_dynamic libc_port_create port_create "libc.so"
//go:cgo_import_dynamic libc_port_associate port_associate "libc.so"
//go:cgo_import_dynamic libc_port_dissociate port_dissociate "libc.so"
@@ -280,6 +290,16 @@ import (
//go:linkname procgetpeername libc_getpeername
//go:linkname procsetsockopt libc_setsockopt
//go:linkname procrecvfrom libc_recvfrom
+//go:linkname procgetpeerucred libc_getpeerucred
+//go:linkname procucred_get libc_ucred_get
+//go:linkname procucred_geteuid libc_ucred_geteuid
+//go:linkname procucred_getegid libc_ucred_getegid
+//go:linkname procucred_getruid libc_ucred_getruid
+//go:linkname procucred_getrgid libc_ucred_getrgid
+//go:linkname procucred_getsuid libc_ucred_getsuid
+//go:linkname procucred_getsgid libc_ucred_getsgid
+//go:linkname procucred_getpid libc_ucred_getpid
+//go:linkname procucred_free libc_ucred_free
//go:linkname procport_create libc_port_create
//go:linkname procport_associate libc_port_associate
//go:linkname procport_dissociate libc_port_dissociate
@@ -420,6 +440,16 @@ var (
procgetpeername,
procsetsockopt,
procrecvfrom,
+ procgetpeerucred,
+ procucred_get,
+ procucred_geteuid,
+ procucred_getegid,
+ procucred_getruid,
+ procucred_getrgid,
+ procucred_getsuid,
+ procucred_getsgid,
+ procucred_getpid,
+ procucred_free,
procport_create,
procport_associate,
procport_dissociate,
@@ -2029,6 +2059,90 @@ func recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Sockl
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+func getpeerucred(fd uintptr, ucred *uintptr) (err error) {
+ _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procgetpeerucred)), 2, uintptr(fd), uintptr(unsafe.Pointer(ucred)), 0, 0, 0, 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func ucredGet(pid int) (ucred uintptr, err error) {
+ r0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procucred_get)), 1, uintptr(pid), 0, 0, 0, 0, 0)
+ ucred = uintptr(r0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func ucredGeteuid(ucred uintptr) (uid int) {
+ r0, _, _ := sysvicall6(uintptr(unsafe.Pointer(&procucred_geteuid)), 1, uintptr(ucred), 0, 0, 0, 0, 0)
+ uid = int(r0)
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func ucredGetegid(ucred uintptr) (gid int) {
+ r0, _, _ := sysvicall6(uintptr(unsafe.Pointer(&procucred_getegid)), 1, uintptr(ucred), 0, 0, 0, 0, 0)
+ gid = int(r0)
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func ucredGetruid(ucred uintptr) (uid int) {
+ r0, _, _ := sysvicall6(uintptr(unsafe.Pointer(&procucred_getruid)), 1, uintptr(ucred), 0, 0, 0, 0, 0)
+ uid = int(r0)
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func ucredGetrgid(ucred uintptr) (gid int) {
+ r0, _, _ := sysvicall6(uintptr(unsafe.Pointer(&procucred_getrgid)), 1, uintptr(ucred), 0, 0, 0, 0, 0)
+ gid = int(r0)
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func ucredGetsuid(ucred uintptr) (uid int) {
+ r0, _, _ := sysvicall6(uintptr(unsafe.Pointer(&procucred_getsuid)), 1, uintptr(ucred), 0, 0, 0, 0, 0)
+ uid = int(r0)
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func ucredGetsgid(ucred uintptr) (gid int) {
+ r0, _, _ := sysvicall6(uintptr(unsafe.Pointer(&procucred_getsgid)), 1, uintptr(ucred), 0, 0, 0, 0, 0)
+ gid = int(r0)
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func ucredGetpid(ucred uintptr) (pid int) {
+ r0, _, _ := sysvicall6(uintptr(unsafe.Pointer(&procucred_getpid)), 1, uintptr(ucred), 0, 0, 0, 0, 0)
+ pid = int(r0)
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func ucredFree(ucred uintptr) {
+ sysvicall6(uintptr(unsafe.Pointer(&procucred_free)), 1, uintptr(ucred), 0, 0, 0, 0, 0)
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
func port_create() (n int, err error) {
r0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procport_create)), 0, 0, 0, 0, 0, 0, 0)
n = int(r0)
diff --git a/vendor/golang.org/x/sys/unix/zsysnum_linux_386.go b/vendor/golang.org/x/sys/unix/zsysnum_linux_386.go
index 524b0820cbc..c79aaff306a 100644
--- a/vendor/golang.org/x/sys/unix/zsysnum_linux_386.go
+++ b/vendor/golang.org/x/sys/unix/zsysnum_linux_386.go
@@ -458,4 +458,8 @@ const (
SYS_LSM_SET_SELF_ATTR = 460
SYS_LSM_LIST_MODULES = 461
SYS_MSEAL = 462
+ SYS_SETXATTRAT = 463
+ SYS_GETXATTRAT = 464
+ SYS_LISTXATTRAT = 465
+ SYS_REMOVEXATTRAT = 466
)
diff --git a/vendor/golang.org/x/sys/unix/zsysnum_linux_amd64.go b/vendor/golang.org/x/sys/unix/zsysnum_linux_amd64.go
index f485dbf4565..5eb450695e9 100644
--- a/vendor/golang.org/x/sys/unix/zsysnum_linux_amd64.go
+++ b/vendor/golang.org/x/sys/unix/zsysnum_linux_amd64.go
@@ -381,4 +381,8 @@ const (
SYS_LSM_SET_SELF_ATTR = 460
SYS_LSM_LIST_MODULES = 461
SYS_MSEAL = 462
+ SYS_SETXATTRAT = 463
+ SYS_GETXATTRAT = 464
+ SYS_LISTXATTRAT = 465
+ SYS_REMOVEXATTRAT = 466
)
diff --git a/vendor/golang.org/x/sys/unix/zsysnum_linux_arm.go b/vendor/golang.org/x/sys/unix/zsysnum_linux_arm.go
index 70b35bf3b09..05e50297445 100644
--- a/vendor/golang.org/x/sys/unix/zsysnum_linux_arm.go
+++ b/vendor/golang.org/x/sys/unix/zsysnum_linux_arm.go
@@ -422,4 +422,8 @@ const (
SYS_LSM_SET_SELF_ATTR = 460
SYS_LSM_LIST_MODULES = 461
SYS_MSEAL = 462
+ SYS_SETXATTRAT = 463
+ SYS_GETXATTRAT = 464
+ SYS_LISTXATTRAT = 465
+ SYS_REMOVEXATTRAT = 466
)
diff --git a/vendor/golang.org/x/sys/unix/zsysnum_linux_arm64.go b/vendor/golang.org/x/sys/unix/zsysnum_linux_arm64.go
index 1893e2fe884..38c53ec51bb 100644
--- a/vendor/golang.org/x/sys/unix/zsysnum_linux_arm64.go
+++ b/vendor/golang.org/x/sys/unix/zsysnum_linux_arm64.go
@@ -325,4 +325,8 @@ const (
SYS_LSM_SET_SELF_ATTR = 460
SYS_LSM_LIST_MODULES = 461
SYS_MSEAL = 462
+ SYS_SETXATTRAT = 463
+ SYS_GETXATTRAT = 464
+ SYS_LISTXATTRAT = 465
+ SYS_REMOVEXATTRAT = 466
)
diff --git a/vendor/golang.org/x/sys/unix/zsysnum_linux_loong64.go b/vendor/golang.org/x/sys/unix/zsysnum_linux_loong64.go
index 16a4017da0a..31d2e71a18e 100644
--- a/vendor/golang.org/x/sys/unix/zsysnum_linux_loong64.go
+++ b/vendor/golang.org/x/sys/unix/zsysnum_linux_loong64.go
@@ -321,4 +321,8 @@ const (
SYS_LSM_SET_SELF_ATTR = 460
SYS_LSM_LIST_MODULES = 461
SYS_MSEAL = 462
+ SYS_SETXATTRAT = 463
+ SYS_GETXATTRAT = 464
+ SYS_LISTXATTRAT = 465
+ SYS_REMOVEXATTRAT = 466
)
diff --git a/vendor/golang.org/x/sys/unix/zsysnum_linux_mips.go b/vendor/golang.org/x/sys/unix/zsysnum_linux_mips.go
index 7e567f1efff..f4184a336b0 100644
--- a/vendor/golang.org/x/sys/unix/zsysnum_linux_mips.go
+++ b/vendor/golang.org/x/sys/unix/zsysnum_linux_mips.go
@@ -442,4 +442,8 @@ const (
SYS_LSM_SET_SELF_ATTR = 4460
SYS_LSM_LIST_MODULES = 4461
SYS_MSEAL = 4462
+ SYS_SETXATTRAT = 4463
+ SYS_GETXATTRAT = 4464
+ SYS_LISTXATTRAT = 4465
+ SYS_REMOVEXATTRAT = 4466
)
diff --git a/vendor/golang.org/x/sys/unix/zsysnum_linux_mips64.go b/vendor/golang.org/x/sys/unix/zsysnum_linux_mips64.go
index 38ae55e5ef8..05b9962278f 100644
--- a/vendor/golang.org/x/sys/unix/zsysnum_linux_mips64.go
+++ b/vendor/golang.org/x/sys/unix/zsysnum_linux_mips64.go
@@ -372,4 +372,8 @@ const (
SYS_LSM_SET_SELF_ATTR = 5460
SYS_LSM_LIST_MODULES = 5461
SYS_MSEAL = 5462
+ SYS_SETXATTRAT = 5463
+ SYS_GETXATTRAT = 5464
+ SYS_LISTXATTRAT = 5465
+ SYS_REMOVEXATTRAT = 5466
)
diff --git a/vendor/golang.org/x/sys/unix/zsysnum_linux_mips64le.go b/vendor/golang.org/x/sys/unix/zsysnum_linux_mips64le.go
index 55e92e60a82..43a256e9e67 100644
--- a/vendor/golang.org/x/sys/unix/zsysnum_linux_mips64le.go
+++ b/vendor/golang.org/x/sys/unix/zsysnum_linux_mips64le.go
@@ -372,4 +372,8 @@ const (
SYS_LSM_SET_SELF_ATTR = 5460
SYS_LSM_LIST_MODULES = 5461
SYS_MSEAL = 5462
+ SYS_SETXATTRAT = 5463
+ SYS_GETXATTRAT = 5464
+ SYS_LISTXATTRAT = 5465
+ SYS_REMOVEXATTRAT = 5466
)
diff --git a/vendor/golang.org/x/sys/unix/zsysnum_linux_mipsle.go b/vendor/golang.org/x/sys/unix/zsysnum_linux_mipsle.go
index 60658d6a021..eea5ddfc220 100644
--- a/vendor/golang.org/x/sys/unix/zsysnum_linux_mipsle.go
+++ b/vendor/golang.org/x/sys/unix/zsysnum_linux_mipsle.go
@@ -442,4 +442,8 @@ const (
SYS_LSM_SET_SELF_ATTR = 4460
SYS_LSM_LIST_MODULES = 4461
SYS_MSEAL = 4462
+ SYS_SETXATTRAT = 4463
+ SYS_GETXATTRAT = 4464
+ SYS_LISTXATTRAT = 4465
+ SYS_REMOVEXATTRAT = 4466
)
diff --git a/vendor/golang.org/x/sys/unix/zsysnum_linux_ppc.go b/vendor/golang.org/x/sys/unix/zsysnum_linux_ppc.go
index e203e8a7ed4..0d777bfbb14 100644
--- a/vendor/golang.org/x/sys/unix/zsysnum_linux_ppc.go
+++ b/vendor/golang.org/x/sys/unix/zsysnum_linux_ppc.go
@@ -449,4 +449,8 @@ const (
SYS_LSM_SET_SELF_ATTR = 460
SYS_LSM_LIST_MODULES = 461
SYS_MSEAL = 462
+ SYS_SETXATTRAT = 463
+ SYS_GETXATTRAT = 464
+ SYS_LISTXATTRAT = 465
+ SYS_REMOVEXATTRAT = 466
)
diff --git a/vendor/golang.org/x/sys/unix/zsysnum_linux_ppc64.go b/vendor/golang.org/x/sys/unix/zsysnum_linux_ppc64.go
index 5944b97d546..b4463650256 100644
--- a/vendor/golang.org/x/sys/unix/zsysnum_linux_ppc64.go
+++ b/vendor/golang.org/x/sys/unix/zsysnum_linux_ppc64.go
@@ -421,4 +421,8 @@ const (
SYS_LSM_SET_SELF_ATTR = 460
SYS_LSM_LIST_MODULES = 461
SYS_MSEAL = 462
+ SYS_SETXATTRAT = 463
+ SYS_GETXATTRAT = 464
+ SYS_LISTXATTRAT = 465
+ SYS_REMOVEXATTRAT = 466
)
diff --git a/vendor/golang.org/x/sys/unix/zsysnum_linux_ppc64le.go b/vendor/golang.org/x/sys/unix/zsysnum_linux_ppc64le.go
index c66d416dad1..0c7d21c1881 100644
--- a/vendor/golang.org/x/sys/unix/zsysnum_linux_ppc64le.go
+++ b/vendor/golang.org/x/sys/unix/zsysnum_linux_ppc64le.go
@@ -421,4 +421,8 @@ const (
SYS_LSM_SET_SELF_ATTR = 460
SYS_LSM_LIST_MODULES = 461
SYS_MSEAL = 462
+ SYS_SETXATTRAT = 463
+ SYS_GETXATTRAT = 464
+ SYS_LISTXATTRAT = 465
+ SYS_REMOVEXATTRAT = 466
)
diff --git a/vendor/golang.org/x/sys/unix/zsysnum_linux_riscv64.go b/vendor/golang.org/x/sys/unix/zsysnum_linux_riscv64.go
index a5459e766f5..84053916987 100644
--- a/vendor/golang.org/x/sys/unix/zsysnum_linux_riscv64.go
+++ b/vendor/golang.org/x/sys/unix/zsysnum_linux_riscv64.go
@@ -326,4 +326,8 @@ const (
SYS_LSM_SET_SELF_ATTR = 460
SYS_LSM_LIST_MODULES = 461
SYS_MSEAL = 462
+ SYS_SETXATTRAT = 463
+ SYS_GETXATTRAT = 464
+ SYS_LISTXATTRAT = 465
+ SYS_REMOVEXATTRAT = 466
)
diff --git a/vendor/golang.org/x/sys/unix/zsysnum_linux_s390x.go b/vendor/golang.org/x/sys/unix/zsysnum_linux_s390x.go
index 01d86825bb9..fcf1b790d6c 100644
--- a/vendor/golang.org/x/sys/unix/zsysnum_linux_s390x.go
+++ b/vendor/golang.org/x/sys/unix/zsysnum_linux_s390x.go
@@ -387,4 +387,8 @@ const (
SYS_LSM_SET_SELF_ATTR = 460
SYS_LSM_LIST_MODULES = 461
SYS_MSEAL = 462
+ SYS_SETXATTRAT = 463
+ SYS_GETXATTRAT = 464
+ SYS_LISTXATTRAT = 465
+ SYS_REMOVEXATTRAT = 466
)
diff --git a/vendor/golang.org/x/sys/unix/zsysnum_linux_sparc64.go b/vendor/golang.org/x/sys/unix/zsysnum_linux_sparc64.go
index 7b703e77cda..52d15b5f9d4 100644
--- a/vendor/golang.org/x/sys/unix/zsysnum_linux_sparc64.go
+++ b/vendor/golang.org/x/sys/unix/zsysnum_linux_sparc64.go
@@ -400,4 +400,8 @@ const (
SYS_LSM_SET_SELF_ATTR = 460
SYS_LSM_LIST_MODULES = 461
SYS_MSEAL = 462
+ SYS_SETXATTRAT = 463
+ SYS_GETXATTRAT = 464
+ SYS_LISTXATTRAT = 465
+ SYS_REMOVEXATTRAT = 466
)
diff --git a/vendor/golang.org/x/sys/unix/ztypes_darwin_amd64.go b/vendor/golang.org/x/sys/unix/ztypes_darwin_amd64.go
index d003c3d4378..17c53bd9b33 100644
--- a/vendor/golang.org/x/sys/unix/ztypes_darwin_amd64.go
+++ b/vendor/golang.org/x/sys/unix/ztypes_darwin_amd64.go
@@ -462,11 +462,14 @@ type FdSet struct {
const (
SizeofIfMsghdr = 0x70
+ SizeofIfMsghdr2 = 0xa0
SizeofIfData = 0x60
+ SizeofIfData64 = 0x80
SizeofIfaMsghdr = 0x14
SizeofIfmaMsghdr = 0x10
SizeofIfmaMsghdr2 = 0x14
SizeofRtMsghdr = 0x5c
+ SizeofRtMsghdr2 = 0x5c
SizeofRtMetrics = 0x38
)
@@ -480,6 +483,20 @@ type IfMsghdr struct {
Data IfData
}
+type IfMsghdr2 struct {
+ Msglen uint16
+ Version uint8
+ Type uint8
+ Addrs int32
+ Flags int32
+ Index uint16
+ Snd_len int32
+ Snd_maxlen int32
+ Snd_drops int32
+ Timer int32
+ Data IfData64
+}
+
type IfData struct {
Type uint8
Typelen uint8
@@ -512,6 +529,34 @@ type IfData struct {
Reserved2 uint32
}
+type IfData64 struct {
+ Type uint8
+ Typelen uint8
+ Physical uint8
+ Addrlen uint8
+ Hdrlen uint8
+ Recvquota uint8
+ Xmitquota uint8
+ Unused1 uint8
+ Mtu uint32
+ Metric uint32
+ Baudrate uint64
+ Ipackets uint64
+ Ierrors uint64
+ Opackets uint64
+ Oerrors uint64
+ Collisions uint64
+ Ibytes uint64
+ Obytes uint64
+ Imcasts uint64
+ Omcasts uint64
+ Iqdrops uint64
+ Noproto uint64
+ Recvtiming uint32
+ Xmittiming uint32
+ Lastchange Timeval32
+}
+
type IfaMsghdr struct {
Msglen uint16
Version uint8
@@ -557,6 +602,21 @@ type RtMsghdr struct {
Rmx RtMetrics
}
+type RtMsghdr2 struct {
+ Msglen uint16
+ Version uint8
+ Type uint8
+ Index uint16
+ Flags int32
+ Addrs int32
+ Refcnt int32
+ Parentflags int32
+ Reserved int32
+ Use int32
+ Inits uint32
+ Rmx RtMetrics
+}
+
type RtMetrics struct {
Locks uint32
Mtu uint32
diff --git a/vendor/golang.org/x/sys/unix/ztypes_darwin_arm64.go b/vendor/golang.org/x/sys/unix/ztypes_darwin_arm64.go
index 0d45a941aae..2392226a743 100644
--- a/vendor/golang.org/x/sys/unix/ztypes_darwin_arm64.go
+++ b/vendor/golang.org/x/sys/unix/ztypes_darwin_arm64.go
@@ -462,11 +462,14 @@ type FdSet struct {
const (
SizeofIfMsghdr = 0x70
+ SizeofIfMsghdr2 = 0xa0
SizeofIfData = 0x60
+ SizeofIfData64 = 0x80
SizeofIfaMsghdr = 0x14
SizeofIfmaMsghdr = 0x10
SizeofIfmaMsghdr2 = 0x14
SizeofRtMsghdr = 0x5c
+ SizeofRtMsghdr2 = 0x5c
SizeofRtMetrics = 0x38
)
@@ -480,6 +483,20 @@ type IfMsghdr struct {
Data IfData
}
+type IfMsghdr2 struct {
+ Msglen uint16
+ Version uint8
+ Type uint8
+ Addrs int32
+ Flags int32
+ Index uint16
+ Snd_len int32
+ Snd_maxlen int32
+ Snd_drops int32
+ Timer int32
+ Data IfData64
+}
+
type IfData struct {
Type uint8
Typelen uint8
@@ -512,6 +529,34 @@ type IfData struct {
Reserved2 uint32
}
+type IfData64 struct {
+ Type uint8
+ Typelen uint8
+ Physical uint8
+ Addrlen uint8
+ Hdrlen uint8
+ Recvquota uint8
+ Xmitquota uint8
+ Unused1 uint8
+ Mtu uint32
+ Metric uint32
+ Baudrate uint64
+ Ipackets uint64
+ Ierrors uint64
+ Opackets uint64
+ Oerrors uint64
+ Collisions uint64
+ Ibytes uint64
+ Obytes uint64
+ Imcasts uint64
+ Omcasts uint64
+ Iqdrops uint64
+ Noproto uint64
+ Recvtiming uint32
+ Xmittiming uint32
+ Lastchange Timeval32
+}
+
type IfaMsghdr struct {
Msglen uint16
Version uint8
@@ -557,6 +602,21 @@ type RtMsghdr struct {
Rmx RtMetrics
}
+type RtMsghdr2 struct {
+ Msglen uint16
+ Version uint8
+ Type uint8
+ Index uint16
+ Flags int32
+ Addrs int32
+ Refcnt int32
+ Parentflags int32
+ Reserved int32
+ Use int32
+ Inits uint32
+ Rmx RtMetrics
+}
+
type RtMetrics struct {
Locks uint32
Mtu uint32
diff --git a/vendor/golang.org/x/sys/unix/ztypes_linux.go b/vendor/golang.org/x/sys/unix/ztypes_linux.go
index 3a69e454962..a46abe64720 100644
--- a/vendor/golang.org/x/sys/unix/ztypes_linux.go
+++ b/vendor/golang.org/x/sys/unix/ztypes_linux.go
@@ -1752,12 +1752,6 @@ const (
IFLA_IPVLAN_UNSPEC = 0x0
IFLA_IPVLAN_MODE = 0x1
IFLA_IPVLAN_FLAGS = 0x2
- NETKIT_NEXT = -0x1
- NETKIT_PASS = 0x0
- NETKIT_DROP = 0x2
- NETKIT_REDIRECT = 0x7
- NETKIT_L2 = 0x0
- NETKIT_L3 = 0x1
IFLA_NETKIT_UNSPEC = 0x0
IFLA_NETKIT_PEER_INFO = 0x1
IFLA_NETKIT_PRIMARY = 0x2
@@ -1796,6 +1790,7 @@ const (
IFLA_VXLAN_DF = 0x1d
IFLA_VXLAN_VNIFILTER = 0x1e
IFLA_VXLAN_LOCALBYPASS = 0x1f
+ IFLA_VXLAN_LABEL_POLICY = 0x20
IFLA_GENEVE_UNSPEC = 0x0
IFLA_GENEVE_ID = 0x1
IFLA_GENEVE_REMOTE = 0x2
@@ -1825,6 +1820,8 @@ const (
IFLA_GTP_ROLE = 0x4
IFLA_GTP_CREATE_SOCKETS = 0x5
IFLA_GTP_RESTART_COUNT = 0x6
+ IFLA_GTP_LOCAL = 0x7
+ IFLA_GTP_LOCAL6 = 0x8
IFLA_BOND_UNSPEC = 0x0
IFLA_BOND_MODE = 0x1
IFLA_BOND_ACTIVE_SLAVE = 0x2
@@ -1857,6 +1854,7 @@ const (
IFLA_BOND_AD_LACP_ACTIVE = 0x1d
IFLA_BOND_MISSED_MAX = 0x1e
IFLA_BOND_NS_IP6_TARGET = 0x1f
+ IFLA_BOND_COUPLED_CONTROL = 0x20
IFLA_BOND_AD_INFO_UNSPEC = 0x0
IFLA_BOND_AD_INFO_AGGREGATOR = 0x1
IFLA_BOND_AD_INFO_NUM_PORTS = 0x2
@@ -1925,6 +1923,7 @@ const (
IFLA_HSR_SEQ_NR = 0x5
IFLA_HSR_VERSION = 0x6
IFLA_HSR_PROTOCOL = 0x7
+ IFLA_HSR_INTERLINK = 0x8
IFLA_STATS_UNSPEC = 0x0
IFLA_STATS_LINK_64 = 0x1
IFLA_STATS_LINK_XSTATS = 0x2
@@ -1977,6 +1976,15 @@ const (
IFLA_DSA_MASTER = 0x1
)
+const (
+ NETKIT_NEXT = -0x1
+ NETKIT_PASS = 0x0
+ NETKIT_DROP = 0x2
+ NETKIT_REDIRECT = 0x7
+ NETKIT_L2 = 0x0
+ NETKIT_L3 = 0x1
+)
+
const (
NF_INET_PRE_ROUTING = 0x0
NF_INET_LOCAL_IN = 0x1
@@ -2586,8 +2594,8 @@ const (
SOF_TIMESTAMPING_BIND_PHC = 0x8000
SOF_TIMESTAMPING_OPT_ID_TCP = 0x10000
- SOF_TIMESTAMPING_LAST = 0x10000
- SOF_TIMESTAMPING_MASK = 0x1ffff
+ SOF_TIMESTAMPING_LAST = 0x20000
+ SOF_TIMESTAMPING_MASK = 0x3ffff
SCM_TSTAMP_SND = 0x0
SCM_TSTAMP_SCHED = 0x1
@@ -3533,7 +3541,7 @@ type Nhmsg struct {
type NexthopGrp struct {
Id uint32
Weight uint8
- Resvd1 uint8
+ High uint8
Resvd2 uint16
}
@@ -3794,7 +3802,7 @@ const (
ETHTOOL_MSG_PSE_GET = 0x24
ETHTOOL_MSG_PSE_SET = 0x25
ETHTOOL_MSG_RSS_GET = 0x26
- ETHTOOL_MSG_USER_MAX = 0x2c
+ ETHTOOL_MSG_USER_MAX = 0x2d
ETHTOOL_MSG_KERNEL_NONE = 0x0
ETHTOOL_MSG_STRSET_GET_REPLY = 0x1
ETHTOOL_MSG_LINKINFO_GET_REPLY = 0x2
@@ -3834,7 +3842,7 @@ const (
ETHTOOL_MSG_MODULE_NTF = 0x24
ETHTOOL_MSG_PSE_GET_REPLY = 0x25
ETHTOOL_MSG_RSS_GET_REPLY = 0x26
- ETHTOOL_MSG_KERNEL_MAX = 0x2c
+ ETHTOOL_MSG_KERNEL_MAX = 0x2e
ETHTOOL_FLAG_COMPACT_BITSETS = 0x1
ETHTOOL_FLAG_OMIT_REPLY = 0x2
ETHTOOL_FLAG_STATS = 0x4
@@ -3842,7 +3850,7 @@ const (
ETHTOOL_A_HEADER_DEV_INDEX = 0x1
ETHTOOL_A_HEADER_DEV_NAME = 0x2
ETHTOOL_A_HEADER_FLAGS = 0x3
- ETHTOOL_A_HEADER_MAX = 0x3
+ ETHTOOL_A_HEADER_MAX = 0x4
ETHTOOL_A_BITSET_BIT_UNSPEC = 0x0
ETHTOOL_A_BITSET_BIT_INDEX = 0x1
ETHTOOL_A_BITSET_BIT_NAME = 0x2
@@ -4023,11 +4031,11 @@ const (
ETHTOOL_A_CABLE_RESULT_UNSPEC = 0x0
ETHTOOL_A_CABLE_RESULT_PAIR = 0x1
ETHTOOL_A_CABLE_RESULT_CODE = 0x2
- ETHTOOL_A_CABLE_RESULT_MAX = 0x2
+ ETHTOOL_A_CABLE_RESULT_MAX = 0x3
ETHTOOL_A_CABLE_FAULT_LENGTH_UNSPEC = 0x0
ETHTOOL_A_CABLE_FAULT_LENGTH_PAIR = 0x1
ETHTOOL_A_CABLE_FAULT_LENGTH_CM = 0x2
- ETHTOOL_A_CABLE_FAULT_LENGTH_MAX = 0x2
+ ETHTOOL_A_CABLE_FAULT_LENGTH_MAX = 0x3
ETHTOOL_A_CABLE_TEST_NTF_STATUS_UNSPEC = 0x0
ETHTOOL_A_CABLE_TEST_NTF_STATUS_STARTED = 0x1
ETHTOOL_A_CABLE_TEST_NTF_STATUS_COMPLETED = 0x2
@@ -4110,6 +4118,107 @@ type EthtoolDrvinfo struct {
Regdump_len uint32
}
+type EthtoolTsInfo struct {
+ Cmd uint32
+ So_timestamping uint32
+ Phc_index int32
+ Tx_types uint32
+ Tx_reserved [3]uint32
+ Rx_filters uint32
+ Rx_reserved [3]uint32
+}
+
+type HwTstampConfig struct {
+ Flags int32
+ Tx_type int32
+ Rx_filter int32
+}
+
+const (
+ HWTSTAMP_FILTER_NONE = 0x0
+ HWTSTAMP_FILTER_ALL = 0x1
+ HWTSTAMP_FILTER_SOME = 0x2
+ HWTSTAMP_FILTER_PTP_V1_L4_EVENT = 0x3
+ HWTSTAMP_FILTER_PTP_V2_L4_EVENT = 0x6
+ HWTSTAMP_FILTER_PTP_V2_L2_EVENT = 0x9
+ HWTSTAMP_FILTER_PTP_V2_EVENT = 0xc
+)
+
+const (
+ HWTSTAMP_TX_OFF = 0x0
+ HWTSTAMP_TX_ON = 0x1
+ HWTSTAMP_TX_ONESTEP_SYNC = 0x2
+)
+
+type (
+ PtpClockCaps struct {
+ Max_adj int32
+ N_alarm int32
+ N_ext_ts int32
+ N_per_out int32
+ Pps int32
+ N_pins int32
+ Cross_timestamping int32
+ Adjust_phase int32
+ Max_phase_adj int32
+ Rsv [11]int32
+ }
+ PtpClockTime struct {
+ Sec int64
+ Nsec uint32
+ Reserved uint32
+ }
+ PtpExttsEvent struct {
+ T PtpClockTime
+ Index uint32
+ Flags uint32
+ Rsv [2]uint32
+ }
+ PtpExttsRequest struct {
+ Index uint32
+ Flags uint32
+ Rsv [2]uint32
+ }
+ PtpPeroutRequest struct {
+ StartOrPhase PtpClockTime
+ Period PtpClockTime
+ Index uint32
+ Flags uint32
+ On PtpClockTime
+ }
+ PtpPinDesc struct {
+ Name [64]byte
+ Index uint32
+ Func uint32
+ Chan uint32
+ Rsv [5]uint32
+ }
+ PtpSysOffset struct {
+ Samples uint32
+ Rsv [3]uint32
+ Ts [51]PtpClockTime
+ }
+ PtpSysOffsetExtended struct {
+ Samples uint32
+ Clockid int32
+ Rsv [2]uint32
+ Ts [25][3]PtpClockTime
+ }
+ PtpSysOffsetPrecise struct {
+ Device PtpClockTime
+ Realtime PtpClockTime
+ Monoraw PtpClockTime
+ Rsv [4]uint32
+ }
+)
+
+const (
+ PTP_PF_NONE = 0x0
+ PTP_PF_EXTTS = 0x1
+ PTP_PF_PEROUT = 0x2
+ PTP_PF_PHYSYNC = 0x3
+)
+
type (
HIDRawReportDescriptor struct {
Size uint32
@@ -4291,6 +4400,7 @@ const (
type LandlockRulesetAttr struct {
Access_fs uint64
Access_net uint64
+ Scoped uint64
}
type LandlockPathBeneathAttr struct {
@@ -4637,7 +4747,7 @@ const (
NL80211_ATTR_MAC_HINT = 0xc8
NL80211_ATTR_MAC_MASK = 0xd7
NL80211_ATTR_MAX_AP_ASSOC_STA = 0xca
- NL80211_ATTR_MAX = 0x14c
+ NL80211_ATTR_MAX = 0x14d
NL80211_ATTR_MAX_CRIT_PROT_DURATION = 0xb4
NL80211_ATTR_MAX_CSA_COUNTERS = 0xce
NL80211_ATTR_MAX_MATCH_SETS = 0x85
@@ -5409,7 +5519,7 @@ const (
NL80211_MNTR_FLAG_CONTROL = 0x3
NL80211_MNTR_FLAG_COOK_FRAMES = 0x5
NL80211_MNTR_FLAG_FCSFAIL = 0x1
- NL80211_MNTR_FLAG_MAX = 0x6
+ NL80211_MNTR_FLAG_MAX = 0x7
NL80211_MNTR_FLAG_OTHER_BSS = 0x4
NL80211_MNTR_FLAG_PLCPFAIL = 0x2
NL80211_MPATH_FLAG_ACTIVE = 0x1
@@ -6064,3 +6174,5 @@ type SockDiagReq struct {
Family uint8
Protocol uint8
}
+
+const RTM_NEWNVLAN = 0x70
diff --git a/vendor/golang.org/x/sys/unix/ztypes_zos_s390x.go b/vendor/golang.org/x/sys/unix/ztypes_zos_s390x.go
index d9a13af4684..2e5d5a44357 100644
--- a/vendor/golang.org/x/sys/unix/ztypes_zos_s390x.go
+++ b/vendor/golang.org/x/sys/unix/ztypes_zos_s390x.go
@@ -377,6 +377,12 @@ type Flock_t struct {
Pid int32
}
+type F_cnvrt struct {
+ Cvtcmd int32
+ Pccsid int16
+ Fccsid int16
+}
+
type Termios struct {
Cflag uint32
Iflag uint32
diff --git a/vendor/golang.org/x/sys/windows/dll_windows.go b/vendor/golang.org/x/sys/windows/dll_windows.go
index 4e613cf6335..3ca814f54d4 100644
--- a/vendor/golang.org/x/sys/windows/dll_windows.go
+++ b/vendor/golang.org/x/sys/windows/dll_windows.go
@@ -43,8 +43,8 @@ type DLL struct {
// LoadDLL loads DLL file into memory.
//
// Warning: using LoadDLL without an absolute path name is subject to
-// DLL preloading attacks. To safely load a system DLL, use LazyDLL
-// with System set to true, or use LoadLibraryEx directly.
+// DLL preloading attacks. To safely load a system DLL, use [NewLazySystemDLL],
+// or use [LoadLibraryEx] directly.
func LoadDLL(name string) (dll *DLL, err error) {
namep, err := UTF16PtrFromString(name)
if err != nil {
@@ -271,6 +271,9 @@ func (d *LazyDLL) NewProc(name string) *LazyProc {
}
// NewLazyDLL creates new LazyDLL associated with DLL file.
+//
+// Warning: using NewLazyDLL without an absolute path name is subject to
+// DLL preloading attacks. To safely load a system DLL, use [NewLazySystemDLL].
func NewLazyDLL(name string) *LazyDLL {
return &LazyDLL{Name: name}
}
@@ -410,7 +413,3 @@ func loadLibraryEx(name string, system bool) (*DLL, error) {
}
return &DLL{Name: name, Handle: h}, nil
}
-
-type errString string
-
-func (s errString) Error() string { return string(s) }
diff --git a/vendor/golang.org/x/sys/windows/syscall_windows.go b/vendor/golang.org/x/sys/windows/syscall_windows.go
index 5cee9a3143f..4a325438685 100644
--- a/vendor/golang.org/x/sys/windows/syscall_windows.go
+++ b/vendor/golang.org/x/sys/windows/syscall_windows.go
@@ -168,6 +168,8 @@ func NewCallbackCDecl(fn interface{}) uintptr {
//sys CreateNamedPipe(name *uint16, flags uint32, pipeMode uint32, maxInstances uint32, outSize uint32, inSize uint32, defaultTimeout uint32, sa *SecurityAttributes) (handle Handle, err error) [failretval==InvalidHandle] = CreateNamedPipeW
//sys ConnectNamedPipe(pipe Handle, overlapped *Overlapped) (err error)
//sys DisconnectNamedPipe(pipe Handle) (err error)
+//sys GetNamedPipeClientProcessId(pipe Handle, clientProcessID *uint32) (err error)
+//sys GetNamedPipeServerProcessId(pipe Handle, serverProcessID *uint32) (err error)
//sys GetNamedPipeInfo(pipe Handle, flags *uint32, outSize *uint32, inSize *uint32, maxInstances *uint32) (err error)
//sys GetNamedPipeHandleState(pipe Handle, state *uint32, curInstances *uint32, maxCollectionCount *uint32, collectDataTimeout *uint32, userName *uint16, maxUserNameSize uint32) (err error) = GetNamedPipeHandleStateW
//sys SetNamedPipeHandleState(pipe Handle, state *uint32, maxCollectionCount *uint32, collectDataTimeout *uint32) (err error) = SetNamedPipeHandleState
@@ -725,20 +727,12 @@ func DurationSinceBoot() time.Duration {
}
func Ftruncate(fd Handle, length int64) (err error) {
- curoffset, e := Seek(fd, 0, 1)
- if e != nil {
- return e
- }
- defer Seek(fd, curoffset, 0)
- _, e = Seek(fd, length, 0)
- if e != nil {
- return e
+ type _FILE_END_OF_FILE_INFO struct {
+ EndOfFile int64
}
- e = SetEndOfFile(fd)
- if e != nil {
- return e
- }
- return nil
+ var info _FILE_END_OF_FILE_INFO
+ info.EndOfFile = length
+ return SetFileInformationByHandle(fd, FileEndOfFileInfo, (*byte)(unsafe.Pointer(&info)), uint32(unsafe.Sizeof(info)))
}
func Gettimeofday(tv *Timeval) (err error) {
@@ -894,6 +888,11 @@ const socket_error = uintptr(^uint32(0))
//sys GetACP() (acp uint32) = kernel32.GetACP
//sys MultiByteToWideChar(codePage uint32, dwFlags uint32, str *byte, nstr int32, wchar *uint16, nwchar int32) (nwrite int32, err error) = kernel32.MultiByteToWideChar
//sys getBestInterfaceEx(sockaddr unsafe.Pointer, pdwBestIfIndex *uint32) (errcode error) = iphlpapi.GetBestInterfaceEx
+//sys GetIfEntry2Ex(level uint32, row *MibIfRow2) (errcode error) = iphlpapi.GetIfEntry2Ex
+//sys GetUnicastIpAddressEntry(row *MibUnicastIpAddressRow) (errcode error) = iphlpapi.GetUnicastIpAddressEntry
+//sys NotifyIpInterfaceChange(family uint16, callback uintptr, callerContext unsafe.Pointer, initialNotification bool, notificationHandle *Handle) (errcode error) = iphlpapi.NotifyIpInterfaceChange
+//sys NotifyUnicastIpAddressChange(family uint16, callback uintptr, callerContext unsafe.Pointer, initialNotification bool, notificationHandle *Handle) (errcode error) = iphlpapi.NotifyUnicastIpAddressChange
+//sys CancelMibChangeNotify2(notificationHandle Handle) (errcode error) = iphlpapi.CancelMibChangeNotify2
// For testing: clients can set this flag to force
// creation of IPv6 sockets to return EAFNOSUPPORT.
@@ -1685,13 +1684,16 @@ func (s NTStatus) Error() string {
// do not use NTUnicodeString, and instead UTF16PtrFromString should be used for
// the more common *uint16 string type.
func NewNTUnicodeString(s string) (*NTUnicodeString, error) {
- var u NTUnicodeString
- s16, err := UTF16PtrFromString(s)
+ s16, err := UTF16FromString(s)
if err != nil {
return nil, err
}
- RtlInitUnicodeString(&u, s16)
- return &u, nil
+ n := uint16(len(s16) * 2)
+ return &NTUnicodeString{
+ Length: n - 2, // subtract 2 bytes for the NULL terminator
+ MaximumLength: n,
+ Buffer: &s16[0],
+ }, nil
}
// Slice returns a uint16 slice that aliases the data in the NTUnicodeString.
diff --git a/vendor/golang.org/x/sys/windows/types_windows.go b/vendor/golang.org/x/sys/windows/types_windows.go
index 7b97a154c95..9d138de5fed 100644
--- a/vendor/golang.org/x/sys/windows/types_windows.go
+++ b/vendor/golang.org/x/sys/windows/types_windows.go
@@ -176,6 +176,7 @@ const (
WAIT_FAILED = 0xFFFFFFFF
// Access rights for process.
+ PROCESS_ALL_ACCESS = 0xFFFF
PROCESS_CREATE_PROCESS = 0x0080
PROCESS_CREATE_THREAD = 0x0002
PROCESS_DUP_HANDLE = 0x0040
@@ -2203,6 +2204,132 @@ const (
IfOperStatusLowerLayerDown = 7
)
+const (
+ IF_MAX_PHYS_ADDRESS_LENGTH = 32
+ IF_MAX_STRING_SIZE = 256
+)
+
+// MIB_IF_ENTRY_LEVEL enumeration from netioapi.h or
+// https://learn.microsoft.com/en-us/windows/win32/api/netioapi/nf-netioapi-getifentry2ex.
+const (
+ MibIfEntryNormal = 0
+ MibIfEntryNormalWithoutStatistics = 2
+)
+
+// MIB_NOTIFICATION_TYPE enumeration from netioapi.h or
+// https://learn.microsoft.com/en-us/windows/win32/api/netioapi/ne-netioapi-mib_notification_type.
+const (
+ MibParameterNotification = 0
+ MibAddInstance = 1
+ MibDeleteInstance = 2
+ MibInitialNotification = 3
+)
+
+// MibIfRow2 stores information about a particular interface. See
+// https://learn.microsoft.com/en-us/windows/win32/api/netioapi/ns-netioapi-mib_if_row2.
+type MibIfRow2 struct {
+ InterfaceLuid uint64
+ InterfaceIndex uint32
+ InterfaceGuid GUID
+ Alias [IF_MAX_STRING_SIZE + 1]uint16
+ Description [IF_MAX_STRING_SIZE + 1]uint16
+ PhysicalAddressLength uint32
+ PhysicalAddress [IF_MAX_PHYS_ADDRESS_LENGTH]uint8
+ PermanentPhysicalAddress [IF_MAX_PHYS_ADDRESS_LENGTH]uint8
+ Mtu uint32
+ Type uint32
+ TunnelType uint32
+ MediaType uint32
+ PhysicalMediumType uint32
+ AccessType uint32
+ DirectionType uint32
+ InterfaceAndOperStatusFlags uint8
+ OperStatus uint32
+ AdminStatus uint32
+ MediaConnectState uint32
+ NetworkGuid GUID
+ ConnectionType uint32
+ TransmitLinkSpeed uint64
+ ReceiveLinkSpeed uint64
+ InOctets uint64
+ InUcastPkts uint64
+ InNUcastPkts uint64
+ InDiscards uint64
+ InErrors uint64
+ InUnknownProtos uint64
+ InUcastOctets uint64
+ InMulticastOctets uint64
+ InBroadcastOctets uint64
+ OutOctets uint64
+ OutUcastPkts uint64
+ OutNUcastPkts uint64
+ OutDiscards uint64
+ OutErrors uint64
+ OutUcastOctets uint64
+ OutMulticastOctets uint64
+ OutBroadcastOctets uint64
+ OutQLen uint64
+}
+
+// MIB_UNICASTIPADDRESS_ROW stores information about a unicast IP address. See
+// https://learn.microsoft.com/en-us/windows/win32/api/netioapi/ns-netioapi-mib_unicastipaddress_row.
+type MibUnicastIpAddressRow struct {
+ Address RawSockaddrInet6 // SOCKADDR_INET union
+ InterfaceLuid uint64
+ InterfaceIndex uint32
+ PrefixOrigin uint32
+ SuffixOrigin uint32
+ ValidLifetime uint32
+ PreferredLifetime uint32
+ OnLinkPrefixLength uint8
+ SkipAsSource uint8
+ DadState uint32
+ ScopeId uint32
+ CreationTimeStamp Filetime
+}
+
+const ScopeLevelCount = 16
+
+// MIB_IPINTERFACE_ROW stores interface management information for a particular IP address family on a network interface.
+// See https://learn.microsoft.com/en-us/windows/win32/api/netioapi/ns-netioapi-mib_ipinterface_row.
+type MibIpInterfaceRow struct {
+ Family uint16
+ InterfaceLuid uint64
+ InterfaceIndex uint32
+ MaxReassemblySize uint32
+ InterfaceIdentifier uint64
+ MinRouterAdvertisementInterval uint32
+ MaxRouterAdvertisementInterval uint32
+ AdvertisingEnabled uint8
+ ForwardingEnabled uint8
+ WeakHostSend uint8
+ WeakHostReceive uint8
+ UseAutomaticMetric uint8
+ UseNeighborUnreachabilityDetection uint8
+ ManagedAddressConfigurationSupported uint8
+ OtherStatefulConfigurationSupported uint8
+ AdvertiseDefaultRoute uint8
+ RouterDiscoveryBehavior uint32
+ DadTransmits uint32
+ BaseReachableTime uint32
+ RetransmitTime uint32
+ PathMtuDiscoveryTimeout uint32
+ LinkLocalAddressBehavior uint32
+ LinkLocalAddressTimeout uint32
+ ZoneIndices [ScopeLevelCount]uint32
+ SitePrefixLength uint32
+ Metric uint32
+ NlMtu uint32
+ Connected uint8
+ SupportsWakeUpPatterns uint8
+ SupportsNeighborDiscovery uint8
+ SupportsRouterDiscovery uint8
+ ReachableTime uint32
+ TransmitOffload uint32
+ ReceiveOffload uint32
+ DisableDefaultRoutes uint8
+}
+
// Console related constants used for the mode parameter to SetConsoleMode. See
// https://docs.microsoft.com/en-us/windows/console/setconsolemode for details.
diff --git a/vendor/golang.org/x/sys/windows/zsyscall_windows.go b/vendor/golang.org/x/sys/windows/zsyscall_windows.go
index 4c2e1bdc01e..01c0716c2c4 100644
--- a/vendor/golang.org/x/sys/windows/zsyscall_windows.go
+++ b/vendor/golang.org/x/sys/windows/zsyscall_windows.go
@@ -181,10 +181,15 @@ var (
procDnsRecordListFree = moddnsapi.NewProc("DnsRecordListFree")
procDwmGetWindowAttribute = moddwmapi.NewProc("DwmGetWindowAttribute")
procDwmSetWindowAttribute = moddwmapi.NewProc("DwmSetWindowAttribute")
+ procCancelMibChangeNotify2 = modiphlpapi.NewProc("CancelMibChangeNotify2")
procGetAdaptersAddresses = modiphlpapi.NewProc("GetAdaptersAddresses")
procGetAdaptersInfo = modiphlpapi.NewProc("GetAdaptersInfo")
procGetBestInterfaceEx = modiphlpapi.NewProc("GetBestInterfaceEx")
procGetIfEntry = modiphlpapi.NewProc("GetIfEntry")
+ procGetIfEntry2Ex = modiphlpapi.NewProc("GetIfEntry2Ex")
+ procGetUnicastIpAddressEntry = modiphlpapi.NewProc("GetUnicastIpAddressEntry")
+ procNotifyIpInterfaceChange = modiphlpapi.NewProc("NotifyIpInterfaceChange")
+ procNotifyUnicastIpAddressChange = modiphlpapi.NewProc("NotifyUnicastIpAddressChange")
procAddDllDirectory = modkernel32.NewProc("AddDllDirectory")
procAssignProcessToJobObject = modkernel32.NewProc("AssignProcessToJobObject")
procCancelIo = modkernel32.NewProc("CancelIo")
@@ -275,8 +280,10 @@ var (
procGetMaximumProcessorCount = modkernel32.NewProc("GetMaximumProcessorCount")
procGetModuleFileNameW = modkernel32.NewProc("GetModuleFileNameW")
procGetModuleHandleExW = modkernel32.NewProc("GetModuleHandleExW")
+ procGetNamedPipeClientProcessId = modkernel32.NewProc("GetNamedPipeClientProcessId")
procGetNamedPipeHandleStateW = modkernel32.NewProc("GetNamedPipeHandleStateW")
procGetNamedPipeInfo = modkernel32.NewProc("GetNamedPipeInfo")
+ procGetNamedPipeServerProcessId = modkernel32.NewProc("GetNamedPipeServerProcessId")
procGetOverlappedResult = modkernel32.NewProc("GetOverlappedResult")
procGetPriorityClass = modkernel32.NewProc("GetPriorityClass")
procGetProcAddress = modkernel32.NewProc("GetProcAddress")
@@ -1606,6 +1613,14 @@ func DwmSetWindowAttribute(hwnd HWND, attribute uint32, value unsafe.Pointer, si
return
}
+func CancelMibChangeNotify2(notificationHandle Handle) (errcode error) {
+ r0, _, _ := syscall.Syscall(procCancelMibChangeNotify2.Addr(), 1, uintptr(notificationHandle), 0, 0)
+ if r0 != 0 {
+ errcode = syscall.Errno(r0)
+ }
+ return
+}
+
func GetAdaptersAddresses(family uint32, flags uint32, reserved uintptr, adapterAddresses *IpAdapterAddresses, sizePointer *uint32) (errcode error) {
r0, _, _ := syscall.Syscall6(procGetAdaptersAddresses.Addr(), 5, uintptr(family), uintptr(flags), uintptr(reserved), uintptr(unsafe.Pointer(adapterAddresses)), uintptr(unsafe.Pointer(sizePointer)), 0)
if r0 != 0 {
@@ -1638,6 +1653,46 @@ func GetIfEntry(pIfRow *MibIfRow) (errcode error) {
return
}
+func GetIfEntry2Ex(level uint32, row *MibIfRow2) (errcode error) {
+ r0, _, _ := syscall.Syscall(procGetIfEntry2Ex.Addr(), 2, uintptr(level), uintptr(unsafe.Pointer(row)), 0)
+ if r0 != 0 {
+ errcode = syscall.Errno(r0)
+ }
+ return
+}
+
+func GetUnicastIpAddressEntry(row *MibUnicastIpAddressRow) (errcode error) {
+ r0, _, _ := syscall.Syscall(procGetUnicastIpAddressEntry.Addr(), 1, uintptr(unsafe.Pointer(row)), 0, 0)
+ if r0 != 0 {
+ errcode = syscall.Errno(r0)
+ }
+ return
+}
+
+func NotifyIpInterfaceChange(family uint16, callback uintptr, callerContext unsafe.Pointer, initialNotification bool, notificationHandle *Handle) (errcode error) {
+ var _p0 uint32
+ if initialNotification {
+ _p0 = 1
+ }
+ r0, _, _ := syscall.Syscall6(procNotifyIpInterfaceChange.Addr(), 5, uintptr(family), uintptr(callback), uintptr(callerContext), uintptr(_p0), uintptr(unsafe.Pointer(notificationHandle)), 0)
+ if r0 != 0 {
+ errcode = syscall.Errno(r0)
+ }
+ return
+}
+
+func NotifyUnicastIpAddressChange(family uint16, callback uintptr, callerContext unsafe.Pointer, initialNotification bool, notificationHandle *Handle) (errcode error) {
+ var _p0 uint32
+ if initialNotification {
+ _p0 = 1
+ }
+ r0, _, _ := syscall.Syscall6(procNotifyUnicastIpAddressChange.Addr(), 5, uintptr(family), uintptr(callback), uintptr(callerContext), uintptr(_p0), uintptr(unsafe.Pointer(notificationHandle)), 0)
+ if r0 != 0 {
+ errcode = syscall.Errno(r0)
+ }
+ return
+}
+
func AddDllDirectory(path *uint16) (cookie uintptr, err error) {
r0, _, e1 := syscall.Syscall(procAddDllDirectory.Addr(), 1, uintptr(unsafe.Pointer(path)), 0, 0)
cookie = uintptr(r0)
@@ -2393,6 +2448,14 @@ func GetModuleHandleEx(flags uint32, moduleName *uint16, module *Handle) (err er
return
}
+func GetNamedPipeClientProcessId(pipe Handle, clientProcessID *uint32) (err error) {
+ r1, _, e1 := syscall.Syscall(procGetNamedPipeClientProcessId.Addr(), 2, uintptr(pipe), uintptr(unsafe.Pointer(clientProcessID)), 0)
+ if r1 == 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
func GetNamedPipeHandleState(pipe Handle, state *uint32, curInstances *uint32, maxCollectionCount *uint32, collectDataTimeout *uint32, userName *uint16, maxUserNameSize uint32) (err error) {
r1, _, e1 := syscall.Syscall9(procGetNamedPipeHandleStateW.Addr(), 7, uintptr(pipe), uintptr(unsafe.Pointer(state)), uintptr(unsafe.Pointer(curInstances)), uintptr(unsafe.Pointer(maxCollectionCount)), uintptr(unsafe.Pointer(collectDataTimeout)), uintptr(unsafe.Pointer(userName)), uintptr(maxUserNameSize), 0, 0)
if r1 == 0 {
@@ -2409,6 +2472,14 @@ func GetNamedPipeInfo(pipe Handle, flags *uint32, outSize *uint32, inSize *uint3
return
}
+func GetNamedPipeServerProcessId(pipe Handle, serverProcessID *uint32) (err error) {
+ r1, _, e1 := syscall.Syscall(procGetNamedPipeServerProcessId.Addr(), 2, uintptr(pipe), uintptr(unsafe.Pointer(serverProcessID)), 0)
+ if r1 == 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
func GetOverlappedResult(handle Handle, overlapped *Overlapped, done *uint32, wait bool) (err error) {
var _p0 uint32
if wait {
diff --git a/vendor/golang.org/x/term/README.md b/vendor/golang.org/x/term/README.md
index d03d0aefef6..05ff623f94f 100644
--- a/vendor/golang.org/x/term/README.md
+++ b/vendor/golang.org/x/term/README.md
@@ -4,16 +4,13 @@
This repository provides Go terminal and console support packages.
-## Download/Install
-
-The easiest way to install is to run `go get -u golang.org/x/term`. You can
-also manually git clone the repository to `$GOPATH/src/golang.org/x/term`.
-
## Report Issues / Send Patches
This repository uses Gerrit for code changes. To learn how to submit changes to
-this repository, see https://golang.org/doc/contribute.html.
+this repository, see https://go.dev/doc/contribute.
+
+The git repository is https://go.googlesource.com/term.
The main issue tracker for the term repository is located at
-https://github.com/golang/go/issues. Prefix your issue with "x/term:" in the
+https://go.dev/issues. Prefix your issue with "x/term:" in the
subject line, so it is easy to find.
diff --git a/vendor/golang.org/x/tools/LICENSE b/vendor/golang.org/x/tools/LICENSE
deleted file mode 100644
index 2a7cf70da6e..00000000000
--- a/vendor/golang.org/x/tools/LICENSE
+++ /dev/null
@@ -1,27 +0,0 @@
-Copyright 2009 The Go Authors.
-
-Redistribution and use in source and binary forms, with or without
-modification, are permitted provided that the following conditions are
-met:
-
- * Redistributions of source code must retain the above copyright
-notice, this list of conditions and the following disclaimer.
- * Redistributions in binary form must reproduce the above
-copyright notice, this list of conditions and the following disclaimer
-in the documentation and/or other materials provided with the
-distribution.
- * Neither the name of Google LLC nor the names of its
-contributors may be used to endorse or promote products derived from
-this software without specific prior written permission.
-
-THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
diff --git a/vendor/golang.org/x/tools/PATENTS b/vendor/golang.org/x/tools/PATENTS
deleted file mode 100644
index 733099041f8..00000000000
--- a/vendor/golang.org/x/tools/PATENTS
+++ /dev/null
@@ -1,22 +0,0 @@
-Additional IP Rights Grant (Patents)
-
-"This implementation" means the copyrightable works distributed by
-Google as part of the Go project.
-
-Google hereby grants to You a perpetual, worldwide, non-exclusive,
-no-charge, royalty-free, irrevocable (except as stated in this section)
-patent license to make, have made, use, offer to sell, sell, import,
-transfer and otherwise run, modify and propagate the contents of this
-implementation of Go, where such license applies only to those patent
-claims, both currently owned or controlled by Google and acquired in
-the future, licensable by Google that are necessarily infringed by this
-implementation of Go. This grant does not include claims that would be
-infringed only as a consequence of further modification of this
-implementation. If you or your agent or exclusive licensee institute or
-order or agree to the institution of patent litigation against any
-entity (including a cross-claim or counterclaim in a lawsuit) alleging
-that this implementation of Go or any code incorporated within this
-implementation of Go constitutes direct or contributory patent
-infringement, or inducement of patent infringement, then any patent
-rights granted to you under this License for this implementation of Go
-shall terminate as of the date such litigation is filed.
diff --git a/vendor/golang.org/x/tools/cmd/stringer/stringer.go b/vendor/golang.org/x/tools/cmd/stringer/stringer.go
deleted file mode 100644
index 94eaee844a4..00000000000
--- a/vendor/golang.org/x/tools/cmd/stringer/stringer.go
+++ /dev/null
@@ -1,739 +0,0 @@
-// Copyright 2014 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-// Stringer is a tool to automate the creation of methods that satisfy the fmt.Stringer
-// interface. Given the name of a (signed or unsigned) integer type T that has constants
-// defined, stringer will create a new self-contained Go source file implementing
-//
-// func (t T) String() string
-//
-// The file is created in the same package and directory as the package that defines T.
-// It has helpful defaults designed for use with go generate.
-//
-// Stringer works best with constants that are consecutive values such as created using iota,
-// but creates good code regardless. In the future it might also provide custom support for
-// constant sets that are bit patterns.
-//
-// For example, given this snippet,
-//
-// package painkiller
-//
-// type Pill int
-//
-// const (
-// Placebo Pill = iota
-// Aspirin
-// Ibuprofen
-// Paracetamol
-// Acetaminophen = Paracetamol
-// )
-//
-// running this command
-//
-// stringer -type=Pill
-//
-// in the same directory will create the file pill_string.go, in package painkiller,
-// containing a definition of
-//
-// func (Pill) String() string
-//
-// That method will translate the value of a Pill constant to the string representation
-// of the respective constant name, so that the call fmt.Print(painkiller.Aspirin) will
-// print the string "Aspirin".
-//
-// Typically this process would be run using go generate, like this:
-//
-// //go:generate stringer -type=Pill
-//
-// If multiple constants have the same value, the lexically first matching name will
-// be used (in the example, Acetaminophen will print as "Paracetamol").
-//
-// With no arguments, it processes the package in the current directory.
-// Otherwise, the arguments must name a single directory holding a Go package
-// or a set of Go source files that represent a single Go package.
-//
-// The -type flag accepts a comma-separated list of types so a single run can
-// generate methods for multiple types. The default output file is t_string.go,
-// where t is the lower-cased name of the first type listed. It can be overridden
-// with the -output flag.
-//
-// Types can also be declared in tests, in which case type declarations in the
-// non-test package or its test variant are preferred over types defined in the
-// package with suffix "_test".
-// The default output file for type declarations in tests is t_string_test.go with t picked as above.
-//
-// The -linecomment flag tells stringer to generate the text of any line comment, trimmed
-// of leading spaces, instead of the constant name. For instance, if the constants above had a
-// Pill prefix, one could write
-//
-// PillAspirin // Aspirin
-//
-// to suppress it in the output.
-
-//go:debug gotypesalias=0
-
-package main // import "golang.org/x/tools/cmd/stringer"
-
-import (
- "bytes"
- "flag"
- "fmt"
- "go/ast"
- "go/constant"
- "go/format"
- "go/token"
- "go/types"
- "log"
- "os"
- "path/filepath"
- "sort"
- "strings"
-
- "golang.org/x/tools/go/packages"
-)
-
-var (
- typeNames = flag.String("type", "", "comma-separated list of type names; must be set")
- output = flag.String("output", "", "output file name; default srcdir/_string.go")
- trimprefix = flag.String("trimprefix", "", "trim the `prefix` from the generated constant names")
- linecomment = flag.Bool("linecomment", false, "use line comment text as printed text when present")
- buildTags = flag.String("tags", "", "comma-separated list of build tags to apply")
-)
-
-// Usage is a replacement usage function for the flags package.
-func Usage() {
- fmt.Fprintf(os.Stderr, "Usage of stringer:\n")
- fmt.Fprintf(os.Stderr, "\tstringer [flags] -type T [directory]\n")
- fmt.Fprintf(os.Stderr, "\tstringer [flags] -type T files... # Must be a single package\n")
- fmt.Fprintf(os.Stderr, "For more information, see:\n")
- fmt.Fprintf(os.Stderr, "\thttps://pkg.go.dev/golang.org/x/tools/cmd/stringer\n")
- fmt.Fprintf(os.Stderr, "Flags:\n")
- flag.PrintDefaults()
-}
-
-func main() {
- log.SetFlags(0)
- log.SetPrefix("stringer: ")
- flag.Usage = Usage
- flag.Parse()
- if len(*typeNames) == 0 {
- flag.Usage()
- os.Exit(2)
- }
- types := strings.Split(*typeNames, ",")
- var tags []string
- if len(*buildTags) > 0 {
- tags = strings.Split(*buildTags, ",")
- }
-
- // We accept either one directory or a list of files. Which do we have?
- args := flag.Args()
- if len(args) == 0 {
- // Default: process whole package in current directory.
- args = []string{"."}
- }
-
- // Parse the package once.
- var dir string
- // TODO(suzmue): accept other patterns for packages (directories, list of files, import paths, etc).
- if len(args) == 1 && isDirectory(args[0]) {
- dir = args[0]
- } else {
- if len(tags) != 0 {
- log.Fatal("-tags option applies only to directories, not when files are specified")
- }
- dir = filepath.Dir(args[0])
- }
-
- // For each type, generate code in the first package where the type is declared.
- // The order of packages is as follows:
- // package x
- // package x compiled for tests
- // package x_test
- //
- // Each package pass could result in a separate generated file.
- // These files must have the same package and test/not-test nature as the types
- // from which they were generated.
- //
- // Types will be excluded when generated, to avoid repetitions.
- pkgs := loadPackages(args, tags, *trimprefix, *linecomment, nil /* logf */)
- sort.Slice(pkgs, func(i, j int) bool {
- // Put x_test packages last.
- iTest := strings.HasSuffix(pkgs[i].name, "_test")
- jTest := strings.HasSuffix(pkgs[j].name, "_test")
- if iTest != jTest {
- return !iTest
- }
-
- return len(pkgs[i].files) < len(pkgs[j].files)
- })
- for _, pkg := range pkgs {
- g := Generator{
- pkg: pkg,
- }
-
- // Print the header and package clause.
- g.Printf("// Code generated by \"stringer %s\"; DO NOT EDIT.\n", strings.Join(os.Args[1:], " "))
- g.Printf("\n")
- g.Printf("package %s", g.pkg.name)
- g.Printf("\n")
- g.Printf("import \"strconv\"\n") // Used by all methods.
-
- // Run generate for types that can be found. Keep the rest for the remainingTypes iteration.
- var foundTypes, remainingTypes []string
- for _, typeName := range types {
- values := findValues(typeName, pkg)
- if len(values) > 0 {
- g.generate(typeName, values)
- foundTypes = append(foundTypes, typeName)
- } else {
- remainingTypes = append(remainingTypes, typeName)
- }
- }
- if len(foundTypes) == 0 {
- // This package didn't have any of the relevant types, skip writing a file.
- continue
- }
- if len(remainingTypes) > 0 && output != nil && *output != "" {
- log.Fatalf("cannot write to single file (-output=%q) when matching types are found in multiple packages", *output)
- }
- types = remainingTypes
-
- // Format the output.
- src := g.format()
-
- // Write to file.
- outputName := *output
- if outputName == "" {
- // Type names will be unique across packages since only the first
- // match is picked.
- // So there won't be collisions between a package compiled for tests
- // and the separate package of tests (package foo_test).
- outputName = filepath.Join(dir, baseName(pkg, foundTypes[0]))
- }
- err := os.WriteFile(outputName, src, 0644)
- if err != nil {
- log.Fatalf("writing output: %s", err)
- }
- }
-
- if len(types) > 0 {
- log.Fatalf("no values defined for types: %s", strings.Join(types, ","))
- }
-}
-
-// baseName that will put the generated code together with pkg.
-func baseName(pkg *Package, typename string) string {
- suffix := "string.go"
- if pkg.hasTestFiles {
- suffix = "string_test.go"
- }
- return fmt.Sprintf("%s_%s", strings.ToLower(typename), suffix)
-}
-
-// isDirectory reports whether the named file is a directory.
-func isDirectory(name string) bool {
- info, err := os.Stat(name)
- if err != nil {
- log.Fatal(err)
- }
- return info.IsDir()
-}
-
-// Generator holds the state of the analysis. Primarily used to buffer
-// the output for format.Source.
-type Generator struct {
- buf bytes.Buffer // Accumulated output.
- pkg *Package // Package we are scanning.
-
- logf func(format string, args ...interface{}) // test logging hook; nil when not testing
-}
-
-func (g *Generator) Printf(format string, args ...interface{}) {
- fmt.Fprintf(&g.buf, format, args...)
-}
-
-// File holds a single parsed file and associated data.
-type File struct {
- pkg *Package // Package to which this file belongs.
- file *ast.File // Parsed AST.
- // These fields are reset for each type being generated.
- typeName string // Name of the constant type.
- values []Value // Accumulator for constant values of that type.
-
- trimPrefix string
- lineComment bool
-}
-
-type Package struct {
- name string
- defs map[*ast.Ident]types.Object
- files []*File
- hasTestFiles bool
-}
-
-// loadPackages analyzes the single package constructed from the patterns and tags.
-// loadPackages exits if there is an error.
-//
-// Returns all variants (such as tests) of the package.
-//
-// logf is a test logging hook. It can be nil when not testing.
-func loadPackages(
- patterns, tags []string,
- trimPrefix string, lineComment bool,
- logf func(format string, args ...interface{}),
-) []*Package {
- cfg := &packages.Config{
- Mode: packages.NeedName | packages.NeedTypes | packages.NeedTypesInfo | packages.NeedSyntax | packages.NeedFiles,
- // Tests are included, let the caller decide how to fold them in.
- Tests: true,
- BuildFlags: []string{fmt.Sprintf("-tags=%s", strings.Join(tags, " "))},
- Logf: logf,
- }
- pkgs, err := packages.Load(cfg, patterns...)
- if err != nil {
- log.Fatal(err)
- }
- if len(pkgs) == 0 {
- log.Fatalf("error: no packages matching %v", strings.Join(patterns, " "))
- }
-
- out := make([]*Package, len(pkgs))
- for i, pkg := range pkgs {
- p := &Package{
- name: pkg.Name,
- defs: pkg.TypesInfo.Defs,
- files: make([]*File, len(pkg.Syntax)),
- }
-
- for j, file := range pkg.Syntax {
- p.files[j] = &File{
- file: file,
- pkg: p,
-
- trimPrefix: trimPrefix,
- lineComment: lineComment,
- }
- }
-
- // Keep track of test files, since we might want to generated
- // code that ends up in that kind of package.
- // Can be replaced once https://go.dev/issue/38445 lands.
- for _, f := range pkg.GoFiles {
- if strings.HasSuffix(f, "_test.go") {
- p.hasTestFiles = true
- break
- }
- }
-
- out[i] = p
- }
- return out
-}
-
-func findValues(typeName string, pkg *Package) []Value {
- values := make([]Value, 0, 100)
- for _, file := range pkg.files {
- // Set the state for this run of the walker.
- file.typeName = typeName
- file.values = nil
- if file.file != nil {
- ast.Inspect(file.file, file.genDecl)
- values = append(values, file.values...)
- }
- }
- return values
-}
-
-// generate produces the String method for the named type.
-func (g *Generator) generate(typeName string, values []Value) {
- // Generate code that will fail if the constants change value.
- g.Printf("func _() {\n")
- g.Printf("\t// An \"invalid array index\" compiler error signifies that the constant values have changed.\n")
- g.Printf("\t// Re-run the stringer command to generate them again.\n")
- g.Printf("\tvar x [1]struct{}\n")
- for _, v := range values {
- g.Printf("\t_ = x[%s - %s]\n", v.originalName, v.str)
- }
- g.Printf("}\n")
- runs := splitIntoRuns(values)
- // The decision of which pattern to use depends on the number of
- // runs in the numbers. If there's only one, it's easy. For more than
- // one, there's a tradeoff between complexity and size of the data
- // and code vs. the simplicity of a map. A map takes more space,
- // but so does the code. The decision here (crossover at 10) is
- // arbitrary, but considers that for large numbers of runs the cost
- // of the linear scan in the switch might become important, and
- // rather than use yet another algorithm such as binary search,
- // we punt and use a map. In any case, the likelihood of a map
- // being necessary for any realistic example other than bitmasks
- // is very low. And bitmasks probably deserve their own analysis,
- // to be done some other day.
- switch {
- case len(runs) == 1:
- g.buildOneRun(runs, typeName)
- case len(runs) <= 10:
- g.buildMultipleRuns(runs, typeName)
- default:
- g.buildMap(runs, typeName)
- }
-}
-
-// splitIntoRuns breaks the values into runs of contiguous sequences.
-// For example, given 1,2,3,5,6,7 it returns {1,2,3},{5,6,7}.
-// The input slice is known to be non-empty.
-func splitIntoRuns(values []Value) [][]Value {
- // We use stable sort so the lexically first name is chosen for equal elements.
- sort.Stable(byValue(values))
- // Remove duplicates. Stable sort has put the one we want to print first,
- // so use that one. The String method won't care about which named constant
- // was the argument, so the first name for the given value is the only one to keep.
- // We need to do this because identical values would cause the switch or map
- // to fail to compile.
- j := 1
- for i := 1; i < len(values); i++ {
- if values[i].value != values[i-1].value {
- values[j] = values[i]
- j++
- }
- }
- values = values[:j]
- runs := make([][]Value, 0, 10)
- for len(values) > 0 {
- // One contiguous sequence per outer loop.
- i := 1
- for i < len(values) && values[i].value == values[i-1].value+1 {
- i++
- }
- runs = append(runs, values[:i])
- values = values[i:]
- }
- return runs
-}
-
-// format returns the gofmt-ed contents of the Generator's buffer.
-func (g *Generator) format() []byte {
- src, err := format.Source(g.buf.Bytes())
- if err != nil {
- // Should never happen, but can arise when developing this code.
- // The user can compile the output to see the error.
- log.Printf("warning: internal error: invalid Go generated: %s", err)
- log.Printf("warning: compile the package to analyze the error")
- return g.buf.Bytes()
- }
- return src
-}
-
-// Value represents a declared constant.
-type Value struct {
- originalName string // The name of the constant.
- name string // The name with trimmed prefix.
- // The value is stored as a bit pattern alone. The boolean tells us
- // whether to interpret it as an int64 or a uint64; the only place
- // this matters is when sorting.
- // Much of the time the str field is all we need; it is printed
- // by Value.String.
- value uint64 // Will be converted to int64 when needed.
- signed bool // Whether the constant is a signed type.
- str string // The string representation given by the "go/constant" package.
-}
-
-func (v *Value) String() string {
- return v.str
-}
-
-// byValue lets us sort the constants into increasing order.
-// We take care in the Less method to sort in signed or unsigned order,
-// as appropriate.
-type byValue []Value
-
-func (b byValue) Len() int { return len(b) }
-func (b byValue) Swap(i, j int) { b[i], b[j] = b[j], b[i] }
-func (b byValue) Less(i, j int) bool {
- if b[i].signed {
- return int64(b[i].value) < int64(b[j].value)
- }
- return b[i].value < b[j].value
-}
-
-// genDecl processes one declaration clause.
-func (f *File) genDecl(node ast.Node) bool {
- decl, ok := node.(*ast.GenDecl)
- if !ok || decl.Tok != token.CONST {
- // We only care about const declarations.
- return true
- }
- // The name of the type of the constants we are declaring.
- // Can change if this is a multi-element declaration.
- typ := ""
- // Loop over the elements of the declaration. Each element is a ValueSpec:
- // a list of names possibly followed by a type, possibly followed by values.
- // If the type and value are both missing, we carry down the type (and value,
- // but the "go/types" package takes care of that).
- for _, spec := range decl.Specs {
- vspec := spec.(*ast.ValueSpec) // Guaranteed to succeed as this is CONST.
- if vspec.Type == nil && len(vspec.Values) > 0 {
- // "X = 1". With no type but a value. If the constant is untyped,
- // skip this vspec and reset the remembered type.
- typ = ""
-
- // If this is a simple type conversion, remember the type.
- // We don't mind if this is actually a call; a qualified call won't
- // be matched (that will be SelectorExpr, not Ident), and only unusual
- // situations will result in a function call that appears to be
- // a type conversion.
- ce, ok := vspec.Values[0].(*ast.CallExpr)
- if !ok {
- continue
- }
- id, ok := ce.Fun.(*ast.Ident)
- if !ok {
- continue
- }
- typ = id.Name
- }
- if vspec.Type != nil {
- // "X T". We have a type. Remember it.
- ident, ok := vspec.Type.(*ast.Ident)
- if !ok {
- continue
- }
- typ = ident.Name
- }
- if typ != f.typeName {
- // This is not the type we're looking for.
- continue
- }
- // We now have a list of names (from one line of source code) all being
- // declared with the desired type.
- // Grab their names and actual values and store them in f.values.
- for _, name := range vspec.Names {
- if name.Name == "_" {
- continue
- }
- // This dance lets the type checker find the values for us. It's a
- // bit tricky: look up the object declared by the name, find its
- // types.Const, and extract its value.
- obj, ok := f.pkg.defs[name]
- if !ok {
- log.Fatalf("no value for constant %s", name)
- }
- info := obj.Type().Underlying().(*types.Basic).Info()
- if info&types.IsInteger == 0 {
- log.Fatalf("can't handle non-integer constant type %s", typ)
- }
- value := obj.(*types.Const).Val() // Guaranteed to succeed as this is CONST.
- if value.Kind() != constant.Int {
- log.Fatalf("can't happen: constant is not an integer %s", name)
- }
- i64, isInt := constant.Int64Val(value)
- u64, isUint := constant.Uint64Val(value)
- if !isInt && !isUint {
- log.Fatalf("internal error: value of %s is not an integer: %s", name, value.String())
- }
- if !isInt {
- u64 = uint64(i64)
- }
- v := Value{
- originalName: name.Name,
- value: u64,
- signed: info&types.IsUnsigned == 0,
- str: value.String(),
- }
- if c := vspec.Comment; f.lineComment && c != nil && len(c.List) == 1 {
- v.name = strings.TrimSpace(c.Text())
- } else {
- v.name = strings.TrimPrefix(v.originalName, f.trimPrefix)
- }
- f.values = append(f.values, v)
- }
- }
- return false
-}
-
-// Helpers
-
-// usize returns the number of bits of the smallest unsigned integer
-// type that will hold n. Used to create the smallest possible slice of
-// integers to use as indexes into the concatenated strings.
-func usize(n int) int {
- switch {
- case n < 1<<8:
- return 8
- case n < 1<<16:
- return 16
- default:
- // 2^32 is enough constants for anyone.
- return 32
- }
-}
-
-// declareIndexAndNameVars declares the index slices and concatenated names
-// strings representing the runs of values.
-func (g *Generator) declareIndexAndNameVars(runs [][]Value, typeName string) {
- var indexes, names []string
- for i, run := range runs {
- index, name := g.createIndexAndNameDecl(run, typeName, fmt.Sprintf("_%d", i))
- if len(run) != 1 {
- indexes = append(indexes, index)
- }
- names = append(names, name)
- }
- g.Printf("const (\n")
- for _, name := range names {
- g.Printf("\t%s\n", name)
- }
- g.Printf(")\n\n")
-
- if len(indexes) > 0 {
- g.Printf("var (")
- for _, index := range indexes {
- g.Printf("\t%s\n", index)
- }
- g.Printf(")\n\n")
- }
-}
-
-// declareIndexAndNameVar is the single-run version of declareIndexAndNameVars
-func (g *Generator) declareIndexAndNameVar(run []Value, typeName string) {
- index, name := g.createIndexAndNameDecl(run, typeName, "")
- g.Printf("const %s\n", name)
- g.Printf("var %s\n", index)
-}
-
-// createIndexAndNameDecl returns the pair of declarations for the run. The caller will add "const" and "var".
-func (g *Generator) createIndexAndNameDecl(run []Value, typeName string, suffix string) (string, string) {
- b := new(bytes.Buffer)
- indexes := make([]int, len(run))
- for i := range run {
- b.WriteString(run[i].name)
- indexes[i] = b.Len()
- }
- nameConst := fmt.Sprintf("_%s_name%s = %q", typeName, suffix, b.String())
- nameLen := b.Len()
- b.Reset()
- fmt.Fprintf(b, "_%s_index%s = [...]uint%d{0, ", typeName, suffix, usize(nameLen))
- for i, v := range indexes {
- if i > 0 {
- fmt.Fprintf(b, ", ")
- }
- fmt.Fprintf(b, "%d", v)
- }
- fmt.Fprintf(b, "}")
- return b.String(), nameConst
-}
-
-// declareNameVars declares the concatenated names string representing all the values in the runs.
-func (g *Generator) declareNameVars(runs [][]Value, typeName string, suffix string) {
- g.Printf("const _%s_name%s = \"", typeName, suffix)
- for _, run := range runs {
- for i := range run {
- g.Printf("%s", run[i].name)
- }
- }
- g.Printf("\"\n")
-}
-
-// buildOneRun generates the variables and String method for a single run of contiguous values.
-func (g *Generator) buildOneRun(runs [][]Value, typeName string) {
- values := runs[0]
- g.Printf("\n")
- g.declareIndexAndNameVar(values, typeName)
- // The generated code is simple enough to write as a Printf format.
- lessThanZero := ""
- if values[0].signed {
- lessThanZero = "i < 0 || "
- }
- if values[0].value == 0 { // Signed or unsigned, 0 is still 0.
- g.Printf(stringOneRun, typeName, usize(len(values)), lessThanZero)
- } else {
- g.Printf(stringOneRunWithOffset, typeName, values[0].String(), usize(len(values)), lessThanZero)
- }
-}
-
-// Arguments to format are:
-//
-// [1]: type name
-// [2]: size of index element (8 for uint8 etc.)
-// [3]: less than zero check (for signed types)
-const stringOneRun = `func (i %[1]s) String() string {
- if %[3]si >= %[1]s(len(_%[1]s_index)-1) {
- return "%[1]s(" + strconv.FormatInt(int64(i), 10) + ")"
- }
- return _%[1]s_name[_%[1]s_index[i]:_%[1]s_index[i+1]]
-}
-`
-
-// Arguments to format are:
-// [1]: type name
-// [2]: lowest defined value for type, as a string
-// [3]: size of index element (8 for uint8 etc.)
-// [4]: less than zero check (for signed types)
-/*
- */
-const stringOneRunWithOffset = `func (i %[1]s) String() string {
- i -= %[2]s
- if %[4]si >= %[1]s(len(_%[1]s_index)-1) {
- return "%[1]s(" + strconv.FormatInt(int64(i + %[2]s), 10) + ")"
- }
- return _%[1]s_name[_%[1]s_index[i] : _%[1]s_index[i+1]]
-}
-`
-
-// buildMultipleRuns generates the variables and String method for multiple runs of contiguous values.
-// For this pattern, a single Printf format won't do.
-func (g *Generator) buildMultipleRuns(runs [][]Value, typeName string) {
- g.Printf("\n")
- g.declareIndexAndNameVars(runs, typeName)
- g.Printf("func (i %s) String() string {\n", typeName)
- g.Printf("\tswitch {\n")
- for i, values := range runs {
- if len(values) == 1 {
- g.Printf("\tcase i == %s:\n", &values[0])
- g.Printf("\t\treturn _%s_name_%d\n", typeName, i)
- continue
- }
- if values[0].value == 0 && !values[0].signed {
- // For an unsigned lower bound of 0, "0 <= i" would be redundant.
- g.Printf("\tcase i <= %s:\n", &values[len(values)-1])
- } else {
- g.Printf("\tcase %s <= i && i <= %s:\n", &values[0], &values[len(values)-1])
- }
- if values[0].value != 0 {
- g.Printf("\t\ti -= %s\n", &values[0])
- }
- g.Printf("\t\treturn _%s_name_%d[_%s_index_%d[i]:_%s_index_%d[i+1]]\n",
- typeName, i, typeName, i, typeName, i)
- }
- g.Printf("\tdefault:\n")
- g.Printf("\t\treturn \"%s(\" + strconv.FormatInt(int64(i), 10) + \")\"\n", typeName)
- g.Printf("\t}\n")
- g.Printf("}\n")
-}
-
-// buildMap handles the case where the space is so sparse a map is a reasonable fallback.
-// It's a rare situation but has simple code.
-func (g *Generator) buildMap(runs [][]Value, typeName string) {
- g.Printf("\n")
- g.declareNameVars(runs, typeName, "")
- g.Printf("\nvar _%s_map = map[%s]string{\n", typeName, typeName)
- n := 0
- for _, values := range runs {
- for _, value := range values {
- g.Printf("\t%s: _%s_name[%d:%d],\n", &value, typeName, n, n+len(value.name))
- n += len(value.name)
- }
- }
- g.Printf("}\n\n")
- g.Printf(stringMap, typeName)
-}
-
-// Argument to format is the type name.
-const stringMap = `func (i %[1]s) String() string {
- if str, ok := _%[1]s_map[i]; ok {
- return str
- }
- return "%[1]s(" + strconv.FormatInt(int64(i), 10) + ")"
-}
-`
diff --git a/vendor/golang.org/x/tools/go/gcexportdata/gcexportdata.go b/vendor/golang.org/x/tools/go/gcexportdata/gcexportdata.go
deleted file mode 100644
index 137cc8df1d8..00000000000
--- a/vendor/golang.org/x/tools/go/gcexportdata/gcexportdata.go
+++ /dev/null
@@ -1,186 +0,0 @@
-// Copyright 2016 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-// Package gcexportdata provides functions for locating, reading, and
-// writing export data files containing type information produced by the
-// gc compiler. This package supports go1.7 export data format and all
-// later versions.
-//
-// Although it might seem convenient for this package to live alongside
-// go/types in the standard library, this would cause version skew
-// problems for developer tools that use it, since they must be able to
-// consume the outputs of the gc compiler both before and after a Go
-// update such as from Go 1.7 to Go 1.8. Because this package lives in
-// golang.org/x/tools, sites can update their version of this repo some
-// time before the Go 1.8 release and rebuild and redeploy their
-// developer tools, which will then be able to consume both Go 1.7 and
-// Go 1.8 export data files, so they will work before and after the
-// Go update. (See discussion at https://golang.org/issue/15651.)
-package gcexportdata // import "golang.org/x/tools/go/gcexportdata"
-
-import (
- "bufio"
- "bytes"
- "encoding/json"
- "fmt"
- "go/token"
- "go/types"
- "io"
- "os/exec"
-
- "golang.org/x/tools/internal/gcimporter"
-)
-
-// Find returns the name of an object (.o) or archive (.a) file
-// containing type information for the specified import path,
-// using the go command.
-// If no file was found, an empty filename is returned.
-//
-// A relative srcDir is interpreted relative to the current working directory.
-//
-// Find also returns the package's resolved (canonical) import path,
-// reflecting the effects of srcDir and vendoring on importPath.
-//
-// Deprecated: Use the higher-level API in golang.org/x/tools/go/packages,
-// which is more efficient.
-func Find(importPath, srcDir string) (filename, path string) {
- cmd := exec.Command("go", "list", "-json", "-export", "--", importPath)
- cmd.Dir = srcDir
- out, err := cmd.Output()
- if err != nil {
- return "", ""
- }
- var data struct {
- ImportPath string
- Export string
- }
- json.Unmarshal(out, &data)
- return data.Export, data.ImportPath
-}
-
-// NewReader returns a reader for the export data section of an object
-// (.o) or archive (.a) file read from r. The new reader may provide
-// additional trailing data beyond the end of the export data.
-func NewReader(r io.Reader) (io.Reader, error) {
- buf := bufio.NewReader(r)
- _, size, err := gcimporter.FindExportData(buf)
- if err != nil {
- return nil, err
- }
-
- if size >= 0 {
- // We were given an archive and found the __.PKGDEF in it.
- // This tells us the size of the export data, and we don't
- // need to return the entire file.
- return &io.LimitedReader{
- R: buf,
- N: size,
- }, nil
- } else {
- // We were given an object file. As such, we don't know how large
- // the export data is and must return the entire file.
- return buf, nil
- }
-}
-
-// readAll works the same way as io.ReadAll, but avoids allocations and copies
-// by preallocating a byte slice of the necessary size if the size is known up
-// front. This is always possible when the input is an archive. In that case,
-// NewReader will return the known size using an io.LimitedReader.
-func readAll(r io.Reader) ([]byte, error) {
- if lr, ok := r.(*io.LimitedReader); ok {
- data := make([]byte, lr.N)
- _, err := io.ReadFull(lr, data)
- return data, err
- }
- return io.ReadAll(r)
-}
-
-// Read reads export data from in, decodes it, and returns type
-// information for the package.
-//
-// The package path (effectively its linker symbol prefix) is
-// specified by path, since unlike the package name, this information
-// may not be recorded in the export data.
-//
-// File position information is added to fset.
-//
-// Read may inspect and add to the imports map to ensure that references
-// within the export data to other packages are consistent. The caller
-// must ensure that imports[path] does not exist, or exists but is
-// incomplete (see types.Package.Complete), and Read inserts the
-// resulting package into this map entry.
-//
-// On return, the state of the reader is undefined.
-func Read(in io.Reader, fset *token.FileSet, imports map[string]*types.Package, path string) (*types.Package, error) {
- data, err := readAll(in)
- if err != nil {
- return nil, fmt.Errorf("reading export data for %q: %v", path, err)
- }
-
- if bytes.HasPrefix(data, []byte("!")) {
- return nil, fmt.Errorf("can't read export data for %q directly from an archive file (call gcexportdata.NewReader first to extract export data)", path)
- }
-
- // The indexed export format starts with an 'i'; the older
- // binary export format starts with a 'c', 'd', or 'v'
- // (from "version"). Select appropriate importer.
- if len(data) > 0 {
- switch data[0] {
- case 'v', 'c', 'd': // binary, till go1.10
- return nil, fmt.Errorf("binary (%c) import format is no longer supported", data[0])
-
- case 'i': // indexed, till go1.19
- _, pkg, err := gcimporter.IImportData(fset, imports, data[1:], path)
- return pkg, err
-
- case 'u': // unified, from go1.20
- _, pkg, err := gcimporter.UImportData(fset, imports, data[1:], path)
- return pkg, err
-
- default:
- l := len(data)
- if l > 10 {
- l = 10
- }
- return nil, fmt.Errorf("unexpected export data with prefix %q for path %s", string(data[:l]), path)
- }
- }
- return nil, fmt.Errorf("empty export data for %s", path)
-}
-
-// Write writes encoded type information for the specified package to out.
-// The FileSet provides file position information for named objects.
-func Write(out io.Writer, fset *token.FileSet, pkg *types.Package) error {
- if _, err := io.WriteString(out, "i"); err != nil {
- return err
- }
- return gcimporter.IExportData(out, fset, pkg)
-}
-
-// ReadBundle reads an export bundle from in, decodes it, and returns type
-// information for the packages.
-// File position information is added to fset.
-//
-// ReadBundle may inspect and add to the imports map to ensure that references
-// within the export bundle to other packages are consistent.
-//
-// On return, the state of the reader is undefined.
-//
-// Experimental: This API is experimental and may change in the future.
-func ReadBundle(in io.Reader, fset *token.FileSet, imports map[string]*types.Package) ([]*types.Package, error) {
- data, err := readAll(in)
- if err != nil {
- return nil, fmt.Errorf("reading export bundle: %v", err)
- }
- return gcimporter.IImportBundle(fset, imports, data)
-}
-
-// WriteBundle writes encoded type information for the specified packages to out.
-// The FileSet provides file position information for named objects.
-//
-// Experimental: This API is experimental and may change in the future.
-func WriteBundle(out io.Writer, fset *token.FileSet, pkgs []*types.Package) error {
- return gcimporter.IExportBundle(out, fset, pkgs)
-}
diff --git a/vendor/golang.org/x/tools/go/gcexportdata/importer.go b/vendor/golang.org/x/tools/go/gcexportdata/importer.go
deleted file mode 100644
index 37a7247e268..00000000000
--- a/vendor/golang.org/x/tools/go/gcexportdata/importer.go
+++ /dev/null
@@ -1,75 +0,0 @@
-// Copyright 2016 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-package gcexportdata
-
-import (
- "fmt"
- "go/token"
- "go/types"
- "os"
-)
-
-// NewImporter returns a new instance of the types.Importer interface
-// that reads type information from export data files written by gc.
-// The Importer also satisfies types.ImporterFrom.
-//
-// Export data files are located using "go build" workspace conventions
-// and the build.Default context.
-//
-// Use this importer instead of go/importer.For("gc", ...) to avoid the
-// version-skew problems described in the documentation of this package,
-// or to control the FileSet or access the imports map populated during
-// package loading.
-//
-// Deprecated: Use the higher-level API in golang.org/x/tools/go/packages,
-// which is more efficient.
-func NewImporter(fset *token.FileSet, imports map[string]*types.Package) types.ImporterFrom {
- return importer{fset, imports}
-}
-
-type importer struct {
- fset *token.FileSet
- imports map[string]*types.Package
-}
-
-func (imp importer) Import(importPath string) (*types.Package, error) {
- return imp.ImportFrom(importPath, "", 0)
-}
-
-func (imp importer) ImportFrom(importPath, srcDir string, mode types.ImportMode) (_ *types.Package, err error) {
- filename, path := Find(importPath, srcDir)
- if filename == "" {
- if importPath == "unsafe" {
- // Even for unsafe, call Find first in case
- // the package was vendored.
- return types.Unsafe, nil
- }
- return nil, fmt.Errorf("can't find import: %s", importPath)
- }
-
- if pkg, ok := imp.imports[path]; ok && pkg.Complete() {
- return pkg, nil // cache hit
- }
-
- // open file
- f, err := os.Open(filename)
- if err != nil {
- return nil, err
- }
- defer func() {
- f.Close()
- if err != nil {
- // add file name to error
- err = fmt.Errorf("reading export data: %s: %v", filename, err)
- }
- }()
-
- r, err := NewReader(f)
- if err != nil {
- return nil, err
- }
-
- return Read(r, imp.fset, imp.imports, path)
-}
diff --git a/vendor/golang.org/x/tools/go/packages/doc.go b/vendor/golang.org/x/tools/go/packages/doc.go
deleted file mode 100644
index f1931d10eeb..00000000000
--- a/vendor/golang.org/x/tools/go/packages/doc.go
+++ /dev/null
@@ -1,251 +0,0 @@
-// Copyright 2018 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-/*
-Package packages loads Go packages for inspection and analysis.
-
-The [Load] function takes as input a list of patterns and returns a
-list of [Package] values describing individual packages matched by those
-patterns.
-A [Config] specifies configuration options, the most important of which is
-the [LoadMode], which controls the amount of detail in the loaded packages.
-
-Load passes most patterns directly to the underlying build tool.
-The default build tool is the go command.
-Its supported patterns are described at
-https://pkg.go.dev/cmd/go#hdr-Package_lists_and_patterns.
-Other build systems may be supported by providing a "driver";
-see [The driver protocol].
-
-All patterns with the prefix "query=", where query is a
-non-empty string of letters from [a-z], are reserved and may be
-interpreted as query operators.
-
-Two query operators are currently supported: "file" and "pattern".
-
-The query "file=path/to/file.go" matches the package or packages enclosing
-the Go source file path/to/file.go. For example "file=~/go/src/fmt/print.go"
-might return the packages "fmt" and "fmt [fmt.test]".
-
-The query "pattern=string" causes "string" to be passed directly to
-the underlying build tool. In most cases this is unnecessary,
-but an application can use Load("pattern=" + x) as an escaping mechanism
-to ensure that x is not interpreted as a query operator if it contains '='.
-
-All other query operators are reserved for future use and currently
-cause Load to report an error.
-
-The Package struct provides basic information about the package, including
-
- - ID, a unique identifier for the package in the returned set;
- - GoFiles, the names of the package's Go source files;
- - Imports, a map from source import strings to the Packages they name;
- - Types, the type information for the package's exported symbols;
- - Syntax, the parsed syntax trees for the package's source code; and
- - TypesInfo, the result of a complete type-check of the package syntax trees.
-
-(See the documentation for type Package for the complete list of fields
-and more detailed descriptions.)
-
-For example,
-
- Load(nil, "bytes", "unicode...")
-
-returns four Package structs describing the standard library packages
-bytes, unicode, unicode/utf16, and unicode/utf8. Note that one pattern
-can match multiple packages and that a package might be matched by
-multiple patterns: in general it is not possible to determine which
-packages correspond to which patterns.
-
-Note that the list returned by Load contains only the packages matched
-by the patterns. Their dependencies can be found by walking the import
-graph using the Imports fields.
-
-The Load function can be configured by passing a pointer to a Config as
-the first argument. A nil Config is equivalent to the zero Config, which
-causes Load to run in [LoadFiles] mode, collecting minimal information.
-See the documentation for type Config for details.
-
-As noted earlier, the Config.Mode controls the amount of detail
-reported about the loaded packages. See the documentation for type LoadMode
-for details.
-
-Most tools should pass their command-line arguments (after any flags)
-uninterpreted to Load, so that it can interpret them
-according to the conventions of the underlying build system.
-
-See the Example function for typical usage.
-
-# The driver protocol
-
-Load may be used to load Go packages even in Go projects that use
-alternative build systems, by installing an appropriate "driver"
-program for the build system and specifying its location in the
-GOPACKAGESDRIVER environment variable.
-For example,
-https://github.com/bazelbuild/rules_go/wiki/Editor-and-tool-integration
-explains how to use the driver for Bazel.
-
-The driver program is responsible for interpreting patterns in its
-preferred notation and reporting information about the packages that
-those patterns identify. Drivers must also support the special "file="
-and "pattern=" patterns described above.
-
-The patterns are provided as positional command-line arguments. A
-JSON-encoded [DriverRequest] message providing additional information
-is written to the driver's standard input. The driver must write a
-JSON-encoded [DriverResponse] message to its standard output. (This
-message differs from the JSON schema produced by 'go list'.)
-
-The value of the PWD environment variable seen by the driver process
-is the preferred name of its working directory. (The working directory
-may have other aliases due to symbolic links; see the comment on the
-Dir field of [exec.Cmd] for related information.)
-When the driver process emits in its response the name of a file
-that is a descendant of this directory, it must use an absolute path
-that has the value of PWD as a prefix, to ensure that the returned
-filenames satisfy the original query.
-*/
-package packages // import "golang.org/x/tools/go/packages"
-
-/*
-
-Motivation and design considerations
-
-The new package's design solves problems addressed by two existing
-packages: go/build, which locates and describes packages, and
-golang.org/x/tools/go/loader, which loads, parses and type-checks them.
-The go/build.Package structure encodes too much of the 'go build' way
-of organizing projects, leaving us in need of a data type that describes a
-package of Go source code independent of the underlying build system.
-We wanted something that works equally well with go build and vgo, and
-also other build systems such as Bazel and Blaze, making it possible to
-construct analysis tools that work in all these environments.
-Tools such as errcheck and staticcheck were essentially unavailable to
-the Go community at Google, and some of Google's internal tools for Go
-are unavailable externally.
-This new package provides a uniform way to obtain package metadata by
-querying each of these build systems, optionally supporting their
-preferred command-line notations for packages, so that tools integrate
-neatly with users' build environments. The Metadata query function
-executes an external query tool appropriate to the current workspace.
-
-Loading packages always returns the complete import graph "all the way down",
-even if all you want is information about a single package, because the query
-mechanisms of all the build systems we currently support ({go,vgo} list, and
-blaze/bazel aspect-based query) cannot provide detailed information
-about one package without visiting all its dependencies too, so there is
-no additional asymptotic cost to providing transitive information.
-(This property might not be true of a hypothetical 5th build system.)
-
-In calls to TypeCheck, all initial packages, and any package that
-transitively depends on one of them, must be loaded from source.
-Consider A->B->C->D->E: if A,C are initial, A,B,C must be loaded from
-source; D may be loaded from export data, and E may not be loaded at all
-(though it's possible that D's export data mentions it, so a
-types.Package may be created for it and exposed.)
-
-The old loader had a feature to suppress type-checking of function
-bodies on a per-package basis, primarily intended to reduce the work of
-obtaining type information for imported packages. Now that imports are
-satisfied by export data, the optimization no longer seems necessary.
-
-Despite some early attempts, the old loader did not exploit export data,
-instead always using the equivalent of WholeProgram mode. This was due
-to the complexity of mixing source and export data packages (now
-resolved by the upward traversal mentioned above), and because export data
-files were nearly always missing or stale. Now that 'go build' supports
-caching, all the underlying build systems can guarantee to produce
-export data in a reasonable (amortized) time.
-
-Test "main" packages synthesized by the build system are now reported as
-first-class packages, avoiding the need for clients (such as go/ssa) to
-reinvent this generation logic.
-
-One way in which go/packages is simpler than the old loader is in its
-treatment of in-package tests. In-package tests are packages that
-consist of all the files of the library under test, plus the test files.
-The old loader constructed in-package tests by a two-phase process of
-mutation called "augmentation": first it would construct and type check
-all the ordinary library packages and type-check the packages that
-depend on them; then it would add more (test) files to the package and
-type-check again. This two-phase approach had four major problems:
-1) in processing the tests, the loader modified the library package,
- leaving no way for a client application to see both the test
- package and the library package; one would mutate into the other.
-2) because test files can declare additional methods on types defined in
- the library portion of the package, the dispatch of method calls in
- the library portion was affected by the presence of the test files.
- This should have been a clue that the packages were logically
- different.
-3) this model of "augmentation" assumed at most one in-package test
- per library package, which is true of projects using 'go build',
- but not other build systems.
-4) because of the two-phase nature of test processing, all packages that
- import the library package had to be processed before augmentation,
- forcing a "one-shot" API and preventing the client from calling Load
- in several times in sequence as is now possible in WholeProgram mode.
- (TypeCheck mode has a similar one-shot restriction for a different reason.)
-
-Early drafts of this package supported "multi-shot" operation.
-Although it allowed clients to make a sequence of calls (or concurrent
-calls) to Load, building up the graph of Packages incrementally,
-it was of marginal value: it complicated the API
-(since it allowed some options to vary across calls but not others),
-it complicated the implementation,
-it cannot be made to work in Types mode, as explained above,
-and it was less efficient than making one combined call (when this is possible).
-Among the clients we have inspected, none made multiple calls to load
-but could not be easily and satisfactorily modified to make only a single call.
-However, applications changes may be required.
-For example, the ssadump command loads the user-specified packages
-and in addition the runtime package. It is tempting to simply append
-"runtime" to the user-provided list, but that does not work if the user
-specified an ad-hoc package such as [a.go b.go].
-Instead, ssadump no longer requests the runtime package,
-but seeks it among the dependencies of the user-specified packages,
-and emits an error if it is not found.
-
-Questions & Tasks
-
-- Add GOARCH/GOOS?
- They are not portable concepts, but could be made portable.
- Our goal has been to allow users to express themselves using the conventions
- of the underlying build system: if the build system honors GOARCH
- during a build and during a metadata query, then so should
- applications built atop that query mechanism.
- Conversely, if the target architecture of the build is determined by
- command-line flags, the application can pass the relevant
- flags through to the build system using a command such as:
- myapp -query_flag="--cpu=amd64" -query_flag="--os=darwin"
- However, this approach is low-level, unwieldy, and non-portable.
- GOOS and GOARCH seem important enough to warrant a dedicated option.
-
-- How should we handle partial failures such as a mixture of good and
- malformed patterns, existing and non-existent packages, successful and
- failed builds, import failures, import cycles, and so on, in a call to
- Load?
-
-- Support bazel, blaze, and go1.10 list, not just go1.11 list.
-
-- Handle (and test) various partial success cases, e.g.
- a mixture of good packages and:
- invalid patterns
- nonexistent packages
- empty packages
- packages with malformed package or import declarations
- unreadable files
- import cycles
- other parse errors
- type errors
- Make sure we record errors at the correct place in the graph.
-
-- Missing packages among initial arguments are not reported.
- Return bogus packages for them, like golist does.
-
-- "undeclared name" errors (for example) are reported out of source file
- order. I suspect this is due to the breadth-first resolution now used
- by go/types. Is that a bug? Discuss with gri.
-
-*/
diff --git a/vendor/golang.org/x/tools/go/packages/external.go b/vendor/golang.org/x/tools/go/packages/external.go
deleted file mode 100644
index 8f7afcb5dfb..00000000000
--- a/vendor/golang.org/x/tools/go/packages/external.go
+++ /dev/null
@@ -1,156 +0,0 @@
-// Copyright 2018 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-package packages
-
-// This file defines the protocol that enables an external "driver"
-// tool to supply package metadata in place of 'go list'.
-
-import (
- "bytes"
- "encoding/json"
- "fmt"
- "os"
- "os/exec"
- "strings"
-)
-
-// DriverRequest defines the schema of a request for package metadata
-// from an external driver program. The JSON-encoded DriverRequest
-// message is provided to the driver program's standard input. The
-// query patterns are provided as command-line arguments.
-//
-// See the package documentation for an overview.
-type DriverRequest struct {
- Mode LoadMode `json:"mode"`
-
- // Env specifies the environment the underlying build system should be run in.
- Env []string `json:"env"`
-
- // BuildFlags are flags that should be passed to the underlying build system.
- BuildFlags []string `json:"build_flags"`
-
- // Tests specifies whether the patterns should also return test packages.
- Tests bool `json:"tests"`
-
- // Overlay maps file paths (relative to the driver's working directory)
- // to the contents of overlay files (see Config.Overlay).
- Overlay map[string][]byte `json:"overlay"`
-}
-
-// DriverResponse defines the schema of a response from an external
-// driver program, providing the results of a query for package
-// metadata. The driver program must write a JSON-encoded
-// DriverResponse message to its standard output.
-//
-// See the package documentation for an overview.
-type DriverResponse struct {
- // NotHandled is returned if the request can't be handled by the current
- // driver. If an external driver returns a response with NotHandled, the
- // rest of the DriverResponse is ignored, and go/packages will fallback
- // to the next driver. If go/packages is extended in the future to support
- // lists of multiple drivers, go/packages will fall back to the next driver.
- NotHandled bool
-
- // Compiler and Arch are the arguments pass of types.SizesFor
- // to get a types.Sizes to use when type checking.
- Compiler string
- Arch string
-
- // Roots is the set of package IDs that make up the root packages.
- // We have to encode this separately because when we encode a single package
- // we cannot know if it is one of the roots as that requires knowledge of the
- // graph it is part of.
- Roots []string `json:",omitempty"`
-
- // Packages is the full set of packages in the graph.
- // The packages are not connected into a graph.
- // The Imports if populated will be stubs that only have their ID set.
- // Imports will be connected and then type and syntax information added in a
- // later pass (see refine).
- Packages []*Package
-
- // GoVersion is the minor version number used by the driver
- // (e.g. the go command on the PATH) when selecting .go files.
- // Zero means unknown.
- GoVersion int
-}
-
-// driver is the type for functions that query the build system for the
-// packages named by the patterns.
-type driver func(cfg *Config, patterns ...string) (*DriverResponse, error)
-
-// findExternalDriver returns the file path of a tool that supplies
-// the build system package structure, or "" if not found.
-// If GOPACKAGESDRIVER is set in the environment findExternalTool returns its
-// value, otherwise it searches for a binary named gopackagesdriver on the PATH.
-func findExternalDriver(cfg *Config) driver {
- const toolPrefix = "GOPACKAGESDRIVER="
- tool := ""
- for _, env := range cfg.Env {
- if val := strings.TrimPrefix(env, toolPrefix); val != env {
- tool = val
- }
- }
- if tool != "" && tool == "off" {
- return nil
- }
- if tool == "" {
- var err error
- tool, err = exec.LookPath("gopackagesdriver")
- if err != nil {
- return nil
- }
- }
- return func(cfg *Config, words ...string) (*DriverResponse, error) {
- req, err := json.Marshal(DriverRequest{
- Mode: cfg.Mode,
- Env: cfg.Env,
- BuildFlags: cfg.BuildFlags,
- Tests: cfg.Tests,
- Overlay: cfg.Overlay,
- })
- if err != nil {
- return nil, fmt.Errorf("failed to encode message to driver tool: %v", err)
- }
-
- buf := new(bytes.Buffer)
- stderr := new(bytes.Buffer)
- cmd := exec.CommandContext(cfg.Context, tool, words...)
- cmd.Dir = cfg.Dir
- // The cwd gets resolved to the real path. On Darwin, where
- // /tmp is a symlink, this breaks anything that expects the
- // working directory to keep the original path, including the
- // go command when dealing with modules.
- //
- // os.Getwd stdlib has a special feature where if the
- // cwd and the PWD are the same node then it trusts
- // the PWD, so by setting it in the env for the child
- // process we fix up all the paths returned by the go
- // command.
- //
- // (See similar trick in Invocation.run in ../../internal/gocommand/invoke.go)
- cmd.Env = append(slicesClip(cfg.Env), "PWD="+cfg.Dir)
- cmd.Stdin = bytes.NewReader(req)
- cmd.Stdout = buf
- cmd.Stderr = stderr
-
- if err := cmd.Run(); err != nil {
- return nil, fmt.Errorf("%v: %v: %s", tool, err, cmd.Stderr)
- }
- if len(stderr.Bytes()) != 0 && os.Getenv("GOPACKAGESPRINTDRIVERERRORS") != "" {
- fmt.Fprintf(os.Stderr, "%s stderr: <<%s>>\n", cmdDebugStr(cmd), stderr)
- }
-
- var response DriverResponse
- if err := json.Unmarshal(buf.Bytes(), &response); err != nil {
- return nil, err
- }
- return &response, nil
- }
-}
-
-// slicesClip removes unused capacity from the slice, returning s[:len(s):len(s)].
-// TODO(adonovan): use go1.21 slices.Clip.
-func slicesClip[S ~[]E, E any](s S) S { return s[:len(s):len(s)] }
diff --git a/vendor/golang.org/x/tools/go/packages/golist.go b/vendor/golang.org/x/tools/go/packages/golist.go
deleted file mode 100644
index 1a3a5b44f5c..00000000000
--- a/vendor/golang.org/x/tools/go/packages/golist.go
+++ /dev/null
@@ -1,1066 +0,0 @@
-// Copyright 2018 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-package packages
-
-import (
- "bytes"
- "context"
- "encoding/json"
- "fmt"
- "log"
- "os"
- "os/exec"
- "path"
- "path/filepath"
- "reflect"
- "sort"
- "strconv"
- "strings"
- "sync"
- "unicode"
-
- "golang.org/x/tools/internal/gocommand"
- "golang.org/x/tools/internal/packagesinternal"
-)
-
-// debug controls verbose logging.
-var debug, _ = strconv.ParseBool(os.Getenv("GOPACKAGESDEBUG"))
-
-// A goTooOldError reports that the go command
-// found by exec.LookPath is too old to use the new go list behavior.
-type goTooOldError struct {
- error
-}
-
-// responseDeduper wraps a DriverResponse, deduplicating its contents.
-type responseDeduper struct {
- seenRoots map[string]bool
- seenPackages map[string]*Package
- dr *DriverResponse
-}
-
-func newDeduper() *responseDeduper {
- return &responseDeduper{
- dr: &DriverResponse{},
- seenRoots: map[string]bool{},
- seenPackages: map[string]*Package{},
- }
-}
-
-// addAll fills in r with a DriverResponse.
-func (r *responseDeduper) addAll(dr *DriverResponse) {
- for _, pkg := range dr.Packages {
- r.addPackage(pkg)
- }
- for _, root := range dr.Roots {
- r.addRoot(root)
- }
- r.dr.GoVersion = dr.GoVersion
-}
-
-func (r *responseDeduper) addPackage(p *Package) {
- if r.seenPackages[p.ID] != nil {
- return
- }
- r.seenPackages[p.ID] = p
- r.dr.Packages = append(r.dr.Packages, p)
-}
-
-func (r *responseDeduper) addRoot(id string) {
- if r.seenRoots[id] {
- return
- }
- r.seenRoots[id] = true
- r.dr.Roots = append(r.dr.Roots, id)
-}
-
-type golistState struct {
- cfg *Config
- ctx context.Context
-
- envOnce sync.Once
- goEnvError error
- goEnv map[string]string
-
- rootsOnce sync.Once
- rootDirsError error
- rootDirs map[string]string
-
- goVersionOnce sync.Once
- goVersionError error
- goVersion int // The X in Go 1.X.
-
- // vendorDirs caches the (non)existence of vendor directories.
- vendorDirs map[string]bool
-}
-
-// getEnv returns Go environment variables. Only specific variables are
-// populated -- computing all of them is slow.
-func (state *golistState) getEnv() (map[string]string, error) {
- state.envOnce.Do(func() {
- var b *bytes.Buffer
- b, state.goEnvError = state.invokeGo("env", "-json", "GOMOD", "GOPATH")
- if state.goEnvError != nil {
- return
- }
-
- state.goEnv = make(map[string]string)
- decoder := json.NewDecoder(b)
- if state.goEnvError = decoder.Decode(&state.goEnv); state.goEnvError != nil {
- return
- }
- })
- return state.goEnv, state.goEnvError
-}
-
-// mustGetEnv is a convenience function that can be used if getEnv has already succeeded.
-func (state *golistState) mustGetEnv() map[string]string {
- env, err := state.getEnv()
- if err != nil {
- panic(fmt.Sprintf("mustGetEnv: %v", err))
- }
- return env
-}
-
-// goListDriver uses the go list command to interpret the patterns and produce
-// the build system package structure.
-// See driver for more details.
-func goListDriver(cfg *Config, patterns ...string) (_ *DriverResponse, err error) {
- // Make sure that any asynchronous go commands are killed when we return.
- parentCtx := cfg.Context
- if parentCtx == nil {
- parentCtx = context.Background()
- }
- ctx, cancel := context.WithCancel(parentCtx)
- defer cancel()
-
- response := newDeduper()
-
- state := &golistState{
- cfg: cfg,
- ctx: ctx,
- vendorDirs: map[string]bool{},
- }
-
- // Fill in response.Sizes asynchronously if necessary.
- if cfg.Mode&NeedTypesSizes != 0 || cfg.Mode&NeedTypes != 0 {
- errCh := make(chan error)
- go func() {
- compiler, arch, err := getSizesForArgs(ctx, state.cfgInvocation(), cfg.gocmdRunner)
- response.dr.Compiler = compiler
- response.dr.Arch = arch
- errCh <- err
- }()
- defer func() {
- if sizesErr := <-errCh; sizesErr != nil {
- err = sizesErr
- }
- }()
- }
-
- // Determine files requested in contains patterns
- var containFiles []string
- restPatterns := make([]string, 0, len(patterns))
- // Extract file= and other [querytype]= patterns. Report an error if querytype
- // doesn't exist.
-extractQueries:
- for _, pattern := range patterns {
- eqidx := strings.Index(pattern, "=")
- if eqidx < 0 {
- restPatterns = append(restPatterns, pattern)
- } else {
- query, value := pattern[:eqidx], pattern[eqidx+len("="):]
- switch query {
- case "file":
- containFiles = append(containFiles, value)
- case "pattern":
- restPatterns = append(restPatterns, value)
- case "": // not a reserved query
- restPatterns = append(restPatterns, pattern)
- default:
- for _, rune := range query {
- if rune < 'a' || rune > 'z' { // not a reserved query
- restPatterns = append(restPatterns, pattern)
- continue extractQueries
- }
- }
- // Reject all other patterns containing "="
- return nil, fmt.Errorf("invalid query type %q in query pattern %q", query, pattern)
- }
- }
- }
-
- // See if we have any patterns to pass through to go list. Zero initial
- // patterns also requires a go list call, since it's the equivalent of
- // ".".
- if len(restPatterns) > 0 || len(patterns) == 0 {
- dr, err := state.createDriverResponse(restPatterns...)
- if err != nil {
- return nil, err
- }
- response.addAll(dr)
- }
-
- if len(containFiles) != 0 {
- if err := state.runContainsQueries(response, containFiles); err != nil {
- return nil, err
- }
- }
-
- // (We may yet return an error due to defer.)
- return response.dr, nil
-}
-
-func (state *golistState) runContainsQueries(response *responseDeduper, queries []string) error {
- for _, query := range queries {
- // TODO(matloob): Do only one query per directory.
- fdir := filepath.Dir(query)
- // Pass absolute path of directory to go list so that it knows to treat it as a directory,
- // not a package path.
- pattern, err := filepath.Abs(fdir)
- if err != nil {
- return fmt.Errorf("could not determine absolute path of file= query path %q: %v", query, err)
- }
- dirResponse, err := state.createDriverResponse(pattern)
-
- // If there was an error loading the package, or no packages are returned,
- // or the package is returned with errors, try to load the file as an
- // ad-hoc package.
- // Usually the error will appear in a returned package, but may not if we're
- // in module mode and the ad-hoc is located outside a module.
- if err != nil || len(dirResponse.Packages) == 0 || len(dirResponse.Packages) == 1 && len(dirResponse.Packages[0].GoFiles) == 0 &&
- len(dirResponse.Packages[0].Errors) == 1 {
- var queryErr error
- if dirResponse, queryErr = state.adhocPackage(pattern, query); queryErr != nil {
- return err // return the original error
- }
- }
- isRoot := make(map[string]bool, len(dirResponse.Roots))
- for _, root := range dirResponse.Roots {
- isRoot[root] = true
- }
- for _, pkg := range dirResponse.Packages {
- // Add any new packages to the main set
- // We don't bother to filter packages that will be dropped by the changes of roots,
- // that will happen anyway during graph construction outside this function.
- // Over-reporting packages is not a problem.
- response.addPackage(pkg)
- // if the package was not a root one, it cannot have the file
- if !isRoot[pkg.ID] {
- continue
- }
- for _, pkgFile := range pkg.GoFiles {
- if filepath.Base(query) == filepath.Base(pkgFile) {
- response.addRoot(pkg.ID)
- break
- }
- }
- }
- }
- return nil
-}
-
-// adhocPackage attempts to load or construct an ad-hoc package for a given
-// query, if the original call to the driver produced inadequate results.
-func (state *golistState) adhocPackage(pattern, query string) (*DriverResponse, error) {
- response, err := state.createDriverResponse(query)
- if err != nil {
- return nil, err
- }
- // If we get nothing back from `go list`,
- // try to make this file into its own ad-hoc package.
- // TODO(rstambler): Should this check against the original response?
- if len(response.Packages) == 0 {
- response.Packages = append(response.Packages, &Package{
- ID: "command-line-arguments",
- PkgPath: query,
- GoFiles: []string{query},
- CompiledGoFiles: []string{query},
- Imports: make(map[string]*Package),
- })
- response.Roots = append(response.Roots, "command-line-arguments")
- }
- // Handle special cases.
- if len(response.Packages) == 1 {
- // golang/go#33482: If this is a file= query for ad-hoc packages where
- // the file only exists on an overlay, and exists outside of a module,
- // add the file to the package and remove the errors.
- if response.Packages[0].ID == "command-line-arguments" ||
- filepath.ToSlash(response.Packages[0].PkgPath) == filepath.ToSlash(query) {
- if len(response.Packages[0].GoFiles) == 0 {
- filename := filepath.Join(pattern, filepath.Base(query)) // avoid recomputing abspath
- // TODO(matloob): check if the file is outside of a root dir?
- for path := range state.cfg.Overlay {
- if path == filename {
- response.Packages[0].Errors = nil
- response.Packages[0].GoFiles = []string{path}
- response.Packages[0].CompiledGoFiles = []string{path}
- }
- }
- }
- }
- }
- return response, nil
-}
-
-// Fields must match go list;
-// see $GOROOT/src/cmd/go/internal/load/pkg.go.
-type jsonPackage struct {
- ImportPath string
- Dir string
- Name string
- Export string
- GoFiles []string
- CompiledGoFiles []string
- IgnoredGoFiles []string
- IgnoredOtherFiles []string
- EmbedPatterns []string
- EmbedFiles []string
- CFiles []string
- CgoFiles []string
- CXXFiles []string
- MFiles []string
- HFiles []string
- FFiles []string
- SFiles []string
- SwigFiles []string
- SwigCXXFiles []string
- SysoFiles []string
- Imports []string
- ImportMap map[string]string
- Deps []string
- Module *Module
- TestGoFiles []string
- TestImports []string
- XTestGoFiles []string
- XTestImports []string
- ForTest string // q in a "p [q.test]" package, else ""
- DepOnly bool
-
- Error *packagesinternal.PackageError
- DepsErrors []*packagesinternal.PackageError
-}
-
-type jsonPackageError struct {
- ImportStack []string
- Pos string
- Err string
-}
-
-func otherFiles(p *jsonPackage) [][]string {
- return [][]string{p.CFiles, p.CXXFiles, p.MFiles, p.HFiles, p.FFiles, p.SFiles, p.SwigFiles, p.SwigCXXFiles, p.SysoFiles}
-}
-
-// createDriverResponse uses the "go list" command to expand the pattern
-// words and return a response for the specified packages.
-func (state *golistState) createDriverResponse(words ...string) (*DriverResponse, error) {
- // go list uses the following identifiers in ImportPath and Imports:
- //
- // "p" -- importable package or main (command)
- // "q.test" -- q's test executable
- // "p [q.test]" -- variant of p as built for q's test executable
- // "q_test [q.test]" -- q's external test package
- //
- // The packages p that are built differently for a test q.test
- // are q itself, plus any helpers used by the external test q_test,
- // typically including "testing" and all its dependencies.
-
- // Run "go list" for complete
- // information on the specified packages.
- goVersion, err := state.getGoVersion()
- if err != nil {
- return nil, err
- }
- buf, err := state.invokeGo("list", golistargs(state.cfg, words, goVersion)...)
- if err != nil {
- return nil, err
- }
-
- seen := make(map[string]*jsonPackage)
- pkgs := make(map[string]*Package)
- additionalErrors := make(map[string][]Error)
- // Decode the JSON and convert it to Package form.
- response := &DriverResponse{
- GoVersion: goVersion,
- }
- for dec := json.NewDecoder(buf); dec.More(); {
- p := new(jsonPackage)
- if err := dec.Decode(p); err != nil {
- return nil, fmt.Errorf("JSON decoding failed: %v", err)
- }
-
- if p.ImportPath == "" {
- // The documentation for go list says that “[e]rroneous packages will have
- // a non-empty ImportPath”. If for some reason it comes back empty, we
- // prefer to error out rather than silently discarding data or handing
- // back a package without any way to refer to it.
- if p.Error != nil {
- return nil, Error{
- Pos: p.Error.Pos,
- Msg: p.Error.Err,
- }
- }
- return nil, fmt.Errorf("package missing import path: %+v", p)
- }
-
- // Work around https://golang.org/issue/33157:
- // go list -e, when given an absolute path, will find the package contained at
- // that directory. But when no package exists there, it will return a fake package
- // with an error and the ImportPath set to the absolute path provided to go list.
- // Try to convert that absolute path to what its package path would be if it's
- // contained in a known module or GOPATH entry. This will allow the package to be
- // properly "reclaimed" when overlays are processed.
- if filepath.IsAbs(p.ImportPath) && p.Error != nil {
- pkgPath, ok, err := state.getPkgPath(p.ImportPath)
- if err != nil {
- return nil, err
- }
- if ok {
- p.ImportPath = pkgPath
- }
- }
-
- if old, found := seen[p.ImportPath]; found {
- // If one version of the package has an error, and the other doesn't, assume
- // that this is a case where go list is reporting a fake dependency variant
- // of the imported package: When a package tries to invalidly import another
- // package, go list emits a variant of the imported package (with the same
- // import path, but with an error on it, and the package will have a
- // DepError set on it). An example of when this can happen is for imports of
- // main packages: main packages can not be imported, but they may be
- // separately matched and listed by another pattern.
- // See golang.org/issue/36188 for more details.
-
- // The plan is that eventually, hopefully in Go 1.15, the error will be
- // reported on the importing package rather than the duplicate "fake"
- // version of the imported package. Once all supported versions of Go
- // have the new behavior this logic can be deleted.
- // TODO(matloob): delete the workaround logic once all supported versions of
- // Go return the errors on the proper package.
-
- // There should be exactly one version of a package that doesn't have an
- // error.
- if old.Error == nil && p.Error == nil {
- if !reflect.DeepEqual(p, old) {
- return nil, fmt.Errorf("internal error: go list gives conflicting information for package %v", p.ImportPath)
- }
- continue
- }
-
- // Determine if this package's error needs to be bubbled up.
- // This is a hack, and we expect for go list to eventually set the error
- // on the package.
- if old.Error != nil {
- var errkind string
- if strings.Contains(old.Error.Err, "not an importable package") {
- errkind = "not an importable package"
- } else if strings.Contains(old.Error.Err, "use of internal package") && strings.Contains(old.Error.Err, "not allowed") {
- errkind = "use of internal package not allowed"
- }
- if errkind != "" {
- if len(old.Error.ImportStack) < 1 {
- return nil, fmt.Errorf(`internal error: go list gave a %q error with empty import stack`, errkind)
- }
- importingPkg := old.Error.ImportStack[len(old.Error.ImportStack)-1]
- if importingPkg == old.ImportPath {
- // Using an older version of Go which put this package itself on top of import
- // stack, instead of the importer. Look for importer in second from top
- // position.
- if len(old.Error.ImportStack) < 2 {
- return nil, fmt.Errorf(`internal error: go list gave a %q error with an import stack without importing package`, errkind)
- }
- importingPkg = old.Error.ImportStack[len(old.Error.ImportStack)-2]
- }
- additionalErrors[importingPkg] = append(additionalErrors[importingPkg], Error{
- Pos: old.Error.Pos,
- Msg: old.Error.Err,
- Kind: ListError,
- })
- }
- }
-
- // Make sure that if there's a version of the package without an error,
- // that's the one reported to the user.
- if old.Error == nil {
- continue
- }
-
- // This package will replace the old one at the end of the loop.
- }
- seen[p.ImportPath] = p
-
- pkg := &Package{
- Name: p.Name,
- ID: p.ImportPath,
- GoFiles: absJoin(p.Dir, p.GoFiles, p.CgoFiles),
- CompiledGoFiles: absJoin(p.Dir, p.CompiledGoFiles),
- OtherFiles: absJoin(p.Dir, otherFiles(p)...),
- EmbedFiles: absJoin(p.Dir, p.EmbedFiles),
- EmbedPatterns: absJoin(p.Dir, p.EmbedPatterns),
- IgnoredFiles: absJoin(p.Dir, p.IgnoredGoFiles, p.IgnoredOtherFiles),
- forTest: p.ForTest,
- depsErrors: p.DepsErrors,
- Module: p.Module,
- }
-
- if (state.cfg.Mode&typecheckCgo) != 0 && len(p.CgoFiles) != 0 {
- if len(p.CompiledGoFiles) > len(p.GoFiles) {
- // We need the cgo definitions, which are in the first
- // CompiledGoFile after the non-cgo ones. This is a hack but there
- // isn't currently a better way to find it. We also need the pure
- // Go files and unprocessed cgo files, all of which are already
- // in pkg.GoFiles.
- cgoTypes := p.CompiledGoFiles[len(p.GoFiles)]
- pkg.CompiledGoFiles = append([]string{cgoTypes}, pkg.GoFiles...)
- } else {
- // golang/go#38990: go list silently fails to do cgo processing
- pkg.CompiledGoFiles = nil
- pkg.Errors = append(pkg.Errors, Error{
- Msg: "go list failed to return CompiledGoFiles. This may indicate failure to perform cgo processing; try building at the command line. See https://golang.org/issue/38990.",
- Kind: ListError,
- })
- }
- }
-
- // Work around https://golang.org/issue/28749:
- // cmd/go puts assembly, C, and C++ files in CompiledGoFiles.
- // Remove files from CompiledGoFiles that are non-go files
- // (or are not files that look like they are from the cache).
- if len(pkg.CompiledGoFiles) > 0 {
- out := pkg.CompiledGoFiles[:0]
- for _, f := range pkg.CompiledGoFiles {
- if ext := filepath.Ext(f); ext != ".go" && ext != "" { // ext == "" means the file is from the cache, so probably cgo-processed file
- continue
- }
- out = append(out, f)
- }
- pkg.CompiledGoFiles = out
- }
-
- // Extract the PkgPath from the package's ID.
- if i := strings.IndexByte(pkg.ID, ' '); i >= 0 {
- pkg.PkgPath = pkg.ID[:i]
- } else {
- pkg.PkgPath = pkg.ID
- }
-
- if pkg.PkgPath == "unsafe" {
- pkg.CompiledGoFiles = nil // ignore fake unsafe.go file (#59929)
- } else if len(pkg.CompiledGoFiles) == 0 {
- // Work around for pre-go.1.11 versions of go list.
- // TODO(matloob): they should be handled by the fallback.
- // Can we delete this?
- pkg.CompiledGoFiles = pkg.GoFiles
- }
-
- // Assume go list emits only absolute paths for Dir.
- if p.Dir != "" && !filepath.IsAbs(p.Dir) {
- log.Fatalf("internal error: go list returned non-absolute Package.Dir: %s", p.Dir)
- }
-
- if p.Export != "" && !filepath.IsAbs(p.Export) {
- pkg.ExportFile = filepath.Join(p.Dir, p.Export)
- } else {
- pkg.ExportFile = p.Export
- }
-
- // imports
- //
- // Imports contains the IDs of all imported packages.
- // ImportsMap records (path, ID) only where they differ.
- ids := make(map[string]bool)
- for _, id := range p.Imports {
- ids[id] = true
- }
- pkg.Imports = make(map[string]*Package)
- for path, id := range p.ImportMap {
- pkg.Imports[path] = &Package{ID: id} // non-identity import
- delete(ids, id)
- }
- for id := range ids {
- if id == "C" {
- continue
- }
-
- pkg.Imports[id] = &Package{ID: id} // identity import
- }
- if !p.DepOnly {
- response.Roots = append(response.Roots, pkg.ID)
- }
-
- // Temporary work-around for golang/go#39986. Parse filenames out of
- // error messages. This happens if there are unrecoverable syntax
- // errors in the source, so we can't match on a specific error message.
- //
- // TODO(rfindley): remove this heuristic, in favor of considering
- // InvalidGoFiles from the list driver.
- if err := p.Error; err != nil && state.shouldAddFilenameFromError(p) {
- addFilenameFromPos := func(pos string) bool {
- split := strings.Split(pos, ":")
- if len(split) < 1 {
- return false
- }
- filename := strings.TrimSpace(split[0])
- if filename == "" {
- return false
- }
- if !filepath.IsAbs(filename) {
- filename = filepath.Join(state.cfg.Dir, filename)
- }
- info, _ := os.Stat(filename)
- if info == nil {
- return false
- }
- pkg.CompiledGoFiles = append(pkg.CompiledGoFiles, filename)
- pkg.GoFiles = append(pkg.GoFiles, filename)
- return true
- }
- found := addFilenameFromPos(err.Pos)
- // In some cases, go list only reports the error position in the
- // error text, not the error position. One such case is when the
- // file's package name is a keyword (see golang.org/issue/39763).
- if !found {
- addFilenameFromPos(err.Err)
- }
- }
-
- if p.Error != nil {
- msg := strings.TrimSpace(p.Error.Err) // Trim to work around golang.org/issue/32363.
- // Address golang.org/issue/35964 by appending import stack to error message.
- if msg == "import cycle not allowed" && len(p.Error.ImportStack) != 0 {
- msg += fmt.Sprintf(": import stack: %v", p.Error.ImportStack)
- }
- pkg.Errors = append(pkg.Errors, Error{
- Pos: p.Error.Pos,
- Msg: msg,
- Kind: ListError,
- })
- }
-
- pkgs[pkg.ID] = pkg
- }
-
- for id, errs := range additionalErrors {
- if p, ok := pkgs[id]; ok {
- p.Errors = append(p.Errors, errs...)
- }
- }
- for _, pkg := range pkgs {
- response.Packages = append(response.Packages, pkg)
- }
- sort.Slice(response.Packages, func(i, j int) bool { return response.Packages[i].ID < response.Packages[j].ID })
-
- return response, nil
-}
-
-func (state *golistState) shouldAddFilenameFromError(p *jsonPackage) bool {
- if len(p.GoFiles) > 0 || len(p.CompiledGoFiles) > 0 {
- return false
- }
-
- goV, err := state.getGoVersion()
- if err != nil {
- return false
- }
-
- // On Go 1.14 and earlier, only add filenames from errors if the import stack is empty.
- // The import stack behaves differently for these versions than newer Go versions.
- if goV < 15 {
- return len(p.Error.ImportStack) == 0
- }
-
- // On Go 1.15 and later, only parse filenames out of error if there's no import stack,
- // or the current package is at the top of the import stack. This is not guaranteed
- // to work perfectly, but should avoid some cases where files in errors don't belong to this
- // package.
- return len(p.Error.ImportStack) == 0 || p.Error.ImportStack[len(p.Error.ImportStack)-1] == p.ImportPath
-}
-
-// getGoVersion returns the effective minor version of the go command.
-func (state *golistState) getGoVersion() (int, error) {
- state.goVersionOnce.Do(func() {
- state.goVersion, state.goVersionError = gocommand.GoVersion(state.ctx, state.cfgInvocation(), state.cfg.gocmdRunner)
- })
- return state.goVersion, state.goVersionError
-}
-
-// getPkgPath finds the package path of a directory if it's relative to a root
-// directory.
-func (state *golistState) getPkgPath(dir string) (string, bool, error) {
- absDir, err := filepath.Abs(dir)
- if err != nil {
- return "", false, err
- }
- roots, err := state.determineRootDirs()
- if err != nil {
- return "", false, err
- }
-
- for rdir, rpath := range roots {
- // Make sure that the directory is in the module,
- // to avoid creating a path relative to another module.
- if !strings.HasPrefix(absDir, rdir) {
- continue
- }
- // TODO(matloob): This doesn't properly handle symlinks.
- r, err := filepath.Rel(rdir, dir)
- if err != nil {
- continue
- }
- if rpath != "" {
- // We choose only one root even though the directory even it can belong in multiple modules
- // or GOPATH entries. This is okay because we only need to work with absolute dirs when a
- // file is missing from disk, for instance when gopls calls go/packages in an overlay.
- // Once the file is saved, gopls, or the next invocation of the tool will get the correct
- // result straight from golist.
- // TODO(matloob): Implement module tiebreaking?
- return path.Join(rpath, filepath.ToSlash(r)), true, nil
- }
- return filepath.ToSlash(r), true, nil
- }
- return "", false, nil
-}
-
-// absJoin absolutizes and flattens the lists of files.
-func absJoin(dir string, fileses ...[]string) (res []string) {
- for _, files := range fileses {
- for _, file := range files {
- if !filepath.IsAbs(file) {
- file = filepath.Join(dir, file)
- }
- res = append(res, file)
- }
- }
- return res
-}
-
-func jsonFlag(cfg *Config, goVersion int) string {
- if goVersion < 19 {
- return "-json"
- }
- var fields []string
- added := make(map[string]bool)
- addFields := func(fs ...string) {
- for _, f := range fs {
- if !added[f] {
- added[f] = true
- fields = append(fields, f)
- }
- }
- }
- addFields("Name", "ImportPath", "Error") // These fields are always needed
- if cfg.Mode&NeedFiles != 0 || cfg.Mode&NeedTypes != 0 {
- addFields("Dir", "GoFiles", "IgnoredGoFiles", "IgnoredOtherFiles", "CFiles",
- "CgoFiles", "CXXFiles", "MFiles", "HFiles", "FFiles", "SFiles",
- "SwigFiles", "SwigCXXFiles", "SysoFiles")
- if cfg.Tests {
- addFields("TestGoFiles", "XTestGoFiles")
- }
- }
- if cfg.Mode&NeedTypes != 0 {
- // CompiledGoFiles seems to be required for the test case TestCgoNoSyntax,
- // even when -compiled isn't passed in.
- // TODO(#52435): Should we make the test ask for -compiled, or automatically
- // request CompiledGoFiles in certain circumstances?
- addFields("Dir", "CompiledGoFiles")
- }
- if cfg.Mode&NeedCompiledGoFiles != 0 {
- addFields("Dir", "CompiledGoFiles", "Export")
- }
- if cfg.Mode&NeedImports != 0 {
- // When imports are requested, DepOnly is used to distinguish between packages
- // explicitly requested and transitive imports of those packages.
- addFields("DepOnly", "Imports", "ImportMap")
- if cfg.Tests {
- addFields("TestImports", "XTestImports")
- }
- }
- if cfg.Mode&NeedDeps != 0 {
- addFields("DepOnly")
- }
- if usesExportData(cfg) {
- // Request Dir in the unlikely case Export is not absolute.
- addFields("Dir", "Export")
- }
- if cfg.Mode&needInternalForTest != 0 {
- addFields("ForTest")
- }
- if cfg.Mode&needInternalDepsErrors != 0 {
- addFields("DepsErrors")
- }
- if cfg.Mode&NeedModule != 0 {
- addFields("Module")
- }
- if cfg.Mode&NeedEmbedFiles != 0 {
- addFields("EmbedFiles")
- }
- if cfg.Mode&NeedEmbedPatterns != 0 {
- addFields("EmbedPatterns")
- }
- return "-json=" + strings.Join(fields, ",")
-}
-
-func golistargs(cfg *Config, words []string, goVersion int) []string {
- const findFlags = NeedImports | NeedTypes | NeedSyntax | NeedTypesInfo
- fullargs := []string{
- "-e", jsonFlag(cfg, goVersion),
- fmt.Sprintf("-compiled=%t", cfg.Mode&(NeedCompiledGoFiles|NeedSyntax|NeedTypes|NeedTypesInfo|NeedTypesSizes) != 0),
- fmt.Sprintf("-test=%t", cfg.Tests),
- fmt.Sprintf("-export=%t", usesExportData(cfg)),
- fmt.Sprintf("-deps=%t", cfg.Mode&NeedImports != 0),
- // go list doesn't let you pass -test and -find together,
- // probably because you'd just get the TestMain.
- fmt.Sprintf("-find=%t", !cfg.Tests && cfg.Mode&findFlags == 0 && !usesExportData(cfg)),
- }
-
- // golang/go#60456: with go1.21 and later, go list serves pgo variants, which
- // can be costly to compute and may result in redundant processing for the
- // caller. Disable these variants. If someone wants to add e.g. a NeedPGO
- // mode flag, that should be a separate proposal.
- if goVersion >= 21 {
- fullargs = append(fullargs, "-pgo=off")
- }
-
- fullargs = append(fullargs, cfg.BuildFlags...)
- fullargs = append(fullargs, "--")
- fullargs = append(fullargs, words...)
- return fullargs
-}
-
-// cfgInvocation returns an Invocation that reflects cfg's settings.
-func (state *golistState) cfgInvocation() gocommand.Invocation {
- cfg := state.cfg
- return gocommand.Invocation{
- BuildFlags: cfg.BuildFlags,
- ModFile: cfg.modFile,
- ModFlag: cfg.modFlag,
- CleanEnv: cfg.Env != nil,
- Env: cfg.Env,
- Logf: cfg.Logf,
- WorkingDir: cfg.Dir,
- Overlay: cfg.goListOverlayFile,
- }
-}
-
-// invokeGo returns the stdout of a go command invocation.
-func (state *golistState) invokeGo(verb string, args ...string) (*bytes.Buffer, error) {
- cfg := state.cfg
-
- inv := state.cfgInvocation()
- inv.Verb = verb
- inv.Args = args
- gocmdRunner := cfg.gocmdRunner
- if gocmdRunner == nil {
- gocmdRunner = &gocommand.Runner{}
- }
- stdout, stderr, friendlyErr, err := gocmdRunner.RunRaw(cfg.Context, inv)
- if err != nil {
- // Check for 'go' executable not being found.
- if ee, ok := err.(*exec.Error); ok && ee.Err == exec.ErrNotFound {
- return nil, fmt.Errorf("'go list' driver requires 'go', but %s", exec.ErrNotFound)
- }
-
- exitErr, ok := err.(*exec.ExitError)
- if !ok {
- // Catastrophic error:
- // - context cancellation
- return nil, fmt.Errorf("couldn't run 'go': %w", err)
- }
-
- // Old go version?
- if strings.Contains(stderr.String(), "flag provided but not defined") {
- return nil, goTooOldError{fmt.Errorf("unsupported version of go: %s: %s", exitErr, stderr)}
- }
-
- // Related to #24854
- if len(stderr.String()) > 0 && strings.Contains(stderr.String(), "unexpected directory layout") {
- return nil, friendlyErr
- }
-
- // Is there an error running the C compiler in cgo? This will be reported in the "Error" field
- // and should be suppressed by go list -e.
- //
- // This condition is not perfect yet because the error message can include other error messages than runtime/cgo.
- isPkgPathRune := func(r rune) bool {
- // From https://golang.org/ref/spec#Import_declarations:
- // Implementation restriction: A compiler may restrict ImportPaths to non-empty strings
- // using only characters belonging to Unicode's L, M, N, P, and S general categories
- // (the Graphic characters without spaces) and may also exclude the
- // characters !"#$%&'()*,:;<=>?[\]^`{|} and the Unicode replacement character U+FFFD.
- return unicode.IsOneOf([]*unicode.RangeTable{unicode.L, unicode.M, unicode.N, unicode.P, unicode.S}, r) &&
- !strings.ContainsRune("!\"#$%&'()*,:;<=>?[\\]^`{|}\uFFFD", r)
- }
- // golang/go#36770: Handle case where cmd/go prints module download messages before the error.
- msg := stderr.String()
- for strings.HasPrefix(msg, "go: downloading") {
- msg = msg[strings.IndexRune(msg, '\n')+1:]
- }
- if len(stderr.String()) > 0 && strings.HasPrefix(stderr.String(), "# ") {
- msg := msg[len("# "):]
- if strings.HasPrefix(strings.TrimLeftFunc(msg, isPkgPathRune), "\n") {
- return stdout, nil
- }
- // Treat pkg-config errors as a special case (golang.org/issue/36770).
- if strings.HasPrefix(msg, "pkg-config") {
- return stdout, nil
- }
- }
-
- // This error only appears in stderr. See golang.org/cl/166398 for a fix in go list to show
- // the error in the Err section of stdout in case -e option is provided.
- // This fix is provided for backwards compatibility.
- if len(stderr.String()) > 0 && strings.Contains(stderr.String(), "named files must be .go files") {
- output := fmt.Sprintf(`{"ImportPath": "command-line-arguments","Incomplete": true,"Error": {"Pos": "","Err": %q}}`,
- strings.Trim(stderr.String(), "\n"))
- return bytes.NewBufferString(output), nil
- }
-
- // Similar to the previous error, but currently lacks a fix in Go.
- if len(stderr.String()) > 0 && strings.Contains(stderr.String(), "named files must all be in one directory") {
- output := fmt.Sprintf(`{"ImportPath": "command-line-arguments","Incomplete": true,"Error": {"Pos": "","Err": %q}}`,
- strings.Trim(stderr.String(), "\n"))
- return bytes.NewBufferString(output), nil
- }
-
- // Backwards compatibility for Go 1.11 because 1.12 and 1.13 put the directory in the ImportPath.
- // If the package doesn't exist, put the absolute path of the directory into the error message,
- // as Go 1.13 list does.
- const noSuchDirectory = "no such directory"
- if len(stderr.String()) > 0 && strings.Contains(stderr.String(), noSuchDirectory) {
- errstr := stderr.String()
- abspath := strings.TrimSpace(errstr[strings.Index(errstr, noSuchDirectory)+len(noSuchDirectory):])
- output := fmt.Sprintf(`{"ImportPath": %q,"Incomplete": true,"Error": {"Pos": "","Err": %q}}`,
- abspath, strings.Trim(stderr.String(), "\n"))
- return bytes.NewBufferString(output), nil
- }
-
- // Workaround for #29280: go list -e has incorrect behavior when an ad-hoc package doesn't exist.
- // Note that the error message we look for in this case is different that the one looked for above.
- if len(stderr.String()) > 0 && strings.Contains(stderr.String(), "no such file or directory") {
- output := fmt.Sprintf(`{"ImportPath": "command-line-arguments","Incomplete": true,"Error": {"Pos": "","Err": %q}}`,
- strings.Trim(stderr.String(), "\n"))
- return bytes.NewBufferString(output), nil
- }
-
- // Workaround for #34273. go list -e with GO111MODULE=on has incorrect behavior when listing a
- // directory outside any module.
- if len(stderr.String()) > 0 && strings.Contains(stderr.String(), "outside available modules") {
- output := fmt.Sprintf(`{"ImportPath": %q,"Incomplete": true,"Error": {"Pos": "","Err": %q}}`,
- // TODO(matloob): command-line-arguments isn't correct here.
- "command-line-arguments", strings.Trim(stderr.String(), "\n"))
- return bytes.NewBufferString(output), nil
- }
-
- // Another variation of the previous error
- if len(stderr.String()) > 0 && strings.Contains(stderr.String(), "outside module root") {
- output := fmt.Sprintf(`{"ImportPath": %q,"Incomplete": true,"Error": {"Pos": "","Err": %q}}`,
- // TODO(matloob): command-line-arguments isn't correct here.
- "command-line-arguments", strings.Trim(stderr.String(), "\n"))
- return bytes.NewBufferString(output), nil
- }
-
- // Workaround for an instance of golang.org/issue/26755: go list -e will return a non-zero exit
- // status if there's a dependency on a package that doesn't exist. But it should return
- // a zero exit status and set an error on that package.
- if len(stderr.String()) > 0 && strings.Contains(stderr.String(), "no Go files in") {
- // Don't clobber stdout if `go list` actually returned something.
- if len(stdout.String()) > 0 {
- return stdout, nil
- }
- // try to extract package name from string
- stderrStr := stderr.String()
- var importPath string
- colon := strings.Index(stderrStr, ":")
- if colon > 0 && strings.HasPrefix(stderrStr, "go build ") {
- importPath = stderrStr[len("go build "):colon]
- }
- output := fmt.Sprintf(`{"ImportPath": %q,"Incomplete": true,"Error": {"Pos": "","Err": %q}}`,
- importPath, strings.Trim(stderrStr, "\n"))
- return bytes.NewBufferString(output), nil
- }
-
- // Export mode entails a build.
- // If that build fails, errors appear on stderr
- // (despite the -e flag) and the Export field is blank.
- // Do not fail in that case.
- // The same is true if an ad-hoc package given to go list doesn't exist.
- // TODO(matloob): Remove these once we can depend on go list to exit with a zero status with -e even when
- // packages don't exist or a build fails.
- if !usesExportData(cfg) && !containsGoFile(args) {
- return nil, friendlyErr
- }
- }
- return stdout, nil
-}
-
-func containsGoFile(s []string) bool {
- for _, f := range s {
- if strings.HasSuffix(f, ".go") {
- return true
- }
- }
- return false
-}
-
-func cmdDebugStr(cmd *exec.Cmd) string {
- env := make(map[string]string)
- for _, kv := range cmd.Env {
- split := strings.SplitN(kv, "=", 2)
- k, v := split[0], split[1]
- env[k] = v
- }
-
- var args []string
- for _, arg := range cmd.Args {
- quoted := strconv.Quote(arg)
- if quoted[1:len(quoted)-1] != arg || strings.Contains(arg, " ") {
- args = append(args, quoted)
- } else {
- args = append(args, arg)
- }
- }
- return fmt.Sprintf("GOROOT=%v GOPATH=%v GO111MODULE=%v GOPROXY=%v PWD=%v %v", env["GOROOT"], env["GOPATH"], env["GO111MODULE"], env["GOPROXY"], env["PWD"], strings.Join(args, " "))
-}
-
-// getSizesForArgs queries 'go list' for the appropriate
-// Compiler and GOARCH arguments to pass to [types.SizesFor].
-func getSizesForArgs(ctx context.Context, inv gocommand.Invocation, gocmdRunner *gocommand.Runner) (string, string, error) {
- inv.Verb = "list"
- inv.Args = []string{"-f", "{{context.GOARCH}} {{context.Compiler}}", "--", "unsafe"}
- stdout, stderr, friendlyErr, rawErr := gocmdRunner.RunRaw(ctx, inv)
- var goarch, compiler string
- if rawErr != nil {
- rawErrMsg := rawErr.Error()
- if strings.Contains(rawErrMsg, "cannot find main module") ||
- strings.Contains(rawErrMsg, "go.mod file not found") {
- // User's running outside of a module.
- // All bets are off. Get GOARCH and guess compiler is gc.
- // TODO(matloob): Is this a problem in practice?
- inv.Verb = "env"
- inv.Args = []string{"GOARCH"}
- envout, enverr := gocmdRunner.Run(ctx, inv)
- if enverr != nil {
- return "", "", enverr
- }
- goarch = strings.TrimSpace(envout.String())
- compiler = "gc"
- } else if friendlyErr != nil {
- return "", "", friendlyErr
- } else {
- // This should be unreachable, but be defensive
- // in case RunRaw's error results are inconsistent.
- return "", "", rawErr
- }
- } else {
- fields := strings.Fields(stdout.String())
- if len(fields) < 2 {
- return "", "", fmt.Errorf("could not parse GOARCH and Go compiler in format \" \":\nstdout: <<%s>>\nstderr: <<%s>>",
- stdout.String(), stderr.String())
- }
- goarch = fields[0]
- compiler = fields[1]
- }
- return compiler, goarch, nil
-}
diff --git a/vendor/golang.org/x/tools/go/packages/golist_overlay.go b/vendor/golang.org/x/tools/go/packages/golist_overlay.go
deleted file mode 100644
index d823c474ad3..00000000000
--- a/vendor/golang.org/x/tools/go/packages/golist_overlay.go
+++ /dev/null
@@ -1,83 +0,0 @@
-// Copyright 2018 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-package packages
-
-import (
- "encoding/json"
- "path/filepath"
-
- "golang.org/x/tools/internal/gocommand"
-)
-
-// determineRootDirs returns a mapping from absolute directories that could
-// contain code to their corresponding import path prefixes.
-func (state *golistState) determineRootDirs() (map[string]string, error) {
- env, err := state.getEnv()
- if err != nil {
- return nil, err
- }
- if env["GOMOD"] != "" {
- state.rootsOnce.Do(func() {
- state.rootDirs, state.rootDirsError = state.determineRootDirsModules()
- })
- } else {
- state.rootsOnce.Do(func() {
- state.rootDirs, state.rootDirsError = state.determineRootDirsGOPATH()
- })
- }
- return state.rootDirs, state.rootDirsError
-}
-
-func (state *golistState) determineRootDirsModules() (map[string]string, error) {
- // List all of the modules--the first will be the directory for the main
- // module. Any replaced modules will also need to be treated as roots.
- // Editing files in the module cache isn't a great idea, so we don't
- // plan to ever support that.
- out, err := state.invokeGo("list", "-m", "-json", "all")
- if err != nil {
- // 'go list all' will fail if we're outside of a module and
- // GO111MODULE=on. Try falling back without 'all'.
- var innerErr error
- out, innerErr = state.invokeGo("list", "-m", "-json")
- if innerErr != nil {
- return nil, err
- }
- }
- roots := map[string]string{}
- modules := map[string]string{}
- var i int
- for dec := json.NewDecoder(out); dec.More(); {
- mod := new(gocommand.ModuleJSON)
- if err := dec.Decode(mod); err != nil {
- return nil, err
- }
- if mod.Dir != "" && mod.Path != "" {
- // This is a valid module; add it to the map.
- absDir, err := filepath.Abs(mod.Dir)
- if err != nil {
- return nil, err
- }
- modules[absDir] = mod.Path
- // The first result is the main module.
- if i == 0 || mod.Replace != nil && mod.Replace.Path != "" {
- roots[absDir] = mod.Path
- }
- }
- i++
- }
- return roots, nil
-}
-
-func (state *golistState) determineRootDirsGOPATH() (map[string]string, error) {
- m := map[string]string{}
- for _, dir := range filepath.SplitList(state.mustGetEnv()["GOPATH"]) {
- absDir, err := filepath.Abs(dir)
- if err != nil {
- return nil, err
- }
- m[filepath.Join(absDir, "src")] = ""
- }
- return m, nil
-}
diff --git a/vendor/golang.org/x/tools/go/packages/loadmode_string.go b/vendor/golang.org/x/tools/go/packages/loadmode_string.go
deleted file mode 100644
index 5fcad6ea6db..00000000000
--- a/vendor/golang.org/x/tools/go/packages/loadmode_string.go
+++ /dev/null
@@ -1,54 +0,0 @@
-// Copyright 2019 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-package packages
-
-import (
- "fmt"
- "strings"
-)
-
-var modes = [...]struct {
- mode LoadMode
- name string
-}{
- {NeedName, "NeedName"},
- {NeedFiles, "NeedFiles"},
- {NeedCompiledGoFiles, "NeedCompiledGoFiles"},
- {NeedImports, "NeedImports"},
- {NeedDeps, "NeedDeps"},
- {NeedExportFile, "NeedExportFile"},
- {NeedTypes, "NeedTypes"},
- {NeedSyntax, "NeedSyntax"},
- {NeedTypesInfo, "NeedTypesInfo"},
- {NeedTypesSizes, "NeedTypesSizes"},
- {NeedModule, "NeedModule"},
- {NeedEmbedFiles, "NeedEmbedFiles"},
- {NeedEmbedPatterns, "NeedEmbedPatterns"},
-}
-
-func (mode LoadMode) String() string {
- if mode == 0 {
- return "LoadMode(0)"
- }
- var out []string
- // named bits
- for _, item := range modes {
- if (mode & item.mode) != 0 {
- mode ^= item.mode
- out = append(out, item.name)
- }
- }
- // unnamed residue
- if mode != 0 {
- if out == nil {
- return fmt.Sprintf("LoadMode(%#x)", int(mode))
- }
- out = append(out, fmt.Sprintf("%#x", int(mode)))
- }
- if len(out) == 1 {
- return out[0]
- }
- return "(" + strings.Join(out, "|") + ")"
-}
diff --git a/vendor/golang.org/x/tools/go/packages/packages.go b/vendor/golang.org/x/tools/go/packages/packages.go
deleted file mode 100644
index f227f1bab10..00000000000
--- a/vendor/golang.org/x/tools/go/packages/packages.go
+++ /dev/null
@@ -1,1527 +0,0 @@
-// Copyright 2018 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-package packages
-
-// See doc.go for package documentation and implementation notes.
-
-import (
- "context"
- "encoding/json"
- "errors"
- "fmt"
- "go/ast"
- "go/parser"
- "go/scanner"
- "go/token"
- "go/types"
- "io"
- "log"
- "os"
- "path/filepath"
- "runtime"
- "strings"
- "sync"
- "time"
-
- "golang.org/x/sync/errgroup"
-
- "golang.org/x/tools/go/gcexportdata"
- "golang.org/x/tools/internal/gocommand"
- "golang.org/x/tools/internal/packagesinternal"
- "golang.org/x/tools/internal/typesinternal"
- "golang.org/x/tools/internal/versions"
-)
-
-// A LoadMode controls the amount of detail to return when loading.
-// The bits below can be combined to specify which fields should be
-// filled in the result packages.
-//
-// The zero value is a special case, equivalent to combining
-// the NeedName, NeedFiles, and NeedCompiledGoFiles bits.
-//
-// ID and Errors (if present) will always be filled.
-// [Load] may return more information than requested.
-//
-// Unfortunately there are a number of open bugs related to
-// interactions among the LoadMode bits:
-// - https://github.com/golang/go/issues/56633
-// - https://github.com/golang/go/issues/56677
-// - https://github.com/golang/go/issues/58726
-// - https://github.com/golang/go/issues/63517
-type LoadMode int
-
-const (
- // NeedName adds Name and PkgPath.
- NeedName LoadMode = 1 << iota
-
- // NeedFiles adds GoFiles and OtherFiles.
- NeedFiles
-
- // NeedCompiledGoFiles adds CompiledGoFiles.
- NeedCompiledGoFiles
-
- // NeedImports adds Imports. If NeedDeps is not set, the Imports field will contain
- // "placeholder" Packages with only the ID set.
- NeedImports
-
- // NeedDeps adds the fields requested by the LoadMode in the packages in Imports.
- NeedDeps
-
- // NeedExportFile adds ExportFile.
- NeedExportFile
-
- // NeedTypes adds Types, Fset, and IllTyped.
- NeedTypes
-
- // NeedSyntax adds Syntax and Fset.
- NeedSyntax
-
- // NeedTypesInfo adds TypesInfo.
- NeedTypesInfo
-
- // NeedTypesSizes adds TypesSizes.
- NeedTypesSizes
-
- // needInternalDepsErrors adds the internal deps errors field for use by gopls.
- needInternalDepsErrors
-
- // needInternalForTest adds the internal forTest field.
- // Tests must also be set on the context for this field to be populated.
- needInternalForTest
-
- // typecheckCgo enables full support for type checking cgo. Requires Go 1.15+.
- // Modifies CompiledGoFiles and Types, and has no effect on its own.
- typecheckCgo
-
- // NeedModule adds Module.
- NeedModule
-
- // NeedEmbedFiles adds EmbedFiles.
- NeedEmbedFiles
-
- // NeedEmbedPatterns adds EmbedPatterns.
- NeedEmbedPatterns
-
- // Be sure to update loadmode_string.go when adding new items!
-)
-
-const (
- // LoadFiles loads the name and file names for the initial packages.
- //
- // Deprecated: LoadFiles exists for historical compatibility
- // and should not be used. Please directly specify the needed fields using the Need values.
- LoadFiles = NeedName | NeedFiles | NeedCompiledGoFiles
-
- // LoadImports loads the name, file names, and import mapping for the initial packages.
- //
- // Deprecated: LoadImports exists for historical compatibility
- // and should not be used. Please directly specify the needed fields using the Need values.
- LoadImports = LoadFiles | NeedImports
-
- // LoadTypes loads exported type information for the initial packages.
- //
- // Deprecated: LoadTypes exists for historical compatibility
- // and should not be used. Please directly specify the needed fields using the Need values.
- LoadTypes = LoadImports | NeedTypes | NeedTypesSizes
-
- // LoadSyntax loads typed syntax for the initial packages.
- //
- // Deprecated: LoadSyntax exists for historical compatibility
- // and should not be used. Please directly specify the needed fields using the Need values.
- LoadSyntax = LoadTypes | NeedSyntax | NeedTypesInfo
-
- // LoadAllSyntax loads typed syntax for the initial packages and all dependencies.
- //
- // Deprecated: LoadAllSyntax exists for historical compatibility
- // and should not be used. Please directly specify the needed fields using the Need values.
- LoadAllSyntax = LoadSyntax | NeedDeps
-
- // Deprecated: NeedExportsFile is a historical misspelling of NeedExportFile.
- NeedExportsFile = NeedExportFile
-)
-
-// A Config specifies details about how packages should be loaded.
-// The zero value is a valid configuration.
-//
-// Calls to Load do not modify this struct.
-//
-// TODO(adonovan): #67702: this is currently false: in fact,
-// calls to [Load] do not modify the public fields of this struct, but
-// may modify hidden fields, so concurrent calls to [Load] must not
-// use the same Config. But perhaps we should reestablish the
-// documented invariant.
-type Config struct {
- // Mode controls the level of information returned for each package.
- Mode LoadMode
-
- // Context specifies the context for the load operation.
- // Cancelling the context may cause [Load] to abort and
- // return an error.
- Context context.Context
-
- // Logf is the logger for the config.
- // If the user provides a logger, debug logging is enabled.
- // If the GOPACKAGESDEBUG environment variable is set to true,
- // but the logger is nil, default to log.Printf.
- Logf func(format string, args ...interface{})
-
- // Dir is the directory in which to run the build system's query tool
- // that provides information about the packages.
- // If Dir is empty, the tool is run in the current directory.
- Dir string
-
- // Env is the environment to use when invoking the build system's query tool.
- // If Env is nil, the current environment is used.
- // As in os/exec's Cmd, only the last value in the slice for
- // each environment key is used. To specify the setting of only
- // a few variables, append to the current environment, as in:
- //
- // opt.Env = append(os.Environ(), "GOOS=plan9", "GOARCH=386")
- //
- Env []string
-
- // gocmdRunner guards go command calls from concurrency errors.
- gocmdRunner *gocommand.Runner
-
- // BuildFlags is a list of command-line flags to be passed through to
- // the build system's query tool.
- BuildFlags []string
-
- // modFile will be used for -modfile in go command invocations.
- modFile string
-
- // modFlag will be used for -modfile in go command invocations.
- modFlag string
-
- // Fset provides source position information for syntax trees and types.
- // If Fset is nil, Load will use a new fileset, but preserve Fset's value.
- Fset *token.FileSet
-
- // ParseFile is called to read and parse each file
- // when preparing a package's type-checked syntax tree.
- // It must be safe to call ParseFile simultaneously from multiple goroutines.
- // If ParseFile is nil, the loader will uses parser.ParseFile.
- //
- // ParseFile should parse the source from src and use filename only for
- // recording position information.
- //
- // An application may supply a custom implementation of ParseFile
- // to change the effective file contents or the behavior of the parser,
- // or to modify the syntax tree. For example, selectively eliminating
- // unwanted function bodies can significantly accelerate type checking.
- ParseFile func(fset *token.FileSet, filename string, src []byte) (*ast.File, error)
-
- // If Tests is set, the loader includes not just the packages
- // matching a particular pattern but also any related test packages,
- // including test-only variants of the package and the test executable.
- //
- // For example, when using the go command, loading "fmt" with Tests=true
- // returns four packages, with IDs "fmt" (the standard package),
- // "fmt [fmt.test]" (the package as compiled for the test),
- // "fmt_test" (the test functions from source files in package fmt_test),
- // and "fmt.test" (the test binary).
- //
- // In build systems with explicit names for tests,
- // setting Tests may have no effect.
- Tests bool
-
- // Overlay is a mapping from absolute file paths to file contents.
- //
- // For each map entry, [Load] uses the alternative file
- // contents provided by the overlay mapping instead of reading
- // from the file system. This mechanism can be used to enable
- // editor-integrated tools to correctly analyze the contents
- // of modified but unsaved buffers, for example.
- //
- // The overlay mapping is passed to the build system's driver
- // (see "The driver protocol") so that it too can report
- // consistent package metadata about unsaved files. However,
- // drivers may vary in their level of support for overlays.
- Overlay map[string][]byte
-
- // goListOverlayFile is the JSON file that encodes the Overlay
- // mapping, used by 'go list -overlay=...'
- goListOverlayFile string
-}
-
-// Load loads and returns the Go packages named by the given patterns.
-//
-// The cfg parameter specifies loading options; nil behaves the same as an empty [Config].
-//
-// The [Config.Mode] field is a set of bits that determine what kinds
-// of information should be computed and returned. Modes that require
-// more information tend to be slower. See [LoadMode] for details
-// and important caveats. Its zero value is equivalent to
-// [NeedName] | [NeedFiles] | [NeedCompiledGoFiles].
-//
-// Each call to Load returns a new set of [Package] instances.
-// The Packages and their Imports form a directed acyclic graph.
-//
-// If the [NeedTypes] mode flag was set, each call to Load uses a new
-// [types.Importer], so [types.Object] and [types.Type] values from
-// different calls to Load must not be mixed as they will have
-// inconsistent notions of type identity.
-//
-// If any of the patterns was invalid as defined by the
-// underlying build system, Load returns an error.
-// It may return an empty list of packages without an error,
-// for instance for an empty expansion of a valid wildcard.
-// Errors associated with a particular package are recorded in the
-// corresponding Package's Errors list, and do not cause Load to
-// return an error. Clients may need to handle such errors before
-// proceeding with further analysis. The [PrintErrors] function is
-// provided for convenient display of all errors.
-func Load(cfg *Config, patterns ...string) ([]*Package, error) {
- ld := newLoader(cfg)
- response, external, err := defaultDriver(&ld.Config, patterns...)
- if err != nil {
- return nil, err
- }
-
- ld.sizes = types.SizesFor(response.Compiler, response.Arch)
- if ld.sizes == nil && ld.Config.Mode&(NeedTypes|NeedTypesSizes|NeedTypesInfo) != 0 {
- // Type size information is needed but unavailable.
- if external {
- // An external driver may fail to populate the Compiler/GOARCH fields,
- // especially since they are relatively new (see #63700).
- // Provide a sensible fallback in this case.
- ld.sizes = types.SizesFor("gc", runtime.GOARCH)
- if ld.sizes == nil { // gccgo-only arch
- ld.sizes = types.SizesFor("gc", "amd64")
- }
- } else {
- // Go list should never fail to deliver accurate size information.
- // Reject the whole Load since the error is the same for every package.
- return nil, fmt.Errorf("can't determine type sizes for compiler %q on GOARCH %q",
- response.Compiler, response.Arch)
- }
- }
-
- return ld.refine(response)
-}
-
-// defaultDriver is a driver that implements go/packages' fallback behavior.
-// It will try to request to an external driver, if one exists. If there's
-// no external driver, or the driver returns a response with NotHandled set,
-// defaultDriver will fall back to the go list driver.
-// The boolean result indicates that an external driver handled the request.
-func defaultDriver(cfg *Config, patterns ...string) (*DriverResponse, bool, error) {
- const (
- // windowsArgMax specifies the maximum command line length for
- // the Windows' CreateProcess function.
- windowsArgMax = 32767
- // maxEnvSize is a very rough estimation of the maximum environment
- // size of a user.
- maxEnvSize = 16384
- // safeArgMax specifies the maximum safe command line length to use
- // by the underlying driver excl. the environment. We choose the Windows'
- // ARG_MAX as the starting point because it's one of the lowest ARG_MAX
- // constants out of the different supported platforms,
- // e.g., https://www.in-ulm.de/~mascheck/various/argmax/#results.
- safeArgMax = windowsArgMax - maxEnvSize
- )
- chunks, err := splitIntoChunks(patterns, safeArgMax)
- if err != nil {
- return nil, false, err
- }
-
- if driver := findExternalDriver(cfg); driver != nil {
- response, err := callDriverOnChunks(driver, cfg, chunks)
- if err != nil {
- return nil, false, err
- } else if !response.NotHandled {
- return response, true, nil
- }
- // (fall through)
- }
-
- // go list fallback
- //
- // Write overlays once, as there are many calls
- // to 'go list' (one per chunk plus others too).
- overlay, cleanupOverlay, err := gocommand.WriteOverlays(cfg.Overlay)
- if err != nil {
- return nil, false, err
- }
- defer cleanupOverlay()
- cfg.goListOverlayFile = overlay
-
- response, err := callDriverOnChunks(goListDriver, cfg, chunks)
- if err != nil {
- return nil, false, err
- }
- return response, false, err
-}
-
-// splitIntoChunks chunks the slice so that the total number of characters
-// in a chunk is no longer than argMax.
-func splitIntoChunks(patterns []string, argMax int) ([][]string, error) {
- if argMax <= 0 {
- return nil, errors.New("failed to split patterns into chunks, negative safe argMax value")
- }
- var chunks [][]string
- charsInChunk := 0
- nextChunkStart := 0
- for i, v := range patterns {
- vChars := len(v)
- if vChars > argMax {
- // a single pattern is longer than the maximum safe ARG_MAX, hardly should happen
- return nil, errors.New("failed to split patterns into chunks, a pattern is too long")
- }
- charsInChunk += vChars + 1 // +1 is for a whitespace between patterns that has to be counted too
- if charsInChunk > argMax {
- chunks = append(chunks, patterns[nextChunkStart:i])
- nextChunkStart = i
- charsInChunk = vChars
- }
- }
- // add the last chunk
- if nextChunkStart < len(patterns) {
- chunks = append(chunks, patterns[nextChunkStart:])
- }
- return chunks, nil
-}
-
-func callDriverOnChunks(driver driver, cfg *Config, chunks [][]string) (*DriverResponse, error) {
- if len(chunks) == 0 {
- return driver(cfg)
- }
- responses := make([]*DriverResponse, len(chunks))
- errNotHandled := errors.New("driver returned NotHandled")
- var g errgroup.Group
- for i, chunk := range chunks {
- i := i
- chunk := chunk
- g.Go(func() (err error) {
- responses[i], err = driver(cfg, chunk...)
- if responses[i] != nil && responses[i].NotHandled {
- err = errNotHandled
- }
- return err
- })
- }
- if err := g.Wait(); err != nil {
- if errors.Is(err, errNotHandled) {
- return &DriverResponse{NotHandled: true}, nil
- }
- return nil, err
- }
- return mergeResponses(responses...), nil
-}
-
-func mergeResponses(responses ...*DriverResponse) *DriverResponse {
- if len(responses) == 0 {
- return nil
- }
- response := newDeduper()
- response.dr.NotHandled = false
- response.dr.Compiler = responses[0].Compiler
- response.dr.Arch = responses[0].Arch
- response.dr.GoVersion = responses[0].GoVersion
- for _, v := range responses {
- response.addAll(v)
- }
- return response.dr
-}
-
-// A Package describes a loaded Go package.
-//
-// It also defines part of the JSON schema of [DriverResponse].
-// See the package documentation for an overview.
-type Package struct {
- // ID is a unique identifier for a package,
- // in a syntax provided by the underlying build system.
- //
- // Because the syntax varies based on the build system,
- // clients should treat IDs as opaque and not attempt to
- // interpret them.
- ID string
-
- // Name is the package name as it appears in the package source code.
- Name string
-
- // PkgPath is the package path as used by the go/types package.
- PkgPath string
-
- // Errors contains any errors encountered querying the metadata
- // of the package, or while parsing or type-checking its files.
- Errors []Error
-
- // TypeErrors contains the subset of errors produced during type checking.
- TypeErrors []types.Error
-
- // GoFiles lists the absolute file paths of the package's Go source files.
- // It may include files that should not be compiled, for example because
- // they contain non-matching build tags, are documentary pseudo-files such as
- // unsafe/unsafe.go or builtin/builtin.go, or are subject to cgo preprocessing.
- GoFiles []string
-
- // CompiledGoFiles lists the absolute file paths of the package's source
- // files that are suitable for type checking.
- // This may differ from GoFiles if files are processed before compilation.
- CompiledGoFiles []string
-
- // OtherFiles lists the absolute file paths of the package's non-Go source files,
- // including assembly, C, C++, Fortran, Objective-C, SWIG, and so on.
- OtherFiles []string
-
- // EmbedFiles lists the absolute file paths of the package's files
- // embedded with go:embed.
- EmbedFiles []string
-
- // EmbedPatterns lists the absolute file patterns of the package's
- // files embedded with go:embed.
- EmbedPatterns []string
-
- // IgnoredFiles lists source files that are not part of the package
- // using the current build configuration but that might be part of
- // the package using other build configurations.
- IgnoredFiles []string
-
- // ExportFile is the absolute path to a file containing type
- // information for the package as provided by the build system.
- ExportFile string
-
- // Imports maps import paths appearing in the package's Go source files
- // to corresponding loaded Packages.
- Imports map[string]*Package
-
- // Module is the module information for the package if it exists.
- //
- // Note: it may be missing for std and cmd; see Go issue #65816.
- Module *Module
-
- // -- The following fields are not part of the driver JSON schema. --
-
- // Types provides type information for the package.
- // The NeedTypes LoadMode bit sets this field for packages matching the
- // patterns; type information for dependencies may be missing or incomplete,
- // unless NeedDeps and NeedImports are also set.
- //
- // Each call to [Load] returns a consistent set of type
- // symbols, as defined by the comment at [types.Identical].
- // Avoid mixing type information from two or more calls to [Load].
- Types *types.Package `json:"-"`
-
- // Fset provides position information for Types, TypesInfo, and Syntax.
- // It is set only when Types is set.
- Fset *token.FileSet `json:"-"`
-
- // IllTyped indicates whether the package or any dependency contains errors.
- // It is set only when Types is set.
- IllTyped bool `json:"-"`
-
- // Syntax is the package's syntax trees, for the files listed in CompiledGoFiles.
- //
- // The NeedSyntax LoadMode bit populates this field for packages matching the patterns.
- // If NeedDeps and NeedImports are also set, this field will also be populated
- // for dependencies.
- //
- // Syntax is kept in the same order as CompiledGoFiles, with the caveat that nils are
- // removed. If parsing returned nil, Syntax may be shorter than CompiledGoFiles.
- Syntax []*ast.File `json:"-"`
-
- // TypesInfo provides type information about the package's syntax trees.
- // It is set only when Syntax is set.
- TypesInfo *types.Info `json:"-"`
-
- // TypesSizes provides the effective size function for types in TypesInfo.
- TypesSizes types.Sizes `json:"-"`
-
- // -- internal --
-
- // forTest is the package under test, if any.
- forTest string
-
- // depsErrors is the DepsErrors field from the go list response, if any.
- depsErrors []*packagesinternal.PackageError
-}
-
-// Module provides module information for a package.
-//
-// It also defines part of the JSON schema of [DriverResponse].
-// See the package documentation for an overview.
-type Module struct {
- Path string // module path
- Version string // module version
- Replace *Module // replaced by this module
- Time *time.Time // time version was created
- Main bool // is this the main module?
- Indirect bool // is this module only an indirect dependency of main module?
- Dir string // directory holding files for this module, if any
- GoMod string // path to go.mod file used when loading this module, if any
- GoVersion string // go version used in module
- Error *ModuleError // error loading module
-}
-
-// ModuleError holds errors loading a module.
-type ModuleError struct {
- Err string // the error itself
-}
-
-func init() {
- packagesinternal.GetForTest = func(p interface{}) string {
- return p.(*Package).forTest
- }
- packagesinternal.GetDepsErrors = func(p interface{}) []*packagesinternal.PackageError {
- return p.(*Package).depsErrors
- }
- packagesinternal.SetModFile = func(config interface{}, value string) {
- config.(*Config).modFile = value
- }
- packagesinternal.SetModFlag = func(config interface{}, value string) {
- config.(*Config).modFlag = value
- }
- packagesinternal.TypecheckCgo = int(typecheckCgo)
- packagesinternal.DepsErrors = int(needInternalDepsErrors)
- packagesinternal.ForTest = int(needInternalForTest)
-}
-
-// An Error describes a problem with a package's metadata, syntax, or types.
-type Error struct {
- Pos string // "file:line:col" or "file:line" or "" or "-"
- Msg string
- Kind ErrorKind
-}
-
-// ErrorKind describes the source of the error, allowing the user to
-// differentiate between errors generated by the driver, the parser, or the
-// type-checker.
-type ErrorKind int
-
-const (
- UnknownError ErrorKind = iota
- ListError
- ParseError
- TypeError
-)
-
-func (err Error) Error() string {
- pos := err.Pos
- if pos == "" {
- pos = "-" // like token.Position{}.String()
- }
- return pos + ": " + err.Msg
-}
-
-// flatPackage is the JSON form of Package
-// It drops all the type and syntax fields, and transforms the Imports
-//
-// TODO(adonovan): identify this struct with Package, effectively
-// publishing the JSON protocol.
-type flatPackage struct {
- ID string
- Name string `json:",omitempty"`
- PkgPath string `json:",omitempty"`
- Errors []Error `json:",omitempty"`
- GoFiles []string `json:",omitempty"`
- CompiledGoFiles []string `json:",omitempty"`
- OtherFiles []string `json:",omitempty"`
- EmbedFiles []string `json:",omitempty"`
- EmbedPatterns []string `json:",omitempty"`
- IgnoredFiles []string `json:",omitempty"`
- ExportFile string `json:",omitempty"`
- Imports map[string]string `json:",omitempty"`
-}
-
-// MarshalJSON returns the Package in its JSON form.
-// For the most part, the structure fields are written out unmodified, and
-// the type and syntax fields are skipped.
-// The imports are written out as just a map of path to package id.
-// The errors are written using a custom type that tries to preserve the
-// structure of error types we know about.
-//
-// This method exists to enable support for additional build systems. It is
-// not intended for use by clients of the API and we may change the format.
-func (p *Package) MarshalJSON() ([]byte, error) {
- flat := &flatPackage{
- ID: p.ID,
- Name: p.Name,
- PkgPath: p.PkgPath,
- Errors: p.Errors,
- GoFiles: p.GoFiles,
- CompiledGoFiles: p.CompiledGoFiles,
- OtherFiles: p.OtherFiles,
- EmbedFiles: p.EmbedFiles,
- EmbedPatterns: p.EmbedPatterns,
- IgnoredFiles: p.IgnoredFiles,
- ExportFile: p.ExportFile,
- }
- if len(p.Imports) > 0 {
- flat.Imports = make(map[string]string, len(p.Imports))
- for path, ipkg := range p.Imports {
- flat.Imports[path] = ipkg.ID
- }
- }
- return json.Marshal(flat)
-}
-
-// UnmarshalJSON reads in a Package from its JSON format.
-// See MarshalJSON for details about the format accepted.
-func (p *Package) UnmarshalJSON(b []byte) error {
- flat := &flatPackage{}
- if err := json.Unmarshal(b, &flat); err != nil {
- return err
- }
- *p = Package{
- ID: flat.ID,
- Name: flat.Name,
- PkgPath: flat.PkgPath,
- Errors: flat.Errors,
- GoFiles: flat.GoFiles,
- CompiledGoFiles: flat.CompiledGoFiles,
- OtherFiles: flat.OtherFiles,
- EmbedFiles: flat.EmbedFiles,
- EmbedPatterns: flat.EmbedPatterns,
- IgnoredFiles: flat.IgnoredFiles,
- ExportFile: flat.ExportFile,
- }
- if len(flat.Imports) > 0 {
- p.Imports = make(map[string]*Package, len(flat.Imports))
- for path, id := range flat.Imports {
- p.Imports[path] = &Package{ID: id}
- }
- }
- return nil
-}
-
-func (p *Package) String() string { return p.ID }
-
-// loaderPackage augments Package with state used during the loading phase
-type loaderPackage struct {
- *Package
- importErrors map[string]error // maps each bad import to its error
- loadOnce sync.Once
- color uint8 // for cycle detection
- needsrc bool // load from source (Mode >= LoadTypes)
- needtypes bool // type information is either requested or depended on
- initial bool // package was matched by a pattern
- goVersion int // minor version number of go command on PATH
-}
-
-// loader holds the working state of a single call to load.
-type loader struct {
- pkgs map[string]*loaderPackage
- Config
- sizes types.Sizes // non-nil if needed by mode
- parseCache map[string]*parseValue
- parseCacheMu sync.Mutex
- exportMu sync.Mutex // enforces mutual exclusion of exportdata operations
-
- // Config.Mode contains the implied mode (see impliedLoadMode).
- // Implied mode contains all the fields we need the data for.
- // In requestedMode there are the actually requested fields.
- // We'll zero them out before returning packages to the user.
- // This makes it easier for us to get the conditions where
- // we need certain modes right.
- requestedMode LoadMode
-}
-
-type parseValue struct {
- f *ast.File
- err error
- ready chan struct{}
-}
-
-func newLoader(cfg *Config) *loader {
- ld := &loader{
- parseCache: map[string]*parseValue{},
- }
- if cfg != nil {
- ld.Config = *cfg
- // If the user has provided a logger, use it.
- ld.Config.Logf = cfg.Logf
- }
- if ld.Config.Logf == nil {
- // If the GOPACKAGESDEBUG environment variable is set to true,
- // but the user has not provided a logger, default to log.Printf.
- if debug {
- ld.Config.Logf = log.Printf
- } else {
- ld.Config.Logf = func(format string, args ...interface{}) {}
- }
- }
- if ld.Config.Mode == 0 {
- ld.Config.Mode = NeedName | NeedFiles | NeedCompiledGoFiles // Preserve zero behavior of Mode for backwards compatibility.
- }
- if ld.Config.Env == nil {
- ld.Config.Env = os.Environ()
- }
- if ld.Config.gocmdRunner == nil {
- ld.Config.gocmdRunner = &gocommand.Runner{}
- }
- if ld.Context == nil {
- ld.Context = context.Background()
- }
- if ld.Dir == "" {
- if dir, err := os.Getwd(); err == nil {
- ld.Dir = dir
- }
- }
-
- // Save the actually requested fields. We'll zero them out before returning packages to the user.
- ld.requestedMode = ld.Mode
- ld.Mode = impliedLoadMode(ld.Mode)
-
- if ld.Mode&NeedTypes != 0 || ld.Mode&NeedSyntax != 0 {
- if ld.Fset == nil {
- ld.Fset = token.NewFileSet()
- }
-
- // ParseFile is required even in LoadTypes mode
- // because we load source if export data is missing.
- if ld.ParseFile == nil {
- ld.ParseFile = func(fset *token.FileSet, filename string, src []byte) (*ast.File, error) {
- // We implicitly promise to keep doing ast.Object resolution. :(
- const mode = parser.AllErrors | parser.ParseComments
- return parser.ParseFile(fset, filename, src, mode)
- }
- }
- }
-
- return ld
-}
-
-// refine connects the supplied packages into a graph and then adds type
-// and syntax information as requested by the LoadMode.
-func (ld *loader) refine(response *DriverResponse) ([]*Package, error) {
- roots := response.Roots
- rootMap := make(map[string]int, len(roots))
- for i, root := range roots {
- rootMap[root] = i
- }
- ld.pkgs = make(map[string]*loaderPackage)
- // first pass, fixup and build the map and roots
- var initial = make([]*loaderPackage, len(roots))
- for _, pkg := range response.Packages {
- rootIndex := -1
- if i, found := rootMap[pkg.ID]; found {
- rootIndex = i
- }
-
- // Overlays can invalidate export data.
- // TODO(matloob): make this check fine-grained based on dependencies on overlaid files
- exportDataInvalid := len(ld.Overlay) > 0 || pkg.ExportFile == "" && pkg.PkgPath != "unsafe"
- // This package needs type information if the caller requested types and the package is
- // either a root, or it's a non-root and the user requested dependencies ...
- needtypes := (ld.Mode&NeedTypes|NeedTypesInfo != 0 && (rootIndex >= 0 || ld.Mode&NeedDeps != 0))
- // This package needs source if the call requested source (or types info, which implies source)
- // and the package is either a root, or itas a non- root and the user requested dependencies...
- needsrc := ((ld.Mode&(NeedSyntax|NeedTypesInfo) != 0 && (rootIndex >= 0 || ld.Mode&NeedDeps != 0)) ||
- // ... or if we need types and the exportData is invalid. We fall back to (incompletely)
- // typechecking packages from source if they fail to compile.
- (ld.Mode&(NeedTypes|NeedTypesInfo) != 0 && exportDataInvalid)) && pkg.PkgPath != "unsafe"
- lpkg := &loaderPackage{
- Package: pkg,
- needtypes: needtypes,
- needsrc: needsrc,
- goVersion: response.GoVersion,
- }
- ld.pkgs[lpkg.ID] = lpkg
- if rootIndex >= 0 {
- initial[rootIndex] = lpkg
- lpkg.initial = true
- }
- }
- for i, root := range roots {
- if initial[i] == nil {
- return nil, fmt.Errorf("root package %v is missing", root)
- }
- }
-
- if ld.Mode&NeedImports != 0 {
- // Materialize the import graph.
-
- const (
- white = 0 // new
- grey = 1 // in progress
- black = 2 // complete
- )
-
- // visit traverses the import graph, depth-first,
- // and materializes the graph as Packages.Imports.
- //
- // Valid imports are saved in the Packages.Import map.
- // Invalid imports (cycles and missing nodes) are saved in the importErrors map.
- // Thus, even in the presence of both kinds of errors,
- // the Import graph remains a DAG.
- //
- // visit returns whether the package needs src or has a transitive
- // dependency on a package that does. These are the only packages
- // for which we load source code.
- var stack []*loaderPackage
- var visit func(lpkg *loaderPackage) bool
- visit = func(lpkg *loaderPackage) bool {
- switch lpkg.color {
- case black:
- return lpkg.needsrc
- case grey:
- panic("internal error: grey node")
- }
- lpkg.color = grey
- stack = append(stack, lpkg) // push
- stubs := lpkg.Imports // the structure form has only stubs with the ID in the Imports
- lpkg.Imports = make(map[string]*Package, len(stubs))
- for importPath, ipkg := range stubs {
- var importErr error
- imp := ld.pkgs[ipkg.ID]
- if imp == nil {
- // (includes package "C" when DisableCgo)
- importErr = fmt.Errorf("missing package: %q", ipkg.ID)
- } else if imp.color == grey {
- importErr = fmt.Errorf("import cycle: %s", stack)
- }
- if importErr != nil {
- if lpkg.importErrors == nil {
- lpkg.importErrors = make(map[string]error)
- }
- lpkg.importErrors[importPath] = importErr
- continue
- }
-
- if visit(imp) {
- lpkg.needsrc = true
- }
- lpkg.Imports[importPath] = imp.Package
- }
-
- // Complete type information is required for the
- // immediate dependencies of each source package.
- if lpkg.needsrc && ld.Mode&NeedTypes != 0 {
- for _, ipkg := range lpkg.Imports {
- ld.pkgs[ipkg.ID].needtypes = true
- }
- }
-
- // NeedTypeSizes causes TypeSizes to be set even
- // on packages for which types aren't needed.
- if ld.Mode&NeedTypesSizes != 0 {
- lpkg.TypesSizes = ld.sizes
- }
- stack = stack[:len(stack)-1] // pop
- lpkg.color = black
-
- return lpkg.needsrc
- }
-
- // For each initial package, create its import DAG.
- for _, lpkg := range initial {
- visit(lpkg)
- }
-
- } else {
- // !NeedImports: drop the stub (ID-only) import packages
- // that we are not even going to try to resolve.
- for _, lpkg := range initial {
- lpkg.Imports = nil
- }
- }
-
- // Load type data and syntax if needed, starting at
- // the initial packages (roots of the import DAG).
- if ld.Mode&NeedTypes != 0 || ld.Mode&NeedSyntax != 0 {
- var wg sync.WaitGroup
- for _, lpkg := range initial {
- wg.Add(1)
- go func(lpkg *loaderPackage) {
- ld.loadRecursive(lpkg)
- wg.Done()
- }(lpkg)
- }
- wg.Wait()
- }
-
- // If the context is done, return its error and
- // throw out [likely] incomplete packages.
- if err := ld.Context.Err(); err != nil {
- return nil, err
- }
-
- result := make([]*Package, len(initial))
- for i, lpkg := range initial {
- result[i] = lpkg.Package
- }
- for i := range ld.pkgs {
- // Clear all unrequested fields,
- // to catch programs that use more than they request.
- if ld.requestedMode&NeedName == 0 {
- ld.pkgs[i].Name = ""
- ld.pkgs[i].PkgPath = ""
- }
- if ld.requestedMode&NeedFiles == 0 {
- ld.pkgs[i].GoFiles = nil
- ld.pkgs[i].OtherFiles = nil
- ld.pkgs[i].IgnoredFiles = nil
- }
- if ld.requestedMode&NeedEmbedFiles == 0 {
- ld.pkgs[i].EmbedFiles = nil
- }
- if ld.requestedMode&NeedEmbedPatterns == 0 {
- ld.pkgs[i].EmbedPatterns = nil
- }
- if ld.requestedMode&NeedCompiledGoFiles == 0 {
- ld.pkgs[i].CompiledGoFiles = nil
- }
- if ld.requestedMode&NeedImports == 0 {
- ld.pkgs[i].Imports = nil
- }
- if ld.requestedMode&NeedExportFile == 0 {
- ld.pkgs[i].ExportFile = ""
- }
- if ld.requestedMode&NeedTypes == 0 {
- ld.pkgs[i].Types = nil
- ld.pkgs[i].IllTyped = false
- }
- if ld.requestedMode&NeedSyntax == 0 {
- ld.pkgs[i].Syntax = nil
- }
- if ld.requestedMode&NeedTypes == 0 && ld.requestedMode&NeedSyntax == 0 {
- ld.pkgs[i].Fset = nil
- }
- if ld.requestedMode&NeedTypesInfo == 0 {
- ld.pkgs[i].TypesInfo = nil
- }
- if ld.requestedMode&NeedTypesSizes == 0 {
- ld.pkgs[i].TypesSizes = nil
- }
- if ld.requestedMode&NeedModule == 0 {
- ld.pkgs[i].Module = nil
- }
- }
-
- return result, nil
-}
-
-// loadRecursive loads the specified package and its dependencies,
-// recursively, in parallel, in topological order.
-// It is atomic and idempotent.
-// Precondition: ld.Mode&NeedTypes.
-func (ld *loader) loadRecursive(lpkg *loaderPackage) {
- lpkg.loadOnce.Do(func() {
- // Load the direct dependencies, in parallel.
- var wg sync.WaitGroup
- for _, ipkg := range lpkg.Imports {
- imp := ld.pkgs[ipkg.ID]
- wg.Add(1)
- go func(imp *loaderPackage) {
- ld.loadRecursive(imp)
- wg.Done()
- }(imp)
- }
- wg.Wait()
- ld.loadPackage(lpkg)
- })
-}
-
-// loadPackage loads the specified package.
-// It must be called only once per Package,
-// after immediate dependencies are loaded.
-// Precondition: ld.Mode & NeedTypes.
-func (ld *loader) loadPackage(lpkg *loaderPackage) {
- if lpkg.PkgPath == "unsafe" {
- // Fill in the blanks to avoid surprises.
- lpkg.Types = types.Unsafe
- lpkg.Fset = ld.Fset
- lpkg.Syntax = []*ast.File{}
- lpkg.TypesInfo = new(types.Info)
- lpkg.TypesSizes = ld.sizes
- return
- }
-
- // Call NewPackage directly with explicit name.
- // This avoids skew between golist and go/types when the files'
- // package declarations are inconsistent.
- lpkg.Types = types.NewPackage(lpkg.PkgPath, lpkg.Name)
- lpkg.Fset = ld.Fset
-
- // Start shutting down if the context is done and do not load
- // source or export data files.
- // Packages that import this one will have ld.Context.Err() != nil.
- // ld.Context.Err() will be returned later by refine.
- if ld.Context.Err() != nil {
- return
- }
-
- // Subtle: we populate all Types fields with an empty Package
- // before loading export data so that export data processing
- // never has to create a types.Package for an indirect dependency,
- // which would then require that such created packages be explicitly
- // inserted back into the Import graph as a final step after export data loading.
- // (Hence this return is after the Types assignment.)
- // The Diamond test exercises this case.
- if !lpkg.needtypes && !lpkg.needsrc {
- return
- }
- if !lpkg.needsrc {
- if err := ld.loadFromExportData(lpkg); err != nil {
- lpkg.Errors = append(lpkg.Errors, Error{
- Pos: "-",
- Msg: err.Error(),
- Kind: UnknownError, // e.g. can't find/open/parse export data
- })
- }
- return // not a source package, don't get syntax trees
- }
-
- appendError := func(err error) {
- // Convert various error types into the one true Error.
- var errs []Error
- switch err := err.(type) {
- case Error:
- // from driver
- errs = append(errs, err)
-
- case *os.PathError:
- // from parser
- errs = append(errs, Error{
- Pos: err.Path + ":1",
- Msg: err.Err.Error(),
- Kind: ParseError,
- })
-
- case scanner.ErrorList:
- // from parser
- for _, err := range err {
- errs = append(errs, Error{
- Pos: err.Pos.String(),
- Msg: err.Msg,
- Kind: ParseError,
- })
- }
-
- case types.Error:
- // from type checker
- lpkg.TypeErrors = append(lpkg.TypeErrors, err)
- errs = append(errs, Error{
- Pos: err.Fset.Position(err.Pos).String(),
- Msg: err.Msg,
- Kind: TypeError,
- })
-
- default:
- // unexpected impoverished error from parser?
- errs = append(errs, Error{
- Pos: "-",
- Msg: err.Error(),
- Kind: UnknownError,
- })
-
- // If you see this error message, please file a bug.
- log.Printf("internal error: error %q (%T) without position", err, err)
- }
-
- lpkg.Errors = append(lpkg.Errors, errs...)
- }
-
- // If the go command on the PATH is newer than the runtime,
- // then the go/{scanner,ast,parser,types} packages from the
- // standard library may be unable to process the files
- // selected by go list.
- //
- // There is currently no way to downgrade the effective
- // version of the go command (see issue 52078), so we proceed
- // with the newer go command but, in case of parse or type
- // errors, we emit an additional diagnostic.
- //
- // See:
- // - golang.org/issue/52078 (flag to set release tags)
- // - golang.org/issue/50825 (gopls legacy version support)
- // - golang.org/issue/55883 (go/packages confusing error)
- //
- // Should we assert a hard minimum of (currently) go1.16 here?
- var runtimeVersion int
- if _, err := fmt.Sscanf(runtime.Version(), "go1.%d", &runtimeVersion); err == nil && runtimeVersion < lpkg.goVersion {
- defer func() {
- if len(lpkg.Errors) > 0 {
- appendError(Error{
- Pos: "-",
- Msg: fmt.Sprintf("This application uses version go1.%d of the source-processing packages but runs version go1.%d of 'go list'. It may fail to process source files that rely on newer language features. If so, rebuild the application using a newer version of Go.", runtimeVersion, lpkg.goVersion),
- Kind: UnknownError,
- })
- }
- }()
- }
-
- if ld.Config.Mode&NeedTypes != 0 && len(lpkg.CompiledGoFiles) == 0 && lpkg.ExportFile != "" {
- // The config requested loading sources and types, but sources are missing.
- // Add an error to the package and fall back to loading from export data.
- appendError(Error{"-", fmt.Sprintf("sources missing for package %s", lpkg.ID), ParseError})
- _ = ld.loadFromExportData(lpkg) // ignore any secondary errors
-
- return // can't get syntax trees for this package
- }
-
- files, errs := ld.parseFiles(lpkg.CompiledGoFiles)
- for _, err := range errs {
- appendError(err)
- }
-
- lpkg.Syntax = files
- if ld.Config.Mode&NeedTypes == 0 {
- return
- }
-
- // Start shutting down if the context is done and do not type check.
- // Packages that import this one will have ld.Context.Err() != nil.
- // ld.Context.Err() will be returned later by refine.
- if ld.Context.Err() != nil {
- return
- }
-
- lpkg.TypesInfo = &types.Info{
- Types: make(map[ast.Expr]types.TypeAndValue),
- Defs: make(map[*ast.Ident]types.Object),
- Uses: make(map[*ast.Ident]types.Object),
- Implicits: make(map[ast.Node]types.Object),
- Instances: make(map[*ast.Ident]types.Instance),
- Scopes: make(map[ast.Node]*types.Scope),
- Selections: make(map[*ast.SelectorExpr]*types.Selection),
- }
- versions.InitFileVersions(lpkg.TypesInfo)
- lpkg.TypesSizes = ld.sizes
-
- importer := importerFunc(func(path string) (*types.Package, error) {
- if path == "unsafe" {
- return types.Unsafe, nil
- }
-
- // The imports map is keyed by import path.
- ipkg := lpkg.Imports[path]
- if ipkg == nil {
- if err := lpkg.importErrors[path]; err != nil {
- return nil, err
- }
- // There was skew between the metadata and the
- // import declarations, likely due to an edit
- // race, or because the ParseFile feature was
- // used to supply alternative file contents.
- return nil, fmt.Errorf("no metadata for %s", path)
- }
-
- if ipkg.Types != nil && ipkg.Types.Complete() {
- return ipkg.Types, nil
- }
- log.Fatalf("internal error: package %q without types was imported from %q", path, lpkg)
- panic("unreachable")
- })
-
- // type-check
- tc := &types.Config{
- Importer: importer,
-
- // Type-check bodies of functions only in initial packages.
- // Example: for import graph A->B->C and initial packages {A,C},
- // we can ignore function bodies in B.
- IgnoreFuncBodies: ld.Mode&NeedDeps == 0 && !lpkg.initial,
-
- Error: appendError,
- Sizes: ld.sizes, // may be nil
- }
- if lpkg.Module != nil && lpkg.Module.GoVersion != "" {
- tc.GoVersion = "go" + lpkg.Module.GoVersion
- }
- if (ld.Mode & typecheckCgo) != 0 {
- if !typesinternal.SetUsesCgo(tc) {
- appendError(Error{
- Msg: "typecheckCgo requires Go 1.15+",
- Kind: ListError,
- })
- return
- }
- }
-
- typErr := types.NewChecker(tc, ld.Fset, lpkg.Types, lpkg.TypesInfo).Files(lpkg.Syntax)
- lpkg.importErrors = nil // no longer needed
-
- // In go/types go1.21 and go1.22, Checker.Files failed fast with a
- // a "too new" error, without calling tc.Error and without
- // proceeding to type-check the package (#66525).
- // We rely on the runtimeVersion error to give the suggested remedy.
- if typErr != nil && len(lpkg.Errors) == 0 && len(lpkg.Syntax) > 0 {
- if msg := typErr.Error(); strings.HasPrefix(msg, "package requires newer Go version") {
- appendError(types.Error{
- Fset: ld.Fset,
- Pos: lpkg.Syntax[0].Package,
- Msg: msg,
- })
- }
- }
-
- // If !Cgo, the type-checker uses FakeImportC mode, so
- // it doesn't invoke the importer for import "C",
- // nor report an error for the import,
- // or for any undefined C.f reference.
- // We must detect this explicitly and correctly
- // mark the package as IllTyped (by reporting an error).
- // TODO(adonovan): if these errors are annoying,
- // we could just set IllTyped quietly.
- if tc.FakeImportC {
- outer:
- for _, f := range lpkg.Syntax {
- for _, imp := range f.Imports {
- if imp.Path.Value == `"C"` {
- err := types.Error{Fset: ld.Fset, Pos: imp.Pos(), Msg: `import "C" ignored`}
- appendError(err)
- break outer
- }
- }
- }
- }
-
- // If types.Checker.Files had an error that was unreported,
- // make sure to report the unknown error so the package is illTyped.
- if typErr != nil && len(lpkg.Errors) == 0 {
- appendError(typErr)
- }
-
- // Record accumulated errors.
- illTyped := len(lpkg.Errors) > 0
- if !illTyped {
- for _, imp := range lpkg.Imports {
- if imp.IllTyped {
- illTyped = true
- break
- }
- }
- }
- lpkg.IllTyped = illTyped
-}
-
-// An importFunc is an implementation of the single-method
-// types.Importer interface based on a function value.
-type importerFunc func(path string) (*types.Package, error)
-
-func (f importerFunc) Import(path string) (*types.Package, error) { return f(path) }
-
-// We use a counting semaphore to limit
-// the number of parallel I/O calls per process.
-var ioLimit = make(chan bool, 20)
-
-func (ld *loader) parseFile(filename string) (*ast.File, error) {
- ld.parseCacheMu.Lock()
- v, ok := ld.parseCache[filename]
- if ok {
- // cache hit
- ld.parseCacheMu.Unlock()
- <-v.ready
- } else {
- // cache miss
- v = &parseValue{ready: make(chan struct{})}
- ld.parseCache[filename] = v
- ld.parseCacheMu.Unlock()
-
- var src []byte
- for f, contents := range ld.Config.Overlay {
- if sameFile(f, filename) {
- src = contents
- }
- }
- var err error
- if src == nil {
- ioLimit <- true // wait
- src, err = os.ReadFile(filename)
- <-ioLimit // signal
- }
- if err != nil {
- v.err = err
- } else {
- v.f, v.err = ld.ParseFile(ld.Fset, filename, src)
- }
-
- close(v.ready)
- }
- return v.f, v.err
-}
-
-// parseFiles reads and parses the Go source files and returns the ASTs
-// of the ones that could be at least partially parsed, along with a
-// list of I/O and parse errors encountered.
-//
-// Because files are scanned in parallel, the token.Pos
-// positions of the resulting ast.Files are not ordered.
-func (ld *loader) parseFiles(filenames []string) ([]*ast.File, []error) {
- var wg sync.WaitGroup
- n := len(filenames)
- parsed := make([]*ast.File, n)
- errors := make([]error, n)
- for i, file := range filenames {
- wg.Add(1)
- go func(i int, filename string) {
- parsed[i], errors[i] = ld.parseFile(filename)
- wg.Done()
- }(i, file)
- }
- wg.Wait()
-
- // Eliminate nils, preserving order.
- var o int
- for _, f := range parsed {
- if f != nil {
- parsed[o] = f
- o++
- }
- }
- parsed = parsed[:o]
-
- o = 0
- for _, err := range errors {
- if err != nil {
- errors[o] = err
- o++
- }
- }
- errors = errors[:o]
-
- return parsed, errors
-}
-
-// sameFile returns true if x and y have the same basename and denote
-// the same file.
-func sameFile(x, y string) bool {
- if x == y {
- // It could be the case that y doesn't exist.
- // For instance, it may be an overlay file that
- // hasn't been written to disk. To handle that case
- // let x == y through. (We added the exact absolute path
- // string to the CompiledGoFiles list, so the unwritten
- // overlay case implies x==y.)
- return true
- }
- if strings.EqualFold(filepath.Base(x), filepath.Base(y)) { // (optimisation)
- if xi, err := os.Stat(x); err == nil {
- if yi, err := os.Stat(y); err == nil {
- return os.SameFile(xi, yi)
- }
- }
- }
- return false
-}
-
-// loadFromExportData ensures that type information is present for the specified
-// package, loading it from an export data file on the first request.
-// On success it sets lpkg.Types to a new Package.
-func (ld *loader) loadFromExportData(lpkg *loaderPackage) error {
- if lpkg.PkgPath == "" {
- log.Fatalf("internal error: Package %s has no PkgPath", lpkg)
- }
-
- // Because gcexportdata.Read has the potential to create or
- // modify the types.Package for each node in the transitive
- // closure of dependencies of lpkg, all exportdata operations
- // must be sequential. (Finer-grained locking would require
- // changes to the gcexportdata API.)
- //
- // The exportMu lock guards the lpkg.Types field and the
- // types.Package it points to, for each loaderPackage in the graph.
- //
- // Not all accesses to Package.Pkg need to be protected by exportMu:
- // graph ordering ensures that direct dependencies of source
- // packages are fully loaded before the importer reads their Pkg field.
- ld.exportMu.Lock()
- defer ld.exportMu.Unlock()
-
- if tpkg := lpkg.Types; tpkg != nil && tpkg.Complete() {
- return nil // cache hit
- }
-
- lpkg.IllTyped = true // fail safe
-
- if lpkg.ExportFile == "" {
- // Errors while building export data will have been printed to stderr.
- return fmt.Errorf("no export data file")
- }
- f, err := os.Open(lpkg.ExportFile)
- if err != nil {
- return err
- }
- defer f.Close()
-
- // Read gc export data.
- //
- // We don't currently support gccgo export data because all
- // underlying workspaces use the gc toolchain. (Even build
- // systems that support gccgo don't use it for workspace
- // queries.)
- r, err := gcexportdata.NewReader(f)
- if err != nil {
- return fmt.Errorf("reading %s: %v", lpkg.ExportFile, err)
- }
-
- // Build the view.
- //
- // The gcexportdata machinery has no concept of package ID.
- // It identifies packages by their PkgPath, which although not
- // globally unique is unique within the scope of one invocation
- // of the linker, type-checker, or gcexportdata.
- //
- // So, we must build a PkgPath-keyed view of the global
- // (conceptually ID-keyed) cache of packages and pass it to
- // gcexportdata. The view must contain every existing
- // package that might possibly be mentioned by the
- // current package---its transitive closure.
- //
- // In loadPackage, we unconditionally create a types.Package for
- // each dependency so that export data loading does not
- // create new ones.
- //
- // TODO(adonovan): it would be simpler and more efficient
- // if the export data machinery invoked a callback to
- // get-or-create a package instead of a map.
- //
- view := make(map[string]*types.Package) // view seen by gcexportdata
- seen := make(map[*loaderPackage]bool) // all visited packages
- var visit func(pkgs map[string]*Package)
- visit = func(pkgs map[string]*Package) {
- for _, p := range pkgs {
- lpkg := ld.pkgs[p.ID]
- if !seen[lpkg] {
- seen[lpkg] = true
- view[lpkg.PkgPath] = lpkg.Types
- visit(lpkg.Imports)
- }
- }
- }
- visit(lpkg.Imports)
-
- viewLen := len(view) + 1 // adding the self package
- // Parse the export data.
- // (May modify incomplete packages in view but not create new ones.)
- tpkg, err := gcexportdata.Read(r, ld.Fset, view, lpkg.PkgPath)
- if err != nil {
- return fmt.Errorf("reading %s: %v", lpkg.ExportFile, err)
- }
- if _, ok := view["go.shape"]; ok {
- // Account for the pseudopackage "go.shape" that gets
- // created by generic code.
- viewLen++
- }
- if viewLen != len(view) {
- log.Panicf("golang.org/x/tools/go/packages: unexpected new packages during load of %s", lpkg.PkgPath)
- }
-
- lpkg.Types = tpkg
- lpkg.IllTyped = false
- return nil
-}
-
-// impliedLoadMode returns loadMode with its dependencies.
-func impliedLoadMode(loadMode LoadMode) LoadMode {
- if loadMode&(NeedDeps|NeedTypes|NeedTypesInfo) != 0 {
- // All these things require knowing the import graph.
- loadMode |= NeedImports
- }
- if loadMode&NeedTypes != 0 {
- // Types require the GoVersion from Module.
- loadMode |= NeedModule
- }
-
- return loadMode
-}
-
-func usesExportData(cfg *Config) bool {
- return cfg.Mode&NeedExportFile != 0 || cfg.Mode&NeedTypes != 0 && cfg.Mode&NeedDeps == 0
-}
-
-var _ interface{} = io.Discard // assert build toolchain is go1.16 or later
diff --git a/vendor/golang.org/x/tools/go/packages/visit.go b/vendor/golang.org/x/tools/go/packages/visit.go
deleted file mode 100644
index df14ffd94dc..00000000000
--- a/vendor/golang.org/x/tools/go/packages/visit.go
+++ /dev/null
@@ -1,68 +0,0 @@
-// Copyright 2018 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-package packages
-
-import (
- "fmt"
- "os"
- "sort"
-)
-
-// Visit visits all the packages in the import graph whose roots are
-// pkgs, calling the optional pre function the first time each package
-// is encountered (preorder), and the optional post function after a
-// package's dependencies have been visited (postorder).
-// The boolean result of pre(pkg) determines whether
-// the imports of package pkg are visited.
-func Visit(pkgs []*Package, pre func(*Package) bool, post func(*Package)) {
- seen := make(map[*Package]bool)
- var visit func(*Package)
- visit = func(pkg *Package) {
- if !seen[pkg] {
- seen[pkg] = true
-
- if pre == nil || pre(pkg) {
- paths := make([]string, 0, len(pkg.Imports))
- for path := range pkg.Imports {
- paths = append(paths, path)
- }
- sort.Strings(paths) // Imports is a map, this makes visit stable
- for _, path := range paths {
- visit(pkg.Imports[path])
- }
- }
-
- if post != nil {
- post(pkg)
- }
- }
- }
- for _, pkg := range pkgs {
- visit(pkg)
- }
-}
-
-// PrintErrors prints to os.Stderr the accumulated errors of all
-// packages in the import graph rooted at pkgs, dependencies first.
-// PrintErrors returns the number of errors printed.
-func PrintErrors(pkgs []*Package) int {
- var n int
- errModules := make(map[*Module]bool)
- Visit(pkgs, nil, func(pkg *Package) {
- for _, err := range pkg.Errors {
- fmt.Fprintln(os.Stderr, err)
- n++
- }
-
- // Print pkg.Module.Error once if present.
- mod := pkg.Module
- if mod != nil && mod.Error != nil && !errModules[mod] {
- errModules[mod] = true
- fmt.Fprintln(os.Stderr, mod.Error.Err)
- n++
- }
- })
- return n
-}
diff --git a/vendor/golang.org/x/tools/go/types/objectpath/objectpath.go b/vendor/golang.org/x/tools/go/types/objectpath/objectpath.go
deleted file mode 100644
index a70b727f2c6..00000000000
--- a/vendor/golang.org/x/tools/go/types/objectpath/objectpath.go
+++ /dev/null
@@ -1,788 +0,0 @@
-// Copyright 2018 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-// Package objectpath defines a naming scheme for types.Objects
-// (that is, named entities in Go programs) relative to their enclosing
-// package.
-//
-// Type-checker objects are canonical, so they are usually identified by
-// their address in memory (a pointer), but a pointer has meaning only
-// within one address space. By contrast, objectpath names allow the
-// identity of an object to be sent from one program to another,
-// establishing a correspondence between types.Object variables that are
-// distinct but logically equivalent.
-//
-// A single object may have multiple paths. In this example,
-//
-// type A struct{ X int }
-// type B A
-//
-// the field X has two paths due to its membership of both A and B.
-// The For(obj) function always returns one of these paths, arbitrarily
-// but consistently.
-package objectpath
-
-import (
- "fmt"
- "go/types"
- "strconv"
- "strings"
-
- "golang.org/x/tools/internal/aliases"
- "golang.org/x/tools/internal/typesinternal"
-)
-
-// TODO(adonovan): think about generic aliases.
-
-// A Path is an opaque name that identifies a types.Object
-// relative to its package. Conceptually, the name consists of a
-// sequence of destructuring operations applied to the package scope
-// to obtain the original object.
-// The name does not include the package itself.
-type Path string
-
-// Encoding
-//
-// An object path is a textual and (with training) human-readable encoding
-// of a sequence of destructuring operators, starting from a types.Package.
-// The sequences represent a path through the package/object/type graph.
-// We classify these operators by their type:
-//
-// PO package->object Package.Scope.Lookup
-// OT object->type Object.Type
-// TT type->type Type.{Elem,Key,{,{,Recv}Type}Params,Results,Underlying,Rhs} [EKPRUTrCa]
-// TO type->object Type.{At,Field,Method,Obj} [AFMO]
-//
-// All valid paths start with a package and end at an object
-// and thus may be defined by the regular language:
-//
-// objectpath = PO (OT TT* TO)*
-//
-// The concrete encoding follows directly:
-// - The only PO operator is Package.Scope.Lookup, which requires an identifier.
-// - The only OT operator is Object.Type,
-// which we encode as '.' because dot cannot appear in an identifier.
-// - The TT operators are encoded as [EKPRUTrCa];
-// two of these ({,Recv}TypeParams) require an integer operand,
-// which is encoded as a string of decimal digits.
-// - The TO operators are encoded as [AFMO];
-// three of these (At,Field,Method) require an integer operand,
-// which is encoded as a string of decimal digits.
-// These indices are stable across different representations
-// of the same package, even source and export data.
-// The indices used are implementation specific and may not correspond to
-// the argument to the go/types function.
-//
-// In the example below,
-//
-// package p
-//
-// type T interface {
-// f() (a string, b struct{ X int })
-// }
-//
-// field X has the path "T.UM0.RA1.F0",
-// representing the following sequence of operations:
-//
-// p.Lookup("T") T
-// .Type().Underlying().Method(0). f
-// .Type().Results().At(1) b
-// .Type().Field(0) X
-//
-// The encoding is not maximally compact---every R or P is
-// followed by an A, for example---but this simplifies the
-// encoder and decoder.
-const (
- // object->type operators
- opType = '.' // .Type() (Object)
-
- // type->type operators
- opElem = 'E' // .Elem() (Pointer, Slice, Array, Chan, Map)
- opKey = 'K' // .Key() (Map)
- opParams = 'P' // .Params() (Signature)
- opResults = 'R' // .Results() (Signature)
- opUnderlying = 'U' // .Underlying() (Named)
- opTypeParam = 'T' // .TypeParams.At(i) (Named, Signature)
- opRecvTypeParam = 'r' // .RecvTypeParams.At(i) (Signature)
- opConstraint = 'C' // .Constraint() (TypeParam)
- opRhs = 'a' // .Rhs() (Alias)
-
- // type->object operators
- opAt = 'A' // .At(i) (Tuple)
- opField = 'F' // .Field(i) (Struct)
- opMethod = 'M' // .Method(i) (Named or Interface; not Struct: "promoted" names are ignored)
- opObj = 'O' // .Obj() (Named, TypeParam)
-)
-
-// For is equivalent to new(Encoder).For(obj).
-//
-// It may be more efficient to reuse a single Encoder across several calls.
-func For(obj types.Object) (Path, error) {
- return new(Encoder).For(obj)
-}
-
-// An Encoder amortizes the cost of encoding the paths of multiple objects.
-// The zero value of an Encoder is ready to use.
-type Encoder struct {
- scopeMemo map[*types.Scope][]types.Object // memoization of scopeObjects
-}
-
-// For returns the path to an object relative to its package,
-// or an error if the object is not accessible from the package's Scope.
-//
-// The For function guarantees to return a path only for the following objects:
-// - package-level types
-// - exported package-level non-types
-// - methods
-// - parameter and result variables
-// - struct fields
-// These objects are sufficient to define the API of their package.
-// The objects described by a package's export data are drawn from this set.
-//
-// The set of objects accessible from a package's Scope depends on
-// whether the package was produced by type-checking syntax, or
-// reading export data; the latter may have a smaller Scope since
-// export data trims objects that are not reachable from an exported
-// declaration. For example, the For function will return a path for
-// an exported method of an unexported type that is not reachable
-// from any public declaration; this path will cause the Object
-// function to fail if called on a package loaded from export data.
-// TODO(adonovan): is this a bug or feature? Should this package
-// compute accessibility in the same way?
-//
-// For does not return a path for predeclared names, imported package
-// names, local names, and unexported package-level names (except
-// types).
-//
-// Example: given this definition,
-//
-// package p
-//
-// type T interface {
-// f() (a string, b struct{ X int })
-// }
-//
-// For(X) would return a path that denotes the following sequence of operations:
-//
-// p.Scope().Lookup("T") (TypeName T)
-// .Type().Underlying().Method(0). (method Func f)
-// .Type().Results().At(1) (field Var b)
-// .Type().Field(0) (field Var X)
-//
-// where p is the package (*types.Package) to which X belongs.
-func (enc *Encoder) For(obj types.Object) (Path, error) {
- pkg := obj.Pkg()
-
- // This table lists the cases of interest.
- //
- // Object Action
- // ------ ------
- // nil reject
- // builtin reject
- // pkgname reject
- // label reject
- // var
- // package-level accept
- // func param/result accept
- // local reject
- // struct field accept
- // const
- // package-level accept
- // local reject
- // func
- // package-level accept
- // init functions reject
- // concrete method accept
- // interface method accept
- // type
- // package-level accept
- // local reject
- //
- // The only accessible package-level objects are members of pkg itself.
- //
- // The cases are handled in four steps:
- //
- // 1. reject nil and builtin
- // 2. accept package-level objects
- // 3. reject obviously invalid objects
- // 4. search the API for the path to the param/result/field/method.
-
- // 1. reference to nil or builtin?
- if pkg == nil {
- return "", fmt.Errorf("predeclared %s has no path", obj)
- }
- scope := pkg.Scope()
-
- // 2. package-level object?
- if scope.Lookup(obj.Name()) == obj {
- // Only exported objects (and non-exported types) have a path.
- // Non-exported types may be referenced by other objects.
- if _, ok := obj.(*types.TypeName); !ok && !obj.Exported() {
- return "", fmt.Errorf("no path for non-exported %v", obj)
- }
- return Path(obj.Name()), nil
- }
-
- // 3. Not a package-level object.
- // Reject obviously non-viable cases.
- switch obj := obj.(type) {
- case *types.TypeName:
- if _, ok := types.Unalias(obj.Type()).(*types.TypeParam); !ok {
- // With the exception of type parameters, only package-level type names
- // have a path.
- return "", fmt.Errorf("no path for %v", obj)
- }
- case *types.Const, // Only package-level constants have a path.
- *types.Label, // Labels are function-local.
- *types.PkgName: // PkgNames are file-local.
- return "", fmt.Errorf("no path for %v", obj)
-
- case *types.Var:
- // Could be:
- // - a field (obj.IsField())
- // - a func parameter or result
- // - a local var.
- // Sadly there is no way to distinguish
- // a param/result from a local
- // so we must proceed to the find.
-
- case *types.Func:
- // A func, if not package-level, must be a method.
- if recv := obj.Type().(*types.Signature).Recv(); recv == nil {
- return "", fmt.Errorf("func is not a method: %v", obj)
- }
-
- if path, ok := enc.concreteMethod(obj); ok {
- // Fast path for concrete methods that avoids looping over scope.
- return path, nil
- }
-
- default:
- panic(obj)
- }
-
- // 4. Search the API for the path to the var (field/param/result) or method.
-
- // First inspect package-level named types.
- // In the presence of path aliases, these give
- // the best paths because non-types may
- // refer to types, but not the reverse.
- empty := make([]byte, 0, 48) // initial space
- objs := enc.scopeObjects(scope)
- for _, o := range objs {
- tname, ok := o.(*types.TypeName)
- if !ok {
- continue // handle non-types in second pass
- }
-
- path := append(empty, o.Name()...)
- path = append(path, opType)
-
- T := o.Type()
- if alias, ok := T.(*types.Alias); ok {
- if r := findTypeParam(obj, aliases.TypeParams(alias), path, opTypeParam, nil); r != nil {
- return Path(r), nil
- }
- if r := find(obj, aliases.Rhs(alias), append(path, opRhs), nil); r != nil {
- return Path(r), nil
- }
-
- } else if tname.IsAlias() {
- // legacy alias
- if r := find(obj, T, path, nil); r != nil {
- return Path(r), nil
- }
-
- } else if named, ok := T.(*types.Named); ok {
- // defined (named) type
- if r := findTypeParam(obj, named.TypeParams(), path, opTypeParam, nil); r != nil {
- return Path(r), nil
- }
- if r := find(obj, named.Underlying(), append(path, opUnderlying), nil); r != nil {
- return Path(r), nil
- }
- }
- }
-
- // Then inspect everything else:
- // non-types, and declared methods of defined types.
- for _, o := range objs {
- path := append(empty, o.Name()...)
- if _, ok := o.(*types.TypeName); !ok {
- if o.Exported() {
- // exported non-type (const, var, func)
- if r := find(obj, o.Type(), append(path, opType), nil); r != nil {
- return Path(r), nil
- }
- }
- continue
- }
-
- // Inspect declared methods of defined types.
- if T, ok := types.Unalias(o.Type()).(*types.Named); ok {
- path = append(path, opType)
- // The method index here is always with respect
- // to the underlying go/types data structures,
- // which ultimately derives from source order
- // and must be preserved by export data.
- for i := 0; i < T.NumMethods(); i++ {
- m := T.Method(i)
- path2 := appendOpArg(path, opMethod, i)
- if m == obj {
- return Path(path2), nil // found declared method
- }
- if r := find(obj, m.Type(), append(path2, opType), nil); r != nil {
- return Path(r), nil
- }
- }
- }
- }
-
- return "", fmt.Errorf("can't find path for %v in %s", obj, pkg.Path())
-}
-
-func appendOpArg(path []byte, op byte, arg int) []byte {
- path = append(path, op)
- path = strconv.AppendInt(path, int64(arg), 10)
- return path
-}
-
-// concreteMethod returns the path for meth, which must have a non-nil receiver.
-// The second return value indicates success and may be false if the method is
-// an interface method or if it is an instantiated method.
-//
-// This function is just an optimization that avoids the general scope walking
-// approach. You are expected to fall back to the general approach if this
-// function fails.
-func (enc *Encoder) concreteMethod(meth *types.Func) (Path, bool) {
- // Concrete methods can only be declared on package-scoped named types. For
- // that reason we can skip the expensive walk over the package scope: the
- // path will always be package -> named type -> method. We can trivially get
- // the type name from the receiver, and only have to look over the type's
- // methods to find the method index.
- //
- // Methods on generic types require special consideration, however. Consider
- // the following package:
- //
- // L1: type S[T any] struct{}
- // L2: func (recv S[A]) Foo() { recv.Bar() }
- // L3: func (recv S[B]) Bar() { }
- // L4: type Alias = S[int]
- // L5: func _[T any]() { var s S[int]; s.Foo() }
- //
- // The receivers of methods on generic types are instantiations. L2 and L3
- // instantiate S with the type-parameters A and B, which are scoped to the
- // respective methods. L4 and L5 each instantiate S with int. Each of these
- // instantiations has its own method set, full of methods (and thus objects)
- // with receivers whose types are the respective instantiations. In other
- // words, we have
- //
- // S[A].Foo, S[A].Bar
- // S[B].Foo, S[B].Bar
- // S[int].Foo, S[int].Bar
- //
- // We may thus be trying to produce object paths for any of these objects.
- //
- // S[A].Foo and S[B].Bar are the origin methods, and their paths are S.Foo
- // and S.Bar, which are the paths that this function naturally produces.
- //
- // S[A].Bar, S[B].Foo, and both methods on S[int] are instantiations that
- // don't correspond to the origin methods. For S[int], this is significant.
- // The most precise object path for S[int].Foo, for example, is Alias.Foo,
- // not S.Foo. Our function, however, would produce S.Foo, which would
- // resolve to a different object.
- //
- // For S[A].Bar and S[B].Foo it could be argued that S.Bar and S.Foo are
- // still the correct paths, since only the origin methods have meaningful
- // paths. But this is likely only true for trivial cases and has edge cases.
- // Since this function is only an optimization, we err on the side of giving
- // up, deferring to the slower but definitely correct algorithm. Most users
- // of objectpath will only be giving us origin methods, anyway, as referring
- // to instantiated methods is usually not useful.
-
- if meth.Origin() != meth {
- return "", false
- }
-
- _, named := typesinternal.ReceiverNamed(meth.Type().(*types.Signature).Recv())
- if named == nil {
- return "", false
- }
-
- if types.IsInterface(named) {
- // Named interfaces don't have to be package-scoped
- //
- // TODO(dominikh): opt: if scope.Lookup(name) == named, then we can apply this optimization to interface
- // methods, too, I think.
- return "", false
- }
-
- // Preallocate space for the name, opType, opMethod, and some digits.
- name := named.Obj().Name()
- path := make([]byte, 0, len(name)+8)
- path = append(path, name...)
- path = append(path, opType)
-
- // Method indices are w.r.t. the go/types data structures,
- // ultimately deriving from source order,
- // which is preserved by export data.
- for i := 0; i < named.NumMethods(); i++ {
- if named.Method(i) == meth {
- path = appendOpArg(path, opMethod, i)
- return Path(path), true
- }
- }
-
- // Due to golang/go#59944, go/types fails to associate the receiver with
- // certain methods on cgo types.
- //
- // TODO(rfindley): replace this panic once golang/go#59944 is fixed in all Go
- // versions gopls supports.
- return "", false
- // panic(fmt.Sprintf("couldn't find method %s on type %s; methods: %#v", meth, named, enc.namedMethods(named)))
-}
-
-// find finds obj within type T, returning the path to it, or nil if not found.
-//
-// The seen map is used to short circuit cycles through type parameters. If
-// nil, it will be allocated as necessary.
-func find(obj types.Object, T types.Type, path []byte, seen map[*types.TypeName]bool) []byte {
- switch T := T.(type) {
- case *types.Alias:
- return find(obj, types.Unalias(T), path, seen)
- case *types.Basic, *types.Named:
- // Named types belonging to pkg were handled already,
- // so T must belong to another package. No path.
- return nil
- case *types.Pointer:
- return find(obj, T.Elem(), append(path, opElem), seen)
- case *types.Slice:
- return find(obj, T.Elem(), append(path, opElem), seen)
- case *types.Array:
- return find(obj, T.Elem(), append(path, opElem), seen)
- case *types.Chan:
- return find(obj, T.Elem(), append(path, opElem), seen)
- case *types.Map:
- if r := find(obj, T.Key(), append(path, opKey), seen); r != nil {
- return r
- }
- return find(obj, T.Elem(), append(path, opElem), seen)
- case *types.Signature:
- if r := findTypeParam(obj, T.RecvTypeParams(), path, opRecvTypeParam, nil); r != nil {
- return r
- }
- if r := findTypeParam(obj, T.TypeParams(), path, opTypeParam, seen); r != nil {
- return r
- }
- if r := find(obj, T.Params(), append(path, opParams), seen); r != nil {
- return r
- }
- return find(obj, T.Results(), append(path, opResults), seen)
- case *types.Struct:
- for i := 0; i < T.NumFields(); i++ {
- fld := T.Field(i)
- path2 := appendOpArg(path, opField, i)
- if fld == obj {
- return path2 // found field var
- }
- if r := find(obj, fld.Type(), append(path2, opType), seen); r != nil {
- return r
- }
- }
- return nil
- case *types.Tuple:
- for i := 0; i < T.Len(); i++ {
- v := T.At(i)
- path2 := appendOpArg(path, opAt, i)
- if v == obj {
- return path2 // found param/result var
- }
- if r := find(obj, v.Type(), append(path2, opType), seen); r != nil {
- return r
- }
- }
- return nil
- case *types.Interface:
- for i := 0; i < T.NumMethods(); i++ {
- m := T.Method(i)
- path2 := appendOpArg(path, opMethod, i)
- if m == obj {
- return path2 // found interface method
- }
- if r := find(obj, m.Type(), append(path2, opType), seen); r != nil {
- return r
- }
- }
- return nil
- case *types.TypeParam:
- name := T.Obj()
- if name == obj {
- return append(path, opObj)
- }
- if seen[name] {
- return nil
- }
- if seen == nil {
- seen = make(map[*types.TypeName]bool)
- }
- seen[name] = true
- if r := find(obj, T.Constraint(), append(path, opConstraint), seen); r != nil {
- return r
- }
- return nil
- }
- panic(T)
-}
-
-func findTypeParam(obj types.Object, list *types.TypeParamList, path []byte, op byte, seen map[*types.TypeName]bool) []byte {
- for i := 0; i < list.Len(); i++ {
- tparam := list.At(i)
- path2 := appendOpArg(path, op, i)
- if r := find(obj, tparam, path2, seen); r != nil {
- return r
- }
- }
- return nil
-}
-
-// Object returns the object denoted by path p within the package pkg.
-func Object(pkg *types.Package, p Path) (types.Object, error) {
- pathstr := string(p)
- if pathstr == "" {
- return nil, fmt.Errorf("empty path")
- }
-
- var pkgobj, suffix string
- if dot := strings.IndexByte(pathstr, opType); dot < 0 {
- pkgobj = pathstr
- } else {
- pkgobj = pathstr[:dot]
- suffix = pathstr[dot:] // suffix starts with "."
- }
-
- obj := pkg.Scope().Lookup(pkgobj)
- if obj == nil {
- return nil, fmt.Errorf("package %s does not contain %q", pkg.Path(), pkgobj)
- }
-
- // abstraction of *types.{Pointer,Slice,Array,Chan,Map}
- type hasElem interface {
- Elem() types.Type
- }
- // abstraction of *types.{Named,Signature}
- type hasTypeParams interface {
- TypeParams() *types.TypeParamList
- }
- // abstraction of *types.{Named,TypeParam}
- type hasObj interface {
- Obj() *types.TypeName
- }
-
- // The loop state is the pair (t, obj),
- // exactly one of which is non-nil, initially obj.
- // All suffixes start with '.' (the only object->type operation),
- // followed by optional type->type operations,
- // then a type->object operation.
- // The cycle then repeats.
- var t types.Type
- for suffix != "" {
- code := suffix[0]
- suffix = suffix[1:]
-
- // Codes [AFMTr] have an integer operand.
- var index int
- switch code {
- case opAt, opField, opMethod, opTypeParam, opRecvTypeParam:
- rest := strings.TrimLeft(suffix, "0123456789")
- numerals := suffix[:len(suffix)-len(rest)]
- suffix = rest
- i, err := strconv.Atoi(numerals)
- if err != nil {
- return nil, fmt.Errorf("invalid path: bad numeric operand %q for code %q", numerals, code)
- }
- index = int(i)
- case opObj:
- // no operand
- default:
- // The suffix must end with a type->object operation.
- if suffix == "" {
- return nil, fmt.Errorf("invalid path: ends with %q, want [AFMO]", code)
- }
- }
-
- if code == opType {
- if t != nil {
- return nil, fmt.Errorf("invalid path: unexpected %q in type context", opType)
- }
- t = obj.Type()
- obj = nil
- continue
- }
-
- if t == nil {
- return nil, fmt.Errorf("invalid path: code %q in object context", code)
- }
-
- // Inv: t != nil, obj == nil
-
- t = types.Unalias(t)
- switch code {
- case opElem:
- hasElem, ok := t.(hasElem) // Pointer, Slice, Array, Chan, Map
- if !ok {
- return nil, fmt.Errorf("cannot apply %q to %s (got %T, want pointer, slice, array, chan or map)", code, t, t)
- }
- t = hasElem.Elem()
-
- case opKey:
- mapType, ok := t.(*types.Map)
- if !ok {
- return nil, fmt.Errorf("cannot apply %q to %s (got %T, want map)", code, t, t)
- }
- t = mapType.Key()
-
- case opParams:
- sig, ok := t.(*types.Signature)
- if !ok {
- return nil, fmt.Errorf("cannot apply %q to %s (got %T, want signature)", code, t, t)
- }
- t = sig.Params()
-
- case opResults:
- sig, ok := t.(*types.Signature)
- if !ok {
- return nil, fmt.Errorf("cannot apply %q to %s (got %T, want signature)", code, t, t)
- }
- t = sig.Results()
-
- case opUnderlying:
- named, ok := t.(*types.Named)
- if !ok {
- return nil, fmt.Errorf("cannot apply %q to %s (got %T, want named)", code, t, t)
- }
- t = named.Underlying()
-
- case opRhs:
- if alias, ok := t.(*types.Alias); ok {
- t = aliases.Rhs(alias)
- } else if false && aliases.Enabled() {
- // The Enabled check is too expensive, so for now we
- // simply assume that aliases are not enabled.
- // TODO(adonovan): replace with "if true {" when go1.24 is assured.
- return nil, fmt.Errorf("cannot apply %q to %s (got %T, want alias)", code, t, t)
- }
-
- case opTypeParam:
- hasTypeParams, ok := t.(hasTypeParams) // Named, Signature
- if !ok {
- return nil, fmt.Errorf("cannot apply %q to %s (got %T, want named or signature)", code, t, t)
- }
- tparams := hasTypeParams.TypeParams()
- if n := tparams.Len(); index >= n {
- return nil, fmt.Errorf("tuple index %d out of range [0-%d)", index, n)
- }
- t = tparams.At(index)
-
- case opRecvTypeParam:
- sig, ok := t.(*types.Signature) // Signature
- if !ok {
- return nil, fmt.Errorf("cannot apply %q to %s (got %T, want signature)", code, t, t)
- }
- rtparams := sig.RecvTypeParams()
- if n := rtparams.Len(); index >= n {
- return nil, fmt.Errorf("tuple index %d out of range [0-%d)", index, n)
- }
- t = rtparams.At(index)
-
- case opConstraint:
- tparam, ok := t.(*types.TypeParam)
- if !ok {
- return nil, fmt.Errorf("cannot apply %q to %s (got %T, want type parameter)", code, t, t)
- }
- t = tparam.Constraint()
-
- case opAt:
- tuple, ok := t.(*types.Tuple)
- if !ok {
- return nil, fmt.Errorf("cannot apply %q to %s (got %T, want tuple)", code, t, t)
- }
- if n := tuple.Len(); index >= n {
- return nil, fmt.Errorf("tuple index %d out of range [0-%d)", index, n)
- }
- obj = tuple.At(index)
- t = nil
-
- case opField:
- structType, ok := t.(*types.Struct)
- if !ok {
- return nil, fmt.Errorf("cannot apply %q to %s (got %T, want struct)", code, t, t)
- }
- if n := structType.NumFields(); index >= n {
- return nil, fmt.Errorf("field index %d out of range [0-%d)", index, n)
- }
- obj = structType.Field(index)
- t = nil
-
- case opMethod:
- switch t := t.(type) {
- case *types.Interface:
- if index >= t.NumMethods() {
- return nil, fmt.Errorf("method index %d out of range [0-%d)", index, t.NumMethods())
- }
- obj = t.Method(index) // Id-ordered
-
- case *types.Named:
- if index >= t.NumMethods() {
- return nil, fmt.Errorf("method index %d out of range [0-%d)", index, t.NumMethods())
- }
- obj = t.Method(index)
-
- default:
- return nil, fmt.Errorf("cannot apply %q to %s (got %T, want interface or named)", code, t, t)
- }
- t = nil
-
- case opObj:
- hasObj, ok := t.(hasObj)
- if !ok {
- return nil, fmt.Errorf("cannot apply %q to %s (got %T, want named or type param)", code, t, t)
- }
- obj = hasObj.Obj()
- t = nil
-
- default:
- return nil, fmt.Errorf("invalid path: unknown code %q", code)
- }
- }
-
- if obj == nil {
- panic(p) // path does not end in an object-valued operator
- }
-
- if obj.Pkg() != pkg {
- return nil, fmt.Errorf("path denotes %s, which belongs to a different package", obj)
- }
-
- return obj, nil // success
-}
-
-// scopeObjects is a memoization of scope objects.
-// Callers must not modify the result.
-func (enc *Encoder) scopeObjects(scope *types.Scope) []types.Object {
- m := enc.scopeMemo
- if m == nil {
- m = make(map[*types.Scope][]types.Object)
- enc.scopeMemo = m
- }
- objs, ok := m[scope]
- if !ok {
- names := scope.Names() // allocates and sorts
- objs = make([]types.Object, len(names))
- for i, name := range names {
- objs[i] = scope.Lookup(name)
- }
- m[scope] = objs
- }
- return objs
-}
diff --git a/vendor/golang.org/x/tools/go/types/typeutil/callee.go b/vendor/golang.org/x/tools/go/types/typeutil/callee.go
deleted file mode 100644
index 754380351e8..00000000000
--- a/vendor/golang.org/x/tools/go/types/typeutil/callee.go
+++ /dev/null
@@ -1,68 +0,0 @@
-// Copyright 2018 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-package typeutil
-
-import (
- "go/ast"
- "go/types"
-
- "golang.org/x/tools/internal/typeparams"
-)
-
-// Callee returns the named target of a function call, if any:
-// a function, method, builtin, or variable.
-//
-// Functions and methods may potentially have type parameters.
-func Callee(info *types.Info, call *ast.CallExpr) types.Object {
- fun := ast.Unparen(call.Fun)
-
- // Look through type instantiation if necessary.
- isInstance := false
- switch fun.(type) {
- case *ast.IndexExpr, *ast.IndexListExpr:
- // When extracting the callee from an *IndexExpr, we need to check that
- // it is a *types.Func and not a *types.Var.
- // Example: Don't match a slice m within the expression `m[0]()`.
- isInstance = true
- fun, _, _, _ = typeparams.UnpackIndexExpr(fun)
- }
-
- var obj types.Object
- switch fun := fun.(type) {
- case *ast.Ident:
- obj = info.Uses[fun] // type, var, builtin, or declared func
- case *ast.SelectorExpr:
- if sel, ok := info.Selections[fun]; ok {
- obj = sel.Obj() // method or field
- } else {
- obj = info.Uses[fun.Sel] // qualified identifier?
- }
- }
- if _, ok := obj.(*types.TypeName); ok {
- return nil // T(x) is a conversion, not a call
- }
- // A Func is required to match instantiations.
- if _, ok := obj.(*types.Func); isInstance && !ok {
- return nil // Was not a Func.
- }
- return obj
-}
-
-// StaticCallee returns the target (function or method) of a static function
-// call, if any. It returns nil for calls to builtins.
-//
-// Note: for calls of instantiated functions and methods, StaticCallee returns
-// the corresponding generic function or method on the generic type.
-func StaticCallee(info *types.Info, call *ast.CallExpr) *types.Func {
- if f, ok := Callee(info, call).(*types.Func); ok && !interfaceMethod(f) {
- return f
- }
- return nil
-}
-
-func interfaceMethod(f *types.Func) bool {
- recv := f.Type().(*types.Signature).Recv()
- return recv != nil && types.IsInterface(recv.Type())
-}
diff --git a/vendor/golang.org/x/tools/go/types/typeutil/imports.go b/vendor/golang.org/x/tools/go/types/typeutil/imports.go
deleted file mode 100644
index b81ce0c330f..00000000000
--- a/vendor/golang.org/x/tools/go/types/typeutil/imports.go
+++ /dev/null
@@ -1,30 +0,0 @@
-// Copyright 2014 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-package typeutil
-
-import "go/types"
-
-// Dependencies returns all dependencies of the specified packages.
-//
-// Dependent packages appear in topological order: if package P imports
-// package Q, Q appears earlier than P in the result.
-// The algorithm follows import statements in the order they
-// appear in the source code, so the result is a total order.
-func Dependencies(pkgs ...*types.Package) []*types.Package {
- var result []*types.Package
- seen := make(map[*types.Package]bool)
- var visit func(pkgs []*types.Package)
- visit = func(pkgs []*types.Package) {
- for _, p := range pkgs {
- if !seen[p] {
- seen[p] = true
- visit(p.Imports())
- result = append(result, p)
- }
- }
- }
- visit(pkgs)
- return result
-}
diff --git a/vendor/golang.org/x/tools/go/types/typeutil/map.go b/vendor/golang.org/x/tools/go/types/typeutil/map.go
deleted file mode 100644
index 8d824f7140f..00000000000
--- a/vendor/golang.org/x/tools/go/types/typeutil/map.go
+++ /dev/null
@@ -1,517 +0,0 @@
-// Copyright 2014 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-// Package typeutil defines various utilities for types, such as Map,
-// a mapping from types.Type to any values.
-package typeutil // import "golang.org/x/tools/go/types/typeutil"
-
-import (
- "bytes"
- "fmt"
- "go/types"
- "reflect"
-
- "golang.org/x/tools/internal/typeparams"
-)
-
-// Map is a hash-table-based mapping from types (types.Type) to
-// arbitrary any values. The concrete types that implement
-// the Type interface are pointers. Since they are not canonicalized,
-// == cannot be used to check for equivalence, and thus we cannot
-// simply use a Go map.
-//
-// Just as with map[K]V, a nil *Map is a valid empty map.
-//
-// Not thread-safe.
-type Map struct {
- hasher Hasher // shared by many Maps
- table map[uint32][]entry // maps hash to bucket; entry.key==nil means unused
- length int // number of map entries
-}
-
-// entry is an entry (key/value association) in a hash bucket.
-type entry struct {
- key types.Type
- value any
-}
-
-// SetHasher sets the hasher used by Map.
-//
-// All Hashers are functionally equivalent but contain internal state
-// used to cache the results of hashing previously seen types.
-//
-// A single Hasher created by MakeHasher() may be shared among many
-// Maps. This is recommended if the instances have many keys in
-// common, as it will amortize the cost of hash computation.
-//
-// A Hasher may grow without bound as new types are seen. Even when a
-// type is deleted from the map, the Hasher never shrinks, since other
-// types in the map may reference the deleted type indirectly.
-//
-// Hashers are not thread-safe, and read-only operations such as
-// Map.Lookup require updates to the hasher, so a full Mutex lock (not a
-// read-lock) is require around all Map operations if a shared
-// hasher is accessed from multiple threads.
-//
-// If SetHasher is not called, the Map will create a private hasher at
-// the first call to Insert.
-func (m *Map) SetHasher(hasher Hasher) {
- m.hasher = hasher
-}
-
-// Delete removes the entry with the given key, if any.
-// It returns true if the entry was found.
-func (m *Map) Delete(key types.Type) bool {
- if m != nil && m.table != nil {
- hash := m.hasher.Hash(key)
- bucket := m.table[hash]
- for i, e := range bucket {
- if e.key != nil && types.Identical(key, e.key) {
- // We can't compact the bucket as it
- // would disturb iterators.
- bucket[i] = entry{}
- m.length--
- return true
- }
- }
- }
- return false
-}
-
-// At returns the map entry for the given key.
-// The result is nil if the entry is not present.
-func (m *Map) At(key types.Type) any {
- if m != nil && m.table != nil {
- for _, e := range m.table[m.hasher.Hash(key)] {
- if e.key != nil && types.Identical(key, e.key) {
- return e.value
- }
- }
- }
- return nil
-}
-
-// Set sets the map entry for key to val,
-// and returns the previous entry, if any.
-func (m *Map) Set(key types.Type, value any) (prev any) {
- if m.table != nil {
- hash := m.hasher.Hash(key)
- bucket := m.table[hash]
- var hole *entry
- for i, e := range bucket {
- if e.key == nil {
- hole = &bucket[i]
- } else if types.Identical(key, e.key) {
- prev = e.value
- bucket[i].value = value
- return
- }
- }
-
- if hole != nil {
- *hole = entry{key, value} // overwrite deleted entry
- } else {
- m.table[hash] = append(bucket, entry{key, value})
- }
- } else {
- if m.hasher.memo == nil {
- m.hasher = MakeHasher()
- }
- hash := m.hasher.Hash(key)
- m.table = map[uint32][]entry{hash: {entry{key, value}}}
- }
-
- m.length++
- return
-}
-
-// Len returns the number of map entries.
-func (m *Map) Len() int {
- if m != nil {
- return m.length
- }
- return 0
-}
-
-// Iterate calls function f on each entry in the map in unspecified order.
-//
-// If f should mutate the map, Iterate provides the same guarantees as
-// Go maps: if f deletes a map entry that Iterate has not yet reached,
-// f will not be invoked for it, but if f inserts a map entry that
-// Iterate has not yet reached, whether or not f will be invoked for
-// it is unspecified.
-func (m *Map) Iterate(f func(key types.Type, value any)) {
- if m != nil {
- for _, bucket := range m.table {
- for _, e := range bucket {
- if e.key != nil {
- f(e.key, e.value)
- }
- }
- }
- }
-}
-
-// Keys returns a new slice containing the set of map keys.
-// The order is unspecified.
-func (m *Map) Keys() []types.Type {
- keys := make([]types.Type, 0, m.Len())
- m.Iterate(func(key types.Type, _ any) {
- keys = append(keys, key)
- })
- return keys
-}
-
-func (m *Map) toString(values bool) string {
- if m == nil {
- return "{}"
- }
- var buf bytes.Buffer
- fmt.Fprint(&buf, "{")
- sep := ""
- m.Iterate(func(key types.Type, value any) {
- fmt.Fprint(&buf, sep)
- sep = ", "
- fmt.Fprint(&buf, key)
- if values {
- fmt.Fprintf(&buf, ": %q", value)
- }
- })
- fmt.Fprint(&buf, "}")
- return buf.String()
-}
-
-// String returns a string representation of the map's entries.
-// Values are printed using fmt.Sprintf("%v", v).
-// Order is unspecified.
-func (m *Map) String() string {
- return m.toString(true)
-}
-
-// KeysString returns a string representation of the map's key set.
-// Order is unspecified.
-func (m *Map) KeysString() string {
- return m.toString(false)
-}
-
-////////////////////////////////////////////////////////////////////////
-// Hasher
-
-// A Hasher maps each type to its hash value.
-// For efficiency, a hasher uses memoization; thus its memory
-// footprint grows monotonically over time.
-// Hashers are not thread-safe.
-// Hashers have reference semantics.
-// Call MakeHasher to create a Hasher.
-type Hasher struct {
- memo map[types.Type]uint32
-
- // ptrMap records pointer identity.
- ptrMap map[any]uint32
-
- // sigTParams holds type parameters from the signature being hashed.
- // Signatures are considered identical modulo renaming of type parameters, so
- // within the scope of a signature type the identity of the signature's type
- // parameters is just their index.
- //
- // Since the language does not currently support referring to uninstantiated
- // generic types or functions, and instantiated signatures do not have type
- // parameter lists, we should never encounter a second non-empty type
- // parameter list when hashing a generic signature.
- sigTParams *types.TypeParamList
-}
-
-// MakeHasher returns a new Hasher instance.
-func MakeHasher() Hasher {
- return Hasher{
- memo: make(map[types.Type]uint32),
- ptrMap: make(map[any]uint32),
- sigTParams: nil,
- }
-}
-
-// Hash computes a hash value for the given type t such that
-// Identical(t, t') => Hash(t) == Hash(t').
-func (h Hasher) Hash(t types.Type) uint32 {
- hash, ok := h.memo[t]
- if !ok {
- hash = h.hashFor(t)
- h.memo[t] = hash
- }
- return hash
-}
-
-// hashString computes the Fowler–Noll–Vo hash of s.
-func hashString(s string) uint32 {
- var h uint32
- for i := 0; i < len(s); i++ {
- h ^= uint32(s[i])
- h *= 16777619
- }
- return h
-}
-
-// hashFor computes the hash of t.
-func (h Hasher) hashFor(t types.Type) uint32 {
- // See Identical for rationale.
- switch t := t.(type) {
- case *types.Basic:
- return uint32(t.Kind())
-
- case *types.Alias:
- return h.Hash(types.Unalias(t))
-
- case *types.Array:
- return 9043 + 2*uint32(t.Len()) + 3*h.Hash(t.Elem())
-
- case *types.Slice:
- return 9049 + 2*h.Hash(t.Elem())
-
- case *types.Struct:
- var hash uint32 = 9059
- for i, n := 0, t.NumFields(); i < n; i++ {
- f := t.Field(i)
- if f.Anonymous() {
- hash += 8861
- }
- hash += hashString(t.Tag(i))
- hash += hashString(f.Name()) // (ignore f.Pkg)
- hash += h.Hash(f.Type())
- }
- return hash
-
- case *types.Pointer:
- return 9067 + 2*h.Hash(t.Elem())
-
- case *types.Signature:
- var hash uint32 = 9091
- if t.Variadic() {
- hash *= 8863
- }
-
- // Use a separate hasher for types inside of the signature, where type
- // parameter identity is modified to be (index, constraint). We must use a
- // new memo for this hasher as type identity may be affected by this
- // masking. For example, in func[T any](*T), the identity of *T depends on
- // whether we are mapping the argument in isolation, or recursively as part
- // of hashing the signature.
- //
- // We should never encounter a generic signature while hashing another
- // generic signature, but defensively set sigTParams only if h.mask is
- // unset.
- tparams := t.TypeParams()
- if h.sigTParams == nil && tparams.Len() != 0 {
- h = Hasher{
- // There may be something more efficient than discarding the existing
- // memo, but it would require detecting whether types are 'tainted' by
- // references to type parameters.
- memo: make(map[types.Type]uint32),
- // Re-using ptrMap ensures that pointer identity is preserved in this
- // hasher.
- ptrMap: h.ptrMap,
- sigTParams: tparams,
- }
- }
-
- for i := 0; i < tparams.Len(); i++ {
- tparam := tparams.At(i)
- hash += 7 * h.Hash(tparam.Constraint())
- }
-
- return hash + 3*h.hashTuple(t.Params()) + 5*h.hashTuple(t.Results())
-
- case *types.Union:
- return h.hashUnion(t)
-
- case *types.Interface:
- // Interfaces are identical if they have the same set of methods, with
- // identical names and types, and they have the same set of type
- // restrictions. See go/types.identical for more details.
- var hash uint32 = 9103
-
- // Hash methods.
- for i, n := 0, t.NumMethods(); i < n; i++ {
- // Method order is not significant.
- // Ignore m.Pkg().
- m := t.Method(i)
- // Use shallow hash on method signature to
- // avoid anonymous interface cycles.
- hash += 3*hashString(m.Name()) + 5*h.shallowHash(m.Type())
- }
-
- // Hash type restrictions.
- terms, err := typeparams.InterfaceTermSet(t)
- // if err != nil t has invalid type restrictions.
- if err == nil {
- hash += h.hashTermSet(terms)
- }
-
- return hash
-
- case *types.Map:
- return 9109 + 2*h.Hash(t.Key()) + 3*h.Hash(t.Elem())
-
- case *types.Chan:
- return 9127 + 2*uint32(t.Dir()) + 3*h.Hash(t.Elem())
-
- case *types.Named:
- hash := h.hashPtr(t.Obj())
- targs := t.TypeArgs()
- for i := 0; i < targs.Len(); i++ {
- targ := targs.At(i)
- hash += 2 * h.Hash(targ)
- }
- return hash
-
- case *types.TypeParam:
- return h.hashTypeParam(t)
-
- case *types.Tuple:
- return h.hashTuple(t)
- }
-
- panic(fmt.Sprintf("%T: %v", t, t))
-}
-
-func (h Hasher) hashTuple(tuple *types.Tuple) uint32 {
- // See go/types.identicalTypes for rationale.
- n := tuple.Len()
- hash := 9137 + 2*uint32(n)
- for i := 0; i < n; i++ {
- hash += 3 * h.Hash(tuple.At(i).Type())
- }
- return hash
-}
-
-func (h Hasher) hashUnion(t *types.Union) uint32 {
- // Hash type restrictions.
- terms, err := typeparams.UnionTermSet(t)
- // if err != nil t has invalid type restrictions. Fall back on a non-zero
- // hash.
- if err != nil {
- return 9151
- }
- return h.hashTermSet(terms)
-}
-
-func (h Hasher) hashTermSet(terms []*types.Term) uint32 {
- hash := 9157 + 2*uint32(len(terms))
- for _, term := range terms {
- // term order is not significant.
- termHash := h.Hash(term.Type())
- if term.Tilde() {
- termHash *= 9161
- }
- hash += 3 * termHash
- }
- return hash
-}
-
-// hashTypeParam returns a hash of the type parameter t, with a hash value
-// depending on whether t is contained in h.sigTParams.
-//
-// If h.sigTParams is set and contains t, then we are in the process of hashing
-// a signature, and the hash value of t must depend only on t's index and
-// constraint: signatures are considered identical modulo type parameter
-// renaming. To avoid infinite recursion, we only hash the type parameter
-// index, and rely on types.Identical to handle signatures where constraints
-// are not identical.
-//
-// Otherwise the hash of t depends only on t's pointer identity.
-func (h Hasher) hashTypeParam(t *types.TypeParam) uint32 {
- if h.sigTParams != nil {
- i := t.Index()
- if i >= 0 && i < h.sigTParams.Len() && t == h.sigTParams.At(i) {
- return 9173 + 3*uint32(i)
- }
- }
- return h.hashPtr(t.Obj())
-}
-
-// hashPtr hashes the pointer identity of ptr. It uses h.ptrMap to ensure that
-// pointers values are not dependent on the GC.
-func (h Hasher) hashPtr(ptr any) uint32 {
- if hash, ok := h.ptrMap[ptr]; ok {
- return hash
- }
- hash := uint32(reflect.ValueOf(ptr).Pointer())
- h.ptrMap[ptr] = hash
- return hash
-}
-
-// shallowHash computes a hash of t without looking at any of its
-// element Types, to avoid potential anonymous cycles in the types of
-// interface methods.
-//
-// When an unnamed non-empty interface type appears anywhere among the
-// arguments or results of an interface method, there is a potential
-// for endless recursion. Consider:
-//
-// type X interface { m() []*interface { X } }
-//
-// The problem is that the Methods of the interface in m's result type
-// include m itself; there is no mention of the named type X that
-// might help us break the cycle.
-// (See comment in go/types.identical, case *Interface, for more.)
-func (h Hasher) shallowHash(t types.Type) uint32 {
- // t is the type of an interface method (Signature),
- // its params or results (Tuples), or their immediate
- // elements (mostly Slice, Pointer, Basic, Named),
- // so there's no need to optimize anything else.
- switch t := t.(type) {
- case *types.Alias:
- return h.shallowHash(types.Unalias(t))
-
- case *types.Signature:
- var hash uint32 = 604171
- if t.Variadic() {
- hash *= 971767
- }
- // The Signature/Tuple recursion is always finite
- // and invariably shallow.
- return hash + 1062599*h.shallowHash(t.Params()) + 1282529*h.shallowHash(t.Results())
-
- case *types.Tuple:
- n := t.Len()
- hash := 9137 + 2*uint32(n)
- for i := 0; i < n; i++ {
- hash += 53471161 * h.shallowHash(t.At(i).Type())
- }
- return hash
-
- case *types.Basic:
- return 45212177 * uint32(t.Kind())
-
- case *types.Array:
- return 1524181 + 2*uint32(t.Len())
-
- case *types.Slice:
- return 2690201
-
- case *types.Struct:
- return 3326489
-
- case *types.Pointer:
- return 4393139
-
- case *types.Union:
- return 562448657
-
- case *types.Interface:
- return 2124679 // no recursion here
-
- case *types.Map:
- return 9109
-
- case *types.Chan:
- return 9127
-
- case *types.Named:
- return h.hashPtr(t.Obj())
-
- case *types.TypeParam:
- return h.hashPtr(t.Obj())
- }
- panic(fmt.Sprintf("shallowHash: %T: %v", t, t))
-}
diff --git a/vendor/golang.org/x/tools/go/types/typeutil/methodsetcache.go b/vendor/golang.org/x/tools/go/types/typeutil/methodsetcache.go
deleted file mode 100644
index f7666028fe5..00000000000
--- a/vendor/golang.org/x/tools/go/types/typeutil/methodsetcache.go
+++ /dev/null
@@ -1,71 +0,0 @@
-// Copyright 2014 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-// This file implements a cache of method sets.
-
-package typeutil
-
-import (
- "go/types"
- "sync"
-)
-
-// A MethodSetCache records the method set of each type T for which
-// MethodSet(T) is called so that repeat queries are fast.
-// The zero value is a ready-to-use cache instance.
-type MethodSetCache struct {
- mu sync.Mutex
- named map[*types.Named]struct{ value, pointer *types.MethodSet } // method sets for named N and *N
- others map[types.Type]*types.MethodSet // all other types
-}
-
-// MethodSet returns the method set of type T. It is thread-safe.
-//
-// If cache is nil, this function is equivalent to types.NewMethodSet(T).
-// Utility functions can thus expose an optional *MethodSetCache
-// parameter to clients that care about performance.
-func (cache *MethodSetCache) MethodSet(T types.Type) *types.MethodSet {
- if cache == nil {
- return types.NewMethodSet(T)
- }
- cache.mu.Lock()
- defer cache.mu.Unlock()
-
- switch T := types.Unalias(T).(type) {
- case *types.Named:
- return cache.lookupNamed(T).value
-
- case *types.Pointer:
- if N, ok := types.Unalias(T.Elem()).(*types.Named); ok {
- return cache.lookupNamed(N).pointer
- }
- }
-
- // all other types
- // (The map uses pointer equivalence, not type identity.)
- mset := cache.others[T]
- if mset == nil {
- mset = types.NewMethodSet(T)
- if cache.others == nil {
- cache.others = make(map[types.Type]*types.MethodSet)
- }
- cache.others[T] = mset
- }
- return mset
-}
-
-func (cache *MethodSetCache) lookupNamed(named *types.Named) struct{ value, pointer *types.MethodSet } {
- if cache.named == nil {
- cache.named = make(map[*types.Named]struct{ value, pointer *types.MethodSet })
- }
- // Avoid recomputing mset(*T) for each distinct Pointer
- // instance whose underlying type is a named type.
- msets, ok := cache.named[named]
- if !ok {
- msets.value = types.NewMethodSet(named)
- msets.pointer = types.NewMethodSet(types.NewPointer(named))
- cache.named[named] = msets
- }
- return msets
-}
diff --git a/vendor/golang.org/x/tools/go/types/typeutil/ui.go b/vendor/golang.org/x/tools/go/types/typeutil/ui.go
deleted file mode 100644
index 9dda6a25df7..00000000000
--- a/vendor/golang.org/x/tools/go/types/typeutil/ui.go
+++ /dev/null
@@ -1,53 +0,0 @@
-// Copyright 2014 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-package typeutil
-
-// This file defines utilities for user interfaces that display types.
-
-import (
- "go/types"
-)
-
-// IntuitiveMethodSet returns the intuitive method set of a type T,
-// which is the set of methods you can call on an addressable value of
-// that type.
-//
-// The result always contains MethodSet(T), and is exactly MethodSet(T)
-// for interface types and for pointer-to-concrete types.
-// For all other concrete types T, the result additionally
-// contains each method belonging to *T if there is no identically
-// named method on T itself.
-//
-// This corresponds to user intuition about method sets;
-// this function is intended only for user interfaces.
-//
-// The order of the result is as for types.MethodSet(T).
-func IntuitiveMethodSet(T types.Type, msets *MethodSetCache) []*types.Selection {
- isPointerToConcrete := func(T types.Type) bool {
- ptr, ok := types.Unalias(T).(*types.Pointer)
- return ok && !types.IsInterface(ptr.Elem())
- }
-
- var result []*types.Selection
- mset := msets.MethodSet(T)
- if types.IsInterface(T) || isPointerToConcrete(T) {
- for i, n := 0, mset.Len(); i < n; i++ {
- result = append(result, mset.At(i))
- }
- } else {
- // T is some other concrete type.
- // Report methods of T and *T, preferring those of T.
- pmset := msets.MethodSet(types.NewPointer(T))
- for i, n := 0, pmset.Len(); i < n; i++ {
- meth := pmset.At(i)
- if m := mset.Lookup(meth.Obj().Pkg(), meth.Obj().Name()); m != nil {
- meth = m
- }
- result = append(result, meth)
- }
-
- }
- return result
-}
diff --git a/vendor/golang.org/x/tools/internal/aliases/aliases.go b/vendor/golang.org/x/tools/internal/aliases/aliases.go
deleted file mode 100644
index b9425f5a209..00000000000
--- a/vendor/golang.org/x/tools/internal/aliases/aliases.go
+++ /dev/null
@@ -1,38 +0,0 @@
-// Copyright 2024 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-package aliases
-
-import (
- "go/token"
- "go/types"
-)
-
-// Package aliases defines backward compatible shims
-// for the types.Alias type representation added in 1.22.
-// This defines placeholders for x/tools until 1.26.
-
-// NewAlias creates a new TypeName in Package pkg that
-// is an alias for the type rhs.
-//
-// The enabled parameter determines whether the resulting [TypeName]'s
-// type is an [types.Alias]. Its value must be the result of a call to
-// [Enabled], which computes the effective value of
-// GODEBUG=gotypesalias=... by invoking the type checker. The Enabled
-// function is expensive and should be called once per task (e.g.
-// package import), not once per call to NewAlias.
-//
-// Precondition: enabled || len(tparams)==0.
-// If materialized aliases are disabled, there must not be any type parameters.
-func NewAlias(enabled bool, pos token.Pos, pkg *types.Package, name string, rhs types.Type, tparams []*types.TypeParam) *types.TypeName {
- if enabled {
- tname := types.NewTypeName(pos, pkg, name, nil)
- SetTypeParams(types.NewAlias(tname, rhs), tparams)
- return tname
- }
- if len(tparams) > 0 {
- panic("cannot create an alias with type parameters when gotypesalias is not enabled")
- }
- return types.NewTypeName(pos, pkg, name, rhs)
-}
diff --git a/vendor/golang.org/x/tools/internal/aliases/aliases_go122.go b/vendor/golang.org/x/tools/internal/aliases/aliases_go122.go
deleted file mode 100644
index 7716a3331db..00000000000
--- a/vendor/golang.org/x/tools/internal/aliases/aliases_go122.go
+++ /dev/null
@@ -1,80 +0,0 @@
-// Copyright 2024 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-package aliases
-
-import (
- "go/ast"
- "go/parser"
- "go/token"
- "go/types"
-)
-
-// Rhs returns the type on the right-hand side of the alias declaration.
-func Rhs(alias *types.Alias) types.Type {
- if alias, ok := any(alias).(interface{ Rhs() types.Type }); ok {
- return alias.Rhs() // go1.23+
- }
-
- // go1.22's Alias didn't have the Rhs method,
- // so Unalias is the best we can do.
- return types.Unalias(alias)
-}
-
-// TypeParams returns the type parameter list of the alias.
-func TypeParams(alias *types.Alias) *types.TypeParamList {
- if alias, ok := any(alias).(interface{ TypeParams() *types.TypeParamList }); ok {
- return alias.TypeParams() // go1.23+
- }
- return nil
-}
-
-// SetTypeParams sets the type parameters of the alias type.
-func SetTypeParams(alias *types.Alias, tparams []*types.TypeParam) {
- if alias, ok := any(alias).(interface {
- SetTypeParams(tparams []*types.TypeParam)
- }); ok {
- alias.SetTypeParams(tparams) // go1.23+
- } else if len(tparams) > 0 {
- panic("cannot set type parameters of an Alias type in go1.22")
- }
-}
-
-// TypeArgs returns the type arguments used to instantiate the Alias type.
-func TypeArgs(alias *types.Alias) *types.TypeList {
- if alias, ok := any(alias).(interface{ TypeArgs() *types.TypeList }); ok {
- return alias.TypeArgs() // go1.23+
- }
- return nil // empty (go1.22)
-}
-
-// Origin returns the generic Alias type of which alias is an instance.
-// If alias is not an instance of a generic alias, Origin returns alias.
-func Origin(alias *types.Alias) *types.Alias {
- if alias, ok := any(alias).(interface{ Origin() *types.Alias }); ok {
- return alias.Origin() // go1.23+
- }
- return alias // not an instance of a generic alias (go1.22)
-}
-
-// Enabled reports whether [NewAlias] should create [types.Alias] types.
-//
-// This function is expensive! Call it sparingly.
-func Enabled() bool {
- // The only reliable way to compute the answer is to invoke go/types.
- // We don't parse the GODEBUG environment variable, because
- // (a) it's tricky to do so in a manner that is consistent
- // with the godebug package; in particular, a simple
- // substring check is not good enough. The value is a
- // rightmost-wins list of options. But more importantly:
- // (b) it is impossible to detect changes to the effective
- // setting caused by os.Setenv("GODEBUG"), as happens in
- // many tests. Therefore any attempt to cache the result
- // is just incorrect.
- fset := token.NewFileSet()
- f, _ := parser.ParseFile(fset, "a.go", "package p; type A = int", parser.SkipObjectResolution)
- pkg, _ := new(types.Config).Check("p", fset, []*ast.File{f}, nil)
- _, enabled := pkg.Scope().Lookup("A").Type().(*types.Alias)
- return enabled
-}
diff --git a/vendor/golang.org/x/tools/internal/event/core/event.go b/vendor/golang.org/x/tools/internal/event/core/event.go
deleted file mode 100644
index a6cf0e64a4b..00000000000
--- a/vendor/golang.org/x/tools/internal/event/core/event.go
+++ /dev/null
@@ -1,85 +0,0 @@
-// Copyright 2019 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-// Package core provides support for event based telemetry.
-package core
-
-import (
- "fmt"
- "time"
-
- "golang.org/x/tools/internal/event/label"
-)
-
-// Event holds the information about an event of note that occurred.
-type Event struct {
- at time.Time
-
- // As events are often on the stack, storing the first few labels directly
- // in the event can avoid an allocation at all for the very common cases of
- // simple events.
- // The length needs to be large enough to cope with the majority of events
- // but no so large as to cause undue stack pressure.
- // A log message with two values will use 3 labels (one for each value and
- // one for the message itself).
-
- static [3]label.Label // inline storage for the first few labels
- dynamic []label.Label // dynamically sized storage for remaining labels
-}
-
-// eventLabelMap implements label.Map for a the labels of an Event.
-type eventLabelMap struct {
- event Event
-}
-
-func (ev Event) At() time.Time { return ev.at }
-
-func (ev Event) Format(f fmt.State, r rune) {
- if !ev.at.IsZero() {
- fmt.Fprint(f, ev.at.Format("2006/01/02 15:04:05 "))
- }
- for index := 0; ev.Valid(index); index++ {
- if l := ev.Label(index); l.Valid() {
- fmt.Fprintf(f, "\n\t%v", l)
- }
- }
-}
-
-func (ev Event) Valid(index int) bool {
- return index >= 0 && index < len(ev.static)+len(ev.dynamic)
-}
-
-func (ev Event) Label(index int) label.Label {
- if index < len(ev.static) {
- return ev.static[index]
- }
- return ev.dynamic[index-len(ev.static)]
-}
-
-func (ev Event) Find(key label.Key) label.Label {
- for _, l := range ev.static {
- if l.Key() == key {
- return l
- }
- }
- for _, l := range ev.dynamic {
- if l.Key() == key {
- return l
- }
- }
- return label.Label{}
-}
-
-func MakeEvent(static [3]label.Label, labels []label.Label) Event {
- return Event{
- static: static,
- dynamic: labels,
- }
-}
-
-// CloneEvent event returns a copy of the event with the time adjusted to at.
-func CloneEvent(ev Event, at time.Time) Event {
- ev.at = at
- return ev
-}
diff --git a/vendor/golang.org/x/tools/internal/event/core/export.go b/vendor/golang.org/x/tools/internal/event/core/export.go
deleted file mode 100644
index 05f3a9a5791..00000000000
--- a/vendor/golang.org/x/tools/internal/event/core/export.go
+++ /dev/null
@@ -1,70 +0,0 @@
-// Copyright 2019 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-package core
-
-import (
- "context"
- "sync/atomic"
- "time"
- "unsafe"
-
- "golang.org/x/tools/internal/event/label"
-)
-
-// Exporter is a function that handles events.
-// It may return a modified context and event.
-type Exporter func(context.Context, Event, label.Map) context.Context
-
-var (
- exporter unsafe.Pointer
-)
-
-// SetExporter sets the global exporter function that handles all events.
-// The exporter is called synchronously from the event call site, so it should
-// return quickly so as not to hold up user code.
-func SetExporter(e Exporter) {
- p := unsafe.Pointer(&e)
- if e == nil {
- // &e is always valid, and so p is always valid, but for the early abort
- // of ProcessEvent to be efficient it needs to make the nil check on the
- // pointer without having to dereference it, so we make the nil function
- // also a nil pointer
- p = nil
- }
- atomic.StorePointer(&exporter, p)
-}
-
-// deliver is called to deliver an event to the supplied exporter.
-// it will fill in the time.
-func deliver(ctx context.Context, exporter Exporter, ev Event) context.Context {
- // add the current time to the event
- ev.at = time.Now()
- // hand the event off to the current exporter
- return exporter(ctx, ev, ev)
-}
-
-// Export is called to deliver an event to the global exporter if set.
-func Export(ctx context.Context, ev Event) context.Context {
- // get the global exporter and abort early if there is not one
- exporterPtr := (*Exporter)(atomic.LoadPointer(&exporter))
- if exporterPtr == nil {
- return ctx
- }
- return deliver(ctx, *exporterPtr, ev)
-}
-
-// ExportPair is called to deliver a start event to the supplied exporter.
-// It also returns a function that will deliver the end event to the same
-// exporter.
-// It will fill in the time.
-func ExportPair(ctx context.Context, begin, end Event) (context.Context, func()) {
- // get the global exporter and abort early if there is not one
- exporterPtr := (*Exporter)(atomic.LoadPointer(&exporter))
- if exporterPtr == nil {
- return ctx, func() {}
- }
- ctx = deliver(ctx, *exporterPtr, begin)
- return ctx, func() { deliver(ctx, *exporterPtr, end) }
-}
diff --git a/vendor/golang.org/x/tools/internal/event/core/fast.go b/vendor/golang.org/x/tools/internal/event/core/fast.go
deleted file mode 100644
index 06c1d4615e6..00000000000
--- a/vendor/golang.org/x/tools/internal/event/core/fast.go
+++ /dev/null
@@ -1,77 +0,0 @@
-// Copyright 2019 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-package core
-
-import (
- "context"
-
- "golang.org/x/tools/internal/event/keys"
- "golang.org/x/tools/internal/event/label"
-)
-
-// Log1 takes a message and one label delivers a log event to the exporter.
-// It is a customized version of Print that is faster and does no allocation.
-func Log1(ctx context.Context, message string, t1 label.Label) {
- Export(ctx, MakeEvent([3]label.Label{
- keys.Msg.Of(message),
- t1,
- }, nil))
-}
-
-// Log2 takes a message and two labels and delivers a log event to the exporter.
-// It is a customized version of Print that is faster and does no allocation.
-func Log2(ctx context.Context, message string, t1 label.Label, t2 label.Label) {
- Export(ctx, MakeEvent([3]label.Label{
- keys.Msg.Of(message),
- t1,
- t2,
- }, nil))
-}
-
-// Metric1 sends a label event to the exporter with the supplied labels.
-func Metric1(ctx context.Context, t1 label.Label) context.Context {
- return Export(ctx, MakeEvent([3]label.Label{
- keys.Metric.New(),
- t1,
- }, nil))
-}
-
-// Metric2 sends a label event to the exporter with the supplied labels.
-func Metric2(ctx context.Context, t1, t2 label.Label) context.Context {
- return Export(ctx, MakeEvent([3]label.Label{
- keys.Metric.New(),
- t1,
- t2,
- }, nil))
-}
-
-// Start1 sends a span start event with the supplied label list to the exporter.
-// It also returns a function that will end the span, which should normally be
-// deferred.
-func Start1(ctx context.Context, name string, t1 label.Label) (context.Context, func()) {
- return ExportPair(ctx,
- MakeEvent([3]label.Label{
- keys.Start.Of(name),
- t1,
- }, nil),
- MakeEvent([3]label.Label{
- keys.End.New(),
- }, nil))
-}
-
-// Start2 sends a span start event with the supplied label list to the exporter.
-// It also returns a function that will end the span, which should normally be
-// deferred.
-func Start2(ctx context.Context, name string, t1, t2 label.Label) (context.Context, func()) {
- return ExportPair(ctx,
- MakeEvent([3]label.Label{
- keys.Start.Of(name),
- t1,
- t2,
- }, nil),
- MakeEvent([3]label.Label{
- keys.End.New(),
- }, nil))
-}
diff --git a/vendor/golang.org/x/tools/internal/event/doc.go b/vendor/golang.org/x/tools/internal/event/doc.go
deleted file mode 100644
index 5dc6e6babed..00000000000
--- a/vendor/golang.org/x/tools/internal/event/doc.go
+++ /dev/null
@@ -1,7 +0,0 @@
-// Copyright 2019 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-// Package event provides a set of packages that cover the main
-// concepts of telemetry in an implementation agnostic way.
-package event
diff --git a/vendor/golang.org/x/tools/internal/event/event.go b/vendor/golang.org/x/tools/internal/event/event.go
deleted file mode 100644
index 4d55e577d1a..00000000000
--- a/vendor/golang.org/x/tools/internal/event/event.go
+++ /dev/null
@@ -1,127 +0,0 @@
-// Copyright 2019 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-package event
-
-import (
- "context"
-
- "golang.org/x/tools/internal/event/core"
- "golang.org/x/tools/internal/event/keys"
- "golang.org/x/tools/internal/event/label"
-)
-
-// Exporter is a function that handles events.
-// It may return a modified context and event.
-type Exporter func(context.Context, core.Event, label.Map) context.Context
-
-// SetExporter sets the global exporter function that handles all events.
-// The exporter is called synchronously from the event call site, so it should
-// return quickly so as not to hold up user code.
-func SetExporter(e Exporter) {
- core.SetExporter(core.Exporter(e))
-}
-
-// Log takes a message and a label list and combines them into a single event
-// before delivering them to the exporter.
-func Log(ctx context.Context, message string, labels ...label.Label) {
- core.Export(ctx, core.MakeEvent([3]label.Label{
- keys.Msg.Of(message),
- }, labels))
-}
-
-// IsLog returns true if the event was built by the Log function.
-// It is intended to be used in exporters to identify the semantics of the
-// event when deciding what to do with it.
-func IsLog(ev core.Event) bool {
- return ev.Label(0).Key() == keys.Msg
-}
-
-// Error takes a message and a label list and combines them into a single event
-// before delivering them to the exporter. It captures the error in the
-// delivered event.
-func Error(ctx context.Context, message string, err error, labels ...label.Label) {
- core.Export(ctx, core.MakeEvent([3]label.Label{
- keys.Msg.Of(message),
- keys.Err.Of(err),
- }, labels))
-}
-
-// IsError returns true if the event was built by the Error function.
-// It is intended to be used in exporters to identify the semantics of the
-// event when deciding what to do with it.
-func IsError(ev core.Event) bool {
- return ev.Label(0).Key() == keys.Msg &&
- ev.Label(1).Key() == keys.Err
-}
-
-// Metric sends a label event to the exporter with the supplied labels.
-func Metric(ctx context.Context, labels ...label.Label) {
- core.Export(ctx, core.MakeEvent([3]label.Label{
- keys.Metric.New(),
- }, labels))
-}
-
-// IsMetric returns true if the event was built by the Metric function.
-// It is intended to be used in exporters to identify the semantics of the
-// event when deciding what to do with it.
-func IsMetric(ev core.Event) bool {
- return ev.Label(0).Key() == keys.Metric
-}
-
-// Label sends a label event to the exporter with the supplied labels.
-func Label(ctx context.Context, labels ...label.Label) context.Context {
- return core.Export(ctx, core.MakeEvent([3]label.Label{
- keys.Label.New(),
- }, labels))
-}
-
-// IsLabel returns true if the event was built by the Label function.
-// It is intended to be used in exporters to identify the semantics of the
-// event when deciding what to do with it.
-func IsLabel(ev core.Event) bool {
- return ev.Label(0).Key() == keys.Label
-}
-
-// Start sends a span start event with the supplied label list to the exporter.
-// It also returns a function that will end the span, which should normally be
-// deferred.
-func Start(ctx context.Context, name string, labels ...label.Label) (context.Context, func()) {
- return core.ExportPair(ctx,
- core.MakeEvent([3]label.Label{
- keys.Start.Of(name),
- }, labels),
- core.MakeEvent([3]label.Label{
- keys.End.New(),
- }, nil))
-}
-
-// IsStart returns true if the event was built by the Start function.
-// It is intended to be used in exporters to identify the semantics of the
-// event when deciding what to do with it.
-func IsStart(ev core.Event) bool {
- return ev.Label(0).Key() == keys.Start
-}
-
-// IsEnd returns true if the event was built by the End function.
-// It is intended to be used in exporters to identify the semantics of the
-// event when deciding what to do with it.
-func IsEnd(ev core.Event) bool {
- return ev.Label(0).Key() == keys.End
-}
-
-// Detach returns a context without an associated span.
-// This allows the creation of spans that are not children of the current span.
-func Detach(ctx context.Context) context.Context {
- return core.Export(ctx, core.MakeEvent([3]label.Label{
- keys.Detach.New(),
- }, nil))
-}
-
-// IsDetach returns true if the event was built by the Detach function.
-// It is intended to be used in exporters to identify the semantics of the
-// event when deciding what to do with it.
-func IsDetach(ev core.Event) bool {
- return ev.Label(0).Key() == keys.Detach
-}
diff --git a/vendor/golang.org/x/tools/internal/event/keys/keys.go b/vendor/golang.org/x/tools/internal/event/keys/keys.go
deleted file mode 100644
index a02206e3015..00000000000
--- a/vendor/golang.org/x/tools/internal/event/keys/keys.go
+++ /dev/null
@@ -1,564 +0,0 @@
-// Copyright 2019 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-package keys
-
-import (
- "fmt"
- "io"
- "math"
- "strconv"
-
- "golang.org/x/tools/internal/event/label"
-)
-
-// Value represents a key for untyped values.
-type Value struct {
- name string
- description string
-}
-
-// New creates a new Key for untyped values.
-func New(name, description string) *Value {
- return &Value{name: name, description: description}
-}
-
-func (k *Value) Name() string { return k.name }
-func (k *Value) Description() string { return k.description }
-
-func (k *Value) Format(w io.Writer, buf []byte, l label.Label) {
- fmt.Fprint(w, k.From(l))
-}
-
-// Get can be used to get a label for the key from a label.Map.
-func (k *Value) Get(lm label.Map) interface{} {
- if t := lm.Find(k); t.Valid() {
- return k.From(t)
- }
- return nil
-}
-
-// From can be used to get a value from a Label.
-func (k *Value) From(t label.Label) interface{} { return t.UnpackValue() }
-
-// Of creates a new Label with this key and the supplied value.
-func (k *Value) Of(value interface{}) label.Label { return label.OfValue(k, value) }
-
-// Tag represents a key for tagging labels that have no value.
-// These are used when the existence of the label is the entire information it
-// carries, such as marking events to be of a specific kind, or from a specific
-// package.
-type Tag struct {
- name string
- description string
-}
-
-// NewTag creates a new Key for tagging labels.
-func NewTag(name, description string) *Tag {
- return &Tag{name: name, description: description}
-}
-
-func (k *Tag) Name() string { return k.name }
-func (k *Tag) Description() string { return k.description }
-
-func (k *Tag) Format(w io.Writer, buf []byte, l label.Label) {}
-
-// New creates a new Label with this key.
-func (k *Tag) New() label.Label { return label.OfValue(k, nil) }
-
-// Int represents a key
-type Int struct {
- name string
- description string
-}
-
-// NewInt creates a new Key for int values.
-func NewInt(name, description string) *Int {
- return &Int{name: name, description: description}
-}
-
-func (k *Int) Name() string { return k.name }
-func (k *Int) Description() string { return k.description }
-
-func (k *Int) Format(w io.Writer, buf []byte, l label.Label) {
- w.Write(strconv.AppendInt(buf, int64(k.From(l)), 10))
-}
-
-// Of creates a new Label with this key and the supplied value.
-func (k *Int) Of(v int) label.Label { return label.Of64(k, uint64(v)) }
-
-// Get can be used to get a label for the key from a label.Map.
-func (k *Int) Get(lm label.Map) int {
- if t := lm.Find(k); t.Valid() {
- return k.From(t)
- }
- return 0
-}
-
-// From can be used to get a value from a Label.
-func (k *Int) From(t label.Label) int { return int(t.Unpack64()) }
-
-// Int8 represents a key
-type Int8 struct {
- name string
- description string
-}
-
-// NewInt8 creates a new Key for int8 values.
-func NewInt8(name, description string) *Int8 {
- return &Int8{name: name, description: description}
-}
-
-func (k *Int8) Name() string { return k.name }
-func (k *Int8) Description() string { return k.description }
-
-func (k *Int8) Format(w io.Writer, buf []byte, l label.Label) {
- w.Write(strconv.AppendInt(buf, int64(k.From(l)), 10))
-}
-
-// Of creates a new Label with this key and the supplied value.
-func (k *Int8) Of(v int8) label.Label { return label.Of64(k, uint64(v)) }
-
-// Get can be used to get a label for the key from a label.Map.
-func (k *Int8) Get(lm label.Map) int8 {
- if t := lm.Find(k); t.Valid() {
- return k.From(t)
- }
- return 0
-}
-
-// From can be used to get a value from a Label.
-func (k *Int8) From(t label.Label) int8 { return int8(t.Unpack64()) }
-
-// Int16 represents a key
-type Int16 struct {
- name string
- description string
-}
-
-// NewInt16 creates a new Key for int16 values.
-func NewInt16(name, description string) *Int16 {
- return &Int16{name: name, description: description}
-}
-
-func (k *Int16) Name() string { return k.name }
-func (k *Int16) Description() string { return k.description }
-
-func (k *Int16) Format(w io.Writer, buf []byte, l label.Label) {
- w.Write(strconv.AppendInt(buf, int64(k.From(l)), 10))
-}
-
-// Of creates a new Label with this key and the supplied value.
-func (k *Int16) Of(v int16) label.Label { return label.Of64(k, uint64(v)) }
-
-// Get can be used to get a label for the key from a label.Map.
-func (k *Int16) Get(lm label.Map) int16 {
- if t := lm.Find(k); t.Valid() {
- return k.From(t)
- }
- return 0
-}
-
-// From can be used to get a value from a Label.
-func (k *Int16) From(t label.Label) int16 { return int16(t.Unpack64()) }
-
-// Int32 represents a key
-type Int32 struct {
- name string
- description string
-}
-
-// NewInt32 creates a new Key for int32 values.
-func NewInt32(name, description string) *Int32 {
- return &Int32{name: name, description: description}
-}
-
-func (k *Int32) Name() string { return k.name }
-func (k *Int32) Description() string { return k.description }
-
-func (k *Int32) Format(w io.Writer, buf []byte, l label.Label) {
- w.Write(strconv.AppendInt(buf, int64(k.From(l)), 10))
-}
-
-// Of creates a new Label with this key and the supplied value.
-func (k *Int32) Of(v int32) label.Label { return label.Of64(k, uint64(v)) }
-
-// Get can be used to get a label for the key from a label.Map.
-func (k *Int32) Get(lm label.Map) int32 {
- if t := lm.Find(k); t.Valid() {
- return k.From(t)
- }
- return 0
-}
-
-// From can be used to get a value from a Label.
-func (k *Int32) From(t label.Label) int32 { return int32(t.Unpack64()) }
-
-// Int64 represents a key
-type Int64 struct {
- name string
- description string
-}
-
-// NewInt64 creates a new Key for int64 values.
-func NewInt64(name, description string) *Int64 {
- return &Int64{name: name, description: description}
-}
-
-func (k *Int64) Name() string { return k.name }
-func (k *Int64) Description() string { return k.description }
-
-func (k *Int64) Format(w io.Writer, buf []byte, l label.Label) {
- w.Write(strconv.AppendInt(buf, k.From(l), 10))
-}
-
-// Of creates a new Label with this key and the supplied value.
-func (k *Int64) Of(v int64) label.Label { return label.Of64(k, uint64(v)) }
-
-// Get can be used to get a label for the key from a label.Map.
-func (k *Int64) Get(lm label.Map) int64 {
- if t := lm.Find(k); t.Valid() {
- return k.From(t)
- }
- return 0
-}
-
-// From can be used to get a value from a Label.
-func (k *Int64) From(t label.Label) int64 { return int64(t.Unpack64()) }
-
-// UInt represents a key
-type UInt struct {
- name string
- description string
-}
-
-// NewUInt creates a new Key for uint values.
-func NewUInt(name, description string) *UInt {
- return &UInt{name: name, description: description}
-}
-
-func (k *UInt) Name() string { return k.name }
-func (k *UInt) Description() string { return k.description }
-
-func (k *UInt) Format(w io.Writer, buf []byte, l label.Label) {
- w.Write(strconv.AppendUint(buf, uint64(k.From(l)), 10))
-}
-
-// Of creates a new Label with this key and the supplied value.
-func (k *UInt) Of(v uint) label.Label { return label.Of64(k, uint64(v)) }
-
-// Get can be used to get a label for the key from a label.Map.
-func (k *UInt) Get(lm label.Map) uint {
- if t := lm.Find(k); t.Valid() {
- return k.From(t)
- }
- return 0
-}
-
-// From can be used to get a value from a Label.
-func (k *UInt) From(t label.Label) uint { return uint(t.Unpack64()) }
-
-// UInt8 represents a key
-type UInt8 struct {
- name string
- description string
-}
-
-// NewUInt8 creates a new Key for uint8 values.
-func NewUInt8(name, description string) *UInt8 {
- return &UInt8{name: name, description: description}
-}
-
-func (k *UInt8) Name() string { return k.name }
-func (k *UInt8) Description() string { return k.description }
-
-func (k *UInt8) Format(w io.Writer, buf []byte, l label.Label) {
- w.Write(strconv.AppendUint(buf, uint64(k.From(l)), 10))
-}
-
-// Of creates a new Label with this key and the supplied value.
-func (k *UInt8) Of(v uint8) label.Label { return label.Of64(k, uint64(v)) }
-
-// Get can be used to get a label for the key from a label.Map.
-func (k *UInt8) Get(lm label.Map) uint8 {
- if t := lm.Find(k); t.Valid() {
- return k.From(t)
- }
- return 0
-}
-
-// From can be used to get a value from a Label.
-func (k *UInt8) From(t label.Label) uint8 { return uint8(t.Unpack64()) }
-
-// UInt16 represents a key
-type UInt16 struct {
- name string
- description string
-}
-
-// NewUInt16 creates a new Key for uint16 values.
-func NewUInt16(name, description string) *UInt16 {
- return &UInt16{name: name, description: description}
-}
-
-func (k *UInt16) Name() string { return k.name }
-func (k *UInt16) Description() string { return k.description }
-
-func (k *UInt16) Format(w io.Writer, buf []byte, l label.Label) {
- w.Write(strconv.AppendUint(buf, uint64(k.From(l)), 10))
-}
-
-// Of creates a new Label with this key and the supplied value.
-func (k *UInt16) Of(v uint16) label.Label { return label.Of64(k, uint64(v)) }
-
-// Get can be used to get a label for the key from a label.Map.
-func (k *UInt16) Get(lm label.Map) uint16 {
- if t := lm.Find(k); t.Valid() {
- return k.From(t)
- }
- return 0
-}
-
-// From can be used to get a value from a Label.
-func (k *UInt16) From(t label.Label) uint16 { return uint16(t.Unpack64()) }
-
-// UInt32 represents a key
-type UInt32 struct {
- name string
- description string
-}
-
-// NewUInt32 creates a new Key for uint32 values.
-func NewUInt32(name, description string) *UInt32 {
- return &UInt32{name: name, description: description}
-}
-
-func (k *UInt32) Name() string { return k.name }
-func (k *UInt32) Description() string { return k.description }
-
-func (k *UInt32) Format(w io.Writer, buf []byte, l label.Label) {
- w.Write(strconv.AppendUint(buf, uint64(k.From(l)), 10))
-}
-
-// Of creates a new Label with this key and the supplied value.
-func (k *UInt32) Of(v uint32) label.Label { return label.Of64(k, uint64(v)) }
-
-// Get can be used to get a label for the key from a label.Map.
-func (k *UInt32) Get(lm label.Map) uint32 {
- if t := lm.Find(k); t.Valid() {
- return k.From(t)
- }
- return 0
-}
-
-// From can be used to get a value from a Label.
-func (k *UInt32) From(t label.Label) uint32 { return uint32(t.Unpack64()) }
-
-// UInt64 represents a key
-type UInt64 struct {
- name string
- description string
-}
-
-// NewUInt64 creates a new Key for uint64 values.
-func NewUInt64(name, description string) *UInt64 {
- return &UInt64{name: name, description: description}
-}
-
-func (k *UInt64) Name() string { return k.name }
-func (k *UInt64) Description() string { return k.description }
-
-func (k *UInt64) Format(w io.Writer, buf []byte, l label.Label) {
- w.Write(strconv.AppendUint(buf, k.From(l), 10))
-}
-
-// Of creates a new Label with this key and the supplied value.
-func (k *UInt64) Of(v uint64) label.Label { return label.Of64(k, v) }
-
-// Get can be used to get a label for the key from a label.Map.
-func (k *UInt64) Get(lm label.Map) uint64 {
- if t := lm.Find(k); t.Valid() {
- return k.From(t)
- }
- return 0
-}
-
-// From can be used to get a value from a Label.
-func (k *UInt64) From(t label.Label) uint64 { return t.Unpack64() }
-
-// Float32 represents a key
-type Float32 struct {
- name string
- description string
-}
-
-// NewFloat32 creates a new Key for float32 values.
-func NewFloat32(name, description string) *Float32 {
- return &Float32{name: name, description: description}
-}
-
-func (k *Float32) Name() string { return k.name }
-func (k *Float32) Description() string { return k.description }
-
-func (k *Float32) Format(w io.Writer, buf []byte, l label.Label) {
- w.Write(strconv.AppendFloat(buf, float64(k.From(l)), 'E', -1, 32))
-}
-
-// Of creates a new Label with this key and the supplied value.
-func (k *Float32) Of(v float32) label.Label {
- return label.Of64(k, uint64(math.Float32bits(v)))
-}
-
-// Get can be used to get a label for the key from a label.Map.
-func (k *Float32) Get(lm label.Map) float32 {
- if t := lm.Find(k); t.Valid() {
- return k.From(t)
- }
- return 0
-}
-
-// From can be used to get a value from a Label.
-func (k *Float32) From(t label.Label) float32 {
- return math.Float32frombits(uint32(t.Unpack64()))
-}
-
-// Float64 represents a key
-type Float64 struct {
- name string
- description string
-}
-
-// NewFloat64 creates a new Key for int64 values.
-func NewFloat64(name, description string) *Float64 {
- return &Float64{name: name, description: description}
-}
-
-func (k *Float64) Name() string { return k.name }
-func (k *Float64) Description() string { return k.description }
-
-func (k *Float64) Format(w io.Writer, buf []byte, l label.Label) {
- w.Write(strconv.AppendFloat(buf, k.From(l), 'E', -1, 64))
-}
-
-// Of creates a new Label with this key and the supplied value.
-func (k *Float64) Of(v float64) label.Label {
- return label.Of64(k, math.Float64bits(v))
-}
-
-// Get can be used to get a label for the key from a label.Map.
-func (k *Float64) Get(lm label.Map) float64 {
- if t := lm.Find(k); t.Valid() {
- return k.From(t)
- }
- return 0
-}
-
-// From can be used to get a value from a Label.
-func (k *Float64) From(t label.Label) float64 {
- return math.Float64frombits(t.Unpack64())
-}
-
-// String represents a key
-type String struct {
- name string
- description string
-}
-
-// NewString creates a new Key for int64 values.
-func NewString(name, description string) *String {
- return &String{name: name, description: description}
-}
-
-func (k *String) Name() string { return k.name }
-func (k *String) Description() string { return k.description }
-
-func (k *String) Format(w io.Writer, buf []byte, l label.Label) {
- w.Write(strconv.AppendQuote(buf, k.From(l)))
-}
-
-// Of creates a new Label with this key and the supplied value.
-func (k *String) Of(v string) label.Label { return label.OfString(k, v) }
-
-// Get can be used to get a label for the key from a label.Map.
-func (k *String) Get(lm label.Map) string {
- if t := lm.Find(k); t.Valid() {
- return k.From(t)
- }
- return ""
-}
-
-// From can be used to get a value from a Label.
-func (k *String) From(t label.Label) string { return t.UnpackString() }
-
-// Boolean represents a key
-type Boolean struct {
- name string
- description string
-}
-
-// NewBoolean creates a new Key for bool values.
-func NewBoolean(name, description string) *Boolean {
- return &Boolean{name: name, description: description}
-}
-
-func (k *Boolean) Name() string { return k.name }
-func (k *Boolean) Description() string { return k.description }
-
-func (k *Boolean) Format(w io.Writer, buf []byte, l label.Label) {
- w.Write(strconv.AppendBool(buf, k.From(l)))
-}
-
-// Of creates a new Label with this key and the supplied value.
-func (k *Boolean) Of(v bool) label.Label {
- if v {
- return label.Of64(k, 1)
- }
- return label.Of64(k, 0)
-}
-
-// Get can be used to get a label for the key from a label.Map.
-func (k *Boolean) Get(lm label.Map) bool {
- if t := lm.Find(k); t.Valid() {
- return k.From(t)
- }
- return false
-}
-
-// From can be used to get a value from a Label.
-func (k *Boolean) From(t label.Label) bool { return t.Unpack64() > 0 }
-
-// Error represents a key
-type Error struct {
- name string
- description string
-}
-
-// NewError creates a new Key for int64 values.
-func NewError(name, description string) *Error {
- return &Error{name: name, description: description}
-}
-
-func (k *Error) Name() string { return k.name }
-func (k *Error) Description() string { return k.description }
-
-func (k *Error) Format(w io.Writer, buf []byte, l label.Label) {
- io.WriteString(w, k.From(l).Error())
-}
-
-// Of creates a new Label with this key and the supplied value.
-func (k *Error) Of(v error) label.Label { return label.OfValue(k, v) }
-
-// Get can be used to get a label for the key from a label.Map.
-func (k *Error) Get(lm label.Map) error {
- if t := lm.Find(k); t.Valid() {
- return k.From(t)
- }
- return nil
-}
-
-// From can be used to get a value from a Label.
-func (k *Error) From(t label.Label) error {
- err, _ := t.UnpackValue().(error)
- return err
-}
diff --git a/vendor/golang.org/x/tools/internal/event/keys/standard.go b/vendor/golang.org/x/tools/internal/event/keys/standard.go
deleted file mode 100644
index 7e958665921..00000000000
--- a/vendor/golang.org/x/tools/internal/event/keys/standard.go
+++ /dev/null
@@ -1,22 +0,0 @@
-// Copyright 2020 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-package keys
-
-var (
- // Msg is a key used to add message strings to label lists.
- Msg = NewString("message", "a readable message")
- // Label is a key used to indicate an event adds labels to the context.
- Label = NewTag("label", "a label context marker")
- // Start is used for things like traces that have a name.
- Start = NewString("start", "span start")
- // Metric is a key used to indicate an event records metrics.
- End = NewTag("end", "a span end marker")
- // Metric is a key used to indicate an event records metrics.
- Detach = NewTag("detach", "a span detach marker")
- // Err is a key used to add error values to label lists.
- Err = NewError("error", "an error that occurred")
- // Metric is a key used to indicate an event records metrics.
- Metric = NewTag("metric", "a metric event marker")
-)
diff --git a/vendor/golang.org/x/tools/internal/event/keys/util.go b/vendor/golang.org/x/tools/internal/event/keys/util.go
deleted file mode 100644
index c0e8e731c90..00000000000
--- a/vendor/golang.org/x/tools/internal/event/keys/util.go
+++ /dev/null
@@ -1,21 +0,0 @@
-// Copyright 2023 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-package keys
-
-import (
- "sort"
- "strings"
-)
-
-// Join returns a canonical join of the keys in S:
-// a sorted comma-separated string list.
-func Join[S ~[]T, T ~string](s S) string {
- strs := make([]string, 0, len(s))
- for _, v := range s {
- strs = append(strs, string(v))
- }
- sort.Strings(strs)
- return strings.Join(strs, ",")
-}
diff --git a/vendor/golang.org/x/tools/internal/event/label/label.go b/vendor/golang.org/x/tools/internal/event/label/label.go
deleted file mode 100644
index 0f526e1f9ab..00000000000
--- a/vendor/golang.org/x/tools/internal/event/label/label.go
+++ /dev/null
@@ -1,215 +0,0 @@
-// Copyright 2019 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-package label
-
-import (
- "fmt"
- "io"
- "reflect"
- "unsafe"
-)
-
-// Key is used as the identity of a Label.
-// Keys are intended to be compared by pointer only, the name should be unique
-// for communicating with external systems, but it is not required or enforced.
-type Key interface {
- // Name returns the key name.
- Name() string
- // Description returns a string that can be used to describe the value.
- Description() string
-
- // Format is used in formatting to append the value of the label to the
- // supplied buffer.
- // The formatter may use the supplied buf as a scratch area to avoid
- // allocations.
- Format(w io.Writer, buf []byte, l Label)
-}
-
-// Label holds a key and value pair.
-// It is normally used when passing around lists of labels.
-type Label struct {
- key Key
- packed uint64
- untyped interface{}
-}
-
-// Map is the interface to a collection of Labels indexed by key.
-type Map interface {
- // Find returns the label that matches the supplied key.
- Find(key Key) Label
-}
-
-// List is the interface to something that provides an iterable
-// list of labels.
-// Iteration should start from 0 and continue until Valid returns false.
-type List interface {
- // Valid returns true if the index is within range for the list.
- // It does not imply the label at that index will itself be valid.
- Valid(index int) bool
- // Label returns the label at the given index.
- Label(index int) Label
-}
-
-// list implements LabelList for a list of Labels.
-type list struct {
- labels []Label
-}
-
-// filter wraps a LabelList filtering out specific labels.
-type filter struct {
- keys []Key
- underlying List
-}
-
-// listMap implements LabelMap for a simple list of labels.
-type listMap struct {
- labels []Label
-}
-
-// mapChain implements LabelMap for a list of underlying LabelMap.
-type mapChain struct {
- maps []Map
-}
-
-// OfValue creates a new label from the key and value.
-// This method is for implementing new key types, label creation should
-// normally be done with the Of method of the key.
-func OfValue(k Key, value interface{}) Label { return Label{key: k, untyped: value} }
-
-// UnpackValue assumes the label was built using LabelOfValue and returns the value
-// that was passed to that constructor.
-// This method is for implementing new key types, for type safety normal
-// access should be done with the From method of the key.
-func (t Label) UnpackValue() interface{} { return t.untyped }
-
-// Of64 creates a new label from a key and a uint64. This is often
-// used for non uint64 values that can be packed into a uint64.
-// This method is for implementing new key types, label creation should
-// normally be done with the Of method of the key.
-func Of64(k Key, v uint64) Label { return Label{key: k, packed: v} }
-
-// Unpack64 assumes the label was built using LabelOf64 and returns the value that
-// was passed to that constructor.
-// This method is for implementing new key types, for type safety normal
-// access should be done with the From method of the key.
-func (t Label) Unpack64() uint64 { return t.packed }
-
-type stringptr unsafe.Pointer
-
-// OfString creates a new label from a key and a string.
-// This method is for implementing new key types, label creation should
-// normally be done with the Of method of the key.
-func OfString(k Key, v string) Label {
- hdr := (*reflect.StringHeader)(unsafe.Pointer(&v))
- return Label{
- key: k,
- packed: uint64(hdr.Len),
- untyped: stringptr(hdr.Data),
- }
-}
-
-// UnpackString assumes the label was built using LabelOfString and returns the
-// value that was passed to that constructor.
-// This method is for implementing new key types, for type safety normal
-// access should be done with the From method of the key.
-func (t Label) UnpackString() string {
- var v string
- hdr := (*reflect.StringHeader)(unsafe.Pointer(&v))
- hdr.Data = uintptr(t.untyped.(stringptr))
- hdr.Len = int(t.packed)
- return v
-}
-
-// Valid returns true if the Label is a valid one (it has a key).
-func (t Label) Valid() bool { return t.key != nil }
-
-// Key returns the key of this Label.
-func (t Label) Key() Key { return t.key }
-
-// Format is used for debug printing of labels.
-func (t Label) Format(f fmt.State, r rune) {
- if !t.Valid() {
- io.WriteString(f, `nil`)
- return
- }
- io.WriteString(f, t.Key().Name())
- io.WriteString(f, "=")
- var buf [128]byte
- t.Key().Format(f, buf[:0], t)
-}
-
-func (l *list) Valid(index int) bool {
- return index >= 0 && index < len(l.labels)
-}
-
-func (l *list) Label(index int) Label {
- return l.labels[index]
-}
-
-func (f *filter) Valid(index int) bool {
- return f.underlying.Valid(index)
-}
-
-func (f *filter) Label(index int) Label {
- l := f.underlying.Label(index)
- for _, f := range f.keys {
- if l.Key() == f {
- return Label{}
- }
- }
- return l
-}
-
-func (lm listMap) Find(key Key) Label {
- for _, l := range lm.labels {
- if l.Key() == key {
- return l
- }
- }
- return Label{}
-}
-
-func (c mapChain) Find(key Key) Label {
- for _, src := range c.maps {
- l := src.Find(key)
- if l.Valid() {
- return l
- }
- }
- return Label{}
-}
-
-var emptyList = &list{}
-
-func NewList(labels ...Label) List {
- if len(labels) == 0 {
- return emptyList
- }
- return &list{labels: labels}
-}
-
-func Filter(l List, keys ...Key) List {
- if len(keys) == 0 {
- return l
- }
- return &filter{keys: keys, underlying: l}
-}
-
-func NewMap(labels ...Label) Map {
- return listMap{labels: labels}
-}
-
-func MergeMaps(srcs ...Map) Map {
- var nonNil []Map
- for _, src := range srcs {
- if src != nil {
- nonNil = append(nonNil, src)
- }
- }
- if len(nonNil) == 1 {
- return nonNil[0]
- }
- return mapChain{maps: nonNil}
-}
diff --git a/vendor/golang.org/x/tools/internal/gcimporter/bimport.go b/vendor/golang.org/x/tools/internal/gcimporter/bimport.go
deleted file mode 100644
index d79a605ed13..00000000000
--- a/vendor/golang.org/x/tools/internal/gcimporter/bimport.go
+++ /dev/null
@@ -1,89 +0,0 @@
-// Copyright 2015 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-// This file contains the remaining vestiges of
-// $GOROOT/src/go/internal/gcimporter/bimport.go.
-
-package gcimporter
-
-import (
- "fmt"
- "go/token"
- "go/types"
- "sync"
-)
-
-func errorf(format string, args ...interface{}) {
- panic(fmt.Sprintf(format, args...))
-}
-
-const deltaNewFile = -64 // see cmd/compile/internal/gc/bexport.go
-
-// Synthesize a token.Pos
-type fakeFileSet struct {
- fset *token.FileSet
- files map[string]*fileInfo
-}
-
-type fileInfo struct {
- file *token.File
- lastline int
-}
-
-const maxlines = 64 * 1024
-
-func (s *fakeFileSet) pos(file string, line, column int) token.Pos {
- // TODO(mdempsky): Make use of column.
-
- // Since we don't know the set of needed file positions, we reserve maxlines
- // positions per file. We delay calling token.File.SetLines until all
- // positions have been calculated (by way of fakeFileSet.setLines), so that
- // we can avoid setting unnecessary lines. See also golang/go#46586.
- f := s.files[file]
- if f == nil {
- f = &fileInfo{file: s.fset.AddFile(file, -1, maxlines)}
- s.files[file] = f
- }
- if line > maxlines {
- line = 1
- }
- if line > f.lastline {
- f.lastline = line
- }
-
- // Return a fake position assuming that f.file consists only of newlines.
- return token.Pos(f.file.Base() + line - 1)
-}
-
-func (s *fakeFileSet) setLines() {
- fakeLinesOnce.Do(func() {
- fakeLines = make([]int, maxlines)
- for i := range fakeLines {
- fakeLines[i] = i
- }
- })
- for _, f := range s.files {
- f.file.SetLines(fakeLines[:f.lastline])
- }
-}
-
-var (
- fakeLines []int
- fakeLinesOnce sync.Once
-)
-
-func chanDir(d int) types.ChanDir {
- // tag values must match the constants in cmd/compile/internal/gc/go.go
- switch d {
- case 1 /* Crecv */ :
- return types.RecvOnly
- case 2 /* Csend */ :
- return types.SendOnly
- case 3 /* Cboth */ :
- return types.SendRecv
- default:
- errorf("unexpected channel dir %d", d)
- return 0
- }
-}
diff --git a/vendor/golang.org/x/tools/internal/gcimporter/exportdata.go b/vendor/golang.org/x/tools/internal/gcimporter/exportdata.go
deleted file mode 100644
index f6437feb1cf..00000000000
--- a/vendor/golang.org/x/tools/internal/gcimporter/exportdata.go
+++ /dev/null
@@ -1,99 +0,0 @@
-// Copyright 2011 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-// This file is a copy of $GOROOT/src/go/internal/gcimporter/exportdata.go.
-
-// This file implements FindExportData.
-
-package gcimporter
-
-import (
- "bufio"
- "fmt"
- "io"
- "strconv"
- "strings"
-)
-
-func readGopackHeader(r *bufio.Reader) (name string, size int64, err error) {
- // See $GOROOT/include/ar.h.
- hdr := make([]byte, 16+12+6+6+8+10+2)
- _, err = io.ReadFull(r, hdr)
- if err != nil {
- return
- }
- // leave for debugging
- if false {
- fmt.Printf("header: %s", hdr)
- }
- s := strings.TrimSpace(string(hdr[16+12+6+6+8:][:10]))
- length, err := strconv.Atoi(s)
- size = int64(length)
- if err != nil || hdr[len(hdr)-2] != '`' || hdr[len(hdr)-1] != '\n' {
- err = fmt.Errorf("invalid archive header")
- return
- }
- name = strings.TrimSpace(string(hdr[:16]))
- return
-}
-
-// FindExportData positions the reader r at the beginning of the
-// export data section of an underlying GC-created object/archive
-// file by reading from it. The reader must be positioned at the
-// start of the file before calling this function. The hdr result
-// is the string before the export data, either "$$" or "$$B".
-// The size result is the length of the export data in bytes, or -1 if not known.
-func FindExportData(r *bufio.Reader) (hdr string, size int64, err error) {
- // Read first line to make sure this is an object file.
- line, err := r.ReadSlice('\n')
- if err != nil {
- err = fmt.Errorf("can't find export data (%v)", err)
- return
- }
-
- if string(line) == "!\n" {
- // Archive file. Scan to __.PKGDEF.
- var name string
- if name, size, err = readGopackHeader(r); err != nil {
- return
- }
-
- // First entry should be __.PKGDEF.
- if name != "__.PKGDEF" {
- err = fmt.Errorf("go archive is missing __.PKGDEF")
- return
- }
-
- // Read first line of __.PKGDEF data, so that line
- // is once again the first line of the input.
- if line, err = r.ReadSlice('\n'); err != nil {
- err = fmt.Errorf("can't find export data (%v)", err)
- return
- }
- size -= int64(len(line))
- }
-
- // Now at __.PKGDEF in archive or still at beginning of file.
- // Either way, line should begin with "go object ".
- if !strings.HasPrefix(string(line), "go object ") {
- err = fmt.Errorf("not a Go object file")
- return
- }
-
- // Skip over object header to export data.
- // Begins after first line starting with $$.
- for line[0] != '$' {
- if line, err = r.ReadSlice('\n'); err != nil {
- err = fmt.Errorf("can't find export data (%v)", err)
- return
- }
- size -= int64(len(line))
- }
- hdr = string(line)
- if size < 0 {
- size = -1
- }
-
- return
-}
diff --git a/vendor/golang.org/x/tools/internal/gcimporter/gcimporter.go b/vendor/golang.org/x/tools/internal/gcimporter/gcimporter.go
deleted file mode 100644
index e6c5d51f8e5..00000000000
--- a/vendor/golang.org/x/tools/internal/gcimporter/gcimporter.go
+++ /dev/null
@@ -1,271 +0,0 @@
-// Copyright 2011 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-// This file is a reduced copy of $GOROOT/src/go/internal/gcimporter/gcimporter.go.
-
-// Package gcimporter provides various functions for reading
-// gc-generated object files that can be used to implement the
-// Importer interface defined by the Go 1.5 standard library package.
-//
-// The encoding is deterministic: if the encoder is applied twice to
-// the same types.Package data structure, both encodings are equal.
-// This property may be important to avoid spurious changes in
-// applications such as build systems.
-//
-// However, the encoder is not necessarily idempotent. Importing an
-// exported package may yield a types.Package that, while it
-// represents the same set of Go types as the original, may differ in
-// the details of its internal representation. Because of these
-// differences, re-encoding the imported package may yield a
-// different, but equally valid, encoding of the package.
-package gcimporter // import "golang.org/x/tools/internal/gcimporter"
-
-import (
- "bufio"
- "bytes"
- "fmt"
- "go/build"
- "go/token"
- "go/types"
- "io"
- "os"
- "os/exec"
- "path/filepath"
- "strings"
- "sync"
-)
-
-const (
- // Enable debug during development: it adds some additional checks, and
- // prevents errors from being recovered.
- debug = false
-
- // If trace is set, debugging output is printed to std out.
- trace = false
-)
-
-var exportMap sync.Map // package dir → func() (string, bool)
-
-// lookupGorootExport returns the location of the export data
-// (normally found in the build cache, but located in GOROOT/pkg
-// in prior Go releases) for the package located in pkgDir.
-//
-// (We use the package's directory instead of its import path
-// mainly to simplify handling of the packages in src/vendor
-// and cmd/vendor.)
-func lookupGorootExport(pkgDir string) (string, bool) {
- f, ok := exportMap.Load(pkgDir)
- if !ok {
- var (
- listOnce sync.Once
- exportPath string
- )
- f, _ = exportMap.LoadOrStore(pkgDir, func() (string, bool) {
- listOnce.Do(func() {
- cmd := exec.Command("go", "list", "-export", "-f", "{{.Export}}", pkgDir)
- cmd.Dir = build.Default.GOROOT
- var output []byte
- output, err := cmd.Output()
- if err != nil {
- return
- }
-
- exports := strings.Split(string(bytes.TrimSpace(output)), "\n")
- if len(exports) != 1 {
- return
- }
-
- exportPath = exports[0]
- })
-
- return exportPath, exportPath != ""
- })
- }
-
- return f.(func() (string, bool))()
-}
-
-var pkgExts = [...]string{".a", ".o"}
-
-// FindPkg returns the filename and unique package id for an import
-// path based on package information provided by build.Import (using
-// the build.Default build.Context). A relative srcDir is interpreted
-// relative to the current working directory.
-// If no file was found, an empty filename is returned.
-func FindPkg(path, srcDir string) (filename, id string) {
- if path == "" {
- return
- }
-
- var noext string
- switch {
- default:
- // "x" -> "$GOPATH/pkg/$GOOS_$GOARCH/x.ext", "x"
- // Don't require the source files to be present.
- if abs, err := filepath.Abs(srcDir); err == nil { // see issue 14282
- srcDir = abs
- }
- bp, _ := build.Import(path, srcDir, build.FindOnly|build.AllowBinary)
- if bp.PkgObj == "" {
- var ok bool
- if bp.Goroot && bp.Dir != "" {
- filename, ok = lookupGorootExport(bp.Dir)
- }
- if !ok {
- id = path // make sure we have an id to print in error message
- return
- }
- } else {
- noext = strings.TrimSuffix(bp.PkgObj, ".a")
- id = bp.ImportPath
- }
-
- case build.IsLocalImport(path):
- // "./x" -> "/this/directory/x.ext", "/this/directory/x"
- noext = filepath.Join(srcDir, path)
- id = noext
-
- case filepath.IsAbs(path):
- // for completeness only - go/build.Import
- // does not support absolute imports
- // "/x" -> "/x.ext", "/x"
- noext = path
- id = path
- }
-
- if false { // for debugging
- if path != id {
- fmt.Printf("%s -> %s\n", path, id)
- }
- }
-
- if filename != "" {
- if f, err := os.Stat(filename); err == nil && !f.IsDir() {
- return
- }
- }
-
- // try extensions
- for _, ext := range pkgExts {
- filename = noext + ext
- if f, err := os.Stat(filename); err == nil && !f.IsDir() {
- return
- }
- }
-
- filename = "" // not found
- return
-}
-
-// Import imports a gc-generated package given its import path and srcDir, adds
-// the corresponding package object to the packages map, and returns the object.
-// The packages map must contain all packages already imported.
-func Import(packages map[string]*types.Package, path, srcDir string, lookup func(path string) (io.ReadCloser, error)) (pkg *types.Package, err error) {
- var rc io.ReadCloser
- var filename, id string
- if lookup != nil {
- // With custom lookup specified, assume that caller has
- // converted path to a canonical import path for use in the map.
- if path == "unsafe" {
- return types.Unsafe, nil
- }
- id = path
-
- // No need to re-import if the package was imported completely before.
- if pkg = packages[id]; pkg != nil && pkg.Complete() {
- return
- }
- f, err := lookup(path)
- if err != nil {
- return nil, err
- }
- rc = f
- } else {
- filename, id = FindPkg(path, srcDir)
- if filename == "" {
- if path == "unsafe" {
- return types.Unsafe, nil
- }
- return nil, fmt.Errorf("can't find import: %q", id)
- }
-
- // no need to re-import if the package was imported completely before
- if pkg = packages[id]; pkg != nil && pkg.Complete() {
- return
- }
-
- // open file
- f, err := os.Open(filename)
- if err != nil {
- return nil, err
- }
- defer func() {
- if err != nil {
- // add file name to error
- err = fmt.Errorf("%s: %v", filename, err)
- }
- }()
- rc = f
- }
- defer rc.Close()
-
- var hdr string
- var size int64
- buf := bufio.NewReader(rc)
- if hdr, size, err = FindExportData(buf); err != nil {
- return
- }
-
- switch hdr {
- case "$$B\n":
- var data []byte
- data, err = io.ReadAll(buf)
- if err != nil {
- break
- }
-
- // TODO(gri): allow clients of go/importer to provide a FileSet.
- // Or, define a new standard go/types/gcexportdata package.
- fset := token.NewFileSet()
-
- // Select appropriate importer.
- if len(data) > 0 {
- switch data[0] {
- case 'v', 'c', 'd':
- // binary: emitted by cmd/compile till go1.10; obsolete.
- return nil, fmt.Errorf("binary (%c) import format is no longer supported", data[0])
-
- case 'i':
- // indexed: emitted by cmd/compile till go1.19;
- // now used only for serializing go/types.
- // See https://github.com/golang/go/issues/69491.
- _, pkg, err := IImportData(fset, packages, data[1:], id)
- return pkg, err
-
- case 'u':
- // unified: emitted by cmd/compile since go1.20.
- _, pkg, err := UImportData(fset, packages, data[1:size], id)
- return pkg, err
-
- default:
- l := len(data)
- if l > 10 {
- l = 10
- }
- return nil, fmt.Errorf("unexpected export data with prefix %q for path %s", string(data[:l]), id)
- }
- }
-
- default:
- err = fmt.Errorf("unknown export data header: %q", hdr)
- }
-
- return
-}
-
-type byPath []*types.Package
-
-func (a byPath) Len() int { return len(a) }
-func (a byPath) Swap(i, j int) { a[i], a[j] = a[j], a[i] }
-func (a byPath) Less(i, j int) bool { return a[i].Path() < a[j].Path() }
diff --git a/vendor/golang.org/x/tools/internal/gcimporter/iexport.go b/vendor/golang.org/x/tools/internal/gcimporter/iexport.go
deleted file mode 100644
index 1e19fbed8e7..00000000000
--- a/vendor/golang.org/x/tools/internal/gcimporter/iexport.go
+++ /dev/null
@@ -1,1568 +0,0 @@
-// Copyright 2019 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-// Indexed package export.
-//
-// The indexed export data format is an evolution of the previous
-// binary export data format. Its chief contribution is introducing an
-// index table, which allows efficient random access of individual
-// declarations and inline function bodies. In turn, this allows
-// avoiding unnecessary work for compilation units that import large
-// packages.
-//
-//
-// The top-level data format is structured as:
-//
-// Header struct {
-// Tag byte // 'i'
-// Version uvarint
-// StringSize uvarint
-// DataSize uvarint
-// }
-//
-// Strings [StringSize]byte
-// Data [DataSize]byte
-//
-// MainIndex []struct{
-// PkgPath stringOff
-// PkgName stringOff
-// PkgHeight uvarint
-//
-// Decls []struct{
-// Name stringOff
-// Offset declOff
-// }
-// }
-//
-// Fingerprint [8]byte
-//
-// uvarint means a uint64 written out using uvarint encoding.
-//
-// []T means a uvarint followed by that many T objects. In other
-// words:
-//
-// Len uvarint
-// Elems [Len]T
-//
-// stringOff means a uvarint that indicates an offset within the
-// Strings section. At that offset is another uvarint, followed by
-// that many bytes, which form the string value.
-//
-// declOff means a uvarint that indicates an offset within the Data
-// section where the associated declaration can be found.
-//
-//
-// There are five kinds of declarations, distinguished by their first
-// byte:
-//
-// type Var struct {
-// Tag byte // 'V'
-// Pos Pos
-// Type typeOff
-// }
-//
-// type Func struct {
-// Tag byte // 'F' or 'G'
-// Pos Pos
-// TypeParams []typeOff // only present if Tag == 'G'
-// Signature Signature
-// }
-//
-// type Const struct {
-// Tag byte // 'C'
-// Pos Pos
-// Value Value
-// }
-//
-// type Type struct {
-// Tag byte // 'T' or 'U'
-// Pos Pos
-// TypeParams []typeOff // only present if Tag == 'U'
-// Underlying typeOff
-//
-// Methods []struct{ // omitted if Underlying is an interface type
-// Pos Pos
-// Name stringOff
-// Recv Param
-// Signature Signature
-// }
-// }
-//
-// type Alias struct {
-// Tag byte // 'A' or 'B'
-// Pos Pos
-// TypeParams []typeOff // only present if Tag == 'B'
-// Type typeOff
-// }
-//
-// // "Automatic" declaration of each typeparam
-// type TypeParam struct {
-// Tag byte // 'P'
-// Pos Pos
-// Implicit bool
-// Constraint typeOff
-// }
-//
-// typeOff means a uvarint that either indicates a predeclared type,
-// or an offset into the Data section. If the uvarint is less than
-// predeclReserved, then it indicates the index into the predeclared
-// types list (see predeclared in bexport.go for order). Otherwise,
-// subtracting predeclReserved yields the offset of a type descriptor.
-//
-// Value means a type, kind, and type-specific value. See
-// (*exportWriter).value for details.
-//
-//
-// There are twelve kinds of type descriptors, distinguished by an itag:
-//
-// type DefinedType struct {
-// Tag itag // definedType
-// Name stringOff
-// PkgPath stringOff
-// }
-//
-// type PointerType struct {
-// Tag itag // pointerType
-// Elem typeOff
-// }
-//
-// type SliceType struct {
-// Tag itag // sliceType
-// Elem typeOff
-// }
-//
-// type ArrayType struct {
-// Tag itag // arrayType
-// Len uint64
-// Elem typeOff
-// }
-//
-// type ChanType struct {
-// Tag itag // chanType
-// Dir uint64 // 1 RecvOnly; 2 SendOnly; 3 SendRecv
-// Elem typeOff
-// }
-//
-// type MapType struct {
-// Tag itag // mapType
-// Key typeOff
-// Elem typeOff
-// }
-//
-// type FuncType struct {
-// Tag itag // signatureType
-// PkgPath stringOff
-// Signature Signature
-// }
-//
-// type StructType struct {
-// Tag itag // structType
-// PkgPath stringOff
-// Fields []struct {
-// Pos Pos
-// Name stringOff
-// Type typeOff
-// Embedded bool
-// Note stringOff
-// }
-// }
-//
-// type InterfaceType struct {
-// Tag itag // interfaceType
-// PkgPath stringOff
-// Embeddeds []struct {
-// Pos Pos
-// Type typeOff
-// }
-// Methods []struct {
-// Pos Pos
-// Name stringOff
-// Signature Signature
-// }
-// }
-//
-// // Reference to a type param declaration
-// type TypeParamType struct {
-// Tag itag // typeParamType
-// Name stringOff
-// PkgPath stringOff
-// }
-//
-// // Instantiation of a generic type (like List[T2] or List[int])
-// type InstanceType struct {
-// Tag itag // instanceType
-// Pos pos
-// TypeArgs []typeOff
-// BaseType typeOff
-// }
-//
-// type UnionType struct {
-// Tag itag // interfaceType
-// Terms []struct {
-// tilde bool
-// Type typeOff
-// }
-// }
-//
-//
-//
-// type Signature struct {
-// Params []Param
-// Results []Param
-// Variadic bool // omitted if Results is empty
-// }
-//
-// type Param struct {
-// Pos Pos
-// Name stringOff
-// Type typOff
-// }
-//
-//
-// Pos encodes a file:line:column triple, incorporating a simple delta
-// encoding scheme within a data object. See exportWriter.pos for
-// details.
-
-package gcimporter
-
-import (
- "bytes"
- "encoding/binary"
- "fmt"
- "go/constant"
- "go/token"
- "go/types"
- "io"
- "math/big"
- "reflect"
- "sort"
- "strconv"
- "strings"
-
- "golang.org/x/tools/go/types/objectpath"
- "golang.org/x/tools/internal/aliases"
-)
-
-// IExportShallow encodes "shallow" export data for the specified package.
-//
-// No promises are made about the encoding other than that it can be decoded by
-// the same version of IIExportShallow. If you plan to save export data in the
-// file system, be sure to include a cryptographic digest of the executable in
-// the key to avoid version skew.
-//
-// If the provided reportf func is non-nil, it will be used for reporting bugs
-// encountered during export.
-// TODO(rfindley): remove reportf when we are confident enough in the new
-// objectpath encoding.
-func IExportShallow(fset *token.FileSet, pkg *types.Package, reportf ReportFunc) ([]byte, error) {
- // In principle this operation can only fail if out.Write fails,
- // but that's impossible for bytes.Buffer---and as a matter of
- // fact iexportCommon doesn't even check for I/O errors.
- // TODO(adonovan): handle I/O errors properly.
- // TODO(adonovan): use byte slices throughout, avoiding copying.
- const bundle, shallow = false, true
- var out bytes.Buffer
- err := iexportCommon(&out, fset, bundle, shallow, iexportVersion, []*types.Package{pkg})
- return out.Bytes(), err
-}
-
-// IImportShallow decodes "shallow" types.Package data encoded by
-// IExportShallow in the same executable. This function cannot import data from
-// cmd/compile or gcexportdata.Write.
-//
-// The importer calls getPackages to obtain package symbols for all
-// packages mentioned in the export data, including the one being
-// decoded.
-//
-// If the provided reportf func is non-nil, it will be used for reporting bugs
-// encountered during import.
-// TODO(rfindley): remove reportf when we are confident enough in the new
-// objectpath encoding.
-func IImportShallow(fset *token.FileSet, getPackages GetPackagesFunc, data []byte, path string, reportf ReportFunc) (*types.Package, error) {
- const bundle = false
- const shallow = true
- pkgs, err := iimportCommon(fset, getPackages, data, bundle, path, shallow, reportf)
- if err != nil {
- return nil, err
- }
- return pkgs[0], nil
-}
-
-// ReportFunc is the type of a function used to report formatted bugs.
-type ReportFunc = func(string, ...interface{})
-
-// Current bundled export format version. Increase with each format change.
-// 0: initial implementation
-const bundleVersion = 0
-
-// IExportData writes indexed export data for pkg to out.
-//
-// If no file set is provided, position info will be missing.
-// The package path of the top-level package will not be recorded,
-// so that calls to IImportData can override with a provided package path.
-func IExportData(out io.Writer, fset *token.FileSet, pkg *types.Package) error {
- const bundle, shallow = false, false
- return iexportCommon(out, fset, bundle, shallow, iexportVersion, []*types.Package{pkg})
-}
-
-// IExportBundle writes an indexed export bundle for pkgs to out.
-func IExportBundle(out io.Writer, fset *token.FileSet, pkgs []*types.Package) error {
- const bundle, shallow = true, false
- return iexportCommon(out, fset, bundle, shallow, iexportVersion, pkgs)
-}
-
-func iexportCommon(out io.Writer, fset *token.FileSet, bundle, shallow bool, version int, pkgs []*types.Package) (err error) {
- if !debug {
- defer func() {
- if e := recover(); e != nil {
- if ierr, ok := e.(internalError); ok {
- err = ierr
- return
- }
- // Not an internal error; panic again.
- panic(e)
- }
- }()
- }
-
- p := iexporter{
- fset: fset,
- version: version,
- shallow: shallow,
- allPkgs: map[*types.Package]bool{},
- stringIndex: map[string]uint64{},
- declIndex: map[types.Object]uint64{},
- tparamNames: map[types.Object]string{},
- typIndex: map[types.Type]uint64{},
- }
- if !bundle {
- p.localpkg = pkgs[0]
- }
-
- for i, pt := range predeclared() {
- p.typIndex[pt] = uint64(i)
- }
- if len(p.typIndex) > predeclReserved {
- panic(internalErrorf("too many predeclared types: %d > %d", len(p.typIndex), predeclReserved))
- }
-
- // Initialize work queue with exported declarations.
- for _, pkg := range pkgs {
- scope := pkg.Scope()
- for _, name := range scope.Names() {
- if token.IsExported(name) {
- p.pushDecl(scope.Lookup(name))
- }
- }
-
- if bundle {
- // Ensure pkg and its imports are included in the index.
- p.allPkgs[pkg] = true
- for _, imp := range pkg.Imports() {
- p.allPkgs[imp] = true
- }
- }
- }
-
- // Loop until no more work.
- for !p.declTodo.empty() {
- p.doDecl(p.declTodo.popHead())
- }
-
- // Produce index of offset of each file record in files.
- var files intWriter
- var fileOffset []uint64 // fileOffset[i] is offset in files of file encoded as i
- if p.shallow {
- fileOffset = make([]uint64, len(p.fileInfos))
- for i, info := range p.fileInfos {
- fileOffset[i] = uint64(files.Len())
- p.encodeFile(&files, info.file, info.needed)
- }
- }
-
- // Append indices to data0 section.
- dataLen := uint64(p.data0.Len())
- w := p.newWriter()
- w.writeIndex(p.declIndex)
-
- if bundle {
- w.uint64(uint64(len(pkgs)))
- for _, pkg := range pkgs {
- w.pkg(pkg)
- imps := pkg.Imports()
- w.uint64(uint64(len(imps)))
- for _, imp := range imps {
- w.pkg(imp)
- }
- }
- }
- w.flush()
-
- // Assemble header.
- var hdr intWriter
- if bundle {
- hdr.uint64(bundleVersion)
- }
- hdr.uint64(uint64(p.version))
- hdr.uint64(uint64(p.strings.Len()))
- if p.shallow {
- hdr.uint64(uint64(files.Len()))
- hdr.uint64(uint64(len(fileOffset)))
- for _, offset := range fileOffset {
- hdr.uint64(offset)
- }
- }
- hdr.uint64(dataLen)
-
- // Flush output.
- io.Copy(out, &hdr)
- io.Copy(out, &p.strings)
- if p.shallow {
- io.Copy(out, &files)
- }
- io.Copy(out, &p.data0)
-
- return nil
-}
-
-// encodeFile writes to w a representation of the file sufficient to
-// faithfully restore position information about all needed offsets.
-// Mutates the needed array.
-func (p *iexporter) encodeFile(w *intWriter, file *token.File, needed []uint64) {
- _ = needed[0] // precondition: needed is non-empty
-
- w.uint64(p.stringOff(file.Name()))
-
- size := uint64(file.Size())
- w.uint64(size)
-
- // Sort the set of needed offsets. Duplicates are harmless.
- sort.Slice(needed, func(i, j int) bool { return needed[i] < needed[j] })
-
- lines := file.Lines() // byte offset of each line start
- w.uint64(uint64(len(lines)))
-
- // Rather than record the entire array of line start offsets,
- // we save only a sparse list of (index, offset) pairs for
- // the start of each line that contains a needed position.
- var sparse [][2]int // (index, offset) pairs
-outer:
- for i, lineStart := range lines {
- lineEnd := size
- if i < len(lines)-1 {
- lineEnd = uint64(lines[i+1])
- }
- // Does this line contains a needed offset?
- if needed[0] < lineEnd {
- sparse = append(sparse, [2]int{i, lineStart})
- for needed[0] < lineEnd {
- needed = needed[1:]
- if len(needed) == 0 {
- break outer
- }
- }
- }
- }
-
- // Delta-encode the columns.
- w.uint64(uint64(len(sparse)))
- var prev [2]int
- for _, pair := range sparse {
- w.uint64(uint64(pair[0] - prev[0]))
- w.uint64(uint64(pair[1] - prev[1]))
- prev = pair
- }
-}
-
-// writeIndex writes out an object index. mainIndex indicates whether
-// we're writing out the main index, which is also read by
-// non-compiler tools and includes a complete package description
-// (i.e., name and height).
-func (w *exportWriter) writeIndex(index map[types.Object]uint64) {
- type pkgObj struct {
- obj types.Object
- name string // qualified name; differs from obj.Name for type params
- }
- // Build a map from packages to objects from that package.
- pkgObjs := map[*types.Package][]pkgObj{}
-
- // For the main index, make sure to include every package that
- // we reference, even if we're not exporting (or reexporting)
- // any symbols from it.
- if w.p.localpkg != nil {
- pkgObjs[w.p.localpkg] = nil
- }
- for pkg := range w.p.allPkgs {
- pkgObjs[pkg] = nil
- }
-
- for obj := range index {
- name := w.p.exportName(obj)
- pkgObjs[obj.Pkg()] = append(pkgObjs[obj.Pkg()], pkgObj{obj, name})
- }
-
- var pkgs []*types.Package
- for pkg, objs := range pkgObjs {
- pkgs = append(pkgs, pkg)
-
- sort.Slice(objs, func(i, j int) bool {
- return objs[i].name < objs[j].name
- })
- }
-
- sort.Slice(pkgs, func(i, j int) bool {
- return w.exportPath(pkgs[i]) < w.exportPath(pkgs[j])
- })
-
- w.uint64(uint64(len(pkgs)))
- for _, pkg := range pkgs {
- w.string(w.exportPath(pkg))
- w.string(pkg.Name())
- w.uint64(uint64(0)) // package height is not needed for go/types
-
- objs := pkgObjs[pkg]
- w.uint64(uint64(len(objs)))
- for _, obj := range objs {
- w.string(obj.name)
- w.uint64(index[obj.obj])
- }
- }
-}
-
-// exportName returns the 'exported' name of an object. It differs from
-// obj.Name() only for type parameters (see tparamExportName for details).
-func (p *iexporter) exportName(obj types.Object) (res string) {
- if name := p.tparamNames[obj]; name != "" {
- return name
- }
- return obj.Name()
-}
-
-type iexporter struct {
- fset *token.FileSet
- out *bytes.Buffer
- version int
-
- shallow bool // don't put types from other packages in the index
- objEncoder *objectpath.Encoder // encodes objects from other packages in shallow mode; lazily allocated
- localpkg *types.Package // (nil in bundle mode)
-
- // allPkgs tracks all packages that have been referenced by
- // the export data, so we can ensure to include them in the
- // main index.
- allPkgs map[*types.Package]bool
-
- declTodo objQueue
-
- strings intWriter
- stringIndex map[string]uint64
-
- // In shallow mode, object positions are encoded as (file, offset).
- // Each file is recorded as a line-number table.
- // Only the lines of needed positions are saved faithfully.
- fileInfo map[*token.File]uint64 // value is index in fileInfos
- fileInfos []*filePositions
-
- data0 intWriter
- declIndex map[types.Object]uint64
- tparamNames map[types.Object]string // typeparam->exported name
- typIndex map[types.Type]uint64
-
- indent int // for tracing support
-}
-
-type filePositions struct {
- file *token.File
- needed []uint64 // unordered list of needed file offsets
-}
-
-func (p *iexporter) trace(format string, args ...interface{}) {
- if !trace {
- // Call sites should also be guarded, but having this check here allows
- // easily enabling/disabling debug trace statements.
- return
- }
- fmt.Printf(strings.Repeat("..", p.indent)+format+"\n", args...)
-}
-
-// objectpathEncoder returns the lazily allocated objectpath.Encoder to use
-// when encoding objects in other packages during shallow export.
-//
-// Using a shared Encoder amortizes some of cost of objectpath search.
-func (p *iexporter) objectpathEncoder() *objectpath.Encoder {
- if p.objEncoder == nil {
- p.objEncoder = new(objectpath.Encoder)
- }
- return p.objEncoder
-}
-
-// stringOff returns the offset of s within the string section.
-// If not already present, it's added to the end.
-func (p *iexporter) stringOff(s string) uint64 {
- off, ok := p.stringIndex[s]
- if !ok {
- off = uint64(p.strings.Len())
- p.stringIndex[s] = off
-
- p.strings.uint64(uint64(len(s)))
- p.strings.WriteString(s)
- }
- return off
-}
-
-// fileIndexAndOffset returns the index of the token.File and the byte offset of pos within it.
-func (p *iexporter) fileIndexAndOffset(file *token.File, pos token.Pos) (uint64, uint64) {
- index, ok := p.fileInfo[file]
- if !ok {
- index = uint64(len(p.fileInfo))
- p.fileInfos = append(p.fileInfos, &filePositions{file: file})
- if p.fileInfo == nil {
- p.fileInfo = make(map[*token.File]uint64)
- }
- p.fileInfo[file] = index
- }
- // Record each needed offset.
- info := p.fileInfos[index]
- offset := uint64(file.Offset(pos))
- info.needed = append(info.needed, offset)
-
- return index, offset
-}
-
-// pushDecl adds n to the declaration work queue, if not already present.
-func (p *iexporter) pushDecl(obj types.Object) {
- // Package unsafe is known to the compiler and predeclared.
- // Caller should not ask us to do export it.
- if obj.Pkg() == types.Unsafe {
- panic("cannot export package unsafe")
- }
-
- // Shallow export data: don't index decls from other packages.
- if p.shallow && obj.Pkg() != p.localpkg {
- return
- }
-
- if _, ok := p.declIndex[obj]; ok {
- return
- }
-
- p.declIndex[obj] = ^uint64(0) // mark obj present in work queue
- p.declTodo.pushTail(obj)
-}
-
-// exportWriter handles writing out individual data section chunks.
-type exportWriter struct {
- p *iexporter
-
- data intWriter
- prevFile string
- prevLine int64
- prevColumn int64
-}
-
-func (w *exportWriter) exportPath(pkg *types.Package) string {
- if pkg == w.p.localpkg {
- return ""
- }
- return pkg.Path()
-}
-
-func (p *iexporter) doDecl(obj types.Object) {
- if trace {
- p.trace("exporting decl %v (%T)", obj, obj)
- p.indent++
- defer func() {
- p.indent--
- p.trace("=> %s", obj)
- }()
- }
- w := p.newWriter()
-
- switch obj := obj.(type) {
- case *types.Var:
- w.tag(varTag)
- w.pos(obj.Pos())
- w.typ(obj.Type(), obj.Pkg())
-
- case *types.Func:
- sig, _ := obj.Type().(*types.Signature)
- if sig.Recv() != nil {
- // We shouldn't see methods in the package scope,
- // but the type checker may repair "func () F() {}"
- // to "func (Invalid) F()" and then treat it like "func F()",
- // so allow that. See golang/go#57729.
- if sig.Recv().Type() != types.Typ[types.Invalid] {
- panic(internalErrorf("unexpected method: %v", sig))
- }
- }
-
- // Function.
- if sig.TypeParams().Len() == 0 {
- w.tag(funcTag)
- } else {
- w.tag(genericFuncTag)
- }
- w.pos(obj.Pos())
- // The tparam list of the function type is the declaration of the type
- // params. So, write out the type params right now. Then those type params
- // will be referenced via their type offset (via typOff) in all other
- // places in the signature and function where they are used.
- //
- // While importing the type parameters, tparamList computes and records
- // their export name, so that it can be later used when writing the index.
- if tparams := sig.TypeParams(); tparams.Len() > 0 {
- w.tparamList(obj.Name(), tparams, obj.Pkg())
- }
- w.signature(sig)
-
- case *types.Const:
- w.tag(constTag)
- w.pos(obj.Pos())
- w.value(obj.Type(), obj.Val())
-
- case *types.TypeName:
- t := obj.Type()
-
- if tparam, ok := types.Unalias(t).(*types.TypeParam); ok {
- w.tag(typeParamTag)
- w.pos(obj.Pos())
- constraint := tparam.Constraint()
- if p.version >= iexportVersionGo1_18 {
- implicit := false
- if iface, _ := types.Unalias(constraint).(*types.Interface); iface != nil {
- implicit = iface.IsImplicit()
- }
- w.bool(implicit)
- }
- w.typ(constraint, obj.Pkg())
- break
- }
-
- if obj.IsAlias() {
- alias, materialized := t.(*types.Alias) // may fail when aliases are not enabled
-
- var tparams *types.TypeParamList
- if materialized {
- tparams = aliases.TypeParams(alias)
- }
- if tparams.Len() == 0 {
- w.tag(aliasTag)
- } else {
- w.tag(genericAliasTag)
- }
- w.pos(obj.Pos())
- if tparams.Len() > 0 {
- w.tparamList(obj.Name(), tparams, obj.Pkg())
- }
- if materialized {
- // Preserve materialized aliases,
- // even of non-exported types.
- t = aliases.Rhs(alias)
- }
- w.typ(t, obj.Pkg())
- break
- }
-
- // Defined type.
- named, ok := t.(*types.Named)
- if !ok {
- panic(internalErrorf("%s is not a defined type", t))
- }
-
- if named.TypeParams().Len() == 0 {
- w.tag(typeTag)
- } else {
- w.tag(genericTypeTag)
- }
- w.pos(obj.Pos())
-
- if named.TypeParams().Len() > 0 {
- // While importing the type parameters, tparamList computes and records
- // their export name, so that it can be later used when writing the index.
- w.tparamList(obj.Name(), named.TypeParams(), obj.Pkg())
- }
-
- underlying := named.Underlying()
- w.typ(underlying, obj.Pkg())
-
- if types.IsInterface(t) {
- break
- }
-
- n := named.NumMethods()
- w.uint64(uint64(n))
- for i := 0; i < n; i++ {
- m := named.Method(i)
- w.pos(m.Pos())
- w.string(m.Name())
- sig, _ := m.Type().(*types.Signature)
-
- // Receiver type parameters are type arguments of the receiver type, so
- // their name must be qualified before exporting recv.
- if rparams := sig.RecvTypeParams(); rparams.Len() > 0 {
- prefix := obj.Name() + "." + m.Name()
- for i := 0; i < rparams.Len(); i++ {
- rparam := rparams.At(i)
- name := tparamExportName(prefix, rparam)
- w.p.tparamNames[rparam.Obj()] = name
- }
- }
- w.param(sig.Recv())
- w.signature(sig)
- }
-
- default:
- panic(internalErrorf("unexpected object: %v", obj))
- }
-
- p.declIndex[obj] = w.flush()
-}
-
-func (w *exportWriter) tag(tag byte) {
- w.data.WriteByte(tag)
-}
-
-func (w *exportWriter) pos(pos token.Pos) {
- if w.p.shallow {
- w.posV2(pos)
- } else if w.p.version >= iexportVersionPosCol {
- w.posV1(pos)
- } else {
- w.posV0(pos)
- }
-}
-
-// posV2 encoding (used only in shallow mode) records positions as
-// (file, offset), where file is the index in the token.File table
-// (which records the file name and newline offsets) and offset is a
-// byte offset. It effectively ignores //line directives.
-func (w *exportWriter) posV2(pos token.Pos) {
- if pos == token.NoPos {
- w.uint64(0)
- return
- }
- file := w.p.fset.File(pos) // fset must be non-nil
- index, offset := w.p.fileIndexAndOffset(file, pos)
- w.uint64(1 + index)
- w.uint64(offset)
-}
-
-func (w *exportWriter) posV1(pos token.Pos) {
- if w.p.fset == nil {
- w.int64(0)
- return
- }
-
- p := w.p.fset.Position(pos)
- file := p.Filename
- line := int64(p.Line)
- column := int64(p.Column)
-
- deltaColumn := (column - w.prevColumn) << 1
- deltaLine := (line - w.prevLine) << 1
-
- if file != w.prevFile {
- deltaLine |= 1
- }
- if deltaLine != 0 {
- deltaColumn |= 1
- }
-
- w.int64(deltaColumn)
- if deltaColumn&1 != 0 {
- w.int64(deltaLine)
- if deltaLine&1 != 0 {
- w.string(file)
- }
- }
-
- w.prevFile = file
- w.prevLine = line
- w.prevColumn = column
-}
-
-func (w *exportWriter) posV0(pos token.Pos) {
- if w.p.fset == nil {
- w.int64(0)
- return
- }
-
- p := w.p.fset.Position(pos)
- file := p.Filename
- line := int64(p.Line)
-
- // When file is the same as the last position (common case),
- // we can save a few bytes by delta encoding just the line
- // number.
- //
- // Note: Because data objects may be read out of order (or not
- // at all), we can only apply delta encoding within a single
- // object. This is handled implicitly by tracking prevFile and
- // prevLine as fields of exportWriter.
-
- if file == w.prevFile {
- delta := line - w.prevLine
- w.int64(delta)
- if delta == deltaNewFile {
- w.int64(-1)
- }
- } else {
- w.int64(deltaNewFile)
- w.int64(line) // line >= 0
- w.string(file)
- w.prevFile = file
- }
- w.prevLine = line
-}
-
-func (w *exportWriter) pkg(pkg *types.Package) {
- // Ensure any referenced packages are declared in the main index.
- w.p.allPkgs[pkg] = true
-
- w.string(w.exportPath(pkg))
-}
-
-func (w *exportWriter) qualifiedType(obj *types.TypeName) {
- name := w.p.exportName(obj)
-
- // Ensure any referenced declarations are written out too.
- w.p.pushDecl(obj)
- w.string(name)
- w.pkg(obj.Pkg())
-}
-
-// TODO(rfindley): what does 'pkg' even mean here? It would be better to pass
-// it in explicitly into signatures and structs that may use it for
-// constructing fields.
-func (w *exportWriter) typ(t types.Type, pkg *types.Package) {
- w.data.uint64(w.p.typOff(t, pkg))
-}
-
-func (p *iexporter) newWriter() *exportWriter {
- return &exportWriter{p: p}
-}
-
-func (w *exportWriter) flush() uint64 {
- off := uint64(w.p.data0.Len())
- io.Copy(&w.p.data0, &w.data)
- return off
-}
-
-func (p *iexporter) typOff(t types.Type, pkg *types.Package) uint64 {
- off, ok := p.typIndex[t]
- if !ok {
- w := p.newWriter()
- w.doTyp(t, pkg)
- off = predeclReserved + w.flush()
- p.typIndex[t] = off
- }
- return off
-}
-
-func (w *exportWriter) startType(k itag) {
- w.data.uint64(uint64(k))
-}
-
-func (w *exportWriter) doTyp(t types.Type, pkg *types.Package) {
- if trace {
- w.p.trace("exporting type %s (%T)", t, t)
- w.p.indent++
- defer func() {
- w.p.indent--
- w.p.trace("=> %s", t)
- }()
- }
- switch t := t.(type) {
- case *types.Alias:
- if targs := aliases.TypeArgs(t); targs.Len() > 0 {
- w.startType(instanceType)
- w.pos(t.Obj().Pos())
- w.typeList(targs, pkg)
- w.typ(aliases.Origin(t), pkg)
- return
- }
- w.startType(aliasType)
- w.qualifiedType(t.Obj())
-
- case *types.Named:
- if targs := t.TypeArgs(); targs.Len() > 0 {
- w.startType(instanceType)
- // TODO(rfindley): investigate if this position is correct, and if it
- // matters.
- w.pos(t.Obj().Pos())
- w.typeList(targs, pkg)
- w.typ(t.Origin(), pkg)
- return
- }
- w.startType(definedType)
- w.qualifiedType(t.Obj())
-
- case *types.TypeParam:
- w.startType(typeParamType)
- w.qualifiedType(t.Obj())
-
- case *types.Pointer:
- w.startType(pointerType)
- w.typ(t.Elem(), pkg)
-
- case *types.Slice:
- w.startType(sliceType)
- w.typ(t.Elem(), pkg)
-
- case *types.Array:
- w.startType(arrayType)
- w.uint64(uint64(t.Len()))
- w.typ(t.Elem(), pkg)
-
- case *types.Chan:
- w.startType(chanType)
- // 1 RecvOnly; 2 SendOnly; 3 SendRecv
- var dir uint64
- switch t.Dir() {
- case types.RecvOnly:
- dir = 1
- case types.SendOnly:
- dir = 2
- case types.SendRecv:
- dir = 3
- }
- w.uint64(dir)
- w.typ(t.Elem(), pkg)
-
- case *types.Map:
- w.startType(mapType)
- w.typ(t.Key(), pkg)
- w.typ(t.Elem(), pkg)
-
- case *types.Signature:
- w.startType(signatureType)
- w.pkg(pkg)
- w.signature(t)
-
- case *types.Struct:
- w.startType(structType)
- n := t.NumFields()
- // Even for struct{} we must emit some qualifying package, because that's
- // what the compiler does, and thus that's what the importer expects.
- fieldPkg := pkg
- if n > 0 {
- fieldPkg = t.Field(0).Pkg()
- }
- if fieldPkg == nil {
- // TODO(rfindley): improve this very hacky logic.
- //
- // The importer expects a package to be set for all struct types, even
- // those with no fields. A better encoding might be to set NumFields
- // before pkg. setPkg panics with a nil package, which may be possible
- // to reach with invalid packages (and perhaps valid packages, too?), so
- // (arbitrarily) set the localpkg if available.
- //
- // Alternatively, we may be able to simply guarantee that pkg != nil, by
- // reconsidering the encoding of constant values.
- if w.p.shallow {
- fieldPkg = w.p.localpkg
- } else {
- panic(internalErrorf("no package to set for empty struct"))
- }
- }
- w.pkg(fieldPkg)
- w.uint64(uint64(n))
-
- for i := 0; i < n; i++ {
- f := t.Field(i)
- if w.p.shallow {
- w.objectPath(f)
- }
- w.pos(f.Pos())
- w.string(f.Name()) // unexported fields implicitly qualified by prior setPkg
- w.typ(f.Type(), fieldPkg)
- w.bool(f.Anonymous())
- w.string(t.Tag(i)) // note (or tag)
- }
-
- case *types.Interface:
- w.startType(interfaceType)
- w.pkg(pkg)
-
- n := t.NumEmbeddeds()
- w.uint64(uint64(n))
- for i := 0; i < n; i++ {
- ft := t.EmbeddedType(i)
- tPkg := pkg
- if named, _ := types.Unalias(ft).(*types.Named); named != nil {
- w.pos(named.Obj().Pos())
- } else {
- w.pos(token.NoPos)
- }
- w.typ(ft, tPkg)
- }
-
- // See comment for struct fields. In shallow mode we change the encoding
- // for interface methods that are promoted from other packages.
-
- n = t.NumExplicitMethods()
- w.uint64(uint64(n))
- for i := 0; i < n; i++ {
- m := t.ExplicitMethod(i)
- if w.p.shallow {
- w.objectPath(m)
- }
- w.pos(m.Pos())
- w.string(m.Name())
- sig, _ := m.Type().(*types.Signature)
- w.signature(sig)
- }
-
- case *types.Union:
- w.startType(unionType)
- nt := t.Len()
- w.uint64(uint64(nt))
- for i := 0; i < nt; i++ {
- term := t.Term(i)
- w.bool(term.Tilde())
- w.typ(term.Type(), pkg)
- }
-
- default:
- panic(internalErrorf("unexpected type: %v, %v", t, reflect.TypeOf(t)))
- }
-}
-
-// objectPath writes the package and objectPath to use to look up obj in a
-// different package, when encoding in "shallow" mode.
-//
-// When doing a shallow import, the importer creates only the local package,
-// and requests package symbols for dependencies from the client.
-// However, certain types defined in the local package may hold objects defined
-// (perhaps deeply) within another package.
-//
-// For example, consider the following:
-//
-// package a
-// func F() chan * map[string] struct { X int }
-//
-// package b
-// import "a"
-// var B = a.F()
-//
-// In this example, the type of b.B holds fields defined in package a.
-// In order to have the correct canonical objects for the field defined in the
-// type of B, they are encoded as objectPaths and later looked up in the
-// importer. The same problem applies to interface methods.
-func (w *exportWriter) objectPath(obj types.Object) {
- if obj.Pkg() == nil || obj.Pkg() == w.p.localpkg {
- // obj.Pkg() may be nil for the builtin error.Error.
- // In this case, or if obj is declared in the local package, no need to
- // encode.
- w.string("")
- return
- }
- objectPath, err := w.p.objectpathEncoder().For(obj)
- if err != nil {
- // Fall back to the empty string, which will cause the importer to create a
- // new object, which matches earlier behavior. Creating a new object is
- // sufficient for many purposes (such as type checking), but causes certain
- // references algorithms to fail (golang/go#60819). However, we didn't
- // notice this problem during months of gopls@v0.12.0 testing.
- //
- // TODO(golang/go#61674): this workaround is insufficient, as in the case
- // where the field forwarded from an instantiated type that may not appear
- // in the export data of the original package:
- //
- // // package a
- // type A[P any] struct{ F P }
- //
- // // package b
- // type B a.A[int]
- //
- // We need to update references algorithms not to depend on this
- // de-duplication, at which point we may want to simply remove the
- // workaround here.
- w.string("")
- return
- }
- w.string(string(objectPath))
- w.pkg(obj.Pkg())
-}
-
-func (w *exportWriter) signature(sig *types.Signature) {
- w.paramList(sig.Params())
- w.paramList(sig.Results())
- if sig.Params().Len() > 0 {
- w.bool(sig.Variadic())
- }
-}
-
-func (w *exportWriter) typeList(ts *types.TypeList, pkg *types.Package) {
- w.uint64(uint64(ts.Len()))
- for i := 0; i < ts.Len(); i++ {
- w.typ(ts.At(i), pkg)
- }
-}
-
-func (w *exportWriter) tparamList(prefix string, list *types.TypeParamList, pkg *types.Package) {
- ll := uint64(list.Len())
- w.uint64(ll)
- for i := 0; i < list.Len(); i++ {
- tparam := list.At(i)
- // Set the type parameter exportName before exporting its type.
- exportName := tparamExportName(prefix, tparam)
- w.p.tparamNames[tparam.Obj()] = exportName
- w.typ(list.At(i), pkg)
- }
-}
-
-const blankMarker = "$"
-
-// tparamExportName returns the 'exported' name of a type parameter, which
-// differs from its actual object name: it is prefixed with a qualifier, and
-// blank type parameter names are disambiguated by their index in the type
-// parameter list.
-func tparamExportName(prefix string, tparam *types.TypeParam) string {
- assert(prefix != "")
- name := tparam.Obj().Name()
- if name == "_" {
- name = blankMarker + strconv.Itoa(tparam.Index())
- }
- return prefix + "." + name
-}
-
-// tparamName returns the real name of a type parameter, after stripping its
-// qualifying prefix and reverting blank-name encoding. See tparamExportName
-// for details.
-func tparamName(exportName string) string {
- // Remove the "path" from the type param name that makes it unique.
- ix := strings.LastIndex(exportName, ".")
- if ix < 0 {
- errorf("malformed type parameter export name %s: missing prefix", exportName)
- }
- name := exportName[ix+1:]
- if strings.HasPrefix(name, blankMarker) {
- return "_"
- }
- return name
-}
-
-func (w *exportWriter) paramList(tup *types.Tuple) {
- n := tup.Len()
- w.uint64(uint64(n))
- for i := 0; i < n; i++ {
- w.param(tup.At(i))
- }
-}
-
-func (w *exportWriter) param(obj types.Object) {
- w.pos(obj.Pos())
- w.localIdent(obj)
- w.typ(obj.Type(), obj.Pkg())
-}
-
-func (w *exportWriter) value(typ types.Type, v constant.Value) {
- w.typ(typ, nil)
- if w.p.version >= iexportVersionGo1_18 {
- w.int64(int64(v.Kind()))
- }
-
- if v.Kind() == constant.Unknown {
- // golang/go#60605: treat unknown constant values as if they have invalid type
- //
- // This loses some fidelity over the package type-checked from source, but that
- // is acceptable.
- //
- // TODO(rfindley): we should switch on the recorded constant kind rather
- // than the constant type
- return
- }
-
- switch b := typ.Underlying().(*types.Basic); b.Info() & types.IsConstType {
- case types.IsBoolean:
- w.bool(constant.BoolVal(v))
- case types.IsInteger:
- var i big.Int
- if i64, exact := constant.Int64Val(v); exact {
- i.SetInt64(i64)
- } else if ui64, exact := constant.Uint64Val(v); exact {
- i.SetUint64(ui64)
- } else {
- i.SetString(v.ExactString(), 10)
- }
- w.mpint(&i, typ)
- case types.IsFloat:
- f := constantToFloat(v)
- w.mpfloat(f, typ)
- case types.IsComplex:
- w.mpfloat(constantToFloat(constant.Real(v)), typ)
- w.mpfloat(constantToFloat(constant.Imag(v)), typ)
- case types.IsString:
- w.string(constant.StringVal(v))
- default:
- if b.Kind() == types.Invalid {
- // package contains type errors
- break
- }
- panic(internalErrorf("unexpected type %v (%v)", typ, typ.Underlying()))
- }
-}
-
-// constantToFloat converts a constant.Value with kind constant.Float to a
-// big.Float.
-func constantToFloat(x constant.Value) *big.Float {
- x = constant.ToFloat(x)
- // Use the same floating-point precision (512) as cmd/compile
- // (see Mpprec in cmd/compile/internal/gc/mpfloat.go).
- const mpprec = 512
- var f big.Float
- f.SetPrec(mpprec)
- if v, exact := constant.Float64Val(x); exact {
- // float64
- f.SetFloat64(v)
- } else if num, denom := constant.Num(x), constant.Denom(x); num.Kind() == constant.Int {
- // TODO(gri): add big.Rat accessor to constant.Value.
- n := valueToRat(num)
- d := valueToRat(denom)
- f.SetRat(n.Quo(n, d))
- } else {
- // Value too large to represent as a fraction => inaccessible.
- // TODO(gri): add big.Float accessor to constant.Value.
- _, ok := f.SetString(x.ExactString())
- assert(ok)
- }
- return &f
-}
-
-func valueToRat(x constant.Value) *big.Rat {
- // Convert little-endian to big-endian.
- // I can't believe this is necessary.
- bytes := constant.Bytes(x)
- for i := 0; i < len(bytes)/2; i++ {
- bytes[i], bytes[len(bytes)-1-i] = bytes[len(bytes)-1-i], bytes[i]
- }
- return new(big.Rat).SetInt(new(big.Int).SetBytes(bytes))
-}
-
-// mpint exports a multi-precision integer.
-//
-// For unsigned types, small values are written out as a single
-// byte. Larger values are written out as a length-prefixed big-endian
-// byte string, where the length prefix is encoded as its complement.
-// For example, bytes 0, 1, and 2 directly represent the integer
-// values 0, 1, and 2; while bytes 255, 254, and 253 indicate a 1-,
-// 2-, and 3-byte big-endian string follow.
-//
-// Encoding for signed types use the same general approach as for
-// unsigned types, except small values use zig-zag encoding and the
-// bottom bit of length prefix byte for large values is reserved as a
-// sign bit.
-//
-// The exact boundary between small and large encodings varies
-// according to the maximum number of bytes needed to encode a value
-// of type typ. As a special case, 8-bit types are always encoded as a
-// single byte.
-//
-// TODO(mdempsky): Is this level of complexity really worthwhile?
-func (w *exportWriter) mpint(x *big.Int, typ types.Type) {
- basic, ok := typ.Underlying().(*types.Basic)
- if !ok {
- panic(internalErrorf("unexpected type %v (%T)", typ.Underlying(), typ.Underlying()))
- }
-
- signed, maxBytes := intSize(basic)
-
- negative := x.Sign() < 0
- if !signed && negative {
- panic(internalErrorf("negative unsigned integer; type %v, value %v", typ, x))
- }
-
- b := x.Bytes()
- if len(b) > 0 && b[0] == 0 {
- panic(internalErrorf("leading zeros"))
- }
- if uint(len(b)) > maxBytes {
- panic(internalErrorf("bad mpint length: %d > %d (type %v, value %v)", len(b), maxBytes, typ, x))
- }
-
- maxSmall := 256 - maxBytes
- if signed {
- maxSmall = 256 - 2*maxBytes
- }
- if maxBytes == 1 {
- maxSmall = 256
- }
-
- // Check if x can use small value encoding.
- if len(b) <= 1 {
- var ux uint
- if len(b) == 1 {
- ux = uint(b[0])
- }
- if signed {
- ux <<= 1
- if negative {
- ux--
- }
- }
- if ux < maxSmall {
- w.data.WriteByte(byte(ux))
- return
- }
- }
-
- n := 256 - uint(len(b))
- if signed {
- n = 256 - 2*uint(len(b))
- if negative {
- n |= 1
- }
- }
- if n < maxSmall || n >= 256 {
- panic(internalErrorf("encoding mistake: %d, %v, %v => %d", len(b), signed, negative, n))
- }
-
- w.data.WriteByte(byte(n))
- w.data.Write(b)
-}
-
-// mpfloat exports a multi-precision floating point number.
-//
-// The number's value is decomposed into mantissa × 2**exponent, where
-// mantissa is an integer. The value is written out as mantissa (as a
-// multi-precision integer) and then the exponent, except exponent is
-// omitted if mantissa is zero.
-func (w *exportWriter) mpfloat(f *big.Float, typ types.Type) {
- if f.IsInf() {
- panic("infinite constant")
- }
-
- // Break into f = mant × 2**exp, with 0.5 <= mant < 1.
- var mant big.Float
- exp := int64(f.MantExp(&mant))
-
- // Scale so that mant is an integer.
- prec := mant.MinPrec()
- mant.SetMantExp(&mant, int(prec))
- exp -= int64(prec)
-
- manti, acc := mant.Int(nil)
- if acc != big.Exact {
- panic(internalErrorf("mantissa scaling failed for %f (%s)", f, acc))
- }
- w.mpint(manti, typ)
- if manti.Sign() != 0 {
- w.int64(exp)
- }
-}
-
-func (w *exportWriter) bool(b bool) bool {
- var x uint64
- if b {
- x = 1
- }
- w.uint64(x)
- return b
-}
-
-func (w *exportWriter) int64(x int64) { w.data.int64(x) }
-func (w *exportWriter) uint64(x uint64) { w.data.uint64(x) }
-func (w *exportWriter) string(s string) { w.uint64(w.p.stringOff(s)) }
-
-func (w *exportWriter) localIdent(obj types.Object) {
- // Anonymous parameters.
- if obj == nil {
- w.string("")
- return
- }
-
- name := obj.Name()
- if name == "_" {
- w.string("_")
- return
- }
-
- w.string(name)
-}
-
-type intWriter struct {
- bytes.Buffer
-}
-
-func (w *intWriter) int64(x int64) {
- var buf [binary.MaxVarintLen64]byte
- n := binary.PutVarint(buf[:], x)
- w.Write(buf[:n])
-}
-
-func (w *intWriter) uint64(x uint64) {
- var buf [binary.MaxVarintLen64]byte
- n := binary.PutUvarint(buf[:], x)
- w.Write(buf[:n])
-}
-
-func assert(cond bool) {
- if !cond {
- panic("internal error: assertion failed")
- }
-}
-
-// The below is copied from go/src/cmd/compile/internal/gc/syntax.go.
-
-// objQueue is a FIFO queue of types.Object. The zero value of objQueue is
-// a ready-to-use empty queue.
-type objQueue struct {
- ring []types.Object
- head, tail int
-}
-
-// empty returns true if q contains no Nodes.
-func (q *objQueue) empty() bool {
- return q.head == q.tail
-}
-
-// pushTail appends n to the tail of the queue.
-func (q *objQueue) pushTail(obj types.Object) {
- if len(q.ring) == 0 {
- q.ring = make([]types.Object, 16)
- } else if q.head+len(q.ring) == q.tail {
- // Grow the ring.
- nring := make([]types.Object, len(q.ring)*2)
- // Copy the old elements.
- part := q.ring[q.head%len(q.ring):]
- if q.tail-q.head <= len(part) {
- part = part[:q.tail-q.head]
- copy(nring, part)
- } else {
- pos := copy(nring, part)
- copy(nring[pos:], q.ring[:q.tail%len(q.ring)])
- }
- q.ring, q.head, q.tail = nring, 0, q.tail-q.head
- }
-
- q.ring[q.tail%len(q.ring)] = obj
- q.tail++
-}
-
-// popHead pops a node from the head of the queue. It panics if q is empty.
-func (q *objQueue) popHead() types.Object {
- if q.empty() {
- panic("dequeue empty")
- }
- obj := q.ring[q.head%len(q.ring)]
- q.head++
- return obj
-}
-
-// internalError represents an error generated inside this package.
-type internalError string
-
-func (e internalError) Error() string { return "gcimporter: " + string(e) }
-
-// TODO(adonovan): make this call panic, so that it's symmetric with errorf.
-// Otherwise it's easy to forget to do anything with the error.
-//
-// TODO(adonovan): also, consider switching the names "errorf" and
-// "internalErrorf" as the former is used for bugs, whose cause is
-// internal inconsistency, whereas the latter is used for ordinary
-// situations like bad input, whose cause is external.
-func internalErrorf(format string, args ...interface{}) error {
- return internalError(fmt.Sprintf(format, args...))
-}
diff --git a/vendor/golang.org/x/tools/internal/gcimporter/iimport.go b/vendor/golang.org/x/tools/internal/gcimporter/iimport.go
deleted file mode 100644
index 21908a158b4..00000000000
--- a/vendor/golang.org/x/tools/internal/gcimporter/iimport.go
+++ /dev/null
@@ -1,1101 +0,0 @@
-// Copyright 2018 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-// Indexed package import.
-// See iexport.go for the export data format.
-
-// This file is a copy of $GOROOT/src/go/internal/gcimporter/iimport.go.
-
-package gcimporter
-
-import (
- "bytes"
- "encoding/binary"
- "fmt"
- "go/constant"
- "go/token"
- "go/types"
- "io"
- "math/big"
- "sort"
- "strings"
-
- "golang.org/x/tools/go/types/objectpath"
- "golang.org/x/tools/internal/aliases"
- "golang.org/x/tools/internal/typesinternal"
-)
-
-type intReader struct {
- *bytes.Reader
- path string
-}
-
-func (r *intReader) int64() int64 {
- i, err := binary.ReadVarint(r.Reader)
- if err != nil {
- errorf("import %q: read varint error: %v", r.path, err)
- }
- return i
-}
-
-func (r *intReader) uint64() uint64 {
- i, err := binary.ReadUvarint(r.Reader)
- if err != nil {
- errorf("import %q: read varint error: %v", r.path, err)
- }
- return i
-}
-
-// Keep this in sync with constants in iexport.go.
-const (
- iexportVersionGo1_11 = 0
- iexportVersionPosCol = 1
- iexportVersionGo1_18 = 2
- iexportVersionGenerics = 2
- iexportVersion = iexportVersionGenerics
-
- iexportVersionCurrent = 2
-)
-
-type ident struct {
- pkg *types.Package
- name string
-}
-
-const predeclReserved = 32
-
-type itag uint64
-
-const (
- // Types
- definedType itag = iota
- pointerType
- sliceType
- arrayType
- chanType
- mapType
- signatureType
- structType
- interfaceType
- typeParamType
- instanceType
- unionType
- aliasType
-)
-
-// Object tags
-const (
- varTag = 'V'
- funcTag = 'F'
- genericFuncTag = 'G'
- constTag = 'C'
- aliasTag = 'A'
- genericAliasTag = 'B'
- typeParamTag = 'P'
- typeTag = 'T'
- genericTypeTag = 'U'
-)
-
-// IImportData imports a package from the serialized package data
-// and returns 0 and a reference to the package.
-// If the export data version is not recognized or the format is otherwise
-// compromised, an error is returned.
-func IImportData(fset *token.FileSet, imports map[string]*types.Package, data []byte, path string) (int, *types.Package, error) {
- pkgs, err := iimportCommon(fset, GetPackagesFromMap(imports), data, false, path, false, nil)
- if err != nil {
- return 0, nil, err
- }
- return 0, pkgs[0], nil
-}
-
-// IImportBundle imports a set of packages from the serialized package bundle.
-func IImportBundle(fset *token.FileSet, imports map[string]*types.Package, data []byte) ([]*types.Package, error) {
- return iimportCommon(fset, GetPackagesFromMap(imports), data, true, "", false, nil)
-}
-
-// A GetPackagesFunc function obtains the non-nil symbols for a set of
-// packages, creating and recursively importing them as needed. An
-// implementation should store each package symbol is in the Pkg
-// field of the items array.
-//
-// Any error causes importing to fail. This can be used to quickly read
-// the import manifest of an export data file without fully decoding it.
-type GetPackagesFunc = func(items []GetPackagesItem) error
-
-// A GetPackagesItem is a request from the importer for the package
-// symbol of the specified name and path.
-type GetPackagesItem struct {
- Name, Path string
- Pkg *types.Package // to be filled in by GetPackagesFunc call
-
- // private importer state
- pathOffset uint64
- nameIndex map[string]uint64
-}
-
-// GetPackagesFromMap returns a GetPackagesFunc that retrieves
-// packages from the given map of package path to package.
-//
-// The returned function may mutate m: each requested package that is not
-// found is created with types.NewPackage and inserted into m.
-func GetPackagesFromMap(m map[string]*types.Package) GetPackagesFunc {
- return func(items []GetPackagesItem) error {
- for i, item := range items {
- pkg, ok := m[item.Path]
- if !ok {
- pkg = types.NewPackage(item.Path, item.Name)
- m[item.Path] = pkg
- }
- items[i].Pkg = pkg
- }
- return nil
- }
-}
-
-func iimportCommon(fset *token.FileSet, getPackages GetPackagesFunc, data []byte, bundle bool, path string, shallow bool, reportf ReportFunc) (pkgs []*types.Package, err error) {
- const currentVersion = iexportVersionCurrent
- version := int64(-1)
- if !debug {
- defer func() {
- if e := recover(); e != nil {
- if bundle {
- err = fmt.Errorf("%v", e)
- } else if version > currentVersion {
- err = fmt.Errorf("cannot import %q (%v), export data is newer version - update tool", path, e)
- } else {
- err = fmt.Errorf("internal error while importing %q (%v); please report an issue", path, e)
- }
- }
- }()
- }
-
- r := &intReader{bytes.NewReader(data), path}
-
- if bundle {
- if v := r.uint64(); v != bundleVersion {
- errorf("unknown bundle format version %d", v)
- }
- }
-
- version = int64(r.uint64())
- switch version {
- case iexportVersionGo1_18, iexportVersionPosCol, iexportVersionGo1_11:
- default:
- if version > iexportVersionGo1_18 {
- errorf("unstable iexport format version %d, just rebuild compiler and std library", version)
- } else {
- errorf("unknown iexport format version %d", version)
- }
- }
-
- sLen := int64(r.uint64())
- var fLen int64
- var fileOffset []uint64
- if shallow {
- // Shallow mode uses a different position encoding.
- fLen = int64(r.uint64())
- fileOffset = make([]uint64, r.uint64())
- for i := range fileOffset {
- fileOffset[i] = r.uint64()
- }
- }
- dLen := int64(r.uint64())
-
- whence, _ := r.Seek(0, io.SeekCurrent)
- stringData := data[whence : whence+sLen]
- fileData := data[whence+sLen : whence+sLen+fLen]
- declData := data[whence+sLen+fLen : whence+sLen+fLen+dLen]
- r.Seek(sLen+fLen+dLen, io.SeekCurrent)
-
- p := iimporter{
- version: int(version),
- ipath: path,
- aliases: aliases.Enabled(),
- shallow: shallow,
- reportf: reportf,
-
- stringData: stringData,
- stringCache: make(map[uint64]string),
- fileOffset: fileOffset,
- fileData: fileData,
- fileCache: make([]*token.File, len(fileOffset)),
- pkgCache: make(map[uint64]*types.Package),
-
- declData: declData,
- pkgIndex: make(map[*types.Package]map[string]uint64),
- typCache: make(map[uint64]types.Type),
- // Separate map for typeparams, keyed by their package and unique
- // name.
- tparamIndex: make(map[ident]types.Type),
-
- fake: fakeFileSet{
- fset: fset,
- files: make(map[string]*fileInfo),
- },
- }
- defer p.fake.setLines() // set lines for files in fset
-
- for i, pt := range predeclared() {
- p.typCache[uint64(i)] = pt
- }
-
- // Gather the relevant packages from the manifest.
- items := make([]GetPackagesItem, r.uint64())
- uniquePkgPaths := make(map[string]bool)
- for i := range items {
- pkgPathOff := r.uint64()
- pkgPath := p.stringAt(pkgPathOff)
- pkgName := p.stringAt(r.uint64())
- _ = r.uint64() // package height; unused by go/types
-
- if pkgPath == "" {
- pkgPath = path
- }
- items[i].Name = pkgName
- items[i].Path = pkgPath
- items[i].pathOffset = pkgPathOff
-
- // Read index for package.
- nameIndex := make(map[string]uint64)
- nSyms := r.uint64()
- // In shallow mode, only the current package (i=0) has an index.
- assert(!(shallow && i > 0 && nSyms != 0))
- for ; nSyms > 0; nSyms-- {
- name := p.stringAt(r.uint64())
- nameIndex[name] = r.uint64()
- }
-
- items[i].nameIndex = nameIndex
-
- uniquePkgPaths[pkgPath] = true
- }
- // Debugging #63822; hypothesis: there are duplicate PkgPaths.
- if len(uniquePkgPaths) != len(items) {
- reportf("found duplicate PkgPaths while reading export data manifest: %v", items)
- }
-
- // Request packages all at once from the client,
- // enabling a parallel implementation.
- if err := getPackages(items); err != nil {
- return nil, err // don't wrap this error
- }
-
- // Check the results and complete the index.
- pkgList := make([]*types.Package, len(items))
- for i, item := range items {
- pkg := item.Pkg
- if pkg == nil {
- errorf("internal error: getPackages returned nil package for %q", item.Path)
- } else if pkg.Path() != item.Path {
- errorf("internal error: getPackages returned wrong path %q, want %q", pkg.Path(), item.Path)
- } else if pkg.Name() != item.Name {
- errorf("internal error: getPackages returned wrong name %s for package %q, want %s", pkg.Name(), item.Path, item.Name)
- }
- p.pkgCache[item.pathOffset] = pkg
- p.pkgIndex[pkg] = item.nameIndex
- pkgList[i] = pkg
- }
-
- if bundle {
- pkgs = make([]*types.Package, r.uint64())
- for i := range pkgs {
- pkg := p.pkgAt(r.uint64())
- imps := make([]*types.Package, r.uint64())
- for j := range imps {
- imps[j] = p.pkgAt(r.uint64())
- }
- pkg.SetImports(imps)
- pkgs[i] = pkg
- }
- } else {
- if len(pkgList) == 0 {
- errorf("no packages found for %s", path)
- panic("unreachable")
- }
- pkgs = pkgList[:1]
-
- // record all referenced packages as imports
- list := append(([]*types.Package)(nil), pkgList[1:]...)
- sort.Sort(byPath(list))
- pkgs[0].SetImports(list)
- }
-
- for _, pkg := range pkgs {
- if pkg.Complete() {
- continue
- }
-
- names := make([]string, 0, len(p.pkgIndex[pkg]))
- for name := range p.pkgIndex[pkg] {
- names = append(names, name)
- }
- sort.Strings(names)
- for _, name := range names {
- p.doDecl(pkg, name)
- }
-
- // package was imported completely and without errors
- pkg.MarkComplete()
- }
-
- // SetConstraint can't be called if the constraint type is not yet complete.
- // When type params are created in the typeParamTag case of (*importReader).obj(),
- // the associated constraint type may not be complete due to recursion.
- // Therefore, we defer calling SetConstraint there, and call it here instead
- // after all types are complete.
- for _, d := range p.later {
- d.t.SetConstraint(d.constraint)
- }
-
- for _, typ := range p.interfaceList {
- typ.Complete()
- }
-
- // Workaround for golang/go#61561. See the doc for instanceList for details.
- for _, typ := range p.instanceList {
- if iface, _ := typ.Underlying().(*types.Interface); iface != nil {
- iface.Complete()
- }
- }
-
- return pkgs, nil
-}
-
-type setConstraintArgs struct {
- t *types.TypeParam
- constraint types.Type
-}
-
-type iimporter struct {
- version int
- ipath string
-
- aliases bool
- shallow bool
- reportf ReportFunc // if non-nil, used to report bugs
-
- stringData []byte
- stringCache map[uint64]string
- fileOffset []uint64 // fileOffset[i] is offset in fileData for info about file encoded as i
- fileData []byte
- fileCache []*token.File // memoized decoding of file encoded as i
- pkgCache map[uint64]*types.Package
-
- declData []byte
- pkgIndex map[*types.Package]map[string]uint64
- typCache map[uint64]types.Type
- tparamIndex map[ident]types.Type
-
- fake fakeFileSet
- interfaceList []*types.Interface
-
- // Workaround for the go/types bug golang/go#61561: instances produced during
- // instantiation may contain incomplete interfaces. Here we only complete the
- // underlying type of the instance, which is the most common case but doesn't
- // handle parameterized interface literals defined deeper in the type.
- instanceList []types.Type // instances for later completion (see golang/go#61561)
-
- // Arguments for calls to SetConstraint that are deferred due to recursive types
- later []setConstraintArgs
-
- indent int // for tracing support
-}
-
-func (p *iimporter) trace(format string, args ...interface{}) {
- if !trace {
- // Call sites should also be guarded, but having this check here allows
- // easily enabling/disabling debug trace statements.
- return
- }
- fmt.Printf(strings.Repeat("..", p.indent)+format+"\n", args...)
-}
-
-func (p *iimporter) doDecl(pkg *types.Package, name string) {
- if debug {
- p.trace("import decl %s", name)
- p.indent++
- defer func() {
- p.indent--
- p.trace("=> %s", name)
- }()
- }
- // See if we've already imported this declaration.
- if obj := pkg.Scope().Lookup(name); obj != nil {
- return
- }
-
- off, ok := p.pkgIndex[pkg][name]
- if !ok {
- // In deep mode, the index should be complete. In shallow
- // mode, we should have already recursively loaded necessary
- // dependencies so the above Lookup succeeds.
- errorf("%v.%v not in index", pkg, name)
- }
-
- r := &importReader{p: p, currPkg: pkg}
- r.declReader.Reset(p.declData[off:])
-
- r.obj(name)
-}
-
-func (p *iimporter) stringAt(off uint64) string {
- if s, ok := p.stringCache[off]; ok {
- return s
- }
-
- slen, n := binary.Uvarint(p.stringData[off:])
- if n <= 0 {
- errorf("varint failed")
- }
- spos := off + uint64(n)
- s := string(p.stringData[spos : spos+slen])
- p.stringCache[off] = s
- return s
-}
-
-func (p *iimporter) fileAt(index uint64) *token.File {
- file := p.fileCache[index]
- if file == nil {
- off := p.fileOffset[index]
- file = p.decodeFile(intReader{bytes.NewReader(p.fileData[off:]), p.ipath})
- p.fileCache[index] = file
- }
- return file
-}
-
-func (p *iimporter) decodeFile(rd intReader) *token.File {
- filename := p.stringAt(rd.uint64())
- size := int(rd.uint64())
- file := p.fake.fset.AddFile(filename, -1, size)
-
- // SetLines requires a nondecreasing sequence.
- // Because it is common for clients to derive the interval
- // [start, start+len(name)] from a start position, and we
- // want to ensure that the end offset is on the same line,
- // we fill in the gaps of the sparse encoding with values
- // that strictly increase by the largest possible amount.
- // This allows us to avoid having to record the actual end
- // offset of each needed line.
-
- lines := make([]int, int(rd.uint64()))
- var index, offset int
- for i, n := 0, int(rd.uint64()); i < n; i++ {
- index += int(rd.uint64())
- offset += int(rd.uint64())
- lines[index] = offset
-
- // Ensure monotonicity between points.
- for j := index - 1; j > 0 && lines[j] == 0; j-- {
- lines[j] = lines[j+1] - 1
- }
- }
-
- // Ensure monotonicity after last point.
- for j := len(lines) - 1; j > 0 && lines[j] == 0; j-- {
- size--
- lines[j] = size
- }
-
- if !file.SetLines(lines) {
- errorf("SetLines failed: %d", lines) // can't happen
- }
- return file
-}
-
-func (p *iimporter) pkgAt(off uint64) *types.Package {
- if pkg, ok := p.pkgCache[off]; ok {
- return pkg
- }
- path := p.stringAt(off)
- errorf("missing package %q in %q", path, p.ipath)
- return nil
-}
-
-func (p *iimporter) typAt(off uint64, base *types.Named) types.Type {
- if t, ok := p.typCache[off]; ok && canReuse(base, t) {
- return t
- }
-
- if off < predeclReserved {
- errorf("predeclared type missing from cache: %v", off)
- }
-
- r := &importReader{p: p}
- r.declReader.Reset(p.declData[off-predeclReserved:])
- t := r.doType(base)
-
- if canReuse(base, t) {
- p.typCache[off] = t
- }
- return t
-}
-
-// canReuse reports whether the type rhs on the RHS of the declaration for def
-// may be re-used.
-//
-// Specifically, if def is non-nil and rhs is an interface type with methods, it
-// may not be re-used because we have a convention of setting the receiver type
-// for interface methods to def.
-func canReuse(def *types.Named, rhs types.Type) bool {
- if def == nil {
- return true
- }
- iface, _ := types.Unalias(rhs).(*types.Interface)
- if iface == nil {
- return true
- }
- // Don't use iface.Empty() here as iface may not be complete.
- return iface.NumEmbeddeds() == 0 && iface.NumExplicitMethods() == 0
-}
-
-type importReader struct {
- p *iimporter
- declReader bytes.Reader
- currPkg *types.Package
- prevFile string
- prevLine int64
- prevColumn int64
-}
-
-func (r *importReader) obj(name string) {
- tag := r.byte()
- pos := r.pos()
-
- switch tag {
- case aliasTag, genericAliasTag:
- var tparams []*types.TypeParam
- if tag == genericAliasTag {
- tparams = r.tparamList()
- }
- typ := r.typ()
- obj := aliases.NewAlias(r.p.aliases, pos, r.currPkg, name, typ, tparams)
- r.declare(obj)
-
- case constTag:
- typ, val := r.value()
-
- r.declare(types.NewConst(pos, r.currPkg, name, typ, val))
-
- case funcTag, genericFuncTag:
- var tparams []*types.TypeParam
- if tag == genericFuncTag {
- tparams = r.tparamList()
- }
- sig := r.signature(nil, nil, tparams)
- r.declare(types.NewFunc(pos, r.currPkg, name, sig))
-
- case typeTag, genericTypeTag:
- // Types can be recursive. We need to setup a stub
- // declaration before recursing.
- obj := types.NewTypeName(pos, r.currPkg, name, nil)
- named := types.NewNamed(obj, nil, nil)
- // Declare obj before calling r.tparamList, so the new type name is recognized
- // if used in the constraint of one of its own typeparams (see #48280).
- r.declare(obj)
- if tag == genericTypeTag {
- tparams := r.tparamList()
- named.SetTypeParams(tparams)
- }
-
- underlying := r.p.typAt(r.uint64(), named).Underlying()
- named.SetUnderlying(underlying)
-
- if !isInterface(underlying) {
- for n := r.uint64(); n > 0; n-- {
- mpos := r.pos()
- mname := r.ident()
- recv := r.param()
-
- // If the receiver has any targs, set those as the
- // rparams of the method (since those are the
- // typeparams being used in the method sig/body).
- _, recvNamed := typesinternal.ReceiverNamed(recv)
- targs := recvNamed.TypeArgs()
- var rparams []*types.TypeParam
- if targs.Len() > 0 {
- rparams = make([]*types.TypeParam, targs.Len())
- for i := range rparams {
- rparams[i] = types.Unalias(targs.At(i)).(*types.TypeParam)
- }
- }
- msig := r.signature(recv, rparams, nil)
-
- named.AddMethod(types.NewFunc(mpos, r.currPkg, mname, msig))
- }
- }
-
- case typeParamTag:
- // We need to "declare" a typeparam in order to have a name that
- // can be referenced recursively (if needed) in the type param's
- // bound.
- if r.p.version < iexportVersionGenerics {
- errorf("unexpected type param type")
- }
- name0 := tparamName(name)
- tn := types.NewTypeName(pos, r.currPkg, name0, nil)
- t := types.NewTypeParam(tn, nil)
-
- // To handle recursive references to the typeparam within its
- // bound, save the partial type in tparamIndex before reading the bounds.
- id := ident{r.currPkg, name}
- r.p.tparamIndex[id] = t
- var implicit bool
- if r.p.version >= iexportVersionGo1_18 {
- implicit = r.bool()
- }
- constraint := r.typ()
- if implicit {
- iface, _ := types.Unalias(constraint).(*types.Interface)
- if iface == nil {
- errorf("non-interface constraint marked implicit")
- }
- iface.MarkImplicit()
- }
- // The constraint type may not be complete, if we
- // are in the middle of a type recursion involving type
- // constraints. So, we defer SetConstraint until we have
- // completely set up all types in ImportData.
- r.p.later = append(r.p.later, setConstraintArgs{t: t, constraint: constraint})
-
- case varTag:
- typ := r.typ()
-
- r.declare(types.NewVar(pos, r.currPkg, name, typ))
-
- default:
- errorf("unexpected tag: %v", tag)
- }
-}
-
-func (r *importReader) declare(obj types.Object) {
- obj.Pkg().Scope().Insert(obj)
-}
-
-func (r *importReader) value() (typ types.Type, val constant.Value) {
- typ = r.typ()
- if r.p.version >= iexportVersionGo1_18 {
- // TODO: add support for using the kind.
- _ = constant.Kind(r.int64())
- }
-
- switch b := typ.Underlying().(*types.Basic); b.Info() & types.IsConstType {
- case types.IsBoolean:
- val = constant.MakeBool(r.bool())
-
- case types.IsString:
- val = constant.MakeString(r.string())
-
- case types.IsInteger:
- var x big.Int
- r.mpint(&x, b)
- val = constant.Make(&x)
-
- case types.IsFloat:
- val = r.mpfloat(b)
-
- case types.IsComplex:
- re := r.mpfloat(b)
- im := r.mpfloat(b)
- val = constant.BinaryOp(re, token.ADD, constant.MakeImag(im))
-
- default:
- if b.Kind() == types.Invalid {
- val = constant.MakeUnknown()
- return
- }
- errorf("unexpected type %v", typ) // panics
- panic("unreachable")
- }
-
- return
-}
-
-func intSize(b *types.Basic) (signed bool, maxBytes uint) {
- if (b.Info() & types.IsUntyped) != 0 {
- return true, 64
- }
-
- switch b.Kind() {
- case types.Float32, types.Complex64:
- return true, 3
- case types.Float64, types.Complex128:
- return true, 7
- }
-
- signed = (b.Info() & types.IsUnsigned) == 0
- switch b.Kind() {
- case types.Int8, types.Uint8:
- maxBytes = 1
- case types.Int16, types.Uint16:
- maxBytes = 2
- case types.Int32, types.Uint32:
- maxBytes = 4
- default:
- maxBytes = 8
- }
-
- return
-}
-
-func (r *importReader) mpint(x *big.Int, typ *types.Basic) {
- signed, maxBytes := intSize(typ)
-
- maxSmall := 256 - maxBytes
- if signed {
- maxSmall = 256 - 2*maxBytes
- }
- if maxBytes == 1 {
- maxSmall = 256
- }
-
- n, _ := r.declReader.ReadByte()
- if uint(n) < maxSmall {
- v := int64(n)
- if signed {
- v >>= 1
- if n&1 != 0 {
- v = ^v
- }
- }
- x.SetInt64(v)
- return
- }
-
- v := -n
- if signed {
- v = -(n &^ 1) >> 1
- }
- if v < 1 || uint(v) > maxBytes {
- errorf("weird decoding: %v, %v => %v", n, signed, v)
- }
- b := make([]byte, v)
- io.ReadFull(&r.declReader, b)
- x.SetBytes(b)
- if signed && n&1 != 0 {
- x.Neg(x)
- }
-}
-
-func (r *importReader) mpfloat(typ *types.Basic) constant.Value {
- var mant big.Int
- r.mpint(&mant, typ)
- var f big.Float
- f.SetInt(&mant)
- if f.Sign() != 0 {
- f.SetMantExp(&f, int(r.int64()))
- }
- return constant.Make(&f)
-}
-
-func (r *importReader) ident() string {
- return r.string()
-}
-
-func (r *importReader) qualifiedIdent() (*types.Package, string) {
- name := r.string()
- pkg := r.pkg()
- return pkg, name
-}
-
-func (r *importReader) pos() token.Pos {
- if r.p.shallow {
- // precise offsets are encoded only in shallow mode
- return r.posv2()
- }
- if r.p.version >= iexportVersionPosCol {
- r.posv1()
- } else {
- r.posv0()
- }
-
- if r.prevFile == "" && r.prevLine == 0 && r.prevColumn == 0 {
- return token.NoPos
- }
- return r.p.fake.pos(r.prevFile, int(r.prevLine), int(r.prevColumn))
-}
-
-func (r *importReader) posv0() {
- delta := r.int64()
- if delta != deltaNewFile {
- r.prevLine += delta
- } else if l := r.int64(); l == -1 {
- r.prevLine += deltaNewFile
- } else {
- r.prevFile = r.string()
- r.prevLine = l
- }
-}
-
-func (r *importReader) posv1() {
- delta := r.int64()
- r.prevColumn += delta >> 1
- if delta&1 != 0 {
- delta = r.int64()
- r.prevLine += delta >> 1
- if delta&1 != 0 {
- r.prevFile = r.string()
- }
- }
-}
-
-func (r *importReader) posv2() token.Pos {
- file := r.uint64()
- if file == 0 {
- return token.NoPos
- }
- tf := r.p.fileAt(file - 1)
- return tf.Pos(int(r.uint64()))
-}
-
-func (r *importReader) typ() types.Type {
- return r.p.typAt(r.uint64(), nil)
-}
-
-func isInterface(t types.Type) bool {
- _, ok := types.Unalias(t).(*types.Interface)
- return ok
-}
-
-func (r *importReader) pkg() *types.Package { return r.p.pkgAt(r.uint64()) }
-func (r *importReader) string() string { return r.p.stringAt(r.uint64()) }
-
-func (r *importReader) doType(base *types.Named) (res types.Type) {
- k := r.kind()
- if debug {
- r.p.trace("importing type %d (base: %v)", k, base)
- r.p.indent++
- defer func() {
- r.p.indent--
- r.p.trace("=> %s", res)
- }()
- }
- switch k {
- default:
- errorf("unexpected kind tag in %q: %v", r.p.ipath, k)
- return nil
-
- case aliasType, definedType:
- pkg, name := r.qualifiedIdent()
- r.p.doDecl(pkg, name)
- return pkg.Scope().Lookup(name).(*types.TypeName).Type()
- case pointerType:
- return types.NewPointer(r.typ())
- case sliceType:
- return types.NewSlice(r.typ())
- case arrayType:
- n := r.uint64()
- return types.NewArray(r.typ(), int64(n))
- case chanType:
- dir := chanDir(int(r.uint64()))
- return types.NewChan(dir, r.typ())
- case mapType:
- return types.NewMap(r.typ(), r.typ())
- case signatureType:
- r.currPkg = r.pkg()
- return r.signature(nil, nil, nil)
-
- case structType:
- r.currPkg = r.pkg()
-
- fields := make([]*types.Var, r.uint64())
- tags := make([]string, len(fields))
- for i := range fields {
- var field *types.Var
- if r.p.shallow {
- field, _ = r.objectPathObject().(*types.Var)
- }
-
- fpos := r.pos()
- fname := r.ident()
- ftyp := r.typ()
- emb := r.bool()
- tag := r.string()
-
- // Either this is not a shallow import, the field is local, or the
- // encoded objectPath failed to produce an object (a bug).
- //
- // Even in this last, buggy case, fall back on creating a new field. As
- // discussed in iexport.go, this is not correct, but mostly works and is
- // preferable to failing (for now at least).
- if field == nil {
- field = types.NewField(fpos, r.currPkg, fname, ftyp, emb)
- }
-
- fields[i] = field
- tags[i] = tag
- }
- return types.NewStruct(fields, tags)
-
- case interfaceType:
- r.currPkg = r.pkg()
-
- embeddeds := make([]types.Type, r.uint64())
- for i := range embeddeds {
- _ = r.pos()
- embeddeds[i] = r.typ()
- }
-
- methods := make([]*types.Func, r.uint64())
- for i := range methods {
- var method *types.Func
- if r.p.shallow {
- method, _ = r.objectPathObject().(*types.Func)
- }
-
- mpos := r.pos()
- mname := r.ident()
-
- // TODO(mdempsky): Matches bimport.go, but I
- // don't agree with this.
- var recv *types.Var
- if base != nil {
- recv = types.NewVar(token.NoPos, r.currPkg, "", base)
- }
- msig := r.signature(recv, nil, nil)
-
- if method == nil {
- method = types.NewFunc(mpos, r.currPkg, mname, msig)
- }
- methods[i] = method
- }
-
- typ := types.NewInterfaceType(methods, embeddeds)
- r.p.interfaceList = append(r.p.interfaceList, typ)
- return typ
-
- case typeParamType:
- if r.p.version < iexportVersionGenerics {
- errorf("unexpected type param type")
- }
- pkg, name := r.qualifiedIdent()
- id := ident{pkg, name}
- if t, ok := r.p.tparamIndex[id]; ok {
- // We're already in the process of importing this typeparam.
- return t
- }
- // Otherwise, import the definition of the typeparam now.
- r.p.doDecl(pkg, name)
- return r.p.tparamIndex[id]
-
- case instanceType:
- if r.p.version < iexportVersionGenerics {
- errorf("unexpected instantiation type")
- }
- // pos does not matter for instances: they are positioned on the original
- // type.
- _ = r.pos()
- len := r.uint64()
- targs := make([]types.Type, len)
- for i := range targs {
- targs[i] = r.typ()
- }
- baseType := r.typ()
- // The imported instantiated type doesn't include any methods, so
- // we must always use the methods of the base (orig) type.
- // TODO provide a non-nil *Environment
- t, _ := types.Instantiate(nil, baseType, targs, false)
-
- // Workaround for golang/go#61561. See the doc for instanceList for details.
- r.p.instanceList = append(r.p.instanceList, t)
- return t
-
- case unionType:
- if r.p.version < iexportVersionGenerics {
- errorf("unexpected instantiation type")
- }
- terms := make([]*types.Term, r.uint64())
- for i := range terms {
- terms[i] = types.NewTerm(r.bool(), r.typ())
- }
- return types.NewUnion(terms)
- }
-}
-
-func (r *importReader) kind() itag {
- return itag(r.uint64())
-}
-
-// objectPathObject is the inverse of exportWriter.objectPath.
-//
-// In shallow mode, certain fields and methods may need to be looked up in an
-// imported package. See the doc for exportWriter.objectPath for a full
-// explanation.
-func (r *importReader) objectPathObject() types.Object {
- objPath := objectpath.Path(r.string())
- if objPath == "" {
- return nil
- }
- pkg := r.pkg()
- obj, err := objectpath.Object(pkg, objPath)
- if err != nil {
- if r.p.reportf != nil {
- r.p.reportf("failed to find object for objectPath %q: %v", objPath, err)
- }
- }
- return obj
-}
-
-func (r *importReader) signature(recv *types.Var, rparams []*types.TypeParam, tparams []*types.TypeParam) *types.Signature {
- params := r.paramList()
- results := r.paramList()
- variadic := params.Len() > 0 && r.bool()
- return types.NewSignatureType(recv, rparams, tparams, params, results, variadic)
-}
-
-func (r *importReader) tparamList() []*types.TypeParam {
- n := r.uint64()
- if n == 0 {
- return nil
- }
- xs := make([]*types.TypeParam, n)
- for i := range xs {
- // Note: the standard library importer is tolerant of nil types here,
- // though would panic in SetTypeParams.
- xs[i] = types.Unalias(r.typ()).(*types.TypeParam)
- }
- return xs
-}
-
-func (r *importReader) paramList() *types.Tuple {
- xs := make([]*types.Var, r.uint64())
- for i := range xs {
- xs[i] = r.param()
- }
- return types.NewTuple(xs...)
-}
-
-func (r *importReader) param() *types.Var {
- pos := r.pos()
- name := r.ident()
- typ := r.typ()
- return types.NewParam(pos, r.currPkg, name, typ)
-}
-
-func (r *importReader) bool() bool {
- return r.uint64() != 0
-}
-
-func (r *importReader) int64() int64 {
- n, err := binary.ReadVarint(&r.declReader)
- if err != nil {
- errorf("readVarint: %v", err)
- }
- return n
-}
-
-func (r *importReader) uint64() uint64 {
- n, err := binary.ReadUvarint(&r.declReader)
- if err != nil {
- errorf("readUvarint: %v", err)
- }
- return n
-}
-
-func (r *importReader) byte() byte {
- x, err := r.declReader.ReadByte()
- if err != nil {
- errorf("declReader.ReadByte: %v", err)
- }
- return x
-}
diff --git a/vendor/golang.org/x/tools/internal/gcimporter/predeclared.go b/vendor/golang.org/x/tools/internal/gcimporter/predeclared.go
deleted file mode 100644
index 907c8557a54..00000000000
--- a/vendor/golang.org/x/tools/internal/gcimporter/predeclared.go
+++ /dev/null
@@ -1,91 +0,0 @@
-// Copyright 2024 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-package gcimporter
-
-import (
- "go/types"
- "sync"
-)
-
-// predecl is a cache for the predeclared types in types.Universe.
-//
-// Cache a distinct result based on the runtime value of any.
-// The pointer value of the any type varies based on GODEBUG settings.
-var predeclMu sync.Mutex
-var predecl map[types.Type][]types.Type
-
-func predeclared() []types.Type {
- anyt := types.Universe.Lookup("any").Type()
-
- predeclMu.Lock()
- defer predeclMu.Unlock()
-
- if pre, ok := predecl[anyt]; ok {
- return pre
- }
-
- if predecl == nil {
- predecl = make(map[types.Type][]types.Type)
- }
-
- decls := []types.Type{ // basic types
- types.Typ[types.Bool],
- types.Typ[types.Int],
- types.Typ[types.Int8],
- types.Typ[types.Int16],
- types.Typ[types.Int32],
- types.Typ[types.Int64],
- types.Typ[types.Uint],
- types.Typ[types.Uint8],
- types.Typ[types.Uint16],
- types.Typ[types.Uint32],
- types.Typ[types.Uint64],
- types.Typ[types.Uintptr],
- types.Typ[types.Float32],
- types.Typ[types.Float64],
- types.Typ[types.Complex64],
- types.Typ[types.Complex128],
- types.Typ[types.String],
-
- // basic type aliases
- types.Universe.Lookup("byte").Type(),
- types.Universe.Lookup("rune").Type(),
-
- // error
- types.Universe.Lookup("error").Type(),
-
- // untyped types
- types.Typ[types.UntypedBool],
- types.Typ[types.UntypedInt],
- types.Typ[types.UntypedRune],
- types.Typ[types.UntypedFloat],
- types.Typ[types.UntypedComplex],
- types.Typ[types.UntypedString],
- types.Typ[types.UntypedNil],
-
- // package unsafe
- types.Typ[types.UnsafePointer],
-
- // invalid type
- types.Typ[types.Invalid], // only appears in packages with errors
-
- // used internally by gc; never used by this package or in .a files
- anyType{},
-
- // comparable
- types.Universe.Lookup("comparable").Type(),
-
- // any
- anyt,
- }
-
- predecl[anyt] = decls
- return decls
-}
-
-type anyType struct{}
-
-func (t anyType) Underlying() types.Type { return t }
-func (t anyType) String() string { return "any" }
diff --git a/vendor/golang.org/x/tools/internal/gcimporter/ureader_yes.go b/vendor/golang.org/x/tools/internal/gcimporter/ureader_yes.go
deleted file mode 100644
index 1db408613c9..00000000000
--- a/vendor/golang.org/x/tools/internal/gcimporter/ureader_yes.go
+++ /dev/null
@@ -1,754 +0,0 @@
-// Copyright 2021 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-// Derived from go/internal/gcimporter/ureader.go
-
-package gcimporter
-
-import (
- "fmt"
- "go/token"
- "go/types"
- "sort"
- "strings"
-
- "golang.org/x/tools/internal/aliases"
- "golang.org/x/tools/internal/pkgbits"
-)
-
-// A pkgReader holds the shared state for reading a unified IR package
-// description.
-type pkgReader struct {
- pkgbits.PkgDecoder
-
- fake fakeFileSet
-
- ctxt *types.Context
- imports map[string]*types.Package // previously imported packages, indexed by path
- aliases bool // create types.Alias nodes
-
- // lazily initialized arrays corresponding to the unified IR
- // PosBase, Pkg, and Type sections, respectively.
- posBases []string // position bases (i.e., file names)
- pkgs []*types.Package
- typs []types.Type
-
- // laterFns holds functions that need to be invoked at the end of
- // import reading.
- laterFns []func()
- // laterFors is used in case of 'type A B' to ensure that B is processed before A.
- laterFors map[types.Type]int
-
- // ifaces holds a list of constructed Interfaces, which need to have
- // Complete called after importing is done.
- ifaces []*types.Interface
-}
-
-// later adds a function to be invoked at the end of import reading.
-func (pr *pkgReader) later(fn func()) {
- pr.laterFns = append(pr.laterFns, fn)
-}
-
-// See cmd/compile/internal/noder.derivedInfo.
-type derivedInfo struct {
- idx pkgbits.Index
-}
-
-// See cmd/compile/internal/noder.typeInfo.
-type typeInfo struct {
- idx pkgbits.Index
- derived bool
-}
-
-func UImportData(fset *token.FileSet, imports map[string]*types.Package, data []byte, path string) (_ int, pkg *types.Package, err error) {
- if !debug {
- defer func() {
- if x := recover(); x != nil {
- err = fmt.Errorf("internal error in importing %q (%v); please report an issue", path, x)
- }
- }()
- }
-
- s := string(data)
- s = s[:strings.LastIndex(s, "\n$$\n")]
- input := pkgbits.NewPkgDecoder(path, s)
- pkg = readUnifiedPackage(fset, nil, imports, input)
- return
-}
-
-// laterFor adds a function to be invoked at the end of import reading, and records the type that function is finishing.
-func (pr *pkgReader) laterFor(t types.Type, fn func()) {
- if pr.laterFors == nil {
- pr.laterFors = make(map[types.Type]int)
- }
- pr.laterFors[t] = len(pr.laterFns)
- pr.laterFns = append(pr.laterFns, fn)
-}
-
-// readUnifiedPackage reads a package description from the given
-// unified IR export data decoder.
-func readUnifiedPackage(fset *token.FileSet, ctxt *types.Context, imports map[string]*types.Package, input pkgbits.PkgDecoder) *types.Package {
- pr := pkgReader{
- PkgDecoder: input,
-
- fake: fakeFileSet{
- fset: fset,
- files: make(map[string]*fileInfo),
- },
-
- ctxt: ctxt,
- imports: imports,
- aliases: aliases.Enabled(),
-
- posBases: make([]string, input.NumElems(pkgbits.RelocPosBase)),
- pkgs: make([]*types.Package, input.NumElems(pkgbits.RelocPkg)),
- typs: make([]types.Type, input.NumElems(pkgbits.RelocType)),
- }
- defer pr.fake.setLines()
-
- r := pr.newReader(pkgbits.RelocMeta, pkgbits.PublicRootIdx, pkgbits.SyncPublic)
- pkg := r.pkg()
- if r.Version().Has(pkgbits.HasInit) {
- r.Bool()
- }
-
- for i, n := 0, r.Len(); i < n; i++ {
- // As if r.obj(), but avoiding the Scope.Lookup call,
- // to avoid eager loading of imports.
- r.Sync(pkgbits.SyncObject)
- if r.Version().Has(pkgbits.DerivedFuncInstance) {
- assert(!r.Bool())
- }
- r.p.objIdx(r.Reloc(pkgbits.RelocObj))
- assert(r.Len() == 0)
- }
-
- r.Sync(pkgbits.SyncEOF)
-
- for _, fn := range pr.laterFns {
- fn()
- }
-
- for _, iface := range pr.ifaces {
- iface.Complete()
- }
-
- // Imports() of pkg are all of the transitive packages that were loaded.
- var imps []*types.Package
- for _, imp := range pr.pkgs {
- if imp != nil && imp != pkg {
- imps = append(imps, imp)
- }
- }
- sort.Sort(byPath(imps))
- pkg.SetImports(imps)
-
- pkg.MarkComplete()
- return pkg
-}
-
-// A reader holds the state for reading a single unified IR element
-// within a package.
-type reader struct {
- pkgbits.Decoder
-
- p *pkgReader
-
- dict *readerDict
-}
-
-// A readerDict holds the state for type parameters that parameterize
-// the current unified IR element.
-type readerDict struct {
- // bounds is a slice of typeInfos corresponding to the underlying
- // bounds of the element's type parameters.
- bounds []typeInfo
-
- // tparams is a slice of the constructed TypeParams for the element.
- tparams []*types.TypeParam
-
- // derived is a slice of types derived from tparams, which may be
- // instantiated while reading the current element.
- derived []derivedInfo
- derivedTypes []types.Type // lazily instantiated from derived
-}
-
-func (pr *pkgReader) newReader(k pkgbits.RelocKind, idx pkgbits.Index, marker pkgbits.SyncMarker) *reader {
- return &reader{
- Decoder: pr.NewDecoder(k, idx, marker),
- p: pr,
- }
-}
-
-func (pr *pkgReader) tempReader(k pkgbits.RelocKind, idx pkgbits.Index, marker pkgbits.SyncMarker) *reader {
- return &reader{
- Decoder: pr.TempDecoder(k, idx, marker),
- p: pr,
- }
-}
-
-func (pr *pkgReader) retireReader(r *reader) {
- pr.RetireDecoder(&r.Decoder)
-}
-
-// @@@ Positions
-
-func (r *reader) pos() token.Pos {
- r.Sync(pkgbits.SyncPos)
- if !r.Bool() {
- return token.NoPos
- }
-
- // TODO(mdempsky): Delta encoding.
- posBase := r.posBase()
- line := r.Uint()
- col := r.Uint()
- return r.p.fake.pos(posBase, int(line), int(col))
-}
-
-func (r *reader) posBase() string {
- return r.p.posBaseIdx(r.Reloc(pkgbits.RelocPosBase))
-}
-
-func (pr *pkgReader) posBaseIdx(idx pkgbits.Index) string {
- if b := pr.posBases[idx]; b != "" {
- return b
- }
-
- var filename string
- {
- r := pr.tempReader(pkgbits.RelocPosBase, idx, pkgbits.SyncPosBase)
-
- // Within types2, position bases have a lot more details (e.g.,
- // keeping track of where //line directives appeared exactly).
- //
- // For go/types, we just track the file name.
-
- filename = r.String()
-
- if r.Bool() { // file base
- // Was: "b = token.NewTrimmedFileBase(filename, true)"
- } else { // line base
- pos := r.pos()
- line := r.Uint()
- col := r.Uint()
-
- // Was: "b = token.NewLineBase(pos, filename, true, line, col)"
- _, _, _ = pos, line, col
- }
- pr.retireReader(r)
- }
- b := filename
- pr.posBases[idx] = b
- return b
-}
-
-// @@@ Packages
-
-func (r *reader) pkg() *types.Package {
- r.Sync(pkgbits.SyncPkg)
- return r.p.pkgIdx(r.Reloc(pkgbits.RelocPkg))
-}
-
-func (pr *pkgReader) pkgIdx(idx pkgbits.Index) *types.Package {
- // TODO(mdempsky): Consider using some non-nil pointer to indicate
- // the universe scope, so we don't need to keep re-reading it.
- if pkg := pr.pkgs[idx]; pkg != nil {
- return pkg
- }
-
- pkg := pr.newReader(pkgbits.RelocPkg, idx, pkgbits.SyncPkgDef).doPkg()
- pr.pkgs[idx] = pkg
- return pkg
-}
-
-func (r *reader) doPkg() *types.Package {
- path := r.String()
- switch path {
- case "":
- path = r.p.PkgPath()
- case "builtin":
- return nil // universe
- case "unsafe":
- return types.Unsafe
- }
-
- if pkg := r.p.imports[path]; pkg != nil {
- return pkg
- }
-
- name := r.String()
-
- pkg := types.NewPackage(path, name)
- r.p.imports[path] = pkg
-
- return pkg
-}
-
-// @@@ Types
-
-func (r *reader) typ() types.Type {
- return r.p.typIdx(r.typInfo(), r.dict)
-}
-
-func (r *reader) typInfo() typeInfo {
- r.Sync(pkgbits.SyncType)
- if r.Bool() {
- return typeInfo{idx: pkgbits.Index(r.Len()), derived: true}
- }
- return typeInfo{idx: r.Reloc(pkgbits.RelocType), derived: false}
-}
-
-func (pr *pkgReader) typIdx(info typeInfo, dict *readerDict) types.Type {
- idx := info.idx
- var where *types.Type
- if info.derived {
- where = &dict.derivedTypes[idx]
- idx = dict.derived[idx].idx
- } else {
- where = &pr.typs[idx]
- }
-
- if typ := *where; typ != nil {
- return typ
- }
-
- var typ types.Type
- {
- r := pr.tempReader(pkgbits.RelocType, idx, pkgbits.SyncTypeIdx)
- r.dict = dict
-
- typ = r.doTyp()
- assert(typ != nil)
- pr.retireReader(r)
- }
- // See comment in pkgReader.typIdx explaining how this happens.
- if prev := *where; prev != nil {
- return prev
- }
-
- *where = typ
- return typ
-}
-
-func (r *reader) doTyp() (res types.Type) {
- switch tag := pkgbits.CodeType(r.Code(pkgbits.SyncType)); tag {
- default:
- errorf("unhandled type tag: %v", tag)
- panic("unreachable")
-
- case pkgbits.TypeBasic:
- return types.Typ[r.Len()]
-
- case pkgbits.TypeNamed:
- obj, targs := r.obj()
- name := obj.(*types.TypeName)
- if len(targs) != 0 {
- t, _ := types.Instantiate(r.p.ctxt, name.Type(), targs, false)
- return t
- }
- return name.Type()
-
- case pkgbits.TypeTypeParam:
- return r.dict.tparams[r.Len()]
-
- case pkgbits.TypeArray:
- len := int64(r.Uint64())
- return types.NewArray(r.typ(), len)
- case pkgbits.TypeChan:
- dir := types.ChanDir(r.Len())
- return types.NewChan(dir, r.typ())
- case pkgbits.TypeMap:
- return types.NewMap(r.typ(), r.typ())
- case pkgbits.TypePointer:
- return types.NewPointer(r.typ())
- case pkgbits.TypeSignature:
- return r.signature(nil, nil, nil)
- case pkgbits.TypeSlice:
- return types.NewSlice(r.typ())
- case pkgbits.TypeStruct:
- return r.structType()
- case pkgbits.TypeInterface:
- return r.interfaceType()
- case pkgbits.TypeUnion:
- return r.unionType()
- }
-}
-
-func (r *reader) structType() *types.Struct {
- fields := make([]*types.Var, r.Len())
- var tags []string
- for i := range fields {
- pos := r.pos()
- pkg, name := r.selector()
- ftyp := r.typ()
- tag := r.String()
- embedded := r.Bool()
-
- fields[i] = types.NewField(pos, pkg, name, ftyp, embedded)
- if tag != "" {
- for len(tags) < i {
- tags = append(tags, "")
- }
- tags = append(tags, tag)
- }
- }
- return types.NewStruct(fields, tags)
-}
-
-func (r *reader) unionType() *types.Union {
- terms := make([]*types.Term, r.Len())
- for i := range terms {
- terms[i] = types.NewTerm(r.Bool(), r.typ())
- }
- return types.NewUnion(terms)
-}
-
-func (r *reader) interfaceType() *types.Interface {
- methods := make([]*types.Func, r.Len())
- embeddeds := make([]types.Type, r.Len())
- implicit := len(methods) == 0 && len(embeddeds) == 1 && r.Bool()
-
- for i := range methods {
- pos := r.pos()
- pkg, name := r.selector()
- mtyp := r.signature(nil, nil, nil)
- methods[i] = types.NewFunc(pos, pkg, name, mtyp)
- }
-
- for i := range embeddeds {
- embeddeds[i] = r.typ()
- }
-
- iface := types.NewInterfaceType(methods, embeddeds)
- if implicit {
- iface.MarkImplicit()
- }
-
- // We need to call iface.Complete(), but if there are any embedded
- // defined types, then we may not have set their underlying
- // interface type yet. So we need to defer calling Complete until
- // after we've called SetUnderlying everywhere.
- //
- // TODO(mdempsky): After CL 424876 lands, it should be safe to call
- // iface.Complete() immediately.
- r.p.ifaces = append(r.p.ifaces, iface)
-
- return iface
-}
-
-func (r *reader) signature(recv *types.Var, rtparams, tparams []*types.TypeParam) *types.Signature {
- r.Sync(pkgbits.SyncSignature)
-
- params := r.params()
- results := r.params()
- variadic := r.Bool()
-
- return types.NewSignatureType(recv, rtparams, tparams, params, results, variadic)
-}
-
-func (r *reader) params() *types.Tuple {
- r.Sync(pkgbits.SyncParams)
-
- params := make([]*types.Var, r.Len())
- for i := range params {
- params[i] = r.param()
- }
-
- return types.NewTuple(params...)
-}
-
-func (r *reader) param() *types.Var {
- r.Sync(pkgbits.SyncParam)
-
- pos := r.pos()
- pkg, name := r.localIdent()
- typ := r.typ()
-
- return types.NewParam(pos, pkg, name, typ)
-}
-
-// @@@ Objects
-
-func (r *reader) obj() (types.Object, []types.Type) {
- r.Sync(pkgbits.SyncObject)
-
- if r.Version().Has(pkgbits.DerivedFuncInstance) {
- assert(!r.Bool())
- }
-
- pkg, name := r.p.objIdx(r.Reloc(pkgbits.RelocObj))
- obj := pkgScope(pkg).Lookup(name)
-
- targs := make([]types.Type, r.Len())
- for i := range targs {
- targs[i] = r.typ()
- }
-
- return obj, targs
-}
-
-func (pr *pkgReader) objIdx(idx pkgbits.Index) (*types.Package, string) {
-
- var objPkg *types.Package
- var objName string
- var tag pkgbits.CodeObj
- {
- rname := pr.tempReader(pkgbits.RelocName, idx, pkgbits.SyncObject1)
-
- objPkg, objName = rname.qualifiedIdent()
- assert(objName != "")
-
- tag = pkgbits.CodeObj(rname.Code(pkgbits.SyncCodeObj))
- pr.retireReader(rname)
- }
-
- if tag == pkgbits.ObjStub {
- assert(objPkg == nil || objPkg == types.Unsafe)
- return objPkg, objName
- }
-
- // Ignore local types promoted to global scope (#55110).
- if _, suffix := splitVargenSuffix(objName); suffix != "" {
- return objPkg, objName
- }
-
- if objPkg.Scope().Lookup(objName) == nil {
- dict := pr.objDictIdx(idx)
-
- r := pr.newReader(pkgbits.RelocObj, idx, pkgbits.SyncObject1)
- r.dict = dict
-
- declare := func(obj types.Object) {
- objPkg.Scope().Insert(obj)
- }
-
- switch tag {
- default:
- panic("weird")
-
- case pkgbits.ObjAlias:
- pos := r.pos()
- var tparams []*types.TypeParam
- if r.Version().Has(pkgbits.AliasTypeParamNames) {
- tparams = r.typeParamNames()
- }
- typ := r.typ()
- declare(aliases.NewAlias(r.p.aliases, pos, objPkg, objName, typ, tparams))
-
- case pkgbits.ObjConst:
- pos := r.pos()
- typ := r.typ()
- val := r.Value()
- declare(types.NewConst(pos, objPkg, objName, typ, val))
-
- case pkgbits.ObjFunc:
- pos := r.pos()
- tparams := r.typeParamNames()
- sig := r.signature(nil, nil, tparams)
- declare(types.NewFunc(pos, objPkg, objName, sig))
-
- case pkgbits.ObjType:
- pos := r.pos()
-
- obj := types.NewTypeName(pos, objPkg, objName, nil)
- named := types.NewNamed(obj, nil, nil)
- declare(obj)
-
- named.SetTypeParams(r.typeParamNames())
-
- setUnderlying := func(underlying types.Type) {
- // If the underlying type is an interface, we need to
- // duplicate its methods so we can replace the receiver
- // parameter's type (#49906).
- if iface, ok := types.Unalias(underlying).(*types.Interface); ok && iface.NumExplicitMethods() != 0 {
- methods := make([]*types.Func, iface.NumExplicitMethods())
- for i := range methods {
- fn := iface.ExplicitMethod(i)
- sig := fn.Type().(*types.Signature)
-
- recv := types.NewVar(fn.Pos(), fn.Pkg(), "", named)
- methods[i] = types.NewFunc(fn.Pos(), fn.Pkg(), fn.Name(), types.NewSignature(recv, sig.Params(), sig.Results(), sig.Variadic()))
- }
-
- embeds := make([]types.Type, iface.NumEmbeddeds())
- for i := range embeds {
- embeds[i] = iface.EmbeddedType(i)
- }
-
- newIface := types.NewInterfaceType(methods, embeds)
- r.p.ifaces = append(r.p.ifaces, newIface)
- underlying = newIface
- }
-
- named.SetUnderlying(underlying)
- }
-
- // Since go.dev/cl/455279, we can assume rhs.Underlying() will
- // always be non-nil. However, to temporarily support users of
- // older snapshot releases, we continue to fallback to the old
- // behavior for now.
- //
- // TODO(mdempsky): Remove fallback code and simplify after
- // allowing time for snapshot users to upgrade.
- rhs := r.typ()
- if underlying := rhs.Underlying(); underlying != nil {
- setUnderlying(underlying)
- } else {
- pk := r.p
- pk.laterFor(named, func() {
- // First be sure that the rhs is initialized, if it needs to be initialized.
- delete(pk.laterFors, named) // prevent cycles
- if i, ok := pk.laterFors[rhs]; ok {
- f := pk.laterFns[i]
- pk.laterFns[i] = func() {} // function is running now, so replace it with a no-op
- f() // initialize RHS
- }
- setUnderlying(rhs.Underlying())
- })
- }
-
- for i, n := 0, r.Len(); i < n; i++ {
- named.AddMethod(r.method())
- }
-
- case pkgbits.ObjVar:
- pos := r.pos()
- typ := r.typ()
- declare(types.NewVar(pos, objPkg, objName, typ))
- }
- }
-
- return objPkg, objName
-}
-
-func (pr *pkgReader) objDictIdx(idx pkgbits.Index) *readerDict {
-
- var dict readerDict
-
- {
- r := pr.tempReader(pkgbits.RelocObjDict, idx, pkgbits.SyncObject1)
- if implicits := r.Len(); implicits != 0 {
- errorf("unexpected object with %v implicit type parameter(s)", implicits)
- }
-
- dict.bounds = make([]typeInfo, r.Len())
- for i := range dict.bounds {
- dict.bounds[i] = r.typInfo()
- }
-
- dict.derived = make([]derivedInfo, r.Len())
- dict.derivedTypes = make([]types.Type, len(dict.derived))
- for i := range dict.derived {
- dict.derived[i] = derivedInfo{idx: r.Reloc(pkgbits.RelocType)}
- if r.Version().Has(pkgbits.DerivedInfoNeeded) {
- assert(!r.Bool())
- }
- }
-
- pr.retireReader(r)
- }
- // function references follow, but reader doesn't need those
-
- return &dict
-}
-
-func (r *reader) typeParamNames() []*types.TypeParam {
- r.Sync(pkgbits.SyncTypeParamNames)
-
- // Note: This code assumes it only processes objects without
- // implement type parameters. This is currently fine, because
- // reader is only used to read in exported declarations, which are
- // always package scoped.
-
- if len(r.dict.bounds) == 0 {
- return nil
- }
-
- // Careful: Type parameter lists may have cycles. To allow for this,
- // we construct the type parameter list in two passes: first we
- // create all the TypeNames and TypeParams, then we construct and
- // set the bound type.
-
- r.dict.tparams = make([]*types.TypeParam, len(r.dict.bounds))
- for i := range r.dict.bounds {
- pos := r.pos()
- pkg, name := r.localIdent()
-
- tname := types.NewTypeName(pos, pkg, name, nil)
- r.dict.tparams[i] = types.NewTypeParam(tname, nil)
- }
-
- typs := make([]types.Type, len(r.dict.bounds))
- for i, bound := range r.dict.bounds {
- typs[i] = r.p.typIdx(bound, r.dict)
- }
-
- // TODO(mdempsky): This is subtle, elaborate further.
- //
- // We have to save tparams outside of the closure, because
- // typeParamNames() can be called multiple times with the same
- // dictionary instance.
- //
- // Also, this needs to happen later to make sure SetUnderlying has
- // been called.
- //
- // TODO(mdempsky): Is it safe to have a single "later" slice or do
- // we need to have multiple passes? See comments on CL 386002 and
- // go.dev/issue/52104.
- tparams := r.dict.tparams
- r.p.later(func() {
- for i, typ := range typs {
- tparams[i].SetConstraint(typ)
- }
- })
-
- return r.dict.tparams
-}
-
-func (r *reader) method() *types.Func {
- r.Sync(pkgbits.SyncMethod)
- pos := r.pos()
- pkg, name := r.selector()
-
- rparams := r.typeParamNames()
- sig := r.signature(r.param(), rparams, nil)
-
- _ = r.pos() // TODO(mdempsky): Remove; this is a hacker for linker.go.
- return types.NewFunc(pos, pkg, name, sig)
-}
-
-func (r *reader) qualifiedIdent() (*types.Package, string) { return r.ident(pkgbits.SyncSym) }
-func (r *reader) localIdent() (*types.Package, string) { return r.ident(pkgbits.SyncLocalIdent) }
-func (r *reader) selector() (*types.Package, string) { return r.ident(pkgbits.SyncSelector) }
-
-func (r *reader) ident(marker pkgbits.SyncMarker) (*types.Package, string) {
- r.Sync(marker)
- return r.pkg(), r.String()
-}
-
-// pkgScope returns pkg.Scope().
-// If pkg is nil, it returns types.Universe instead.
-//
-// TODO(mdempsky): Remove after x/tools can depend on Go 1.19.
-func pkgScope(pkg *types.Package) *types.Scope {
- if pkg != nil {
- return pkg.Scope()
- }
- return types.Universe
-}
-
-// See cmd/compile/internal/types.SplitVargenSuffix.
-func splitVargenSuffix(name string) (base, suffix string) {
- i := len(name)
- for i > 0 && name[i-1] >= '0' && name[i-1] <= '9' {
- i--
- }
- const dot = "·"
- if i >= len(dot) && name[i-len(dot):i] == dot {
- i -= len(dot)
- return name[:i], name[i:]
- }
- return name, ""
-}
diff --git a/vendor/golang.org/x/tools/internal/gocommand/invoke.go b/vendor/golang.org/x/tools/internal/gocommand/invoke.go
deleted file mode 100644
index e333efc87f9..00000000000
--- a/vendor/golang.org/x/tools/internal/gocommand/invoke.go
+++ /dev/null
@@ -1,551 +0,0 @@
-// Copyright 2020 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-// Package gocommand is a helper for calling the go command.
-package gocommand
-
-import (
- "bytes"
- "context"
- "encoding/json"
- "errors"
- "fmt"
- "io"
- "log"
- "os"
- "os/exec"
- "path/filepath"
- "regexp"
- "runtime"
- "strconv"
- "strings"
- "sync"
- "time"
-
- "golang.org/x/tools/internal/event"
- "golang.org/x/tools/internal/event/keys"
- "golang.org/x/tools/internal/event/label"
-)
-
-// An Runner will run go command invocations and serialize
-// them if it sees a concurrency error.
-type Runner struct {
- // once guards the runner initialization.
- once sync.Once
-
- // inFlight tracks available workers.
- inFlight chan struct{}
-
- // serialized guards the ability to run a go command serially,
- // to avoid deadlocks when claiming workers.
- serialized chan struct{}
-}
-
-const maxInFlight = 10
-
-func (runner *Runner) initialize() {
- runner.once.Do(func() {
- runner.inFlight = make(chan struct{}, maxInFlight)
- runner.serialized = make(chan struct{}, 1)
- })
-}
-
-// 1.13: go: updates to go.mod needed, but contents have changed
-// 1.14: go: updating go.mod: existing contents have changed since last read
-var modConcurrencyError = regexp.MustCompile(`go:.*go.mod.*contents have changed`)
-
-// event keys for go command invocations
-var (
- verb = keys.NewString("verb", "go command verb")
- directory = keys.NewString("directory", "")
-)
-
-func invLabels(inv Invocation) []label.Label {
- return []label.Label{verb.Of(inv.Verb), directory.Of(inv.WorkingDir)}
-}
-
-// Run is a convenience wrapper around RunRaw.
-// It returns only stdout and a "friendly" error.
-func (runner *Runner) Run(ctx context.Context, inv Invocation) (*bytes.Buffer, error) {
- ctx, done := event.Start(ctx, "gocommand.Runner.Run", invLabels(inv)...)
- defer done()
-
- stdout, _, friendly, _ := runner.RunRaw(ctx, inv)
- return stdout, friendly
-}
-
-// RunPiped runs the invocation serially, always waiting for any concurrent
-// invocations to complete first.
-func (runner *Runner) RunPiped(ctx context.Context, inv Invocation, stdout, stderr io.Writer) error {
- ctx, done := event.Start(ctx, "gocommand.Runner.RunPiped", invLabels(inv)...)
- defer done()
-
- _, err := runner.runPiped(ctx, inv, stdout, stderr)
- return err
-}
-
-// RunRaw runs the invocation, serializing requests only if they fight over
-// go.mod changes.
-// Postcondition: both error results have same nilness.
-func (runner *Runner) RunRaw(ctx context.Context, inv Invocation) (*bytes.Buffer, *bytes.Buffer, error, error) {
- ctx, done := event.Start(ctx, "gocommand.Runner.RunRaw", invLabels(inv)...)
- defer done()
- // Make sure the runner is always initialized.
- runner.initialize()
-
- // First, try to run the go command concurrently.
- stdout, stderr, friendlyErr, err := runner.runConcurrent(ctx, inv)
-
- // If we encounter a load concurrency error, we need to retry serially.
- if friendlyErr != nil && modConcurrencyError.MatchString(friendlyErr.Error()) {
- event.Error(ctx, "Load concurrency error, will retry serially", err)
-
- // Run serially by calling runPiped.
- stdout.Reset()
- stderr.Reset()
- friendlyErr, err = runner.runPiped(ctx, inv, stdout, stderr)
- }
-
- return stdout, stderr, friendlyErr, err
-}
-
-// Postcondition: both error results have same nilness.
-func (runner *Runner) runConcurrent(ctx context.Context, inv Invocation) (*bytes.Buffer, *bytes.Buffer, error, error) {
- // Wait for 1 worker to become available.
- select {
- case <-ctx.Done():
- return nil, nil, ctx.Err(), ctx.Err()
- case runner.inFlight <- struct{}{}:
- defer func() { <-runner.inFlight }()
- }
-
- stdout, stderr := &bytes.Buffer{}, &bytes.Buffer{}
- friendlyErr, err := inv.runWithFriendlyError(ctx, stdout, stderr)
- return stdout, stderr, friendlyErr, err
-}
-
-// Postcondition: both error results have same nilness.
-func (runner *Runner) runPiped(ctx context.Context, inv Invocation, stdout, stderr io.Writer) (error, error) {
- // Make sure the runner is always initialized.
- runner.initialize()
-
- // Acquire the serialization lock. This avoids deadlocks between two
- // runPiped commands.
- select {
- case <-ctx.Done():
- return ctx.Err(), ctx.Err()
- case runner.serialized <- struct{}{}:
- defer func() { <-runner.serialized }()
- }
-
- // Wait for all in-progress go commands to return before proceeding,
- // to avoid load concurrency errors.
- for i := 0; i < maxInFlight; i++ {
- select {
- case <-ctx.Done():
- return ctx.Err(), ctx.Err()
- case runner.inFlight <- struct{}{}:
- // Make sure we always "return" any workers we took.
- defer func() { <-runner.inFlight }()
- }
- }
-
- return inv.runWithFriendlyError(ctx, stdout, stderr)
-}
-
-// An Invocation represents a call to the go command.
-type Invocation struct {
- Verb string
- Args []string
- BuildFlags []string
-
- // If ModFlag is set, the go command is invoked with -mod=ModFlag.
- // TODO(rfindley): remove, in favor of Args.
- ModFlag string
-
- // If ModFile is set, the go command is invoked with -modfile=ModFile.
- // TODO(rfindley): remove, in favor of Args.
- ModFile string
-
- // Overlay is the name of the JSON overlay file that describes
- // unsaved editor buffers; see [WriteOverlays].
- // If set, the go command is invoked with -overlay=Overlay.
- // TODO(rfindley): remove, in favor of Args.
- Overlay string
-
- // If CleanEnv is set, the invocation will run only with the environment
- // in Env, not starting with os.Environ.
- CleanEnv bool
- Env []string
- WorkingDir string
- Logf func(format string, args ...interface{})
-}
-
-// Postcondition: both error results have same nilness.
-func (i *Invocation) runWithFriendlyError(ctx context.Context, stdout, stderr io.Writer) (friendlyError error, rawError error) {
- rawError = i.run(ctx, stdout, stderr)
- if rawError != nil {
- friendlyError = rawError
- // Check for 'go' executable not being found.
- if ee, ok := rawError.(*exec.Error); ok && ee.Err == exec.ErrNotFound {
- friendlyError = fmt.Errorf("go command required, not found: %v", ee)
- }
- if ctx.Err() != nil {
- friendlyError = ctx.Err()
- }
- friendlyError = fmt.Errorf("err: %v: stderr: %s", friendlyError, stderr)
- }
- return
-}
-
-// logf logs if i.Logf is non-nil.
-func (i *Invocation) logf(format string, args ...any) {
- if i.Logf != nil {
- i.Logf(format, args...)
- }
-}
-
-func (i *Invocation) run(ctx context.Context, stdout, stderr io.Writer) error {
- goArgs := []string{i.Verb}
-
- appendModFile := func() {
- if i.ModFile != "" {
- goArgs = append(goArgs, "-modfile="+i.ModFile)
- }
- }
- appendModFlag := func() {
- if i.ModFlag != "" {
- goArgs = append(goArgs, "-mod="+i.ModFlag)
- }
- }
- appendOverlayFlag := func() {
- if i.Overlay != "" {
- goArgs = append(goArgs, "-overlay="+i.Overlay)
- }
- }
-
- switch i.Verb {
- case "env", "version":
- goArgs = append(goArgs, i.Args...)
- case "mod":
- // mod needs the sub-verb before flags.
- goArgs = append(goArgs, i.Args[0])
- appendModFile()
- goArgs = append(goArgs, i.Args[1:]...)
- case "get":
- goArgs = append(goArgs, i.BuildFlags...)
- appendModFile()
- goArgs = append(goArgs, i.Args...)
-
- default: // notably list and build.
- goArgs = append(goArgs, i.BuildFlags...)
- appendModFile()
- appendModFlag()
- appendOverlayFlag()
- goArgs = append(goArgs, i.Args...)
- }
- cmd := exec.Command("go", goArgs...)
- cmd.Stdout = stdout
- cmd.Stderr = stderr
-
- // https://go.dev/issue/59541: don't wait forever copying stderr
- // after the command has exited.
- // After CL 484741 we copy stdout manually, so we we'll stop reading that as
- // soon as ctx is done. However, we also don't want to wait around forever
- // for stderr. Give a much-longer-than-reasonable delay and then assume that
- // something has wedged in the kernel or runtime.
- cmd.WaitDelay = 30 * time.Second
-
- // The cwd gets resolved to the real path. On Darwin, where
- // /tmp is a symlink, this breaks anything that expects the
- // working directory to keep the original path, including the
- // go command when dealing with modules.
- //
- // os.Getwd has a special feature where if the cwd and the PWD
- // are the same node then it trusts the PWD, so by setting it
- // in the env for the child process we fix up all the paths
- // returned by the go command.
- if !i.CleanEnv {
- cmd.Env = os.Environ()
- }
- cmd.Env = append(cmd.Env, i.Env...)
- if i.WorkingDir != "" {
- cmd.Env = append(cmd.Env, "PWD="+i.WorkingDir)
- cmd.Dir = i.WorkingDir
- }
-
- debugStr := cmdDebugStr(cmd)
- i.logf("starting %v", debugStr)
- start := time.Now()
- defer func() {
- i.logf("%s for %v", time.Since(start), debugStr)
- }()
-
- return runCmdContext(ctx, cmd)
-}
-
-// DebugHangingGoCommands may be set by tests to enable additional
-// instrumentation (including panics) for debugging hanging Go commands.
-//
-// See golang/go#54461 for details.
-var DebugHangingGoCommands = false
-
-// runCmdContext is like exec.CommandContext except it sends os.Interrupt
-// before os.Kill.
-func runCmdContext(ctx context.Context, cmd *exec.Cmd) (err error) {
- // If cmd.Stdout is not an *os.File, the exec package will create a pipe and
- // copy it to the Writer in a goroutine until the process has finished and
- // either the pipe reaches EOF or command's WaitDelay expires.
- //
- // However, the output from 'go list' can be quite large, and we don't want to
- // keep reading (and allocating buffers) if we've already decided we don't
- // care about the output. We don't want to wait for the process to finish, and
- // we don't wait to wait for the WaitDelay to expire either.
- //
- // Instead, if cmd.Stdout requires a copying goroutine we explicitly replace
- // it with a pipe (which is an *os.File), which we can close in order to stop
- // copying output as soon as we realize we don't care about it.
- var stdoutW *os.File
- if cmd.Stdout != nil {
- if _, ok := cmd.Stdout.(*os.File); !ok {
- var stdoutR *os.File
- stdoutR, stdoutW, err = os.Pipe()
- if err != nil {
- return err
- }
- prevStdout := cmd.Stdout
- cmd.Stdout = stdoutW
-
- stdoutErr := make(chan error, 1)
- go func() {
- _, err := io.Copy(prevStdout, stdoutR)
- if err != nil {
- err = fmt.Errorf("copying stdout: %w", err)
- }
- stdoutErr <- err
- }()
- defer func() {
- // We started a goroutine to copy a stdout pipe.
- // Wait for it to finish, or terminate it if need be.
- var err2 error
- select {
- case err2 = <-stdoutErr:
- stdoutR.Close()
- case <-ctx.Done():
- stdoutR.Close()
- // Per https://pkg.go.dev/os#File.Close, the call to stdoutR.Close
- // should cause the Read call in io.Copy to unblock and return
- // immediately, but we still need to receive from stdoutErr to confirm
- // that it has happened.
- <-stdoutErr
- err2 = ctx.Err()
- }
- if err == nil {
- err = err2
- }
- }()
-
- // Per https://pkg.go.dev/os/exec#Cmd, “If Stdout and Stderr are the
- // same writer, and have a type that can be compared with ==, at most
- // one goroutine at a time will call Write.”
- //
- // Since we're starting a goroutine that writes to cmd.Stdout, we must
- // also update cmd.Stderr so that it still holds.
- func() {
- defer func() { recover() }()
- if cmd.Stderr == prevStdout {
- cmd.Stderr = cmd.Stdout
- }
- }()
- }
- }
-
- startTime := time.Now()
- err = cmd.Start()
- if stdoutW != nil {
- // The child process has inherited the pipe file,
- // so close the copy held in this process.
- stdoutW.Close()
- stdoutW = nil
- }
- if err != nil {
- return err
- }
-
- resChan := make(chan error, 1)
- go func() {
- resChan <- cmd.Wait()
- }()
-
- // If we're interested in debugging hanging Go commands, stop waiting after a
- // minute and panic with interesting information.
- debug := DebugHangingGoCommands
- if debug {
- timer := time.NewTimer(1 * time.Minute)
- defer timer.Stop()
- select {
- case err := <-resChan:
- return err
- case <-timer.C:
- HandleHangingGoCommand(startTime, cmd)
- case <-ctx.Done():
- }
- } else {
- select {
- case err := <-resChan:
- return err
- case <-ctx.Done():
- }
- }
-
- // Cancelled. Interrupt and see if it ends voluntarily.
- if err := cmd.Process.Signal(os.Interrupt); err == nil {
- // (We used to wait only 1s but this proved
- // fragile on loaded builder machines.)
- timer := time.NewTimer(5 * time.Second)
- defer timer.Stop()
- select {
- case err := <-resChan:
- return err
- case <-timer.C:
- }
- }
-
- // Didn't shut down in response to interrupt. Kill it hard.
- // TODO(rfindley): per advice from bcmills@, it may be better to send SIGQUIT
- // on certain platforms, such as unix.
- if err := cmd.Process.Kill(); err != nil && !errors.Is(err, os.ErrProcessDone) && debug {
- log.Printf("error killing the Go command: %v", err)
- }
-
- return <-resChan
-}
-
-func HandleHangingGoCommand(start time.Time, cmd *exec.Cmd) {
- switch runtime.GOOS {
- case "linux", "darwin", "freebsd", "netbsd":
- fmt.Fprintln(os.Stderr, `DETECTED A HANGING GO COMMAND
-
-The gopls test runner has detected a hanging go command. In order to debug
-this, the output of ps and lsof/fstat is printed below.
-
-See golang/go#54461 for more details.`)
-
- fmt.Fprintln(os.Stderr, "\nps axo ppid,pid,command:")
- fmt.Fprintln(os.Stderr, "-------------------------")
- psCmd := exec.Command("ps", "axo", "ppid,pid,command")
- psCmd.Stdout = os.Stderr
- psCmd.Stderr = os.Stderr
- if err := psCmd.Run(); err != nil {
- panic(fmt.Sprintf("running ps: %v", err))
- }
-
- listFiles := "lsof"
- if runtime.GOOS == "freebsd" || runtime.GOOS == "netbsd" {
- listFiles = "fstat"
- }
-
- fmt.Fprintln(os.Stderr, "\n"+listFiles+":")
- fmt.Fprintln(os.Stderr, "-----")
- listFilesCmd := exec.Command(listFiles)
- listFilesCmd.Stdout = os.Stderr
- listFilesCmd.Stderr = os.Stderr
- if err := listFilesCmd.Run(); err != nil {
- panic(fmt.Sprintf("running %s: %v", listFiles, err))
- }
- }
- panic(fmt.Sprintf("detected hanging go command (golang/go#54461); waited %s\n\tcommand:%s\n\tpid:%d", time.Since(start), cmd, cmd.Process.Pid))
-}
-
-func cmdDebugStr(cmd *exec.Cmd) string {
- env := make(map[string]string)
- for _, kv := range cmd.Env {
- split := strings.SplitN(kv, "=", 2)
- if len(split) == 2 {
- k, v := split[0], split[1]
- env[k] = v
- }
- }
-
- var args []string
- for _, arg := range cmd.Args {
- quoted := strconv.Quote(arg)
- if quoted[1:len(quoted)-1] != arg || strings.Contains(arg, " ") {
- args = append(args, quoted)
- } else {
- args = append(args, arg)
- }
- }
- return fmt.Sprintf("GOROOT=%v GOPATH=%v GO111MODULE=%v GOPROXY=%v PWD=%v %v", env["GOROOT"], env["GOPATH"], env["GO111MODULE"], env["GOPROXY"], env["PWD"], strings.Join(args, " "))
-}
-
-// WriteOverlays writes each value in the overlay (see the Overlay
-// field of go/packages.Config) to a temporary file and returns the name
-// of a JSON file describing the mapping that is suitable for the "go
-// list -overlay" flag.
-//
-// On success, the caller must call the cleanup function exactly once
-// when the files are no longer needed.
-func WriteOverlays(overlay map[string][]byte) (filename string, cleanup func(), err error) {
- // Do nothing if there are no overlays in the config.
- if len(overlay) == 0 {
- return "", func() {}, nil
- }
-
- dir, err := os.MkdirTemp("", "gocommand-*")
- if err != nil {
- return "", nil, err
- }
-
- // The caller must clean up this directory,
- // unless this function returns an error.
- // (The cleanup operand of each return
- // statement below is ignored.)
- defer func() {
- cleanup = func() {
- os.RemoveAll(dir)
- }
- if err != nil {
- cleanup()
- cleanup = nil
- }
- }()
-
- // Write each map entry to a temporary file.
- overlays := make(map[string]string)
- for k, v := range overlay {
- // Use a unique basename for each file (001-foo.go),
- // to avoid creating nested directories.
- base := fmt.Sprintf("%d-%s", 1+len(overlays), filepath.Base(k))
- filename := filepath.Join(dir, base)
- err := os.WriteFile(filename, v, 0666)
- if err != nil {
- return "", nil, err
- }
- overlays[k] = filename
- }
-
- // Write the JSON overlay file that maps logical file names to temp files.
- //
- // OverlayJSON is the format overlay files are expected to be in.
- // The Replace map maps from overlaid paths to replacement paths:
- // the Go command will forward all reads trying to open
- // each overlaid path to its replacement path, or consider the overlaid
- // path not to exist if the replacement path is empty.
- //
- // From golang/go#39958.
- type OverlayJSON struct {
- Replace map[string]string `json:"replace,omitempty"`
- }
- b, err := json.Marshal(OverlayJSON{Replace: overlays})
- if err != nil {
- return "", nil, err
- }
- filename = filepath.Join(dir, "overlay.json")
- if err := os.WriteFile(filename, b, 0666); err != nil {
- return "", nil, err
- }
-
- return filename, nil, nil
-}
diff --git a/vendor/golang.org/x/tools/internal/gocommand/vendor.go b/vendor/golang.org/x/tools/internal/gocommand/vendor.go
deleted file mode 100644
index e38d1fb4888..00000000000
--- a/vendor/golang.org/x/tools/internal/gocommand/vendor.go
+++ /dev/null
@@ -1,163 +0,0 @@
-// Copyright 2020 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-package gocommand
-
-import (
- "bytes"
- "context"
- "fmt"
- "os"
- "path/filepath"
- "regexp"
- "strings"
- "time"
-
- "golang.org/x/mod/semver"
-)
-
-// ModuleJSON holds information about a module.
-type ModuleJSON struct {
- Path string // module path
- Version string // module version
- Versions []string // available module versions (with -versions)
- Replace *ModuleJSON // replaced by this module
- Time *time.Time // time version was created
- Update *ModuleJSON // available update, if any (with -u)
- Main bool // is this the main module?
- Indirect bool // is this module only an indirect dependency of main module?
- Dir string // directory holding files for this module, if any
- GoMod string // path to go.mod file used when loading this module, if any
- GoVersion string // go version used in module
-}
-
-var modFlagRegexp = regexp.MustCompile(`-mod[ =](\w+)`)
-
-// VendorEnabled reports whether vendoring is enabled. It takes a *Runner to execute Go commands
-// with the supplied context.Context and Invocation. The Invocation can contain pre-defined fields,
-// of which only Verb and Args are modified to run the appropriate Go command.
-// Inspired by setDefaultBuildMod in modload/init.go
-func VendorEnabled(ctx context.Context, inv Invocation, r *Runner) (bool, *ModuleJSON, error) {
- mainMod, go114, err := getMainModuleAnd114(ctx, inv, r)
- if err != nil {
- return false, nil, err
- }
-
- // We check the GOFLAGS to see if there is anything overridden or not.
- inv.Verb = "env"
- inv.Args = []string{"GOFLAGS"}
- stdout, err := r.Run(ctx, inv)
- if err != nil {
- return false, nil, err
- }
- goflags := string(bytes.TrimSpace(stdout.Bytes()))
- matches := modFlagRegexp.FindStringSubmatch(goflags)
- var modFlag string
- if len(matches) != 0 {
- modFlag = matches[1]
- }
- // Don't override an explicit '-mod=' argument.
- if modFlag == "vendor" {
- return true, mainMod, nil
- } else if modFlag != "" {
- return false, nil, nil
- }
- if mainMod == nil || !go114 {
- return false, nil, nil
- }
- // Check 1.14's automatic vendor mode.
- if fi, err := os.Stat(filepath.Join(mainMod.Dir, "vendor")); err == nil && fi.IsDir() {
- if mainMod.GoVersion != "" && semver.Compare("v"+mainMod.GoVersion, "v1.14") >= 0 {
- // The Go version is at least 1.14, and a vendor directory exists.
- // Set -mod=vendor by default.
- return true, mainMod, nil
- }
- }
- return false, nil, nil
-}
-
-// getMainModuleAnd114 gets one of the main modules' information and whether the
-// go command in use is 1.14+. This is the information needed to figure out
-// if vendoring should be enabled.
-func getMainModuleAnd114(ctx context.Context, inv Invocation, r *Runner) (*ModuleJSON, bool, error) {
- const format = `{{.Path}}
-{{.Dir}}
-{{.GoMod}}
-{{.GoVersion}}
-{{range context.ReleaseTags}}{{if eq . "go1.14"}}{{.}}{{end}}{{end}}
-`
- inv.Verb = "list"
- inv.Args = []string{"-m", "-f", format}
- stdout, err := r.Run(ctx, inv)
- if err != nil {
- return nil, false, err
- }
-
- lines := strings.Split(stdout.String(), "\n")
- if len(lines) < 5 {
- return nil, false, fmt.Errorf("unexpected stdout: %q", stdout.String())
- }
- mod := &ModuleJSON{
- Path: lines[0],
- Dir: lines[1],
- GoMod: lines[2],
- GoVersion: lines[3],
- Main: true,
- }
- return mod, lines[4] == "go1.14", nil
-}
-
-// WorkspaceVendorEnabled reports whether workspace vendoring is enabled. It takes a *Runner to execute Go commands
-// with the supplied context.Context and Invocation. The Invocation can contain pre-defined fields,
-// of which only Verb and Args are modified to run the appropriate Go command.
-// Inspired by setDefaultBuildMod in modload/init.go
-func WorkspaceVendorEnabled(ctx context.Context, inv Invocation, r *Runner) (bool, []*ModuleJSON, error) {
- inv.Verb = "env"
- inv.Args = []string{"GOWORK"}
- stdout, err := r.Run(ctx, inv)
- if err != nil {
- return false, nil, err
- }
- goWork := string(bytes.TrimSpace(stdout.Bytes()))
- if fi, err := os.Stat(filepath.Join(filepath.Dir(goWork), "vendor")); err == nil && fi.IsDir() {
- mainMods, err := getWorkspaceMainModules(ctx, inv, r)
- if err != nil {
- return false, nil, err
- }
- return true, mainMods, nil
- }
- return false, nil, nil
-}
-
-// getWorkspaceMainModules gets the main modules' information.
-// This is the information needed to figure out if vendoring should be enabled.
-func getWorkspaceMainModules(ctx context.Context, inv Invocation, r *Runner) ([]*ModuleJSON, error) {
- const format = `{{.Path}}
-{{.Dir}}
-{{.GoMod}}
-{{.GoVersion}}
-`
- inv.Verb = "list"
- inv.Args = []string{"-m", "-f", format}
- stdout, err := r.Run(ctx, inv)
- if err != nil {
- return nil, err
- }
-
- lines := strings.Split(strings.TrimSuffix(stdout.String(), "\n"), "\n")
- if len(lines) < 4 {
- return nil, fmt.Errorf("unexpected stdout: %q", stdout.String())
- }
- mods := make([]*ModuleJSON, 0, len(lines)/4)
- for i := 0; i < len(lines); i += 4 {
- mods = append(mods, &ModuleJSON{
- Path: lines[i],
- Dir: lines[i+1],
- GoMod: lines[i+2],
- GoVersion: lines[i+3],
- Main: true,
- })
- }
- return mods, nil
-}
diff --git a/vendor/golang.org/x/tools/internal/gocommand/version.go b/vendor/golang.org/x/tools/internal/gocommand/version.go
deleted file mode 100644
index 446c5846a60..00000000000
--- a/vendor/golang.org/x/tools/internal/gocommand/version.go
+++ /dev/null
@@ -1,71 +0,0 @@
-// Copyright 2020 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-package gocommand
-
-import (
- "context"
- "fmt"
- "regexp"
- "strings"
-)
-
-// GoVersion reports the minor version number of the highest release
-// tag built into the go command on the PATH.
-//
-// Note that this may be higher than the version of the go tool used
-// to build this application, and thus the versions of the standard
-// go/{scanner,parser,ast,types} packages that are linked into it.
-// In that case, callers should either downgrade to the version of
-// go used to build the application, or report an error that the
-// application is too old to use the go command on the PATH.
-func GoVersion(ctx context.Context, inv Invocation, r *Runner) (int, error) {
- inv.Verb = "list"
- inv.Args = []string{"-e", "-f", `{{context.ReleaseTags}}`, `--`, `unsafe`}
- inv.BuildFlags = nil // This is not a build command.
- inv.ModFlag = ""
- inv.ModFile = ""
- inv.Env = append(inv.Env[:len(inv.Env):len(inv.Env)], "GO111MODULE=off")
-
- stdoutBytes, err := r.Run(ctx, inv)
- if err != nil {
- return 0, err
- }
- stdout := stdoutBytes.String()
- if len(stdout) < 3 {
- return 0, fmt.Errorf("bad ReleaseTags output: %q", stdout)
- }
- // Split up "[go1.1 go1.15]" and return highest go1.X value.
- tags := strings.Fields(stdout[1 : len(stdout)-2])
- for i := len(tags) - 1; i >= 0; i-- {
- var version int
- if _, err := fmt.Sscanf(tags[i], "go1.%d", &version); err != nil {
- continue
- }
- return version, nil
- }
- return 0, fmt.Errorf("no parseable ReleaseTags in %v", tags)
-}
-
-// GoVersionOutput returns the complete output of the go version command.
-func GoVersionOutput(ctx context.Context, inv Invocation, r *Runner) (string, error) {
- inv.Verb = "version"
- goVersion, err := r.Run(ctx, inv)
- if err != nil {
- return "", err
- }
- return goVersion.String(), nil
-}
-
-// ParseGoVersionOutput extracts the Go version string
-// from the output of the "go version" command.
-// Given an unrecognized form, it returns an empty string.
-func ParseGoVersionOutput(data string) string {
- re := regexp.MustCompile(`^go version (go\S+|devel \S+)`)
- m := re.FindStringSubmatch(data)
- if len(m) != 2 {
- return "" // unrecognized version
- }
- return m[1]
-}
diff --git a/vendor/golang.org/x/tools/internal/packagesinternal/packages.go b/vendor/golang.org/x/tools/internal/packagesinternal/packages.go
deleted file mode 100644
index 44719de173b..00000000000
--- a/vendor/golang.org/x/tools/internal/packagesinternal/packages.go
+++ /dev/null
@@ -1,22 +0,0 @@
-// Copyright 2020 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-// Package packagesinternal exposes internal-only fields from go/packages.
-package packagesinternal
-
-var GetForTest = func(p interface{}) string { return "" }
-var GetDepsErrors = func(p interface{}) []*PackageError { return nil }
-
-type PackageError struct {
- ImportStack []string // shortest path from package named on command line to this one
- Pos string // position of error (if present, file:line:col)
- Err string // the error itself
-}
-
-var TypecheckCgo int
-var DepsErrors int // must be set as a LoadMode to call GetDepsErrors
-var ForTest int // must be set as a LoadMode to call GetForTest
-
-var SetModFlag = func(config interface{}, value string) {}
-var SetModFile = func(config interface{}, value string) {}
diff --git a/vendor/golang.org/x/tools/internal/pkgbits/codes.go b/vendor/golang.org/x/tools/internal/pkgbits/codes.go
deleted file mode 100644
index f0cabde96eb..00000000000
--- a/vendor/golang.org/x/tools/internal/pkgbits/codes.go
+++ /dev/null
@@ -1,77 +0,0 @@
-// Copyright 2021 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-package pkgbits
-
-// A Code is an enum value that can be encoded into bitstreams.
-//
-// Code types are preferable for enum types, because they allow
-// Decoder to detect desyncs.
-type Code interface {
- // Marker returns the SyncMarker for the Code's dynamic type.
- Marker() SyncMarker
-
- // Value returns the Code's ordinal value.
- Value() int
-}
-
-// A CodeVal distinguishes among go/constant.Value encodings.
-type CodeVal int
-
-func (c CodeVal) Marker() SyncMarker { return SyncVal }
-func (c CodeVal) Value() int { return int(c) }
-
-// Note: These values are public and cannot be changed without
-// updating the go/types importers.
-
-const (
- ValBool CodeVal = iota
- ValString
- ValInt64
- ValBigInt
- ValBigRat
- ValBigFloat
-)
-
-// A CodeType distinguishes among go/types.Type encodings.
-type CodeType int
-
-func (c CodeType) Marker() SyncMarker { return SyncType }
-func (c CodeType) Value() int { return int(c) }
-
-// Note: These values are public and cannot be changed without
-// updating the go/types importers.
-
-const (
- TypeBasic CodeType = iota
- TypeNamed
- TypePointer
- TypeSlice
- TypeArray
- TypeChan
- TypeMap
- TypeSignature
- TypeStruct
- TypeInterface
- TypeUnion
- TypeTypeParam
-)
-
-// A CodeObj distinguishes among go/types.Object encodings.
-type CodeObj int
-
-func (c CodeObj) Marker() SyncMarker { return SyncCodeObj }
-func (c CodeObj) Value() int { return int(c) }
-
-// Note: These values are public and cannot be changed without
-// updating the go/types importers.
-
-const (
- ObjAlias CodeObj = iota
- ObjConst
- ObjType
- ObjFunc
- ObjVar
- ObjStub
-)
diff --git a/vendor/golang.org/x/tools/internal/pkgbits/decoder.go b/vendor/golang.org/x/tools/internal/pkgbits/decoder.go
deleted file mode 100644
index f6cb37c5c3d..00000000000
--- a/vendor/golang.org/x/tools/internal/pkgbits/decoder.go
+++ /dev/null
@@ -1,519 +0,0 @@
-// Copyright 2021 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-package pkgbits
-
-import (
- "encoding/binary"
- "errors"
- "fmt"
- "go/constant"
- "go/token"
- "io"
- "math/big"
- "os"
- "runtime"
- "strings"
-)
-
-// A PkgDecoder provides methods for decoding a package's Unified IR
-// export data.
-type PkgDecoder struct {
- // version is the file format version.
- version Version
-
- // sync indicates whether the file uses sync markers.
- sync bool
-
- // pkgPath is the package path for the package to be decoded.
- //
- // TODO(mdempsky): Remove; unneeded since CL 391014.
- pkgPath string
-
- // elemData is the full data payload of the encoded package.
- // Elements are densely and contiguously packed together.
- //
- // The last 8 bytes of elemData are the package fingerprint.
- elemData string
-
- // elemEnds stores the byte-offset end positions of element
- // bitstreams within elemData.
- //
- // For example, element I's bitstream data starts at elemEnds[I-1]
- // (or 0, if I==0) and ends at elemEnds[I].
- //
- // Note: elemEnds is indexed by absolute indices, not
- // section-relative indices.
- elemEnds []uint32
-
- // elemEndsEnds stores the index-offset end positions of relocation
- // sections within elemEnds.
- //
- // For example, section K's end positions start at elemEndsEnds[K-1]
- // (or 0, if K==0) and end at elemEndsEnds[K].
- elemEndsEnds [numRelocs]uint32
-
- scratchRelocEnt []RelocEnt
-}
-
-// PkgPath returns the package path for the package
-//
-// TODO(mdempsky): Remove; unneeded since CL 391014.
-func (pr *PkgDecoder) PkgPath() string { return pr.pkgPath }
-
-// SyncMarkers reports whether pr uses sync markers.
-func (pr *PkgDecoder) SyncMarkers() bool { return pr.sync }
-
-// NewPkgDecoder returns a PkgDecoder initialized to read the Unified
-// IR export data from input. pkgPath is the package path for the
-// compilation unit that produced the export data.
-func NewPkgDecoder(pkgPath, input string) PkgDecoder {
- pr := PkgDecoder{
- pkgPath: pkgPath,
- }
-
- // TODO(mdempsky): Implement direct indexing of input string to
- // avoid copying the position information.
-
- r := strings.NewReader(input)
-
- var ver uint32
- assert(binary.Read(r, binary.LittleEndian, &ver) == nil)
- pr.version = Version(ver)
-
- if pr.version >= numVersions {
- panic(fmt.Errorf("cannot decode %q, export data version %d is greater than maximum supported version %d", pkgPath, pr.version, numVersions-1))
- }
-
- if pr.version.Has(Flags) {
- var flags uint32
- assert(binary.Read(r, binary.LittleEndian, &flags) == nil)
- pr.sync = flags&flagSyncMarkers != 0
- }
-
- assert(binary.Read(r, binary.LittleEndian, pr.elemEndsEnds[:]) == nil)
-
- pr.elemEnds = make([]uint32, pr.elemEndsEnds[len(pr.elemEndsEnds)-1])
- assert(binary.Read(r, binary.LittleEndian, pr.elemEnds[:]) == nil)
-
- pos, err := r.Seek(0, io.SeekCurrent)
- assert(err == nil)
-
- pr.elemData = input[pos:]
-
- const fingerprintSize = 8
- assert(len(pr.elemData)-fingerprintSize == int(pr.elemEnds[len(pr.elemEnds)-1]))
-
- return pr
-}
-
-// NumElems returns the number of elements in section k.
-func (pr *PkgDecoder) NumElems(k RelocKind) int {
- count := int(pr.elemEndsEnds[k])
- if k > 0 {
- count -= int(pr.elemEndsEnds[k-1])
- }
- return count
-}
-
-// TotalElems returns the total number of elements across all sections.
-func (pr *PkgDecoder) TotalElems() int {
- return len(pr.elemEnds)
-}
-
-// Fingerprint returns the package fingerprint.
-func (pr *PkgDecoder) Fingerprint() [8]byte {
- var fp [8]byte
- copy(fp[:], pr.elemData[len(pr.elemData)-8:])
- return fp
-}
-
-// AbsIdx returns the absolute index for the given (section, index)
-// pair.
-func (pr *PkgDecoder) AbsIdx(k RelocKind, idx Index) int {
- absIdx := int(idx)
- if k > 0 {
- absIdx += int(pr.elemEndsEnds[k-1])
- }
- if absIdx >= int(pr.elemEndsEnds[k]) {
- panicf("%v:%v is out of bounds; %v", k, idx, pr.elemEndsEnds)
- }
- return absIdx
-}
-
-// DataIdx returns the raw element bitstream for the given (section,
-// index) pair.
-func (pr *PkgDecoder) DataIdx(k RelocKind, idx Index) string {
- absIdx := pr.AbsIdx(k, idx)
-
- var start uint32
- if absIdx > 0 {
- start = pr.elemEnds[absIdx-1]
- }
- end := pr.elemEnds[absIdx]
-
- return pr.elemData[start:end]
-}
-
-// StringIdx returns the string value for the given string index.
-func (pr *PkgDecoder) StringIdx(idx Index) string {
- return pr.DataIdx(RelocString, idx)
-}
-
-// NewDecoder returns a Decoder for the given (section, index) pair,
-// and decodes the given SyncMarker from the element bitstream.
-func (pr *PkgDecoder) NewDecoder(k RelocKind, idx Index, marker SyncMarker) Decoder {
- r := pr.NewDecoderRaw(k, idx)
- r.Sync(marker)
- return r
-}
-
-// TempDecoder returns a Decoder for the given (section, index) pair,
-// and decodes the given SyncMarker from the element bitstream.
-// If possible the Decoder should be RetireDecoder'd when it is no longer
-// needed, this will avoid heap allocations.
-func (pr *PkgDecoder) TempDecoder(k RelocKind, idx Index, marker SyncMarker) Decoder {
- r := pr.TempDecoderRaw(k, idx)
- r.Sync(marker)
- return r
-}
-
-func (pr *PkgDecoder) RetireDecoder(d *Decoder) {
- pr.scratchRelocEnt = d.Relocs
- d.Relocs = nil
-}
-
-// NewDecoderRaw returns a Decoder for the given (section, index) pair.
-//
-// Most callers should use NewDecoder instead.
-func (pr *PkgDecoder) NewDecoderRaw(k RelocKind, idx Index) Decoder {
- r := Decoder{
- common: pr,
- k: k,
- Idx: idx,
- }
-
- r.Data.Reset(pr.DataIdx(k, idx))
- r.Sync(SyncRelocs)
- r.Relocs = make([]RelocEnt, r.Len())
- for i := range r.Relocs {
- r.Sync(SyncReloc)
- r.Relocs[i] = RelocEnt{RelocKind(r.Len()), Index(r.Len())}
- }
-
- return r
-}
-
-func (pr *PkgDecoder) TempDecoderRaw(k RelocKind, idx Index) Decoder {
- r := Decoder{
- common: pr,
- k: k,
- Idx: idx,
- }
-
- r.Data.Reset(pr.DataIdx(k, idx))
- r.Sync(SyncRelocs)
- l := r.Len()
- if cap(pr.scratchRelocEnt) >= l {
- r.Relocs = pr.scratchRelocEnt[:l]
- pr.scratchRelocEnt = nil
- } else {
- r.Relocs = make([]RelocEnt, l)
- }
- for i := range r.Relocs {
- r.Sync(SyncReloc)
- r.Relocs[i] = RelocEnt{RelocKind(r.Len()), Index(r.Len())}
- }
-
- return r
-}
-
-// A Decoder provides methods for decoding an individual element's
-// bitstream data.
-type Decoder struct {
- common *PkgDecoder
-
- Relocs []RelocEnt
- Data strings.Reader
-
- k RelocKind
- Idx Index
-}
-
-func (r *Decoder) checkErr(err error) {
- if err != nil {
- panicf("unexpected decoding error: %w", err)
- }
-}
-
-func (r *Decoder) rawUvarint() uint64 {
- x, err := readUvarint(&r.Data)
- r.checkErr(err)
- return x
-}
-
-// readUvarint is a type-specialized copy of encoding/binary.ReadUvarint.
-// This avoids the interface conversion and thus has better escape properties,
-// which flows up the stack.
-func readUvarint(r *strings.Reader) (uint64, error) {
- var x uint64
- var s uint
- for i := 0; i < binary.MaxVarintLen64; i++ {
- b, err := r.ReadByte()
- if err != nil {
- if i > 0 && err == io.EOF {
- err = io.ErrUnexpectedEOF
- }
- return x, err
- }
- if b < 0x80 {
- if i == binary.MaxVarintLen64-1 && b > 1 {
- return x, overflow
- }
- return x | uint64(b)<> 1)
- if ux&1 != 0 {
- x = ^x
- }
- return x
-}
-
-func (r *Decoder) rawReloc(k RelocKind, idx int) Index {
- e := r.Relocs[idx]
- assert(e.Kind == k)
- return e.Idx
-}
-
-// Sync decodes a sync marker from the element bitstream and asserts
-// that it matches the expected marker.
-//
-// If r.common.sync is false, then Sync is a no-op.
-func (r *Decoder) Sync(mWant SyncMarker) {
- if !r.common.sync {
- return
- }
-
- pos, _ := r.Data.Seek(0, io.SeekCurrent)
- mHave := SyncMarker(r.rawUvarint())
- writerPCs := make([]int, r.rawUvarint())
- for i := range writerPCs {
- writerPCs[i] = int(r.rawUvarint())
- }
-
- if mHave == mWant {
- return
- }
-
- // There's some tension here between printing:
- //
- // (1) full file paths that tools can recognize (e.g., so emacs
- // hyperlinks the "file:line" text for easy navigation), or
- //
- // (2) short file paths that are easier for humans to read (e.g., by
- // omitting redundant or irrelevant details, so it's easier to
- // focus on the useful bits that remain).
- //
- // The current formatting favors the former, as it seems more
- // helpful in practice. But perhaps the formatting could be improved
- // to better address both concerns. For example, use relative file
- // paths if they would be shorter, or rewrite file paths to contain
- // "$GOROOT" (like objabi.AbsFile does) if tools can be taught how
- // to reliably expand that again.
-
- fmt.Printf("export data desync: package %q, section %v, index %v, offset %v\n", r.common.pkgPath, r.k, r.Idx, pos)
-
- fmt.Printf("\nfound %v, written at:\n", mHave)
- if len(writerPCs) == 0 {
- fmt.Printf("\t[stack trace unavailable; recompile package %q with -d=syncframes]\n", r.common.pkgPath)
- }
- for _, pc := range writerPCs {
- fmt.Printf("\t%s\n", r.common.StringIdx(r.rawReloc(RelocString, pc)))
- }
-
- fmt.Printf("\nexpected %v, reading at:\n", mWant)
- var readerPCs [32]uintptr // TODO(mdempsky): Dynamically size?
- n := runtime.Callers(2, readerPCs[:])
- for _, pc := range fmtFrames(readerPCs[:n]...) {
- fmt.Printf("\t%s\n", pc)
- }
-
- // We already printed a stack trace for the reader, so now we can
- // simply exit. Printing a second one with panic or base.Fatalf
- // would just be noise.
- os.Exit(1)
-}
-
-// Bool decodes and returns a bool value from the element bitstream.
-func (r *Decoder) Bool() bool {
- r.Sync(SyncBool)
- x, err := r.Data.ReadByte()
- r.checkErr(err)
- assert(x < 2)
- return x != 0
-}
-
-// Int64 decodes and returns an int64 value from the element bitstream.
-func (r *Decoder) Int64() int64 {
- r.Sync(SyncInt64)
- return r.rawVarint()
-}
-
-// Uint64 decodes and returns a uint64 value from the element bitstream.
-func (r *Decoder) Uint64() uint64 {
- r.Sync(SyncUint64)
- return r.rawUvarint()
-}
-
-// Len decodes and returns a non-negative int value from the element bitstream.
-func (r *Decoder) Len() int { x := r.Uint64(); v := int(x); assert(uint64(v) == x); return v }
-
-// Int decodes and returns an int value from the element bitstream.
-func (r *Decoder) Int() int { x := r.Int64(); v := int(x); assert(int64(v) == x); return v }
-
-// Uint decodes and returns a uint value from the element bitstream.
-func (r *Decoder) Uint() uint { x := r.Uint64(); v := uint(x); assert(uint64(v) == x); return v }
-
-// Code decodes a Code value from the element bitstream and returns
-// its ordinal value. It's the caller's responsibility to convert the
-// result to an appropriate Code type.
-//
-// TODO(mdempsky): Ideally this method would have signature "Code[T
-// Code] T" instead, but we don't allow generic methods and the
-// compiler can't depend on generics yet anyway.
-func (r *Decoder) Code(mark SyncMarker) int {
- r.Sync(mark)
- return r.Len()
-}
-
-// Reloc decodes a relocation of expected section k from the element
-// bitstream and returns an index to the referenced element.
-func (r *Decoder) Reloc(k RelocKind) Index {
- r.Sync(SyncUseReloc)
- return r.rawReloc(k, r.Len())
-}
-
-// String decodes and returns a string value from the element
-// bitstream.
-func (r *Decoder) String() string {
- r.Sync(SyncString)
- return r.common.StringIdx(r.Reloc(RelocString))
-}
-
-// Strings decodes and returns a variable-length slice of strings from
-// the element bitstream.
-func (r *Decoder) Strings() []string {
- res := make([]string, r.Len())
- for i := range res {
- res[i] = r.String()
- }
- return res
-}
-
-// Value decodes and returns a constant.Value from the element
-// bitstream.
-func (r *Decoder) Value() constant.Value {
- r.Sync(SyncValue)
- isComplex := r.Bool()
- val := r.scalar()
- if isComplex {
- val = constant.BinaryOp(val, token.ADD, constant.MakeImag(r.scalar()))
- }
- return val
-}
-
-func (r *Decoder) scalar() constant.Value {
- switch tag := CodeVal(r.Code(SyncVal)); tag {
- default:
- panic(fmt.Errorf("unexpected scalar tag: %v", tag))
-
- case ValBool:
- return constant.MakeBool(r.Bool())
- case ValString:
- return constant.MakeString(r.String())
- case ValInt64:
- return constant.MakeInt64(r.Int64())
- case ValBigInt:
- return constant.Make(r.bigInt())
- case ValBigRat:
- num := r.bigInt()
- denom := r.bigInt()
- return constant.Make(new(big.Rat).SetFrac(num, denom))
- case ValBigFloat:
- return constant.Make(r.bigFloat())
- }
-}
-
-func (r *Decoder) bigInt() *big.Int {
- v := new(big.Int).SetBytes([]byte(r.String()))
- if r.Bool() {
- v.Neg(v)
- }
- return v
-}
-
-func (r *Decoder) bigFloat() *big.Float {
- v := new(big.Float).SetPrec(512)
- assert(v.UnmarshalText([]byte(r.String())) == nil)
- return v
-}
-
-// @@@ Helpers
-
-// TODO(mdempsky): These should probably be removed. I think they're a
-// smell that the export data format is not yet quite right.
-
-// PeekPkgPath returns the package path for the specified package
-// index.
-func (pr *PkgDecoder) PeekPkgPath(idx Index) string {
- var path string
- {
- r := pr.TempDecoder(RelocPkg, idx, SyncPkgDef)
- path = r.String()
- pr.RetireDecoder(&r)
- }
- if path == "" {
- path = pr.pkgPath
- }
- return path
-}
-
-// PeekObj returns the package path, object name, and CodeObj for the
-// specified object index.
-func (pr *PkgDecoder) PeekObj(idx Index) (string, string, CodeObj) {
- var ridx Index
- var name string
- var rcode int
- {
- r := pr.TempDecoder(RelocName, idx, SyncObject1)
- r.Sync(SyncSym)
- r.Sync(SyncPkg)
- ridx = r.Reloc(RelocPkg)
- name = r.String()
- rcode = r.Code(SyncCodeObj)
- pr.RetireDecoder(&r)
- }
-
- path := pr.PeekPkgPath(ridx)
- assert(name != "")
-
- tag := CodeObj(rcode)
-
- return path, name, tag
-}
-
-// Version reports the version of the bitstream.
-func (w *Decoder) Version() Version { return w.common.version }
diff --git a/vendor/golang.org/x/tools/internal/pkgbits/doc.go b/vendor/golang.org/x/tools/internal/pkgbits/doc.go
deleted file mode 100644
index c8a2796b5e4..00000000000
--- a/vendor/golang.org/x/tools/internal/pkgbits/doc.go
+++ /dev/null
@@ -1,32 +0,0 @@
-// Copyright 2022 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-// Package pkgbits implements low-level coding abstractions for
-// Unified IR's export data format.
-//
-// At a low-level, a package is a collection of bitstream elements.
-// Each element has a "kind" and a dense, non-negative index.
-// Elements can be randomly accessed given their kind and index.
-//
-// Individual elements are sequences of variable-length values (e.g.,
-// integers, booleans, strings, go/constant values, cross-references
-// to other elements). Package pkgbits provides APIs for encoding and
-// decoding these low-level values, but the details of mapping
-// higher-level Go constructs into elements is left to higher-level
-// abstractions.
-//
-// Elements may cross-reference each other with "relocations." For
-// example, an element representing a pointer type has a relocation
-// referring to the element type.
-//
-// Go constructs may be composed as a constellation of multiple
-// elements. For example, a declared function may have one element to
-// describe the object (e.g., its name, type, position), and a
-// separate element to describe its function body. This allows readers
-// some flexibility in efficiently seeking or re-reading data (e.g.,
-// inlining requires re-reading the function body for each inlined
-// call, without needing to re-read the object-level details).
-//
-// This is a copy of internal/pkgbits in the Go implementation.
-package pkgbits
diff --git a/vendor/golang.org/x/tools/internal/pkgbits/encoder.go b/vendor/golang.org/x/tools/internal/pkgbits/encoder.go
deleted file mode 100644
index c17a12399d0..00000000000
--- a/vendor/golang.org/x/tools/internal/pkgbits/encoder.go
+++ /dev/null
@@ -1,392 +0,0 @@
-// Copyright 2021 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-package pkgbits
-
-import (
- "bytes"
- "crypto/md5"
- "encoding/binary"
- "go/constant"
- "io"
- "math/big"
- "runtime"
- "strings"
-)
-
-// A PkgEncoder provides methods for encoding a package's Unified IR
-// export data.
-type PkgEncoder struct {
- // version of the bitstream.
- version Version
-
- // elems holds the bitstream for previously encoded elements.
- elems [numRelocs][]string
-
- // stringsIdx maps previously encoded strings to their index within
- // the RelocString section, to allow deduplication. That is,
- // elems[RelocString][stringsIdx[s]] == s (if present).
- stringsIdx map[string]Index
-
- // syncFrames is the number of frames to write at each sync
- // marker. A negative value means sync markers are omitted.
- syncFrames int
-}
-
-// SyncMarkers reports whether pw uses sync markers.
-func (pw *PkgEncoder) SyncMarkers() bool { return pw.syncFrames >= 0 }
-
-// NewPkgEncoder returns an initialized PkgEncoder.
-//
-// syncFrames is the number of caller frames that should be serialized
-// at Sync points. Serializing additional frames results in larger
-// export data files, but can help diagnosing desync errors in
-// higher-level Unified IR reader/writer code. If syncFrames is
-// negative, then sync markers are omitted entirely.
-func NewPkgEncoder(version Version, syncFrames int) PkgEncoder {
- return PkgEncoder{
- version: version,
- stringsIdx: make(map[string]Index),
- syncFrames: syncFrames,
- }
-}
-
-// DumpTo writes the package's encoded data to out0 and returns the
-// package fingerprint.
-func (pw *PkgEncoder) DumpTo(out0 io.Writer) (fingerprint [8]byte) {
- h := md5.New()
- out := io.MultiWriter(out0, h)
-
- writeUint32 := func(x uint32) {
- assert(binary.Write(out, binary.LittleEndian, x) == nil)
- }
-
- writeUint32(uint32(pw.version))
-
- if pw.version.Has(Flags) {
- var flags uint32
- if pw.SyncMarkers() {
- flags |= flagSyncMarkers
- }
- writeUint32(flags)
- }
-
- // Write elemEndsEnds.
- var sum uint32
- for _, elems := range &pw.elems {
- sum += uint32(len(elems))
- writeUint32(sum)
- }
-
- // Write elemEnds.
- sum = 0
- for _, elems := range &pw.elems {
- for _, elem := range elems {
- sum += uint32(len(elem))
- writeUint32(sum)
- }
- }
-
- // Write elemData.
- for _, elems := range &pw.elems {
- for _, elem := range elems {
- _, err := io.WriteString(out, elem)
- assert(err == nil)
- }
- }
-
- // Write fingerprint.
- copy(fingerprint[:], h.Sum(nil))
- _, err := out0.Write(fingerprint[:])
- assert(err == nil)
-
- return
-}
-
-// StringIdx adds a string value to the strings section, if not
-// already present, and returns its index.
-func (pw *PkgEncoder) StringIdx(s string) Index {
- if idx, ok := pw.stringsIdx[s]; ok {
- assert(pw.elems[RelocString][idx] == s)
- return idx
- }
-
- idx := Index(len(pw.elems[RelocString]))
- pw.elems[RelocString] = append(pw.elems[RelocString], s)
- pw.stringsIdx[s] = idx
- return idx
-}
-
-// NewEncoder returns an Encoder for a new element within the given
-// section, and encodes the given SyncMarker as the start of the
-// element bitstream.
-func (pw *PkgEncoder) NewEncoder(k RelocKind, marker SyncMarker) Encoder {
- e := pw.NewEncoderRaw(k)
- e.Sync(marker)
- return e
-}
-
-// NewEncoderRaw returns an Encoder for a new element within the given
-// section.
-//
-// Most callers should use NewEncoder instead.
-func (pw *PkgEncoder) NewEncoderRaw(k RelocKind) Encoder {
- idx := Index(len(pw.elems[k]))
- pw.elems[k] = append(pw.elems[k], "") // placeholder
-
- return Encoder{
- p: pw,
- k: k,
- Idx: idx,
- }
-}
-
-// An Encoder provides methods for encoding an individual element's
-// bitstream data.
-type Encoder struct {
- p *PkgEncoder
-
- Relocs []RelocEnt
- RelocMap map[RelocEnt]uint32
- Data bytes.Buffer // accumulated element bitstream data
-
- encodingRelocHeader bool
-
- k RelocKind
- Idx Index // index within relocation section
-}
-
-// Flush finalizes the element's bitstream and returns its Index.
-func (w *Encoder) Flush() Index {
- var sb strings.Builder
-
- // Backup the data so we write the relocations at the front.
- var tmp bytes.Buffer
- io.Copy(&tmp, &w.Data)
-
- // TODO(mdempsky): Consider writing these out separately so they're
- // easier to strip, along with function bodies, so that we can prune
- // down to just the data that's relevant to go/types.
- if w.encodingRelocHeader {
- panic("encodingRelocHeader already true; recursive flush?")
- }
- w.encodingRelocHeader = true
- w.Sync(SyncRelocs)
- w.Len(len(w.Relocs))
- for _, rEnt := range w.Relocs {
- w.Sync(SyncReloc)
- w.Len(int(rEnt.Kind))
- w.Len(int(rEnt.Idx))
- }
-
- io.Copy(&sb, &w.Data)
- io.Copy(&sb, &tmp)
- w.p.elems[w.k][w.Idx] = sb.String()
-
- return w.Idx
-}
-
-func (w *Encoder) checkErr(err error) {
- if err != nil {
- panicf("unexpected encoding error: %v", err)
- }
-}
-
-func (w *Encoder) rawUvarint(x uint64) {
- var buf [binary.MaxVarintLen64]byte
- n := binary.PutUvarint(buf[:], x)
- _, err := w.Data.Write(buf[:n])
- w.checkErr(err)
-}
-
-func (w *Encoder) rawVarint(x int64) {
- // Zig-zag encode.
- ux := uint64(x) << 1
- if x < 0 {
- ux = ^ux
- }
-
- w.rawUvarint(ux)
-}
-
-func (w *Encoder) rawReloc(r RelocKind, idx Index) int {
- e := RelocEnt{r, idx}
- if w.RelocMap != nil {
- if i, ok := w.RelocMap[e]; ok {
- return int(i)
- }
- } else {
- w.RelocMap = make(map[RelocEnt]uint32)
- }
-
- i := len(w.Relocs)
- w.RelocMap[e] = uint32(i)
- w.Relocs = append(w.Relocs, e)
- return i
-}
-
-func (w *Encoder) Sync(m SyncMarker) {
- if !w.p.SyncMarkers() {
- return
- }
-
- // Writing out stack frame string references requires working
- // relocations, but writing out the relocations themselves involves
- // sync markers. To prevent infinite recursion, we simply trim the
- // stack frame for sync markers within the relocation header.
- var frames []string
- if !w.encodingRelocHeader && w.p.syncFrames > 0 {
- pcs := make([]uintptr, w.p.syncFrames)
- n := runtime.Callers(2, pcs)
- frames = fmtFrames(pcs[:n]...)
- }
-
- // TODO(mdempsky): Save space by writing out stack frames as a
- // linked list so we can share common stack frames.
- w.rawUvarint(uint64(m))
- w.rawUvarint(uint64(len(frames)))
- for _, frame := range frames {
- w.rawUvarint(uint64(w.rawReloc(RelocString, w.p.StringIdx(frame))))
- }
-}
-
-// Bool encodes and writes a bool value into the element bitstream,
-// and then returns the bool value.
-//
-// For simple, 2-alternative encodings, the idiomatic way to call Bool
-// is something like:
-//
-// if w.Bool(x != 0) {
-// // alternative #1
-// } else {
-// // alternative #2
-// }
-//
-// For multi-alternative encodings, use Code instead.
-func (w *Encoder) Bool(b bool) bool {
- w.Sync(SyncBool)
- var x byte
- if b {
- x = 1
- }
- err := w.Data.WriteByte(x)
- w.checkErr(err)
- return b
-}
-
-// Int64 encodes and writes an int64 value into the element bitstream.
-func (w *Encoder) Int64(x int64) {
- w.Sync(SyncInt64)
- w.rawVarint(x)
-}
-
-// Uint64 encodes and writes a uint64 value into the element bitstream.
-func (w *Encoder) Uint64(x uint64) {
- w.Sync(SyncUint64)
- w.rawUvarint(x)
-}
-
-// Len encodes and writes a non-negative int value into the element bitstream.
-func (w *Encoder) Len(x int) { assert(x >= 0); w.Uint64(uint64(x)) }
-
-// Int encodes and writes an int value into the element bitstream.
-func (w *Encoder) Int(x int) { w.Int64(int64(x)) }
-
-// Uint encodes and writes a uint value into the element bitstream.
-func (w *Encoder) Uint(x uint) { w.Uint64(uint64(x)) }
-
-// Reloc encodes and writes a relocation for the given (section,
-// index) pair into the element bitstream.
-//
-// Note: Only the index is formally written into the element
-// bitstream, so bitstream decoders must know from context which
-// section an encoded relocation refers to.
-func (w *Encoder) Reloc(r RelocKind, idx Index) {
- w.Sync(SyncUseReloc)
- w.Len(w.rawReloc(r, idx))
-}
-
-// Code encodes and writes a Code value into the element bitstream.
-func (w *Encoder) Code(c Code) {
- w.Sync(c.Marker())
- w.Len(c.Value())
-}
-
-// String encodes and writes a string value into the element
-// bitstream.
-//
-// Internally, strings are deduplicated by adding them to the strings
-// section (if not already present), and then writing a relocation
-// into the element bitstream.
-func (w *Encoder) String(s string) {
- w.StringRef(w.p.StringIdx(s))
-}
-
-// StringRef writes a reference to the given index, which must be a
-// previously encoded string value.
-func (w *Encoder) StringRef(idx Index) {
- w.Sync(SyncString)
- w.Reloc(RelocString, idx)
-}
-
-// Strings encodes and writes a variable-length slice of strings into
-// the element bitstream.
-func (w *Encoder) Strings(ss []string) {
- w.Len(len(ss))
- for _, s := range ss {
- w.String(s)
- }
-}
-
-// Value encodes and writes a constant.Value into the element
-// bitstream.
-func (w *Encoder) Value(val constant.Value) {
- w.Sync(SyncValue)
- if w.Bool(val.Kind() == constant.Complex) {
- w.scalar(constant.Real(val))
- w.scalar(constant.Imag(val))
- } else {
- w.scalar(val)
- }
-}
-
-func (w *Encoder) scalar(val constant.Value) {
- switch v := constant.Val(val).(type) {
- default:
- panicf("unhandled %v (%v)", val, val.Kind())
- case bool:
- w.Code(ValBool)
- w.Bool(v)
- case string:
- w.Code(ValString)
- w.String(v)
- case int64:
- w.Code(ValInt64)
- w.Int64(v)
- case *big.Int:
- w.Code(ValBigInt)
- w.bigInt(v)
- case *big.Rat:
- w.Code(ValBigRat)
- w.bigInt(v.Num())
- w.bigInt(v.Denom())
- case *big.Float:
- w.Code(ValBigFloat)
- w.bigFloat(v)
- }
-}
-
-func (w *Encoder) bigInt(v *big.Int) {
- b := v.Bytes()
- w.String(string(b)) // TODO: More efficient encoding.
- w.Bool(v.Sign() < 0)
-}
-
-func (w *Encoder) bigFloat(v *big.Float) {
- b := v.Append(nil, 'p', -1)
- w.String(string(b)) // TODO: More efficient encoding.
-}
-
-// Version reports the version of the bitstream.
-func (w *Encoder) Version() Version { return w.p.version }
diff --git a/vendor/golang.org/x/tools/internal/pkgbits/flags.go b/vendor/golang.org/x/tools/internal/pkgbits/flags.go
deleted file mode 100644
index 654222745fa..00000000000
--- a/vendor/golang.org/x/tools/internal/pkgbits/flags.go
+++ /dev/null
@@ -1,9 +0,0 @@
-// Copyright 2022 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-package pkgbits
-
-const (
- flagSyncMarkers = 1 << iota // file format contains sync markers
-)
diff --git a/vendor/golang.org/x/tools/internal/pkgbits/reloc.go b/vendor/golang.org/x/tools/internal/pkgbits/reloc.go
deleted file mode 100644
index fcdfb97ca99..00000000000
--- a/vendor/golang.org/x/tools/internal/pkgbits/reloc.go
+++ /dev/null
@@ -1,42 +0,0 @@
-// Copyright 2021 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-package pkgbits
-
-// A RelocKind indicates a particular section within a unified IR export.
-type RelocKind int32
-
-// An Index represents a bitstream element index within a particular
-// section.
-type Index int32
-
-// A relocEnt (relocation entry) is an entry in an element's local
-// reference table.
-//
-// TODO(mdempsky): Rename this too.
-type RelocEnt struct {
- Kind RelocKind
- Idx Index
-}
-
-// Reserved indices within the meta relocation section.
-const (
- PublicRootIdx Index = 0
- PrivateRootIdx Index = 1
-)
-
-const (
- RelocString RelocKind = iota
- RelocMeta
- RelocPosBase
- RelocPkg
- RelocName
- RelocType
- RelocObj
- RelocObjExt
- RelocObjDict
- RelocBody
-
- numRelocs = iota
-)
diff --git a/vendor/golang.org/x/tools/internal/pkgbits/support.go b/vendor/golang.org/x/tools/internal/pkgbits/support.go
deleted file mode 100644
index 50534a29553..00000000000
--- a/vendor/golang.org/x/tools/internal/pkgbits/support.go
+++ /dev/null
@@ -1,17 +0,0 @@
-// Copyright 2022 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-package pkgbits
-
-import "fmt"
-
-func assert(b bool) {
- if !b {
- panic("assertion failed")
- }
-}
-
-func panicf(format string, args ...any) {
- panic(fmt.Errorf(format, args...))
-}
diff --git a/vendor/golang.org/x/tools/internal/pkgbits/sync.go b/vendor/golang.org/x/tools/internal/pkgbits/sync.go
deleted file mode 100644
index 1520b73afb9..00000000000
--- a/vendor/golang.org/x/tools/internal/pkgbits/sync.go
+++ /dev/null
@@ -1,136 +0,0 @@
-// Copyright 2021 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-package pkgbits
-
-import (
- "fmt"
- "runtime"
- "strings"
-)
-
-// fmtFrames formats a backtrace for reporting reader/writer desyncs.
-func fmtFrames(pcs ...uintptr) []string {
- res := make([]string, 0, len(pcs))
- walkFrames(pcs, func(file string, line int, name string, offset uintptr) {
- // Trim package from function name. It's just redundant noise.
- name = strings.TrimPrefix(name, "cmd/compile/internal/noder.")
-
- res = append(res, fmt.Sprintf("%s:%v: %s +0x%v", file, line, name, offset))
- })
- return res
-}
-
-type frameVisitor func(file string, line int, name string, offset uintptr)
-
-// walkFrames calls visit for each call frame represented by pcs.
-//
-// pcs should be a slice of PCs, as returned by runtime.Callers.
-func walkFrames(pcs []uintptr, visit frameVisitor) {
- if len(pcs) == 0 {
- return
- }
-
- frames := runtime.CallersFrames(pcs)
- for {
- frame, more := frames.Next()
- visit(frame.File, frame.Line, frame.Function, frame.PC-frame.Entry)
- if !more {
- return
- }
- }
-}
-
-// SyncMarker is an enum type that represents markers that may be
-// written to export data to ensure the reader and writer stay
-// synchronized.
-type SyncMarker int
-
-//go:generate stringer -type=SyncMarker -trimprefix=Sync
-
-const (
- _ SyncMarker = iota
-
- // Public markers (known to go/types importers).
-
- // Low-level coding markers.
- SyncEOF
- SyncBool
- SyncInt64
- SyncUint64
- SyncString
- SyncValue
- SyncVal
- SyncRelocs
- SyncReloc
- SyncUseReloc
-
- // Higher-level object and type markers.
- SyncPublic
- SyncPos
- SyncPosBase
- SyncObject
- SyncObject1
- SyncPkg
- SyncPkgDef
- SyncMethod
- SyncType
- SyncTypeIdx
- SyncTypeParamNames
- SyncSignature
- SyncParams
- SyncParam
- SyncCodeObj
- SyncSym
- SyncLocalIdent
- SyncSelector
-
- // Private markers (only known to cmd/compile).
- SyncPrivate
-
- SyncFuncExt
- SyncVarExt
- SyncTypeExt
- SyncPragma
-
- SyncExprList
- SyncExprs
- SyncExpr
- SyncExprType
- SyncAssign
- SyncOp
- SyncFuncLit
- SyncCompLit
-
- SyncDecl
- SyncFuncBody
- SyncOpenScope
- SyncCloseScope
- SyncCloseAnotherScope
- SyncDeclNames
- SyncDeclName
-
- SyncStmts
- SyncBlockStmt
- SyncIfStmt
- SyncForStmt
- SyncSwitchStmt
- SyncRangeStmt
- SyncCaseClause
- SyncCommClause
- SyncSelectStmt
- SyncDecls
- SyncLabeledStmt
- SyncUseObjLocal
- SyncAddLocal
- SyncLinkname
- SyncStmt1
- SyncStmtsEnd
- SyncLabel
- SyncOptLabel
-
- SyncMultiExpr
- SyncRType
- SyncConvRTTI
-)
diff --git a/vendor/golang.org/x/tools/internal/pkgbits/syncmarker_string.go b/vendor/golang.org/x/tools/internal/pkgbits/syncmarker_string.go
deleted file mode 100644
index 582ad56d3e0..00000000000
--- a/vendor/golang.org/x/tools/internal/pkgbits/syncmarker_string.go
+++ /dev/null
@@ -1,92 +0,0 @@
-// Code generated by "stringer -type=SyncMarker -trimprefix=Sync"; DO NOT EDIT.
-
-package pkgbits
-
-import "strconv"
-
-func _() {
- // An "invalid array index" compiler error signifies that the constant values have changed.
- // Re-run the stringer command to generate them again.
- var x [1]struct{}
- _ = x[SyncEOF-1]
- _ = x[SyncBool-2]
- _ = x[SyncInt64-3]
- _ = x[SyncUint64-4]
- _ = x[SyncString-5]
- _ = x[SyncValue-6]
- _ = x[SyncVal-7]
- _ = x[SyncRelocs-8]
- _ = x[SyncReloc-9]
- _ = x[SyncUseReloc-10]
- _ = x[SyncPublic-11]
- _ = x[SyncPos-12]
- _ = x[SyncPosBase-13]
- _ = x[SyncObject-14]
- _ = x[SyncObject1-15]
- _ = x[SyncPkg-16]
- _ = x[SyncPkgDef-17]
- _ = x[SyncMethod-18]
- _ = x[SyncType-19]
- _ = x[SyncTypeIdx-20]
- _ = x[SyncTypeParamNames-21]
- _ = x[SyncSignature-22]
- _ = x[SyncParams-23]
- _ = x[SyncParam-24]
- _ = x[SyncCodeObj-25]
- _ = x[SyncSym-26]
- _ = x[SyncLocalIdent-27]
- _ = x[SyncSelector-28]
- _ = x[SyncPrivate-29]
- _ = x[SyncFuncExt-30]
- _ = x[SyncVarExt-31]
- _ = x[SyncTypeExt-32]
- _ = x[SyncPragma-33]
- _ = x[SyncExprList-34]
- _ = x[SyncExprs-35]
- _ = x[SyncExpr-36]
- _ = x[SyncExprType-37]
- _ = x[SyncAssign-38]
- _ = x[SyncOp-39]
- _ = x[SyncFuncLit-40]
- _ = x[SyncCompLit-41]
- _ = x[SyncDecl-42]
- _ = x[SyncFuncBody-43]
- _ = x[SyncOpenScope-44]
- _ = x[SyncCloseScope-45]
- _ = x[SyncCloseAnotherScope-46]
- _ = x[SyncDeclNames-47]
- _ = x[SyncDeclName-48]
- _ = x[SyncStmts-49]
- _ = x[SyncBlockStmt-50]
- _ = x[SyncIfStmt-51]
- _ = x[SyncForStmt-52]
- _ = x[SyncSwitchStmt-53]
- _ = x[SyncRangeStmt-54]
- _ = x[SyncCaseClause-55]
- _ = x[SyncCommClause-56]
- _ = x[SyncSelectStmt-57]
- _ = x[SyncDecls-58]
- _ = x[SyncLabeledStmt-59]
- _ = x[SyncUseObjLocal-60]
- _ = x[SyncAddLocal-61]
- _ = x[SyncLinkname-62]
- _ = x[SyncStmt1-63]
- _ = x[SyncStmtsEnd-64]
- _ = x[SyncLabel-65]
- _ = x[SyncOptLabel-66]
- _ = x[SyncMultiExpr-67]
- _ = x[SyncRType-68]
- _ = x[SyncConvRTTI-69]
-}
-
-const _SyncMarker_name = "EOFBoolInt64Uint64StringValueValRelocsRelocUseRelocPublicPosPosBaseObjectObject1PkgPkgDefMethodTypeTypeIdxTypeParamNamesSignatureParamsParamCodeObjSymLocalIdentSelectorPrivateFuncExtVarExtTypeExtPragmaExprListExprsExprExprTypeAssignOpFuncLitCompLitDeclFuncBodyOpenScopeCloseScopeCloseAnotherScopeDeclNamesDeclNameStmtsBlockStmtIfStmtForStmtSwitchStmtRangeStmtCaseClauseCommClauseSelectStmtDeclsLabeledStmtUseObjLocalAddLocalLinknameStmt1StmtsEndLabelOptLabelMultiExprRTypeConvRTTI"
-
-var _SyncMarker_index = [...]uint16{0, 3, 7, 12, 18, 24, 29, 32, 38, 43, 51, 57, 60, 67, 73, 80, 83, 89, 95, 99, 106, 120, 129, 135, 140, 147, 150, 160, 168, 175, 182, 188, 195, 201, 209, 214, 218, 226, 232, 234, 241, 248, 252, 260, 269, 279, 296, 305, 313, 318, 327, 333, 340, 350, 359, 369, 379, 389, 394, 405, 416, 424, 432, 437, 445, 450, 458, 467, 472, 480}
-
-func (i SyncMarker) String() string {
- i -= 1
- if i < 0 || i >= SyncMarker(len(_SyncMarker_index)-1) {
- return "SyncMarker(" + strconv.FormatInt(int64(i+1), 10) + ")"
- }
- return _SyncMarker_name[_SyncMarker_index[i]:_SyncMarker_index[i+1]]
-}
diff --git a/vendor/golang.org/x/tools/internal/pkgbits/version.go b/vendor/golang.org/x/tools/internal/pkgbits/version.go
deleted file mode 100644
index 53af9df22b3..00000000000
--- a/vendor/golang.org/x/tools/internal/pkgbits/version.go
+++ /dev/null
@@ -1,85 +0,0 @@
-// Copyright 2024 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-package pkgbits
-
-// Version indicates a version of a unified IR bitstream.
-// Each Version indicates the addition, removal, or change of
-// new data in the bitstream.
-//
-// These are serialized to disk and the interpretation remains fixed.
-type Version uint32
-
-const (
- // V0: initial prototype.
- //
- // All data that is not assigned a Field is in version V0
- // and has not been deprecated.
- V0 Version = iota
-
- // V1: adds the Flags uint32 word
- V1
-
- // V2: removes unused legacy fields and supports type parameters for aliases.
- // - remove the legacy "has init" bool from the public root
- // - remove obj's "derived func instance" bool
- // - add a TypeParamNames field to ObjAlias
- // - remove derived info "needed" bool
- V2
-
- numVersions = iota
-)
-
-// Field denotes a unit of data in the serialized unified IR bitstream.
-// It is conceptually a like field in a structure.
-//
-// We only really need Fields when the data may or may not be present
-// in a stream based on the Version of the bitstream.
-//
-// Unlike much of pkgbits, Fields are not serialized and
-// can change values as needed.
-type Field int
-
-const (
- // Flags in a uint32 in the header of a bitstream
- // that is used to indicate whether optional features are enabled.
- Flags Field = iota
-
- // Deprecated: HasInit was a bool indicating whether a package
- // has any init functions.
- HasInit
-
- // Deprecated: DerivedFuncInstance was a bool indicating
- // whether an object was a function instance.
- DerivedFuncInstance
-
- // ObjAlias has a list of TypeParamNames.
- AliasTypeParamNames
-
- // Deprecated: DerivedInfoNeeded was a bool indicating
- // whether a type was a derived type.
- DerivedInfoNeeded
-
- numFields = iota
-)
-
-// introduced is the version a field was added.
-var introduced = [numFields]Version{
- Flags: V1,
- AliasTypeParamNames: V2,
-}
-
-// removed is the version a field was removed in or 0 for fields
-// that have not yet been deprecated.
-// (So removed[f]-1 is the last version it is included in.)
-var removed = [numFields]Version{
- HasInit: V2,
- DerivedFuncInstance: V2,
- DerivedInfoNeeded: V2,
-}
-
-// Has reports whether field f is present in a bitstream at version v.
-func (v Version) Has(f Field) bool {
- return introduced[f] <= v && (v < removed[f] || removed[f] == V0)
-}
diff --git a/vendor/golang.org/x/tools/internal/stdlib/manifest.go b/vendor/golang.org/x/tools/internal/stdlib/manifest.go
deleted file mode 100644
index cdaac9ab34d..00000000000
--- a/vendor/golang.org/x/tools/internal/stdlib/manifest.go
+++ /dev/null
@@ -1,17431 +0,0 @@
-// Copyright 2024 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-// Code generated by generate.go. DO NOT EDIT.
-
-package stdlib
-
-var PackageSymbols = map[string][]Symbol{
- "archive/tar": {
- {"(*Header).FileInfo", Method, 1},
- {"(*Reader).Next", Method, 0},
- {"(*Reader).Read", Method, 0},
- {"(*Writer).AddFS", Method, 22},
- {"(*Writer).Close", Method, 0},
- {"(*Writer).Flush", Method, 0},
- {"(*Writer).Write", Method, 0},
- {"(*Writer).WriteHeader", Method, 0},
- {"(Format).String", Method, 10},
- {"ErrFieldTooLong", Var, 0},
- {"ErrHeader", Var, 0},
- {"ErrInsecurePath", Var, 20},
- {"ErrWriteAfterClose", Var, 0},
- {"ErrWriteTooLong", Var, 0},
- {"FileInfoHeader", Func, 1},
- {"FileInfoNames", Type, 23},
- {"Format", Type, 10},
- {"FormatGNU", Const, 10},
- {"FormatPAX", Const, 10},
- {"FormatUSTAR", Const, 10},
- {"FormatUnknown", Const, 10},
- {"Header", Type, 0},
- {"Header.AccessTime", Field, 0},
- {"Header.ChangeTime", Field, 0},
- {"Header.Devmajor", Field, 0},
- {"Header.Devminor", Field, 0},
- {"Header.Format", Field, 10},
- {"Header.Gid", Field, 0},
- {"Header.Gname", Field, 0},
- {"Header.Linkname", Field, 0},
- {"Header.ModTime", Field, 0},
- {"Header.Mode", Field, 0},
- {"Header.Name", Field, 0},
- {"Header.PAXRecords", Field, 10},
- {"Header.Size", Field, 0},
- {"Header.Typeflag", Field, 0},
- {"Header.Uid", Field, 0},
- {"Header.Uname", Field, 0},
- {"Header.Xattrs", Field, 3},
- {"NewReader", Func, 0},
- {"NewWriter", Func, 0},
- {"Reader", Type, 0},
- {"TypeBlock", Const, 0},
- {"TypeChar", Const, 0},
- {"TypeCont", Const, 0},
- {"TypeDir", Const, 0},
- {"TypeFifo", Const, 0},
- {"TypeGNULongLink", Const, 1},
- {"TypeGNULongName", Const, 1},
- {"TypeGNUSparse", Const, 3},
- {"TypeLink", Const, 0},
- {"TypeReg", Const, 0},
- {"TypeRegA", Const, 0},
- {"TypeSymlink", Const, 0},
- {"TypeXGlobalHeader", Const, 0},
- {"TypeXHeader", Const, 0},
- {"Writer", Type, 0},
- },
- "archive/zip": {
- {"(*File).DataOffset", Method, 2},
- {"(*File).FileInfo", Method, 0},
- {"(*File).ModTime", Method, 0},
- {"(*File).Mode", Method, 0},
- {"(*File).Open", Method, 0},
- {"(*File).OpenRaw", Method, 17},
- {"(*File).SetModTime", Method, 0},
- {"(*File).SetMode", Method, 0},
- {"(*FileHeader).FileInfo", Method, 0},
- {"(*FileHeader).ModTime", Method, 0},
- {"(*FileHeader).Mode", Method, 0},
- {"(*FileHeader).SetModTime", Method, 0},
- {"(*FileHeader).SetMode", Method, 0},
- {"(*ReadCloser).Close", Method, 0},
- {"(*ReadCloser).Open", Method, 16},
- {"(*ReadCloser).RegisterDecompressor", Method, 6},
- {"(*Reader).Open", Method, 16},
- {"(*Reader).RegisterDecompressor", Method, 6},
- {"(*Writer).AddFS", Method, 22},
- {"(*Writer).Close", Method, 0},
- {"(*Writer).Copy", Method, 17},
- {"(*Writer).Create", Method, 0},
- {"(*Writer).CreateHeader", Method, 0},
- {"(*Writer).CreateRaw", Method, 17},
- {"(*Writer).Flush", Method, 4},
- {"(*Writer).RegisterCompressor", Method, 6},
- {"(*Writer).SetComment", Method, 10},
- {"(*Writer).SetOffset", Method, 5},
- {"Compressor", Type, 2},
- {"Decompressor", Type, 2},
- {"Deflate", Const, 0},
- {"ErrAlgorithm", Var, 0},
- {"ErrChecksum", Var, 0},
- {"ErrFormat", Var, 0},
- {"ErrInsecurePath", Var, 20},
- {"File", Type, 0},
- {"File.FileHeader", Field, 0},
- {"FileHeader", Type, 0},
- {"FileHeader.CRC32", Field, 0},
- {"FileHeader.Comment", Field, 0},
- {"FileHeader.CompressedSize", Field, 0},
- {"FileHeader.CompressedSize64", Field, 1},
- {"FileHeader.CreatorVersion", Field, 0},
- {"FileHeader.ExternalAttrs", Field, 0},
- {"FileHeader.Extra", Field, 0},
- {"FileHeader.Flags", Field, 0},
- {"FileHeader.Method", Field, 0},
- {"FileHeader.Modified", Field, 10},
- {"FileHeader.ModifiedDate", Field, 0},
- {"FileHeader.ModifiedTime", Field, 0},
- {"FileHeader.Name", Field, 0},
- {"FileHeader.NonUTF8", Field, 10},
- {"FileHeader.ReaderVersion", Field, 0},
- {"FileHeader.UncompressedSize", Field, 0},
- {"FileHeader.UncompressedSize64", Field, 1},
- {"FileInfoHeader", Func, 0},
- {"NewReader", Func, 0},
- {"NewWriter", Func, 0},
- {"OpenReader", Func, 0},
- {"ReadCloser", Type, 0},
- {"ReadCloser.Reader", Field, 0},
- {"Reader", Type, 0},
- {"Reader.Comment", Field, 0},
- {"Reader.File", Field, 0},
- {"RegisterCompressor", Func, 2},
- {"RegisterDecompressor", Func, 2},
- {"Store", Const, 0},
- {"Writer", Type, 0},
- },
- "bufio": {
- {"(*Reader).Buffered", Method, 0},
- {"(*Reader).Discard", Method, 5},
- {"(*Reader).Peek", Method, 0},
- {"(*Reader).Read", Method, 0},
- {"(*Reader).ReadByte", Method, 0},
- {"(*Reader).ReadBytes", Method, 0},
- {"(*Reader).ReadLine", Method, 0},
- {"(*Reader).ReadRune", Method, 0},
- {"(*Reader).ReadSlice", Method, 0},
- {"(*Reader).ReadString", Method, 0},
- {"(*Reader).Reset", Method, 2},
- {"(*Reader).Size", Method, 10},
- {"(*Reader).UnreadByte", Method, 0},
- {"(*Reader).UnreadRune", Method, 0},
- {"(*Reader).WriteTo", Method, 1},
- {"(*Scanner).Buffer", Method, 6},
- {"(*Scanner).Bytes", Method, 1},
- {"(*Scanner).Err", Method, 1},
- {"(*Scanner).Scan", Method, 1},
- {"(*Scanner).Split", Method, 1},
- {"(*Scanner).Text", Method, 1},
- {"(*Writer).Available", Method, 0},
- {"(*Writer).AvailableBuffer", Method, 18},
- {"(*Writer).Buffered", Method, 0},
- {"(*Writer).Flush", Method, 0},
- {"(*Writer).ReadFrom", Method, 1},
- {"(*Writer).Reset", Method, 2},
- {"(*Writer).Size", Method, 10},
- {"(*Writer).Write", Method, 0},
- {"(*Writer).WriteByte", Method, 0},
- {"(*Writer).WriteRune", Method, 0},
- {"(*Writer).WriteString", Method, 0},
- {"(ReadWriter).Available", Method, 0},
- {"(ReadWriter).AvailableBuffer", Method, 18},
- {"(ReadWriter).Discard", Method, 5},
- {"(ReadWriter).Flush", Method, 0},
- {"(ReadWriter).Peek", Method, 0},
- {"(ReadWriter).Read", Method, 0},
- {"(ReadWriter).ReadByte", Method, 0},
- {"(ReadWriter).ReadBytes", Method, 0},
- {"(ReadWriter).ReadFrom", Method, 1},
- {"(ReadWriter).ReadLine", Method, 0},
- {"(ReadWriter).ReadRune", Method, 0},
- {"(ReadWriter).ReadSlice", Method, 0},
- {"(ReadWriter).ReadString", Method, 0},
- {"(ReadWriter).UnreadByte", Method, 0},
- {"(ReadWriter).UnreadRune", Method, 0},
- {"(ReadWriter).Write", Method, 0},
- {"(ReadWriter).WriteByte", Method, 0},
- {"(ReadWriter).WriteRune", Method, 0},
- {"(ReadWriter).WriteString", Method, 0},
- {"(ReadWriter).WriteTo", Method, 1},
- {"ErrAdvanceTooFar", Var, 1},
- {"ErrBadReadCount", Var, 15},
- {"ErrBufferFull", Var, 0},
- {"ErrFinalToken", Var, 6},
- {"ErrInvalidUnreadByte", Var, 0},
- {"ErrInvalidUnreadRune", Var, 0},
- {"ErrNegativeAdvance", Var, 1},
- {"ErrNegativeCount", Var, 0},
- {"ErrTooLong", Var, 1},
- {"MaxScanTokenSize", Const, 1},
- {"NewReadWriter", Func, 0},
- {"NewReader", Func, 0},
- {"NewReaderSize", Func, 0},
- {"NewScanner", Func, 1},
- {"NewWriter", Func, 0},
- {"NewWriterSize", Func, 0},
- {"ReadWriter", Type, 0},
- {"ReadWriter.Reader", Field, 0},
- {"ReadWriter.Writer", Field, 0},
- {"Reader", Type, 0},
- {"ScanBytes", Func, 1},
- {"ScanLines", Func, 1},
- {"ScanRunes", Func, 1},
- {"ScanWords", Func, 1},
- {"Scanner", Type, 1},
- {"SplitFunc", Type, 1},
- {"Writer", Type, 0},
- },
- "bytes": {
- {"(*Buffer).Available", Method, 21},
- {"(*Buffer).AvailableBuffer", Method, 21},
- {"(*Buffer).Bytes", Method, 0},
- {"(*Buffer).Cap", Method, 5},
- {"(*Buffer).Grow", Method, 1},
- {"(*Buffer).Len", Method, 0},
- {"(*Buffer).Next", Method, 0},
- {"(*Buffer).Read", Method, 0},
- {"(*Buffer).ReadByte", Method, 0},
- {"(*Buffer).ReadBytes", Method, 0},
- {"(*Buffer).ReadFrom", Method, 0},
- {"(*Buffer).ReadRune", Method, 0},
- {"(*Buffer).ReadString", Method, 0},
- {"(*Buffer).Reset", Method, 0},
- {"(*Buffer).String", Method, 0},
- {"(*Buffer).Truncate", Method, 0},
- {"(*Buffer).UnreadByte", Method, 0},
- {"(*Buffer).UnreadRune", Method, 0},
- {"(*Buffer).Write", Method, 0},
- {"(*Buffer).WriteByte", Method, 0},
- {"(*Buffer).WriteRune", Method, 0},
- {"(*Buffer).WriteString", Method, 0},
- {"(*Buffer).WriteTo", Method, 0},
- {"(*Reader).Len", Method, 0},
- {"(*Reader).Read", Method, 0},
- {"(*Reader).ReadAt", Method, 0},
- {"(*Reader).ReadByte", Method, 0},
- {"(*Reader).ReadRune", Method, 0},
- {"(*Reader).Reset", Method, 7},
- {"(*Reader).Seek", Method, 0},
- {"(*Reader).Size", Method, 5},
- {"(*Reader).UnreadByte", Method, 0},
- {"(*Reader).UnreadRune", Method, 0},
- {"(*Reader).WriteTo", Method, 1},
- {"Buffer", Type, 0},
- {"Clone", Func, 20},
- {"Compare", Func, 0},
- {"Contains", Func, 0},
- {"ContainsAny", Func, 7},
- {"ContainsFunc", Func, 21},
- {"ContainsRune", Func, 7},
- {"Count", Func, 0},
- {"Cut", Func, 18},
- {"CutPrefix", Func, 20},
- {"CutSuffix", Func, 20},
- {"Equal", Func, 0},
- {"EqualFold", Func, 0},
- {"ErrTooLarge", Var, 0},
- {"Fields", Func, 0},
- {"FieldsFunc", Func, 0},
- {"HasPrefix", Func, 0},
- {"HasSuffix", Func, 0},
- {"Index", Func, 0},
- {"IndexAny", Func, 0},
- {"IndexByte", Func, 0},
- {"IndexFunc", Func, 0},
- {"IndexRune", Func, 0},
- {"Join", Func, 0},
- {"LastIndex", Func, 0},
- {"LastIndexAny", Func, 0},
- {"LastIndexByte", Func, 5},
- {"LastIndexFunc", Func, 0},
- {"Map", Func, 0},
- {"MinRead", Const, 0},
- {"NewBuffer", Func, 0},
- {"NewBufferString", Func, 0},
- {"NewReader", Func, 0},
- {"Reader", Type, 0},
- {"Repeat", Func, 0},
- {"Replace", Func, 0},
- {"ReplaceAll", Func, 12},
- {"Runes", Func, 0},
- {"Split", Func, 0},
- {"SplitAfter", Func, 0},
- {"SplitAfterN", Func, 0},
- {"SplitN", Func, 0},
- {"Title", Func, 0},
- {"ToLower", Func, 0},
- {"ToLowerSpecial", Func, 0},
- {"ToTitle", Func, 0},
- {"ToTitleSpecial", Func, 0},
- {"ToUpper", Func, 0},
- {"ToUpperSpecial", Func, 0},
- {"ToValidUTF8", Func, 13},
- {"Trim", Func, 0},
- {"TrimFunc", Func, 0},
- {"TrimLeft", Func, 0},
- {"TrimLeftFunc", Func, 0},
- {"TrimPrefix", Func, 1},
- {"TrimRight", Func, 0},
- {"TrimRightFunc", Func, 0},
- {"TrimSpace", Func, 0},
- {"TrimSuffix", Func, 1},
- },
- "cmp": {
- {"Compare", Func, 21},
- {"Less", Func, 21},
- {"Or", Func, 22},
- {"Ordered", Type, 21},
- },
- "compress/bzip2": {
- {"(StructuralError).Error", Method, 0},
- {"NewReader", Func, 0},
- {"StructuralError", Type, 0},
- },
- "compress/flate": {
- {"(*ReadError).Error", Method, 0},
- {"(*WriteError).Error", Method, 0},
- {"(*Writer).Close", Method, 0},
- {"(*Writer).Flush", Method, 0},
- {"(*Writer).Reset", Method, 2},
- {"(*Writer).Write", Method, 0},
- {"(CorruptInputError).Error", Method, 0},
- {"(InternalError).Error", Method, 0},
- {"BestCompression", Const, 0},
- {"BestSpeed", Const, 0},
- {"CorruptInputError", Type, 0},
- {"DefaultCompression", Const, 0},
- {"HuffmanOnly", Const, 7},
- {"InternalError", Type, 0},
- {"NewReader", Func, 0},
- {"NewReaderDict", Func, 0},
- {"NewWriter", Func, 0},
- {"NewWriterDict", Func, 0},
- {"NoCompression", Const, 0},
- {"ReadError", Type, 0},
- {"ReadError.Err", Field, 0},
- {"ReadError.Offset", Field, 0},
- {"Reader", Type, 0},
- {"Resetter", Type, 4},
- {"WriteError", Type, 0},
- {"WriteError.Err", Field, 0},
- {"WriteError.Offset", Field, 0},
- {"Writer", Type, 0},
- },
- "compress/gzip": {
- {"(*Reader).Close", Method, 0},
- {"(*Reader).Multistream", Method, 4},
- {"(*Reader).Read", Method, 0},
- {"(*Reader).Reset", Method, 3},
- {"(*Writer).Close", Method, 0},
- {"(*Writer).Flush", Method, 1},
- {"(*Writer).Reset", Method, 2},
- {"(*Writer).Write", Method, 0},
- {"BestCompression", Const, 0},
- {"BestSpeed", Const, 0},
- {"DefaultCompression", Const, 0},
- {"ErrChecksum", Var, 0},
- {"ErrHeader", Var, 0},
- {"Header", Type, 0},
- {"Header.Comment", Field, 0},
- {"Header.Extra", Field, 0},
- {"Header.ModTime", Field, 0},
- {"Header.Name", Field, 0},
- {"Header.OS", Field, 0},
- {"HuffmanOnly", Const, 8},
- {"NewReader", Func, 0},
- {"NewWriter", Func, 0},
- {"NewWriterLevel", Func, 0},
- {"NoCompression", Const, 0},
- {"Reader", Type, 0},
- {"Reader.Header", Field, 0},
- {"Writer", Type, 0},
- {"Writer.Header", Field, 0},
- },
- "compress/lzw": {
- {"(*Reader).Close", Method, 17},
- {"(*Reader).Read", Method, 17},
- {"(*Reader).Reset", Method, 17},
- {"(*Writer).Close", Method, 17},
- {"(*Writer).Reset", Method, 17},
- {"(*Writer).Write", Method, 17},
- {"LSB", Const, 0},
- {"MSB", Const, 0},
- {"NewReader", Func, 0},
- {"NewWriter", Func, 0},
- {"Order", Type, 0},
- {"Reader", Type, 17},
- {"Writer", Type, 17},
- },
- "compress/zlib": {
- {"(*Writer).Close", Method, 0},
- {"(*Writer).Flush", Method, 0},
- {"(*Writer).Reset", Method, 2},
- {"(*Writer).Write", Method, 0},
- {"BestCompression", Const, 0},
- {"BestSpeed", Const, 0},
- {"DefaultCompression", Const, 0},
- {"ErrChecksum", Var, 0},
- {"ErrDictionary", Var, 0},
- {"ErrHeader", Var, 0},
- {"HuffmanOnly", Const, 8},
- {"NewReader", Func, 0},
- {"NewReaderDict", Func, 0},
- {"NewWriter", Func, 0},
- {"NewWriterLevel", Func, 0},
- {"NewWriterLevelDict", Func, 0},
- {"NoCompression", Const, 0},
- {"Resetter", Type, 4},
- {"Writer", Type, 0},
- },
- "container/heap": {
- {"Fix", Func, 2},
- {"Init", Func, 0},
- {"Interface", Type, 0},
- {"Pop", Func, 0},
- {"Push", Func, 0},
- {"Remove", Func, 0},
- },
- "container/list": {
- {"(*Element).Next", Method, 0},
- {"(*Element).Prev", Method, 0},
- {"(*List).Back", Method, 0},
- {"(*List).Front", Method, 0},
- {"(*List).Init", Method, 0},
- {"(*List).InsertAfter", Method, 0},
- {"(*List).InsertBefore", Method, 0},
- {"(*List).Len", Method, 0},
- {"(*List).MoveAfter", Method, 2},
- {"(*List).MoveBefore", Method, 2},
- {"(*List).MoveToBack", Method, 0},
- {"(*List).MoveToFront", Method, 0},
- {"(*List).PushBack", Method, 0},
- {"(*List).PushBackList", Method, 0},
- {"(*List).PushFront", Method, 0},
- {"(*List).PushFrontList", Method, 0},
- {"(*List).Remove", Method, 0},
- {"Element", Type, 0},
- {"Element.Value", Field, 0},
- {"List", Type, 0},
- {"New", Func, 0},
- },
- "container/ring": {
- {"(*Ring).Do", Method, 0},
- {"(*Ring).Len", Method, 0},
- {"(*Ring).Link", Method, 0},
- {"(*Ring).Move", Method, 0},
- {"(*Ring).Next", Method, 0},
- {"(*Ring).Prev", Method, 0},
- {"(*Ring).Unlink", Method, 0},
- {"New", Func, 0},
- {"Ring", Type, 0},
- {"Ring.Value", Field, 0},
- },
- "context": {
- {"AfterFunc", Func, 21},
- {"Background", Func, 7},
- {"CancelCauseFunc", Type, 20},
- {"CancelFunc", Type, 7},
- {"Canceled", Var, 7},
- {"Cause", Func, 20},
- {"Context", Type, 7},
- {"DeadlineExceeded", Var, 7},
- {"TODO", Func, 7},
- {"WithCancel", Func, 7},
- {"WithCancelCause", Func, 20},
- {"WithDeadline", Func, 7},
- {"WithDeadlineCause", Func, 21},
- {"WithTimeout", Func, 7},
- {"WithTimeoutCause", Func, 21},
- {"WithValue", Func, 7},
- {"WithoutCancel", Func, 21},
- },
- "crypto": {
- {"(Hash).Available", Method, 0},
- {"(Hash).HashFunc", Method, 4},
- {"(Hash).New", Method, 0},
- {"(Hash).Size", Method, 0},
- {"(Hash).String", Method, 15},
- {"BLAKE2b_256", Const, 9},
- {"BLAKE2b_384", Const, 9},
- {"BLAKE2b_512", Const, 9},
- {"BLAKE2s_256", Const, 9},
- {"Decrypter", Type, 5},
- {"DecrypterOpts", Type, 5},
- {"Hash", Type, 0},
- {"MD4", Const, 0},
- {"MD5", Const, 0},
- {"MD5SHA1", Const, 0},
- {"PrivateKey", Type, 0},
- {"PublicKey", Type, 2},
- {"RIPEMD160", Const, 0},
- {"RegisterHash", Func, 0},
- {"SHA1", Const, 0},
- {"SHA224", Const, 0},
- {"SHA256", Const, 0},
- {"SHA384", Const, 0},
- {"SHA3_224", Const, 4},
- {"SHA3_256", Const, 4},
- {"SHA3_384", Const, 4},
- {"SHA3_512", Const, 4},
- {"SHA512", Const, 0},
- {"SHA512_224", Const, 5},
- {"SHA512_256", Const, 5},
- {"Signer", Type, 4},
- {"SignerOpts", Type, 4},
- },
- "crypto/aes": {
- {"(KeySizeError).Error", Method, 0},
- {"BlockSize", Const, 0},
- {"KeySizeError", Type, 0},
- {"NewCipher", Func, 0},
- },
- "crypto/cipher": {
- {"(StreamReader).Read", Method, 0},
- {"(StreamWriter).Close", Method, 0},
- {"(StreamWriter).Write", Method, 0},
- {"AEAD", Type, 2},
- {"Block", Type, 0},
- {"BlockMode", Type, 0},
- {"NewCBCDecrypter", Func, 0},
- {"NewCBCEncrypter", Func, 0},
- {"NewCFBDecrypter", Func, 0},
- {"NewCFBEncrypter", Func, 0},
- {"NewCTR", Func, 0},
- {"NewGCM", Func, 2},
- {"NewGCMWithNonceSize", Func, 5},
- {"NewGCMWithTagSize", Func, 11},
- {"NewOFB", Func, 0},
- {"Stream", Type, 0},
- {"StreamReader", Type, 0},
- {"StreamReader.R", Field, 0},
- {"StreamReader.S", Field, 0},
- {"StreamWriter", Type, 0},
- {"StreamWriter.Err", Field, 0},
- {"StreamWriter.S", Field, 0},
- {"StreamWriter.W", Field, 0},
- },
- "crypto/des": {
- {"(KeySizeError).Error", Method, 0},
- {"BlockSize", Const, 0},
- {"KeySizeError", Type, 0},
- {"NewCipher", Func, 0},
- {"NewTripleDESCipher", Func, 0},
- },
- "crypto/dsa": {
- {"ErrInvalidPublicKey", Var, 0},
- {"GenerateKey", Func, 0},
- {"GenerateParameters", Func, 0},
- {"L1024N160", Const, 0},
- {"L2048N224", Const, 0},
- {"L2048N256", Const, 0},
- {"L3072N256", Const, 0},
- {"ParameterSizes", Type, 0},
- {"Parameters", Type, 0},
- {"Parameters.G", Field, 0},
- {"Parameters.P", Field, 0},
- {"Parameters.Q", Field, 0},
- {"PrivateKey", Type, 0},
- {"PrivateKey.PublicKey", Field, 0},
- {"PrivateKey.X", Field, 0},
- {"PublicKey", Type, 0},
- {"PublicKey.Parameters", Field, 0},
- {"PublicKey.Y", Field, 0},
- {"Sign", Func, 0},
- {"Verify", Func, 0},
- },
- "crypto/ecdh": {
- {"(*PrivateKey).Bytes", Method, 20},
- {"(*PrivateKey).Curve", Method, 20},
- {"(*PrivateKey).ECDH", Method, 20},
- {"(*PrivateKey).Equal", Method, 20},
- {"(*PrivateKey).Public", Method, 20},
- {"(*PrivateKey).PublicKey", Method, 20},
- {"(*PublicKey).Bytes", Method, 20},
- {"(*PublicKey).Curve", Method, 20},
- {"(*PublicKey).Equal", Method, 20},
- {"Curve", Type, 20},
- {"P256", Func, 20},
- {"P384", Func, 20},
- {"P521", Func, 20},
- {"PrivateKey", Type, 20},
- {"PublicKey", Type, 20},
- {"X25519", Func, 20},
- },
- "crypto/ecdsa": {
- {"(*PrivateKey).ECDH", Method, 20},
- {"(*PrivateKey).Equal", Method, 15},
- {"(*PrivateKey).Public", Method, 4},
- {"(*PrivateKey).Sign", Method, 4},
- {"(*PublicKey).ECDH", Method, 20},
- {"(*PublicKey).Equal", Method, 15},
- {"(PrivateKey).Add", Method, 0},
- {"(PrivateKey).Double", Method, 0},
- {"(PrivateKey).IsOnCurve", Method, 0},
- {"(PrivateKey).Params", Method, 0},
- {"(PrivateKey).ScalarBaseMult", Method, 0},
- {"(PrivateKey).ScalarMult", Method, 0},
- {"(PublicKey).Add", Method, 0},
- {"(PublicKey).Double", Method, 0},
- {"(PublicKey).IsOnCurve", Method, 0},
- {"(PublicKey).Params", Method, 0},
- {"(PublicKey).ScalarBaseMult", Method, 0},
- {"(PublicKey).ScalarMult", Method, 0},
- {"GenerateKey", Func, 0},
- {"PrivateKey", Type, 0},
- {"PrivateKey.D", Field, 0},
- {"PrivateKey.PublicKey", Field, 0},
- {"PublicKey", Type, 0},
- {"PublicKey.Curve", Field, 0},
- {"PublicKey.X", Field, 0},
- {"PublicKey.Y", Field, 0},
- {"Sign", Func, 0},
- {"SignASN1", Func, 15},
- {"Verify", Func, 0},
- {"VerifyASN1", Func, 15},
- },
- "crypto/ed25519": {
- {"(*Options).HashFunc", Method, 20},
- {"(PrivateKey).Equal", Method, 15},
- {"(PrivateKey).Public", Method, 13},
- {"(PrivateKey).Seed", Method, 13},
- {"(PrivateKey).Sign", Method, 13},
- {"(PublicKey).Equal", Method, 15},
- {"GenerateKey", Func, 13},
- {"NewKeyFromSeed", Func, 13},
- {"Options", Type, 20},
- {"Options.Context", Field, 20},
- {"Options.Hash", Field, 20},
- {"PrivateKey", Type, 13},
- {"PrivateKeySize", Const, 13},
- {"PublicKey", Type, 13},
- {"PublicKeySize", Const, 13},
- {"SeedSize", Const, 13},
- {"Sign", Func, 13},
- {"SignatureSize", Const, 13},
- {"Verify", Func, 13},
- {"VerifyWithOptions", Func, 20},
- },
- "crypto/elliptic": {
- {"(*CurveParams).Add", Method, 0},
- {"(*CurveParams).Double", Method, 0},
- {"(*CurveParams).IsOnCurve", Method, 0},
- {"(*CurveParams).Params", Method, 0},
- {"(*CurveParams).ScalarBaseMult", Method, 0},
- {"(*CurveParams).ScalarMult", Method, 0},
- {"Curve", Type, 0},
- {"CurveParams", Type, 0},
- {"CurveParams.B", Field, 0},
- {"CurveParams.BitSize", Field, 0},
- {"CurveParams.Gx", Field, 0},
- {"CurveParams.Gy", Field, 0},
- {"CurveParams.N", Field, 0},
- {"CurveParams.Name", Field, 5},
- {"CurveParams.P", Field, 0},
- {"GenerateKey", Func, 0},
- {"Marshal", Func, 0},
- {"MarshalCompressed", Func, 15},
- {"P224", Func, 0},
- {"P256", Func, 0},
- {"P384", Func, 0},
- {"P521", Func, 0},
- {"Unmarshal", Func, 0},
- {"UnmarshalCompressed", Func, 15},
- },
- "crypto/hmac": {
- {"Equal", Func, 1},
- {"New", Func, 0},
- },
- "crypto/md5": {
- {"BlockSize", Const, 0},
- {"New", Func, 0},
- {"Size", Const, 0},
- {"Sum", Func, 2},
- },
- "crypto/rand": {
- {"Int", Func, 0},
- {"Prime", Func, 0},
- {"Read", Func, 0},
- {"Reader", Var, 0},
- },
- "crypto/rc4": {
- {"(*Cipher).Reset", Method, 0},
- {"(*Cipher).XORKeyStream", Method, 0},
- {"(KeySizeError).Error", Method, 0},
- {"Cipher", Type, 0},
- {"KeySizeError", Type, 0},
- {"NewCipher", Func, 0},
- },
- "crypto/rsa": {
- {"(*PSSOptions).HashFunc", Method, 4},
- {"(*PrivateKey).Decrypt", Method, 5},
- {"(*PrivateKey).Equal", Method, 15},
- {"(*PrivateKey).Precompute", Method, 0},
- {"(*PrivateKey).Public", Method, 4},
- {"(*PrivateKey).Sign", Method, 4},
- {"(*PrivateKey).Size", Method, 11},
- {"(*PrivateKey).Validate", Method, 0},
- {"(*PublicKey).Equal", Method, 15},
- {"(*PublicKey).Size", Method, 11},
- {"CRTValue", Type, 0},
- {"CRTValue.Coeff", Field, 0},
- {"CRTValue.Exp", Field, 0},
- {"CRTValue.R", Field, 0},
- {"DecryptOAEP", Func, 0},
- {"DecryptPKCS1v15", Func, 0},
- {"DecryptPKCS1v15SessionKey", Func, 0},
- {"EncryptOAEP", Func, 0},
- {"EncryptPKCS1v15", Func, 0},
- {"ErrDecryption", Var, 0},
- {"ErrMessageTooLong", Var, 0},
- {"ErrVerification", Var, 0},
- {"GenerateKey", Func, 0},
- {"GenerateMultiPrimeKey", Func, 0},
- {"OAEPOptions", Type, 5},
- {"OAEPOptions.Hash", Field, 5},
- {"OAEPOptions.Label", Field, 5},
- {"OAEPOptions.MGFHash", Field, 20},
- {"PKCS1v15DecryptOptions", Type, 5},
- {"PKCS1v15DecryptOptions.SessionKeyLen", Field, 5},
- {"PSSOptions", Type, 2},
- {"PSSOptions.Hash", Field, 4},
- {"PSSOptions.SaltLength", Field, 2},
- {"PSSSaltLengthAuto", Const, 2},
- {"PSSSaltLengthEqualsHash", Const, 2},
- {"PrecomputedValues", Type, 0},
- {"PrecomputedValues.CRTValues", Field, 0},
- {"PrecomputedValues.Dp", Field, 0},
- {"PrecomputedValues.Dq", Field, 0},
- {"PrecomputedValues.Qinv", Field, 0},
- {"PrivateKey", Type, 0},
- {"PrivateKey.D", Field, 0},
- {"PrivateKey.Precomputed", Field, 0},
- {"PrivateKey.Primes", Field, 0},
- {"PrivateKey.PublicKey", Field, 0},
- {"PublicKey", Type, 0},
- {"PublicKey.E", Field, 0},
- {"PublicKey.N", Field, 0},
- {"SignPKCS1v15", Func, 0},
- {"SignPSS", Func, 2},
- {"VerifyPKCS1v15", Func, 0},
- {"VerifyPSS", Func, 2},
- },
- "crypto/sha1": {
- {"BlockSize", Const, 0},
- {"New", Func, 0},
- {"Size", Const, 0},
- {"Sum", Func, 2},
- },
- "crypto/sha256": {
- {"BlockSize", Const, 0},
- {"New", Func, 0},
- {"New224", Func, 0},
- {"Size", Const, 0},
- {"Size224", Const, 0},
- {"Sum224", Func, 2},
- {"Sum256", Func, 2},
- },
- "crypto/sha512": {
- {"BlockSize", Const, 0},
- {"New", Func, 0},
- {"New384", Func, 0},
- {"New512_224", Func, 5},
- {"New512_256", Func, 5},
- {"Size", Const, 0},
- {"Size224", Const, 5},
- {"Size256", Const, 5},
- {"Size384", Const, 0},
- {"Sum384", Func, 2},
- {"Sum512", Func, 2},
- {"Sum512_224", Func, 5},
- {"Sum512_256", Func, 5},
- },
- "crypto/subtle": {
- {"ConstantTimeByteEq", Func, 0},
- {"ConstantTimeCompare", Func, 0},
- {"ConstantTimeCopy", Func, 0},
- {"ConstantTimeEq", Func, 0},
- {"ConstantTimeLessOrEq", Func, 2},
- {"ConstantTimeSelect", Func, 0},
- {"XORBytes", Func, 20},
- },
- "crypto/tls": {
- {"(*CertificateRequestInfo).Context", Method, 17},
- {"(*CertificateRequestInfo).SupportsCertificate", Method, 14},
- {"(*CertificateVerificationError).Error", Method, 20},
- {"(*CertificateVerificationError).Unwrap", Method, 20},
- {"(*ClientHelloInfo).Context", Method, 17},
- {"(*ClientHelloInfo).SupportsCertificate", Method, 14},
- {"(*ClientSessionState).ResumptionState", Method, 21},
- {"(*Config).BuildNameToCertificate", Method, 0},
- {"(*Config).Clone", Method, 8},
- {"(*Config).DecryptTicket", Method, 21},
- {"(*Config).EncryptTicket", Method, 21},
- {"(*Config).SetSessionTicketKeys", Method, 5},
- {"(*Conn).Close", Method, 0},
- {"(*Conn).CloseWrite", Method, 8},
- {"(*Conn).ConnectionState", Method, 0},
- {"(*Conn).Handshake", Method, 0},
- {"(*Conn).HandshakeContext", Method, 17},
- {"(*Conn).LocalAddr", Method, 0},
- {"(*Conn).NetConn", Method, 18},
- {"(*Conn).OCSPResponse", Method, 0},
- {"(*Conn).Read", Method, 0},
- {"(*Conn).RemoteAddr", Method, 0},
- {"(*Conn).SetDeadline", Method, 0},
- {"(*Conn).SetReadDeadline", Method, 0},
- {"(*Conn).SetWriteDeadline", Method, 0},
- {"(*Conn).VerifyHostname", Method, 0},
- {"(*Conn).Write", Method, 0},
- {"(*ConnectionState).ExportKeyingMaterial", Method, 11},
- {"(*Dialer).Dial", Method, 15},
- {"(*Dialer).DialContext", Method, 15},
- {"(*ECHRejectionError).Error", Method, 23},
- {"(*QUICConn).Close", Method, 21},
- {"(*QUICConn).ConnectionState", Method, 21},
- {"(*QUICConn).HandleData", Method, 21},
- {"(*QUICConn).NextEvent", Method, 21},
- {"(*QUICConn).SendSessionTicket", Method, 21},
- {"(*QUICConn).SetTransportParameters", Method, 21},
- {"(*QUICConn).Start", Method, 21},
- {"(*QUICConn).StoreSession", Method, 23},
- {"(*SessionState).Bytes", Method, 21},
- {"(AlertError).Error", Method, 21},
- {"(ClientAuthType).String", Method, 15},
- {"(CurveID).String", Method, 15},
- {"(QUICEncryptionLevel).String", Method, 21},
- {"(RecordHeaderError).Error", Method, 6},
- {"(SignatureScheme).String", Method, 15},
- {"AlertError", Type, 21},
- {"Certificate", Type, 0},
- {"Certificate.Certificate", Field, 0},
- {"Certificate.Leaf", Field, 0},
- {"Certificate.OCSPStaple", Field, 0},
- {"Certificate.PrivateKey", Field, 0},
- {"Certificate.SignedCertificateTimestamps", Field, 5},
- {"Certificate.SupportedSignatureAlgorithms", Field, 14},
- {"CertificateRequestInfo", Type, 8},
- {"CertificateRequestInfo.AcceptableCAs", Field, 8},
- {"CertificateRequestInfo.SignatureSchemes", Field, 8},
- {"CertificateRequestInfo.Version", Field, 14},
- {"CertificateVerificationError", Type, 20},
- {"CertificateVerificationError.Err", Field, 20},
- {"CertificateVerificationError.UnverifiedCertificates", Field, 20},
- {"CipherSuite", Type, 14},
- {"CipherSuite.ID", Field, 14},
- {"CipherSuite.Insecure", Field, 14},
- {"CipherSuite.Name", Field, 14},
- {"CipherSuite.SupportedVersions", Field, 14},
- {"CipherSuiteName", Func, 14},
- {"CipherSuites", Func, 14},
- {"Client", Func, 0},
- {"ClientAuthType", Type, 0},
- {"ClientHelloInfo", Type, 4},
- {"ClientHelloInfo.CipherSuites", Field, 4},
- {"ClientHelloInfo.Conn", Field, 8},
- {"ClientHelloInfo.ServerName", Field, 4},
- {"ClientHelloInfo.SignatureSchemes", Field, 8},
- {"ClientHelloInfo.SupportedCurves", Field, 4},
- {"ClientHelloInfo.SupportedPoints", Field, 4},
- {"ClientHelloInfo.SupportedProtos", Field, 8},
- {"ClientHelloInfo.SupportedVersions", Field, 8},
- {"ClientSessionCache", Type, 3},
- {"ClientSessionState", Type, 3},
- {"Config", Type, 0},
- {"Config.Certificates", Field, 0},
- {"Config.CipherSuites", Field, 0},
- {"Config.ClientAuth", Field, 0},
- {"Config.ClientCAs", Field, 0},
- {"Config.ClientSessionCache", Field, 3},
- {"Config.CurvePreferences", Field, 3},
- {"Config.DynamicRecordSizingDisabled", Field, 7},
- {"Config.EncryptedClientHelloConfigList", Field, 23},
- {"Config.EncryptedClientHelloRejectionVerify", Field, 23},
- {"Config.GetCertificate", Field, 4},
- {"Config.GetClientCertificate", Field, 8},
- {"Config.GetConfigForClient", Field, 8},
- {"Config.InsecureSkipVerify", Field, 0},
- {"Config.KeyLogWriter", Field, 8},
- {"Config.MaxVersion", Field, 2},
- {"Config.MinVersion", Field, 2},
- {"Config.NameToCertificate", Field, 0},
- {"Config.NextProtos", Field, 0},
- {"Config.PreferServerCipherSuites", Field, 1},
- {"Config.Rand", Field, 0},
- {"Config.Renegotiation", Field, 7},
- {"Config.RootCAs", Field, 0},
- {"Config.ServerName", Field, 0},
- {"Config.SessionTicketKey", Field, 1},
- {"Config.SessionTicketsDisabled", Field, 1},
- {"Config.Time", Field, 0},
- {"Config.UnwrapSession", Field, 21},
- {"Config.VerifyConnection", Field, 15},
- {"Config.VerifyPeerCertificate", Field, 8},
- {"Config.WrapSession", Field, 21},
- {"Conn", Type, 0},
- {"ConnectionState", Type, 0},
- {"ConnectionState.CipherSuite", Field, 0},
- {"ConnectionState.DidResume", Field, 1},
- {"ConnectionState.ECHAccepted", Field, 23},
- {"ConnectionState.HandshakeComplete", Field, 0},
- {"ConnectionState.NegotiatedProtocol", Field, 0},
- {"ConnectionState.NegotiatedProtocolIsMutual", Field, 0},
- {"ConnectionState.OCSPResponse", Field, 5},
- {"ConnectionState.PeerCertificates", Field, 0},
- {"ConnectionState.ServerName", Field, 0},
- {"ConnectionState.SignedCertificateTimestamps", Field, 5},
- {"ConnectionState.TLSUnique", Field, 4},
- {"ConnectionState.VerifiedChains", Field, 0},
- {"ConnectionState.Version", Field, 3},
- {"CurveID", Type, 3},
- {"CurveP256", Const, 3},
- {"CurveP384", Const, 3},
- {"CurveP521", Const, 3},
- {"Dial", Func, 0},
- {"DialWithDialer", Func, 3},
- {"Dialer", Type, 15},
- {"Dialer.Config", Field, 15},
- {"Dialer.NetDialer", Field, 15},
- {"ECDSAWithP256AndSHA256", Const, 8},
- {"ECDSAWithP384AndSHA384", Const, 8},
- {"ECDSAWithP521AndSHA512", Const, 8},
- {"ECDSAWithSHA1", Const, 10},
- {"ECHRejectionError", Type, 23},
- {"ECHRejectionError.RetryConfigList", Field, 23},
- {"Ed25519", Const, 13},
- {"InsecureCipherSuites", Func, 14},
- {"Listen", Func, 0},
- {"LoadX509KeyPair", Func, 0},
- {"NewLRUClientSessionCache", Func, 3},
- {"NewListener", Func, 0},
- {"NewResumptionState", Func, 21},
- {"NoClientCert", Const, 0},
- {"PKCS1WithSHA1", Const, 8},
- {"PKCS1WithSHA256", Const, 8},
- {"PKCS1WithSHA384", Const, 8},
- {"PKCS1WithSHA512", Const, 8},
- {"PSSWithSHA256", Const, 8},
- {"PSSWithSHA384", Const, 8},
- {"PSSWithSHA512", Const, 8},
- {"ParseSessionState", Func, 21},
- {"QUICClient", Func, 21},
- {"QUICConfig", Type, 21},
- {"QUICConfig.EnableSessionEvents", Field, 23},
- {"QUICConfig.TLSConfig", Field, 21},
- {"QUICConn", Type, 21},
- {"QUICEncryptionLevel", Type, 21},
- {"QUICEncryptionLevelApplication", Const, 21},
- {"QUICEncryptionLevelEarly", Const, 21},
- {"QUICEncryptionLevelHandshake", Const, 21},
- {"QUICEncryptionLevelInitial", Const, 21},
- {"QUICEvent", Type, 21},
- {"QUICEvent.Data", Field, 21},
- {"QUICEvent.Kind", Field, 21},
- {"QUICEvent.Level", Field, 21},
- {"QUICEvent.SessionState", Field, 23},
- {"QUICEvent.Suite", Field, 21},
- {"QUICEventKind", Type, 21},
- {"QUICHandshakeDone", Const, 21},
- {"QUICNoEvent", Const, 21},
- {"QUICRejectedEarlyData", Const, 21},
- {"QUICResumeSession", Const, 23},
- {"QUICServer", Func, 21},
- {"QUICSessionTicketOptions", Type, 21},
- {"QUICSessionTicketOptions.EarlyData", Field, 21},
- {"QUICSessionTicketOptions.Extra", Field, 23},
- {"QUICSetReadSecret", Const, 21},
- {"QUICSetWriteSecret", Const, 21},
- {"QUICStoreSession", Const, 23},
- {"QUICTransportParameters", Const, 21},
- {"QUICTransportParametersRequired", Const, 21},
- {"QUICWriteData", Const, 21},
- {"RecordHeaderError", Type, 6},
- {"RecordHeaderError.Conn", Field, 12},
- {"RecordHeaderError.Msg", Field, 6},
- {"RecordHeaderError.RecordHeader", Field, 6},
- {"RenegotiateFreelyAsClient", Const, 7},
- {"RenegotiateNever", Const, 7},
- {"RenegotiateOnceAsClient", Const, 7},
- {"RenegotiationSupport", Type, 7},
- {"RequestClientCert", Const, 0},
- {"RequireAndVerifyClientCert", Const, 0},
- {"RequireAnyClientCert", Const, 0},
- {"Server", Func, 0},
- {"SessionState", Type, 21},
- {"SessionState.EarlyData", Field, 21},
- {"SessionState.Extra", Field, 21},
- {"SignatureScheme", Type, 8},
- {"TLS_AES_128_GCM_SHA256", Const, 12},
- {"TLS_AES_256_GCM_SHA384", Const, 12},
- {"TLS_CHACHA20_POLY1305_SHA256", Const, 12},
- {"TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA", Const, 2},
- {"TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256", Const, 8},
- {"TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256", Const, 2},
- {"TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA", Const, 2},
- {"TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384", Const, 5},
- {"TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305", Const, 8},
- {"TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256", Const, 14},
- {"TLS_ECDHE_ECDSA_WITH_RC4_128_SHA", Const, 2},
- {"TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA", Const, 0},
- {"TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA", Const, 0},
- {"TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256", Const, 8},
- {"TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256", Const, 2},
- {"TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA", Const, 1},
- {"TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384", Const, 5},
- {"TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305", Const, 8},
- {"TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256", Const, 14},
- {"TLS_ECDHE_RSA_WITH_RC4_128_SHA", Const, 0},
- {"TLS_FALLBACK_SCSV", Const, 4},
- {"TLS_RSA_WITH_3DES_EDE_CBC_SHA", Const, 0},
- {"TLS_RSA_WITH_AES_128_CBC_SHA", Const, 0},
- {"TLS_RSA_WITH_AES_128_CBC_SHA256", Const, 8},
- {"TLS_RSA_WITH_AES_128_GCM_SHA256", Const, 6},
- {"TLS_RSA_WITH_AES_256_CBC_SHA", Const, 1},
- {"TLS_RSA_WITH_AES_256_GCM_SHA384", Const, 6},
- {"TLS_RSA_WITH_RC4_128_SHA", Const, 0},
- {"VerifyClientCertIfGiven", Const, 0},
- {"VersionName", Func, 21},
- {"VersionSSL30", Const, 2},
- {"VersionTLS10", Const, 2},
- {"VersionTLS11", Const, 2},
- {"VersionTLS12", Const, 2},
- {"VersionTLS13", Const, 12},
- {"X25519", Const, 8},
- {"X509KeyPair", Func, 0},
- },
- "crypto/x509": {
- {"(*CertPool).AddCert", Method, 0},
- {"(*CertPool).AddCertWithConstraint", Method, 22},
- {"(*CertPool).AppendCertsFromPEM", Method, 0},
- {"(*CertPool).Clone", Method, 19},
- {"(*CertPool).Equal", Method, 19},
- {"(*CertPool).Subjects", Method, 0},
- {"(*Certificate).CheckCRLSignature", Method, 0},
- {"(*Certificate).CheckSignature", Method, 0},
- {"(*Certificate).CheckSignatureFrom", Method, 0},
- {"(*Certificate).CreateCRL", Method, 0},
- {"(*Certificate).Equal", Method, 0},
- {"(*Certificate).Verify", Method, 0},
- {"(*Certificate).VerifyHostname", Method, 0},
- {"(*CertificateRequest).CheckSignature", Method, 5},
- {"(*OID).UnmarshalBinary", Method, 23},
- {"(*OID).UnmarshalText", Method, 23},
- {"(*RevocationList).CheckSignatureFrom", Method, 19},
- {"(CertificateInvalidError).Error", Method, 0},
- {"(ConstraintViolationError).Error", Method, 0},
- {"(HostnameError).Error", Method, 0},
- {"(InsecureAlgorithmError).Error", Method, 6},
- {"(OID).Equal", Method, 22},
- {"(OID).EqualASN1OID", Method, 22},
- {"(OID).MarshalBinary", Method, 23},
- {"(OID).MarshalText", Method, 23},
- {"(OID).String", Method, 22},
- {"(PublicKeyAlgorithm).String", Method, 10},
- {"(SignatureAlgorithm).String", Method, 6},
- {"(SystemRootsError).Error", Method, 1},
- {"(SystemRootsError).Unwrap", Method, 16},
- {"(UnhandledCriticalExtension).Error", Method, 0},
- {"(UnknownAuthorityError).Error", Method, 0},
- {"CANotAuthorizedForExtKeyUsage", Const, 10},
- {"CANotAuthorizedForThisName", Const, 0},
- {"CertPool", Type, 0},
- {"Certificate", Type, 0},
- {"Certificate.AuthorityKeyId", Field, 0},
- {"Certificate.BasicConstraintsValid", Field, 0},
- {"Certificate.CRLDistributionPoints", Field, 2},
- {"Certificate.DNSNames", Field, 0},
- {"Certificate.EmailAddresses", Field, 0},
- {"Certificate.ExcludedDNSDomains", Field, 9},
- {"Certificate.ExcludedEmailAddresses", Field, 10},
- {"Certificate.ExcludedIPRanges", Field, 10},
- {"Certificate.ExcludedURIDomains", Field, 10},
- {"Certificate.ExtKeyUsage", Field, 0},
- {"Certificate.Extensions", Field, 2},
- {"Certificate.ExtraExtensions", Field, 2},
- {"Certificate.IPAddresses", Field, 1},
- {"Certificate.IsCA", Field, 0},
- {"Certificate.Issuer", Field, 0},
- {"Certificate.IssuingCertificateURL", Field, 2},
- {"Certificate.KeyUsage", Field, 0},
- {"Certificate.MaxPathLen", Field, 0},
- {"Certificate.MaxPathLenZero", Field, 4},
- {"Certificate.NotAfter", Field, 0},
- {"Certificate.NotBefore", Field, 0},
- {"Certificate.OCSPServer", Field, 2},
- {"Certificate.PermittedDNSDomains", Field, 0},
- {"Certificate.PermittedDNSDomainsCritical", Field, 0},
- {"Certificate.PermittedEmailAddresses", Field, 10},
- {"Certificate.PermittedIPRanges", Field, 10},
- {"Certificate.PermittedURIDomains", Field, 10},
- {"Certificate.Policies", Field, 22},
- {"Certificate.PolicyIdentifiers", Field, 0},
- {"Certificate.PublicKey", Field, 0},
- {"Certificate.PublicKeyAlgorithm", Field, 0},
- {"Certificate.Raw", Field, 0},
- {"Certificate.RawIssuer", Field, 0},
- {"Certificate.RawSubject", Field, 0},
- {"Certificate.RawSubjectPublicKeyInfo", Field, 0},
- {"Certificate.RawTBSCertificate", Field, 0},
- {"Certificate.SerialNumber", Field, 0},
- {"Certificate.Signature", Field, 0},
- {"Certificate.SignatureAlgorithm", Field, 0},
- {"Certificate.Subject", Field, 0},
- {"Certificate.SubjectKeyId", Field, 0},
- {"Certificate.URIs", Field, 10},
- {"Certificate.UnhandledCriticalExtensions", Field, 5},
- {"Certificate.UnknownExtKeyUsage", Field, 0},
- {"Certificate.Version", Field, 0},
- {"CertificateInvalidError", Type, 0},
- {"CertificateInvalidError.Cert", Field, 0},
- {"CertificateInvalidError.Detail", Field, 10},
- {"CertificateInvalidError.Reason", Field, 0},
- {"CertificateRequest", Type, 3},
- {"CertificateRequest.Attributes", Field, 3},
- {"CertificateRequest.DNSNames", Field, 3},
- {"CertificateRequest.EmailAddresses", Field, 3},
- {"CertificateRequest.Extensions", Field, 3},
- {"CertificateRequest.ExtraExtensions", Field, 3},
- {"CertificateRequest.IPAddresses", Field, 3},
- {"CertificateRequest.PublicKey", Field, 3},
- {"CertificateRequest.PublicKeyAlgorithm", Field, 3},
- {"CertificateRequest.Raw", Field, 3},
- {"CertificateRequest.RawSubject", Field, 3},
- {"CertificateRequest.RawSubjectPublicKeyInfo", Field, 3},
- {"CertificateRequest.RawTBSCertificateRequest", Field, 3},
- {"CertificateRequest.Signature", Field, 3},
- {"CertificateRequest.SignatureAlgorithm", Field, 3},
- {"CertificateRequest.Subject", Field, 3},
- {"CertificateRequest.URIs", Field, 10},
- {"CertificateRequest.Version", Field, 3},
- {"ConstraintViolationError", Type, 0},
- {"CreateCertificate", Func, 0},
- {"CreateCertificateRequest", Func, 3},
- {"CreateRevocationList", Func, 15},
- {"DSA", Const, 0},
- {"DSAWithSHA1", Const, 0},
- {"DSAWithSHA256", Const, 0},
- {"DecryptPEMBlock", Func, 1},
- {"ECDSA", Const, 1},
- {"ECDSAWithSHA1", Const, 1},
- {"ECDSAWithSHA256", Const, 1},
- {"ECDSAWithSHA384", Const, 1},
- {"ECDSAWithSHA512", Const, 1},
- {"Ed25519", Const, 13},
- {"EncryptPEMBlock", Func, 1},
- {"ErrUnsupportedAlgorithm", Var, 0},
- {"Expired", Const, 0},
- {"ExtKeyUsage", Type, 0},
- {"ExtKeyUsageAny", Const, 0},
- {"ExtKeyUsageClientAuth", Const, 0},
- {"ExtKeyUsageCodeSigning", Const, 0},
- {"ExtKeyUsageEmailProtection", Const, 0},
- {"ExtKeyUsageIPSECEndSystem", Const, 1},
- {"ExtKeyUsageIPSECTunnel", Const, 1},
- {"ExtKeyUsageIPSECUser", Const, 1},
- {"ExtKeyUsageMicrosoftCommercialCodeSigning", Const, 10},
- {"ExtKeyUsageMicrosoftKernelCodeSigning", Const, 10},
- {"ExtKeyUsageMicrosoftServerGatedCrypto", Const, 1},
- {"ExtKeyUsageNetscapeServerGatedCrypto", Const, 1},
- {"ExtKeyUsageOCSPSigning", Const, 0},
- {"ExtKeyUsageServerAuth", Const, 0},
- {"ExtKeyUsageTimeStamping", Const, 0},
- {"HostnameError", Type, 0},
- {"HostnameError.Certificate", Field, 0},
- {"HostnameError.Host", Field, 0},
- {"IncompatibleUsage", Const, 1},
- {"IncorrectPasswordError", Var, 1},
- {"InsecureAlgorithmError", Type, 6},
- {"InvalidReason", Type, 0},
- {"IsEncryptedPEMBlock", Func, 1},
- {"KeyUsage", Type, 0},
- {"KeyUsageCRLSign", Const, 0},
- {"KeyUsageCertSign", Const, 0},
- {"KeyUsageContentCommitment", Const, 0},
- {"KeyUsageDataEncipherment", Const, 0},
- {"KeyUsageDecipherOnly", Const, 0},
- {"KeyUsageDigitalSignature", Const, 0},
- {"KeyUsageEncipherOnly", Const, 0},
- {"KeyUsageKeyAgreement", Const, 0},
- {"KeyUsageKeyEncipherment", Const, 0},
- {"MD2WithRSA", Const, 0},
- {"MD5WithRSA", Const, 0},
- {"MarshalECPrivateKey", Func, 2},
- {"MarshalPKCS1PrivateKey", Func, 0},
- {"MarshalPKCS1PublicKey", Func, 10},
- {"MarshalPKCS8PrivateKey", Func, 10},
- {"MarshalPKIXPublicKey", Func, 0},
- {"NameConstraintsWithoutSANs", Const, 10},
- {"NameMismatch", Const, 8},
- {"NewCertPool", Func, 0},
- {"NotAuthorizedToSign", Const, 0},
- {"OID", Type, 22},
- {"OIDFromInts", Func, 22},
- {"PEMCipher", Type, 1},
- {"PEMCipher3DES", Const, 1},
- {"PEMCipherAES128", Const, 1},
- {"PEMCipherAES192", Const, 1},
- {"PEMCipherAES256", Const, 1},
- {"PEMCipherDES", Const, 1},
- {"ParseCRL", Func, 0},
- {"ParseCertificate", Func, 0},
- {"ParseCertificateRequest", Func, 3},
- {"ParseCertificates", Func, 0},
- {"ParseDERCRL", Func, 0},
- {"ParseECPrivateKey", Func, 1},
- {"ParseOID", Func, 23},
- {"ParsePKCS1PrivateKey", Func, 0},
- {"ParsePKCS1PublicKey", Func, 10},
- {"ParsePKCS8PrivateKey", Func, 0},
- {"ParsePKIXPublicKey", Func, 0},
- {"ParseRevocationList", Func, 19},
- {"PublicKeyAlgorithm", Type, 0},
- {"PureEd25519", Const, 13},
- {"RSA", Const, 0},
- {"RevocationList", Type, 15},
- {"RevocationList.AuthorityKeyId", Field, 19},
- {"RevocationList.Extensions", Field, 19},
- {"RevocationList.ExtraExtensions", Field, 15},
- {"RevocationList.Issuer", Field, 19},
- {"RevocationList.NextUpdate", Field, 15},
- {"RevocationList.Number", Field, 15},
- {"RevocationList.Raw", Field, 19},
- {"RevocationList.RawIssuer", Field, 19},
- {"RevocationList.RawTBSRevocationList", Field, 19},
- {"RevocationList.RevokedCertificateEntries", Field, 21},
- {"RevocationList.RevokedCertificates", Field, 15},
- {"RevocationList.Signature", Field, 19},
- {"RevocationList.SignatureAlgorithm", Field, 15},
- {"RevocationList.ThisUpdate", Field, 15},
- {"RevocationListEntry", Type, 21},
- {"RevocationListEntry.Extensions", Field, 21},
- {"RevocationListEntry.ExtraExtensions", Field, 21},
- {"RevocationListEntry.Raw", Field, 21},
- {"RevocationListEntry.ReasonCode", Field, 21},
- {"RevocationListEntry.RevocationTime", Field, 21},
- {"RevocationListEntry.SerialNumber", Field, 21},
- {"SHA1WithRSA", Const, 0},
- {"SHA256WithRSA", Const, 0},
- {"SHA256WithRSAPSS", Const, 8},
- {"SHA384WithRSA", Const, 0},
- {"SHA384WithRSAPSS", Const, 8},
- {"SHA512WithRSA", Const, 0},
- {"SHA512WithRSAPSS", Const, 8},
- {"SetFallbackRoots", Func, 20},
- {"SignatureAlgorithm", Type, 0},
- {"SystemCertPool", Func, 7},
- {"SystemRootsError", Type, 1},
- {"SystemRootsError.Err", Field, 7},
- {"TooManyConstraints", Const, 10},
- {"TooManyIntermediates", Const, 0},
- {"UnconstrainedName", Const, 10},
- {"UnhandledCriticalExtension", Type, 0},
- {"UnknownAuthorityError", Type, 0},
- {"UnknownAuthorityError.Cert", Field, 8},
- {"UnknownPublicKeyAlgorithm", Const, 0},
- {"UnknownSignatureAlgorithm", Const, 0},
- {"VerifyOptions", Type, 0},
- {"VerifyOptions.CurrentTime", Field, 0},
- {"VerifyOptions.DNSName", Field, 0},
- {"VerifyOptions.Intermediates", Field, 0},
- {"VerifyOptions.KeyUsages", Field, 1},
- {"VerifyOptions.MaxConstraintComparisions", Field, 10},
- {"VerifyOptions.Roots", Field, 0},
- },
- "crypto/x509/pkix": {
- {"(*CertificateList).HasExpired", Method, 0},
- {"(*Name).FillFromRDNSequence", Method, 0},
- {"(Name).String", Method, 10},
- {"(Name).ToRDNSequence", Method, 0},
- {"(RDNSequence).String", Method, 10},
- {"AlgorithmIdentifier", Type, 0},
- {"AlgorithmIdentifier.Algorithm", Field, 0},
- {"AlgorithmIdentifier.Parameters", Field, 0},
- {"AttributeTypeAndValue", Type, 0},
- {"AttributeTypeAndValue.Type", Field, 0},
- {"AttributeTypeAndValue.Value", Field, 0},
- {"AttributeTypeAndValueSET", Type, 3},
- {"AttributeTypeAndValueSET.Type", Field, 3},
- {"AttributeTypeAndValueSET.Value", Field, 3},
- {"CertificateList", Type, 0},
- {"CertificateList.SignatureAlgorithm", Field, 0},
- {"CertificateList.SignatureValue", Field, 0},
- {"CertificateList.TBSCertList", Field, 0},
- {"Extension", Type, 0},
- {"Extension.Critical", Field, 0},
- {"Extension.Id", Field, 0},
- {"Extension.Value", Field, 0},
- {"Name", Type, 0},
- {"Name.CommonName", Field, 0},
- {"Name.Country", Field, 0},
- {"Name.ExtraNames", Field, 5},
- {"Name.Locality", Field, 0},
- {"Name.Names", Field, 0},
- {"Name.Organization", Field, 0},
- {"Name.OrganizationalUnit", Field, 0},
- {"Name.PostalCode", Field, 0},
- {"Name.Province", Field, 0},
- {"Name.SerialNumber", Field, 0},
- {"Name.StreetAddress", Field, 0},
- {"RDNSequence", Type, 0},
- {"RelativeDistinguishedNameSET", Type, 0},
- {"RevokedCertificate", Type, 0},
- {"RevokedCertificate.Extensions", Field, 0},
- {"RevokedCertificate.RevocationTime", Field, 0},
- {"RevokedCertificate.SerialNumber", Field, 0},
- {"TBSCertificateList", Type, 0},
- {"TBSCertificateList.Extensions", Field, 0},
- {"TBSCertificateList.Issuer", Field, 0},
- {"TBSCertificateList.NextUpdate", Field, 0},
- {"TBSCertificateList.Raw", Field, 0},
- {"TBSCertificateList.RevokedCertificates", Field, 0},
- {"TBSCertificateList.Signature", Field, 0},
- {"TBSCertificateList.ThisUpdate", Field, 0},
- {"TBSCertificateList.Version", Field, 0},
- },
- "database/sql": {
- {"(*ColumnType).DatabaseTypeName", Method, 8},
- {"(*ColumnType).DecimalSize", Method, 8},
- {"(*ColumnType).Length", Method, 8},
- {"(*ColumnType).Name", Method, 8},
- {"(*ColumnType).Nullable", Method, 8},
- {"(*ColumnType).ScanType", Method, 8},
- {"(*Conn).BeginTx", Method, 9},
- {"(*Conn).Close", Method, 9},
- {"(*Conn).ExecContext", Method, 9},
- {"(*Conn).PingContext", Method, 9},
- {"(*Conn).PrepareContext", Method, 9},
- {"(*Conn).QueryContext", Method, 9},
- {"(*Conn).QueryRowContext", Method, 9},
- {"(*Conn).Raw", Method, 13},
- {"(*DB).Begin", Method, 0},
- {"(*DB).BeginTx", Method, 8},
- {"(*DB).Close", Method, 0},
- {"(*DB).Conn", Method, 9},
- {"(*DB).Driver", Method, 0},
- {"(*DB).Exec", Method, 0},
- {"(*DB).ExecContext", Method, 8},
- {"(*DB).Ping", Method, 1},
- {"(*DB).PingContext", Method, 8},
- {"(*DB).Prepare", Method, 0},
- {"(*DB).PrepareContext", Method, 8},
- {"(*DB).Query", Method, 0},
- {"(*DB).QueryContext", Method, 8},
- {"(*DB).QueryRow", Method, 0},
- {"(*DB).QueryRowContext", Method, 8},
- {"(*DB).SetConnMaxIdleTime", Method, 15},
- {"(*DB).SetConnMaxLifetime", Method, 6},
- {"(*DB).SetMaxIdleConns", Method, 1},
- {"(*DB).SetMaxOpenConns", Method, 2},
- {"(*DB).Stats", Method, 5},
- {"(*Null).Scan", Method, 22},
- {"(*NullBool).Scan", Method, 0},
- {"(*NullByte).Scan", Method, 17},
- {"(*NullFloat64).Scan", Method, 0},
- {"(*NullInt16).Scan", Method, 17},
- {"(*NullInt32).Scan", Method, 13},
- {"(*NullInt64).Scan", Method, 0},
- {"(*NullString).Scan", Method, 0},
- {"(*NullTime).Scan", Method, 13},
- {"(*Row).Err", Method, 15},
- {"(*Row).Scan", Method, 0},
- {"(*Rows).Close", Method, 0},
- {"(*Rows).ColumnTypes", Method, 8},
- {"(*Rows).Columns", Method, 0},
- {"(*Rows).Err", Method, 0},
- {"(*Rows).Next", Method, 0},
- {"(*Rows).NextResultSet", Method, 8},
- {"(*Rows).Scan", Method, 0},
- {"(*Stmt).Close", Method, 0},
- {"(*Stmt).Exec", Method, 0},
- {"(*Stmt).ExecContext", Method, 8},
- {"(*Stmt).Query", Method, 0},
- {"(*Stmt).QueryContext", Method, 8},
- {"(*Stmt).QueryRow", Method, 0},
- {"(*Stmt).QueryRowContext", Method, 8},
- {"(*Tx).Commit", Method, 0},
- {"(*Tx).Exec", Method, 0},
- {"(*Tx).ExecContext", Method, 8},
- {"(*Tx).Prepare", Method, 0},
- {"(*Tx).PrepareContext", Method, 8},
- {"(*Tx).Query", Method, 0},
- {"(*Tx).QueryContext", Method, 8},
- {"(*Tx).QueryRow", Method, 0},
- {"(*Tx).QueryRowContext", Method, 8},
- {"(*Tx).Rollback", Method, 0},
- {"(*Tx).Stmt", Method, 0},
- {"(*Tx).StmtContext", Method, 8},
- {"(IsolationLevel).String", Method, 11},
- {"(Null).Value", Method, 22},
- {"(NullBool).Value", Method, 0},
- {"(NullByte).Value", Method, 17},
- {"(NullFloat64).Value", Method, 0},
- {"(NullInt16).Value", Method, 17},
- {"(NullInt32).Value", Method, 13},
- {"(NullInt64).Value", Method, 0},
- {"(NullString).Value", Method, 0},
- {"(NullTime).Value", Method, 13},
- {"ColumnType", Type, 8},
- {"Conn", Type, 9},
- {"DB", Type, 0},
- {"DBStats", Type, 5},
- {"DBStats.Idle", Field, 11},
- {"DBStats.InUse", Field, 11},
- {"DBStats.MaxIdleClosed", Field, 11},
- {"DBStats.MaxIdleTimeClosed", Field, 15},
- {"DBStats.MaxLifetimeClosed", Field, 11},
- {"DBStats.MaxOpenConnections", Field, 11},
- {"DBStats.OpenConnections", Field, 5},
- {"DBStats.WaitCount", Field, 11},
- {"DBStats.WaitDuration", Field, 11},
- {"Drivers", Func, 4},
- {"ErrConnDone", Var, 9},
- {"ErrNoRows", Var, 0},
- {"ErrTxDone", Var, 0},
- {"IsolationLevel", Type, 8},
- {"LevelDefault", Const, 8},
- {"LevelLinearizable", Const, 8},
- {"LevelReadCommitted", Const, 8},
- {"LevelReadUncommitted", Const, 8},
- {"LevelRepeatableRead", Const, 8},
- {"LevelSerializable", Const, 8},
- {"LevelSnapshot", Const, 8},
- {"LevelWriteCommitted", Const, 8},
- {"Named", Func, 8},
- {"NamedArg", Type, 8},
- {"NamedArg.Name", Field, 8},
- {"NamedArg.Value", Field, 8},
- {"Null", Type, 22},
- {"Null.V", Field, 22},
- {"Null.Valid", Field, 22},
- {"NullBool", Type, 0},
- {"NullBool.Bool", Field, 0},
- {"NullBool.Valid", Field, 0},
- {"NullByte", Type, 17},
- {"NullByte.Byte", Field, 17},
- {"NullByte.Valid", Field, 17},
- {"NullFloat64", Type, 0},
- {"NullFloat64.Float64", Field, 0},
- {"NullFloat64.Valid", Field, 0},
- {"NullInt16", Type, 17},
- {"NullInt16.Int16", Field, 17},
- {"NullInt16.Valid", Field, 17},
- {"NullInt32", Type, 13},
- {"NullInt32.Int32", Field, 13},
- {"NullInt32.Valid", Field, 13},
- {"NullInt64", Type, 0},
- {"NullInt64.Int64", Field, 0},
- {"NullInt64.Valid", Field, 0},
- {"NullString", Type, 0},
- {"NullString.String", Field, 0},
- {"NullString.Valid", Field, 0},
- {"NullTime", Type, 13},
- {"NullTime.Time", Field, 13},
- {"NullTime.Valid", Field, 13},
- {"Open", Func, 0},
- {"OpenDB", Func, 10},
- {"Out", Type, 9},
- {"Out.Dest", Field, 9},
- {"Out.In", Field, 9},
- {"RawBytes", Type, 0},
- {"Register", Func, 0},
- {"Result", Type, 0},
- {"Row", Type, 0},
- {"Rows", Type, 0},
- {"Scanner", Type, 0},
- {"Stmt", Type, 0},
- {"Tx", Type, 0},
- {"TxOptions", Type, 8},
- {"TxOptions.Isolation", Field, 8},
- {"TxOptions.ReadOnly", Field, 8},
- },
- "database/sql/driver": {
- {"(NotNull).ConvertValue", Method, 0},
- {"(Null).ConvertValue", Method, 0},
- {"(RowsAffected).LastInsertId", Method, 0},
- {"(RowsAffected).RowsAffected", Method, 0},
- {"Bool", Var, 0},
- {"ColumnConverter", Type, 0},
- {"Conn", Type, 0},
- {"ConnBeginTx", Type, 8},
- {"ConnPrepareContext", Type, 8},
- {"Connector", Type, 10},
- {"DefaultParameterConverter", Var, 0},
- {"Driver", Type, 0},
- {"DriverContext", Type, 10},
- {"ErrBadConn", Var, 0},
- {"ErrRemoveArgument", Var, 9},
- {"ErrSkip", Var, 0},
- {"Execer", Type, 0},
- {"ExecerContext", Type, 8},
- {"Int32", Var, 0},
- {"IsScanValue", Func, 0},
- {"IsValue", Func, 0},
- {"IsolationLevel", Type, 8},
- {"NamedValue", Type, 8},
- {"NamedValue.Name", Field, 8},
- {"NamedValue.Ordinal", Field, 8},
- {"NamedValue.Value", Field, 8},
- {"NamedValueChecker", Type, 9},
- {"NotNull", Type, 0},
- {"NotNull.Converter", Field, 0},
- {"Null", Type, 0},
- {"Null.Converter", Field, 0},
- {"Pinger", Type, 8},
- {"Queryer", Type, 1},
- {"QueryerContext", Type, 8},
- {"Result", Type, 0},
- {"ResultNoRows", Var, 0},
- {"Rows", Type, 0},
- {"RowsAffected", Type, 0},
- {"RowsColumnTypeDatabaseTypeName", Type, 8},
- {"RowsColumnTypeLength", Type, 8},
- {"RowsColumnTypeNullable", Type, 8},
- {"RowsColumnTypePrecisionScale", Type, 8},
- {"RowsColumnTypeScanType", Type, 8},
- {"RowsNextResultSet", Type, 8},
- {"SessionResetter", Type, 10},
- {"Stmt", Type, 0},
- {"StmtExecContext", Type, 8},
- {"StmtQueryContext", Type, 8},
- {"String", Var, 0},
- {"Tx", Type, 0},
- {"TxOptions", Type, 8},
- {"TxOptions.Isolation", Field, 8},
- {"TxOptions.ReadOnly", Field, 8},
- {"Validator", Type, 15},
- {"Value", Type, 0},
- {"ValueConverter", Type, 0},
- {"Valuer", Type, 0},
- },
- "debug/buildinfo": {
- {"BuildInfo", Type, 18},
- {"Read", Func, 18},
- {"ReadFile", Func, 18},
- },
- "debug/dwarf": {
- {"(*AddrType).Basic", Method, 0},
- {"(*AddrType).Common", Method, 0},
- {"(*AddrType).Size", Method, 0},
- {"(*AddrType).String", Method, 0},
- {"(*ArrayType).Common", Method, 0},
- {"(*ArrayType).Size", Method, 0},
- {"(*ArrayType).String", Method, 0},
- {"(*BasicType).Basic", Method, 0},
- {"(*BasicType).Common", Method, 0},
- {"(*BasicType).Size", Method, 0},
- {"(*BasicType).String", Method, 0},
- {"(*BoolType).Basic", Method, 0},
- {"(*BoolType).Common", Method, 0},
- {"(*BoolType).Size", Method, 0},
- {"(*BoolType).String", Method, 0},
- {"(*CharType).Basic", Method, 0},
- {"(*CharType).Common", Method, 0},
- {"(*CharType).Size", Method, 0},
- {"(*CharType).String", Method, 0},
- {"(*CommonType).Common", Method, 0},
- {"(*CommonType).Size", Method, 0},
- {"(*ComplexType).Basic", Method, 0},
- {"(*ComplexType).Common", Method, 0},
- {"(*ComplexType).Size", Method, 0},
- {"(*ComplexType).String", Method, 0},
- {"(*Data).AddSection", Method, 14},
- {"(*Data).AddTypes", Method, 3},
- {"(*Data).LineReader", Method, 5},
- {"(*Data).Ranges", Method, 7},
- {"(*Data).Reader", Method, 0},
- {"(*Data).Type", Method, 0},
- {"(*DotDotDotType).Common", Method, 0},
- {"(*DotDotDotType).Size", Method, 0},
- {"(*DotDotDotType).String", Method, 0},
- {"(*Entry).AttrField", Method, 5},
- {"(*Entry).Val", Method, 0},
- {"(*EnumType).Common", Method, 0},
- {"(*EnumType).Size", Method, 0},
- {"(*EnumType).String", Method, 0},
- {"(*FloatType).Basic", Method, 0},
- {"(*FloatType).Common", Method, 0},
- {"(*FloatType).Size", Method, 0},
- {"(*FloatType).String", Method, 0},
- {"(*FuncType).Common", Method, 0},
- {"(*FuncType).Size", Method, 0},
- {"(*FuncType).String", Method, 0},
- {"(*IntType).Basic", Method, 0},
- {"(*IntType).Common", Method, 0},
- {"(*IntType).Size", Method, 0},
- {"(*IntType).String", Method, 0},
- {"(*LineReader).Files", Method, 14},
- {"(*LineReader).Next", Method, 5},
- {"(*LineReader).Reset", Method, 5},
- {"(*LineReader).Seek", Method, 5},
- {"(*LineReader).SeekPC", Method, 5},
- {"(*LineReader).Tell", Method, 5},
- {"(*PtrType).Common", Method, 0},
- {"(*PtrType).Size", Method, 0},
- {"(*PtrType).String", Method, 0},
- {"(*QualType).Common", Method, 0},
- {"(*QualType).Size", Method, 0},
- {"(*QualType).String", Method, 0},
- {"(*Reader).AddressSize", Method, 5},
- {"(*Reader).ByteOrder", Method, 14},
- {"(*Reader).Next", Method, 0},
- {"(*Reader).Seek", Method, 0},
- {"(*Reader).SeekPC", Method, 7},
- {"(*Reader).SkipChildren", Method, 0},
- {"(*StructType).Common", Method, 0},
- {"(*StructType).Defn", Method, 0},
- {"(*StructType).Size", Method, 0},
- {"(*StructType).String", Method, 0},
- {"(*TypedefType).Common", Method, 0},
- {"(*TypedefType).Size", Method, 0},
- {"(*TypedefType).String", Method, 0},
- {"(*UcharType).Basic", Method, 0},
- {"(*UcharType).Common", Method, 0},
- {"(*UcharType).Size", Method, 0},
- {"(*UcharType).String", Method, 0},
- {"(*UintType).Basic", Method, 0},
- {"(*UintType).Common", Method, 0},
- {"(*UintType).Size", Method, 0},
- {"(*UintType).String", Method, 0},
- {"(*UnspecifiedType).Basic", Method, 4},
- {"(*UnspecifiedType).Common", Method, 4},
- {"(*UnspecifiedType).Size", Method, 4},
- {"(*UnspecifiedType).String", Method, 4},
- {"(*UnsupportedType).Common", Method, 13},
- {"(*UnsupportedType).Size", Method, 13},
- {"(*UnsupportedType).String", Method, 13},
- {"(*VoidType).Common", Method, 0},
- {"(*VoidType).Size", Method, 0},
- {"(*VoidType).String", Method, 0},
- {"(Attr).GoString", Method, 0},
- {"(Attr).String", Method, 0},
- {"(Class).GoString", Method, 5},
- {"(Class).String", Method, 5},
- {"(DecodeError).Error", Method, 0},
- {"(Tag).GoString", Method, 0},
- {"(Tag).String", Method, 0},
- {"AddrType", Type, 0},
- {"AddrType.BasicType", Field, 0},
- {"ArrayType", Type, 0},
- {"ArrayType.CommonType", Field, 0},
- {"ArrayType.Count", Field, 0},
- {"ArrayType.StrideBitSize", Field, 0},
- {"ArrayType.Type", Field, 0},
- {"Attr", Type, 0},
- {"AttrAbstractOrigin", Const, 0},
- {"AttrAccessibility", Const, 0},
- {"AttrAddrBase", Const, 14},
- {"AttrAddrClass", Const, 0},
- {"AttrAlignment", Const, 14},
- {"AttrAllocated", Const, 0},
- {"AttrArtificial", Const, 0},
- {"AttrAssociated", Const, 0},
- {"AttrBaseTypes", Const, 0},
- {"AttrBinaryScale", Const, 14},
- {"AttrBitOffset", Const, 0},
- {"AttrBitSize", Const, 0},
- {"AttrByteSize", Const, 0},
- {"AttrCallAllCalls", Const, 14},
- {"AttrCallAllSourceCalls", Const, 14},
- {"AttrCallAllTailCalls", Const, 14},
- {"AttrCallColumn", Const, 0},
- {"AttrCallDataLocation", Const, 14},
- {"AttrCallDataValue", Const, 14},
- {"AttrCallFile", Const, 0},
- {"AttrCallLine", Const, 0},
- {"AttrCallOrigin", Const, 14},
- {"AttrCallPC", Const, 14},
- {"AttrCallParameter", Const, 14},
- {"AttrCallReturnPC", Const, 14},
- {"AttrCallTailCall", Const, 14},
- {"AttrCallTarget", Const, 14},
- {"AttrCallTargetClobbered", Const, 14},
- {"AttrCallValue", Const, 14},
- {"AttrCalling", Const, 0},
- {"AttrCommonRef", Const, 0},
- {"AttrCompDir", Const, 0},
- {"AttrConstExpr", Const, 14},
- {"AttrConstValue", Const, 0},
- {"AttrContainingType", Const, 0},
- {"AttrCount", Const, 0},
- {"AttrDataBitOffset", Const, 14},
- {"AttrDataLocation", Const, 0},
- {"AttrDataMemberLoc", Const, 0},
- {"AttrDecimalScale", Const, 14},
- {"AttrDecimalSign", Const, 14},
- {"AttrDeclColumn", Const, 0},
- {"AttrDeclFile", Const, 0},
- {"AttrDeclLine", Const, 0},
- {"AttrDeclaration", Const, 0},
- {"AttrDefaultValue", Const, 0},
- {"AttrDefaulted", Const, 14},
- {"AttrDeleted", Const, 14},
- {"AttrDescription", Const, 0},
- {"AttrDigitCount", Const, 14},
- {"AttrDiscr", Const, 0},
- {"AttrDiscrList", Const, 0},
- {"AttrDiscrValue", Const, 0},
- {"AttrDwoName", Const, 14},
- {"AttrElemental", Const, 14},
- {"AttrEncoding", Const, 0},
- {"AttrEndianity", Const, 14},
- {"AttrEntrypc", Const, 0},
- {"AttrEnumClass", Const, 14},
- {"AttrExplicit", Const, 14},
- {"AttrExportSymbols", Const, 14},
- {"AttrExtension", Const, 0},
- {"AttrExternal", Const, 0},
- {"AttrFrameBase", Const, 0},
- {"AttrFriend", Const, 0},
- {"AttrHighpc", Const, 0},
- {"AttrIdentifierCase", Const, 0},
- {"AttrImport", Const, 0},
- {"AttrInline", Const, 0},
- {"AttrIsOptional", Const, 0},
- {"AttrLanguage", Const, 0},
- {"AttrLinkageName", Const, 14},
- {"AttrLocation", Const, 0},
- {"AttrLoclistsBase", Const, 14},
- {"AttrLowerBound", Const, 0},
- {"AttrLowpc", Const, 0},
- {"AttrMacroInfo", Const, 0},
- {"AttrMacros", Const, 14},
- {"AttrMainSubprogram", Const, 14},
- {"AttrMutable", Const, 14},
- {"AttrName", Const, 0},
- {"AttrNamelistItem", Const, 0},
- {"AttrNoreturn", Const, 14},
- {"AttrObjectPointer", Const, 14},
- {"AttrOrdering", Const, 0},
- {"AttrPictureString", Const, 14},
- {"AttrPriority", Const, 0},
- {"AttrProducer", Const, 0},
- {"AttrPrototyped", Const, 0},
- {"AttrPure", Const, 14},
- {"AttrRanges", Const, 0},
- {"AttrRank", Const, 14},
- {"AttrRecursive", Const, 14},
- {"AttrReference", Const, 14},
- {"AttrReturnAddr", Const, 0},
- {"AttrRnglistsBase", Const, 14},
- {"AttrRvalueReference", Const, 14},
- {"AttrSegment", Const, 0},
- {"AttrSibling", Const, 0},
- {"AttrSignature", Const, 14},
- {"AttrSmall", Const, 14},
- {"AttrSpecification", Const, 0},
- {"AttrStartScope", Const, 0},
- {"AttrStaticLink", Const, 0},
- {"AttrStmtList", Const, 0},
- {"AttrStrOffsetsBase", Const, 14},
- {"AttrStride", Const, 0},
- {"AttrStrideSize", Const, 0},
- {"AttrStringLength", Const, 0},
- {"AttrStringLengthBitSize", Const, 14},
- {"AttrStringLengthByteSize", Const, 14},
- {"AttrThreadsScaled", Const, 14},
- {"AttrTrampoline", Const, 0},
- {"AttrType", Const, 0},
- {"AttrUpperBound", Const, 0},
- {"AttrUseLocation", Const, 0},
- {"AttrUseUTF8", Const, 0},
- {"AttrVarParam", Const, 0},
- {"AttrVirtuality", Const, 0},
- {"AttrVisibility", Const, 0},
- {"AttrVtableElemLoc", Const, 0},
- {"BasicType", Type, 0},
- {"BasicType.BitOffset", Field, 0},
- {"BasicType.BitSize", Field, 0},
- {"BasicType.CommonType", Field, 0},
- {"BasicType.DataBitOffset", Field, 18},
- {"BoolType", Type, 0},
- {"BoolType.BasicType", Field, 0},
- {"CharType", Type, 0},
- {"CharType.BasicType", Field, 0},
- {"Class", Type, 5},
- {"ClassAddrPtr", Const, 14},
- {"ClassAddress", Const, 5},
- {"ClassBlock", Const, 5},
- {"ClassConstant", Const, 5},
- {"ClassExprLoc", Const, 5},
- {"ClassFlag", Const, 5},
- {"ClassLinePtr", Const, 5},
- {"ClassLocList", Const, 14},
- {"ClassLocListPtr", Const, 5},
- {"ClassMacPtr", Const, 5},
- {"ClassRangeListPtr", Const, 5},
- {"ClassReference", Const, 5},
- {"ClassReferenceAlt", Const, 5},
- {"ClassReferenceSig", Const, 5},
- {"ClassRngList", Const, 14},
- {"ClassRngListsPtr", Const, 14},
- {"ClassStrOffsetsPtr", Const, 14},
- {"ClassString", Const, 5},
- {"ClassStringAlt", Const, 5},
- {"ClassUnknown", Const, 6},
- {"CommonType", Type, 0},
- {"CommonType.ByteSize", Field, 0},
- {"CommonType.Name", Field, 0},
- {"ComplexType", Type, 0},
- {"ComplexType.BasicType", Field, 0},
- {"Data", Type, 0},
- {"DecodeError", Type, 0},
- {"DecodeError.Err", Field, 0},
- {"DecodeError.Name", Field, 0},
- {"DecodeError.Offset", Field, 0},
- {"DotDotDotType", Type, 0},
- {"DotDotDotType.CommonType", Field, 0},
- {"Entry", Type, 0},
- {"Entry.Children", Field, 0},
- {"Entry.Field", Field, 0},
- {"Entry.Offset", Field, 0},
- {"Entry.Tag", Field, 0},
- {"EnumType", Type, 0},
- {"EnumType.CommonType", Field, 0},
- {"EnumType.EnumName", Field, 0},
- {"EnumType.Val", Field, 0},
- {"EnumValue", Type, 0},
- {"EnumValue.Name", Field, 0},
- {"EnumValue.Val", Field, 0},
- {"ErrUnknownPC", Var, 5},
- {"Field", Type, 0},
- {"Field.Attr", Field, 0},
- {"Field.Class", Field, 5},
- {"Field.Val", Field, 0},
- {"FloatType", Type, 0},
- {"FloatType.BasicType", Field, 0},
- {"FuncType", Type, 0},
- {"FuncType.CommonType", Field, 0},
- {"FuncType.ParamType", Field, 0},
- {"FuncType.ReturnType", Field, 0},
- {"IntType", Type, 0},
- {"IntType.BasicType", Field, 0},
- {"LineEntry", Type, 5},
- {"LineEntry.Address", Field, 5},
- {"LineEntry.BasicBlock", Field, 5},
- {"LineEntry.Column", Field, 5},
- {"LineEntry.Discriminator", Field, 5},
- {"LineEntry.EndSequence", Field, 5},
- {"LineEntry.EpilogueBegin", Field, 5},
- {"LineEntry.File", Field, 5},
- {"LineEntry.ISA", Field, 5},
- {"LineEntry.IsStmt", Field, 5},
- {"LineEntry.Line", Field, 5},
- {"LineEntry.OpIndex", Field, 5},
- {"LineEntry.PrologueEnd", Field, 5},
- {"LineFile", Type, 5},
- {"LineFile.Length", Field, 5},
- {"LineFile.Mtime", Field, 5},
- {"LineFile.Name", Field, 5},
- {"LineReader", Type, 5},
- {"LineReaderPos", Type, 5},
- {"New", Func, 0},
- {"Offset", Type, 0},
- {"PtrType", Type, 0},
- {"PtrType.CommonType", Field, 0},
- {"PtrType.Type", Field, 0},
- {"QualType", Type, 0},
- {"QualType.CommonType", Field, 0},
- {"QualType.Qual", Field, 0},
- {"QualType.Type", Field, 0},
- {"Reader", Type, 0},
- {"StructField", Type, 0},
- {"StructField.BitOffset", Field, 0},
- {"StructField.BitSize", Field, 0},
- {"StructField.ByteOffset", Field, 0},
- {"StructField.ByteSize", Field, 0},
- {"StructField.DataBitOffset", Field, 18},
- {"StructField.Name", Field, 0},
- {"StructField.Type", Field, 0},
- {"StructType", Type, 0},
- {"StructType.CommonType", Field, 0},
- {"StructType.Field", Field, 0},
- {"StructType.Incomplete", Field, 0},
- {"StructType.Kind", Field, 0},
- {"StructType.StructName", Field, 0},
- {"Tag", Type, 0},
- {"TagAccessDeclaration", Const, 0},
- {"TagArrayType", Const, 0},
- {"TagAtomicType", Const, 14},
- {"TagBaseType", Const, 0},
- {"TagCallSite", Const, 14},
- {"TagCallSiteParameter", Const, 14},
- {"TagCatchDwarfBlock", Const, 0},
- {"TagClassType", Const, 0},
- {"TagCoarrayType", Const, 14},
- {"TagCommonDwarfBlock", Const, 0},
- {"TagCommonInclusion", Const, 0},
- {"TagCompileUnit", Const, 0},
- {"TagCondition", Const, 3},
- {"TagConstType", Const, 0},
- {"TagConstant", Const, 0},
- {"TagDwarfProcedure", Const, 0},
- {"TagDynamicType", Const, 14},
- {"TagEntryPoint", Const, 0},
- {"TagEnumerationType", Const, 0},
- {"TagEnumerator", Const, 0},
- {"TagFileType", Const, 0},
- {"TagFormalParameter", Const, 0},
- {"TagFriend", Const, 0},
- {"TagGenericSubrange", Const, 14},
- {"TagImmutableType", Const, 14},
- {"TagImportedDeclaration", Const, 0},
- {"TagImportedModule", Const, 0},
- {"TagImportedUnit", Const, 0},
- {"TagInheritance", Const, 0},
- {"TagInlinedSubroutine", Const, 0},
- {"TagInterfaceType", Const, 0},
- {"TagLabel", Const, 0},
- {"TagLexDwarfBlock", Const, 0},
- {"TagMember", Const, 0},
- {"TagModule", Const, 0},
- {"TagMutableType", Const, 0},
- {"TagNamelist", Const, 0},
- {"TagNamelistItem", Const, 0},
- {"TagNamespace", Const, 0},
- {"TagPackedType", Const, 0},
- {"TagPartialUnit", Const, 0},
- {"TagPointerType", Const, 0},
- {"TagPtrToMemberType", Const, 0},
- {"TagReferenceType", Const, 0},
- {"TagRestrictType", Const, 0},
- {"TagRvalueReferenceType", Const, 3},
- {"TagSetType", Const, 0},
- {"TagSharedType", Const, 3},
- {"TagSkeletonUnit", Const, 14},
- {"TagStringType", Const, 0},
- {"TagStructType", Const, 0},
- {"TagSubprogram", Const, 0},
- {"TagSubrangeType", Const, 0},
- {"TagSubroutineType", Const, 0},
- {"TagTemplateAlias", Const, 3},
- {"TagTemplateTypeParameter", Const, 0},
- {"TagTemplateValueParameter", Const, 0},
- {"TagThrownType", Const, 0},
- {"TagTryDwarfBlock", Const, 0},
- {"TagTypeUnit", Const, 3},
- {"TagTypedef", Const, 0},
- {"TagUnionType", Const, 0},
- {"TagUnspecifiedParameters", Const, 0},
- {"TagUnspecifiedType", Const, 0},
- {"TagVariable", Const, 0},
- {"TagVariant", Const, 0},
- {"TagVariantPart", Const, 0},
- {"TagVolatileType", Const, 0},
- {"TagWithStmt", Const, 0},
- {"Type", Type, 0},
- {"TypedefType", Type, 0},
- {"TypedefType.CommonType", Field, 0},
- {"TypedefType.Type", Field, 0},
- {"UcharType", Type, 0},
- {"UcharType.BasicType", Field, 0},
- {"UintType", Type, 0},
- {"UintType.BasicType", Field, 0},
- {"UnspecifiedType", Type, 4},
- {"UnspecifiedType.BasicType", Field, 4},
- {"UnsupportedType", Type, 13},
- {"UnsupportedType.CommonType", Field, 13},
- {"UnsupportedType.Tag", Field, 13},
- {"VoidType", Type, 0},
- {"VoidType.CommonType", Field, 0},
- },
- "debug/elf": {
- {"(*File).Close", Method, 0},
- {"(*File).DWARF", Method, 0},
- {"(*File).DynString", Method, 1},
- {"(*File).DynValue", Method, 21},
- {"(*File).DynamicSymbols", Method, 4},
- {"(*File).ImportedLibraries", Method, 0},
- {"(*File).ImportedSymbols", Method, 0},
- {"(*File).Section", Method, 0},
- {"(*File).SectionByType", Method, 0},
- {"(*File).Symbols", Method, 0},
- {"(*FormatError).Error", Method, 0},
- {"(*Prog).Open", Method, 0},
- {"(*Section).Data", Method, 0},
- {"(*Section).Open", Method, 0},
- {"(Class).GoString", Method, 0},
- {"(Class).String", Method, 0},
- {"(CompressionType).GoString", Method, 6},
- {"(CompressionType).String", Method, 6},
- {"(Data).GoString", Method, 0},
- {"(Data).String", Method, 0},
- {"(DynFlag).GoString", Method, 0},
- {"(DynFlag).String", Method, 0},
- {"(DynFlag1).GoString", Method, 21},
- {"(DynFlag1).String", Method, 21},
- {"(DynTag).GoString", Method, 0},
- {"(DynTag).String", Method, 0},
- {"(Machine).GoString", Method, 0},
- {"(Machine).String", Method, 0},
- {"(NType).GoString", Method, 0},
- {"(NType).String", Method, 0},
- {"(OSABI).GoString", Method, 0},
- {"(OSABI).String", Method, 0},
- {"(Prog).ReadAt", Method, 0},
- {"(ProgFlag).GoString", Method, 0},
- {"(ProgFlag).String", Method, 0},
- {"(ProgType).GoString", Method, 0},
- {"(ProgType).String", Method, 0},
- {"(R_386).GoString", Method, 0},
- {"(R_386).String", Method, 0},
- {"(R_390).GoString", Method, 7},
- {"(R_390).String", Method, 7},
- {"(R_AARCH64).GoString", Method, 4},
- {"(R_AARCH64).String", Method, 4},
- {"(R_ALPHA).GoString", Method, 0},
- {"(R_ALPHA).String", Method, 0},
- {"(R_ARM).GoString", Method, 0},
- {"(R_ARM).String", Method, 0},
- {"(R_LARCH).GoString", Method, 19},
- {"(R_LARCH).String", Method, 19},
- {"(R_MIPS).GoString", Method, 6},
- {"(R_MIPS).String", Method, 6},
- {"(R_PPC).GoString", Method, 0},
- {"(R_PPC).String", Method, 0},
- {"(R_PPC64).GoString", Method, 5},
- {"(R_PPC64).String", Method, 5},
- {"(R_RISCV).GoString", Method, 11},
- {"(R_RISCV).String", Method, 11},
- {"(R_SPARC).GoString", Method, 0},
- {"(R_SPARC).String", Method, 0},
- {"(R_X86_64).GoString", Method, 0},
- {"(R_X86_64).String", Method, 0},
- {"(Section).ReadAt", Method, 0},
- {"(SectionFlag).GoString", Method, 0},
- {"(SectionFlag).String", Method, 0},
- {"(SectionIndex).GoString", Method, 0},
- {"(SectionIndex).String", Method, 0},
- {"(SectionType).GoString", Method, 0},
- {"(SectionType).String", Method, 0},
- {"(SymBind).GoString", Method, 0},
- {"(SymBind).String", Method, 0},
- {"(SymType).GoString", Method, 0},
- {"(SymType).String", Method, 0},
- {"(SymVis).GoString", Method, 0},
- {"(SymVis).String", Method, 0},
- {"(Type).GoString", Method, 0},
- {"(Type).String", Method, 0},
- {"(Version).GoString", Method, 0},
- {"(Version).String", Method, 0},
- {"ARM_MAGIC_TRAMP_NUMBER", Const, 0},
- {"COMPRESS_HIOS", Const, 6},
- {"COMPRESS_HIPROC", Const, 6},
- {"COMPRESS_LOOS", Const, 6},
- {"COMPRESS_LOPROC", Const, 6},
- {"COMPRESS_ZLIB", Const, 6},
- {"COMPRESS_ZSTD", Const, 21},
- {"Chdr32", Type, 6},
- {"Chdr32.Addralign", Field, 6},
- {"Chdr32.Size", Field, 6},
- {"Chdr32.Type", Field, 6},
- {"Chdr64", Type, 6},
- {"Chdr64.Addralign", Field, 6},
- {"Chdr64.Size", Field, 6},
- {"Chdr64.Type", Field, 6},
- {"Class", Type, 0},
- {"CompressionType", Type, 6},
- {"DF_1_CONFALT", Const, 21},
- {"DF_1_DIRECT", Const, 21},
- {"DF_1_DISPRELDNE", Const, 21},
- {"DF_1_DISPRELPND", Const, 21},
- {"DF_1_EDITED", Const, 21},
- {"DF_1_ENDFILTEE", Const, 21},
- {"DF_1_GLOBAL", Const, 21},
- {"DF_1_GLOBAUDIT", Const, 21},
- {"DF_1_GROUP", Const, 21},
- {"DF_1_IGNMULDEF", Const, 21},
- {"DF_1_INITFIRST", Const, 21},
- {"DF_1_INTERPOSE", Const, 21},
- {"DF_1_KMOD", Const, 21},
- {"DF_1_LOADFLTR", Const, 21},
- {"DF_1_NOCOMMON", Const, 21},
- {"DF_1_NODEFLIB", Const, 21},
- {"DF_1_NODELETE", Const, 21},
- {"DF_1_NODIRECT", Const, 21},
- {"DF_1_NODUMP", Const, 21},
- {"DF_1_NOHDR", Const, 21},
- {"DF_1_NOKSYMS", Const, 21},
- {"DF_1_NOOPEN", Const, 21},
- {"DF_1_NORELOC", Const, 21},
- {"DF_1_NOW", Const, 21},
- {"DF_1_ORIGIN", Const, 21},
- {"DF_1_PIE", Const, 21},
- {"DF_1_SINGLETON", Const, 21},
- {"DF_1_STUB", Const, 21},
- {"DF_1_SYMINTPOSE", Const, 21},
- {"DF_1_TRANS", Const, 21},
- {"DF_1_WEAKFILTER", Const, 21},
- {"DF_BIND_NOW", Const, 0},
- {"DF_ORIGIN", Const, 0},
- {"DF_STATIC_TLS", Const, 0},
- {"DF_SYMBOLIC", Const, 0},
- {"DF_TEXTREL", Const, 0},
- {"DT_ADDRRNGHI", Const, 16},
- {"DT_ADDRRNGLO", Const, 16},
- {"DT_AUDIT", Const, 16},
- {"DT_AUXILIARY", Const, 16},
- {"DT_BIND_NOW", Const, 0},
- {"DT_CHECKSUM", Const, 16},
- {"DT_CONFIG", Const, 16},
- {"DT_DEBUG", Const, 0},
- {"DT_DEPAUDIT", Const, 16},
- {"DT_ENCODING", Const, 0},
- {"DT_FEATURE", Const, 16},
- {"DT_FILTER", Const, 16},
- {"DT_FINI", Const, 0},
- {"DT_FINI_ARRAY", Const, 0},
- {"DT_FINI_ARRAYSZ", Const, 0},
- {"DT_FLAGS", Const, 0},
- {"DT_FLAGS_1", Const, 16},
- {"DT_GNU_CONFLICT", Const, 16},
- {"DT_GNU_CONFLICTSZ", Const, 16},
- {"DT_GNU_HASH", Const, 16},
- {"DT_GNU_LIBLIST", Const, 16},
- {"DT_GNU_LIBLISTSZ", Const, 16},
- {"DT_GNU_PRELINKED", Const, 16},
- {"DT_HASH", Const, 0},
- {"DT_HIOS", Const, 0},
- {"DT_HIPROC", Const, 0},
- {"DT_INIT", Const, 0},
- {"DT_INIT_ARRAY", Const, 0},
- {"DT_INIT_ARRAYSZ", Const, 0},
- {"DT_JMPREL", Const, 0},
- {"DT_LOOS", Const, 0},
- {"DT_LOPROC", Const, 0},
- {"DT_MIPS_AUX_DYNAMIC", Const, 16},
- {"DT_MIPS_BASE_ADDRESS", Const, 16},
- {"DT_MIPS_COMPACT_SIZE", Const, 16},
- {"DT_MIPS_CONFLICT", Const, 16},
- {"DT_MIPS_CONFLICTNO", Const, 16},
- {"DT_MIPS_CXX_FLAGS", Const, 16},
- {"DT_MIPS_DELTA_CLASS", Const, 16},
- {"DT_MIPS_DELTA_CLASSSYM", Const, 16},
- {"DT_MIPS_DELTA_CLASSSYM_NO", Const, 16},
- {"DT_MIPS_DELTA_CLASS_NO", Const, 16},
- {"DT_MIPS_DELTA_INSTANCE", Const, 16},
- {"DT_MIPS_DELTA_INSTANCE_NO", Const, 16},
- {"DT_MIPS_DELTA_RELOC", Const, 16},
- {"DT_MIPS_DELTA_RELOC_NO", Const, 16},
- {"DT_MIPS_DELTA_SYM", Const, 16},
- {"DT_MIPS_DELTA_SYM_NO", Const, 16},
- {"DT_MIPS_DYNSTR_ALIGN", Const, 16},
- {"DT_MIPS_FLAGS", Const, 16},
- {"DT_MIPS_GOTSYM", Const, 16},
- {"DT_MIPS_GP_VALUE", Const, 16},
- {"DT_MIPS_HIDDEN_GOTIDX", Const, 16},
- {"DT_MIPS_HIPAGENO", Const, 16},
- {"DT_MIPS_ICHECKSUM", Const, 16},
- {"DT_MIPS_INTERFACE", Const, 16},
- {"DT_MIPS_INTERFACE_SIZE", Const, 16},
- {"DT_MIPS_IVERSION", Const, 16},
- {"DT_MIPS_LIBLIST", Const, 16},
- {"DT_MIPS_LIBLISTNO", Const, 16},
- {"DT_MIPS_LOCALPAGE_GOTIDX", Const, 16},
- {"DT_MIPS_LOCAL_GOTIDX", Const, 16},
- {"DT_MIPS_LOCAL_GOTNO", Const, 16},
- {"DT_MIPS_MSYM", Const, 16},
- {"DT_MIPS_OPTIONS", Const, 16},
- {"DT_MIPS_PERF_SUFFIX", Const, 16},
- {"DT_MIPS_PIXIE_INIT", Const, 16},
- {"DT_MIPS_PLTGOT", Const, 16},
- {"DT_MIPS_PROTECTED_GOTIDX", Const, 16},
- {"DT_MIPS_RLD_MAP", Const, 16},
- {"DT_MIPS_RLD_MAP_REL", Const, 16},
- {"DT_MIPS_RLD_TEXT_RESOLVE_ADDR", Const, 16},
- {"DT_MIPS_RLD_VERSION", Const, 16},
- {"DT_MIPS_RWPLT", Const, 16},
- {"DT_MIPS_SYMBOL_LIB", Const, 16},
- {"DT_MIPS_SYMTABNO", Const, 16},
- {"DT_MIPS_TIME_STAMP", Const, 16},
- {"DT_MIPS_UNREFEXTNO", Const, 16},
- {"DT_MOVEENT", Const, 16},
- {"DT_MOVESZ", Const, 16},
- {"DT_MOVETAB", Const, 16},
- {"DT_NEEDED", Const, 0},
- {"DT_NULL", Const, 0},
- {"DT_PLTGOT", Const, 0},
- {"DT_PLTPAD", Const, 16},
- {"DT_PLTPADSZ", Const, 16},
- {"DT_PLTREL", Const, 0},
- {"DT_PLTRELSZ", Const, 0},
- {"DT_POSFLAG_1", Const, 16},
- {"DT_PPC64_GLINK", Const, 16},
- {"DT_PPC64_OPD", Const, 16},
- {"DT_PPC64_OPDSZ", Const, 16},
- {"DT_PPC64_OPT", Const, 16},
- {"DT_PPC_GOT", Const, 16},
- {"DT_PPC_OPT", Const, 16},
- {"DT_PREINIT_ARRAY", Const, 0},
- {"DT_PREINIT_ARRAYSZ", Const, 0},
- {"DT_REL", Const, 0},
- {"DT_RELA", Const, 0},
- {"DT_RELACOUNT", Const, 16},
- {"DT_RELAENT", Const, 0},
- {"DT_RELASZ", Const, 0},
- {"DT_RELCOUNT", Const, 16},
- {"DT_RELENT", Const, 0},
- {"DT_RELSZ", Const, 0},
- {"DT_RPATH", Const, 0},
- {"DT_RUNPATH", Const, 0},
- {"DT_SONAME", Const, 0},
- {"DT_SPARC_REGISTER", Const, 16},
- {"DT_STRSZ", Const, 0},
- {"DT_STRTAB", Const, 0},
- {"DT_SYMBOLIC", Const, 0},
- {"DT_SYMENT", Const, 0},
- {"DT_SYMINENT", Const, 16},
- {"DT_SYMINFO", Const, 16},
- {"DT_SYMINSZ", Const, 16},
- {"DT_SYMTAB", Const, 0},
- {"DT_SYMTAB_SHNDX", Const, 16},
- {"DT_TEXTREL", Const, 0},
- {"DT_TLSDESC_GOT", Const, 16},
- {"DT_TLSDESC_PLT", Const, 16},
- {"DT_USED", Const, 16},
- {"DT_VALRNGHI", Const, 16},
- {"DT_VALRNGLO", Const, 16},
- {"DT_VERDEF", Const, 16},
- {"DT_VERDEFNUM", Const, 16},
- {"DT_VERNEED", Const, 0},
- {"DT_VERNEEDNUM", Const, 0},
- {"DT_VERSYM", Const, 0},
- {"Data", Type, 0},
- {"Dyn32", Type, 0},
- {"Dyn32.Tag", Field, 0},
- {"Dyn32.Val", Field, 0},
- {"Dyn64", Type, 0},
- {"Dyn64.Tag", Field, 0},
- {"Dyn64.Val", Field, 0},
- {"DynFlag", Type, 0},
- {"DynFlag1", Type, 21},
- {"DynTag", Type, 0},
- {"EI_ABIVERSION", Const, 0},
- {"EI_CLASS", Const, 0},
- {"EI_DATA", Const, 0},
- {"EI_NIDENT", Const, 0},
- {"EI_OSABI", Const, 0},
- {"EI_PAD", Const, 0},
- {"EI_VERSION", Const, 0},
- {"ELFCLASS32", Const, 0},
- {"ELFCLASS64", Const, 0},
- {"ELFCLASSNONE", Const, 0},
- {"ELFDATA2LSB", Const, 0},
- {"ELFDATA2MSB", Const, 0},
- {"ELFDATANONE", Const, 0},
- {"ELFMAG", Const, 0},
- {"ELFOSABI_86OPEN", Const, 0},
- {"ELFOSABI_AIX", Const, 0},
- {"ELFOSABI_ARM", Const, 0},
- {"ELFOSABI_AROS", Const, 11},
- {"ELFOSABI_CLOUDABI", Const, 11},
- {"ELFOSABI_FENIXOS", Const, 11},
- {"ELFOSABI_FREEBSD", Const, 0},
- {"ELFOSABI_HPUX", Const, 0},
- {"ELFOSABI_HURD", Const, 0},
- {"ELFOSABI_IRIX", Const, 0},
- {"ELFOSABI_LINUX", Const, 0},
- {"ELFOSABI_MODESTO", Const, 0},
- {"ELFOSABI_NETBSD", Const, 0},
- {"ELFOSABI_NONE", Const, 0},
- {"ELFOSABI_NSK", Const, 0},
- {"ELFOSABI_OPENBSD", Const, 0},
- {"ELFOSABI_OPENVMS", Const, 0},
- {"ELFOSABI_SOLARIS", Const, 0},
- {"ELFOSABI_STANDALONE", Const, 0},
- {"ELFOSABI_TRU64", Const, 0},
- {"EM_386", Const, 0},
- {"EM_486", Const, 0},
- {"EM_56800EX", Const, 11},
- {"EM_68HC05", Const, 11},
- {"EM_68HC08", Const, 11},
- {"EM_68HC11", Const, 11},
- {"EM_68HC12", Const, 0},
- {"EM_68HC16", Const, 11},
- {"EM_68K", Const, 0},
- {"EM_78KOR", Const, 11},
- {"EM_8051", Const, 11},
- {"EM_860", Const, 0},
- {"EM_88K", Const, 0},
- {"EM_960", Const, 0},
- {"EM_AARCH64", Const, 4},
- {"EM_ALPHA", Const, 0},
- {"EM_ALPHA_STD", Const, 0},
- {"EM_ALTERA_NIOS2", Const, 11},
- {"EM_AMDGPU", Const, 11},
- {"EM_ARC", Const, 0},
- {"EM_ARCA", Const, 11},
- {"EM_ARC_COMPACT", Const, 11},
- {"EM_ARC_COMPACT2", Const, 11},
- {"EM_ARM", Const, 0},
- {"EM_AVR", Const, 11},
- {"EM_AVR32", Const, 11},
- {"EM_BA1", Const, 11},
- {"EM_BA2", Const, 11},
- {"EM_BLACKFIN", Const, 11},
- {"EM_BPF", Const, 11},
- {"EM_C166", Const, 11},
- {"EM_CDP", Const, 11},
- {"EM_CE", Const, 11},
- {"EM_CLOUDSHIELD", Const, 11},
- {"EM_COGE", Const, 11},
- {"EM_COLDFIRE", Const, 0},
- {"EM_COOL", Const, 11},
- {"EM_COREA_1ST", Const, 11},
- {"EM_COREA_2ND", Const, 11},
- {"EM_CR", Const, 11},
- {"EM_CR16", Const, 11},
- {"EM_CRAYNV2", Const, 11},
- {"EM_CRIS", Const, 11},
- {"EM_CRX", Const, 11},
- {"EM_CSR_KALIMBA", Const, 11},
- {"EM_CUDA", Const, 11},
- {"EM_CYPRESS_M8C", Const, 11},
- {"EM_D10V", Const, 11},
- {"EM_D30V", Const, 11},
- {"EM_DSP24", Const, 11},
- {"EM_DSPIC30F", Const, 11},
- {"EM_DXP", Const, 11},
- {"EM_ECOG1", Const, 11},
- {"EM_ECOG16", Const, 11},
- {"EM_ECOG1X", Const, 11},
- {"EM_ECOG2", Const, 11},
- {"EM_ETPU", Const, 11},
- {"EM_EXCESS", Const, 11},
- {"EM_F2MC16", Const, 11},
- {"EM_FIREPATH", Const, 11},
- {"EM_FR20", Const, 0},
- {"EM_FR30", Const, 11},
- {"EM_FT32", Const, 11},
- {"EM_FX66", Const, 11},
- {"EM_H8S", Const, 0},
- {"EM_H8_300", Const, 0},
- {"EM_H8_300H", Const, 0},
- {"EM_H8_500", Const, 0},
- {"EM_HUANY", Const, 11},
- {"EM_IA_64", Const, 0},
- {"EM_INTEL205", Const, 11},
- {"EM_INTEL206", Const, 11},
- {"EM_INTEL207", Const, 11},
- {"EM_INTEL208", Const, 11},
- {"EM_INTEL209", Const, 11},
- {"EM_IP2K", Const, 11},
- {"EM_JAVELIN", Const, 11},
- {"EM_K10M", Const, 11},
- {"EM_KM32", Const, 11},
- {"EM_KMX16", Const, 11},
- {"EM_KMX32", Const, 11},
- {"EM_KMX8", Const, 11},
- {"EM_KVARC", Const, 11},
- {"EM_L10M", Const, 11},
- {"EM_LANAI", Const, 11},
- {"EM_LATTICEMICO32", Const, 11},
- {"EM_LOONGARCH", Const, 19},
- {"EM_M16C", Const, 11},
- {"EM_M32", Const, 0},
- {"EM_M32C", Const, 11},
- {"EM_M32R", Const, 11},
- {"EM_MANIK", Const, 11},
- {"EM_MAX", Const, 11},
- {"EM_MAXQ30", Const, 11},
- {"EM_MCHP_PIC", Const, 11},
- {"EM_MCST_ELBRUS", Const, 11},
- {"EM_ME16", Const, 0},
- {"EM_METAG", Const, 11},
- {"EM_MICROBLAZE", Const, 11},
- {"EM_MIPS", Const, 0},
- {"EM_MIPS_RS3_LE", Const, 0},
- {"EM_MIPS_RS4_BE", Const, 0},
- {"EM_MIPS_X", Const, 0},
- {"EM_MMA", Const, 0},
- {"EM_MMDSP_PLUS", Const, 11},
- {"EM_MMIX", Const, 11},
- {"EM_MN10200", Const, 11},
- {"EM_MN10300", Const, 11},
- {"EM_MOXIE", Const, 11},
- {"EM_MSP430", Const, 11},
- {"EM_NCPU", Const, 0},
- {"EM_NDR1", Const, 0},
- {"EM_NDS32", Const, 11},
- {"EM_NONE", Const, 0},
- {"EM_NORC", Const, 11},
- {"EM_NS32K", Const, 11},
- {"EM_OPEN8", Const, 11},
- {"EM_OPENRISC", Const, 11},
- {"EM_PARISC", Const, 0},
- {"EM_PCP", Const, 0},
- {"EM_PDP10", Const, 11},
- {"EM_PDP11", Const, 11},
- {"EM_PDSP", Const, 11},
- {"EM_PJ", Const, 11},
- {"EM_PPC", Const, 0},
- {"EM_PPC64", Const, 0},
- {"EM_PRISM", Const, 11},
- {"EM_QDSP6", Const, 11},
- {"EM_R32C", Const, 11},
- {"EM_RCE", Const, 0},
- {"EM_RH32", Const, 0},
- {"EM_RISCV", Const, 11},
- {"EM_RL78", Const, 11},
- {"EM_RS08", Const, 11},
- {"EM_RX", Const, 11},
- {"EM_S370", Const, 0},
- {"EM_S390", Const, 0},
- {"EM_SCORE7", Const, 11},
- {"EM_SEP", Const, 11},
- {"EM_SE_C17", Const, 11},
- {"EM_SE_C33", Const, 11},
- {"EM_SH", Const, 0},
- {"EM_SHARC", Const, 11},
- {"EM_SLE9X", Const, 11},
- {"EM_SNP1K", Const, 11},
- {"EM_SPARC", Const, 0},
- {"EM_SPARC32PLUS", Const, 0},
- {"EM_SPARCV9", Const, 0},
- {"EM_ST100", Const, 0},
- {"EM_ST19", Const, 11},
- {"EM_ST200", Const, 11},
- {"EM_ST7", Const, 11},
- {"EM_ST9PLUS", Const, 11},
- {"EM_STARCORE", Const, 0},
- {"EM_STM8", Const, 11},
- {"EM_STXP7X", Const, 11},
- {"EM_SVX", Const, 11},
- {"EM_TILE64", Const, 11},
- {"EM_TILEGX", Const, 11},
- {"EM_TILEPRO", Const, 11},
- {"EM_TINYJ", Const, 0},
- {"EM_TI_ARP32", Const, 11},
- {"EM_TI_C2000", Const, 11},
- {"EM_TI_C5500", Const, 11},
- {"EM_TI_C6000", Const, 11},
- {"EM_TI_PRU", Const, 11},
- {"EM_TMM_GPP", Const, 11},
- {"EM_TPC", Const, 11},
- {"EM_TRICORE", Const, 0},
- {"EM_TRIMEDIA", Const, 11},
- {"EM_TSK3000", Const, 11},
- {"EM_UNICORE", Const, 11},
- {"EM_V800", Const, 0},
- {"EM_V850", Const, 11},
- {"EM_VAX", Const, 11},
- {"EM_VIDEOCORE", Const, 11},
- {"EM_VIDEOCORE3", Const, 11},
- {"EM_VIDEOCORE5", Const, 11},
- {"EM_VISIUM", Const, 11},
- {"EM_VPP500", Const, 0},
- {"EM_X86_64", Const, 0},
- {"EM_XCORE", Const, 11},
- {"EM_XGATE", Const, 11},
- {"EM_XIMO16", Const, 11},
- {"EM_XTENSA", Const, 11},
- {"EM_Z80", Const, 11},
- {"EM_ZSP", Const, 11},
- {"ET_CORE", Const, 0},
- {"ET_DYN", Const, 0},
- {"ET_EXEC", Const, 0},
- {"ET_HIOS", Const, 0},
- {"ET_HIPROC", Const, 0},
- {"ET_LOOS", Const, 0},
- {"ET_LOPROC", Const, 0},
- {"ET_NONE", Const, 0},
- {"ET_REL", Const, 0},
- {"EV_CURRENT", Const, 0},
- {"EV_NONE", Const, 0},
- {"ErrNoSymbols", Var, 4},
- {"File", Type, 0},
- {"File.FileHeader", Field, 0},
- {"File.Progs", Field, 0},
- {"File.Sections", Field, 0},
- {"FileHeader", Type, 0},
- {"FileHeader.ABIVersion", Field, 0},
- {"FileHeader.ByteOrder", Field, 0},
- {"FileHeader.Class", Field, 0},
- {"FileHeader.Data", Field, 0},
- {"FileHeader.Entry", Field, 1},
- {"FileHeader.Machine", Field, 0},
- {"FileHeader.OSABI", Field, 0},
- {"FileHeader.Type", Field, 0},
- {"FileHeader.Version", Field, 0},
- {"FormatError", Type, 0},
- {"Header32", Type, 0},
- {"Header32.Ehsize", Field, 0},
- {"Header32.Entry", Field, 0},
- {"Header32.Flags", Field, 0},
- {"Header32.Ident", Field, 0},
- {"Header32.Machine", Field, 0},
- {"Header32.Phentsize", Field, 0},
- {"Header32.Phnum", Field, 0},
- {"Header32.Phoff", Field, 0},
- {"Header32.Shentsize", Field, 0},
- {"Header32.Shnum", Field, 0},
- {"Header32.Shoff", Field, 0},
- {"Header32.Shstrndx", Field, 0},
- {"Header32.Type", Field, 0},
- {"Header32.Version", Field, 0},
- {"Header64", Type, 0},
- {"Header64.Ehsize", Field, 0},
- {"Header64.Entry", Field, 0},
- {"Header64.Flags", Field, 0},
- {"Header64.Ident", Field, 0},
- {"Header64.Machine", Field, 0},
- {"Header64.Phentsize", Field, 0},
- {"Header64.Phnum", Field, 0},
- {"Header64.Phoff", Field, 0},
- {"Header64.Shentsize", Field, 0},
- {"Header64.Shnum", Field, 0},
- {"Header64.Shoff", Field, 0},
- {"Header64.Shstrndx", Field, 0},
- {"Header64.Type", Field, 0},
- {"Header64.Version", Field, 0},
- {"ImportedSymbol", Type, 0},
- {"ImportedSymbol.Library", Field, 0},
- {"ImportedSymbol.Name", Field, 0},
- {"ImportedSymbol.Version", Field, 0},
- {"Machine", Type, 0},
- {"NT_FPREGSET", Const, 0},
- {"NT_PRPSINFO", Const, 0},
- {"NT_PRSTATUS", Const, 0},
- {"NType", Type, 0},
- {"NewFile", Func, 0},
- {"OSABI", Type, 0},
- {"Open", Func, 0},
- {"PF_MASKOS", Const, 0},
- {"PF_MASKPROC", Const, 0},
- {"PF_R", Const, 0},
- {"PF_W", Const, 0},
- {"PF_X", Const, 0},
- {"PT_AARCH64_ARCHEXT", Const, 16},
- {"PT_AARCH64_UNWIND", Const, 16},
- {"PT_ARM_ARCHEXT", Const, 16},
- {"PT_ARM_EXIDX", Const, 16},
- {"PT_DYNAMIC", Const, 0},
- {"PT_GNU_EH_FRAME", Const, 16},
- {"PT_GNU_MBIND_HI", Const, 16},
- {"PT_GNU_MBIND_LO", Const, 16},
- {"PT_GNU_PROPERTY", Const, 16},
- {"PT_GNU_RELRO", Const, 16},
- {"PT_GNU_STACK", Const, 16},
- {"PT_HIOS", Const, 0},
- {"PT_HIPROC", Const, 0},
- {"PT_INTERP", Const, 0},
- {"PT_LOAD", Const, 0},
- {"PT_LOOS", Const, 0},
- {"PT_LOPROC", Const, 0},
- {"PT_MIPS_ABIFLAGS", Const, 16},
- {"PT_MIPS_OPTIONS", Const, 16},
- {"PT_MIPS_REGINFO", Const, 16},
- {"PT_MIPS_RTPROC", Const, 16},
- {"PT_NOTE", Const, 0},
- {"PT_NULL", Const, 0},
- {"PT_OPENBSD_BOOTDATA", Const, 16},
- {"PT_OPENBSD_NOBTCFI", Const, 23},
- {"PT_OPENBSD_RANDOMIZE", Const, 16},
- {"PT_OPENBSD_WXNEEDED", Const, 16},
- {"PT_PAX_FLAGS", Const, 16},
- {"PT_PHDR", Const, 0},
- {"PT_S390_PGSTE", Const, 16},
- {"PT_SHLIB", Const, 0},
- {"PT_SUNWSTACK", Const, 16},
- {"PT_SUNW_EH_FRAME", Const, 16},
- {"PT_TLS", Const, 0},
- {"Prog", Type, 0},
- {"Prog.ProgHeader", Field, 0},
- {"Prog.ReaderAt", Field, 0},
- {"Prog32", Type, 0},
- {"Prog32.Align", Field, 0},
- {"Prog32.Filesz", Field, 0},
- {"Prog32.Flags", Field, 0},
- {"Prog32.Memsz", Field, 0},
- {"Prog32.Off", Field, 0},
- {"Prog32.Paddr", Field, 0},
- {"Prog32.Type", Field, 0},
- {"Prog32.Vaddr", Field, 0},
- {"Prog64", Type, 0},
- {"Prog64.Align", Field, 0},
- {"Prog64.Filesz", Field, 0},
- {"Prog64.Flags", Field, 0},
- {"Prog64.Memsz", Field, 0},
- {"Prog64.Off", Field, 0},
- {"Prog64.Paddr", Field, 0},
- {"Prog64.Type", Field, 0},
- {"Prog64.Vaddr", Field, 0},
- {"ProgFlag", Type, 0},
- {"ProgHeader", Type, 0},
- {"ProgHeader.Align", Field, 0},
- {"ProgHeader.Filesz", Field, 0},
- {"ProgHeader.Flags", Field, 0},
- {"ProgHeader.Memsz", Field, 0},
- {"ProgHeader.Off", Field, 0},
- {"ProgHeader.Paddr", Field, 0},
- {"ProgHeader.Type", Field, 0},
- {"ProgHeader.Vaddr", Field, 0},
- {"ProgType", Type, 0},
- {"R_386", Type, 0},
- {"R_386_16", Const, 10},
- {"R_386_32", Const, 0},
- {"R_386_32PLT", Const, 10},
- {"R_386_8", Const, 10},
- {"R_386_COPY", Const, 0},
- {"R_386_GLOB_DAT", Const, 0},
- {"R_386_GOT32", Const, 0},
- {"R_386_GOT32X", Const, 10},
- {"R_386_GOTOFF", Const, 0},
- {"R_386_GOTPC", Const, 0},
- {"R_386_IRELATIVE", Const, 10},
- {"R_386_JMP_SLOT", Const, 0},
- {"R_386_NONE", Const, 0},
- {"R_386_PC16", Const, 10},
- {"R_386_PC32", Const, 0},
- {"R_386_PC8", Const, 10},
- {"R_386_PLT32", Const, 0},
- {"R_386_RELATIVE", Const, 0},
- {"R_386_SIZE32", Const, 10},
- {"R_386_TLS_DESC", Const, 10},
- {"R_386_TLS_DESC_CALL", Const, 10},
- {"R_386_TLS_DTPMOD32", Const, 0},
- {"R_386_TLS_DTPOFF32", Const, 0},
- {"R_386_TLS_GD", Const, 0},
- {"R_386_TLS_GD_32", Const, 0},
- {"R_386_TLS_GD_CALL", Const, 0},
- {"R_386_TLS_GD_POP", Const, 0},
- {"R_386_TLS_GD_PUSH", Const, 0},
- {"R_386_TLS_GOTDESC", Const, 10},
- {"R_386_TLS_GOTIE", Const, 0},
- {"R_386_TLS_IE", Const, 0},
- {"R_386_TLS_IE_32", Const, 0},
- {"R_386_TLS_LDM", Const, 0},
- {"R_386_TLS_LDM_32", Const, 0},
- {"R_386_TLS_LDM_CALL", Const, 0},
- {"R_386_TLS_LDM_POP", Const, 0},
- {"R_386_TLS_LDM_PUSH", Const, 0},
- {"R_386_TLS_LDO_32", Const, 0},
- {"R_386_TLS_LE", Const, 0},
- {"R_386_TLS_LE_32", Const, 0},
- {"R_386_TLS_TPOFF", Const, 0},
- {"R_386_TLS_TPOFF32", Const, 0},
- {"R_390", Type, 7},
- {"R_390_12", Const, 7},
- {"R_390_16", Const, 7},
- {"R_390_20", Const, 7},
- {"R_390_32", Const, 7},
- {"R_390_64", Const, 7},
- {"R_390_8", Const, 7},
- {"R_390_COPY", Const, 7},
- {"R_390_GLOB_DAT", Const, 7},
- {"R_390_GOT12", Const, 7},
- {"R_390_GOT16", Const, 7},
- {"R_390_GOT20", Const, 7},
- {"R_390_GOT32", Const, 7},
- {"R_390_GOT64", Const, 7},
- {"R_390_GOTENT", Const, 7},
- {"R_390_GOTOFF", Const, 7},
- {"R_390_GOTOFF16", Const, 7},
- {"R_390_GOTOFF64", Const, 7},
- {"R_390_GOTPC", Const, 7},
- {"R_390_GOTPCDBL", Const, 7},
- {"R_390_GOTPLT12", Const, 7},
- {"R_390_GOTPLT16", Const, 7},
- {"R_390_GOTPLT20", Const, 7},
- {"R_390_GOTPLT32", Const, 7},
- {"R_390_GOTPLT64", Const, 7},
- {"R_390_GOTPLTENT", Const, 7},
- {"R_390_GOTPLTOFF16", Const, 7},
- {"R_390_GOTPLTOFF32", Const, 7},
- {"R_390_GOTPLTOFF64", Const, 7},
- {"R_390_JMP_SLOT", Const, 7},
- {"R_390_NONE", Const, 7},
- {"R_390_PC16", Const, 7},
- {"R_390_PC16DBL", Const, 7},
- {"R_390_PC32", Const, 7},
- {"R_390_PC32DBL", Const, 7},
- {"R_390_PC64", Const, 7},
- {"R_390_PLT16DBL", Const, 7},
- {"R_390_PLT32", Const, 7},
- {"R_390_PLT32DBL", Const, 7},
- {"R_390_PLT64", Const, 7},
- {"R_390_RELATIVE", Const, 7},
- {"R_390_TLS_DTPMOD", Const, 7},
- {"R_390_TLS_DTPOFF", Const, 7},
- {"R_390_TLS_GD32", Const, 7},
- {"R_390_TLS_GD64", Const, 7},
- {"R_390_TLS_GDCALL", Const, 7},
- {"R_390_TLS_GOTIE12", Const, 7},
- {"R_390_TLS_GOTIE20", Const, 7},
- {"R_390_TLS_GOTIE32", Const, 7},
- {"R_390_TLS_GOTIE64", Const, 7},
- {"R_390_TLS_IE32", Const, 7},
- {"R_390_TLS_IE64", Const, 7},
- {"R_390_TLS_IEENT", Const, 7},
- {"R_390_TLS_LDCALL", Const, 7},
- {"R_390_TLS_LDM32", Const, 7},
- {"R_390_TLS_LDM64", Const, 7},
- {"R_390_TLS_LDO32", Const, 7},
- {"R_390_TLS_LDO64", Const, 7},
- {"R_390_TLS_LE32", Const, 7},
- {"R_390_TLS_LE64", Const, 7},
- {"R_390_TLS_LOAD", Const, 7},
- {"R_390_TLS_TPOFF", Const, 7},
- {"R_AARCH64", Type, 4},
- {"R_AARCH64_ABS16", Const, 4},
- {"R_AARCH64_ABS32", Const, 4},
- {"R_AARCH64_ABS64", Const, 4},
- {"R_AARCH64_ADD_ABS_LO12_NC", Const, 4},
- {"R_AARCH64_ADR_GOT_PAGE", Const, 4},
- {"R_AARCH64_ADR_PREL_LO21", Const, 4},
- {"R_AARCH64_ADR_PREL_PG_HI21", Const, 4},
- {"R_AARCH64_ADR_PREL_PG_HI21_NC", Const, 4},
- {"R_AARCH64_CALL26", Const, 4},
- {"R_AARCH64_CONDBR19", Const, 4},
- {"R_AARCH64_COPY", Const, 4},
- {"R_AARCH64_GLOB_DAT", Const, 4},
- {"R_AARCH64_GOT_LD_PREL19", Const, 4},
- {"R_AARCH64_IRELATIVE", Const, 4},
- {"R_AARCH64_JUMP26", Const, 4},
- {"R_AARCH64_JUMP_SLOT", Const, 4},
- {"R_AARCH64_LD64_GOTOFF_LO15", Const, 10},
- {"R_AARCH64_LD64_GOTPAGE_LO15", Const, 10},
- {"R_AARCH64_LD64_GOT_LO12_NC", Const, 4},
- {"R_AARCH64_LDST128_ABS_LO12_NC", Const, 4},
- {"R_AARCH64_LDST16_ABS_LO12_NC", Const, 4},
- {"R_AARCH64_LDST32_ABS_LO12_NC", Const, 4},
- {"R_AARCH64_LDST64_ABS_LO12_NC", Const, 4},
- {"R_AARCH64_LDST8_ABS_LO12_NC", Const, 4},
- {"R_AARCH64_LD_PREL_LO19", Const, 4},
- {"R_AARCH64_MOVW_SABS_G0", Const, 4},
- {"R_AARCH64_MOVW_SABS_G1", Const, 4},
- {"R_AARCH64_MOVW_SABS_G2", Const, 4},
- {"R_AARCH64_MOVW_UABS_G0", Const, 4},
- {"R_AARCH64_MOVW_UABS_G0_NC", Const, 4},
- {"R_AARCH64_MOVW_UABS_G1", Const, 4},
- {"R_AARCH64_MOVW_UABS_G1_NC", Const, 4},
- {"R_AARCH64_MOVW_UABS_G2", Const, 4},
- {"R_AARCH64_MOVW_UABS_G2_NC", Const, 4},
- {"R_AARCH64_MOVW_UABS_G3", Const, 4},
- {"R_AARCH64_NONE", Const, 4},
- {"R_AARCH64_NULL", Const, 4},
- {"R_AARCH64_P32_ABS16", Const, 4},
- {"R_AARCH64_P32_ABS32", Const, 4},
- {"R_AARCH64_P32_ADD_ABS_LO12_NC", Const, 4},
- {"R_AARCH64_P32_ADR_GOT_PAGE", Const, 4},
- {"R_AARCH64_P32_ADR_PREL_LO21", Const, 4},
- {"R_AARCH64_P32_ADR_PREL_PG_HI21", Const, 4},
- {"R_AARCH64_P32_CALL26", Const, 4},
- {"R_AARCH64_P32_CONDBR19", Const, 4},
- {"R_AARCH64_P32_COPY", Const, 4},
- {"R_AARCH64_P32_GLOB_DAT", Const, 4},
- {"R_AARCH64_P32_GOT_LD_PREL19", Const, 4},
- {"R_AARCH64_P32_IRELATIVE", Const, 4},
- {"R_AARCH64_P32_JUMP26", Const, 4},
- {"R_AARCH64_P32_JUMP_SLOT", Const, 4},
- {"R_AARCH64_P32_LD32_GOT_LO12_NC", Const, 4},
- {"R_AARCH64_P32_LDST128_ABS_LO12_NC", Const, 4},
- {"R_AARCH64_P32_LDST16_ABS_LO12_NC", Const, 4},
- {"R_AARCH64_P32_LDST32_ABS_LO12_NC", Const, 4},
- {"R_AARCH64_P32_LDST64_ABS_LO12_NC", Const, 4},
- {"R_AARCH64_P32_LDST8_ABS_LO12_NC", Const, 4},
- {"R_AARCH64_P32_LD_PREL_LO19", Const, 4},
- {"R_AARCH64_P32_MOVW_SABS_G0", Const, 4},
- {"R_AARCH64_P32_MOVW_UABS_G0", Const, 4},
- {"R_AARCH64_P32_MOVW_UABS_G0_NC", Const, 4},
- {"R_AARCH64_P32_MOVW_UABS_G1", Const, 4},
- {"R_AARCH64_P32_PREL16", Const, 4},
- {"R_AARCH64_P32_PREL32", Const, 4},
- {"R_AARCH64_P32_RELATIVE", Const, 4},
- {"R_AARCH64_P32_TLSDESC", Const, 4},
- {"R_AARCH64_P32_TLSDESC_ADD_LO12_NC", Const, 4},
- {"R_AARCH64_P32_TLSDESC_ADR_PAGE21", Const, 4},
- {"R_AARCH64_P32_TLSDESC_ADR_PREL21", Const, 4},
- {"R_AARCH64_P32_TLSDESC_CALL", Const, 4},
- {"R_AARCH64_P32_TLSDESC_LD32_LO12_NC", Const, 4},
- {"R_AARCH64_P32_TLSDESC_LD_PREL19", Const, 4},
- {"R_AARCH64_P32_TLSGD_ADD_LO12_NC", Const, 4},
- {"R_AARCH64_P32_TLSGD_ADR_PAGE21", Const, 4},
- {"R_AARCH64_P32_TLSIE_ADR_GOTTPREL_PAGE21", Const, 4},
- {"R_AARCH64_P32_TLSIE_LD32_GOTTPREL_LO12_NC", Const, 4},
- {"R_AARCH64_P32_TLSIE_LD_GOTTPREL_PREL19", Const, 4},
- {"R_AARCH64_P32_TLSLE_ADD_TPREL_HI12", Const, 4},
- {"R_AARCH64_P32_TLSLE_ADD_TPREL_LO12", Const, 4},
- {"R_AARCH64_P32_TLSLE_ADD_TPREL_LO12_NC", Const, 4},
- {"R_AARCH64_P32_TLSLE_MOVW_TPREL_G0", Const, 4},
- {"R_AARCH64_P32_TLSLE_MOVW_TPREL_G0_NC", Const, 4},
- {"R_AARCH64_P32_TLSLE_MOVW_TPREL_G1", Const, 4},
- {"R_AARCH64_P32_TLS_DTPMOD", Const, 4},
- {"R_AARCH64_P32_TLS_DTPREL", Const, 4},
- {"R_AARCH64_P32_TLS_TPREL", Const, 4},
- {"R_AARCH64_P32_TSTBR14", Const, 4},
- {"R_AARCH64_PREL16", Const, 4},
- {"R_AARCH64_PREL32", Const, 4},
- {"R_AARCH64_PREL64", Const, 4},
- {"R_AARCH64_RELATIVE", Const, 4},
- {"R_AARCH64_TLSDESC", Const, 4},
- {"R_AARCH64_TLSDESC_ADD", Const, 4},
- {"R_AARCH64_TLSDESC_ADD_LO12_NC", Const, 4},
- {"R_AARCH64_TLSDESC_ADR_PAGE21", Const, 4},
- {"R_AARCH64_TLSDESC_ADR_PREL21", Const, 4},
- {"R_AARCH64_TLSDESC_CALL", Const, 4},
- {"R_AARCH64_TLSDESC_LD64_LO12_NC", Const, 4},
- {"R_AARCH64_TLSDESC_LDR", Const, 4},
- {"R_AARCH64_TLSDESC_LD_PREL19", Const, 4},
- {"R_AARCH64_TLSDESC_OFF_G0_NC", Const, 4},
- {"R_AARCH64_TLSDESC_OFF_G1", Const, 4},
- {"R_AARCH64_TLSGD_ADD_LO12_NC", Const, 4},
- {"R_AARCH64_TLSGD_ADR_PAGE21", Const, 4},
- {"R_AARCH64_TLSGD_ADR_PREL21", Const, 10},
- {"R_AARCH64_TLSGD_MOVW_G0_NC", Const, 10},
- {"R_AARCH64_TLSGD_MOVW_G1", Const, 10},
- {"R_AARCH64_TLSIE_ADR_GOTTPREL_PAGE21", Const, 4},
- {"R_AARCH64_TLSIE_LD64_GOTTPREL_LO12_NC", Const, 4},
- {"R_AARCH64_TLSIE_LD_GOTTPREL_PREL19", Const, 4},
- {"R_AARCH64_TLSIE_MOVW_GOTTPREL_G0_NC", Const, 4},
- {"R_AARCH64_TLSIE_MOVW_GOTTPREL_G1", Const, 4},
- {"R_AARCH64_TLSLD_ADR_PAGE21", Const, 10},
- {"R_AARCH64_TLSLD_ADR_PREL21", Const, 10},
- {"R_AARCH64_TLSLD_LDST128_DTPREL_LO12", Const, 10},
- {"R_AARCH64_TLSLD_LDST128_DTPREL_LO12_NC", Const, 10},
- {"R_AARCH64_TLSLE_ADD_TPREL_HI12", Const, 4},
- {"R_AARCH64_TLSLE_ADD_TPREL_LO12", Const, 4},
- {"R_AARCH64_TLSLE_ADD_TPREL_LO12_NC", Const, 4},
- {"R_AARCH64_TLSLE_LDST128_TPREL_LO12", Const, 10},
- {"R_AARCH64_TLSLE_LDST128_TPREL_LO12_NC", Const, 10},
- {"R_AARCH64_TLSLE_MOVW_TPREL_G0", Const, 4},
- {"R_AARCH64_TLSLE_MOVW_TPREL_G0_NC", Const, 4},
- {"R_AARCH64_TLSLE_MOVW_TPREL_G1", Const, 4},
- {"R_AARCH64_TLSLE_MOVW_TPREL_G1_NC", Const, 4},
- {"R_AARCH64_TLSLE_MOVW_TPREL_G2", Const, 4},
- {"R_AARCH64_TLS_DTPMOD64", Const, 4},
- {"R_AARCH64_TLS_DTPREL64", Const, 4},
- {"R_AARCH64_TLS_TPREL64", Const, 4},
- {"R_AARCH64_TSTBR14", Const, 4},
- {"R_ALPHA", Type, 0},
- {"R_ALPHA_BRADDR", Const, 0},
- {"R_ALPHA_COPY", Const, 0},
- {"R_ALPHA_GLOB_DAT", Const, 0},
- {"R_ALPHA_GPDISP", Const, 0},
- {"R_ALPHA_GPREL32", Const, 0},
- {"R_ALPHA_GPRELHIGH", Const, 0},
- {"R_ALPHA_GPRELLOW", Const, 0},
- {"R_ALPHA_GPVALUE", Const, 0},
- {"R_ALPHA_HINT", Const, 0},
- {"R_ALPHA_IMMED_BR_HI32", Const, 0},
- {"R_ALPHA_IMMED_GP_16", Const, 0},
- {"R_ALPHA_IMMED_GP_HI32", Const, 0},
- {"R_ALPHA_IMMED_LO32", Const, 0},
- {"R_ALPHA_IMMED_SCN_HI32", Const, 0},
- {"R_ALPHA_JMP_SLOT", Const, 0},
- {"R_ALPHA_LITERAL", Const, 0},
- {"R_ALPHA_LITUSE", Const, 0},
- {"R_ALPHA_NONE", Const, 0},
- {"R_ALPHA_OP_PRSHIFT", Const, 0},
- {"R_ALPHA_OP_PSUB", Const, 0},
- {"R_ALPHA_OP_PUSH", Const, 0},
- {"R_ALPHA_OP_STORE", Const, 0},
- {"R_ALPHA_REFLONG", Const, 0},
- {"R_ALPHA_REFQUAD", Const, 0},
- {"R_ALPHA_RELATIVE", Const, 0},
- {"R_ALPHA_SREL16", Const, 0},
- {"R_ALPHA_SREL32", Const, 0},
- {"R_ALPHA_SREL64", Const, 0},
- {"R_ARM", Type, 0},
- {"R_ARM_ABS12", Const, 0},
- {"R_ARM_ABS16", Const, 0},
- {"R_ARM_ABS32", Const, 0},
- {"R_ARM_ABS32_NOI", Const, 10},
- {"R_ARM_ABS8", Const, 0},
- {"R_ARM_ALU_PCREL_15_8", Const, 10},
- {"R_ARM_ALU_PCREL_23_15", Const, 10},
- {"R_ARM_ALU_PCREL_7_0", Const, 10},
- {"R_ARM_ALU_PC_G0", Const, 10},
- {"R_ARM_ALU_PC_G0_NC", Const, 10},
- {"R_ARM_ALU_PC_G1", Const, 10},
- {"R_ARM_ALU_PC_G1_NC", Const, 10},
- {"R_ARM_ALU_PC_G2", Const, 10},
- {"R_ARM_ALU_SBREL_19_12_NC", Const, 10},
- {"R_ARM_ALU_SBREL_27_20_CK", Const, 10},
- {"R_ARM_ALU_SB_G0", Const, 10},
- {"R_ARM_ALU_SB_G0_NC", Const, 10},
- {"R_ARM_ALU_SB_G1", Const, 10},
- {"R_ARM_ALU_SB_G1_NC", Const, 10},
- {"R_ARM_ALU_SB_G2", Const, 10},
- {"R_ARM_AMP_VCALL9", Const, 0},
- {"R_ARM_BASE_ABS", Const, 10},
- {"R_ARM_CALL", Const, 10},
- {"R_ARM_COPY", Const, 0},
- {"R_ARM_GLOB_DAT", Const, 0},
- {"R_ARM_GNU_VTENTRY", Const, 0},
- {"R_ARM_GNU_VTINHERIT", Const, 0},
- {"R_ARM_GOT32", Const, 0},
- {"R_ARM_GOTOFF", Const, 0},
- {"R_ARM_GOTOFF12", Const, 10},
- {"R_ARM_GOTPC", Const, 0},
- {"R_ARM_GOTRELAX", Const, 10},
- {"R_ARM_GOT_ABS", Const, 10},
- {"R_ARM_GOT_BREL12", Const, 10},
- {"R_ARM_GOT_PREL", Const, 10},
- {"R_ARM_IRELATIVE", Const, 10},
- {"R_ARM_JUMP24", Const, 10},
- {"R_ARM_JUMP_SLOT", Const, 0},
- {"R_ARM_LDC_PC_G0", Const, 10},
- {"R_ARM_LDC_PC_G1", Const, 10},
- {"R_ARM_LDC_PC_G2", Const, 10},
- {"R_ARM_LDC_SB_G0", Const, 10},
- {"R_ARM_LDC_SB_G1", Const, 10},
- {"R_ARM_LDC_SB_G2", Const, 10},
- {"R_ARM_LDRS_PC_G0", Const, 10},
- {"R_ARM_LDRS_PC_G1", Const, 10},
- {"R_ARM_LDRS_PC_G2", Const, 10},
- {"R_ARM_LDRS_SB_G0", Const, 10},
- {"R_ARM_LDRS_SB_G1", Const, 10},
- {"R_ARM_LDRS_SB_G2", Const, 10},
- {"R_ARM_LDR_PC_G1", Const, 10},
- {"R_ARM_LDR_PC_G2", Const, 10},
- {"R_ARM_LDR_SBREL_11_10_NC", Const, 10},
- {"R_ARM_LDR_SB_G0", Const, 10},
- {"R_ARM_LDR_SB_G1", Const, 10},
- {"R_ARM_LDR_SB_G2", Const, 10},
- {"R_ARM_ME_TOO", Const, 10},
- {"R_ARM_MOVT_ABS", Const, 10},
- {"R_ARM_MOVT_BREL", Const, 10},
- {"R_ARM_MOVT_PREL", Const, 10},
- {"R_ARM_MOVW_ABS_NC", Const, 10},
- {"R_ARM_MOVW_BREL", Const, 10},
- {"R_ARM_MOVW_BREL_NC", Const, 10},
- {"R_ARM_MOVW_PREL_NC", Const, 10},
- {"R_ARM_NONE", Const, 0},
- {"R_ARM_PC13", Const, 0},
- {"R_ARM_PC24", Const, 0},
- {"R_ARM_PLT32", Const, 0},
- {"R_ARM_PLT32_ABS", Const, 10},
- {"R_ARM_PREL31", Const, 10},
- {"R_ARM_PRIVATE_0", Const, 10},
- {"R_ARM_PRIVATE_1", Const, 10},
- {"R_ARM_PRIVATE_10", Const, 10},
- {"R_ARM_PRIVATE_11", Const, 10},
- {"R_ARM_PRIVATE_12", Const, 10},
- {"R_ARM_PRIVATE_13", Const, 10},
- {"R_ARM_PRIVATE_14", Const, 10},
- {"R_ARM_PRIVATE_15", Const, 10},
- {"R_ARM_PRIVATE_2", Const, 10},
- {"R_ARM_PRIVATE_3", Const, 10},
- {"R_ARM_PRIVATE_4", Const, 10},
- {"R_ARM_PRIVATE_5", Const, 10},
- {"R_ARM_PRIVATE_6", Const, 10},
- {"R_ARM_PRIVATE_7", Const, 10},
- {"R_ARM_PRIVATE_8", Const, 10},
- {"R_ARM_PRIVATE_9", Const, 10},
- {"R_ARM_RABS32", Const, 0},
- {"R_ARM_RBASE", Const, 0},
- {"R_ARM_REL32", Const, 0},
- {"R_ARM_REL32_NOI", Const, 10},
- {"R_ARM_RELATIVE", Const, 0},
- {"R_ARM_RPC24", Const, 0},
- {"R_ARM_RREL32", Const, 0},
- {"R_ARM_RSBREL32", Const, 0},
- {"R_ARM_RXPC25", Const, 10},
- {"R_ARM_SBREL31", Const, 10},
- {"R_ARM_SBREL32", Const, 0},
- {"R_ARM_SWI24", Const, 0},
- {"R_ARM_TARGET1", Const, 10},
- {"R_ARM_TARGET2", Const, 10},
- {"R_ARM_THM_ABS5", Const, 0},
- {"R_ARM_THM_ALU_ABS_G0_NC", Const, 10},
- {"R_ARM_THM_ALU_ABS_G1_NC", Const, 10},
- {"R_ARM_THM_ALU_ABS_G2_NC", Const, 10},
- {"R_ARM_THM_ALU_ABS_G3", Const, 10},
- {"R_ARM_THM_ALU_PREL_11_0", Const, 10},
- {"R_ARM_THM_GOT_BREL12", Const, 10},
- {"R_ARM_THM_JUMP11", Const, 10},
- {"R_ARM_THM_JUMP19", Const, 10},
- {"R_ARM_THM_JUMP24", Const, 10},
- {"R_ARM_THM_JUMP6", Const, 10},
- {"R_ARM_THM_JUMP8", Const, 10},
- {"R_ARM_THM_MOVT_ABS", Const, 10},
- {"R_ARM_THM_MOVT_BREL", Const, 10},
- {"R_ARM_THM_MOVT_PREL", Const, 10},
- {"R_ARM_THM_MOVW_ABS_NC", Const, 10},
- {"R_ARM_THM_MOVW_BREL", Const, 10},
- {"R_ARM_THM_MOVW_BREL_NC", Const, 10},
- {"R_ARM_THM_MOVW_PREL_NC", Const, 10},
- {"R_ARM_THM_PC12", Const, 10},
- {"R_ARM_THM_PC22", Const, 0},
- {"R_ARM_THM_PC8", Const, 0},
- {"R_ARM_THM_RPC22", Const, 0},
- {"R_ARM_THM_SWI8", Const, 0},
- {"R_ARM_THM_TLS_CALL", Const, 10},
- {"R_ARM_THM_TLS_DESCSEQ16", Const, 10},
- {"R_ARM_THM_TLS_DESCSEQ32", Const, 10},
- {"R_ARM_THM_XPC22", Const, 0},
- {"R_ARM_TLS_CALL", Const, 10},
- {"R_ARM_TLS_DESCSEQ", Const, 10},
- {"R_ARM_TLS_DTPMOD32", Const, 10},
- {"R_ARM_TLS_DTPOFF32", Const, 10},
- {"R_ARM_TLS_GD32", Const, 10},
- {"R_ARM_TLS_GOTDESC", Const, 10},
- {"R_ARM_TLS_IE12GP", Const, 10},
- {"R_ARM_TLS_IE32", Const, 10},
- {"R_ARM_TLS_LDM32", Const, 10},
- {"R_ARM_TLS_LDO12", Const, 10},
- {"R_ARM_TLS_LDO32", Const, 10},
- {"R_ARM_TLS_LE12", Const, 10},
- {"R_ARM_TLS_LE32", Const, 10},
- {"R_ARM_TLS_TPOFF32", Const, 10},
- {"R_ARM_V4BX", Const, 10},
- {"R_ARM_XPC25", Const, 0},
- {"R_INFO", Func, 0},
- {"R_INFO32", Func, 0},
- {"R_LARCH", Type, 19},
- {"R_LARCH_32", Const, 19},
- {"R_LARCH_32_PCREL", Const, 20},
- {"R_LARCH_64", Const, 19},
- {"R_LARCH_64_PCREL", Const, 22},
- {"R_LARCH_ABS64_HI12", Const, 20},
- {"R_LARCH_ABS64_LO20", Const, 20},
- {"R_LARCH_ABS_HI20", Const, 20},
- {"R_LARCH_ABS_LO12", Const, 20},
- {"R_LARCH_ADD16", Const, 19},
- {"R_LARCH_ADD24", Const, 19},
- {"R_LARCH_ADD32", Const, 19},
- {"R_LARCH_ADD6", Const, 22},
- {"R_LARCH_ADD64", Const, 19},
- {"R_LARCH_ADD8", Const, 19},
- {"R_LARCH_ADD_ULEB128", Const, 22},
- {"R_LARCH_ALIGN", Const, 22},
- {"R_LARCH_B16", Const, 20},
- {"R_LARCH_B21", Const, 20},
- {"R_LARCH_B26", Const, 20},
- {"R_LARCH_CFA", Const, 22},
- {"R_LARCH_COPY", Const, 19},
- {"R_LARCH_DELETE", Const, 22},
- {"R_LARCH_GNU_VTENTRY", Const, 20},
- {"R_LARCH_GNU_VTINHERIT", Const, 20},
- {"R_LARCH_GOT64_HI12", Const, 20},
- {"R_LARCH_GOT64_LO20", Const, 20},
- {"R_LARCH_GOT64_PC_HI12", Const, 20},
- {"R_LARCH_GOT64_PC_LO20", Const, 20},
- {"R_LARCH_GOT_HI20", Const, 20},
- {"R_LARCH_GOT_LO12", Const, 20},
- {"R_LARCH_GOT_PC_HI20", Const, 20},
- {"R_LARCH_GOT_PC_LO12", Const, 20},
- {"R_LARCH_IRELATIVE", Const, 19},
- {"R_LARCH_JUMP_SLOT", Const, 19},
- {"R_LARCH_MARK_LA", Const, 19},
- {"R_LARCH_MARK_PCREL", Const, 19},
- {"R_LARCH_NONE", Const, 19},
- {"R_LARCH_PCALA64_HI12", Const, 20},
- {"R_LARCH_PCALA64_LO20", Const, 20},
- {"R_LARCH_PCALA_HI20", Const, 20},
- {"R_LARCH_PCALA_LO12", Const, 20},
- {"R_LARCH_PCREL20_S2", Const, 22},
- {"R_LARCH_RELATIVE", Const, 19},
- {"R_LARCH_RELAX", Const, 20},
- {"R_LARCH_SOP_ADD", Const, 19},
- {"R_LARCH_SOP_AND", Const, 19},
- {"R_LARCH_SOP_ASSERT", Const, 19},
- {"R_LARCH_SOP_IF_ELSE", Const, 19},
- {"R_LARCH_SOP_NOT", Const, 19},
- {"R_LARCH_SOP_POP_32_S_0_10_10_16_S2", Const, 19},
- {"R_LARCH_SOP_POP_32_S_0_5_10_16_S2", Const, 19},
- {"R_LARCH_SOP_POP_32_S_10_12", Const, 19},
- {"R_LARCH_SOP_POP_32_S_10_16", Const, 19},
- {"R_LARCH_SOP_POP_32_S_10_16_S2", Const, 19},
- {"R_LARCH_SOP_POP_32_S_10_5", Const, 19},
- {"R_LARCH_SOP_POP_32_S_5_20", Const, 19},
- {"R_LARCH_SOP_POP_32_U", Const, 19},
- {"R_LARCH_SOP_POP_32_U_10_12", Const, 19},
- {"R_LARCH_SOP_PUSH_ABSOLUTE", Const, 19},
- {"R_LARCH_SOP_PUSH_DUP", Const, 19},
- {"R_LARCH_SOP_PUSH_GPREL", Const, 19},
- {"R_LARCH_SOP_PUSH_PCREL", Const, 19},
- {"R_LARCH_SOP_PUSH_PLT_PCREL", Const, 19},
- {"R_LARCH_SOP_PUSH_TLS_GD", Const, 19},
- {"R_LARCH_SOP_PUSH_TLS_GOT", Const, 19},
- {"R_LARCH_SOP_PUSH_TLS_TPREL", Const, 19},
- {"R_LARCH_SOP_SL", Const, 19},
- {"R_LARCH_SOP_SR", Const, 19},
- {"R_LARCH_SOP_SUB", Const, 19},
- {"R_LARCH_SUB16", Const, 19},
- {"R_LARCH_SUB24", Const, 19},
- {"R_LARCH_SUB32", Const, 19},
- {"R_LARCH_SUB6", Const, 22},
- {"R_LARCH_SUB64", Const, 19},
- {"R_LARCH_SUB8", Const, 19},
- {"R_LARCH_SUB_ULEB128", Const, 22},
- {"R_LARCH_TLS_DTPMOD32", Const, 19},
- {"R_LARCH_TLS_DTPMOD64", Const, 19},
- {"R_LARCH_TLS_DTPREL32", Const, 19},
- {"R_LARCH_TLS_DTPREL64", Const, 19},
- {"R_LARCH_TLS_GD_HI20", Const, 20},
- {"R_LARCH_TLS_GD_PC_HI20", Const, 20},
- {"R_LARCH_TLS_IE64_HI12", Const, 20},
- {"R_LARCH_TLS_IE64_LO20", Const, 20},
- {"R_LARCH_TLS_IE64_PC_HI12", Const, 20},
- {"R_LARCH_TLS_IE64_PC_LO20", Const, 20},
- {"R_LARCH_TLS_IE_HI20", Const, 20},
- {"R_LARCH_TLS_IE_LO12", Const, 20},
- {"R_LARCH_TLS_IE_PC_HI20", Const, 20},
- {"R_LARCH_TLS_IE_PC_LO12", Const, 20},
- {"R_LARCH_TLS_LD_HI20", Const, 20},
- {"R_LARCH_TLS_LD_PC_HI20", Const, 20},
- {"R_LARCH_TLS_LE64_HI12", Const, 20},
- {"R_LARCH_TLS_LE64_LO20", Const, 20},
- {"R_LARCH_TLS_LE_HI20", Const, 20},
- {"R_LARCH_TLS_LE_LO12", Const, 20},
- {"R_LARCH_TLS_TPREL32", Const, 19},
- {"R_LARCH_TLS_TPREL64", Const, 19},
- {"R_MIPS", Type, 6},
- {"R_MIPS_16", Const, 6},
- {"R_MIPS_26", Const, 6},
- {"R_MIPS_32", Const, 6},
- {"R_MIPS_64", Const, 6},
- {"R_MIPS_ADD_IMMEDIATE", Const, 6},
- {"R_MIPS_CALL16", Const, 6},
- {"R_MIPS_CALL_HI16", Const, 6},
- {"R_MIPS_CALL_LO16", Const, 6},
- {"R_MIPS_DELETE", Const, 6},
- {"R_MIPS_GOT16", Const, 6},
- {"R_MIPS_GOT_DISP", Const, 6},
- {"R_MIPS_GOT_HI16", Const, 6},
- {"R_MIPS_GOT_LO16", Const, 6},
- {"R_MIPS_GOT_OFST", Const, 6},
- {"R_MIPS_GOT_PAGE", Const, 6},
- {"R_MIPS_GPREL16", Const, 6},
- {"R_MIPS_GPREL32", Const, 6},
- {"R_MIPS_HI16", Const, 6},
- {"R_MIPS_HIGHER", Const, 6},
- {"R_MIPS_HIGHEST", Const, 6},
- {"R_MIPS_INSERT_A", Const, 6},
- {"R_MIPS_INSERT_B", Const, 6},
- {"R_MIPS_JALR", Const, 6},
- {"R_MIPS_LITERAL", Const, 6},
- {"R_MIPS_LO16", Const, 6},
- {"R_MIPS_NONE", Const, 6},
- {"R_MIPS_PC16", Const, 6},
- {"R_MIPS_PC32", Const, 22},
- {"R_MIPS_PJUMP", Const, 6},
- {"R_MIPS_REL16", Const, 6},
- {"R_MIPS_REL32", Const, 6},
- {"R_MIPS_RELGOT", Const, 6},
- {"R_MIPS_SCN_DISP", Const, 6},
- {"R_MIPS_SHIFT5", Const, 6},
- {"R_MIPS_SHIFT6", Const, 6},
- {"R_MIPS_SUB", Const, 6},
- {"R_MIPS_TLS_DTPMOD32", Const, 6},
- {"R_MIPS_TLS_DTPMOD64", Const, 6},
- {"R_MIPS_TLS_DTPREL32", Const, 6},
- {"R_MIPS_TLS_DTPREL64", Const, 6},
- {"R_MIPS_TLS_DTPREL_HI16", Const, 6},
- {"R_MIPS_TLS_DTPREL_LO16", Const, 6},
- {"R_MIPS_TLS_GD", Const, 6},
- {"R_MIPS_TLS_GOTTPREL", Const, 6},
- {"R_MIPS_TLS_LDM", Const, 6},
- {"R_MIPS_TLS_TPREL32", Const, 6},
- {"R_MIPS_TLS_TPREL64", Const, 6},
- {"R_MIPS_TLS_TPREL_HI16", Const, 6},
- {"R_MIPS_TLS_TPREL_LO16", Const, 6},
- {"R_PPC", Type, 0},
- {"R_PPC64", Type, 5},
- {"R_PPC64_ADDR14", Const, 5},
- {"R_PPC64_ADDR14_BRNTAKEN", Const, 5},
- {"R_PPC64_ADDR14_BRTAKEN", Const, 5},
- {"R_PPC64_ADDR16", Const, 5},
- {"R_PPC64_ADDR16_DS", Const, 5},
- {"R_PPC64_ADDR16_HA", Const, 5},
- {"R_PPC64_ADDR16_HI", Const, 5},
- {"R_PPC64_ADDR16_HIGH", Const, 10},
- {"R_PPC64_ADDR16_HIGHA", Const, 10},
- {"R_PPC64_ADDR16_HIGHER", Const, 5},
- {"R_PPC64_ADDR16_HIGHER34", Const, 20},
- {"R_PPC64_ADDR16_HIGHERA", Const, 5},
- {"R_PPC64_ADDR16_HIGHERA34", Const, 20},
- {"R_PPC64_ADDR16_HIGHEST", Const, 5},
- {"R_PPC64_ADDR16_HIGHEST34", Const, 20},
- {"R_PPC64_ADDR16_HIGHESTA", Const, 5},
- {"R_PPC64_ADDR16_HIGHESTA34", Const, 20},
- {"R_PPC64_ADDR16_LO", Const, 5},
- {"R_PPC64_ADDR16_LO_DS", Const, 5},
- {"R_PPC64_ADDR24", Const, 5},
- {"R_PPC64_ADDR32", Const, 5},
- {"R_PPC64_ADDR64", Const, 5},
- {"R_PPC64_ADDR64_LOCAL", Const, 10},
- {"R_PPC64_COPY", Const, 20},
- {"R_PPC64_D28", Const, 20},
- {"R_PPC64_D34", Const, 20},
- {"R_PPC64_D34_HA30", Const, 20},
- {"R_PPC64_D34_HI30", Const, 20},
- {"R_PPC64_D34_LO", Const, 20},
- {"R_PPC64_DTPMOD64", Const, 5},
- {"R_PPC64_DTPREL16", Const, 5},
- {"R_PPC64_DTPREL16_DS", Const, 5},
- {"R_PPC64_DTPREL16_HA", Const, 5},
- {"R_PPC64_DTPREL16_HI", Const, 5},
- {"R_PPC64_DTPREL16_HIGH", Const, 10},
- {"R_PPC64_DTPREL16_HIGHA", Const, 10},
- {"R_PPC64_DTPREL16_HIGHER", Const, 5},
- {"R_PPC64_DTPREL16_HIGHERA", Const, 5},
- {"R_PPC64_DTPREL16_HIGHEST", Const, 5},
- {"R_PPC64_DTPREL16_HIGHESTA", Const, 5},
- {"R_PPC64_DTPREL16_LO", Const, 5},
- {"R_PPC64_DTPREL16_LO_DS", Const, 5},
- {"R_PPC64_DTPREL34", Const, 20},
- {"R_PPC64_DTPREL64", Const, 5},
- {"R_PPC64_ENTRY", Const, 10},
- {"R_PPC64_GLOB_DAT", Const, 20},
- {"R_PPC64_GNU_VTENTRY", Const, 20},
- {"R_PPC64_GNU_VTINHERIT", Const, 20},
- {"R_PPC64_GOT16", Const, 5},
- {"R_PPC64_GOT16_DS", Const, 5},
- {"R_PPC64_GOT16_HA", Const, 5},
- {"R_PPC64_GOT16_HI", Const, 5},
- {"R_PPC64_GOT16_LO", Const, 5},
- {"R_PPC64_GOT16_LO_DS", Const, 5},
- {"R_PPC64_GOT_DTPREL16_DS", Const, 5},
- {"R_PPC64_GOT_DTPREL16_HA", Const, 5},
- {"R_PPC64_GOT_DTPREL16_HI", Const, 5},
- {"R_PPC64_GOT_DTPREL16_LO_DS", Const, 5},
- {"R_PPC64_GOT_DTPREL_PCREL34", Const, 20},
- {"R_PPC64_GOT_PCREL34", Const, 20},
- {"R_PPC64_GOT_TLSGD16", Const, 5},
- {"R_PPC64_GOT_TLSGD16_HA", Const, 5},
- {"R_PPC64_GOT_TLSGD16_HI", Const, 5},
- {"R_PPC64_GOT_TLSGD16_LO", Const, 5},
- {"R_PPC64_GOT_TLSGD_PCREL34", Const, 20},
- {"R_PPC64_GOT_TLSLD16", Const, 5},
- {"R_PPC64_GOT_TLSLD16_HA", Const, 5},
- {"R_PPC64_GOT_TLSLD16_HI", Const, 5},
- {"R_PPC64_GOT_TLSLD16_LO", Const, 5},
- {"R_PPC64_GOT_TLSLD_PCREL34", Const, 20},
- {"R_PPC64_GOT_TPREL16_DS", Const, 5},
- {"R_PPC64_GOT_TPREL16_HA", Const, 5},
- {"R_PPC64_GOT_TPREL16_HI", Const, 5},
- {"R_PPC64_GOT_TPREL16_LO_DS", Const, 5},
- {"R_PPC64_GOT_TPREL_PCREL34", Const, 20},
- {"R_PPC64_IRELATIVE", Const, 10},
- {"R_PPC64_JMP_IREL", Const, 10},
- {"R_PPC64_JMP_SLOT", Const, 5},
- {"R_PPC64_NONE", Const, 5},
- {"R_PPC64_PCREL28", Const, 20},
- {"R_PPC64_PCREL34", Const, 20},
- {"R_PPC64_PCREL_OPT", Const, 20},
- {"R_PPC64_PLT16_HA", Const, 20},
- {"R_PPC64_PLT16_HI", Const, 20},
- {"R_PPC64_PLT16_LO", Const, 20},
- {"R_PPC64_PLT16_LO_DS", Const, 10},
- {"R_PPC64_PLT32", Const, 20},
- {"R_PPC64_PLT64", Const, 20},
- {"R_PPC64_PLTCALL", Const, 20},
- {"R_PPC64_PLTCALL_NOTOC", Const, 20},
- {"R_PPC64_PLTGOT16", Const, 10},
- {"R_PPC64_PLTGOT16_DS", Const, 10},
- {"R_PPC64_PLTGOT16_HA", Const, 10},
- {"R_PPC64_PLTGOT16_HI", Const, 10},
- {"R_PPC64_PLTGOT16_LO", Const, 10},
- {"R_PPC64_PLTGOT_LO_DS", Const, 10},
- {"R_PPC64_PLTREL32", Const, 20},
- {"R_PPC64_PLTREL64", Const, 20},
- {"R_PPC64_PLTSEQ", Const, 20},
- {"R_PPC64_PLTSEQ_NOTOC", Const, 20},
- {"R_PPC64_PLT_PCREL34", Const, 20},
- {"R_PPC64_PLT_PCREL34_NOTOC", Const, 20},
- {"R_PPC64_REL14", Const, 5},
- {"R_PPC64_REL14_BRNTAKEN", Const, 5},
- {"R_PPC64_REL14_BRTAKEN", Const, 5},
- {"R_PPC64_REL16", Const, 5},
- {"R_PPC64_REL16DX_HA", Const, 10},
- {"R_PPC64_REL16_HA", Const, 5},
- {"R_PPC64_REL16_HI", Const, 5},
- {"R_PPC64_REL16_HIGH", Const, 20},
- {"R_PPC64_REL16_HIGHA", Const, 20},
- {"R_PPC64_REL16_HIGHER", Const, 20},
- {"R_PPC64_REL16_HIGHER34", Const, 20},
- {"R_PPC64_REL16_HIGHERA", Const, 20},
- {"R_PPC64_REL16_HIGHERA34", Const, 20},
- {"R_PPC64_REL16_HIGHEST", Const, 20},
- {"R_PPC64_REL16_HIGHEST34", Const, 20},
- {"R_PPC64_REL16_HIGHESTA", Const, 20},
- {"R_PPC64_REL16_HIGHESTA34", Const, 20},
- {"R_PPC64_REL16_LO", Const, 5},
- {"R_PPC64_REL24", Const, 5},
- {"R_PPC64_REL24_NOTOC", Const, 10},
- {"R_PPC64_REL24_P9NOTOC", Const, 21},
- {"R_PPC64_REL30", Const, 20},
- {"R_PPC64_REL32", Const, 5},
- {"R_PPC64_REL64", Const, 5},
- {"R_PPC64_RELATIVE", Const, 18},
- {"R_PPC64_SECTOFF", Const, 20},
- {"R_PPC64_SECTOFF_DS", Const, 10},
- {"R_PPC64_SECTOFF_HA", Const, 20},
- {"R_PPC64_SECTOFF_HI", Const, 20},
- {"R_PPC64_SECTOFF_LO", Const, 20},
- {"R_PPC64_SECTOFF_LO_DS", Const, 10},
- {"R_PPC64_TLS", Const, 5},
- {"R_PPC64_TLSGD", Const, 5},
- {"R_PPC64_TLSLD", Const, 5},
- {"R_PPC64_TOC", Const, 5},
- {"R_PPC64_TOC16", Const, 5},
- {"R_PPC64_TOC16_DS", Const, 5},
- {"R_PPC64_TOC16_HA", Const, 5},
- {"R_PPC64_TOC16_HI", Const, 5},
- {"R_PPC64_TOC16_LO", Const, 5},
- {"R_PPC64_TOC16_LO_DS", Const, 5},
- {"R_PPC64_TOCSAVE", Const, 10},
- {"R_PPC64_TPREL16", Const, 5},
- {"R_PPC64_TPREL16_DS", Const, 5},
- {"R_PPC64_TPREL16_HA", Const, 5},
- {"R_PPC64_TPREL16_HI", Const, 5},
- {"R_PPC64_TPREL16_HIGH", Const, 10},
- {"R_PPC64_TPREL16_HIGHA", Const, 10},
- {"R_PPC64_TPREL16_HIGHER", Const, 5},
- {"R_PPC64_TPREL16_HIGHERA", Const, 5},
- {"R_PPC64_TPREL16_HIGHEST", Const, 5},
- {"R_PPC64_TPREL16_HIGHESTA", Const, 5},
- {"R_PPC64_TPREL16_LO", Const, 5},
- {"R_PPC64_TPREL16_LO_DS", Const, 5},
- {"R_PPC64_TPREL34", Const, 20},
- {"R_PPC64_TPREL64", Const, 5},
- {"R_PPC64_UADDR16", Const, 20},
- {"R_PPC64_UADDR32", Const, 20},
- {"R_PPC64_UADDR64", Const, 20},
- {"R_PPC_ADDR14", Const, 0},
- {"R_PPC_ADDR14_BRNTAKEN", Const, 0},
- {"R_PPC_ADDR14_BRTAKEN", Const, 0},
- {"R_PPC_ADDR16", Const, 0},
- {"R_PPC_ADDR16_HA", Const, 0},
- {"R_PPC_ADDR16_HI", Const, 0},
- {"R_PPC_ADDR16_LO", Const, 0},
- {"R_PPC_ADDR24", Const, 0},
- {"R_PPC_ADDR32", Const, 0},
- {"R_PPC_COPY", Const, 0},
- {"R_PPC_DTPMOD32", Const, 0},
- {"R_PPC_DTPREL16", Const, 0},
- {"R_PPC_DTPREL16_HA", Const, 0},
- {"R_PPC_DTPREL16_HI", Const, 0},
- {"R_PPC_DTPREL16_LO", Const, 0},
- {"R_PPC_DTPREL32", Const, 0},
- {"R_PPC_EMB_BIT_FLD", Const, 0},
- {"R_PPC_EMB_MRKREF", Const, 0},
- {"R_PPC_EMB_NADDR16", Const, 0},
- {"R_PPC_EMB_NADDR16_HA", Const, 0},
- {"R_PPC_EMB_NADDR16_HI", Const, 0},
- {"R_PPC_EMB_NADDR16_LO", Const, 0},
- {"R_PPC_EMB_NADDR32", Const, 0},
- {"R_PPC_EMB_RELSDA", Const, 0},
- {"R_PPC_EMB_RELSEC16", Const, 0},
- {"R_PPC_EMB_RELST_HA", Const, 0},
- {"R_PPC_EMB_RELST_HI", Const, 0},
- {"R_PPC_EMB_RELST_LO", Const, 0},
- {"R_PPC_EMB_SDA21", Const, 0},
- {"R_PPC_EMB_SDA2I16", Const, 0},
- {"R_PPC_EMB_SDA2REL", Const, 0},
- {"R_PPC_EMB_SDAI16", Const, 0},
- {"R_PPC_GLOB_DAT", Const, 0},
- {"R_PPC_GOT16", Const, 0},
- {"R_PPC_GOT16_HA", Const, 0},
- {"R_PPC_GOT16_HI", Const, 0},
- {"R_PPC_GOT16_LO", Const, 0},
- {"R_PPC_GOT_TLSGD16", Const, 0},
- {"R_PPC_GOT_TLSGD16_HA", Const, 0},
- {"R_PPC_GOT_TLSGD16_HI", Const, 0},
- {"R_PPC_GOT_TLSGD16_LO", Const, 0},
- {"R_PPC_GOT_TLSLD16", Const, 0},
- {"R_PPC_GOT_TLSLD16_HA", Const, 0},
- {"R_PPC_GOT_TLSLD16_HI", Const, 0},
- {"R_PPC_GOT_TLSLD16_LO", Const, 0},
- {"R_PPC_GOT_TPREL16", Const, 0},
- {"R_PPC_GOT_TPREL16_HA", Const, 0},
- {"R_PPC_GOT_TPREL16_HI", Const, 0},
- {"R_PPC_GOT_TPREL16_LO", Const, 0},
- {"R_PPC_JMP_SLOT", Const, 0},
- {"R_PPC_LOCAL24PC", Const, 0},
- {"R_PPC_NONE", Const, 0},
- {"R_PPC_PLT16_HA", Const, 0},
- {"R_PPC_PLT16_HI", Const, 0},
- {"R_PPC_PLT16_LO", Const, 0},
- {"R_PPC_PLT32", Const, 0},
- {"R_PPC_PLTREL24", Const, 0},
- {"R_PPC_PLTREL32", Const, 0},
- {"R_PPC_REL14", Const, 0},
- {"R_PPC_REL14_BRNTAKEN", Const, 0},
- {"R_PPC_REL14_BRTAKEN", Const, 0},
- {"R_PPC_REL24", Const, 0},
- {"R_PPC_REL32", Const, 0},
- {"R_PPC_RELATIVE", Const, 0},
- {"R_PPC_SDAREL16", Const, 0},
- {"R_PPC_SECTOFF", Const, 0},
- {"R_PPC_SECTOFF_HA", Const, 0},
- {"R_PPC_SECTOFF_HI", Const, 0},
- {"R_PPC_SECTOFF_LO", Const, 0},
- {"R_PPC_TLS", Const, 0},
- {"R_PPC_TPREL16", Const, 0},
- {"R_PPC_TPREL16_HA", Const, 0},
- {"R_PPC_TPREL16_HI", Const, 0},
- {"R_PPC_TPREL16_LO", Const, 0},
- {"R_PPC_TPREL32", Const, 0},
- {"R_PPC_UADDR16", Const, 0},
- {"R_PPC_UADDR32", Const, 0},
- {"R_RISCV", Type, 11},
- {"R_RISCV_32", Const, 11},
- {"R_RISCV_32_PCREL", Const, 12},
- {"R_RISCV_64", Const, 11},
- {"R_RISCV_ADD16", Const, 11},
- {"R_RISCV_ADD32", Const, 11},
- {"R_RISCV_ADD64", Const, 11},
- {"R_RISCV_ADD8", Const, 11},
- {"R_RISCV_ALIGN", Const, 11},
- {"R_RISCV_BRANCH", Const, 11},
- {"R_RISCV_CALL", Const, 11},
- {"R_RISCV_CALL_PLT", Const, 11},
- {"R_RISCV_COPY", Const, 11},
- {"R_RISCV_GNU_VTENTRY", Const, 11},
- {"R_RISCV_GNU_VTINHERIT", Const, 11},
- {"R_RISCV_GOT_HI20", Const, 11},
- {"R_RISCV_GPREL_I", Const, 11},
- {"R_RISCV_GPREL_S", Const, 11},
- {"R_RISCV_HI20", Const, 11},
- {"R_RISCV_JAL", Const, 11},
- {"R_RISCV_JUMP_SLOT", Const, 11},
- {"R_RISCV_LO12_I", Const, 11},
- {"R_RISCV_LO12_S", Const, 11},
- {"R_RISCV_NONE", Const, 11},
- {"R_RISCV_PCREL_HI20", Const, 11},
- {"R_RISCV_PCREL_LO12_I", Const, 11},
- {"R_RISCV_PCREL_LO12_S", Const, 11},
- {"R_RISCV_RELATIVE", Const, 11},
- {"R_RISCV_RELAX", Const, 11},
- {"R_RISCV_RVC_BRANCH", Const, 11},
- {"R_RISCV_RVC_JUMP", Const, 11},
- {"R_RISCV_RVC_LUI", Const, 11},
- {"R_RISCV_SET16", Const, 11},
- {"R_RISCV_SET32", Const, 11},
- {"R_RISCV_SET6", Const, 11},
- {"R_RISCV_SET8", Const, 11},
- {"R_RISCV_SUB16", Const, 11},
- {"R_RISCV_SUB32", Const, 11},
- {"R_RISCV_SUB6", Const, 11},
- {"R_RISCV_SUB64", Const, 11},
- {"R_RISCV_SUB8", Const, 11},
- {"R_RISCV_TLS_DTPMOD32", Const, 11},
- {"R_RISCV_TLS_DTPMOD64", Const, 11},
- {"R_RISCV_TLS_DTPREL32", Const, 11},
- {"R_RISCV_TLS_DTPREL64", Const, 11},
- {"R_RISCV_TLS_GD_HI20", Const, 11},
- {"R_RISCV_TLS_GOT_HI20", Const, 11},
- {"R_RISCV_TLS_TPREL32", Const, 11},
- {"R_RISCV_TLS_TPREL64", Const, 11},
- {"R_RISCV_TPREL_ADD", Const, 11},
- {"R_RISCV_TPREL_HI20", Const, 11},
- {"R_RISCV_TPREL_I", Const, 11},
- {"R_RISCV_TPREL_LO12_I", Const, 11},
- {"R_RISCV_TPREL_LO12_S", Const, 11},
- {"R_RISCV_TPREL_S", Const, 11},
- {"R_SPARC", Type, 0},
- {"R_SPARC_10", Const, 0},
- {"R_SPARC_11", Const, 0},
- {"R_SPARC_13", Const, 0},
- {"R_SPARC_16", Const, 0},
- {"R_SPARC_22", Const, 0},
- {"R_SPARC_32", Const, 0},
- {"R_SPARC_5", Const, 0},
- {"R_SPARC_6", Const, 0},
- {"R_SPARC_64", Const, 0},
- {"R_SPARC_7", Const, 0},
- {"R_SPARC_8", Const, 0},
- {"R_SPARC_COPY", Const, 0},
- {"R_SPARC_DISP16", Const, 0},
- {"R_SPARC_DISP32", Const, 0},
- {"R_SPARC_DISP64", Const, 0},
- {"R_SPARC_DISP8", Const, 0},
- {"R_SPARC_GLOB_DAT", Const, 0},
- {"R_SPARC_GLOB_JMP", Const, 0},
- {"R_SPARC_GOT10", Const, 0},
- {"R_SPARC_GOT13", Const, 0},
- {"R_SPARC_GOT22", Const, 0},
- {"R_SPARC_H44", Const, 0},
- {"R_SPARC_HH22", Const, 0},
- {"R_SPARC_HI22", Const, 0},
- {"R_SPARC_HIPLT22", Const, 0},
- {"R_SPARC_HIX22", Const, 0},
- {"R_SPARC_HM10", Const, 0},
- {"R_SPARC_JMP_SLOT", Const, 0},
- {"R_SPARC_L44", Const, 0},
- {"R_SPARC_LM22", Const, 0},
- {"R_SPARC_LO10", Const, 0},
- {"R_SPARC_LOPLT10", Const, 0},
- {"R_SPARC_LOX10", Const, 0},
- {"R_SPARC_M44", Const, 0},
- {"R_SPARC_NONE", Const, 0},
- {"R_SPARC_OLO10", Const, 0},
- {"R_SPARC_PC10", Const, 0},
- {"R_SPARC_PC22", Const, 0},
- {"R_SPARC_PCPLT10", Const, 0},
- {"R_SPARC_PCPLT22", Const, 0},
- {"R_SPARC_PCPLT32", Const, 0},
- {"R_SPARC_PC_HH22", Const, 0},
- {"R_SPARC_PC_HM10", Const, 0},
- {"R_SPARC_PC_LM22", Const, 0},
- {"R_SPARC_PLT32", Const, 0},
- {"R_SPARC_PLT64", Const, 0},
- {"R_SPARC_REGISTER", Const, 0},
- {"R_SPARC_RELATIVE", Const, 0},
- {"R_SPARC_UA16", Const, 0},
- {"R_SPARC_UA32", Const, 0},
- {"R_SPARC_UA64", Const, 0},
- {"R_SPARC_WDISP16", Const, 0},
- {"R_SPARC_WDISP19", Const, 0},
- {"R_SPARC_WDISP22", Const, 0},
- {"R_SPARC_WDISP30", Const, 0},
- {"R_SPARC_WPLT30", Const, 0},
- {"R_SYM32", Func, 0},
- {"R_SYM64", Func, 0},
- {"R_TYPE32", Func, 0},
- {"R_TYPE64", Func, 0},
- {"R_X86_64", Type, 0},
- {"R_X86_64_16", Const, 0},
- {"R_X86_64_32", Const, 0},
- {"R_X86_64_32S", Const, 0},
- {"R_X86_64_64", Const, 0},
- {"R_X86_64_8", Const, 0},
- {"R_X86_64_COPY", Const, 0},
- {"R_X86_64_DTPMOD64", Const, 0},
- {"R_X86_64_DTPOFF32", Const, 0},
- {"R_X86_64_DTPOFF64", Const, 0},
- {"R_X86_64_GLOB_DAT", Const, 0},
- {"R_X86_64_GOT32", Const, 0},
- {"R_X86_64_GOT64", Const, 10},
- {"R_X86_64_GOTOFF64", Const, 10},
- {"R_X86_64_GOTPC32", Const, 10},
- {"R_X86_64_GOTPC32_TLSDESC", Const, 10},
- {"R_X86_64_GOTPC64", Const, 10},
- {"R_X86_64_GOTPCREL", Const, 0},
- {"R_X86_64_GOTPCREL64", Const, 10},
- {"R_X86_64_GOTPCRELX", Const, 10},
- {"R_X86_64_GOTPLT64", Const, 10},
- {"R_X86_64_GOTTPOFF", Const, 0},
- {"R_X86_64_IRELATIVE", Const, 10},
- {"R_X86_64_JMP_SLOT", Const, 0},
- {"R_X86_64_NONE", Const, 0},
- {"R_X86_64_PC16", Const, 0},
- {"R_X86_64_PC32", Const, 0},
- {"R_X86_64_PC32_BND", Const, 10},
- {"R_X86_64_PC64", Const, 10},
- {"R_X86_64_PC8", Const, 0},
- {"R_X86_64_PLT32", Const, 0},
- {"R_X86_64_PLT32_BND", Const, 10},
- {"R_X86_64_PLTOFF64", Const, 10},
- {"R_X86_64_RELATIVE", Const, 0},
- {"R_X86_64_RELATIVE64", Const, 10},
- {"R_X86_64_REX_GOTPCRELX", Const, 10},
- {"R_X86_64_SIZE32", Const, 10},
- {"R_X86_64_SIZE64", Const, 10},
- {"R_X86_64_TLSDESC", Const, 10},
- {"R_X86_64_TLSDESC_CALL", Const, 10},
- {"R_X86_64_TLSGD", Const, 0},
- {"R_X86_64_TLSLD", Const, 0},
- {"R_X86_64_TPOFF32", Const, 0},
- {"R_X86_64_TPOFF64", Const, 0},
- {"Rel32", Type, 0},
- {"Rel32.Info", Field, 0},
- {"Rel32.Off", Field, 0},
- {"Rel64", Type, 0},
- {"Rel64.Info", Field, 0},
- {"Rel64.Off", Field, 0},
- {"Rela32", Type, 0},
- {"Rela32.Addend", Field, 0},
- {"Rela32.Info", Field, 0},
- {"Rela32.Off", Field, 0},
- {"Rela64", Type, 0},
- {"Rela64.Addend", Field, 0},
- {"Rela64.Info", Field, 0},
- {"Rela64.Off", Field, 0},
- {"SHF_ALLOC", Const, 0},
- {"SHF_COMPRESSED", Const, 6},
- {"SHF_EXECINSTR", Const, 0},
- {"SHF_GROUP", Const, 0},
- {"SHF_INFO_LINK", Const, 0},
- {"SHF_LINK_ORDER", Const, 0},
- {"SHF_MASKOS", Const, 0},
- {"SHF_MASKPROC", Const, 0},
- {"SHF_MERGE", Const, 0},
- {"SHF_OS_NONCONFORMING", Const, 0},
- {"SHF_STRINGS", Const, 0},
- {"SHF_TLS", Const, 0},
- {"SHF_WRITE", Const, 0},
- {"SHN_ABS", Const, 0},
- {"SHN_COMMON", Const, 0},
- {"SHN_HIOS", Const, 0},
- {"SHN_HIPROC", Const, 0},
- {"SHN_HIRESERVE", Const, 0},
- {"SHN_LOOS", Const, 0},
- {"SHN_LOPROC", Const, 0},
- {"SHN_LORESERVE", Const, 0},
- {"SHN_UNDEF", Const, 0},
- {"SHN_XINDEX", Const, 0},
- {"SHT_DYNAMIC", Const, 0},
- {"SHT_DYNSYM", Const, 0},
- {"SHT_FINI_ARRAY", Const, 0},
- {"SHT_GNU_ATTRIBUTES", Const, 0},
- {"SHT_GNU_HASH", Const, 0},
- {"SHT_GNU_LIBLIST", Const, 0},
- {"SHT_GNU_VERDEF", Const, 0},
- {"SHT_GNU_VERNEED", Const, 0},
- {"SHT_GNU_VERSYM", Const, 0},
- {"SHT_GROUP", Const, 0},
- {"SHT_HASH", Const, 0},
- {"SHT_HIOS", Const, 0},
- {"SHT_HIPROC", Const, 0},
- {"SHT_HIUSER", Const, 0},
- {"SHT_INIT_ARRAY", Const, 0},
- {"SHT_LOOS", Const, 0},
- {"SHT_LOPROC", Const, 0},
- {"SHT_LOUSER", Const, 0},
- {"SHT_MIPS_ABIFLAGS", Const, 17},
- {"SHT_NOBITS", Const, 0},
- {"SHT_NOTE", Const, 0},
- {"SHT_NULL", Const, 0},
- {"SHT_PREINIT_ARRAY", Const, 0},
- {"SHT_PROGBITS", Const, 0},
- {"SHT_REL", Const, 0},
- {"SHT_RELA", Const, 0},
- {"SHT_SHLIB", Const, 0},
- {"SHT_STRTAB", Const, 0},
- {"SHT_SYMTAB", Const, 0},
- {"SHT_SYMTAB_SHNDX", Const, 0},
- {"STB_GLOBAL", Const, 0},
- {"STB_HIOS", Const, 0},
- {"STB_HIPROC", Const, 0},
- {"STB_LOCAL", Const, 0},
- {"STB_LOOS", Const, 0},
- {"STB_LOPROC", Const, 0},
- {"STB_WEAK", Const, 0},
- {"STT_COMMON", Const, 0},
- {"STT_FILE", Const, 0},
- {"STT_FUNC", Const, 0},
- {"STT_GNU_IFUNC", Const, 23},
- {"STT_HIOS", Const, 0},
- {"STT_HIPROC", Const, 0},
- {"STT_LOOS", Const, 0},
- {"STT_LOPROC", Const, 0},
- {"STT_NOTYPE", Const, 0},
- {"STT_OBJECT", Const, 0},
- {"STT_RELC", Const, 23},
- {"STT_SECTION", Const, 0},
- {"STT_SRELC", Const, 23},
- {"STT_TLS", Const, 0},
- {"STV_DEFAULT", Const, 0},
- {"STV_HIDDEN", Const, 0},
- {"STV_INTERNAL", Const, 0},
- {"STV_PROTECTED", Const, 0},
- {"ST_BIND", Func, 0},
- {"ST_INFO", Func, 0},
- {"ST_TYPE", Func, 0},
- {"ST_VISIBILITY", Func, 0},
- {"Section", Type, 0},
- {"Section.ReaderAt", Field, 0},
- {"Section.SectionHeader", Field, 0},
- {"Section32", Type, 0},
- {"Section32.Addr", Field, 0},
- {"Section32.Addralign", Field, 0},
- {"Section32.Entsize", Field, 0},
- {"Section32.Flags", Field, 0},
- {"Section32.Info", Field, 0},
- {"Section32.Link", Field, 0},
- {"Section32.Name", Field, 0},
- {"Section32.Off", Field, 0},
- {"Section32.Size", Field, 0},
- {"Section32.Type", Field, 0},
- {"Section64", Type, 0},
- {"Section64.Addr", Field, 0},
- {"Section64.Addralign", Field, 0},
- {"Section64.Entsize", Field, 0},
- {"Section64.Flags", Field, 0},
- {"Section64.Info", Field, 0},
- {"Section64.Link", Field, 0},
- {"Section64.Name", Field, 0},
- {"Section64.Off", Field, 0},
- {"Section64.Size", Field, 0},
- {"Section64.Type", Field, 0},
- {"SectionFlag", Type, 0},
- {"SectionHeader", Type, 0},
- {"SectionHeader.Addr", Field, 0},
- {"SectionHeader.Addralign", Field, 0},
- {"SectionHeader.Entsize", Field, 0},
- {"SectionHeader.FileSize", Field, 6},
- {"SectionHeader.Flags", Field, 0},
- {"SectionHeader.Info", Field, 0},
- {"SectionHeader.Link", Field, 0},
- {"SectionHeader.Name", Field, 0},
- {"SectionHeader.Offset", Field, 0},
- {"SectionHeader.Size", Field, 0},
- {"SectionHeader.Type", Field, 0},
- {"SectionIndex", Type, 0},
- {"SectionType", Type, 0},
- {"Sym32", Type, 0},
- {"Sym32.Info", Field, 0},
- {"Sym32.Name", Field, 0},
- {"Sym32.Other", Field, 0},
- {"Sym32.Shndx", Field, 0},
- {"Sym32.Size", Field, 0},
- {"Sym32.Value", Field, 0},
- {"Sym32Size", Const, 0},
- {"Sym64", Type, 0},
- {"Sym64.Info", Field, 0},
- {"Sym64.Name", Field, 0},
- {"Sym64.Other", Field, 0},
- {"Sym64.Shndx", Field, 0},
- {"Sym64.Size", Field, 0},
- {"Sym64.Value", Field, 0},
- {"Sym64Size", Const, 0},
- {"SymBind", Type, 0},
- {"SymType", Type, 0},
- {"SymVis", Type, 0},
- {"Symbol", Type, 0},
- {"Symbol.Info", Field, 0},
- {"Symbol.Library", Field, 13},
- {"Symbol.Name", Field, 0},
- {"Symbol.Other", Field, 0},
- {"Symbol.Section", Field, 0},
- {"Symbol.Size", Field, 0},
- {"Symbol.Value", Field, 0},
- {"Symbol.Version", Field, 13},
- {"Type", Type, 0},
- {"Version", Type, 0},
- },
- "debug/gosym": {
- {"(*DecodingError).Error", Method, 0},
- {"(*LineTable).LineToPC", Method, 0},
- {"(*LineTable).PCToLine", Method, 0},
- {"(*Sym).BaseName", Method, 0},
- {"(*Sym).PackageName", Method, 0},
- {"(*Sym).ReceiverName", Method, 0},
- {"(*Sym).Static", Method, 0},
- {"(*Table).LineToPC", Method, 0},
- {"(*Table).LookupFunc", Method, 0},
- {"(*Table).LookupSym", Method, 0},
- {"(*Table).PCToFunc", Method, 0},
- {"(*Table).PCToLine", Method, 0},
- {"(*Table).SymByAddr", Method, 0},
- {"(*UnknownLineError).Error", Method, 0},
- {"(Func).BaseName", Method, 0},
- {"(Func).PackageName", Method, 0},
- {"(Func).ReceiverName", Method, 0},
- {"(Func).Static", Method, 0},
- {"(UnknownFileError).Error", Method, 0},
- {"DecodingError", Type, 0},
- {"Func", Type, 0},
- {"Func.End", Field, 0},
- {"Func.Entry", Field, 0},
- {"Func.FrameSize", Field, 0},
- {"Func.LineTable", Field, 0},
- {"Func.Locals", Field, 0},
- {"Func.Obj", Field, 0},
- {"Func.Params", Field, 0},
- {"Func.Sym", Field, 0},
- {"LineTable", Type, 0},
- {"LineTable.Data", Field, 0},
- {"LineTable.Line", Field, 0},
- {"LineTable.PC", Field, 0},
- {"NewLineTable", Func, 0},
- {"NewTable", Func, 0},
- {"Obj", Type, 0},
- {"Obj.Funcs", Field, 0},
- {"Obj.Paths", Field, 0},
- {"Sym", Type, 0},
- {"Sym.Func", Field, 0},
- {"Sym.GoType", Field, 0},
- {"Sym.Name", Field, 0},
- {"Sym.Type", Field, 0},
- {"Sym.Value", Field, 0},
- {"Table", Type, 0},
- {"Table.Files", Field, 0},
- {"Table.Funcs", Field, 0},
- {"Table.Objs", Field, 0},
- {"Table.Syms", Field, 0},
- {"UnknownFileError", Type, 0},
- {"UnknownLineError", Type, 0},
- {"UnknownLineError.File", Field, 0},
- {"UnknownLineError.Line", Field, 0},
- },
- "debug/macho": {
- {"(*FatFile).Close", Method, 3},
- {"(*File).Close", Method, 0},
- {"(*File).DWARF", Method, 0},
- {"(*File).ImportedLibraries", Method, 0},
- {"(*File).ImportedSymbols", Method, 0},
- {"(*File).Section", Method, 0},
- {"(*File).Segment", Method, 0},
- {"(*FormatError).Error", Method, 0},
- {"(*Section).Data", Method, 0},
- {"(*Section).Open", Method, 0},
- {"(*Segment).Data", Method, 0},
- {"(*Segment).Open", Method, 0},
- {"(Cpu).GoString", Method, 0},
- {"(Cpu).String", Method, 0},
- {"(Dylib).Raw", Method, 0},
- {"(Dysymtab).Raw", Method, 0},
- {"(FatArch).Close", Method, 3},
- {"(FatArch).DWARF", Method, 3},
- {"(FatArch).ImportedLibraries", Method, 3},
- {"(FatArch).ImportedSymbols", Method, 3},
- {"(FatArch).Section", Method, 3},
- {"(FatArch).Segment", Method, 3},
- {"(LoadBytes).Raw", Method, 0},
- {"(LoadCmd).GoString", Method, 0},
- {"(LoadCmd).String", Method, 0},
- {"(RelocTypeARM).GoString", Method, 10},
- {"(RelocTypeARM).String", Method, 10},
- {"(RelocTypeARM64).GoString", Method, 10},
- {"(RelocTypeARM64).String", Method, 10},
- {"(RelocTypeGeneric).GoString", Method, 10},
- {"(RelocTypeGeneric).String", Method, 10},
- {"(RelocTypeX86_64).GoString", Method, 10},
- {"(RelocTypeX86_64).String", Method, 10},
- {"(Rpath).Raw", Method, 10},
- {"(Section).ReadAt", Method, 0},
- {"(Segment).Raw", Method, 0},
- {"(Segment).ReadAt", Method, 0},
- {"(Symtab).Raw", Method, 0},
- {"(Type).GoString", Method, 10},
- {"(Type).String", Method, 10},
- {"ARM64_RELOC_ADDEND", Const, 10},
- {"ARM64_RELOC_BRANCH26", Const, 10},
- {"ARM64_RELOC_GOT_LOAD_PAGE21", Const, 10},
- {"ARM64_RELOC_GOT_LOAD_PAGEOFF12", Const, 10},
- {"ARM64_RELOC_PAGE21", Const, 10},
- {"ARM64_RELOC_PAGEOFF12", Const, 10},
- {"ARM64_RELOC_POINTER_TO_GOT", Const, 10},
- {"ARM64_RELOC_SUBTRACTOR", Const, 10},
- {"ARM64_RELOC_TLVP_LOAD_PAGE21", Const, 10},
- {"ARM64_RELOC_TLVP_LOAD_PAGEOFF12", Const, 10},
- {"ARM64_RELOC_UNSIGNED", Const, 10},
- {"ARM_RELOC_BR24", Const, 10},
- {"ARM_RELOC_HALF", Const, 10},
- {"ARM_RELOC_HALF_SECTDIFF", Const, 10},
- {"ARM_RELOC_LOCAL_SECTDIFF", Const, 10},
- {"ARM_RELOC_PAIR", Const, 10},
- {"ARM_RELOC_PB_LA_PTR", Const, 10},
- {"ARM_RELOC_SECTDIFF", Const, 10},
- {"ARM_RELOC_VANILLA", Const, 10},
- {"ARM_THUMB_32BIT_BRANCH", Const, 10},
- {"ARM_THUMB_RELOC_BR22", Const, 10},
- {"Cpu", Type, 0},
- {"Cpu386", Const, 0},
- {"CpuAmd64", Const, 0},
- {"CpuArm", Const, 3},
- {"CpuArm64", Const, 11},
- {"CpuPpc", Const, 3},
- {"CpuPpc64", Const, 3},
- {"Dylib", Type, 0},
- {"Dylib.CompatVersion", Field, 0},
- {"Dylib.CurrentVersion", Field, 0},
- {"Dylib.LoadBytes", Field, 0},
- {"Dylib.Name", Field, 0},
- {"Dylib.Time", Field, 0},
- {"DylibCmd", Type, 0},
- {"DylibCmd.Cmd", Field, 0},
- {"DylibCmd.CompatVersion", Field, 0},
- {"DylibCmd.CurrentVersion", Field, 0},
- {"DylibCmd.Len", Field, 0},
- {"DylibCmd.Name", Field, 0},
- {"DylibCmd.Time", Field, 0},
- {"Dysymtab", Type, 0},
- {"Dysymtab.DysymtabCmd", Field, 0},
- {"Dysymtab.IndirectSyms", Field, 0},
- {"Dysymtab.LoadBytes", Field, 0},
- {"DysymtabCmd", Type, 0},
- {"DysymtabCmd.Cmd", Field, 0},
- {"DysymtabCmd.Extrefsymoff", Field, 0},
- {"DysymtabCmd.Extreloff", Field, 0},
- {"DysymtabCmd.Iextdefsym", Field, 0},
- {"DysymtabCmd.Ilocalsym", Field, 0},
- {"DysymtabCmd.Indirectsymoff", Field, 0},
- {"DysymtabCmd.Iundefsym", Field, 0},
- {"DysymtabCmd.Len", Field, 0},
- {"DysymtabCmd.Locreloff", Field, 0},
- {"DysymtabCmd.Modtaboff", Field, 0},
- {"DysymtabCmd.Nextdefsym", Field, 0},
- {"DysymtabCmd.Nextrefsyms", Field, 0},
- {"DysymtabCmd.Nextrel", Field, 0},
- {"DysymtabCmd.Nindirectsyms", Field, 0},
- {"DysymtabCmd.Nlocalsym", Field, 0},
- {"DysymtabCmd.Nlocrel", Field, 0},
- {"DysymtabCmd.Nmodtab", Field, 0},
- {"DysymtabCmd.Ntoc", Field, 0},
- {"DysymtabCmd.Nundefsym", Field, 0},
- {"DysymtabCmd.Tocoffset", Field, 0},
- {"ErrNotFat", Var, 3},
- {"FatArch", Type, 3},
- {"FatArch.FatArchHeader", Field, 3},
- {"FatArch.File", Field, 3},
- {"FatArchHeader", Type, 3},
- {"FatArchHeader.Align", Field, 3},
- {"FatArchHeader.Cpu", Field, 3},
- {"FatArchHeader.Offset", Field, 3},
- {"FatArchHeader.Size", Field, 3},
- {"FatArchHeader.SubCpu", Field, 3},
- {"FatFile", Type, 3},
- {"FatFile.Arches", Field, 3},
- {"FatFile.Magic", Field, 3},
- {"File", Type, 0},
- {"File.ByteOrder", Field, 0},
- {"File.Dysymtab", Field, 0},
- {"File.FileHeader", Field, 0},
- {"File.Loads", Field, 0},
- {"File.Sections", Field, 0},
- {"File.Symtab", Field, 0},
- {"FileHeader", Type, 0},
- {"FileHeader.Cmdsz", Field, 0},
- {"FileHeader.Cpu", Field, 0},
- {"FileHeader.Flags", Field, 0},
- {"FileHeader.Magic", Field, 0},
- {"FileHeader.Ncmd", Field, 0},
- {"FileHeader.SubCpu", Field, 0},
- {"FileHeader.Type", Field, 0},
- {"FlagAllModsBound", Const, 10},
- {"FlagAllowStackExecution", Const, 10},
- {"FlagAppExtensionSafe", Const, 10},
- {"FlagBindAtLoad", Const, 10},
- {"FlagBindsToWeak", Const, 10},
- {"FlagCanonical", Const, 10},
- {"FlagDeadStrippableDylib", Const, 10},
- {"FlagDyldLink", Const, 10},
- {"FlagForceFlat", Const, 10},
- {"FlagHasTLVDescriptors", Const, 10},
- {"FlagIncrLink", Const, 10},
- {"FlagLazyInit", Const, 10},
- {"FlagNoFixPrebinding", Const, 10},
- {"FlagNoHeapExecution", Const, 10},
- {"FlagNoMultiDefs", Const, 10},
- {"FlagNoReexportedDylibs", Const, 10},
- {"FlagNoUndefs", Const, 10},
- {"FlagPIE", Const, 10},
- {"FlagPrebindable", Const, 10},
- {"FlagPrebound", Const, 10},
- {"FlagRootSafe", Const, 10},
- {"FlagSetuidSafe", Const, 10},
- {"FlagSplitSegs", Const, 10},
- {"FlagSubsectionsViaSymbols", Const, 10},
- {"FlagTwoLevel", Const, 10},
- {"FlagWeakDefines", Const, 10},
- {"FormatError", Type, 0},
- {"GENERIC_RELOC_LOCAL_SECTDIFF", Const, 10},
- {"GENERIC_RELOC_PAIR", Const, 10},
- {"GENERIC_RELOC_PB_LA_PTR", Const, 10},
- {"GENERIC_RELOC_SECTDIFF", Const, 10},
- {"GENERIC_RELOC_TLV", Const, 10},
- {"GENERIC_RELOC_VANILLA", Const, 10},
- {"Load", Type, 0},
- {"LoadBytes", Type, 0},
- {"LoadCmd", Type, 0},
- {"LoadCmdDylib", Const, 0},
- {"LoadCmdDylinker", Const, 0},
- {"LoadCmdDysymtab", Const, 0},
- {"LoadCmdRpath", Const, 10},
- {"LoadCmdSegment", Const, 0},
- {"LoadCmdSegment64", Const, 0},
- {"LoadCmdSymtab", Const, 0},
- {"LoadCmdThread", Const, 0},
- {"LoadCmdUnixThread", Const, 0},
- {"Magic32", Const, 0},
- {"Magic64", Const, 0},
- {"MagicFat", Const, 3},
- {"NewFatFile", Func, 3},
- {"NewFile", Func, 0},
- {"Nlist32", Type, 0},
- {"Nlist32.Desc", Field, 0},
- {"Nlist32.Name", Field, 0},
- {"Nlist32.Sect", Field, 0},
- {"Nlist32.Type", Field, 0},
- {"Nlist32.Value", Field, 0},
- {"Nlist64", Type, 0},
- {"Nlist64.Desc", Field, 0},
- {"Nlist64.Name", Field, 0},
- {"Nlist64.Sect", Field, 0},
- {"Nlist64.Type", Field, 0},
- {"Nlist64.Value", Field, 0},
- {"Open", Func, 0},
- {"OpenFat", Func, 3},
- {"Regs386", Type, 0},
- {"Regs386.AX", Field, 0},
- {"Regs386.BP", Field, 0},
- {"Regs386.BX", Field, 0},
- {"Regs386.CS", Field, 0},
- {"Regs386.CX", Field, 0},
- {"Regs386.DI", Field, 0},
- {"Regs386.DS", Field, 0},
- {"Regs386.DX", Field, 0},
- {"Regs386.ES", Field, 0},
- {"Regs386.FLAGS", Field, 0},
- {"Regs386.FS", Field, 0},
- {"Regs386.GS", Field, 0},
- {"Regs386.IP", Field, 0},
- {"Regs386.SI", Field, 0},
- {"Regs386.SP", Field, 0},
- {"Regs386.SS", Field, 0},
- {"RegsAMD64", Type, 0},
- {"RegsAMD64.AX", Field, 0},
- {"RegsAMD64.BP", Field, 0},
- {"RegsAMD64.BX", Field, 0},
- {"RegsAMD64.CS", Field, 0},
- {"RegsAMD64.CX", Field, 0},
- {"RegsAMD64.DI", Field, 0},
- {"RegsAMD64.DX", Field, 0},
- {"RegsAMD64.FLAGS", Field, 0},
- {"RegsAMD64.FS", Field, 0},
- {"RegsAMD64.GS", Field, 0},
- {"RegsAMD64.IP", Field, 0},
- {"RegsAMD64.R10", Field, 0},
- {"RegsAMD64.R11", Field, 0},
- {"RegsAMD64.R12", Field, 0},
- {"RegsAMD64.R13", Field, 0},
- {"RegsAMD64.R14", Field, 0},
- {"RegsAMD64.R15", Field, 0},
- {"RegsAMD64.R8", Field, 0},
- {"RegsAMD64.R9", Field, 0},
- {"RegsAMD64.SI", Field, 0},
- {"RegsAMD64.SP", Field, 0},
- {"Reloc", Type, 10},
- {"Reloc.Addr", Field, 10},
- {"Reloc.Extern", Field, 10},
- {"Reloc.Len", Field, 10},
- {"Reloc.Pcrel", Field, 10},
- {"Reloc.Scattered", Field, 10},
- {"Reloc.Type", Field, 10},
- {"Reloc.Value", Field, 10},
- {"RelocTypeARM", Type, 10},
- {"RelocTypeARM64", Type, 10},
- {"RelocTypeGeneric", Type, 10},
- {"RelocTypeX86_64", Type, 10},
- {"Rpath", Type, 10},
- {"Rpath.LoadBytes", Field, 10},
- {"Rpath.Path", Field, 10},
- {"RpathCmd", Type, 10},
- {"RpathCmd.Cmd", Field, 10},
- {"RpathCmd.Len", Field, 10},
- {"RpathCmd.Path", Field, 10},
- {"Section", Type, 0},
- {"Section.ReaderAt", Field, 0},
- {"Section.Relocs", Field, 10},
- {"Section.SectionHeader", Field, 0},
- {"Section32", Type, 0},
- {"Section32.Addr", Field, 0},
- {"Section32.Align", Field, 0},
- {"Section32.Flags", Field, 0},
- {"Section32.Name", Field, 0},
- {"Section32.Nreloc", Field, 0},
- {"Section32.Offset", Field, 0},
- {"Section32.Reloff", Field, 0},
- {"Section32.Reserve1", Field, 0},
- {"Section32.Reserve2", Field, 0},
- {"Section32.Seg", Field, 0},
- {"Section32.Size", Field, 0},
- {"Section64", Type, 0},
- {"Section64.Addr", Field, 0},
- {"Section64.Align", Field, 0},
- {"Section64.Flags", Field, 0},
- {"Section64.Name", Field, 0},
- {"Section64.Nreloc", Field, 0},
- {"Section64.Offset", Field, 0},
- {"Section64.Reloff", Field, 0},
- {"Section64.Reserve1", Field, 0},
- {"Section64.Reserve2", Field, 0},
- {"Section64.Reserve3", Field, 0},
- {"Section64.Seg", Field, 0},
- {"Section64.Size", Field, 0},
- {"SectionHeader", Type, 0},
- {"SectionHeader.Addr", Field, 0},
- {"SectionHeader.Align", Field, 0},
- {"SectionHeader.Flags", Field, 0},
- {"SectionHeader.Name", Field, 0},
- {"SectionHeader.Nreloc", Field, 0},
- {"SectionHeader.Offset", Field, 0},
- {"SectionHeader.Reloff", Field, 0},
- {"SectionHeader.Seg", Field, 0},
- {"SectionHeader.Size", Field, 0},
- {"Segment", Type, 0},
- {"Segment.LoadBytes", Field, 0},
- {"Segment.ReaderAt", Field, 0},
- {"Segment.SegmentHeader", Field, 0},
- {"Segment32", Type, 0},
- {"Segment32.Addr", Field, 0},
- {"Segment32.Cmd", Field, 0},
- {"Segment32.Filesz", Field, 0},
- {"Segment32.Flag", Field, 0},
- {"Segment32.Len", Field, 0},
- {"Segment32.Maxprot", Field, 0},
- {"Segment32.Memsz", Field, 0},
- {"Segment32.Name", Field, 0},
- {"Segment32.Nsect", Field, 0},
- {"Segment32.Offset", Field, 0},
- {"Segment32.Prot", Field, 0},
- {"Segment64", Type, 0},
- {"Segment64.Addr", Field, 0},
- {"Segment64.Cmd", Field, 0},
- {"Segment64.Filesz", Field, 0},
- {"Segment64.Flag", Field, 0},
- {"Segment64.Len", Field, 0},
- {"Segment64.Maxprot", Field, 0},
- {"Segment64.Memsz", Field, 0},
- {"Segment64.Name", Field, 0},
- {"Segment64.Nsect", Field, 0},
- {"Segment64.Offset", Field, 0},
- {"Segment64.Prot", Field, 0},
- {"SegmentHeader", Type, 0},
- {"SegmentHeader.Addr", Field, 0},
- {"SegmentHeader.Cmd", Field, 0},
- {"SegmentHeader.Filesz", Field, 0},
- {"SegmentHeader.Flag", Field, 0},
- {"SegmentHeader.Len", Field, 0},
- {"SegmentHeader.Maxprot", Field, 0},
- {"SegmentHeader.Memsz", Field, 0},
- {"SegmentHeader.Name", Field, 0},
- {"SegmentHeader.Nsect", Field, 0},
- {"SegmentHeader.Offset", Field, 0},
- {"SegmentHeader.Prot", Field, 0},
- {"Symbol", Type, 0},
- {"Symbol.Desc", Field, 0},
- {"Symbol.Name", Field, 0},
- {"Symbol.Sect", Field, 0},
- {"Symbol.Type", Field, 0},
- {"Symbol.Value", Field, 0},
- {"Symtab", Type, 0},
- {"Symtab.LoadBytes", Field, 0},
- {"Symtab.Syms", Field, 0},
- {"Symtab.SymtabCmd", Field, 0},
- {"SymtabCmd", Type, 0},
- {"SymtabCmd.Cmd", Field, 0},
- {"SymtabCmd.Len", Field, 0},
- {"SymtabCmd.Nsyms", Field, 0},
- {"SymtabCmd.Stroff", Field, 0},
- {"SymtabCmd.Strsize", Field, 0},
- {"SymtabCmd.Symoff", Field, 0},
- {"Thread", Type, 0},
- {"Thread.Cmd", Field, 0},
- {"Thread.Data", Field, 0},
- {"Thread.Len", Field, 0},
- {"Thread.Type", Field, 0},
- {"Type", Type, 0},
- {"TypeBundle", Const, 3},
- {"TypeDylib", Const, 3},
- {"TypeExec", Const, 0},
- {"TypeObj", Const, 0},
- {"X86_64_RELOC_BRANCH", Const, 10},
- {"X86_64_RELOC_GOT", Const, 10},
- {"X86_64_RELOC_GOT_LOAD", Const, 10},
- {"X86_64_RELOC_SIGNED", Const, 10},
- {"X86_64_RELOC_SIGNED_1", Const, 10},
- {"X86_64_RELOC_SIGNED_2", Const, 10},
- {"X86_64_RELOC_SIGNED_4", Const, 10},
- {"X86_64_RELOC_SUBTRACTOR", Const, 10},
- {"X86_64_RELOC_TLV", Const, 10},
- {"X86_64_RELOC_UNSIGNED", Const, 10},
- },
- "debug/pe": {
- {"(*COFFSymbol).FullName", Method, 8},
- {"(*File).COFFSymbolReadSectionDefAux", Method, 19},
- {"(*File).Close", Method, 0},
- {"(*File).DWARF", Method, 0},
- {"(*File).ImportedLibraries", Method, 0},
- {"(*File).ImportedSymbols", Method, 0},
- {"(*File).Section", Method, 0},
- {"(*FormatError).Error", Method, 0},
- {"(*Section).Data", Method, 0},
- {"(*Section).Open", Method, 0},
- {"(Section).ReadAt", Method, 0},
- {"(StringTable).String", Method, 8},
- {"COFFSymbol", Type, 1},
- {"COFFSymbol.Name", Field, 1},
- {"COFFSymbol.NumberOfAuxSymbols", Field, 1},
- {"COFFSymbol.SectionNumber", Field, 1},
- {"COFFSymbol.StorageClass", Field, 1},
- {"COFFSymbol.Type", Field, 1},
- {"COFFSymbol.Value", Field, 1},
- {"COFFSymbolAuxFormat5", Type, 19},
- {"COFFSymbolAuxFormat5.Checksum", Field, 19},
- {"COFFSymbolAuxFormat5.NumLineNumbers", Field, 19},
- {"COFFSymbolAuxFormat5.NumRelocs", Field, 19},
- {"COFFSymbolAuxFormat5.SecNum", Field, 19},
- {"COFFSymbolAuxFormat5.Selection", Field, 19},
- {"COFFSymbolAuxFormat5.Size", Field, 19},
- {"COFFSymbolSize", Const, 1},
- {"DataDirectory", Type, 3},
- {"DataDirectory.Size", Field, 3},
- {"DataDirectory.VirtualAddress", Field, 3},
- {"File", Type, 0},
- {"File.COFFSymbols", Field, 8},
- {"File.FileHeader", Field, 0},
- {"File.OptionalHeader", Field, 3},
- {"File.Sections", Field, 0},
- {"File.StringTable", Field, 8},
- {"File.Symbols", Field, 1},
- {"FileHeader", Type, 0},
- {"FileHeader.Characteristics", Field, 0},
- {"FileHeader.Machine", Field, 0},
- {"FileHeader.NumberOfSections", Field, 0},
- {"FileHeader.NumberOfSymbols", Field, 0},
- {"FileHeader.PointerToSymbolTable", Field, 0},
- {"FileHeader.SizeOfOptionalHeader", Field, 0},
- {"FileHeader.TimeDateStamp", Field, 0},
- {"FormatError", Type, 0},
- {"IMAGE_COMDAT_SELECT_ANY", Const, 19},
- {"IMAGE_COMDAT_SELECT_ASSOCIATIVE", Const, 19},
- {"IMAGE_COMDAT_SELECT_EXACT_MATCH", Const, 19},
- {"IMAGE_COMDAT_SELECT_LARGEST", Const, 19},
- {"IMAGE_COMDAT_SELECT_NODUPLICATES", Const, 19},
- {"IMAGE_COMDAT_SELECT_SAME_SIZE", Const, 19},
- {"IMAGE_DIRECTORY_ENTRY_ARCHITECTURE", Const, 11},
- {"IMAGE_DIRECTORY_ENTRY_BASERELOC", Const, 11},
- {"IMAGE_DIRECTORY_ENTRY_BOUND_IMPORT", Const, 11},
- {"IMAGE_DIRECTORY_ENTRY_COM_DESCRIPTOR", Const, 11},
- {"IMAGE_DIRECTORY_ENTRY_DEBUG", Const, 11},
- {"IMAGE_DIRECTORY_ENTRY_DELAY_IMPORT", Const, 11},
- {"IMAGE_DIRECTORY_ENTRY_EXCEPTION", Const, 11},
- {"IMAGE_DIRECTORY_ENTRY_EXPORT", Const, 11},
- {"IMAGE_DIRECTORY_ENTRY_GLOBALPTR", Const, 11},
- {"IMAGE_DIRECTORY_ENTRY_IAT", Const, 11},
- {"IMAGE_DIRECTORY_ENTRY_IMPORT", Const, 11},
- {"IMAGE_DIRECTORY_ENTRY_LOAD_CONFIG", Const, 11},
- {"IMAGE_DIRECTORY_ENTRY_RESOURCE", Const, 11},
- {"IMAGE_DIRECTORY_ENTRY_SECURITY", Const, 11},
- {"IMAGE_DIRECTORY_ENTRY_TLS", Const, 11},
- {"IMAGE_DLLCHARACTERISTICS_APPCONTAINER", Const, 15},
- {"IMAGE_DLLCHARACTERISTICS_DYNAMIC_BASE", Const, 15},
- {"IMAGE_DLLCHARACTERISTICS_FORCE_INTEGRITY", Const, 15},
- {"IMAGE_DLLCHARACTERISTICS_GUARD_CF", Const, 15},
- {"IMAGE_DLLCHARACTERISTICS_HIGH_ENTROPY_VA", Const, 15},
- {"IMAGE_DLLCHARACTERISTICS_NO_BIND", Const, 15},
- {"IMAGE_DLLCHARACTERISTICS_NO_ISOLATION", Const, 15},
- {"IMAGE_DLLCHARACTERISTICS_NO_SEH", Const, 15},
- {"IMAGE_DLLCHARACTERISTICS_NX_COMPAT", Const, 15},
- {"IMAGE_DLLCHARACTERISTICS_TERMINAL_SERVER_AWARE", Const, 15},
- {"IMAGE_DLLCHARACTERISTICS_WDM_DRIVER", Const, 15},
- {"IMAGE_FILE_32BIT_MACHINE", Const, 15},
- {"IMAGE_FILE_AGGRESIVE_WS_TRIM", Const, 15},
- {"IMAGE_FILE_BYTES_REVERSED_HI", Const, 15},
- {"IMAGE_FILE_BYTES_REVERSED_LO", Const, 15},
- {"IMAGE_FILE_DEBUG_STRIPPED", Const, 15},
- {"IMAGE_FILE_DLL", Const, 15},
- {"IMAGE_FILE_EXECUTABLE_IMAGE", Const, 15},
- {"IMAGE_FILE_LARGE_ADDRESS_AWARE", Const, 15},
- {"IMAGE_FILE_LINE_NUMS_STRIPPED", Const, 15},
- {"IMAGE_FILE_LOCAL_SYMS_STRIPPED", Const, 15},
- {"IMAGE_FILE_MACHINE_AM33", Const, 0},
- {"IMAGE_FILE_MACHINE_AMD64", Const, 0},
- {"IMAGE_FILE_MACHINE_ARM", Const, 0},
- {"IMAGE_FILE_MACHINE_ARM64", Const, 11},
- {"IMAGE_FILE_MACHINE_ARMNT", Const, 12},
- {"IMAGE_FILE_MACHINE_EBC", Const, 0},
- {"IMAGE_FILE_MACHINE_I386", Const, 0},
- {"IMAGE_FILE_MACHINE_IA64", Const, 0},
- {"IMAGE_FILE_MACHINE_LOONGARCH32", Const, 19},
- {"IMAGE_FILE_MACHINE_LOONGARCH64", Const, 19},
- {"IMAGE_FILE_MACHINE_M32R", Const, 0},
- {"IMAGE_FILE_MACHINE_MIPS16", Const, 0},
- {"IMAGE_FILE_MACHINE_MIPSFPU", Const, 0},
- {"IMAGE_FILE_MACHINE_MIPSFPU16", Const, 0},
- {"IMAGE_FILE_MACHINE_POWERPC", Const, 0},
- {"IMAGE_FILE_MACHINE_POWERPCFP", Const, 0},
- {"IMAGE_FILE_MACHINE_R4000", Const, 0},
- {"IMAGE_FILE_MACHINE_RISCV128", Const, 20},
- {"IMAGE_FILE_MACHINE_RISCV32", Const, 20},
- {"IMAGE_FILE_MACHINE_RISCV64", Const, 20},
- {"IMAGE_FILE_MACHINE_SH3", Const, 0},
- {"IMAGE_FILE_MACHINE_SH3DSP", Const, 0},
- {"IMAGE_FILE_MACHINE_SH4", Const, 0},
- {"IMAGE_FILE_MACHINE_SH5", Const, 0},
- {"IMAGE_FILE_MACHINE_THUMB", Const, 0},
- {"IMAGE_FILE_MACHINE_UNKNOWN", Const, 0},
- {"IMAGE_FILE_MACHINE_WCEMIPSV2", Const, 0},
- {"IMAGE_FILE_NET_RUN_FROM_SWAP", Const, 15},
- {"IMAGE_FILE_RELOCS_STRIPPED", Const, 15},
- {"IMAGE_FILE_REMOVABLE_RUN_FROM_SWAP", Const, 15},
- {"IMAGE_FILE_SYSTEM", Const, 15},
- {"IMAGE_FILE_UP_SYSTEM_ONLY", Const, 15},
- {"IMAGE_SCN_CNT_CODE", Const, 19},
- {"IMAGE_SCN_CNT_INITIALIZED_DATA", Const, 19},
- {"IMAGE_SCN_CNT_UNINITIALIZED_DATA", Const, 19},
- {"IMAGE_SCN_LNK_COMDAT", Const, 19},
- {"IMAGE_SCN_MEM_DISCARDABLE", Const, 19},
- {"IMAGE_SCN_MEM_EXECUTE", Const, 19},
- {"IMAGE_SCN_MEM_READ", Const, 19},
- {"IMAGE_SCN_MEM_WRITE", Const, 19},
- {"IMAGE_SUBSYSTEM_EFI_APPLICATION", Const, 15},
- {"IMAGE_SUBSYSTEM_EFI_BOOT_SERVICE_DRIVER", Const, 15},
- {"IMAGE_SUBSYSTEM_EFI_ROM", Const, 15},
- {"IMAGE_SUBSYSTEM_EFI_RUNTIME_DRIVER", Const, 15},
- {"IMAGE_SUBSYSTEM_NATIVE", Const, 15},
- {"IMAGE_SUBSYSTEM_NATIVE_WINDOWS", Const, 15},
- {"IMAGE_SUBSYSTEM_OS2_CUI", Const, 15},
- {"IMAGE_SUBSYSTEM_POSIX_CUI", Const, 15},
- {"IMAGE_SUBSYSTEM_UNKNOWN", Const, 15},
- {"IMAGE_SUBSYSTEM_WINDOWS_BOOT_APPLICATION", Const, 15},
- {"IMAGE_SUBSYSTEM_WINDOWS_CE_GUI", Const, 15},
- {"IMAGE_SUBSYSTEM_WINDOWS_CUI", Const, 15},
- {"IMAGE_SUBSYSTEM_WINDOWS_GUI", Const, 15},
- {"IMAGE_SUBSYSTEM_XBOX", Const, 15},
- {"ImportDirectory", Type, 0},
- {"ImportDirectory.FirstThunk", Field, 0},
- {"ImportDirectory.ForwarderChain", Field, 0},
- {"ImportDirectory.Name", Field, 0},
- {"ImportDirectory.OriginalFirstThunk", Field, 0},
- {"ImportDirectory.TimeDateStamp", Field, 0},
- {"NewFile", Func, 0},
- {"Open", Func, 0},
- {"OptionalHeader32", Type, 3},
- {"OptionalHeader32.AddressOfEntryPoint", Field, 3},
- {"OptionalHeader32.BaseOfCode", Field, 3},
- {"OptionalHeader32.BaseOfData", Field, 3},
- {"OptionalHeader32.CheckSum", Field, 3},
- {"OptionalHeader32.DataDirectory", Field, 3},
- {"OptionalHeader32.DllCharacteristics", Field, 3},
- {"OptionalHeader32.FileAlignment", Field, 3},
- {"OptionalHeader32.ImageBase", Field, 3},
- {"OptionalHeader32.LoaderFlags", Field, 3},
- {"OptionalHeader32.Magic", Field, 3},
- {"OptionalHeader32.MajorImageVersion", Field, 3},
- {"OptionalHeader32.MajorLinkerVersion", Field, 3},
- {"OptionalHeader32.MajorOperatingSystemVersion", Field, 3},
- {"OptionalHeader32.MajorSubsystemVersion", Field, 3},
- {"OptionalHeader32.MinorImageVersion", Field, 3},
- {"OptionalHeader32.MinorLinkerVersion", Field, 3},
- {"OptionalHeader32.MinorOperatingSystemVersion", Field, 3},
- {"OptionalHeader32.MinorSubsystemVersion", Field, 3},
- {"OptionalHeader32.NumberOfRvaAndSizes", Field, 3},
- {"OptionalHeader32.SectionAlignment", Field, 3},
- {"OptionalHeader32.SizeOfCode", Field, 3},
- {"OptionalHeader32.SizeOfHeaders", Field, 3},
- {"OptionalHeader32.SizeOfHeapCommit", Field, 3},
- {"OptionalHeader32.SizeOfHeapReserve", Field, 3},
- {"OptionalHeader32.SizeOfImage", Field, 3},
- {"OptionalHeader32.SizeOfInitializedData", Field, 3},
- {"OptionalHeader32.SizeOfStackCommit", Field, 3},
- {"OptionalHeader32.SizeOfStackReserve", Field, 3},
- {"OptionalHeader32.SizeOfUninitializedData", Field, 3},
- {"OptionalHeader32.Subsystem", Field, 3},
- {"OptionalHeader32.Win32VersionValue", Field, 3},
- {"OptionalHeader64", Type, 3},
- {"OptionalHeader64.AddressOfEntryPoint", Field, 3},
- {"OptionalHeader64.BaseOfCode", Field, 3},
- {"OptionalHeader64.CheckSum", Field, 3},
- {"OptionalHeader64.DataDirectory", Field, 3},
- {"OptionalHeader64.DllCharacteristics", Field, 3},
- {"OptionalHeader64.FileAlignment", Field, 3},
- {"OptionalHeader64.ImageBase", Field, 3},
- {"OptionalHeader64.LoaderFlags", Field, 3},
- {"OptionalHeader64.Magic", Field, 3},
- {"OptionalHeader64.MajorImageVersion", Field, 3},
- {"OptionalHeader64.MajorLinkerVersion", Field, 3},
- {"OptionalHeader64.MajorOperatingSystemVersion", Field, 3},
- {"OptionalHeader64.MajorSubsystemVersion", Field, 3},
- {"OptionalHeader64.MinorImageVersion", Field, 3},
- {"OptionalHeader64.MinorLinkerVersion", Field, 3},
- {"OptionalHeader64.MinorOperatingSystemVersion", Field, 3},
- {"OptionalHeader64.MinorSubsystemVersion", Field, 3},
- {"OptionalHeader64.NumberOfRvaAndSizes", Field, 3},
- {"OptionalHeader64.SectionAlignment", Field, 3},
- {"OptionalHeader64.SizeOfCode", Field, 3},
- {"OptionalHeader64.SizeOfHeaders", Field, 3},
- {"OptionalHeader64.SizeOfHeapCommit", Field, 3},
- {"OptionalHeader64.SizeOfHeapReserve", Field, 3},
- {"OptionalHeader64.SizeOfImage", Field, 3},
- {"OptionalHeader64.SizeOfInitializedData", Field, 3},
- {"OptionalHeader64.SizeOfStackCommit", Field, 3},
- {"OptionalHeader64.SizeOfStackReserve", Field, 3},
- {"OptionalHeader64.SizeOfUninitializedData", Field, 3},
- {"OptionalHeader64.Subsystem", Field, 3},
- {"OptionalHeader64.Win32VersionValue", Field, 3},
- {"Reloc", Type, 8},
- {"Reloc.SymbolTableIndex", Field, 8},
- {"Reloc.Type", Field, 8},
- {"Reloc.VirtualAddress", Field, 8},
- {"Section", Type, 0},
- {"Section.ReaderAt", Field, 0},
- {"Section.Relocs", Field, 8},
- {"Section.SectionHeader", Field, 0},
- {"SectionHeader", Type, 0},
- {"SectionHeader.Characteristics", Field, 0},
- {"SectionHeader.Name", Field, 0},
- {"SectionHeader.NumberOfLineNumbers", Field, 0},
- {"SectionHeader.NumberOfRelocations", Field, 0},
- {"SectionHeader.Offset", Field, 0},
- {"SectionHeader.PointerToLineNumbers", Field, 0},
- {"SectionHeader.PointerToRelocations", Field, 0},
- {"SectionHeader.Size", Field, 0},
- {"SectionHeader.VirtualAddress", Field, 0},
- {"SectionHeader.VirtualSize", Field, 0},
- {"SectionHeader32", Type, 0},
- {"SectionHeader32.Characteristics", Field, 0},
- {"SectionHeader32.Name", Field, 0},
- {"SectionHeader32.NumberOfLineNumbers", Field, 0},
- {"SectionHeader32.NumberOfRelocations", Field, 0},
- {"SectionHeader32.PointerToLineNumbers", Field, 0},
- {"SectionHeader32.PointerToRawData", Field, 0},
- {"SectionHeader32.PointerToRelocations", Field, 0},
- {"SectionHeader32.SizeOfRawData", Field, 0},
- {"SectionHeader32.VirtualAddress", Field, 0},
- {"SectionHeader32.VirtualSize", Field, 0},
- {"StringTable", Type, 8},
- {"Symbol", Type, 1},
- {"Symbol.Name", Field, 1},
- {"Symbol.SectionNumber", Field, 1},
- {"Symbol.StorageClass", Field, 1},
- {"Symbol.Type", Field, 1},
- {"Symbol.Value", Field, 1},
- },
- "debug/plan9obj": {
- {"(*File).Close", Method, 3},
- {"(*File).Section", Method, 3},
- {"(*File).Symbols", Method, 3},
- {"(*Section).Data", Method, 3},
- {"(*Section).Open", Method, 3},
- {"(Section).ReadAt", Method, 3},
- {"ErrNoSymbols", Var, 18},
- {"File", Type, 3},
- {"File.FileHeader", Field, 3},
- {"File.Sections", Field, 3},
- {"FileHeader", Type, 3},
- {"FileHeader.Bss", Field, 3},
- {"FileHeader.Entry", Field, 3},
- {"FileHeader.HdrSize", Field, 4},
- {"FileHeader.LoadAddress", Field, 4},
- {"FileHeader.Magic", Field, 3},
- {"FileHeader.PtrSize", Field, 3},
- {"Magic386", Const, 3},
- {"Magic64", Const, 3},
- {"MagicAMD64", Const, 3},
- {"MagicARM", Const, 3},
- {"NewFile", Func, 3},
- {"Open", Func, 3},
- {"Section", Type, 3},
- {"Section.ReaderAt", Field, 3},
- {"Section.SectionHeader", Field, 3},
- {"SectionHeader", Type, 3},
- {"SectionHeader.Name", Field, 3},
- {"SectionHeader.Offset", Field, 3},
- {"SectionHeader.Size", Field, 3},
- {"Sym", Type, 3},
- {"Sym.Name", Field, 3},
- {"Sym.Type", Field, 3},
- {"Sym.Value", Field, 3},
- },
- "embed": {
- {"(FS).Open", Method, 16},
- {"(FS).ReadDir", Method, 16},
- {"(FS).ReadFile", Method, 16},
- {"FS", Type, 16},
- },
- "encoding": {
- {"BinaryMarshaler", Type, 2},
- {"BinaryUnmarshaler", Type, 2},
- {"TextMarshaler", Type, 2},
- {"TextUnmarshaler", Type, 2},
- },
- "encoding/ascii85": {
- {"(CorruptInputError).Error", Method, 0},
- {"CorruptInputError", Type, 0},
- {"Decode", Func, 0},
- {"Encode", Func, 0},
- {"MaxEncodedLen", Func, 0},
- {"NewDecoder", Func, 0},
- {"NewEncoder", Func, 0},
- },
- "encoding/asn1": {
- {"(BitString).At", Method, 0},
- {"(BitString).RightAlign", Method, 0},
- {"(ObjectIdentifier).Equal", Method, 0},
- {"(ObjectIdentifier).String", Method, 3},
- {"(StructuralError).Error", Method, 0},
- {"(SyntaxError).Error", Method, 0},
- {"BitString", Type, 0},
- {"BitString.BitLength", Field, 0},
- {"BitString.Bytes", Field, 0},
- {"ClassApplication", Const, 6},
- {"ClassContextSpecific", Const, 6},
- {"ClassPrivate", Const, 6},
- {"ClassUniversal", Const, 6},
- {"Enumerated", Type, 0},
- {"Flag", Type, 0},
- {"Marshal", Func, 0},
- {"MarshalWithParams", Func, 10},
- {"NullBytes", Var, 9},
- {"NullRawValue", Var, 9},
- {"ObjectIdentifier", Type, 0},
- {"RawContent", Type, 0},
- {"RawValue", Type, 0},
- {"RawValue.Bytes", Field, 0},
- {"RawValue.Class", Field, 0},
- {"RawValue.FullBytes", Field, 0},
- {"RawValue.IsCompound", Field, 0},
- {"RawValue.Tag", Field, 0},
- {"StructuralError", Type, 0},
- {"StructuralError.Msg", Field, 0},
- {"SyntaxError", Type, 0},
- {"SyntaxError.Msg", Field, 0},
- {"TagBMPString", Const, 14},
- {"TagBitString", Const, 6},
- {"TagBoolean", Const, 6},
- {"TagEnum", Const, 6},
- {"TagGeneralString", Const, 6},
- {"TagGeneralizedTime", Const, 6},
- {"TagIA5String", Const, 6},
- {"TagInteger", Const, 6},
- {"TagNull", Const, 9},
- {"TagNumericString", Const, 10},
- {"TagOID", Const, 6},
- {"TagOctetString", Const, 6},
- {"TagPrintableString", Const, 6},
- {"TagSequence", Const, 6},
- {"TagSet", Const, 6},
- {"TagT61String", Const, 6},
- {"TagUTCTime", Const, 6},
- {"TagUTF8String", Const, 6},
- {"Unmarshal", Func, 0},
- {"UnmarshalWithParams", Func, 0},
- },
- "encoding/base32": {
- {"(*Encoding).AppendDecode", Method, 22},
- {"(*Encoding).AppendEncode", Method, 22},
- {"(*Encoding).Decode", Method, 0},
- {"(*Encoding).DecodeString", Method, 0},
- {"(*Encoding).DecodedLen", Method, 0},
- {"(*Encoding).Encode", Method, 0},
- {"(*Encoding).EncodeToString", Method, 0},
- {"(*Encoding).EncodedLen", Method, 0},
- {"(CorruptInputError).Error", Method, 0},
- {"(Encoding).WithPadding", Method, 9},
- {"CorruptInputError", Type, 0},
- {"Encoding", Type, 0},
- {"HexEncoding", Var, 0},
- {"NewDecoder", Func, 0},
- {"NewEncoder", Func, 0},
- {"NewEncoding", Func, 0},
- {"NoPadding", Const, 9},
- {"StdEncoding", Var, 0},
- {"StdPadding", Const, 9},
- },
- "encoding/base64": {
- {"(*Encoding).AppendDecode", Method, 22},
- {"(*Encoding).AppendEncode", Method, 22},
- {"(*Encoding).Decode", Method, 0},
- {"(*Encoding).DecodeString", Method, 0},
- {"(*Encoding).DecodedLen", Method, 0},
- {"(*Encoding).Encode", Method, 0},
- {"(*Encoding).EncodeToString", Method, 0},
- {"(*Encoding).EncodedLen", Method, 0},
- {"(CorruptInputError).Error", Method, 0},
- {"(Encoding).Strict", Method, 8},
- {"(Encoding).WithPadding", Method, 5},
- {"CorruptInputError", Type, 0},
- {"Encoding", Type, 0},
- {"NewDecoder", Func, 0},
- {"NewEncoder", Func, 0},
- {"NewEncoding", Func, 0},
- {"NoPadding", Const, 5},
- {"RawStdEncoding", Var, 5},
- {"RawURLEncoding", Var, 5},
- {"StdEncoding", Var, 0},
- {"StdPadding", Const, 5},
- {"URLEncoding", Var, 0},
- },
- "encoding/binary": {
- {"Append", Func, 23},
- {"AppendByteOrder", Type, 19},
- {"AppendUvarint", Func, 19},
- {"AppendVarint", Func, 19},
- {"BigEndian", Var, 0},
- {"ByteOrder", Type, 0},
- {"Decode", Func, 23},
- {"Encode", Func, 23},
- {"LittleEndian", Var, 0},
- {"MaxVarintLen16", Const, 0},
- {"MaxVarintLen32", Const, 0},
- {"MaxVarintLen64", Const, 0},
- {"NativeEndian", Var, 21},
- {"PutUvarint", Func, 0},
- {"PutVarint", Func, 0},
- {"Read", Func, 0},
- {"ReadUvarint", Func, 0},
- {"ReadVarint", Func, 0},
- {"Size", Func, 0},
- {"Uvarint", Func, 0},
- {"Varint", Func, 0},
- {"Write", Func, 0},
- },
- "encoding/csv": {
- {"(*ParseError).Error", Method, 0},
- {"(*ParseError).Unwrap", Method, 13},
- {"(*Reader).FieldPos", Method, 17},
- {"(*Reader).InputOffset", Method, 19},
- {"(*Reader).Read", Method, 0},
- {"(*Reader).ReadAll", Method, 0},
- {"(*Writer).Error", Method, 1},
- {"(*Writer).Flush", Method, 0},
- {"(*Writer).Write", Method, 0},
- {"(*Writer).WriteAll", Method, 0},
- {"ErrBareQuote", Var, 0},
- {"ErrFieldCount", Var, 0},
- {"ErrQuote", Var, 0},
- {"ErrTrailingComma", Var, 0},
- {"NewReader", Func, 0},
- {"NewWriter", Func, 0},
- {"ParseError", Type, 0},
- {"ParseError.Column", Field, 0},
- {"ParseError.Err", Field, 0},
- {"ParseError.Line", Field, 0},
- {"ParseError.StartLine", Field, 10},
- {"Reader", Type, 0},
- {"Reader.Comma", Field, 0},
- {"Reader.Comment", Field, 0},
- {"Reader.FieldsPerRecord", Field, 0},
- {"Reader.LazyQuotes", Field, 0},
- {"Reader.ReuseRecord", Field, 9},
- {"Reader.TrailingComma", Field, 0},
- {"Reader.TrimLeadingSpace", Field, 0},
- {"Writer", Type, 0},
- {"Writer.Comma", Field, 0},
- {"Writer.UseCRLF", Field, 0},
- },
- "encoding/gob": {
- {"(*Decoder).Decode", Method, 0},
- {"(*Decoder).DecodeValue", Method, 0},
- {"(*Encoder).Encode", Method, 0},
- {"(*Encoder).EncodeValue", Method, 0},
- {"CommonType", Type, 0},
- {"CommonType.Id", Field, 0},
- {"CommonType.Name", Field, 0},
- {"Decoder", Type, 0},
- {"Encoder", Type, 0},
- {"GobDecoder", Type, 0},
- {"GobEncoder", Type, 0},
- {"NewDecoder", Func, 0},
- {"NewEncoder", Func, 0},
- {"Register", Func, 0},
- {"RegisterName", Func, 0},
- },
- "encoding/hex": {
- {"(InvalidByteError).Error", Method, 0},
- {"AppendDecode", Func, 22},
- {"AppendEncode", Func, 22},
- {"Decode", Func, 0},
- {"DecodeString", Func, 0},
- {"DecodedLen", Func, 0},
- {"Dump", Func, 0},
- {"Dumper", Func, 0},
- {"Encode", Func, 0},
- {"EncodeToString", Func, 0},
- {"EncodedLen", Func, 0},
- {"ErrLength", Var, 0},
- {"InvalidByteError", Type, 0},
- {"NewDecoder", Func, 10},
- {"NewEncoder", Func, 10},
- },
- "encoding/json": {
- {"(*Decoder).Buffered", Method, 1},
- {"(*Decoder).Decode", Method, 0},
- {"(*Decoder).DisallowUnknownFields", Method, 10},
- {"(*Decoder).InputOffset", Method, 14},
- {"(*Decoder).More", Method, 5},
- {"(*Decoder).Token", Method, 5},
- {"(*Decoder).UseNumber", Method, 1},
- {"(*Encoder).Encode", Method, 0},
- {"(*Encoder).SetEscapeHTML", Method, 7},
- {"(*Encoder).SetIndent", Method, 7},
- {"(*InvalidUTF8Error).Error", Method, 0},
- {"(*InvalidUnmarshalError).Error", Method, 0},
- {"(*MarshalerError).Error", Method, 0},
- {"(*MarshalerError).Unwrap", Method, 13},
- {"(*RawMessage).MarshalJSON", Method, 0},
- {"(*RawMessage).UnmarshalJSON", Method, 0},
- {"(*SyntaxError).Error", Method, 0},
- {"(*UnmarshalFieldError).Error", Method, 0},
- {"(*UnmarshalTypeError).Error", Method, 0},
- {"(*UnsupportedTypeError).Error", Method, 0},
- {"(*UnsupportedValueError).Error", Method, 0},
- {"(Delim).String", Method, 5},
- {"(Number).Float64", Method, 1},
- {"(Number).Int64", Method, 1},
- {"(Number).String", Method, 1},
- {"(RawMessage).MarshalJSON", Method, 8},
- {"Compact", Func, 0},
- {"Decoder", Type, 0},
- {"Delim", Type, 5},
- {"Encoder", Type, 0},
- {"HTMLEscape", Func, 0},
- {"Indent", Func, 0},
- {"InvalidUTF8Error", Type, 0},
- {"InvalidUTF8Error.S", Field, 0},
- {"InvalidUnmarshalError", Type, 0},
- {"InvalidUnmarshalError.Type", Field, 0},
- {"Marshal", Func, 0},
- {"MarshalIndent", Func, 0},
- {"Marshaler", Type, 0},
- {"MarshalerError", Type, 0},
- {"MarshalerError.Err", Field, 0},
- {"MarshalerError.Type", Field, 0},
- {"NewDecoder", Func, 0},
- {"NewEncoder", Func, 0},
- {"Number", Type, 1},
- {"RawMessage", Type, 0},
- {"SyntaxError", Type, 0},
- {"SyntaxError.Offset", Field, 0},
- {"Token", Type, 5},
- {"Unmarshal", Func, 0},
- {"UnmarshalFieldError", Type, 0},
- {"UnmarshalFieldError.Field", Field, 0},
- {"UnmarshalFieldError.Key", Field, 0},
- {"UnmarshalFieldError.Type", Field, 0},
- {"UnmarshalTypeError", Type, 0},
- {"UnmarshalTypeError.Field", Field, 8},
- {"UnmarshalTypeError.Offset", Field, 5},
- {"UnmarshalTypeError.Struct", Field, 8},
- {"UnmarshalTypeError.Type", Field, 0},
- {"UnmarshalTypeError.Value", Field, 0},
- {"Unmarshaler", Type, 0},
- {"UnsupportedTypeError", Type, 0},
- {"UnsupportedTypeError.Type", Field, 0},
- {"UnsupportedValueError", Type, 0},
- {"UnsupportedValueError.Str", Field, 0},
- {"UnsupportedValueError.Value", Field, 0},
- {"Valid", Func, 9},
- },
- "encoding/pem": {
- {"Block", Type, 0},
- {"Block.Bytes", Field, 0},
- {"Block.Headers", Field, 0},
- {"Block.Type", Field, 0},
- {"Decode", Func, 0},
- {"Encode", Func, 0},
- {"EncodeToMemory", Func, 0},
- },
- "encoding/xml": {
- {"(*Decoder).Decode", Method, 0},
- {"(*Decoder).DecodeElement", Method, 0},
- {"(*Decoder).InputOffset", Method, 4},
- {"(*Decoder).InputPos", Method, 19},
- {"(*Decoder).RawToken", Method, 0},
- {"(*Decoder).Skip", Method, 0},
- {"(*Decoder).Token", Method, 0},
- {"(*Encoder).Close", Method, 20},
- {"(*Encoder).Encode", Method, 0},
- {"(*Encoder).EncodeElement", Method, 2},
- {"(*Encoder).EncodeToken", Method, 2},
- {"(*Encoder).Flush", Method, 2},
- {"(*Encoder).Indent", Method, 1},
- {"(*SyntaxError).Error", Method, 0},
- {"(*TagPathError).Error", Method, 0},
- {"(*UnsupportedTypeError).Error", Method, 0},
- {"(CharData).Copy", Method, 0},
- {"(Comment).Copy", Method, 0},
- {"(Directive).Copy", Method, 0},
- {"(ProcInst).Copy", Method, 0},
- {"(StartElement).Copy", Method, 0},
- {"(StartElement).End", Method, 2},
- {"(UnmarshalError).Error", Method, 0},
- {"Attr", Type, 0},
- {"Attr.Name", Field, 0},
- {"Attr.Value", Field, 0},
- {"CharData", Type, 0},
- {"Comment", Type, 0},
- {"CopyToken", Func, 0},
- {"Decoder", Type, 0},
- {"Decoder.AutoClose", Field, 0},
- {"Decoder.CharsetReader", Field, 0},
- {"Decoder.DefaultSpace", Field, 1},
- {"Decoder.Entity", Field, 0},
- {"Decoder.Strict", Field, 0},
- {"Directive", Type, 0},
- {"Encoder", Type, 0},
- {"EndElement", Type, 0},
- {"EndElement.Name", Field, 0},
- {"Escape", Func, 0},
- {"EscapeText", Func, 1},
- {"HTMLAutoClose", Var, 0},
- {"HTMLEntity", Var, 0},
- {"Header", Const, 0},
- {"Marshal", Func, 0},
- {"MarshalIndent", Func, 0},
- {"Marshaler", Type, 2},
- {"MarshalerAttr", Type, 2},
- {"Name", Type, 0},
- {"Name.Local", Field, 0},
- {"Name.Space", Field, 0},
- {"NewDecoder", Func, 0},
- {"NewEncoder", Func, 0},
- {"NewTokenDecoder", Func, 10},
- {"ProcInst", Type, 0},
- {"ProcInst.Inst", Field, 0},
- {"ProcInst.Target", Field, 0},
- {"StartElement", Type, 0},
- {"StartElement.Attr", Field, 0},
- {"StartElement.Name", Field, 0},
- {"SyntaxError", Type, 0},
- {"SyntaxError.Line", Field, 0},
- {"SyntaxError.Msg", Field, 0},
- {"TagPathError", Type, 0},
- {"TagPathError.Field1", Field, 0},
- {"TagPathError.Field2", Field, 0},
- {"TagPathError.Struct", Field, 0},
- {"TagPathError.Tag1", Field, 0},
- {"TagPathError.Tag2", Field, 0},
- {"Token", Type, 0},
- {"TokenReader", Type, 10},
- {"Unmarshal", Func, 0},
- {"UnmarshalError", Type, 0},
- {"Unmarshaler", Type, 2},
- {"UnmarshalerAttr", Type, 2},
- {"UnsupportedTypeError", Type, 0},
- {"UnsupportedTypeError.Type", Field, 0},
- },
- "errors": {
- {"As", Func, 13},
- {"ErrUnsupported", Var, 21},
- {"Is", Func, 13},
- {"Join", Func, 20},
- {"New", Func, 0},
- {"Unwrap", Func, 13},
- },
- "expvar": {
- {"(*Float).Add", Method, 0},
- {"(*Float).Set", Method, 0},
- {"(*Float).String", Method, 0},
- {"(*Float).Value", Method, 8},
- {"(*Int).Add", Method, 0},
- {"(*Int).Set", Method, 0},
- {"(*Int).String", Method, 0},
- {"(*Int).Value", Method, 8},
- {"(*Map).Add", Method, 0},
- {"(*Map).AddFloat", Method, 0},
- {"(*Map).Delete", Method, 12},
- {"(*Map).Do", Method, 0},
- {"(*Map).Get", Method, 0},
- {"(*Map).Init", Method, 0},
- {"(*Map).Set", Method, 0},
- {"(*Map).String", Method, 0},
- {"(*String).Set", Method, 0},
- {"(*String).String", Method, 0},
- {"(*String).Value", Method, 8},
- {"(Func).String", Method, 0},
- {"(Func).Value", Method, 8},
- {"Do", Func, 0},
- {"Float", Type, 0},
- {"Func", Type, 0},
- {"Get", Func, 0},
- {"Handler", Func, 8},
- {"Int", Type, 0},
- {"KeyValue", Type, 0},
- {"KeyValue.Key", Field, 0},
- {"KeyValue.Value", Field, 0},
- {"Map", Type, 0},
- {"NewFloat", Func, 0},
- {"NewInt", Func, 0},
- {"NewMap", Func, 0},
- {"NewString", Func, 0},
- {"Publish", Func, 0},
- {"String", Type, 0},
- {"Var", Type, 0},
- },
- "flag": {
- {"(*FlagSet).Arg", Method, 0},
- {"(*FlagSet).Args", Method, 0},
- {"(*FlagSet).Bool", Method, 0},
- {"(*FlagSet).BoolFunc", Method, 21},
- {"(*FlagSet).BoolVar", Method, 0},
- {"(*FlagSet).Duration", Method, 0},
- {"(*FlagSet).DurationVar", Method, 0},
- {"(*FlagSet).ErrorHandling", Method, 10},
- {"(*FlagSet).Float64", Method, 0},
- {"(*FlagSet).Float64Var", Method, 0},
- {"(*FlagSet).Func", Method, 16},
- {"(*FlagSet).Init", Method, 0},
- {"(*FlagSet).Int", Method, 0},
- {"(*FlagSet).Int64", Method, 0},
- {"(*FlagSet).Int64Var", Method, 0},
- {"(*FlagSet).IntVar", Method, 0},
- {"(*FlagSet).Lookup", Method, 0},
- {"(*FlagSet).NArg", Method, 0},
- {"(*FlagSet).NFlag", Method, 0},
- {"(*FlagSet).Name", Method, 10},
- {"(*FlagSet).Output", Method, 10},
- {"(*FlagSet).Parse", Method, 0},
- {"(*FlagSet).Parsed", Method, 0},
- {"(*FlagSet).PrintDefaults", Method, 0},
- {"(*FlagSet).Set", Method, 0},
- {"(*FlagSet).SetOutput", Method, 0},
- {"(*FlagSet).String", Method, 0},
- {"(*FlagSet).StringVar", Method, 0},
- {"(*FlagSet).TextVar", Method, 19},
- {"(*FlagSet).Uint", Method, 0},
- {"(*FlagSet).Uint64", Method, 0},
- {"(*FlagSet).Uint64Var", Method, 0},
- {"(*FlagSet).UintVar", Method, 0},
- {"(*FlagSet).Var", Method, 0},
- {"(*FlagSet).Visit", Method, 0},
- {"(*FlagSet).VisitAll", Method, 0},
- {"Arg", Func, 0},
- {"Args", Func, 0},
- {"Bool", Func, 0},
- {"BoolFunc", Func, 21},
- {"BoolVar", Func, 0},
- {"CommandLine", Var, 2},
- {"ContinueOnError", Const, 0},
- {"Duration", Func, 0},
- {"DurationVar", Func, 0},
- {"ErrHelp", Var, 0},
- {"ErrorHandling", Type, 0},
- {"ExitOnError", Const, 0},
- {"Flag", Type, 0},
- {"Flag.DefValue", Field, 0},
- {"Flag.Name", Field, 0},
- {"Flag.Usage", Field, 0},
- {"Flag.Value", Field, 0},
- {"FlagSet", Type, 0},
- {"FlagSet.Usage", Field, 0},
- {"Float64", Func, 0},
- {"Float64Var", Func, 0},
- {"Func", Func, 16},
- {"Getter", Type, 2},
- {"Int", Func, 0},
- {"Int64", Func, 0},
- {"Int64Var", Func, 0},
- {"IntVar", Func, 0},
- {"Lookup", Func, 0},
- {"NArg", Func, 0},
- {"NFlag", Func, 0},
- {"NewFlagSet", Func, 0},
- {"PanicOnError", Const, 0},
- {"Parse", Func, 0},
- {"Parsed", Func, 0},
- {"PrintDefaults", Func, 0},
- {"Set", Func, 0},
- {"String", Func, 0},
- {"StringVar", Func, 0},
- {"TextVar", Func, 19},
- {"Uint", Func, 0},
- {"Uint64", Func, 0},
- {"Uint64Var", Func, 0},
- {"UintVar", Func, 0},
- {"UnquoteUsage", Func, 5},
- {"Usage", Var, 0},
- {"Value", Type, 0},
- {"Var", Func, 0},
- {"Visit", Func, 0},
- {"VisitAll", Func, 0},
- },
- "fmt": {
- {"Append", Func, 19},
- {"Appendf", Func, 19},
- {"Appendln", Func, 19},
- {"Errorf", Func, 0},
- {"FormatString", Func, 20},
- {"Formatter", Type, 0},
- {"Fprint", Func, 0},
- {"Fprintf", Func, 0},
- {"Fprintln", Func, 0},
- {"Fscan", Func, 0},
- {"Fscanf", Func, 0},
- {"Fscanln", Func, 0},
- {"GoStringer", Type, 0},
- {"Print", Func, 0},
- {"Printf", Func, 0},
- {"Println", Func, 0},
- {"Scan", Func, 0},
- {"ScanState", Type, 0},
- {"Scanf", Func, 0},
- {"Scanln", Func, 0},
- {"Scanner", Type, 0},
- {"Sprint", Func, 0},
- {"Sprintf", Func, 0},
- {"Sprintln", Func, 0},
- {"Sscan", Func, 0},
- {"Sscanf", Func, 0},
- {"Sscanln", Func, 0},
- {"State", Type, 0},
- {"Stringer", Type, 0},
- },
- "go/ast": {
- {"(*ArrayType).End", Method, 0},
- {"(*ArrayType).Pos", Method, 0},
- {"(*AssignStmt).End", Method, 0},
- {"(*AssignStmt).Pos", Method, 0},
- {"(*BadDecl).End", Method, 0},
- {"(*BadDecl).Pos", Method, 0},
- {"(*BadExpr).End", Method, 0},
- {"(*BadExpr).Pos", Method, 0},
- {"(*BadStmt).End", Method, 0},
- {"(*BadStmt).Pos", Method, 0},
- {"(*BasicLit).End", Method, 0},
- {"(*BasicLit).Pos", Method, 0},
- {"(*BinaryExpr).End", Method, 0},
- {"(*BinaryExpr).Pos", Method, 0},
- {"(*BlockStmt).End", Method, 0},
- {"(*BlockStmt).Pos", Method, 0},
- {"(*BranchStmt).End", Method, 0},
- {"(*BranchStmt).Pos", Method, 0},
- {"(*CallExpr).End", Method, 0},
- {"(*CallExpr).Pos", Method, 0},
- {"(*CaseClause).End", Method, 0},
- {"(*CaseClause).Pos", Method, 0},
- {"(*ChanType).End", Method, 0},
- {"(*ChanType).Pos", Method, 0},
- {"(*CommClause).End", Method, 0},
- {"(*CommClause).Pos", Method, 0},
- {"(*Comment).End", Method, 0},
- {"(*Comment).Pos", Method, 0},
- {"(*CommentGroup).End", Method, 0},
- {"(*CommentGroup).Pos", Method, 0},
- {"(*CommentGroup).Text", Method, 0},
- {"(*CompositeLit).End", Method, 0},
- {"(*CompositeLit).Pos", Method, 0},
- {"(*DeclStmt).End", Method, 0},
- {"(*DeclStmt).Pos", Method, 0},
- {"(*DeferStmt).End", Method, 0},
- {"(*DeferStmt).Pos", Method, 0},
- {"(*Ellipsis).End", Method, 0},
- {"(*Ellipsis).Pos", Method, 0},
- {"(*EmptyStmt).End", Method, 0},
- {"(*EmptyStmt).Pos", Method, 0},
- {"(*ExprStmt).End", Method, 0},
- {"(*ExprStmt).Pos", Method, 0},
- {"(*Field).End", Method, 0},
- {"(*Field).Pos", Method, 0},
- {"(*FieldList).End", Method, 0},
- {"(*FieldList).NumFields", Method, 0},
- {"(*FieldList).Pos", Method, 0},
- {"(*File).End", Method, 0},
- {"(*File).Pos", Method, 0},
- {"(*ForStmt).End", Method, 0},
- {"(*ForStmt).Pos", Method, 0},
- {"(*FuncDecl).End", Method, 0},
- {"(*FuncDecl).Pos", Method, 0},
- {"(*FuncLit).End", Method, 0},
- {"(*FuncLit).Pos", Method, 0},
- {"(*FuncType).End", Method, 0},
- {"(*FuncType).Pos", Method, 0},
- {"(*GenDecl).End", Method, 0},
- {"(*GenDecl).Pos", Method, 0},
- {"(*GoStmt).End", Method, 0},
- {"(*GoStmt).Pos", Method, 0},
- {"(*Ident).End", Method, 0},
- {"(*Ident).IsExported", Method, 0},
- {"(*Ident).Pos", Method, 0},
- {"(*Ident).String", Method, 0},
- {"(*IfStmt).End", Method, 0},
- {"(*IfStmt).Pos", Method, 0},
- {"(*ImportSpec).End", Method, 0},
- {"(*ImportSpec).Pos", Method, 0},
- {"(*IncDecStmt).End", Method, 0},
- {"(*IncDecStmt).Pos", Method, 0},
- {"(*IndexExpr).End", Method, 0},
- {"(*IndexExpr).Pos", Method, 0},
- {"(*IndexListExpr).End", Method, 18},
- {"(*IndexListExpr).Pos", Method, 18},
- {"(*InterfaceType).End", Method, 0},
- {"(*InterfaceType).Pos", Method, 0},
- {"(*KeyValueExpr).End", Method, 0},
- {"(*KeyValueExpr).Pos", Method, 0},
- {"(*LabeledStmt).End", Method, 0},
- {"(*LabeledStmt).Pos", Method, 0},
- {"(*MapType).End", Method, 0},
- {"(*MapType).Pos", Method, 0},
- {"(*Object).Pos", Method, 0},
- {"(*Package).End", Method, 0},
- {"(*Package).Pos", Method, 0},
- {"(*ParenExpr).End", Method, 0},
- {"(*ParenExpr).Pos", Method, 0},
- {"(*RangeStmt).End", Method, 0},
- {"(*RangeStmt).Pos", Method, 0},
- {"(*ReturnStmt).End", Method, 0},
- {"(*ReturnStmt).Pos", Method, 0},
- {"(*Scope).Insert", Method, 0},
- {"(*Scope).Lookup", Method, 0},
- {"(*Scope).String", Method, 0},
- {"(*SelectStmt).End", Method, 0},
- {"(*SelectStmt).Pos", Method, 0},
- {"(*SelectorExpr).End", Method, 0},
- {"(*SelectorExpr).Pos", Method, 0},
- {"(*SendStmt).End", Method, 0},
- {"(*SendStmt).Pos", Method, 0},
- {"(*SliceExpr).End", Method, 0},
- {"(*SliceExpr).Pos", Method, 0},
- {"(*StarExpr).End", Method, 0},
- {"(*StarExpr).Pos", Method, 0},
- {"(*StructType).End", Method, 0},
- {"(*StructType).Pos", Method, 0},
- {"(*SwitchStmt).End", Method, 0},
- {"(*SwitchStmt).Pos", Method, 0},
- {"(*TypeAssertExpr).End", Method, 0},
- {"(*TypeAssertExpr).Pos", Method, 0},
- {"(*TypeSpec).End", Method, 0},
- {"(*TypeSpec).Pos", Method, 0},
- {"(*TypeSwitchStmt).End", Method, 0},
- {"(*TypeSwitchStmt).Pos", Method, 0},
- {"(*UnaryExpr).End", Method, 0},
- {"(*UnaryExpr).Pos", Method, 0},
- {"(*ValueSpec).End", Method, 0},
- {"(*ValueSpec).Pos", Method, 0},
- {"(CommentMap).Comments", Method, 1},
- {"(CommentMap).Filter", Method, 1},
- {"(CommentMap).String", Method, 1},
- {"(CommentMap).Update", Method, 1},
- {"(ObjKind).String", Method, 0},
- {"ArrayType", Type, 0},
- {"ArrayType.Elt", Field, 0},
- {"ArrayType.Lbrack", Field, 0},
- {"ArrayType.Len", Field, 0},
- {"AssignStmt", Type, 0},
- {"AssignStmt.Lhs", Field, 0},
- {"AssignStmt.Rhs", Field, 0},
- {"AssignStmt.Tok", Field, 0},
- {"AssignStmt.TokPos", Field, 0},
- {"Bad", Const, 0},
- {"BadDecl", Type, 0},
- {"BadDecl.From", Field, 0},
- {"BadDecl.To", Field, 0},
- {"BadExpr", Type, 0},
- {"BadExpr.From", Field, 0},
- {"BadExpr.To", Field, 0},
- {"BadStmt", Type, 0},
- {"BadStmt.From", Field, 0},
- {"BadStmt.To", Field, 0},
- {"BasicLit", Type, 0},
- {"BasicLit.Kind", Field, 0},
- {"BasicLit.Value", Field, 0},
- {"BasicLit.ValuePos", Field, 0},
- {"BinaryExpr", Type, 0},
- {"BinaryExpr.Op", Field, 0},
- {"BinaryExpr.OpPos", Field, 0},
- {"BinaryExpr.X", Field, 0},
- {"BinaryExpr.Y", Field, 0},
- {"BlockStmt", Type, 0},
- {"BlockStmt.Lbrace", Field, 0},
- {"BlockStmt.List", Field, 0},
- {"BlockStmt.Rbrace", Field, 0},
- {"BranchStmt", Type, 0},
- {"BranchStmt.Label", Field, 0},
- {"BranchStmt.Tok", Field, 0},
- {"BranchStmt.TokPos", Field, 0},
- {"CallExpr", Type, 0},
- {"CallExpr.Args", Field, 0},
- {"CallExpr.Ellipsis", Field, 0},
- {"CallExpr.Fun", Field, 0},
- {"CallExpr.Lparen", Field, 0},
- {"CallExpr.Rparen", Field, 0},
- {"CaseClause", Type, 0},
- {"CaseClause.Body", Field, 0},
- {"CaseClause.Case", Field, 0},
- {"CaseClause.Colon", Field, 0},
- {"CaseClause.List", Field, 0},
- {"ChanDir", Type, 0},
- {"ChanType", Type, 0},
- {"ChanType.Arrow", Field, 1},
- {"ChanType.Begin", Field, 0},
- {"ChanType.Dir", Field, 0},
- {"ChanType.Value", Field, 0},
- {"CommClause", Type, 0},
- {"CommClause.Body", Field, 0},
- {"CommClause.Case", Field, 0},
- {"CommClause.Colon", Field, 0},
- {"CommClause.Comm", Field, 0},
- {"Comment", Type, 0},
- {"Comment.Slash", Field, 0},
- {"Comment.Text", Field, 0},
- {"CommentGroup", Type, 0},
- {"CommentGroup.List", Field, 0},
- {"CommentMap", Type, 1},
- {"CompositeLit", Type, 0},
- {"CompositeLit.Elts", Field, 0},
- {"CompositeLit.Incomplete", Field, 11},
- {"CompositeLit.Lbrace", Field, 0},
- {"CompositeLit.Rbrace", Field, 0},
- {"CompositeLit.Type", Field, 0},
- {"Con", Const, 0},
- {"Decl", Type, 0},
- {"DeclStmt", Type, 0},
- {"DeclStmt.Decl", Field, 0},
- {"DeferStmt", Type, 0},
- {"DeferStmt.Call", Field, 0},
- {"DeferStmt.Defer", Field, 0},
- {"Ellipsis", Type, 0},
- {"Ellipsis.Ellipsis", Field, 0},
- {"Ellipsis.Elt", Field, 0},
- {"EmptyStmt", Type, 0},
- {"EmptyStmt.Implicit", Field, 5},
- {"EmptyStmt.Semicolon", Field, 0},
- {"Expr", Type, 0},
- {"ExprStmt", Type, 0},
- {"ExprStmt.X", Field, 0},
- {"Field", Type, 0},
- {"Field.Comment", Field, 0},
- {"Field.Doc", Field, 0},
- {"Field.Names", Field, 0},
- {"Field.Tag", Field, 0},
- {"Field.Type", Field, 0},
- {"FieldFilter", Type, 0},
- {"FieldList", Type, 0},
- {"FieldList.Closing", Field, 0},
- {"FieldList.List", Field, 0},
- {"FieldList.Opening", Field, 0},
- {"File", Type, 0},
- {"File.Comments", Field, 0},
- {"File.Decls", Field, 0},
- {"File.Doc", Field, 0},
- {"File.FileEnd", Field, 20},
- {"File.FileStart", Field, 20},
- {"File.GoVersion", Field, 21},
- {"File.Imports", Field, 0},
- {"File.Name", Field, 0},
- {"File.Package", Field, 0},
- {"File.Scope", Field, 0},
- {"File.Unresolved", Field, 0},
- {"FileExports", Func, 0},
- {"Filter", Type, 0},
- {"FilterDecl", Func, 0},
- {"FilterFile", Func, 0},
- {"FilterFuncDuplicates", Const, 0},
- {"FilterImportDuplicates", Const, 0},
- {"FilterPackage", Func, 0},
- {"FilterUnassociatedComments", Const, 0},
- {"ForStmt", Type, 0},
- {"ForStmt.Body", Field, 0},
- {"ForStmt.Cond", Field, 0},
- {"ForStmt.For", Field, 0},
- {"ForStmt.Init", Field, 0},
- {"ForStmt.Post", Field, 0},
- {"Fprint", Func, 0},
- {"Fun", Const, 0},
- {"FuncDecl", Type, 0},
- {"FuncDecl.Body", Field, 0},
- {"FuncDecl.Doc", Field, 0},
- {"FuncDecl.Name", Field, 0},
- {"FuncDecl.Recv", Field, 0},
- {"FuncDecl.Type", Field, 0},
- {"FuncLit", Type, 0},
- {"FuncLit.Body", Field, 0},
- {"FuncLit.Type", Field, 0},
- {"FuncType", Type, 0},
- {"FuncType.Func", Field, 0},
- {"FuncType.Params", Field, 0},
- {"FuncType.Results", Field, 0},
- {"FuncType.TypeParams", Field, 18},
- {"GenDecl", Type, 0},
- {"GenDecl.Doc", Field, 0},
- {"GenDecl.Lparen", Field, 0},
- {"GenDecl.Rparen", Field, 0},
- {"GenDecl.Specs", Field, 0},
- {"GenDecl.Tok", Field, 0},
- {"GenDecl.TokPos", Field, 0},
- {"GoStmt", Type, 0},
- {"GoStmt.Call", Field, 0},
- {"GoStmt.Go", Field, 0},
- {"Ident", Type, 0},
- {"Ident.Name", Field, 0},
- {"Ident.NamePos", Field, 0},
- {"Ident.Obj", Field, 0},
- {"IfStmt", Type, 0},
- {"IfStmt.Body", Field, 0},
- {"IfStmt.Cond", Field, 0},
- {"IfStmt.Else", Field, 0},
- {"IfStmt.If", Field, 0},
- {"IfStmt.Init", Field, 0},
- {"ImportSpec", Type, 0},
- {"ImportSpec.Comment", Field, 0},
- {"ImportSpec.Doc", Field, 0},
- {"ImportSpec.EndPos", Field, 0},
- {"ImportSpec.Name", Field, 0},
- {"ImportSpec.Path", Field, 0},
- {"Importer", Type, 0},
- {"IncDecStmt", Type, 0},
- {"IncDecStmt.Tok", Field, 0},
- {"IncDecStmt.TokPos", Field, 0},
- {"IncDecStmt.X", Field, 0},
- {"IndexExpr", Type, 0},
- {"IndexExpr.Index", Field, 0},
- {"IndexExpr.Lbrack", Field, 0},
- {"IndexExpr.Rbrack", Field, 0},
- {"IndexExpr.X", Field, 0},
- {"IndexListExpr", Type, 18},
- {"IndexListExpr.Indices", Field, 18},
- {"IndexListExpr.Lbrack", Field, 18},
- {"IndexListExpr.Rbrack", Field, 18},
- {"IndexListExpr.X", Field, 18},
- {"Inspect", Func, 0},
- {"InterfaceType", Type, 0},
- {"InterfaceType.Incomplete", Field, 0},
- {"InterfaceType.Interface", Field, 0},
- {"InterfaceType.Methods", Field, 0},
- {"IsExported", Func, 0},
- {"IsGenerated", Func, 21},
- {"KeyValueExpr", Type, 0},
- {"KeyValueExpr.Colon", Field, 0},
- {"KeyValueExpr.Key", Field, 0},
- {"KeyValueExpr.Value", Field, 0},
- {"LabeledStmt", Type, 0},
- {"LabeledStmt.Colon", Field, 0},
- {"LabeledStmt.Label", Field, 0},
- {"LabeledStmt.Stmt", Field, 0},
- {"Lbl", Const, 0},
- {"MapType", Type, 0},
- {"MapType.Key", Field, 0},
- {"MapType.Map", Field, 0},
- {"MapType.Value", Field, 0},
- {"MergeMode", Type, 0},
- {"MergePackageFiles", Func, 0},
- {"NewCommentMap", Func, 1},
- {"NewIdent", Func, 0},
- {"NewObj", Func, 0},
- {"NewPackage", Func, 0},
- {"NewScope", Func, 0},
- {"Node", Type, 0},
- {"NotNilFilter", Func, 0},
- {"ObjKind", Type, 0},
- {"Object", Type, 0},
- {"Object.Data", Field, 0},
- {"Object.Decl", Field, 0},
- {"Object.Kind", Field, 0},
- {"Object.Name", Field, 0},
- {"Object.Type", Field, 0},
- {"Package", Type, 0},
- {"Package.Files", Field, 0},
- {"Package.Imports", Field, 0},
- {"Package.Name", Field, 0},
- {"Package.Scope", Field, 0},
- {"PackageExports", Func, 0},
- {"ParenExpr", Type, 0},
- {"ParenExpr.Lparen", Field, 0},
- {"ParenExpr.Rparen", Field, 0},
- {"ParenExpr.X", Field, 0},
- {"Pkg", Const, 0},
- {"Preorder", Func, 23},
- {"Print", Func, 0},
- {"RECV", Const, 0},
- {"RangeStmt", Type, 0},
- {"RangeStmt.Body", Field, 0},
- {"RangeStmt.For", Field, 0},
- {"RangeStmt.Key", Field, 0},
- {"RangeStmt.Range", Field, 20},
- {"RangeStmt.Tok", Field, 0},
- {"RangeStmt.TokPos", Field, 0},
- {"RangeStmt.Value", Field, 0},
- {"RangeStmt.X", Field, 0},
- {"ReturnStmt", Type, 0},
- {"ReturnStmt.Results", Field, 0},
- {"ReturnStmt.Return", Field, 0},
- {"SEND", Const, 0},
- {"Scope", Type, 0},
- {"Scope.Objects", Field, 0},
- {"Scope.Outer", Field, 0},
- {"SelectStmt", Type, 0},
- {"SelectStmt.Body", Field, 0},
- {"SelectStmt.Select", Field, 0},
- {"SelectorExpr", Type, 0},
- {"SelectorExpr.Sel", Field, 0},
- {"SelectorExpr.X", Field, 0},
- {"SendStmt", Type, 0},
- {"SendStmt.Arrow", Field, 0},
- {"SendStmt.Chan", Field, 0},
- {"SendStmt.Value", Field, 0},
- {"SliceExpr", Type, 0},
- {"SliceExpr.High", Field, 0},
- {"SliceExpr.Lbrack", Field, 0},
- {"SliceExpr.Low", Field, 0},
- {"SliceExpr.Max", Field, 2},
- {"SliceExpr.Rbrack", Field, 0},
- {"SliceExpr.Slice3", Field, 2},
- {"SliceExpr.X", Field, 0},
- {"SortImports", Func, 0},
- {"Spec", Type, 0},
- {"StarExpr", Type, 0},
- {"StarExpr.Star", Field, 0},
- {"StarExpr.X", Field, 0},
- {"Stmt", Type, 0},
- {"StructType", Type, 0},
- {"StructType.Fields", Field, 0},
- {"StructType.Incomplete", Field, 0},
- {"StructType.Struct", Field, 0},
- {"SwitchStmt", Type, 0},
- {"SwitchStmt.Body", Field, 0},
- {"SwitchStmt.Init", Field, 0},
- {"SwitchStmt.Switch", Field, 0},
- {"SwitchStmt.Tag", Field, 0},
- {"Typ", Const, 0},
- {"TypeAssertExpr", Type, 0},
- {"TypeAssertExpr.Lparen", Field, 2},
- {"TypeAssertExpr.Rparen", Field, 2},
- {"TypeAssertExpr.Type", Field, 0},
- {"TypeAssertExpr.X", Field, 0},
- {"TypeSpec", Type, 0},
- {"TypeSpec.Assign", Field, 9},
- {"TypeSpec.Comment", Field, 0},
- {"TypeSpec.Doc", Field, 0},
- {"TypeSpec.Name", Field, 0},
- {"TypeSpec.Type", Field, 0},
- {"TypeSpec.TypeParams", Field, 18},
- {"TypeSwitchStmt", Type, 0},
- {"TypeSwitchStmt.Assign", Field, 0},
- {"TypeSwitchStmt.Body", Field, 0},
- {"TypeSwitchStmt.Init", Field, 0},
- {"TypeSwitchStmt.Switch", Field, 0},
- {"UnaryExpr", Type, 0},
- {"UnaryExpr.Op", Field, 0},
- {"UnaryExpr.OpPos", Field, 0},
- {"UnaryExpr.X", Field, 0},
- {"Unparen", Func, 22},
- {"ValueSpec", Type, 0},
- {"ValueSpec.Comment", Field, 0},
- {"ValueSpec.Doc", Field, 0},
- {"ValueSpec.Names", Field, 0},
- {"ValueSpec.Type", Field, 0},
- {"ValueSpec.Values", Field, 0},
- {"Var", Const, 0},
- {"Visitor", Type, 0},
- {"Walk", Func, 0},
- },
- "go/build": {
- {"(*Context).Import", Method, 0},
- {"(*Context).ImportDir", Method, 0},
- {"(*Context).MatchFile", Method, 2},
- {"(*Context).SrcDirs", Method, 0},
- {"(*MultiplePackageError).Error", Method, 4},
- {"(*NoGoError).Error", Method, 0},
- {"(*Package).IsCommand", Method, 0},
- {"AllowBinary", Const, 0},
- {"ArchChar", Func, 0},
- {"Context", Type, 0},
- {"Context.BuildTags", Field, 0},
- {"Context.CgoEnabled", Field, 0},
- {"Context.Compiler", Field, 0},
- {"Context.Dir", Field, 14},
- {"Context.GOARCH", Field, 0},
- {"Context.GOOS", Field, 0},
- {"Context.GOPATH", Field, 0},
- {"Context.GOROOT", Field, 0},
- {"Context.HasSubdir", Field, 0},
- {"Context.InstallSuffix", Field, 1},
- {"Context.IsAbsPath", Field, 0},
- {"Context.IsDir", Field, 0},
- {"Context.JoinPath", Field, 0},
- {"Context.OpenFile", Field, 0},
- {"Context.ReadDir", Field, 0},
- {"Context.ReleaseTags", Field, 1},
- {"Context.SplitPathList", Field, 0},
- {"Context.ToolTags", Field, 17},
- {"Context.UseAllFiles", Field, 0},
- {"Default", Var, 0},
- {"Directive", Type, 21},
- {"Directive.Pos", Field, 21},
- {"Directive.Text", Field, 21},
- {"FindOnly", Const, 0},
- {"IgnoreVendor", Const, 6},
- {"Import", Func, 0},
- {"ImportComment", Const, 4},
- {"ImportDir", Func, 0},
- {"ImportMode", Type, 0},
- {"IsLocalImport", Func, 0},
- {"MultiplePackageError", Type, 4},
- {"MultiplePackageError.Dir", Field, 4},
- {"MultiplePackageError.Files", Field, 4},
- {"MultiplePackageError.Packages", Field, 4},
- {"NoGoError", Type, 0},
- {"NoGoError.Dir", Field, 0},
- {"Package", Type, 0},
- {"Package.AllTags", Field, 2},
- {"Package.BinDir", Field, 0},
- {"Package.BinaryOnly", Field, 7},
- {"Package.CFiles", Field, 0},
- {"Package.CXXFiles", Field, 2},
- {"Package.CgoCFLAGS", Field, 0},
- {"Package.CgoCPPFLAGS", Field, 2},
- {"Package.CgoCXXFLAGS", Field, 2},
- {"Package.CgoFFLAGS", Field, 7},
- {"Package.CgoFiles", Field, 0},
- {"Package.CgoLDFLAGS", Field, 0},
- {"Package.CgoPkgConfig", Field, 0},
- {"Package.ConflictDir", Field, 2},
- {"Package.Dir", Field, 0},
- {"Package.Directives", Field, 21},
- {"Package.Doc", Field, 0},
- {"Package.EmbedPatternPos", Field, 16},
- {"Package.EmbedPatterns", Field, 16},
- {"Package.FFiles", Field, 7},
- {"Package.GoFiles", Field, 0},
- {"Package.Goroot", Field, 0},
- {"Package.HFiles", Field, 0},
- {"Package.IgnoredGoFiles", Field, 1},
- {"Package.IgnoredOtherFiles", Field, 16},
- {"Package.ImportComment", Field, 4},
- {"Package.ImportPath", Field, 0},
- {"Package.ImportPos", Field, 0},
- {"Package.Imports", Field, 0},
- {"Package.InvalidGoFiles", Field, 6},
- {"Package.MFiles", Field, 3},
- {"Package.Name", Field, 0},
- {"Package.PkgObj", Field, 0},
- {"Package.PkgRoot", Field, 0},
- {"Package.PkgTargetRoot", Field, 5},
- {"Package.Root", Field, 0},
- {"Package.SFiles", Field, 0},
- {"Package.SrcRoot", Field, 0},
- {"Package.SwigCXXFiles", Field, 1},
- {"Package.SwigFiles", Field, 1},
- {"Package.SysoFiles", Field, 0},
- {"Package.TestDirectives", Field, 21},
- {"Package.TestEmbedPatternPos", Field, 16},
- {"Package.TestEmbedPatterns", Field, 16},
- {"Package.TestGoFiles", Field, 0},
- {"Package.TestImportPos", Field, 0},
- {"Package.TestImports", Field, 0},
- {"Package.XTestDirectives", Field, 21},
- {"Package.XTestEmbedPatternPos", Field, 16},
- {"Package.XTestEmbedPatterns", Field, 16},
- {"Package.XTestGoFiles", Field, 0},
- {"Package.XTestImportPos", Field, 0},
- {"Package.XTestImports", Field, 0},
- {"ToolDir", Var, 0},
- },
- "go/build/constraint": {
- {"(*AndExpr).Eval", Method, 16},
- {"(*AndExpr).String", Method, 16},
- {"(*NotExpr).Eval", Method, 16},
- {"(*NotExpr).String", Method, 16},
- {"(*OrExpr).Eval", Method, 16},
- {"(*OrExpr).String", Method, 16},
- {"(*SyntaxError).Error", Method, 16},
- {"(*TagExpr).Eval", Method, 16},
- {"(*TagExpr).String", Method, 16},
- {"AndExpr", Type, 16},
- {"AndExpr.X", Field, 16},
- {"AndExpr.Y", Field, 16},
- {"Expr", Type, 16},
- {"GoVersion", Func, 21},
- {"IsGoBuild", Func, 16},
- {"IsPlusBuild", Func, 16},
- {"NotExpr", Type, 16},
- {"NotExpr.X", Field, 16},
- {"OrExpr", Type, 16},
- {"OrExpr.X", Field, 16},
- {"OrExpr.Y", Field, 16},
- {"Parse", Func, 16},
- {"PlusBuildLines", Func, 16},
- {"SyntaxError", Type, 16},
- {"SyntaxError.Err", Field, 16},
- {"SyntaxError.Offset", Field, 16},
- {"TagExpr", Type, 16},
- {"TagExpr.Tag", Field, 16},
- },
- "go/constant": {
- {"(Kind).String", Method, 18},
- {"BinaryOp", Func, 5},
- {"BitLen", Func, 5},
- {"Bool", Const, 5},
- {"BoolVal", Func, 5},
- {"Bytes", Func, 5},
- {"Compare", Func, 5},
- {"Complex", Const, 5},
- {"Denom", Func, 5},
- {"Float", Const, 5},
- {"Float32Val", Func, 5},
- {"Float64Val", Func, 5},
- {"Imag", Func, 5},
- {"Int", Const, 5},
- {"Int64Val", Func, 5},
- {"Kind", Type, 5},
- {"Make", Func, 13},
- {"MakeBool", Func, 5},
- {"MakeFloat64", Func, 5},
- {"MakeFromBytes", Func, 5},
- {"MakeFromLiteral", Func, 5},
- {"MakeImag", Func, 5},
- {"MakeInt64", Func, 5},
- {"MakeString", Func, 5},
- {"MakeUint64", Func, 5},
- {"MakeUnknown", Func, 5},
- {"Num", Func, 5},
- {"Real", Func, 5},
- {"Shift", Func, 5},
- {"Sign", Func, 5},
- {"String", Const, 5},
- {"StringVal", Func, 5},
- {"ToComplex", Func, 6},
- {"ToFloat", Func, 6},
- {"ToInt", Func, 6},
- {"Uint64Val", Func, 5},
- {"UnaryOp", Func, 5},
- {"Unknown", Const, 5},
- {"Val", Func, 13},
- {"Value", Type, 5},
- },
- "go/doc": {
- {"(*Package).Filter", Method, 0},
- {"(*Package).HTML", Method, 19},
- {"(*Package).Markdown", Method, 19},
- {"(*Package).Parser", Method, 19},
- {"(*Package).Printer", Method, 19},
- {"(*Package).Synopsis", Method, 19},
- {"(*Package).Text", Method, 19},
- {"AllDecls", Const, 0},
- {"AllMethods", Const, 0},
- {"Example", Type, 0},
- {"Example.Code", Field, 0},
- {"Example.Comments", Field, 0},
- {"Example.Doc", Field, 0},
- {"Example.EmptyOutput", Field, 1},
- {"Example.Name", Field, 0},
- {"Example.Order", Field, 1},
- {"Example.Output", Field, 0},
- {"Example.Play", Field, 1},
- {"Example.Suffix", Field, 14},
- {"Example.Unordered", Field, 7},
- {"Examples", Func, 0},
- {"Filter", Type, 0},
- {"Func", Type, 0},
- {"Func.Decl", Field, 0},
- {"Func.Doc", Field, 0},
- {"Func.Examples", Field, 14},
- {"Func.Level", Field, 0},
- {"Func.Name", Field, 0},
- {"Func.Orig", Field, 0},
- {"Func.Recv", Field, 0},
- {"IllegalPrefixes", Var, 1},
- {"IsPredeclared", Func, 8},
- {"Mode", Type, 0},
- {"New", Func, 0},
- {"NewFromFiles", Func, 14},
- {"Note", Type, 1},
- {"Note.Body", Field, 1},
- {"Note.End", Field, 1},
- {"Note.Pos", Field, 1},
- {"Note.UID", Field, 1},
- {"Package", Type, 0},
- {"Package.Bugs", Field, 0},
- {"Package.Consts", Field, 0},
- {"Package.Doc", Field, 0},
- {"Package.Examples", Field, 14},
- {"Package.Filenames", Field, 0},
- {"Package.Funcs", Field, 0},
- {"Package.ImportPath", Field, 0},
- {"Package.Imports", Field, 0},
- {"Package.Name", Field, 0},
- {"Package.Notes", Field, 1},
- {"Package.Types", Field, 0},
- {"Package.Vars", Field, 0},
- {"PreserveAST", Const, 12},
- {"Synopsis", Func, 0},
- {"ToHTML", Func, 0},
- {"ToText", Func, 0},
- {"Type", Type, 0},
- {"Type.Consts", Field, 0},
- {"Type.Decl", Field, 0},
- {"Type.Doc", Field, 0},
- {"Type.Examples", Field, 14},
- {"Type.Funcs", Field, 0},
- {"Type.Methods", Field, 0},
- {"Type.Name", Field, 0},
- {"Type.Vars", Field, 0},
- {"Value", Type, 0},
- {"Value.Decl", Field, 0},
- {"Value.Doc", Field, 0},
- {"Value.Names", Field, 0},
- },
- "go/doc/comment": {
- {"(*DocLink).DefaultURL", Method, 19},
- {"(*Heading).DefaultID", Method, 19},
- {"(*List).BlankBefore", Method, 19},
- {"(*List).BlankBetween", Method, 19},
- {"(*Parser).Parse", Method, 19},
- {"(*Printer).Comment", Method, 19},
- {"(*Printer).HTML", Method, 19},
- {"(*Printer).Markdown", Method, 19},
- {"(*Printer).Text", Method, 19},
- {"Block", Type, 19},
- {"Code", Type, 19},
- {"Code.Text", Field, 19},
- {"DefaultLookupPackage", Func, 19},
- {"Doc", Type, 19},
- {"Doc.Content", Field, 19},
- {"Doc.Links", Field, 19},
- {"DocLink", Type, 19},
- {"DocLink.ImportPath", Field, 19},
- {"DocLink.Name", Field, 19},
- {"DocLink.Recv", Field, 19},
- {"DocLink.Text", Field, 19},
- {"Heading", Type, 19},
- {"Heading.Text", Field, 19},
- {"Italic", Type, 19},
- {"Link", Type, 19},
- {"Link.Auto", Field, 19},
- {"Link.Text", Field, 19},
- {"Link.URL", Field, 19},
- {"LinkDef", Type, 19},
- {"LinkDef.Text", Field, 19},
- {"LinkDef.URL", Field, 19},
- {"LinkDef.Used", Field, 19},
- {"List", Type, 19},
- {"List.ForceBlankBefore", Field, 19},
- {"List.ForceBlankBetween", Field, 19},
- {"List.Items", Field, 19},
- {"ListItem", Type, 19},
- {"ListItem.Content", Field, 19},
- {"ListItem.Number", Field, 19},
- {"Paragraph", Type, 19},
- {"Paragraph.Text", Field, 19},
- {"Parser", Type, 19},
- {"Parser.LookupPackage", Field, 19},
- {"Parser.LookupSym", Field, 19},
- {"Parser.Words", Field, 19},
- {"Plain", Type, 19},
- {"Printer", Type, 19},
- {"Printer.DocLinkBaseURL", Field, 19},
- {"Printer.DocLinkURL", Field, 19},
- {"Printer.HeadingID", Field, 19},
- {"Printer.HeadingLevel", Field, 19},
- {"Printer.TextCodePrefix", Field, 19},
- {"Printer.TextPrefix", Field, 19},
- {"Printer.TextWidth", Field, 19},
- {"Text", Type, 19},
- },
- "go/format": {
- {"Node", Func, 1},
- {"Source", Func, 1},
- },
- "go/importer": {
- {"Default", Func, 5},
- {"For", Func, 5},
- {"ForCompiler", Func, 12},
- {"Lookup", Type, 5},
- },
- "go/parser": {
- {"AllErrors", Const, 1},
- {"DeclarationErrors", Const, 0},
- {"ImportsOnly", Const, 0},
- {"Mode", Type, 0},
- {"PackageClauseOnly", Const, 0},
- {"ParseComments", Const, 0},
- {"ParseDir", Func, 0},
- {"ParseExpr", Func, 0},
- {"ParseExprFrom", Func, 5},
- {"ParseFile", Func, 0},
- {"SkipObjectResolution", Const, 17},
- {"SpuriousErrors", Const, 0},
- {"Trace", Const, 0},
- },
- "go/printer": {
- {"(*Config).Fprint", Method, 0},
- {"CommentedNode", Type, 0},
- {"CommentedNode.Comments", Field, 0},
- {"CommentedNode.Node", Field, 0},
- {"Config", Type, 0},
- {"Config.Indent", Field, 1},
- {"Config.Mode", Field, 0},
- {"Config.Tabwidth", Field, 0},
- {"Fprint", Func, 0},
- {"Mode", Type, 0},
- {"RawFormat", Const, 0},
- {"SourcePos", Const, 0},
- {"TabIndent", Const, 0},
- {"UseSpaces", Const, 0},
- },
- "go/scanner": {
- {"(*ErrorList).Add", Method, 0},
- {"(*ErrorList).RemoveMultiples", Method, 0},
- {"(*ErrorList).Reset", Method, 0},
- {"(*Scanner).Init", Method, 0},
- {"(*Scanner).Scan", Method, 0},
- {"(Error).Error", Method, 0},
- {"(ErrorList).Err", Method, 0},
- {"(ErrorList).Error", Method, 0},
- {"(ErrorList).Len", Method, 0},
- {"(ErrorList).Less", Method, 0},
- {"(ErrorList).Sort", Method, 0},
- {"(ErrorList).Swap", Method, 0},
- {"Error", Type, 0},
- {"Error.Msg", Field, 0},
- {"Error.Pos", Field, 0},
- {"ErrorHandler", Type, 0},
- {"ErrorList", Type, 0},
- {"Mode", Type, 0},
- {"PrintError", Func, 0},
- {"ScanComments", Const, 0},
- {"Scanner", Type, 0},
- {"Scanner.ErrorCount", Field, 0},
- },
- "go/token": {
- {"(*File).AddLine", Method, 0},
- {"(*File).AddLineColumnInfo", Method, 11},
- {"(*File).AddLineInfo", Method, 0},
- {"(*File).Base", Method, 0},
- {"(*File).Line", Method, 0},
- {"(*File).LineCount", Method, 0},
- {"(*File).LineStart", Method, 12},
- {"(*File).Lines", Method, 21},
- {"(*File).MergeLine", Method, 2},
- {"(*File).Name", Method, 0},
- {"(*File).Offset", Method, 0},
- {"(*File).Pos", Method, 0},
- {"(*File).Position", Method, 0},
- {"(*File).PositionFor", Method, 4},
- {"(*File).SetLines", Method, 0},
- {"(*File).SetLinesForContent", Method, 0},
- {"(*File).Size", Method, 0},
- {"(*FileSet).AddFile", Method, 0},
- {"(*FileSet).Base", Method, 0},
- {"(*FileSet).File", Method, 0},
- {"(*FileSet).Iterate", Method, 0},
- {"(*FileSet).Position", Method, 0},
- {"(*FileSet).PositionFor", Method, 4},
- {"(*FileSet).Read", Method, 0},
- {"(*FileSet).RemoveFile", Method, 20},
- {"(*FileSet).Write", Method, 0},
- {"(*Position).IsValid", Method, 0},
- {"(Pos).IsValid", Method, 0},
- {"(Position).String", Method, 0},
- {"(Token).IsKeyword", Method, 0},
- {"(Token).IsLiteral", Method, 0},
- {"(Token).IsOperator", Method, 0},
- {"(Token).Precedence", Method, 0},
- {"(Token).String", Method, 0},
- {"ADD", Const, 0},
- {"ADD_ASSIGN", Const, 0},
- {"AND", Const, 0},
- {"AND_ASSIGN", Const, 0},
- {"AND_NOT", Const, 0},
- {"AND_NOT_ASSIGN", Const, 0},
- {"ARROW", Const, 0},
- {"ASSIGN", Const, 0},
- {"BREAK", Const, 0},
- {"CASE", Const, 0},
- {"CHAN", Const, 0},
- {"CHAR", Const, 0},
- {"COLON", Const, 0},
- {"COMMA", Const, 0},
- {"COMMENT", Const, 0},
- {"CONST", Const, 0},
- {"CONTINUE", Const, 0},
- {"DEC", Const, 0},
- {"DEFAULT", Const, 0},
- {"DEFER", Const, 0},
- {"DEFINE", Const, 0},
- {"ELLIPSIS", Const, 0},
- {"ELSE", Const, 0},
- {"EOF", Const, 0},
- {"EQL", Const, 0},
- {"FALLTHROUGH", Const, 0},
- {"FLOAT", Const, 0},
- {"FOR", Const, 0},
- {"FUNC", Const, 0},
- {"File", Type, 0},
- {"FileSet", Type, 0},
- {"GEQ", Const, 0},
- {"GO", Const, 0},
- {"GOTO", Const, 0},
- {"GTR", Const, 0},
- {"HighestPrec", Const, 0},
- {"IDENT", Const, 0},
- {"IF", Const, 0},
- {"ILLEGAL", Const, 0},
- {"IMAG", Const, 0},
- {"IMPORT", Const, 0},
- {"INC", Const, 0},
- {"INT", Const, 0},
- {"INTERFACE", Const, 0},
- {"IsExported", Func, 13},
- {"IsIdentifier", Func, 13},
- {"IsKeyword", Func, 13},
- {"LAND", Const, 0},
- {"LBRACE", Const, 0},
- {"LBRACK", Const, 0},
- {"LEQ", Const, 0},
- {"LOR", Const, 0},
- {"LPAREN", Const, 0},
- {"LSS", Const, 0},
- {"Lookup", Func, 0},
- {"LowestPrec", Const, 0},
- {"MAP", Const, 0},
- {"MUL", Const, 0},
- {"MUL_ASSIGN", Const, 0},
- {"NEQ", Const, 0},
- {"NOT", Const, 0},
- {"NewFileSet", Func, 0},
- {"NoPos", Const, 0},
- {"OR", Const, 0},
- {"OR_ASSIGN", Const, 0},
- {"PACKAGE", Const, 0},
- {"PERIOD", Const, 0},
- {"Pos", Type, 0},
- {"Position", Type, 0},
- {"Position.Column", Field, 0},
- {"Position.Filename", Field, 0},
- {"Position.Line", Field, 0},
- {"Position.Offset", Field, 0},
- {"QUO", Const, 0},
- {"QUO_ASSIGN", Const, 0},
- {"RANGE", Const, 0},
- {"RBRACE", Const, 0},
- {"RBRACK", Const, 0},
- {"REM", Const, 0},
- {"REM_ASSIGN", Const, 0},
- {"RETURN", Const, 0},
- {"RPAREN", Const, 0},
- {"SELECT", Const, 0},
- {"SEMICOLON", Const, 0},
- {"SHL", Const, 0},
- {"SHL_ASSIGN", Const, 0},
- {"SHR", Const, 0},
- {"SHR_ASSIGN", Const, 0},
- {"STRING", Const, 0},
- {"STRUCT", Const, 0},
- {"SUB", Const, 0},
- {"SUB_ASSIGN", Const, 0},
- {"SWITCH", Const, 0},
- {"TILDE", Const, 18},
- {"TYPE", Const, 0},
- {"Token", Type, 0},
- {"UnaryPrec", Const, 0},
- {"VAR", Const, 0},
- {"XOR", Const, 0},
- {"XOR_ASSIGN", Const, 0},
- },
- "go/types": {
- {"(*Alias).Obj", Method, 22},
- {"(*Alias).Origin", Method, 23},
- {"(*Alias).Rhs", Method, 23},
- {"(*Alias).SetTypeParams", Method, 23},
- {"(*Alias).String", Method, 22},
- {"(*Alias).TypeArgs", Method, 23},
- {"(*Alias).TypeParams", Method, 23},
- {"(*Alias).Underlying", Method, 22},
- {"(*ArgumentError).Error", Method, 18},
- {"(*ArgumentError).Unwrap", Method, 18},
- {"(*Array).Elem", Method, 5},
- {"(*Array).Len", Method, 5},
- {"(*Array).String", Method, 5},
- {"(*Array).Underlying", Method, 5},
- {"(*Basic).Info", Method, 5},
- {"(*Basic).Kind", Method, 5},
- {"(*Basic).Name", Method, 5},
- {"(*Basic).String", Method, 5},
- {"(*Basic).Underlying", Method, 5},
- {"(*Builtin).Exported", Method, 5},
- {"(*Builtin).Id", Method, 5},
- {"(*Builtin).Name", Method, 5},
- {"(*Builtin).Parent", Method, 5},
- {"(*Builtin).Pkg", Method, 5},
- {"(*Builtin).Pos", Method, 5},
- {"(*Builtin).String", Method, 5},
- {"(*Builtin).Type", Method, 5},
- {"(*Chan).Dir", Method, 5},
- {"(*Chan).Elem", Method, 5},
- {"(*Chan).String", Method, 5},
- {"(*Chan).Underlying", Method, 5},
- {"(*Checker).Files", Method, 5},
- {"(*Config).Check", Method, 5},
- {"(*Const).Exported", Method, 5},
- {"(*Const).Id", Method, 5},
- {"(*Const).Name", Method, 5},
- {"(*Const).Parent", Method, 5},
- {"(*Const).Pkg", Method, 5},
- {"(*Const).Pos", Method, 5},
- {"(*Const).String", Method, 5},
- {"(*Const).Type", Method, 5},
- {"(*Const).Val", Method, 5},
- {"(*Func).Exported", Method, 5},
- {"(*Func).FullName", Method, 5},
- {"(*Func).Id", Method, 5},
- {"(*Func).Name", Method, 5},
- {"(*Func).Origin", Method, 19},
- {"(*Func).Parent", Method, 5},
- {"(*Func).Pkg", Method, 5},
- {"(*Func).Pos", Method, 5},
- {"(*Func).Scope", Method, 5},
- {"(*Func).Signature", Method, 23},
- {"(*Func).String", Method, 5},
- {"(*Func).Type", Method, 5},
- {"(*Info).ObjectOf", Method, 5},
- {"(*Info).PkgNameOf", Method, 22},
- {"(*Info).TypeOf", Method, 5},
- {"(*Initializer).String", Method, 5},
- {"(*Interface).Complete", Method, 5},
- {"(*Interface).Embedded", Method, 5},
- {"(*Interface).EmbeddedType", Method, 11},
- {"(*Interface).Empty", Method, 5},
- {"(*Interface).ExplicitMethod", Method, 5},
- {"(*Interface).IsComparable", Method, 18},
- {"(*Interface).IsImplicit", Method, 18},
- {"(*Interface).IsMethodSet", Method, 18},
- {"(*Interface).MarkImplicit", Method, 18},
- {"(*Interface).Method", Method, 5},
- {"(*Interface).NumEmbeddeds", Method, 5},
- {"(*Interface).NumExplicitMethods", Method, 5},
- {"(*Interface).NumMethods", Method, 5},
- {"(*Interface).String", Method, 5},
- {"(*Interface).Underlying", Method, 5},
- {"(*Label).Exported", Method, 5},
- {"(*Label).Id", Method, 5},
- {"(*Label).Name", Method, 5},
- {"(*Label).Parent", Method, 5},
- {"(*Label).Pkg", Method, 5},
- {"(*Label).Pos", Method, 5},
- {"(*Label).String", Method, 5},
- {"(*Label).Type", Method, 5},
- {"(*Map).Elem", Method, 5},
- {"(*Map).Key", Method, 5},
- {"(*Map).String", Method, 5},
- {"(*Map).Underlying", Method, 5},
- {"(*MethodSet).At", Method, 5},
- {"(*MethodSet).Len", Method, 5},
- {"(*MethodSet).Lookup", Method, 5},
- {"(*MethodSet).String", Method, 5},
- {"(*Named).AddMethod", Method, 5},
- {"(*Named).Method", Method, 5},
- {"(*Named).NumMethods", Method, 5},
- {"(*Named).Obj", Method, 5},
- {"(*Named).Origin", Method, 18},
- {"(*Named).SetTypeParams", Method, 18},
- {"(*Named).SetUnderlying", Method, 5},
- {"(*Named).String", Method, 5},
- {"(*Named).TypeArgs", Method, 18},
- {"(*Named).TypeParams", Method, 18},
- {"(*Named).Underlying", Method, 5},
- {"(*Nil).Exported", Method, 5},
- {"(*Nil).Id", Method, 5},
- {"(*Nil).Name", Method, 5},
- {"(*Nil).Parent", Method, 5},
- {"(*Nil).Pkg", Method, 5},
- {"(*Nil).Pos", Method, 5},
- {"(*Nil).String", Method, 5},
- {"(*Nil).Type", Method, 5},
- {"(*Package).Complete", Method, 5},
- {"(*Package).GoVersion", Method, 21},
- {"(*Package).Imports", Method, 5},
- {"(*Package).MarkComplete", Method, 5},
- {"(*Package).Name", Method, 5},
- {"(*Package).Path", Method, 5},
- {"(*Package).Scope", Method, 5},
- {"(*Package).SetImports", Method, 5},
- {"(*Package).SetName", Method, 6},
- {"(*Package).String", Method, 5},
- {"(*PkgName).Exported", Method, 5},
- {"(*PkgName).Id", Method, 5},
- {"(*PkgName).Imported", Method, 5},
- {"(*PkgName).Name", Method, 5},
- {"(*PkgName).Parent", Method, 5},
- {"(*PkgName).Pkg", Method, 5},
- {"(*PkgName).Pos", Method, 5},
- {"(*PkgName).String", Method, 5},
- {"(*PkgName).Type", Method, 5},
- {"(*Pointer).Elem", Method, 5},
- {"(*Pointer).String", Method, 5},
- {"(*Pointer).Underlying", Method, 5},
- {"(*Scope).Child", Method, 5},
- {"(*Scope).Contains", Method, 5},
- {"(*Scope).End", Method, 5},
- {"(*Scope).Innermost", Method, 5},
- {"(*Scope).Insert", Method, 5},
- {"(*Scope).Len", Method, 5},
- {"(*Scope).Lookup", Method, 5},
- {"(*Scope).LookupParent", Method, 5},
- {"(*Scope).Names", Method, 5},
- {"(*Scope).NumChildren", Method, 5},
- {"(*Scope).Parent", Method, 5},
- {"(*Scope).Pos", Method, 5},
- {"(*Scope).String", Method, 5},
- {"(*Scope).WriteTo", Method, 5},
- {"(*Selection).Index", Method, 5},
- {"(*Selection).Indirect", Method, 5},
- {"(*Selection).Kind", Method, 5},
- {"(*Selection).Obj", Method, 5},
- {"(*Selection).Recv", Method, 5},
- {"(*Selection).String", Method, 5},
- {"(*Selection).Type", Method, 5},
- {"(*Signature).Params", Method, 5},
- {"(*Signature).Recv", Method, 5},
- {"(*Signature).RecvTypeParams", Method, 18},
- {"(*Signature).Results", Method, 5},
- {"(*Signature).String", Method, 5},
- {"(*Signature).TypeParams", Method, 18},
- {"(*Signature).Underlying", Method, 5},
- {"(*Signature).Variadic", Method, 5},
- {"(*Slice).Elem", Method, 5},
- {"(*Slice).String", Method, 5},
- {"(*Slice).Underlying", Method, 5},
- {"(*StdSizes).Alignof", Method, 5},
- {"(*StdSizes).Offsetsof", Method, 5},
- {"(*StdSizes).Sizeof", Method, 5},
- {"(*Struct).Field", Method, 5},
- {"(*Struct).NumFields", Method, 5},
- {"(*Struct).String", Method, 5},
- {"(*Struct).Tag", Method, 5},
- {"(*Struct).Underlying", Method, 5},
- {"(*Term).String", Method, 18},
- {"(*Term).Tilde", Method, 18},
- {"(*Term).Type", Method, 18},
- {"(*Tuple).At", Method, 5},
- {"(*Tuple).Len", Method, 5},
- {"(*Tuple).String", Method, 5},
- {"(*Tuple).Underlying", Method, 5},
- {"(*TypeList).At", Method, 18},
- {"(*TypeList).Len", Method, 18},
- {"(*TypeName).Exported", Method, 5},
- {"(*TypeName).Id", Method, 5},
- {"(*TypeName).IsAlias", Method, 9},
- {"(*TypeName).Name", Method, 5},
- {"(*TypeName).Parent", Method, 5},
- {"(*TypeName).Pkg", Method, 5},
- {"(*TypeName).Pos", Method, 5},
- {"(*TypeName).String", Method, 5},
- {"(*TypeName).Type", Method, 5},
- {"(*TypeParam).Constraint", Method, 18},
- {"(*TypeParam).Index", Method, 18},
- {"(*TypeParam).Obj", Method, 18},
- {"(*TypeParam).SetConstraint", Method, 18},
- {"(*TypeParam).String", Method, 18},
- {"(*TypeParam).Underlying", Method, 18},
- {"(*TypeParamList).At", Method, 18},
- {"(*TypeParamList).Len", Method, 18},
- {"(*Union).Len", Method, 18},
- {"(*Union).String", Method, 18},
- {"(*Union).Term", Method, 18},
- {"(*Union).Underlying", Method, 18},
- {"(*Var).Anonymous", Method, 5},
- {"(*Var).Embedded", Method, 11},
- {"(*Var).Exported", Method, 5},
- {"(*Var).Id", Method, 5},
- {"(*Var).IsField", Method, 5},
- {"(*Var).Name", Method, 5},
- {"(*Var).Origin", Method, 19},
- {"(*Var).Parent", Method, 5},
- {"(*Var).Pkg", Method, 5},
- {"(*Var).Pos", Method, 5},
- {"(*Var).String", Method, 5},
- {"(*Var).Type", Method, 5},
- {"(Checker).ObjectOf", Method, 5},
- {"(Checker).PkgNameOf", Method, 22},
- {"(Checker).TypeOf", Method, 5},
- {"(Error).Error", Method, 5},
- {"(TypeAndValue).Addressable", Method, 5},
- {"(TypeAndValue).Assignable", Method, 5},
- {"(TypeAndValue).HasOk", Method, 5},
- {"(TypeAndValue).IsBuiltin", Method, 5},
- {"(TypeAndValue).IsNil", Method, 5},
- {"(TypeAndValue).IsType", Method, 5},
- {"(TypeAndValue).IsValue", Method, 5},
- {"(TypeAndValue).IsVoid", Method, 5},
- {"Alias", Type, 22},
- {"ArgumentError", Type, 18},
- {"ArgumentError.Err", Field, 18},
- {"ArgumentError.Index", Field, 18},
- {"Array", Type, 5},
- {"AssertableTo", Func, 5},
- {"AssignableTo", Func, 5},
- {"Basic", Type, 5},
- {"BasicInfo", Type, 5},
- {"BasicKind", Type, 5},
- {"Bool", Const, 5},
- {"Builtin", Type, 5},
- {"Byte", Const, 5},
- {"Chan", Type, 5},
- {"ChanDir", Type, 5},
- {"CheckExpr", Func, 13},
- {"Checker", Type, 5},
- {"Checker.Info", Field, 5},
- {"Comparable", Func, 5},
- {"Complex128", Const, 5},
- {"Complex64", Const, 5},
- {"Config", Type, 5},
- {"Config.Context", Field, 18},
- {"Config.DisableUnusedImportCheck", Field, 5},
- {"Config.Error", Field, 5},
- {"Config.FakeImportC", Field, 5},
- {"Config.GoVersion", Field, 18},
- {"Config.IgnoreFuncBodies", Field, 5},
- {"Config.Importer", Field, 5},
- {"Config.Sizes", Field, 5},
- {"Const", Type, 5},
- {"Context", Type, 18},
- {"ConvertibleTo", Func, 5},
- {"DefPredeclaredTestFuncs", Func, 5},
- {"Default", Func, 8},
- {"Error", Type, 5},
- {"Error.Fset", Field, 5},
- {"Error.Msg", Field, 5},
- {"Error.Pos", Field, 5},
- {"Error.Soft", Field, 5},
- {"Eval", Func, 5},
- {"ExprString", Func, 5},
- {"FieldVal", Const, 5},
- {"Float32", Const, 5},
- {"Float64", Const, 5},
- {"Func", Type, 5},
- {"Id", Func, 5},
- {"Identical", Func, 5},
- {"IdenticalIgnoreTags", Func, 8},
- {"Implements", Func, 5},
- {"ImportMode", Type, 6},
- {"Importer", Type, 5},
- {"ImporterFrom", Type, 6},
- {"Info", Type, 5},
- {"Info.Defs", Field, 5},
- {"Info.FileVersions", Field, 22},
- {"Info.Implicits", Field, 5},
- {"Info.InitOrder", Field, 5},
- {"Info.Instances", Field, 18},
- {"Info.Scopes", Field, 5},
- {"Info.Selections", Field, 5},
- {"Info.Types", Field, 5},
- {"Info.Uses", Field, 5},
- {"Initializer", Type, 5},
- {"Initializer.Lhs", Field, 5},
- {"Initializer.Rhs", Field, 5},
- {"Instance", Type, 18},
- {"Instance.Type", Field, 18},
- {"Instance.TypeArgs", Field, 18},
- {"Instantiate", Func, 18},
- {"Int", Const, 5},
- {"Int16", Const, 5},
- {"Int32", Const, 5},
- {"Int64", Const, 5},
- {"Int8", Const, 5},
- {"Interface", Type, 5},
- {"Invalid", Const, 5},
- {"IsBoolean", Const, 5},
- {"IsComplex", Const, 5},
- {"IsConstType", Const, 5},
- {"IsFloat", Const, 5},
- {"IsInteger", Const, 5},
- {"IsInterface", Func, 5},
- {"IsNumeric", Const, 5},
- {"IsOrdered", Const, 5},
- {"IsString", Const, 5},
- {"IsUnsigned", Const, 5},
- {"IsUntyped", Const, 5},
- {"Label", Type, 5},
- {"LookupFieldOrMethod", Func, 5},
- {"Map", Type, 5},
- {"MethodExpr", Const, 5},
- {"MethodSet", Type, 5},
- {"MethodVal", Const, 5},
- {"MissingMethod", Func, 5},
- {"Named", Type, 5},
- {"NewAlias", Func, 22},
- {"NewArray", Func, 5},
- {"NewChan", Func, 5},
- {"NewChecker", Func, 5},
- {"NewConst", Func, 5},
- {"NewContext", Func, 18},
- {"NewField", Func, 5},
- {"NewFunc", Func, 5},
- {"NewInterface", Func, 5},
- {"NewInterfaceType", Func, 11},
- {"NewLabel", Func, 5},
- {"NewMap", Func, 5},
- {"NewMethodSet", Func, 5},
- {"NewNamed", Func, 5},
- {"NewPackage", Func, 5},
- {"NewParam", Func, 5},
- {"NewPkgName", Func, 5},
- {"NewPointer", Func, 5},
- {"NewScope", Func, 5},
- {"NewSignature", Func, 5},
- {"NewSignatureType", Func, 18},
- {"NewSlice", Func, 5},
- {"NewStruct", Func, 5},
- {"NewTerm", Func, 18},
- {"NewTuple", Func, 5},
- {"NewTypeName", Func, 5},
- {"NewTypeParam", Func, 18},
- {"NewUnion", Func, 18},
- {"NewVar", Func, 5},
- {"Nil", Type, 5},
- {"Object", Type, 5},
- {"ObjectString", Func, 5},
- {"Package", Type, 5},
- {"PkgName", Type, 5},
- {"Pointer", Type, 5},
- {"Qualifier", Type, 5},
- {"RecvOnly", Const, 5},
- {"RelativeTo", Func, 5},
- {"Rune", Const, 5},
- {"Satisfies", Func, 20},
- {"Scope", Type, 5},
- {"Selection", Type, 5},
- {"SelectionKind", Type, 5},
- {"SelectionString", Func, 5},
- {"SendOnly", Const, 5},
- {"SendRecv", Const, 5},
- {"Signature", Type, 5},
- {"Sizes", Type, 5},
- {"SizesFor", Func, 9},
- {"Slice", Type, 5},
- {"StdSizes", Type, 5},
- {"StdSizes.MaxAlign", Field, 5},
- {"StdSizes.WordSize", Field, 5},
- {"String", Const, 5},
- {"Struct", Type, 5},
- {"Term", Type, 18},
- {"Tuple", Type, 5},
- {"Typ", Var, 5},
- {"Type", Type, 5},
- {"TypeAndValue", Type, 5},
- {"TypeAndValue.Type", Field, 5},
- {"TypeAndValue.Value", Field, 5},
- {"TypeList", Type, 18},
- {"TypeName", Type, 5},
- {"TypeParam", Type, 18},
- {"TypeParamList", Type, 18},
- {"TypeString", Func, 5},
- {"Uint", Const, 5},
- {"Uint16", Const, 5},
- {"Uint32", Const, 5},
- {"Uint64", Const, 5},
- {"Uint8", Const, 5},
- {"Uintptr", Const, 5},
- {"Unalias", Func, 22},
- {"Union", Type, 18},
- {"Universe", Var, 5},
- {"Unsafe", Var, 5},
- {"UnsafePointer", Const, 5},
- {"UntypedBool", Const, 5},
- {"UntypedComplex", Const, 5},
- {"UntypedFloat", Const, 5},
- {"UntypedInt", Const, 5},
- {"UntypedNil", Const, 5},
- {"UntypedRune", Const, 5},
- {"UntypedString", Const, 5},
- {"Var", Type, 5},
- {"WriteExpr", Func, 5},
- {"WriteSignature", Func, 5},
- {"WriteType", Func, 5},
- },
- "go/version": {
- {"Compare", Func, 22},
- {"IsValid", Func, 22},
- {"Lang", Func, 22},
- },
- "hash": {
- {"Hash", Type, 0},
- {"Hash32", Type, 0},
- {"Hash64", Type, 0},
- },
- "hash/adler32": {
- {"Checksum", Func, 0},
- {"New", Func, 0},
- {"Size", Const, 0},
- },
- "hash/crc32": {
- {"Castagnoli", Const, 0},
- {"Checksum", Func, 0},
- {"ChecksumIEEE", Func, 0},
- {"IEEE", Const, 0},
- {"IEEETable", Var, 0},
- {"Koopman", Const, 0},
- {"MakeTable", Func, 0},
- {"New", Func, 0},
- {"NewIEEE", Func, 0},
- {"Size", Const, 0},
- {"Table", Type, 0},
- {"Update", Func, 0},
- },
- "hash/crc64": {
- {"Checksum", Func, 0},
- {"ECMA", Const, 0},
- {"ISO", Const, 0},
- {"MakeTable", Func, 0},
- {"New", Func, 0},
- {"Size", Const, 0},
- {"Table", Type, 0},
- {"Update", Func, 0},
- },
- "hash/fnv": {
- {"New128", Func, 9},
- {"New128a", Func, 9},
- {"New32", Func, 0},
- {"New32a", Func, 0},
- {"New64", Func, 0},
- {"New64a", Func, 0},
- },
- "hash/maphash": {
- {"(*Hash).BlockSize", Method, 14},
- {"(*Hash).Reset", Method, 14},
- {"(*Hash).Seed", Method, 14},
- {"(*Hash).SetSeed", Method, 14},
- {"(*Hash).Size", Method, 14},
- {"(*Hash).Sum", Method, 14},
- {"(*Hash).Sum64", Method, 14},
- {"(*Hash).Write", Method, 14},
- {"(*Hash).WriteByte", Method, 14},
- {"(*Hash).WriteString", Method, 14},
- {"Bytes", Func, 19},
- {"Hash", Type, 14},
- {"MakeSeed", Func, 14},
- {"Seed", Type, 14},
- {"String", Func, 19},
- },
- "html": {
- {"EscapeString", Func, 0},
- {"UnescapeString", Func, 0},
- },
- "html/template": {
- {"(*Error).Error", Method, 0},
- {"(*Template).AddParseTree", Method, 0},
- {"(*Template).Clone", Method, 0},
- {"(*Template).DefinedTemplates", Method, 6},
- {"(*Template).Delims", Method, 0},
- {"(*Template).Execute", Method, 0},
- {"(*Template).ExecuteTemplate", Method, 0},
- {"(*Template).Funcs", Method, 0},
- {"(*Template).Lookup", Method, 0},
- {"(*Template).Name", Method, 0},
- {"(*Template).New", Method, 0},
- {"(*Template).Option", Method, 5},
- {"(*Template).Parse", Method, 0},
- {"(*Template).ParseFS", Method, 16},
- {"(*Template).ParseFiles", Method, 0},
- {"(*Template).ParseGlob", Method, 0},
- {"(*Template).Templates", Method, 0},
- {"CSS", Type, 0},
- {"ErrAmbigContext", Const, 0},
- {"ErrBadHTML", Const, 0},
- {"ErrBranchEnd", Const, 0},
- {"ErrEndContext", Const, 0},
- {"ErrJSTemplate", Const, 21},
- {"ErrNoSuchTemplate", Const, 0},
- {"ErrOutputContext", Const, 0},
- {"ErrPartialCharset", Const, 0},
- {"ErrPartialEscape", Const, 0},
- {"ErrPredefinedEscaper", Const, 9},
- {"ErrRangeLoopReentry", Const, 0},
- {"ErrSlashAmbig", Const, 0},
- {"Error", Type, 0},
- {"Error.Description", Field, 0},
- {"Error.ErrorCode", Field, 0},
- {"Error.Line", Field, 0},
- {"Error.Name", Field, 0},
- {"Error.Node", Field, 4},
- {"ErrorCode", Type, 0},
- {"FuncMap", Type, 0},
- {"HTML", Type, 0},
- {"HTMLAttr", Type, 0},
- {"HTMLEscape", Func, 0},
- {"HTMLEscapeString", Func, 0},
- {"HTMLEscaper", Func, 0},
- {"IsTrue", Func, 6},
- {"JS", Type, 0},
- {"JSEscape", Func, 0},
- {"JSEscapeString", Func, 0},
- {"JSEscaper", Func, 0},
- {"JSStr", Type, 0},
- {"Must", Func, 0},
- {"New", Func, 0},
- {"OK", Const, 0},
- {"ParseFS", Func, 16},
- {"ParseFiles", Func, 0},
- {"ParseGlob", Func, 0},
- {"Srcset", Type, 10},
- {"Template", Type, 0},
- {"Template.Tree", Field, 2},
- {"URL", Type, 0},
- {"URLQueryEscaper", Func, 0},
- },
- "image": {
- {"(*Alpha).AlphaAt", Method, 4},
- {"(*Alpha).At", Method, 0},
- {"(*Alpha).Bounds", Method, 0},
- {"(*Alpha).ColorModel", Method, 0},
- {"(*Alpha).Opaque", Method, 0},
- {"(*Alpha).PixOffset", Method, 0},
- {"(*Alpha).RGBA64At", Method, 17},
- {"(*Alpha).Set", Method, 0},
- {"(*Alpha).SetAlpha", Method, 0},
- {"(*Alpha).SetRGBA64", Method, 17},
- {"(*Alpha).SubImage", Method, 0},
- {"(*Alpha16).Alpha16At", Method, 4},
- {"(*Alpha16).At", Method, 0},
- {"(*Alpha16).Bounds", Method, 0},
- {"(*Alpha16).ColorModel", Method, 0},
- {"(*Alpha16).Opaque", Method, 0},
- {"(*Alpha16).PixOffset", Method, 0},
- {"(*Alpha16).RGBA64At", Method, 17},
- {"(*Alpha16).Set", Method, 0},
- {"(*Alpha16).SetAlpha16", Method, 0},
- {"(*Alpha16).SetRGBA64", Method, 17},
- {"(*Alpha16).SubImage", Method, 0},
- {"(*CMYK).At", Method, 5},
- {"(*CMYK).Bounds", Method, 5},
- {"(*CMYK).CMYKAt", Method, 5},
- {"(*CMYK).ColorModel", Method, 5},
- {"(*CMYK).Opaque", Method, 5},
- {"(*CMYK).PixOffset", Method, 5},
- {"(*CMYK).RGBA64At", Method, 17},
- {"(*CMYK).Set", Method, 5},
- {"(*CMYK).SetCMYK", Method, 5},
- {"(*CMYK).SetRGBA64", Method, 17},
- {"(*CMYK).SubImage", Method, 5},
- {"(*Gray).At", Method, 0},
- {"(*Gray).Bounds", Method, 0},
- {"(*Gray).ColorModel", Method, 0},
- {"(*Gray).GrayAt", Method, 4},
- {"(*Gray).Opaque", Method, 0},
- {"(*Gray).PixOffset", Method, 0},
- {"(*Gray).RGBA64At", Method, 17},
- {"(*Gray).Set", Method, 0},
- {"(*Gray).SetGray", Method, 0},
- {"(*Gray).SetRGBA64", Method, 17},
- {"(*Gray).SubImage", Method, 0},
- {"(*Gray16).At", Method, 0},
- {"(*Gray16).Bounds", Method, 0},
- {"(*Gray16).ColorModel", Method, 0},
- {"(*Gray16).Gray16At", Method, 4},
- {"(*Gray16).Opaque", Method, 0},
- {"(*Gray16).PixOffset", Method, 0},
- {"(*Gray16).RGBA64At", Method, 17},
- {"(*Gray16).Set", Method, 0},
- {"(*Gray16).SetGray16", Method, 0},
- {"(*Gray16).SetRGBA64", Method, 17},
- {"(*Gray16).SubImage", Method, 0},
- {"(*NRGBA).At", Method, 0},
- {"(*NRGBA).Bounds", Method, 0},
- {"(*NRGBA).ColorModel", Method, 0},
- {"(*NRGBA).NRGBAAt", Method, 4},
- {"(*NRGBA).Opaque", Method, 0},
- {"(*NRGBA).PixOffset", Method, 0},
- {"(*NRGBA).RGBA64At", Method, 17},
- {"(*NRGBA).Set", Method, 0},
- {"(*NRGBA).SetNRGBA", Method, 0},
- {"(*NRGBA).SetRGBA64", Method, 17},
- {"(*NRGBA).SubImage", Method, 0},
- {"(*NRGBA64).At", Method, 0},
- {"(*NRGBA64).Bounds", Method, 0},
- {"(*NRGBA64).ColorModel", Method, 0},
- {"(*NRGBA64).NRGBA64At", Method, 4},
- {"(*NRGBA64).Opaque", Method, 0},
- {"(*NRGBA64).PixOffset", Method, 0},
- {"(*NRGBA64).RGBA64At", Method, 17},
- {"(*NRGBA64).Set", Method, 0},
- {"(*NRGBA64).SetNRGBA64", Method, 0},
- {"(*NRGBA64).SetRGBA64", Method, 17},
- {"(*NRGBA64).SubImage", Method, 0},
- {"(*NYCbCrA).AOffset", Method, 6},
- {"(*NYCbCrA).At", Method, 6},
- {"(*NYCbCrA).Bounds", Method, 6},
- {"(*NYCbCrA).COffset", Method, 6},
- {"(*NYCbCrA).ColorModel", Method, 6},
- {"(*NYCbCrA).NYCbCrAAt", Method, 6},
- {"(*NYCbCrA).Opaque", Method, 6},
- {"(*NYCbCrA).RGBA64At", Method, 17},
- {"(*NYCbCrA).SubImage", Method, 6},
- {"(*NYCbCrA).YCbCrAt", Method, 6},
- {"(*NYCbCrA).YOffset", Method, 6},
- {"(*Paletted).At", Method, 0},
- {"(*Paletted).Bounds", Method, 0},
- {"(*Paletted).ColorIndexAt", Method, 0},
- {"(*Paletted).ColorModel", Method, 0},
- {"(*Paletted).Opaque", Method, 0},
- {"(*Paletted).PixOffset", Method, 0},
- {"(*Paletted).RGBA64At", Method, 17},
- {"(*Paletted).Set", Method, 0},
- {"(*Paletted).SetColorIndex", Method, 0},
- {"(*Paletted).SetRGBA64", Method, 17},
- {"(*Paletted).SubImage", Method, 0},
- {"(*RGBA).At", Method, 0},
- {"(*RGBA).Bounds", Method, 0},
- {"(*RGBA).ColorModel", Method, 0},
- {"(*RGBA).Opaque", Method, 0},
- {"(*RGBA).PixOffset", Method, 0},
- {"(*RGBA).RGBA64At", Method, 17},
- {"(*RGBA).RGBAAt", Method, 4},
- {"(*RGBA).Set", Method, 0},
- {"(*RGBA).SetRGBA", Method, 0},
- {"(*RGBA).SetRGBA64", Method, 17},
- {"(*RGBA).SubImage", Method, 0},
- {"(*RGBA64).At", Method, 0},
- {"(*RGBA64).Bounds", Method, 0},
- {"(*RGBA64).ColorModel", Method, 0},
- {"(*RGBA64).Opaque", Method, 0},
- {"(*RGBA64).PixOffset", Method, 0},
- {"(*RGBA64).RGBA64At", Method, 4},
- {"(*RGBA64).Set", Method, 0},
- {"(*RGBA64).SetRGBA64", Method, 0},
- {"(*RGBA64).SubImage", Method, 0},
- {"(*Uniform).At", Method, 0},
- {"(*Uniform).Bounds", Method, 0},
- {"(*Uniform).ColorModel", Method, 0},
- {"(*Uniform).Convert", Method, 0},
- {"(*Uniform).Opaque", Method, 0},
- {"(*Uniform).RGBA", Method, 0},
- {"(*Uniform).RGBA64At", Method, 17},
- {"(*YCbCr).At", Method, 0},
- {"(*YCbCr).Bounds", Method, 0},
- {"(*YCbCr).COffset", Method, 0},
- {"(*YCbCr).ColorModel", Method, 0},
- {"(*YCbCr).Opaque", Method, 0},
- {"(*YCbCr).RGBA64At", Method, 17},
- {"(*YCbCr).SubImage", Method, 0},
- {"(*YCbCr).YCbCrAt", Method, 4},
- {"(*YCbCr).YOffset", Method, 0},
- {"(Point).Add", Method, 0},
- {"(Point).Div", Method, 0},
- {"(Point).Eq", Method, 0},
- {"(Point).In", Method, 0},
- {"(Point).Mod", Method, 0},
- {"(Point).Mul", Method, 0},
- {"(Point).String", Method, 0},
- {"(Point).Sub", Method, 0},
- {"(Rectangle).Add", Method, 0},
- {"(Rectangle).At", Method, 5},
- {"(Rectangle).Bounds", Method, 5},
- {"(Rectangle).Canon", Method, 0},
- {"(Rectangle).ColorModel", Method, 5},
- {"(Rectangle).Dx", Method, 0},
- {"(Rectangle).Dy", Method, 0},
- {"(Rectangle).Empty", Method, 0},
- {"(Rectangle).Eq", Method, 0},
- {"(Rectangle).In", Method, 0},
- {"(Rectangle).Inset", Method, 0},
- {"(Rectangle).Intersect", Method, 0},
- {"(Rectangle).Overlaps", Method, 0},
- {"(Rectangle).RGBA64At", Method, 17},
- {"(Rectangle).Size", Method, 0},
- {"(Rectangle).String", Method, 0},
- {"(Rectangle).Sub", Method, 0},
- {"(Rectangle).Union", Method, 0},
- {"(YCbCrSubsampleRatio).String", Method, 0},
- {"Alpha", Type, 0},
- {"Alpha.Pix", Field, 0},
- {"Alpha.Rect", Field, 0},
- {"Alpha.Stride", Field, 0},
- {"Alpha16", Type, 0},
- {"Alpha16.Pix", Field, 0},
- {"Alpha16.Rect", Field, 0},
- {"Alpha16.Stride", Field, 0},
- {"Black", Var, 0},
- {"CMYK", Type, 5},
- {"CMYK.Pix", Field, 5},
- {"CMYK.Rect", Field, 5},
- {"CMYK.Stride", Field, 5},
- {"Config", Type, 0},
- {"Config.ColorModel", Field, 0},
- {"Config.Height", Field, 0},
- {"Config.Width", Field, 0},
- {"Decode", Func, 0},
- {"DecodeConfig", Func, 0},
- {"ErrFormat", Var, 0},
- {"Gray", Type, 0},
- {"Gray.Pix", Field, 0},
- {"Gray.Rect", Field, 0},
- {"Gray.Stride", Field, 0},
- {"Gray16", Type, 0},
- {"Gray16.Pix", Field, 0},
- {"Gray16.Rect", Field, 0},
- {"Gray16.Stride", Field, 0},
- {"Image", Type, 0},
- {"NRGBA", Type, 0},
- {"NRGBA.Pix", Field, 0},
- {"NRGBA.Rect", Field, 0},
- {"NRGBA.Stride", Field, 0},
- {"NRGBA64", Type, 0},
- {"NRGBA64.Pix", Field, 0},
- {"NRGBA64.Rect", Field, 0},
- {"NRGBA64.Stride", Field, 0},
- {"NYCbCrA", Type, 6},
- {"NYCbCrA.A", Field, 6},
- {"NYCbCrA.AStride", Field, 6},
- {"NYCbCrA.YCbCr", Field, 6},
- {"NewAlpha", Func, 0},
- {"NewAlpha16", Func, 0},
- {"NewCMYK", Func, 5},
- {"NewGray", Func, 0},
- {"NewGray16", Func, 0},
- {"NewNRGBA", Func, 0},
- {"NewNRGBA64", Func, 0},
- {"NewNYCbCrA", Func, 6},
- {"NewPaletted", Func, 0},
- {"NewRGBA", Func, 0},
- {"NewRGBA64", Func, 0},
- {"NewUniform", Func, 0},
- {"NewYCbCr", Func, 0},
- {"Opaque", Var, 0},
- {"Paletted", Type, 0},
- {"Paletted.Palette", Field, 0},
- {"Paletted.Pix", Field, 0},
- {"Paletted.Rect", Field, 0},
- {"Paletted.Stride", Field, 0},
- {"PalettedImage", Type, 0},
- {"Point", Type, 0},
- {"Point.X", Field, 0},
- {"Point.Y", Field, 0},
- {"Pt", Func, 0},
- {"RGBA", Type, 0},
- {"RGBA.Pix", Field, 0},
- {"RGBA.Rect", Field, 0},
- {"RGBA.Stride", Field, 0},
- {"RGBA64", Type, 0},
- {"RGBA64.Pix", Field, 0},
- {"RGBA64.Rect", Field, 0},
- {"RGBA64.Stride", Field, 0},
- {"RGBA64Image", Type, 17},
- {"Rect", Func, 0},
- {"Rectangle", Type, 0},
- {"Rectangle.Max", Field, 0},
- {"Rectangle.Min", Field, 0},
- {"RegisterFormat", Func, 0},
- {"Transparent", Var, 0},
- {"Uniform", Type, 0},
- {"Uniform.C", Field, 0},
- {"White", Var, 0},
- {"YCbCr", Type, 0},
- {"YCbCr.CStride", Field, 0},
- {"YCbCr.Cb", Field, 0},
- {"YCbCr.Cr", Field, 0},
- {"YCbCr.Rect", Field, 0},
- {"YCbCr.SubsampleRatio", Field, 0},
- {"YCbCr.Y", Field, 0},
- {"YCbCr.YStride", Field, 0},
- {"YCbCrSubsampleRatio", Type, 0},
- {"YCbCrSubsampleRatio410", Const, 5},
- {"YCbCrSubsampleRatio411", Const, 5},
- {"YCbCrSubsampleRatio420", Const, 0},
- {"YCbCrSubsampleRatio422", Const, 0},
- {"YCbCrSubsampleRatio440", Const, 1},
- {"YCbCrSubsampleRatio444", Const, 0},
- {"ZP", Var, 0},
- {"ZR", Var, 0},
- },
- "image/color": {
- {"(Alpha).RGBA", Method, 0},
- {"(Alpha16).RGBA", Method, 0},
- {"(CMYK).RGBA", Method, 5},
- {"(Gray).RGBA", Method, 0},
- {"(Gray16).RGBA", Method, 0},
- {"(NRGBA).RGBA", Method, 0},
- {"(NRGBA64).RGBA", Method, 0},
- {"(NYCbCrA).RGBA", Method, 6},
- {"(Palette).Convert", Method, 0},
- {"(Palette).Index", Method, 0},
- {"(RGBA).RGBA", Method, 0},
- {"(RGBA64).RGBA", Method, 0},
- {"(YCbCr).RGBA", Method, 0},
- {"Alpha", Type, 0},
- {"Alpha.A", Field, 0},
- {"Alpha16", Type, 0},
- {"Alpha16.A", Field, 0},
- {"Alpha16Model", Var, 0},
- {"AlphaModel", Var, 0},
- {"Black", Var, 0},
- {"CMYK", Type, 5},
- {"CMYK.C", Field, 5},
- {"CMYK.K", Field, 5},
- {"CMYK.M", Field, 5},
- {"CMYK.Y", Field, 5},
- {"CMYKModel", Var, 5},
- {"CMYKToRGB", Func, 5},
- {"Color", Type, 0},
- {"Gray", Type, 0},
- {"Gray.Y", Field, 0},
- {"Gray16", Type, 0},
- {"Gray16.Y", Field, 0},
- {"Gray16Model", Var, 0},
- {"GrayModel", Var, 0},
- {"Model", Type, 0},
- {"ModelFunc", Func, 0},
- {"NRGBA", Type, 0},
- {"NRGBA.A", Field, 0},
- {"NRGBA.B", Field, 0},
- {"NRGBA.G", Field, 0},
- {"NRGBA.R", Field, 0},
- {"NRGBA64", Type, 0},
- {"NRGBA64.A", Field, 0},
- {"NRGBA64.B", Field, 0},
- {"NRGBA64.G", Field, 0},
- {"NRGBA64.R", Field, 0},
- {"NRGBA64Model", Var, 0},
- {"NRGBAModel", Var, 0},
- {"NYCbCrA", Type, 6},
- {"NYCbCrA.A", Field, 6},
- {"NYCbCrA.YCbCr", Field, 6},
- {"NYCbCrAModel", Var, 6},
- {"Opaque", Var, 0},
- {"Palette", Type, 0},
- {"RGBA", Type, 0},
- {"RGBA.A", Field, 0},
- {"RGBA.B", Field, 0},
- {"RGBA.G", Field, 0},
- {"RGBA.R", Field, 0},
- {"RGBA64", Type, 0},
- {"RGBA64.A", Field, 0},
- {"RGBA64.B", Field, 0},
- {"RGBA64.G", Field, 0},
- {"RGBA64.R", Field, 0},
- {"RGBA64Model", Var, 0},
- {"RGBAModel", Var, 0},
- {"RGBToCMYK", Func, 5},
- {"RGBToYCbCr", Func, 0},
- {"Transparent", Var, 0},
- {"White", Var, 0},
- {"YCbCr", Type, 0},
- {"YCbCr.Cb", Field, 0},
- {"YCbCr.Cr", Field, 0},
- {"YCbCr.Y", Field, 0},
- {"YCbCrModel", Var, 0},
- {"YCbCrToRGB", Func, 0},
- },
- "image/color/palette": {
- {"Plan9", Var, 2},
- {"WebSafe", Var, 2},
- },
- "image/draw": {
- {"(Op).Draw", Method, 2},
- {"Draw", Func, 0},
- {"DrawMask", Func, 0},
- {"Drawer", Type, 2},
- {"FloydSteinberg", Var, 2},
- {"Image", Type, 0},
- {"Op", Type, 0},
- {"Over", Const, 0},
- {"Quantizer", Type, 2},
- {"RGBA64Image", Type, 17},
- {"Src", Const, 0},
- },
- "image/gif": {
- {"Decode", Func, 0},
- {"DecodeAll", Func, 0},
- {"DecodeConfig", Func, 0},
- {"DisposalBackground", Const, 5},
- {"DisposalNone", Const, 5},
- {"DisposalPrevious", Const, 5},
- {"Encode", Func, 2},
- {"EncodeAll", Func, 2},
- {"GIF", Type, 0},
- {"GIF.BackgroundIndex", Field, 5},
- {"GIF.Config", Field, 5},
- {"GIF.Delay", Field, 0},
- {"GIF.Disposal", Field, 5},
- {"GIF.Image", Field, 0},
- {"GIF.LoopCount", Field, 0},
- {"Options", Type, 2},
- {"Options.Drawer", Field, 2},
- {"Options.NumColors", Field, 2},
- {"Options.Quantizer", Field, 2},
- },
- "image/jpeg": {
- {"(FormatError).Error", Method, 0},
- {"(UnsupportedError).Error", Method, 0},
- {"Decode", Func, 0},
- {"DecodeConfig", Func, 0},
- {"DefaultQuality", Const, 0},
- {"Encode", Func, 0},
- {"FormatError", Type, 0},
- {"Options", Type, 0},
- {"Options.Quality", Field, 0},
- {"Reader", Type, 0},
- {"UnsupportedError", Type, 0},
- },
- "image/png": {
- {"(*Encoder).Encode", Method, 4},
- {"(FormatError).Error", Method, 0},
- {"(UnsupportedError).Error", Method, 0},
- {"BestCompression", Const, 4},
- {"BestSpeed", Const, 4},
- {"CompressionLevel", Type, 4},
- {"Decode", Func, 0},
- {"DecodeConfig", Func, 0},
- {"DefaultCompression", Const, 4},
- {"Encode", Func, 0},
- {"Encoder", Type, 4},
- {"Encoder.BufferPool", Field, 9},
- {"Encoder.CompressionLevel", Field, 4},
- {"EncoderBuffer", Type, 9},
- {"EncoderBufferPool", Type, 9},
- {"FormatError", Type, 0},
- {"NoCompression", Const, 4},
- {"UnsupportedError", Type, 0},
- },
- "index/suffixarray": {
- {"(*Index).Bytes", Method, 0},
- {"(*Index).FindAllIndex", Method, 0},
- {"(*Index).Lookup", Method, 0},
- {"(*Index).Read", Method, 0},
- {"(*Index).Write", Method, 0},
- {"Index", Type, 0},
- {"New", Func, 0},
- },
- "io": {
- {"(*LimitedReader).Read", Method, 0},
- {"(*OffsetWriter).Seek", Method, 20},
- {"(*OffsetWriter).Write", Method, 20},
- {"(*OffsetWriter).WriteAt", Method, 20},
- {"(*PipeReader).Close", Method, 0},
- {"(*PipeReader).CloseWithError", Method, 0},
- {"(*PipeReader).Read", Method, 0},
- {"(*PipeWriter).Close", Method, 0},
- {"(*PipeWriter).CloseWithError", Method, 0},
- {"(*PipeWriter).Write", Method, 0},
- {"(*SectionReader).Outer", Method, 22},
- {"(*SectionReader).Read", Method, 0},
- {"(*SectionReader).ReadAt", Method, 0},
- {"(*SectionReader).Seek", Method, 0},
- {"(*SectionReader).Size", Method, 0},
- {"ByteReader", Type, 0},
- {"ByteScanner", Type, 0},
- {"ByteWriter", Type, 1},
- {"Closer", Type, 0},
- {"Copy", Func, 0},
- {"CopyBuffer", Func, 5},
- {"CopyN", Func, 0},
- {"Discard", Var, 16},
- {"EOF", Var, 0},
- {"ErrClosedPipe", Var, 0},
- {"ErrNoProgress", Var, 1},
- {"ErrShortBuffer", Var, 0},
- {"ErrShortWrite", Var, 0},
- {"ErrUnexpectedEOF", Var, 0},
- {"LimitReader", Func, 0},
- {"LimitedReader", Type, 0},
- {"LimitedReader.N", Field, 0},
- {"LimitedReader.R", Field, 0},
- {"MultiReader", Func, 0},
- {"MultiWriter", Func, 0},
- {"NewOffsetWriter", Func, 20},
- {"NewSectionReader", Func, 0},
- {"NopCloser", Func, 16},
- {"OffsetWriter", Type, 20},
- {"Pipe", Func, 0},
- {"PipeReader", Type, 0},
- {"PipeWriter", Type, 0},
- {"ReadAll", Func, 16},
- {"ReadAtLeast", Func, 0},
- {"ReadCloser", Type, 0},
- {"ReadFull", Func, 0},
- {"ReadSeekCloser", Type, 16},
- {"ReadSeeker", Type, 0},
- {"ReadWriteCloser", Type, 0},
- {"ReadWriteSeeker", Type, 0},
- {"ReadWriter", Type, 0},
- {"Reader", Type, 0},
- {"ReaderAt", Type, 0},
- {"ReaderFrom", Type, 0},
- {"RuneReader", Type, 0},
- {"RuneScanner", Type, 0},
- {"SectionReader", Type, 0},
- {"SeekCurrent", Const, 7},
- {"SeekEnd", Const, 7},
- {"SeekStart", Const, 7},
- {"Seeker", Type, 0},
- {"StringWriter", Type, 12},
- {"TeeReader", Func, 0},
- {"WriteCloser", Type, 0},
- {"WriteSeeker", Type, 0},
- {"WriteString", Func, 0},
- {"Writer", Type, 0},
- {"WriterAt", Type, 0},
- {"WriterTo", Type, 0},
- },
- "io/fs": {
- {"(*PathError).Error", Method, 16},
- {"(*PathError).Timeout", Method, 16},
- {"(*PathError).Unwrap", Method, 16},
- {"(FileMode).IsDir", Method, 16},
- {"(FileMode).IsRegular", Method, 16},
- {"(FileMode).Perm", Method, 16},
- {"(FileMode).String", Method, 16},
- {"(FileMode).Type", Method, 16},
- {"DirEntry", Type, 16},
- {"ErrClosed", Var, 16},
- {"ErrExist", Var, 16},
- {"ErrInvalid", Var, 16},
- {"ErrNotExist", Var, 16},
- {"ErrPermission", Var, 16},
- {"FS", Type, 16},
- {"File", Type, 16},
- {"FileInfo", Type, 16},
- {"FileInfoToDirEntry", Func, 17},
- {"FileMode", Type, 16},
- {"FormatDirEntry", Func, 21},
- {"FormatFileInfo", Func, 21},
- {"Glob", Func, 16},
- {"GlobFS", Type, 16},
- {"ModeAppend", Const, 16},
- {"ModeCharDevice", Const, 16},
- {"ModeDevice", Const, 16},
- {"ModeDir", Const, 16},
- {"ModeExclusive", Const, 16},
- {"ModeIrregular", Const, 16},
- {"ModeNamedPipe", Const, 16},
- {"ModePerm", Const, 16},
- {"ModeSetgid", Const, 16},
- {"ModeSetuid", Const, 16},
- {"ModeSocket", Const, 16},
- {"ModeSticky", Const, 16},
- {"ModeSymlink", Const, 16},
- {"ModeTemporary", Const, 16},
- {"ModeType", Const, 16},
- {"PathError", Type, 16},
- {"PathError.Err", Field, 16},
- {"PathError.Op", Field, 16},
- {"PathError.Path", Field, 16},
- {"ReadDir", Func, 16},
- {"ReadDirFS", Type, 16},
- {"ReadDirFile", Type, 16},
- {"ReadFile", Func, 16},
- {"ReadFileFS", Type, 16},
- {"SkipAll", Var, 20},
- {"SkipDir", Var, 16},
- {"Stat", Func, 16},
- {"StatFS", Type, 16},
- {"Sub", Func, 16},
- {"SubFS", Type, 16},
- {"ValidPath", Func, 16},
- {"WalkDir", Func, 16},
- {"WalkDirFunc", Type, 16},
- },
- "io/ioutil": {
- {"Discard", Var, 0},
- {"NopCloser", Func, 0},
- {"ReadAll", Func, 0},
- {"ReadDir", Func, 0},
- {"ReadFile", Func, 0},
- {"TempDir", Func, 0},
- {"TempFile", Func, 0},
- {"WriteFile", Func, 0},
- },
- "iter": {
- {"Pull", Func, 23},
- {"Pull2", Func, 23},
- {"Seq", Type, 23},
- {"Seq2", Type, 23},
- },
- "log": {
- {"(*Logger).Fatal", Method, 0},
- {"(*Logger).Fatalf", Method, 0},
- {"(*Logger).Fatalln", Method, 0},
- {"(*Logger).Flags", Method, 0},
- {"(*Logger).Output", Method, 0},
- {"(*Logger).Panic", Method, 0},
- {"(*Logger).Panicf", Method, 0},
- {"(*Logger).Panicln", Method, 0},
- {"(*Logger).Prefix", Method, 0},
- {"(*Logger).Print", Method, 0},
- {"(*Logger).Printf", Method, 0},
- {"(*Logger).Println", Method, 0},
- {"(*Logger).SetFlags", Method, 0},
- {"(*Logger).SetOutput", Method, 5},
- {"(*Logger).SetPrefix", Method, 0},
- {"(*Logger).Writer", Method, 12},
- {"Default", Func, 16},
- {"Fatal", Func, 0},
- {"Fatalf", Func, 0},
- {"Fatalln", Func, 0},
- {"Flags", Func, 0},
- {"LUTC", Const, 5},
- {"Ldate", Const, 0},
- {"Llongfile", Const, 0},
- {"Lmicroseconds", Const, 0},
- {"Lmsgprefix", Const, 14},
- {"Logger", Type, 0},
- {"Lshortfile", Const, 0},
- {"LstdFlags", Const, 0},
- {"Ltime", Const, 0},
- {"New", Func, 0},
- {"Output", Func, 5},
- {"Panic", Func, 0},
- {"Panicf", Func, 0},
- {"Panicln", Func, 0},
- {"Prefix", Func, 0},
- {"Print", Func, 0},
- {"Printf", Func, 0},
- {"Println", Func, 0},
- {"SetFlags", Func, 0},
- {"SetOutput", Func, 0},
- {"SetPrefix", Func, 0},
- {"Writer", Func, 13},
- },
- "log/slog": {
- {"(*JSONHandler).Enabled", Method, 21},
- {"(*JSONHandler).Handle", Method, 21},
- {"(*JSONHandler).WithAttrs", Method, 21},
- {"(*JSONHandler).WithGroup", Method, 21},
- {"(*Level).UnmarshalJSON", Method, 21},
- {"(*Level).UnmarshalText", Method, 21},
- {"(*LevelVar).Level", Method, 21},
- {"(*LevelVar).MarshalText", Method, 21},
- {"(*LevelVar).Set", Method, 21},
- {"(*LevelVar).String", Method, 21},
- {"(*LevelVar).UnmarshalText", Method, 21},
- {"(*Logger).Debug", Method, 21},
- {"(*Logger).DebugContext", Method, 21},
- {"(*Logger).Enabled", Method, 21},
- {"(*Logger).Error", Method, 21},
- {"(*Logger).ErrorContext", Method, 21},
- {"(*Logger).Handler", Method, 21},
- {"(*Logger).Info", Method, 21},
- {"(*Logger).InfoContext", Method, 21},
- {"(*Logger).Log", Method, 21},
- {"(*Logger).LogAttrs", Method, 21},
- {"(*Logger).Warn", Method, 21},
- {"(*Logger).WarnContext", Method, 21},
- {"(*Logger).With", Method, 21},
- {"(*Logger).WithGroup", Method, 21},
- {"(*Record).Add", Method, 21},
- {"(*Record).AddAttrs", Method, 21},
- {"(*TextHandler).Enabled", Method, 21},
- {"(*TextHandler).Handle", Method, 21},
- {"(*TextHandler).WithAttrs", Method, 21},
- {"(*TextHandler).WithGroup", Method, 21},
- {"(Attr).Equal", Method, 21},
- {"(Attr).String", Method, 21},
- {"(Kind).String", Method, 21},
- {"(Level).Level", Method, 21},
- {"(Level).MarshalJSON", Method, 21},
- {"(Level).MarshalText", Method, 21},
- {"(Level).String", Method, 21},
- {"(Record).Attrs", Method, 21},
- {"(Record).Clone", Method, 21},
- {"(Record).NumAttrs", Method, 21},
- {"(Value).Any", Method, 21},
- {"(Value).Bool", Method, 21},
- {"(Value).Duration", Method, 21},
- {"(Value).Equal", Method, 21},
- {"(Value).Float64", Method, 21},
- {"(Value).Group", Method, 21},
- {"(Value).Int64", Method, 21},
- {"(Value).Kind", Method, 21},
- {"(Value).LogValuer", Method, 21},
- {"(Value).Resolve", Method, 21},
- {"(Value).String", Method, 21},
- {"(Value).Time", Method, 21},
- {"(Value).Uint64", Method, 21},
- {"Any", Func, 21},
- {"AnyValue", Func, 21},
- {"Attr", Type, 21},
- {"Attr.Key", Field, 21},
- {"Attr.Value", Field, 21},
- {"Bool", Func, 21},
- {"BoolValue", Func, 21},
- {"Debug", Func, 21},
- {"DebugContext", Func, 21},
- {"Default", Func, 21},
- {"Duration", Func, 21},
- {"DurationValue", Func, 21},
- {"Error", Func, 21},
- {"ErrorContext", Func, 21},
- {"Float64", Func, 21},
- {"Float64Value", Func, 21},
- {"Group", Func, 21},
- {"GroupValue", Func, 21},
- {"Handler", Type, 21},
- {"HandlerOptions", Type, 21},
- {"HandlerOptions.AddSource", Field, 21},
- {"HandlerOptions.Level", Field, 21},
- {"HandlerOptions.ReplaceAttr", Field, 21},
- {"Info", Func, 21},
- {"InfoContext", Func, 21},
- {"Int", Func, 21},
- {"Int64", Func, 21},
- {"Int64Value", Func, 21},
- {"IntValue", Func, 21},
- {"JSONHandler", Type, 21},
- {"Kind", Type, 21},
- {"KindAny", Const, 21},
- {"KindBool", Const, 21},
- {"KindDuration", Const, 21},
- {"KindFloat64", Const, 21},
- {"KindGroup", Const, 21},
- {"KindInt64", Const, 21},
- {"KindLogValuer", Const, 21},
- {"KindString", Const, 21},
- {"KindTime", Const, 21},
- {"KindUint64", Const, 21},
- {"Level", Type, 21},
- {"LevelDebug", Const, 21},
- {"LevelError", Const, 21},
- {"LevelInfo", Const, 21},
- {"LevelKey", Const, 21},
- {"LevelVar", Type, 21},
- {"LevelWarn", Const, 21},
- {"Leveler", Type, 21},
- {"Log", Func, 21},
- {"LogAttrs", Func, 21},
- {"LogValuer", Type, 21},
- {"Logger", Type, 21},
- {"MessageKey", Const, 21},
- {"New", Func, 21},
- {"NewJSONHandler", Func, 21},
- {"NewLogLogger", Func, 21},
- {"NewRecord", Func, 21},
- {"NewTextHandler", Func, 21},
- {"Record", Type, 21},
- {"Record.Level", Field, 21},
- {"Record.Message", Field, 21},
- {"Record.PC", Field, 21},
- {"Record.Time", Field, 21},
- {"SetDefault", Func, 21},
- {"SetLogLoggerLevel", Func, 22},
- {"Source", Type, 21},
- {"Source.File", Field, 21},
- {"Source.Function", Field, 21},
- {"Source.Line", Field, 21},
- {"SourceKey", Const, 21},
- {"String", Func, 21},
- {"StringValue", Func, 21},
- {"TextHandler", Type, 21},
- {"Time", Func, 21},
- {"TimeKey", Const, 21},
- {"TimeValue", Func, 21},
- {"Uint64", Func, 21},
- {"Uint64Value", Func, 21},
- {"Value", Type, 21},
- {"Warn", Func, 21},
- {"WarnContext", Func, 21},
- {"With", Func, 21},
- },
- "log/syslog": {
- {"(*Writer).Alert", Method, 0},
- {"(*Writer).Close", Method, 0},
- {"(*Writer).Crit", Method, 0},
- {"(*Writer).Debug", Method, 0},
- {"(*Writer).Emerg", Method, 0},
- {"(*Writer).Err", Method, 0},
- {"(*Writer).Info", Method, 0},
- {"(*Writer).Notice", Method, 0},
- {"(*Writer).Warning", Method, 0},
- {"(*Writer).Write", Method, 0},
- {"Dial", Func, 0},
- {"LOG_ALERT", Const, 0},
- {"LOG_AUTH", Const, 1},
- {"LOG_AUTHPRIV", Const, 1},
- {"LOG_CRIT", Const, 0},
- {"LOG_CRON", Const, 1},
- {"LOG_DAEMON", Const, 1},
- {"LOG_DEBUG", Const, 0},
- {"LOG_EMERG", Const, 0},
- {"LOG_ERR", Const, 0},
- {"LOG_FTP", Const, 1},
- {"LOG_INFO", Const, 0},
- {"LOG_KERN", Const, 1},
- {"LOG_LOCAL0", Const, 1},
- {"LOG_LOCAL1", Const, 1},
- {"LOG_LOCAL2", Const, 1},
- {"LOG_LOCAL3", Const, 1},
- {"LOG_LOCAL4", Const, 1},
- {"LOG_LOCAL5", Const, 1},
- {"LOG_LOCAL6", Const, 1},
- {"LOG_LOCAL7", Const, 1},
- {"LOG_LPR", Const, 1},
- {"LOG_MAIL", Const, 1},
- {"LOG_NEWS", Const, 1},
- {"LOG_NOTICE", Const, 0},
- {"LOG_SYSLOG", Const, 1},
- {"LOG_USER", Const, 1},
- {"LOG_UUCP", Const, 1},
- {"LOG_WARNING", Const, 0},
- {"New", Func, 0},
- {"NewLogger", Func, 0},
- {"Priority", Type, 0},
- {"Writer", Type, 0},
- },
- "maps": {
- {"All", Func, 23},
- {"Clone", Func, 21},
- {"Collect", Func, 23},
- {"Copy", Func, 21},
- {"DeleteFunc", Func, 21},
- {"Equal", Func, 21},
- {"EqualFunc", Func, 21},
- {"Insert", Func, 23},
- {"Keys", Func, 23},
- {"Values", Func, 23},
- },
- "math": {
- {"Abs", Func, 0},
- {"Acos", Func, 0},
- {"Acosh", Func, 0},
- {"Asin", Func, 0},
- {"Asinh", Func, 0},
- {"Atan", Func, 0},
- {"Atan2", Func, 0},
- {"Atanh", Func, 0},
- {"Cbrt", Func, 0},
- {"Ceil", Func, 0},
- {"Copysign", Func, 0},
- {"Cos", Func, 0},
- {"Cosh", Func, 0},
- {"Dim", Func, 0},
- {"E", Const, 0},
- {"Erf", Func, 0},
- {"Erfc", Func, 0},
- {"Erfcinv", Func, 10},
- {"Erfinv", Func, 10},
- {"Exp", Func, 0},
- {"Exp2", Func, 0},
- {"Expm1", Func, 0},
- {"FMA", Func, 14},
- {"Float32bits", Func, 0},
- {"Float32frombits", Func, 0},
- {"Float64bits", Func, 0},
- {"Float64frombits", Func, 0},
- {"Floor", Func, 0},
- {"Frexp", Func, 0},
- {"Gamma", Func, 0},
- {"Hypot", Func, 0},
- {"Ilogb", Func, 0},
- {"Inf", Func, 0},
- {"IsInf", Func, 0},
- {"IsNaN", Func, 0},
- {"J0", Func, 0},
- {"J1", Func, 0},
- {"Jn", Func, 0},
- {"Ldexp", Func, 0},
- {"Lgamma", Func, 0},
- {"Ln10", Const, 0},
- {"Ln2", Const, 0},
- {"Log", Func, 0},
- {"Log10", Func, 0},
- {"Log10E", Const, 0},
- {"Log1p", Func, 0},
- {"Log2", Func, 0},
- {"Log2E", Const, 0},
- {"Logb", Func, 0},
- {"Max", Func, 0},
- {"MaxFloat32", Const, 0},
- {"MaxFloat64", Const, 0},
- {"MaxInt", Const, 17},
- {"MaxInt16", Const, 0},
- {"MaxInt32", Const, 0},
- {"MaxInt64", Const, 0},
- {"MaxInt8", Const, 0},
- {"MaxUint", Const, 17},
- {"MaxUint16", Const, 0},
- {"MaxUint32", Const, 0},
- {"MaxUint64", Const, 0},
- {"MaxUint8", Const, 0},
- {"Min", Func, 0},
- {"MinInt", Const, 17},
- {"MinInt16", Const, 0},
- {"MinInt32", Const, 0},
- {"MinInt64", Const, 0},
- {"MinInt8", Const, 0},
- {"Mod", Func, 0},
- {"Modf", Func, 0},
- {"NaN", Func, 0},
- {"Nextafter", Func, 0},
- {"Nextafter32", Func, 4},
- {"Phi", Const, 0},
- {"Pi", Const, 0},
- {"Pow", Func, 0},
- {"Pow10", Func, 0},
- {"Remainder", Func, 0},
- {"Round", Func, 10},
- {"RoundToEven", Func, 10},
- {"Signbit", Func, 0},
- {"Sin", Func, 0},
- {"Sincos", Func, 0},
- {"Sinh", Func, 0},
- {"SmallestNonzeroFloat32", Const, 0},
- {"SmallestNonzeroFloat64", Const, 0},
- {"Sqrt", Func, 0},
- {"Sqrt2", Const, 0},
- {"SqrtE", Const, 0},
- {"SqrtPhi", Const, 0},
- {"SqrtPi", Const, 0},
- {"Tan", Func, 0},
- {"Tanh", Func, 0},
- {"Trunc", Func, 0},
- {"Y0", Func, 0},
- {"Y1", Func, 0},
- {"Yn", Func, 0},
- },
- "math/big": {
- {"(*Float).Abs", Method, 5},
- {"(*Float).Acc", Method, 5},
- {"(*Float).Add", Method, 5},
- {"(*Float).Append", Method, 5},
- {"(*Float).Cmp", Method, 5},
- {"(*Float).Copy", Method, 5},
- {"(*Float).Float32", Method, 5},
- {"(*Float).Float64", Method, 5},
- {"(*Float).Format", Method, 5},
- {"(*Float).GobDecode", Method, 7},
- {"(*Float).GobEncode", Method, 7},
- {"(*Float).Int", Method, 5},
- {"(*Float).Int64", Method, 5},
- {"(*Float).IsInf", Method, 5},
- {"(*Float).IsInt", Method, 5},
- {"(*Float).MantExp", Method, 5},
- {"(*Float).MarshalText", Method, 6},
- {"(*Float).MinPrec", Method, 5},
- {"(*Float).Mode", Method, 5},
- {"(*Float).Mul", Method, 5},
- {"(*Float).Neg", Method, 5},
- {"(*Float).Parse", Method, 5},
- {"(*Float).Prec", Method, 5},
- {"(*Float).Quo", Method, 5},
- {"(*Float).Rat", Method, 5},
- {"(*Float).Scan", Method, 8},
- {"(*Float).Set", Method, 5},
- {"(*Float).SetFloat64", Method, 5},
- {"(*Float).SetInf", Method, 5},
- {"(*Float).SetInt", Method, 5},
- {"(*Float).SetInt64", Method, 5},
- {"(*Float).SetMantExp", Method, 5},
- {"(*Float).SetMode", Method, 5},
- {"(*Float).SetPrec", Method, 5},
- {"(*Float).SetRat", Method, 5},
- {"(*Float).SetString", Method, 5},
- {"(*Float).SetUint64", Method, 5},
- {"(*Float).Sign", Method, 5},
- {"(*Float).Signbit", Method, 5},
- {"(*Float).Sqrt", Method, 10},
- {"(*Float).String", Method, 5},
- {"(*Float).Sub", Method, 5},
- {"(*Float).Text", Method, 5},
- {"(*Float).Uint64", Method, 5},
- {"(*Float).UnmarshalText", Method, 6},
- {"(*Int).Abs", Method, 0},
- {"(*Int).Add", Method, 0},
- {"(*Int).And", Method, 0},
- {"(*Int).AndNot", Method, 0},
- {"(*Int).Append", Method, 6},
- {"(*Int).Binomial", Method, 0},
- {"(*Int).Bit", Method, 0},
- {"(*Int).BitLen", Method, 0},
- {"(*Int).Bits", Method, 0},
- {"(*Int).Bytes", Method, 0},
- {"(*Int).Cmp", Method, 0},
- {"(*Int).CmpAbs", Method, 10},
- {"(*Int).Div", Method, 0},
- {"(*Int).DivMod", Method, 0},
- {"(*Int).Exp", Method, 0},
- {"(*Int).FillBytes", Method, 15},
- {"(*Int).Float64", Method, 21},
- {"(*Int).Format", Method, 0},
- {"(*Int).GCD", Method, 0},
- {"(*Int).GobDecode", Method, 0},
- {"(*Int).GobEncode", Method, 0},
- {"(*Int).Int64", Method, 0},
- {"(*Int).IsInt64", Method, 9},
- {"(*Int).IsUint64", Method, 9},
- {"(*Int).Lsh", Method, 0},
- {"(*Int).MarshalJSON", Method, 1},
- {"(*Int).MarshalText", Method, 3},
- {"(*Int).Mod", Method, 0},
- {"(*Int).ModInverse", Method, 0},
- {"(*Int).ModSqrt", Method, 5},
- {"(*Int).Mul", Method, 0},
- {"(*Int).MulRange", Method, 0},
- {"(*Int).Neg", Method, 0},
- {"(*Int).Not", Method, 0},
- {"(*Int).Or", Method, 0},
- {"(*Int).ProbablyPrime", Method, 0},
- {"(*Int).Quo", Method, 0},
- {"(*Int).QuoRem", Method, 0},
- {"(*Int).Rand", Method, 0},
- {"(*Int).Rem", Method, 0},
- {"(*Int).Rsh", Method, 0},
- {"(*Int).Scan", Method, 0},
- {"(*Int).Set", Method, 0},
- {"(*Int).SetBit", Method, 0},
- {"(*Int).SetBits", Method, 0},
- {"(*Int).SetBytes", Method, 0},
- {"(*Int).SetInt64", Method, 0},
- {"(*Int).SetString", Method, 0},
- {"(*Int).SetUint64", Method, 1},
- {"(*Int).Sign", Method, 0},
- {"(*Int).Sqrt", Method, 8},
- {"(*Int).String", Method, 0},
- {"(*Int).Sub", Method, 0},
- {"(*Int).Text", Method, 6},
- {"(*Int).TrailingZeroBits", Method, 13},
- {"(*Int).Uint64", Method, 1},
- {"(*Int).UnmarshalJSON", Method, 1},
- {"(*Int).UnmarshalText", Method, 3},
- {"(*Int).Xor", Method, 0},
- {"(*Rat).Abs", Method, 0},
- {"(*Rat).Add", Method, 0},
- {"(*Rat).Cmp", Method, 0},
- {"(*Rat).Denom", Method, 0},
- {"(*Rat).Float32", Method, 4},
- {"(*Rat).Float64", Method, 1},
- {"(*Rat).FloatPrec", Method, 22},
- {"(*Rat).FloatString", Method, 0},
- {"(*Rat).GobDecode", Method, 0},
- {"(*Rat).GobEncode", Method, 0},
- {"(*Rat).Inv", Method, 0},
- {"(*Rat).IsInt", Method, 0},
- {"(*Rat).MarshalText", Method, 3},
- {"(*Rat).Mul", Method, 0},
- {"(*Rat).Neg", Method, 0},
- {"(*Rat).Num", Method, 0},
- {"(*Rat).Quo", Method, 0},
- {"(*Rat).RatString", Method, 0},
- {"(*Rat).Scan", Method, 0},
- {"(*Rat).Set", Method, 0},
- {"(*Rat).SetFloat64", Method, 1},
- {"(*Rat).SetFrac", Method, 0},
- {"(*Rat).SetFrac64", Method, 0},
- {"(*Rat).SetInt", Method, 0},
- {"(*Rat).SetInt64", Method, 0},
- {"(*Rat).SetString", Method, 0},
- {"(*Rat).SetUint64", Method, 13},
- {"(*Rat).Sign", Method, 0},
- {"(*Rat).String", Method, 0},
- {"(*Rat).Sub", Method, 0},
- {"(*Rat).UnmarshalText", Method, 3},
- {"(Accuracy).String", Method, 5},
- {"(ErrNaN).Error", Method, 5},
- {"(RoundingMode).String", Method, 5},
- {"Above", Const, 5},
- {"Accuracy", Type, 5},
- {"AwayFromZero", Const, 5},
- {"Below", Const, 5},
- {"ErrNaN", Type, 5},
- {"Exact", Const, 5},
- {"Float", Type, 5},
- {"Int", Type, 0},
- {"Jacobi", Func, 5},
- {"MaxBase", Const, 0},
- {"MaxExp", Const, 5},
- {"MaxPrec", Const, 5},
- {"MinExp", Const, 5},
- {"NewFloat", Func, 5},
- {"NewInt", Func, 0},
- {"NewRat", Func, 0},
- {"ParseFloat", Func, 5},
- {"Rat", Type, 0},
- {"RoundingMode", Type, 5},
- {"ToNearestAway", Const, 5},
- {"ToNearestEven", Const, 5},
- {"ToNegativeInf", Const, 5},
- {"ToPositiveInf", Const, 5},
- {"ToZero", Const, 5},
- {"Word", Type, 0},
- },
- "math/bits": {
- {"Add", Func, 12},
- {"Add32", Func, 12},
- {"Add64", Func, 12},
- {"Div", Func, 12},
- {"Div32", Func, 12},
- {"Div64", Func, 12},
- {"LeadingZeros", Func, 9},
- {"LeadingZeros16", Func, 9},
- {"LeadingZeros32", Func, 9},
- {"LeadingZeros64", Func, 9},
- {"LeadingZeros8", Func, 9},
- {"Len", Func, 9},
- {"Len16", Func, 9},
- {"Len32", Func, 9},
- {"Len64", Func, 9},
- {"Len8", Func, 9},
- {"Mul", Func, 12},
- {"Mul32", Func, 12},
- {"Mul64", Func, 12},
- {"OnesCount", Func, 9},
- {"OnesCount16", Func, 9},
- {"OnesCount32", Func, 9},
- {"OnesCount64", Func, 9},
- {"OnesCount8", Func, 9},
- {"Rem", Func, 14},
- {"Rem32", Func, 14},
- {"Rem64", Func, 14},
- {"Reverse", Func, 9},
- {"Reverse16", Func, 9},
- {"Reverse32", Func, 9},
- {"Reverse64", Func, 9},
- {"Reverse8", Func, 9},
- {"ReverseBytes", Func, 9},
- {"ReverseBytes16", Func, 9},
- {"ReverseBytes32", Func, 9},
- {"ReverseBytes64", Func, 9},
- {"RotateLeft", Func, 9},
- {"RotateLeft16", Func, 9},
- {"RotateLeft32", Func, 9},
- {"RotateLeft64", Func, 9},
- {"RotateLeft8", Func, 9},
- {"Sub", Func, 12},
- {"Sub32", Func, 12},
- {"Sub64", Func, 12},
- {"TrailingZeros", Func, 9},
- {"TrailingZeros16", Func, 9},
- {"TrailingZeros32", Func, 9},
- {"TrailingZeros64", Func, 9},
- {"TrailingZeros8", Func, 9},
- {"UintSize", Const, 9},
- },
- "math/cmplx": {
- {"Abs", Func, 0},
- {"Acos", Func, 0},
- {"Acosh", Func, 0},
- {"Asin", Func, 0},
- {"Asinh", Func, 0},
- {"Atan", Func, 0},
- {"Atanh", Func, 0},
- {"Conj", Func, 0},
- {"Cos", Func, 0},
- {"Cosh", Func, 0},
- {"Cot", Func, 0},
- {"Exp", Func, 0},
- {"Inf", Func, 0},
- {"IsInf", Func, 0},
- {"IsNaN", Func, 0},
- {"Log", Func, 0},
- {"Log10", Func, 0},
- {"NaN", Func, 0},
- {"Phase", Func, 0},
- {"Polar", Func, 0},
- {"Pow", Func, 0},
- {"Rect", Func, 0},
- {"Sin", Func, 0},
- {"Sinh", Func, 0},
- {"Sqrt", Func, 0},
- {"Tan", Func, 0},
- {"Tanh", Func, 0},
- },
- "math/rand": {
- {"(*Rand).ExpFloat64", Method, 0},
- {"(*Rand).Float32", Method, 0},
- {"(*Rand).Float64", Method, 0},
- {"(*Rand).Int", Method, 0},
- {"(*Rand).Int31", Method, 0},
- {"(*Rand).Int31n", Method, 0},
- {"(*Rand).Int63", Method, 0},
- {"(*Rand).Int63n", Method, 0},
- {"(*Rand).Intn", Method, 0},
- {"(*Rand).NormFloat64", Method, 0},
- {"(*Rand).Perm", Method, 0},
- {"(*Rand).Read", Method, 6},
- {"(*Rand).Seed", Method, 0},
- {"(*Rand).Shuffle", Method, 10},
- {"(*Rand).Uint32", Method, 0},
- {"(*Rand).Uint64", Method, 8},
- {"(*Zipf).Uint64", Method, 0},
- {"ExpFloat64", Func, 0},
- {"Float32", Func, 0},
- {"Float64", Func, 0},
- {"Int", Func, 0},
- {"Int31", Func, 0},
- {"Int31n", Func, 0},
- {"Int63", Func, 0},
- {"Int63n", Func, 0},
- {"Intn", Func, 0},
- {"New", Func, 0},
- {"NewSource", Func, 0},
- {"NewZipf", Func, 0},
- {"NormFloat64", Func, 0},
- {"Perm", Func, 0},
- {"Rand", Type, 0},
- {"Read", Func, 6},
- {"Seed", Func, 0},
- {"Shuffle", Func, 10},
- {"Source", Type, 0},
- {"Source64", Type, 8},
- {"Uint32", Func, 0},
- {"Uint64", Func, 8},
- {"Zipf", Type, 0},
- },
- "math/rand/v2": {
- {"(*ChaCha8).MarshalBinary", Method, 22},
- {"(*ChaCha8).Read", Method, 23},
- {"(*ChaCha8).Seed", Method, 22},
- {"(*ChaCha8).Uint64", Method, 22},
- {"(*ChaCha8).UnmarshalBinary", Method, 22},
- {"(*PCG).MarshalBinary", Method, 22},
- {"(*PCG).Seed", Method, 22},
- {"(*PCG).Uint64", Method, 22},
- {"(*PCG).UnmarshalBinary", Method, 22},
- {"(*Rand).ExpFloat64", Method, 22},
- {"(*Rand).Float32", Method, 22},
- {"(*Rand).Float64", Method, 22},
- {"(*Rand).Int", Method, 22},
- {"(*Rand).Int32", Method, 22},
- {"(*Rand).Int32N", Method, 22},
- {"(*Rand).Int64", Method, 22},
- {"(*Rand).Int64N", Method, 22},
- {"(*Rand).IntN", Method, 22},
- {"(*Rand).NormFloat64", Method, 22},
- {"(*Rand).Perm", Method, 22},
- {"(*Rand).Shuffle", Method, 22},
- {"(*Rand).Uint", Method, 23},
- {"(*Rand).Uint32", Method, 22},
- {"(*Rand).Uint32N", Method, 22},
- {"(*Rand).Uint64", Method, 22},
- {"(*Rand).Uint64N", Method, 22},
- {"(*Rand).UintN", Method, 22},
- {"(*Zipf).Uint64", Method, 22},
- {"ChaCha8", Type, 22},
- {"ExpFloat64", Func, 22},
- {"Float32", Func, 22},
- {"Float64", Func, 22},
- {"Int", Func, 22},
- {"Int32", Func, 22},
- {"Int32N", Func, 22},
- {"Int64", Func, 22},
- {"Int64N", Func, 22},
- {"IntN", Func, 22},
- {"N", Func, 22},
- {"New", Func, 22},
- {"NewChaCha8", Func, 22},
- {"NewPCG", Func, 22},
- {"NewZipf", Func, 22},
- {"NormFloat64", Func, 22},
- {"PCG", Type, 22},
- {"Perm", Func, 22},
- {"Rand", Type, 22},
- {"Shuffle", Func, 22},
- {"Source", Type, 22},
- {"Uint", Func, 23},
- {"Uint32", Func, 22},
- {"Uint32N", Func, 22},
- {"Uint64", Func, 22},
- {"Uint64N", Func, 22},
- {"UintN", Func, 22},
- {"Zipf", Type, 22},
- },
- "mime": {
- {"(*WordDecoder).Decode", Method, 5},
- {"(*WordDecoder).DecodeHeader", Method, 5},
- {"(WordEncoder).Encode", Method, 5},
- {"AddExtensionType", Func, 0},
- {"BEncoding", Const, 5},
- {"ErrInvalidMediaParameter", Var, 9},
- {"ExtensionsByType", Func, 5},
- {"FormatMediaType", Func, 0},
- {"ParseMediaType", Func, 0},
- {"QEncoding", Const, 5},
- {"TypeByExtension", Func, 0},
- {"WordDecoder", Type, 5},
- {"WordDecoder.CharsetReader", Field, 5},
- {"WordEncoder", Type, 5},
- },
- "mime/multipart": {
- {"(*FileHeader).Open", Method, 0},
- {"(*Form).RemoveAll", Method, 0},
- {"(*Part).Close", Method, 0},
- {"(*Part).FileName", Method, 0},
- {"(*Part).FormName", Method, 0},
- {"(*Part).Read", Method, 0},
- {"(*Reader).NextPart", Method, 0},
- {"(*Reader).NextRawPart", Method, 14},
- {"(*Reader).ReadForm", Method, 0},
- {"(*Writer).Boundary", Method, 0},
- {"(*Writer).Close", Method, 0},
- {"(*Writer).CreateFormField", Method, 0},
- {"(*Writer).CreateFormFile", Method, 0},
- {"(*Writer).CreatePart", Method, 0},
- {"(*Writer).FormDataContentType", Method, 0},
- {"(*Writer).SetBoundary", Method, 1},
- {"(*Writer).WriteField", Method, 0},
- {"ErrMessageTooLarge", Var, 9},
- {"File", Type, 0},
- {"FileHeader", Type, 0},
- {"FileHeader.Filename", Field, 0},
- {"FileHeader.Header", Field, 0},
- {"FileHeader.Size", Field, 9},
- {"Form", Type, 0},
- {"Form.File", Field, 0},
- {"Form.Value", Field, 0},
- {"NewReader", Func, 0},
- {"NewWriter", Func, 0},
- {"Part", Type, 0},
- {"Part.Header", Field, 0},
- {"Reader", Type, 0},
- {"Writer", Type, 0},
- },
- "mime/quotedprintable": {
- {"(*Reader).Read", Method, 5},
- {"(*Writer).Close", Method, 5},
- {"(*Writer).Write", Method, 5},
- {"NewReader", Func, 5},
- {"NewWriter", Func, 5},
- {"Reader", Type, 5},
- {"Writer", Type, 5},
- {"Writer.Binary", Field, 5},
- },
- "net": {
- {"(*AddrError).Error", Method, 0},
- {"(*AddrError).Temporary", Method, 0},
- {"(*AddrError).Timeout", Method, 0},
- {"(*Buffers).Read", Method, 8},
- {"(*Buffers).WriteTo", Method, 8},
- {"(*DNSConfigError).Error", Method, 0},
- {"(*DNSConfigError).Temporary", Method, 0},
- {"(*DNSConfigError).Timeout", Method, 0},
- {"(*DNSConfigError).Unwrap", Method, 13},
- {"(*DNSError).Error", Method, 0},
- {"(*DNSError).Temporary", Method, 0},
- {"(*DNSError).Timeout", Method, 0},
- {"(*DNSError).Unwrap", Method, 23},
- {"(*Dialer).Dial", Method, 1},
- {"(*Dialer).DialContext", Method, 7},
- {"(*Dialer).MultipathTCP", Method, 21},
- {"(*Dialer).SetMultipathTCP", Method, 21},
- {"(*IP).UnmarshalText", Method, 2},
- {"(*IPAddr).Network", Method, 0},
- {"(*IPAddr).String", Method, 0},
- {"(*IPConn).Close", Method, 0},
- {"(*IPConn).File", Method, 0},
- {"(*IPConn).LocalAddr", Method, 0},
- {"(*IPConn).Read", Method, 0},
- {"(*IPConn).ReadFrom", Method, 0},
- {"(*IPConn).ReadFromIP", Method, 0},
- {"(*IPConn).ReadMsgIP", Method, 1},
- {"(*IPConn).RemoteAddr", Method, 0},
- {"(*IPConn).SetDeadline", Method, 0},
- {"(*IPConn).SetReadBuffer", Method, 0},
- {"(*IPConn).SetReadDeadline", Method, 0},
- {"(*IPConn).SetWriteBuffer", Method, 0},
- {"(*IPConn).SetWriteDeadline", Method, 0},
- {"(*IPConn).SyscallConn", Method, 9},
- {"(*IPConn).Write", Method, 0},
- {"(*IPConn).WriteMsgIP", Method, 1},
- {"(*IPConn).WriteTo", Method, 0},
- {"(*IPConn).WriteToIP", Method, 0},
- {"(*IPNet).Contains", Method, 0},
- {"(*IPNet).Network", Method, 0},
- {"(*IPNet).String", Method, 0},
- {"(*Interface).Addrs", Method, 0},
- {"(*Interface).MulticastAddrs", Method, 0},
- {"(*ListenConfig).Listen", Method, 11},
- {"(*ListenConfig).ListenPacket", Method, 11},
- {"(*ListenConfig).MultipathTCP", Method, 21},
- {"(*ListenConfig).SetMultipathTCP", Method, 21},
- {"(*OpError).Error", Method, 0},
- {"(*OpError).Temporary", Method, 0},
- {"(*OpError).Timeout", Method, 0},
- {"(*OpError).Unwrap", Method, 13},
- {"(*ParseError).Error", Method, 0},
- {"(*ParseError).Temporary", Method, 17},
- {"(*ParseError).Timeout", Method, 17},
- {"(*Resolver).LookupAddr", Method, 8},
- {"(*Resolver).LookupCNAME", Method, 8},
- {"(*Resolver).LookupHost", Method, 8},
- {"(*Resolver).LookupIP", Method, 15},
- {"(*Resolver).LookupIPAddr", Method, 8},
- {"(*Resolver).LookupMX", Method, 8},
- {"(*Resolver).LookupNS", Method, 8},
- {"(*Resolver).LookupNetIP", Method, 18},
- {"(*Resolver).LookupPort", Method, 8},
- {"(*Resolver).LookupSRV", Method, 8},
- {"(*Resolver).LookupTXT", Method, 8},
- {"(*TCPAddr).AddrPort", Method, 18},
- {"(*TCPAddr).Network", Method, 0},
- {"(*TCPAddr).String", Method, 0},
- {"(*TCPConn).Close", Method, 0},
- {"(*TCPConn).CloseRead", Method, 0},
- {"(*TCPConn).CloseWrite", Method, 0},
- {"(*TCPConn).File", Method, 0},
- {"(*TCPConn).LocalAddr", Method, 0},
- {"(*TCPConn).MultipathTCP", Method, 21},
- {"(*TCPConn).Read", Method, 0},
- {"(*TCPConn).ReadFrom", Method, 0},
- {"(*TCPConn).RemoteAddr", Method, 0},
- {"(*TCPConn).SetDeadline", Method, 0},
- {"(*TCPConn).SetKeepAlive", Method, 0},
- {"(*TCPConn).SetKeepAliveConfig", Method, 23},
- {"(*TCPConn).SetKeepAlivePeriod", Method, 2},
- {"(*TCPConn).SetLinger", Method, 0},
- {"(*TCPConn).SetNoDelay", Method, 0},
- {"(*TCPConn).SetReadBuffer", Method, 0},
- {"(*TCPConn).SetReadDeadline", Method, 0},
- {"(*TCPConn).SetWriteBuffer", Method, 0},
- {"(*TCPConn).SetWriteDeadline", Method, 0},
- {"(*TCPConn).SyscallConn", Method, 9},
- {"(*TCPConn).Write", Method, 0},
- {"(*TCPConn).WriteTo", Method, 22},
- {"(*TCPListener).Accept", Method, 0},
- {"(*TCPListener).AcceptTCP", Method, 0},
- {"(*TCPListener).Addr", Method, 0},
- {"(*TCPListener).Close", Method, 0},
- {"(*TCPListener).File", Method, 0},
- {"(*TCPListener).SetDeadline", Method, 0},
- {"(*TCPListener).SyscallConn", Method, 10},
- {"(*UDPAddr).AddrPort", Method, 18},
- {"(*UDPAddr).Network", Method, 0},
- {"(*UDPAddr).String", Method, 0},
- {"(*UDPConn).Close", Method, 0},
- {"(*UDPConn).File", Method, 0},
- {"(*UDPConn).LocalAddr", Method, 0},
- {"(*UDPConn).Read", Method, 0},
- {"(*UDPConn).ReadFrom", Method, 0},
- {"(*UDPConn).ReadFromUDP", Method, 0},
- {"(*UDPConn).ReadFromUDPAddrPort", Method, 18},
- {"(*UDPConn).ReadMsgUDP", Method, 1},
- {"(*UDPConn).ReadMsgUDPAddrPort", Method, 18},
- {"(*UDPConn).RemoteAddr", Method, 0},
- {"(*UDPConn).SetDeadline", Method, 0},
- {"(*UDPConn).SetReadBuffer", Method, 0},
- {"(*UDPConn).SetReadDeadline", Method, 0},
- {"(*UDPConn).SetWriteBuffer", Method, 0},
- {"(*UDPConn).SetWriteDeadline", Method, 0},
- {"(*UDPConn).SyscallConn", Method, 9},
- {"(*UDPConn).Write", Method, 0},
- {"(*UDPConn).WriteMsgUDP", Method, 1},
- {"(*UDPConn).WriteMsgUDPAddrPort", Method, 18},
- {"(*UDPConn).WriteTo", Method, 0},
- {"(*UDPConn).WriteToUDP", Method, 0},
- {"(*UDPConn).WriteToUDPAddrPort", Method, 18},
- {"(*UnixAddr).Network", Method, 0},
- {"(*UnixAddr).String", Method, 0},
- {"(*UnixConn).Close", Method, 0},
- {"(*UnixConn).CloseRead", Method, 1},
- {"(*UnixConn).CloseWrite", Method, 1},
- {"(*UnixConn).File", Method, 0},
- {"(*UnixConn).LocalAddr", Method, 0},
- {"(*UnixConn).Read", Method, 0},
- {"(*UnixConn).ReadFrom", Method, 0},
- {"(*UnixConn).ReadFromUnix", Method, 0},
- {"(*UnixConn).ReadMsgUnix", Method, 0},
- {"(*UnixConn).RemoteAddr", Method, 0},
- {"(*UnixConn).SetDeadline", Method, 0},
- {"(*UnixConn).SetReadBuffer", Method, 0},
- {"(*UnixConn).SetReadDeadline", Method, 0},
- {"(*UnixConn).SetWriteBuffer", Method, 0},
- {"(*UnixConn).SetWriteDeadline", Method, 0},
- {"(*UnixConn).SyscallConn", Method, 9},
- {"(*UnixConn).Write", Method, 0},
- {"(*UnixConn).WriteMsgUnix", Method, 0},
- {"(*UnixConn).WriteTo", Method, 0},
- {"(*UnixConn).WriteToUnix", Method, 0},
- {"(*UnixListener).Accept", Method, 0},
- {"(*UnixListener).AcceptUnix", Method, 0},
- {"(*UnixListener).Addr", Method, 0},
- {"(*UnixListener).Close", Method, 0},
- {"(*UnixListener).File", Method, 0},
- {"(*UnixListener).SetDeadline", Method, 0},
- {"(*UnixListener).SetUnlinkOnClose", Method, 8},
- {"(*UnixListener).SyscallConn", Method, 10},
- {"(Flags).String", Method, 0},
- {"(HardwareAddr).String", Method, 0},
- {"(IP).DefaultMask", Method, 0},
- {"(IP).Equal", Method, 0},
- {"(IP).IsGlobalUnicast", Method, 0},
- {"(IP).IsInterfaceLocalMulticast", Method, 0},
- {"(IP).IsLinkLocalMulticast", Method, 0},
- {"(IP).IsLinkLocalUnicast", Method, 0},
- {"(IP).IsLoopback", Method, 0},
- {"(IP).IsMulticast", Method, 0},
- {"(IP).IsPrivate", Method, 17},
- {"(IP).IsUnspecified", Method, 0},
- {"(IP).MarshalText", Method, 2},
- {"(IP).Mask", Method, 0},
- {"(IP).String", Method, 0},
- {"(IP).To16", Method, 0},
- {"(IP).To4", Method, 0},
- {"(IPMask).Size", Method, 0},
- {"(IPMask).String", Method, 0},
- {"(InvalidAddrError).Error", Method, 0},
- {"(InvalidAddrError).Temporary", Method, 0},
- {"(InvalidAddrError).Timeout", Method, 0},
- {"(UnknownNetworkError).Error", Method, 0},
- {"(UnknownNetworkError).Temporary", Method, 0},
- {"(UnknownNetworkError).Timeout", Method, 0},
- {"Addr", Type, 0},
- {"AddrError", Type, 0},
- {"AddrError.Addr", Field, 0},
- {"AddrError.Err", Field, 0},
- {"Buffers", Type, 8},
- {"CIDRMask", Func, 0},
- {"Conn", Type, 0},
- {"DNSConfigError", Type, 0},
- {"DNSConfigError.Err", Field, 0},
- {"DNSError", Type, 0},
- {"DNSError.Err", Field, 0},
- {"DNSError.IsNotFound", Field, 13},
- {"DNSError.IsTemporary", Field, 6},
- {"DNSError.IsTimeout", Field, 0},
- {"DNSError.Name", Field, 0},
- {"DNSError.Server", Field, 0},
- {"DNSError.UnwrapErr", Field, 23},
- {"DefaultResolver", Var, 8},
- {"Dial", Func, 0},
- {"DialIP", Func, 0},
- {"DialTCP", Func, 0},
- {"DialTimeout", Func, 0},
- {"DialUDP", Func, 0},
- {"DialUnix", Func, 0},
- {"Dialer", Type, 1},
- {"Dialer.Cancel", Field, 6},
- {"Dialer.Control", Field, 11},
- {"Dialer.ControlContext", Field, 20},
- {"Dialer.Deadline", Field, 1},
- {"Dialer.DualStack", Field, 2},
- {"Dialer.FallbackDelay", Field, 5},
- {"Dialer.KeepAlive", Field, 3},
- {"Dialer.KeepAliveConfig", Field, 23},
- {"Dialer.LocalAddr", Field, 1},
- {"Dialer.Resolver", Field, 8},
- {"Dialer.Timeout", Field, 1},
- {"ErrClosed", Var, 16},
- {"ErrWriteToConnected", Var, 0},
- {"Error", Type, 0},
- {"FileConn", Func, 0},
- {"FileListener", Func, 0},
- {"FilePacketConn", Func, 0},
- {"FlagBroadcast", Const, 0},
- {"FlagLoopback", Const, 0},
- {"FlagMulticast", Const, 0},
- {"FlagPointToPoint", Const, 0},
- {"FlagRunning", Const, 20},
- {"FlagUp", Const, 0},
- {"Flags", Type, 0},
- {"HardwareAddr", Type, 0},
- {"IP", Type, 0},
- {"IPAddr", Type, 0},
- {"IPAddr.IP", Field, 0},
- {"IPAddr.Zone", Field, 1},
- {"IPConn", Type, 0},
- {"IPMask", Type, 0},
- {"IPNet", Type, 0},
- {"IPNet.IP", Field, 0},
- {"IPNet.Mask", Field, 0},
- {"IPv4", Func, 0},
- {"IPv4Mask", Func, 0},
- {"IPv4allrouter", Var, 0},
- {"IPv4allsys", Var, 0},
- {"IPv4bcast", Var, 0},
- {"IPv4len", Const, 0},
- {"IPv4zero", Var, 0},
- {"IPv6interfacelocalallnodes", Var, 0},
- {"IPv6len", Const, 0},
- {"IPv6linklocalallnodes", Var, 0},
- {"IPv6linklocalallrouters", Var, 0},
- {"IPv6loopback", Var, 0},
- {"IPv6unspecified", Var, 0},
- {"IPv6zero", Var, 0},
- {"Interface", Type, 0},
- {"Interface.Flags", Field, 0},
- {"Interface.HardwareAddr", Field, 0},
- {"Interface.Index", Field, 0},
- {"Interface.MTU", Field, 0},
- {"Interface.Name", Field, 0},
- {"InterfaceAddrs", Func, 0},
- {"InterfaceByIndex", Func, 0},
- {"InterfaceByName", Func, 0},
- {"Interfaces", Func, 0},
- {"InvalidAddrError", Type, 0},
- {"JoinHostPort", Func, 0},
- {"KeepAliveConfig", Type, 23},
- {"KeepAliveConfig.Count", Field, 23},
- {"KeepAliveConfig.Enable", Field, 23},
- {"KeepAliveConfig.Idle", Field, 23},
- {"KeepAliveConfig.Interval", Field, 23},
- {"Listen", Func, 0},
- {"ListenConfig", Type, 11},
- {"ListenConfig.Control", Field, 11},
- {"ListenConfig.KeepAlive", Field, 13},
- {"ListenConfig.KeepAliveConfig", Field, 23},
- {"ListenIP", Func, 0},
- {"ListenMulticastUDP", Func, 0},
- {"ListenPacket", Func, 0},
- {"ListenTCP", Func, 0},
- {"ListenUDP", Func, 0},
- {"ListenUnix", Func, 0},
- {"ListenUnixgram", Func, 0},
- {"Listener", Type, 0},
- {"LookupAddr", Func, 0},
- {"LookupCNAME", Func, 0},
- {"LookupHost", Func, 0},
- {"LookupIP", Func, 0},
- {"LookupMX", Func, 0},
- {"LookupNS", Func, 1},
- {"LookupPort", Func, 0},
- {"LookupSRV", Func, 0},
- {"LookupTXT", Func, 0},
- {"MX", Type, 0},
- {"MX.Host", Field, 0},
- {"MX.Pref", Field, 0},
- {"NS", Type, 1},
- {"NS.Host", Field, 1},
- {"OpError", Type, 0},
- {"OpError.Addr", Field, 0},
- {"OpError.Err", Field, 0},
- {"OpError.Net", Field, 0},
- {"OpError.Op", Field, 0},
- {"OpError.Source", Field, 5},
- {"PacketConn", Type, 0},
- {"ParseCIDR", Func, 0},
- {"ParseError", Type, 0},
- {"ParseError.Text", Field, 0},
- {"ParseError.Type", Field, 0},
- {"ParseIP", Func, 0},
- {"ParseMAC", Func, 0},
- {"Pipe", Func, 0},
- {"ResolveIPAddr", Func, 0},
- {"ResolveTCPAddr", Func, 0},
- {"ResolveUDPAddr", Func, 0},
- {"ResolveUnixAddr", Func, 0},
- {"Resolver", Type, 8},
- {"Resolver.Dial", Field, 9},
- {"Resolver.PreferGo", Field, 8},
- {"Resolver.StrictErrors", Field, 9},
- {"SRV", Type, 0},
- {"SRV.Port", Field, 0},
- {"SRV.Priority", Field, 0},
- {"SRV.Target", Field, 0},
- {"SRV.Weight", Field, 0},
- {"SplitHostPort", Func, 0},
- {"TCPAddr", Type, 0},
- {"TCPAddr.IP", Field, 0},
- {"TCPAddr.Port", Field, 0},
- {"TCPAddr.Zone", Field, 1},
- {"TCPAddrFromAddrPort", Func, 18},
- {"TCPConn", Type, 0},
- {"TCPListener", Type, 0},
- {"UDPAddr", Type, 0},
- {"UDPAddr.IP", Field, 0},
- {"UDPAddr.Port", Field, 0},
- {"UDPAddr.Zone", Field, 1},
- {"UDPAddrFromAddrPort", Func, 18},
- {"UDPConn", Type, 0},
- {"UnixAddr", Type, 0},
- {"UnixAddr.Name", Field, 0},
- {"UnixAddr.Net", Field, 0},
- {"UnixConn", Type, 0},
- {"UnixListener", Type, 0},
- {"UnknownNetworkError", Type, 0},
- },
- "net/http": {
- {"(*Client).CloseIdleConnections", Method, 12},
- {"(*Client).Do", Method, 0},
- {"(*Client).Get", Method, 0},
- {"(*Client).Head", Method, 0},
- {"(*Client).Post", Method, 0},
- {"(*Client).PostForm", Method, 0},
- {"(*Cookie).String", Method, 0},
- {"(*Cookie).Valid", Method, 18},
- {"(*MaxBytesError).Error", Method, 19},
- {"(*ProtocolError).Error", Method, 0},
- {"(*ProtocolError).Is", Method, 21},
- {"(*Request).AddCookie", Method, 0},
- {"(*Request).BasicAuth", Method, 4},
- {"(*Request).Clone", Method, 13},
- {"(*Request).Context", Method, 7},
- {"(*Request).Cookie", Method, 0},
- {"(*Request).Cookies", Method, 0},
- {"(*Request).CookiesNamed", Method, 23},
- {"(*Request).FormFile", Method, 0},
- {"(*Request).FormValue", Method, 0},
- {"(*Request).MultipartReader", Method, 0},
- {"(*Request).ParseForm", Method, 0},
- {"(*Request).ParseMultipartForm", Method, 0},
- {"(*Request).PathValue", Method, 22},
- {"(*Request).PostFormValue", Method, 1},
- {"(*Request).ProtoAtLeast", Method, 0},
- {"(*Request).Referer", Method, 0},
- {"(*Request).SetBasicAuth", Method, 0},
- {"(*Request).SetPathValue", Method, 22},
- {"(*Request).UserAgent", Method, 0},
- {"(*Request).WithContext", Method, 7},
- {"(*Request).Write", Method, 0},
- {"(*Request).WriteProxy", Method, 0},
- {"(*Response).Cookies", Method, 0},
- {"(*Response).Location", Method, 0},
- {"(*Response).ProtoAtLeast", Method, 0},
- {"(*Response).Write", Method, 0},
- {"(*ResponseController).EnableFullDuplex", Method, 21},
- {"(*ResponseController).Flush", Method, 20},
- {"(*ResponseController).Hijack", Method, 20},
- {"(*ResponseController).SetReadDeadline", Method, 20},
- {"(*ResponseController).SetWriteDeadline", Method, 20},
- {"(*ServeMux).Handle", Method, 0},
- {"(*ServeMux).HandleFunc", Method, 0},
- {"(*ServeMux).Handler", Method, 1},
- {"(*ServeMux).ServeHTTP", Method, 0},
- {"(*Server).Close", Method, 8},
- {"(*Server).ListenAndServe", Method, 0},
- {"(*Server).ListenAndServeTLS", Method, 0},
- {"(*Server).RegisterOnShutdown", Method, 9},
- {"(*Server).Serve", Method, 0},
- {"(*Server).ServeTLS", Method, 9},
- {"(*Server).SetKeepAlivesEnabled", Method, 3},
- {"(*Server).Shutdown", Method, 8},
- {"(*Transport).CancelRequest", Method, 1},
- {"(*Transport).Clone", Method, 13},
- {"(*Transport).CloseIdleConnections", Method, 0},
- {"(*Transport).RegisterProtocol", Method, 0},
- {"(*Transport).RoundTrip", Method, 0},
- {"(ConnState).String", Method, 3},
- {"(Dir).Open", Method, 0},
- {"(HandlerFunc).ServeHTTP", Method, 0},
- {"(Header).Add", Method, 0},
- {"(Header).Clone", Method, 13},
- {"(Header).Del", Method, 0},
- {"(Header).Get", Method, 0},
- {"(Header).Set", Method, 0},
- {"(Header).Values", Method, 14},
- {"(Header).Write", Method, 0},
- {"(Header).WriteSubset", Method, 0},
- {"AllowQuerySemicolons", Func, 17},
- {"CanonicalHeaderKey", Func, 0},
- {"Client", Type, 0},
- {"Client.CheckRedirect", Field, 0},
- {"Client.Jar", Field, 0},
- {"Client.Timeout", Field, 3},
- {"Client.Transport", Field, 0},
- {"CloseNotifier", Type, 1},
- {"ConnState", Type, 3},
- {"Cookie", Type, 0},
- {"Cookie.Domain", Field, 0},
- {"Cookie.Expires", Field, 0},
- {"Cookie.HttpOnly", Field, 0},
- {"Cookie.MaxAge", Field, 0},
- {"Cookie.Name", Field, 0},
- {"Cookie.Partitioned", Field, 23},
- {"Cookie.Path", Field, 0},
- {"Cookie.Quoted", Field, 23},
- {"Cookie.Raw", Field, 0},
- {"Cookie.RawExpires", Field, 0},
- {"Cookie.SameSite", Field, 11},
- {"Cookie.Secure", Field, 0},
- {"Cookie.Unparsed", Field, 0},
- {"Cookie.Value", Field, 0},
- {"CookieJar", Type, 0},
- {"DefaultClient", Var, 0},
- {"DefaultMaxHeaderBytes", Const, 0},
- {"DefaultMaxIdleConnsPerHost", Const, 0},
- {"DefaultServeMux", Var, 0},
- {"DefaultTransport", Var, 0},
- {"DetectContentType", Func, 0},
- {"Dir", Type, 0},
- {"ErrAbortHandler", Var, 8},
- {"ErrBodyNotAllowed", Var, 0},
- {"ErrBodyReadAfterClose", Var, 0},
- {"ErrContentLength", Var, 0},
- {"ErrHandlerTimeout", Var, 0},
- {"ErrHeaderTooLong", Var, 0},
- {"ErrHijacked", Var, 0},
- {"ErrLineTooLong", Var, 0},
- {"ErrMissingBoundary", Var, 0},
- {"ErrMissingContentLength", Var, 0},
- {"ErrMissingFile", Var, 0},
- {"ErrNoCookie", Var, 0},
- {"ErrNoLocation", Var, 0},
- {"ErrNotMultipart", Var, 0},
- {"ErrNotSupported", Var, 0},
- {"ErrSchemeMismatch", Var, 21},
- {"ErrServerClosed", Var, 8},
- {"ErrShortBody", Var, 0},
- {"ErrSkipAltProtocol", Var, 6},
- {"ErrUnexpectedTrailer", Var, 0},
- {"ErrUseLastResponse", Var, 7},
- {"ErrWriteAfterFlush", Var, 0},
- {"Error", Func, 0},
- {"FS", Func, 16},
- {"File", Type, 0},
- {"FileServer", Func, 0},
- {"FileServerFS", Func, 22},
- {"FileSystem", Type, 0},
- {"Flusher", Type, 0},
- {"Get", Func, 0},
- {"Handle", Func, 0},
- {"HandleFunc", Func, 0},
- {"Handler", Type, 0},
- {"HandlerFunc", Type, 0},
- {"Head", Func, 0},
- {"Header", Type, 0},
- {"Hijacker", Type, 0},
- {"ListenAndServe", Func, 0},
- {"ListenAndServeTLS", Func, 0},
- {"LocalAddrContextKey", Var, 7},
- {"MaxBytesError", Type, 19},
- {"MaxBytesError.Limit", Field, 19},
- {"MaxBytesHandler", Func, 18},
- {"MaxBytesReader", Func, 0},
- {"MethodConnect", Const, 6},
- {"MethodDelete", Const, 6},
- {"MethodGet", Const, 6},
- {"MethodHead", Const, 6},
- {"MethodOptions", Const, 6},
- {"MethodPatch", Const, 6},
- {"MethodPost", Const, 6},
- {"MethodPut", Const, 6},
- {"MethodTrace", Const, 6},
- {"NewFileTransport", Func, 0},
- {"NewFileTransportFS", Func, 22},
- {"NewRequest", Func, 0},
- {"NewRequestWithContext", Func, 13},
- {"NewResponseController", Func, 20},
- {"NewServeMux", Func, 0},
- {"NoBody", Var, 8},
- {"NotFound", Func, 0},
- {"NotFoundHandler", Func, 0},
- {"ParseCookie", Func, 23},
- {"ParseHTTPVersion", Func, 0},
- {"ParseSetCookie", Func, 23},
- {"ParseTime", Func, 1},
- {"Post", Func, 0},
- {"PostForm", Func, 0},
- {"ProtocolError", Type, 0},
- {"ProtocolError.ErrorString", Field, 0},
- {"ProxyFromEnvironment", Func, 0},
- {"ProxyURL", Func, 0},
- {"PushOptions", Type, 8},
- {"PushOptions.Header", Field, 8},
- {"PushOptions.Method", Field, 8},
- {"Pusher", Type, 8},
- {"ReadRequest", Func, 0},
- {"ReadResponse", Func, 0},
- {"Redirect", Func, 0},
- {"RedirectHandler", Func, 0},
- {"Request", Type, 0},
- {"Request.Body", Field, 0},
- {"Request.Cancel", Field, 5},
- {"Request.Close", Field, 0},
- {"Request.ContentLength", Field, 0},
- {"Request.Form", Field, 0},
- {"Request.GetBody", Field, 8},
- {"Request.Header", Field, 0},
- {"Request.Host", Field, 0},
- {"Request.Method", Field, 0},
- {"Request.MultipartForm", Field, 0},
- {"Request.Pattern", Field, 23},
- {"Request.PostForm", Field, 1},
- {"Request.Proto", Field, 0},
- {"Request.ProtoMajor", Field, 0},
- {"Request.ProtoMinor", Field, 0},
- {"Request.RemoteAddr", Field, 0},
- {"Request.RequestURI", Field, 0},
- {"Request.Response", Field, 7},
- {"Request.TLS", Field, 0},
- {"Request.Trailer", Field, 0},
- {"Request.TransferEncoding", Field, 0},
- {"Request.URL", Field, 0},
- {"Response", Type, 0},
- {"Response.Body", Field, 0},
- {"Response.Close", Field, 0},
- {"Response.ContentLength", Field, 0},
- {"Response.Header", Field, 0},
- {"Response.Proto", Field, 0},
- {"Response.ProtoMajor", Field, 0},
- {"Response.ProtoMinor", Field, 0},
- {"Response.Request", Field, 0},
- {"Response.Status", Field, 0},
- {"Response.StatusCode", Field, 0},
- {"Response.TLS", Field, 3},
- {"Response.Trailer", Field, 0},
- {"Response.TransferEncoding", Field, 0},
- {"Response.Uncompressed", Field, 7},
- {"ResponseController", Type, 20},
- {"ResponseWriter", Type, 0},
- {"RoundTripper", Type, 0},
- {"SameSite", Type, 11},
- {"SameSiteDefaultMode", Const, 11},
- {"SameSiteLaxMode", Const, 11},
- {"SameSiteNoneMode", Const, 13},
- {"SameSiteStrictMode", Const, 11},
- {"Serve", Func, 0},
- {"ServeContent", Func, 0},
- {"ServeFile", Func, 0},
- {"ServeFileFS", Func, 22},
- {"ServeMux", Type, 0},
- {"ServeTLS", Func, 9},
- {"Server", Type, 0},
- {"Server.Addr", Field, 0},
- {"Server.BaseContext", Field, 13},
- {"Server.ConnContext", Field, 13},
- {"Server.ConnState", Field, 3},
- {"Server.DisableGeneralOptionsHandler", Field, 20},
- {"Server.ErrorLog", Field, 3},
- {"Server.Handler", Field, 0},
- {"Server.IdleTimeout", Field, 8},
- {"Server.MaxHeaderBytes", Field, 0},
- {"Server.ReadHeaderTimeout", Field, 8},
- {"Server.ReadTimeout", Field, 0},
- {"Server.TLSConfig", Field, 0},
- {"Server.TLSNextProto", Field, 1},
- {"Server.WriteTimeout", Field, 0},
- {"ServerContextKey", Var, 7},
- {"SetCookie", Func, 0},
- {"StateActive", Const, 3},
- {"StateClosed", Const, 3},
- {"StateHijacked", Const, 3},
- {"StateIdle", Const, 3},
- {"StateNew", Const, 3},
- {"StatusAccepted", Const, 0},
- {"StatusAlreadyReported", Const, 7},
- {"StatusBadGateway", Const, 0},
- {"StatusBadRequest", Const, 0},
- {"StatusConflict", Const, 0},
- {"StatusContinue", Const, 0},
- {"StatusCreated", Const, 0},
- {"StatusEarlyHints", Const, 13},
- {"StatusExpectationFailed", Const, 0},
- {"StatusFailedDependency", Const, 7},
- {"StatusForbidden", Const, 0},
- {"StatusFound", Const, 0},
- {"StatusGatewayTimeout", Const, 0},
- {"StatusGone", Const, 0},
- {"StatusHTTPVersionNotSupported", Const, 0},
- {"StatusIMUsed", Const, 7},
- {"StatusInsufficientStorage", Const, 7},
- {"StatusInternalServerError", Const, 0},
- {"StatusLengthRequired", Const, 0},
- {"StatusLocked", Const, 7},
- {"StatusLoopDetected", Const, 7},
- {"StatusMethodNotAllowed", Const, 0},
- {"StatusMisdirectedRequest", Const, 11},
- {"StatusMovedPermanently", Const, 0},
- {"StatusMultiStatus", Const, 7},
- {"StatusMultipleChoices", Const, 0},
- {"StatusNetworkAuthenticationRequired", Const, 6},
- {"StatusNoContent", Const, 0},
- {"StatusNonAuthoritativeInfo", Const, 0},
- {"StatusNotAcceptable", Const, 0},
- {"StatusNotExtended", Const, 7},
- {"StatusNotFound", Const, 0},
- {"StatusNotImplemented", Const, 0},
- {"StatusNotModified", Const, 0},
- {"StatusOK", Const, 0},
- {"StatusPartialContent", Const, 0},
- {"StatusPaymentRequired", Const, 0},
- {"StatusPermanentRedirect", Const, 7},
- {"StatusPreconditionFailed", Const, 0},
- {"StatusPreconditionRequired", Const, 6},
- {"StatusProcessing", Const, 7},
- {"StatusProxyAuthRequired", Const, 0},
- {"StatusRequestEntityTooLarge", Const, 0},
- {"StatusRequestHeaderFieldsTooLarge", Const, 6},
- {"StatusRequestTimeout", Const, 0},
- {"StatusRequestURITooLong", Const, 0},
- {"StatusRequestedRangeNotSatisfiable", Const, 0},
- {"StatusResetContent", Const, 0},
- {"StatusSeeOther", Const, 0},
- {"StatusServiceUnavailable", Const, 0},
- {"StatusSwitchingProtocols", Const, 0},
- {"StatusTeapot", Const, 0},
- {"StatusTemporaryRedirect", Const, 0},
- {"StatusText", Func, 0},
- {"StatusTooEarly", Const, 12},
- {"StatusTooManyRequests", Const, 6},
- {"StatusUnauthorized", Const, 0},
- {"StatusUnavailableForLegalReasons", Const, 6},
- {"StatusUnprocessableEntity", Const, 7},
- {"StatusUnsupportedMediaType", Const, 0},
- {"StatusUpgradeRequired", Const, 7},
- {"StatusUseProxy", Const, 0},
- {"StatusVariantAlsoNegotiates", Const, 7},
- {"StripPrefix", Func, 0},
- {"TimeFormat", Const, 0},
- {"TimeoutHandler", Func, 0},
- {"TrailerPrefix", Const, 8},
- {"Transport", Type, 0},
- {"Transport.Dial", Field, 0},
- {"Transport.DialContext", Field, 7},
- {"Transport.DialTLS", Field, 4},
- {"Transport.DialTLSContext", Field, 14},
- {"Transport.DisableCompression", Field, 0},
- {"Transport.DisableKeepAlives", Field, 0},
- {"Transport.ExpectContinueTimeout", Field, 6},
- {"Transport.ForceAttemptHTTP2", Field, 13},
- {"Transport.GetProxyConnectHeader", Field, 16},
- {"Transport.IdleConnTimeout", Field, 7},
- {"Transport.MaxConnsPerHost", Field, 11},
- {"Transport.MaxIdleConns", Field, 7},
- {"Transport.MaxIdleConnsPerHost", Field, 0},
- {"Transport.MaxResponseHeaderBytes", Field, 7},
- {"Transport.OnProxyConnectResponse", Field, 20},
- {"Transport.Proxy", Field, 0},
- {"Transport.ProxyConnectHeader", Field, 8},
- {"Transport.ReadBufferSize", Field, 13},
- {"Transport.ResponseHeaderTimeout", Field, 1},
- {"Transport.TLSClientConfig", Field, 0},
- {"Transport.TLSHandshakeTimeout", Field, 3},
- {"Transport.TLSNextProto", Field, 6},
- {"Transport.WriteBufferSize", Field, 13},
- },
- "net/http/cgi": {
- {"(*Handler).ServeHTTP", Method, 0},
- {"Handler", Type, 0},
- {"Handler.Args", Field, 0},
- {"Handler.Dir", Field, 0},
- {"Handler.Env", Field, 0},
- {"Handler.InheritEnv", Field, 0},
- {"Handler.Logger", Field, 0},
- {"Handler.Path", Field, 0},
- {"Handler.PathLocationHandler", Field, 0},
- {"Handler.Root", Field, 0},
- {"Handler.Stderr", Field, 7},
- {"Request", Func, 0},
- {"RequestFromMap", Func, 0},
- {"Serve", Func, 0},
- },
- "net/http/cookiejar": {
- {"(*Jar).Cookies", Method, 1},
- {"(*Jar).SetCookies", Method, 1},
- {"Jar", Type, 1},
- {"New", Func, 1},
- {"Options", Type, 1},
- {"Options.PublicSuffixList", Field, 1},
- {"PublicSuffixList", Type, 1},
- },
- "net/http/fcgi": {
- {"ErrConnClosed", Var, 5},
- {"ErrRequestAborted", Var, 5},
- {"ProcessEnv", Func, 9},
- {"Serve", Func, 0},
- },
- "net/http/httptest": {
- {"(*ResponseRecorder).Flush", Method, 0},
- {"(*ResponseRecorder).Header", Method, 0},
- {"(*ResponseRecorder).Result", Method, 7},
- {"(*ResponseRecorder).Write", Method, 0},
- {"(*ResponseRecorder).WriteHeader", Method, 0},
- {"(*ResponseRecorder).WriteString", Method, 6},
- {"(*Server).Certificate", Method, 9},
- {"(*Server).Client", Method, 9},
- {"(*Server).Close", Method, 0},
- {"(*Server).CloseClientConnections", Method, 0},
- {"(*Server).Start", Method, 0},
- {"(*Server).StartTLS", Method, 0},
- {"DefaultRemoteAddr", Const, 0},
- {"NewRecorder", Func, 0},
- {"NewRequest", Func, 7},
- {"NewRequestWithContext", Func, 23},
- {"NewServer", Func, 0},
- {"NewTLSServer", Func, 0},
- {"NewUnstartedServer", Func, 0},
- {"ResponseRecorder", Type, 0},
- {"ResponseRecorder.Body", Field, 0},
- {"ResponseRecorder.Code", Field, 0},
- {"ResponseRecorder.Flushed", Field, 0},
- {"ResponseRecorder.HeaderMap", Field, 0},
- {"Server", Type, 0},
- {"Server.Config", Field, 0},
- {"Server.EnableHTTP2", Field, 14},
- {"Server.Listener", Field, 0},
- {"Server.TLS", Field, 0},
- {"Server.URL", Field, 0},
- },
- "net/http/httptrace": {
- {"ClientTrace", Type, 7},
- {"ClientTrace.ConnectDone", Field, 7},
- {"ClientTrace.ConnectStart", Field, 7},
- {"ClientTrace.DNSDone", Field, 7},
- {"ClientTrace.DNSStart", Field, 7},
- {"ClientTrace.GetConn", Field, 7},
- {"ClientTrace.Got100Continue", Field, 7},
- {"ClientTrace.Got1xxResponse", Field, 11},
- {"ClientTrace.GotConn", Field, 7},
- {"ClientTrace.GotFirstResponseByte", Field, 7},
- {"ClientTrace.PutIdleConn", Field, 7},
- {"ClientTrace.TLSHandshakeDone", Field, 8},
- {"ClientTrace.TLSHandshakeStart", Field, 8},
- {"ClientTrace.Wait100Continue", Field, 7},
- {"ClientTrace.WroteHeaderField", Field, 11},
- {"ClientTrace.WroteHeaders", Field, 7},
- {"ClientTrace.WroteRequest", Field, 7},
- {"ContextClientTrace", Func, 7},
- {"DNSDoneInfo", Type, 7},
- {"DNSDoneInfo.Addrs", Field, 7},
- {"DNSDoneInfo.Coalesced", Field, 7},
- {"DNSDoneInfo.Err", Field, 7},
- {"DNSStartInfo", Type, 7},
- {"DNSStartInfo.Host", Field, 7},
- {"GotConnInfo", Type, 7},
- {"GotConnInfo.Conn", Field, 7},
- {"GotConnInfo.IdleTime", Field, 7},
- {"GotConnInfo.Reused", Field, 7},
- {"GotConnInfo.WasIdle", Field, 7},
- {"WithClientTrace", Func, 7},
- {"WroteRequestInfo", Type, 7},
- {"WroteRequestInfo.Err", Field, 7},
- },
- "net/http/httputil": {
- {"(*ClientConn).Close", Method, 0},
- {"(*ClientConn).Do", Method, 0},
- {"(*ClientConn).Hijack", Method, 0},
- {"(*ClientConn).Pending", Method, 0},
- {"(*ClientConn).Read", Method, 0},
- {"(*ClientConn).Write", Method, 0},
- {"(*ProxyRequest).SetURL", Method, 20},
- {"(*ProxyRequest).SetXForwarded", Method, 20},
- {"(*ReverseProxy).ServeHTTP", Method, 0},
- {"(*ServerConn).Close", Method, 0},
- {"(*ServerConn).Hijack", Method, 0},
- {"(*ServerConn).Pending", Method, 0},
- {"(*ServerConn).Read", Method, 0},
- {"(*ServerConn).Write", Method, 0},
- {"BufferPool", Type, 6},
- {"ClientConn", Type, 0},
- {"DumpRequest", Func, 0},
- {"DumpRequestOut", Func, 0},
- {"DumpResponse", Func, 0},
- {"ErrClosed", Var, 0},
- {"ErrLineTooLong", Var, 0},
- {"ErrPersistEOF", Var, 0},
- {"ErrPipeline", Var, 0},
- {"NewChunkedReader", Func, 0},
- {"NewChunkedWriter", Func, 0},
- {"NewClientConn", Func, 0},
- {"NewProxyClientConn", Func, 0},
- {"NewServerConn", Func, 0},
- {"NewSingleHostReverseProxy", Func, 0},
- {"ProxyRequest", Type, 20},
- {"ProxyRequest.In", Field, 20},
- {"ProxyRequest.Out", Field, 20},
- {"ReverseProxy", Type, 0},
- {"ReverseProxy.BufferPool", Field, 6},
- {"ReverseProxy.Director", Field, 0},
- {"ReverseProxy.ErrorHandler", Field, 11},
- {"ReverseProxy.ErrorLog", Field, 4},
- {"ReverseProxy.FlushInterval", Field, 0},
- {"ReverseProxy.ModifyResponse", Field, 8},
- {"ReverseProxy.Rewrite", Field, 20},
- {"ReverseProxy.Transport", Field, 0},
- {"ServerConn", Type, 0},
- },
- "net/http/pprof": {
- {"Cmdline", Func, 0},
- {"Handler", Func, 0},
- {"Index", Func, 0},
- {"Profile", Func, 0},
- {"Symbol", Func, 0},
- {"Trace", Func, 5},
- },
- "net/mail": {
- {"(*Address).String", Method, 0},
- {"(*AddressParser).Parse", Method, 5},
- {"(*AddressParser).ParseList", Method, 5},
- {"(Header).AddressList", Method, 0},
- {"(Header).Date", Method, 0},
- {"(Header).Get", Method, 0},
- {"Address", Type, 0},
- {"Address.Address", Field, 0},
- {"Address.Name", Field, 0},
- {"AddressParser", Type, 5},
- {"AddressParser.WordDecoder", Field, 5},
- {"ErrHeaderNotPresent", Var, 0},
- {"Header", Type, 0},
- {"Message", Type, 0},
- {"Message.Body", Field, 0},
- {"Message.Header", Field, 0},
- {"ParseAddress", Func, 1},
- {"ParseAddressList", Func, 1},
- {"ParseDate", Func, 8},
- {"ReadMessage", Func, 0},
- },
- "net/netip": {
- {"(*Addr).UnmarshalBinary", Method, 18},
- {"(*Addr).UnmarshalText", Method, 18},
- {"(*AddrPort).UnmarshalBinary", Method, 18},
- {"(*AddrPort).UnmarshalText", Method, 18},
- {"(*Prefix).UnmarshalBinary", Method, 18},
- {"(*Prefix).UnmarshalText", Method, 18},
- {"(Addr).AppendTo", Method, 18},
- {"(Addr).As16", Method, 18},
- {"(Addr).As4", Method, 18},
- {"(Addr).AsSlice", Method, 18},
- {"(Addr).BitLen", Method, 18},
- {"(Addr).Compare", Method, 18},
- {"(Addr).Is4", Method, 18},
- {"(Addr).Is4In6", Method, 18},
- {"(Addr).Is6", Method, 18},
- {"(Addr).IsGlobalUnicast", Method, 18},
- {"(Addr).IsInterfaceLocalMulticast", Method, 18},
- {"(Addr).IsLinkLocalMulticast", Method, 18},
- {"(Addr).IsLinkLocalUnicast", Method, 18},
- {"(Addr).IsLoopback", Method, 18},
- {"(Addr).IsMulticast", Method, 18},
- {"(Addr).IsPrivate", Method, 18},
- {"(Addr).IsUnspecified", Method, 18},
- {"(Addr).IsValid", Method, 18},
- {"(Addr).Less", Method, 18},
- {"(Addr).MarshalBinary", Method, 18},
- {"(Addr).MarshalText", Method, 18},
- {"(Addr).Next", Method, 18},
- {"(Addr).Prefix", Method, 18},
- {"(Addr).Prev", Method, 18},
- {"(Addr).String", Method, 18},
- {"(Addr).StringExpanded", Method, 18},
- {"(Addr).Unmap", Method, 18},
- {"(Addr).WithZone", Method, 18},
- {"(Addr).Zone", Method, 18},
- {"(AddrPort).Addr", Method, 18},
- {"(AddrPort).AppendTo", Method, 18},
- {"(AddrPort).Compare", Method, 22},
- {"(AddrPort).IsValid", Method, 18},
- {"(AddrPort).MarshalBinary", Method, 18},
- {"(AddrPort).MarshalText", Method, 18},
- {"(AddrPort).Port", Method, 18},
- {"(AddrPort).String", Method, 18},
- {"(Prefix).Addr", Method, 18},
- {"(Prefix).AppendTo", Method, 18},
- {"(Prefix).Bits", Method, 18},
- {"(Prefix).Contains", Method, 18},
- {"(Prefix).IsSingleIP", Method, 18},
- {"(Prefix).IsValid", Method, 18},
- {"(Prefix).MarshalBinary", Method, 18},
- {"(Prefix).MarshalText", Method, 18},
- {"(Prefix).Masked", Method, 18},
- {"(Prefix).Overlaps", Method, 18},
- {"(Prefix).String", Method, 18},
- {"Addr", Type, 18},
- {"AddrFrom16", Func, 18},
- {"AddrFrom4", Func, 18},
- {"AddrFromSlice", Func, 18},
- {"AddrPort", Type, 18},
- {"AddrPortFrom", Func, 18},
- {"IPv4Unspecified", Func, 18},
- {"IPv6LinkLocalAllNodes", Func, 18},
- {"IPv6LinkLocalAllRouters", Func, 20},
- {"IPv6Loopback", Func, 20},
- {"IPv6Unspecified", Func, 18},
- {"MustParseAddr", Func, 18},
- {"MustParseAddrPort", Func, 18},
- {"MustParsePrefix", Func, 18},
- {"ParseAddr", Func, 18},
- {"ParseAddrPort", Func, 18},
- {"ParsePrefix", Func, 18},
- {"Prefix", Type, 18},
- {"PrefixFrom", Func, 18},
- },
- "net/rpc": {
- {"(*Client).Call", Method, 0},
- {"(*Client).Close", Method, 0},
- {"(*Client).Go", Method, 0},
- {"(*Server).Accept", Method, 0},
- {"(*Server).HandleHTTP", Method, 0},
- {"(*Server).Register", Method, 0},
- {"(*Server).RegisterName", Method, 0},
- {"(*Server).ServeCodec", Method, 0},
- {"(*Server).ServeConn", Method, 0},
- {"(*Server).ServeHTTP", Method, 0},
- {"(*Server).ServeRequest", Method, 0},
- {"(ServerError).Error", Method, 0},
- {"Accept", Func, 0},
- {"Call", Type, 0},
- {"Call.Args", Field, 0},
- {"Call.Done", Field, 0},
- {"Call.Error", Field, 0},
- {"Call.Reply", Field, 0},
- {"Call.ServiceMethod", Field, 0},
- {"Client", Type, 0},
- {"ClientCodec", Type, 0},
- {"DefaultDebugPath", Const, 0},
- {"DefaultRPCPath", Const, 0},
- {"DefaultServer", Var, 0},
- {"Dial", Func, 0},
- {"DialHTTP", Func, 0},
- {"DialHTTPPath", Func, 0},
- {"ErrShutdown", Var, 0},
- {"HandleHTTP", Func, 0},
- {"NewClient", Func, 0},
- {"NewClientWithCodec", Func, 0},
- {"NewServer", Func, 0},
- {"Register", Func, 0},
- {"RegisterName", Func, 0},
- {"Request", Type, 0},
- {"Request.Seq", Field, 0},
- {"Request.ServiceMethod", Field, 0},
- {"Response", Type, 0},
- {"Response.Error", Field, 0},
- {"Response.Seq", Field, 0},
- {"Response.ServiceMethod", Field, 0},
- {"ServeCodec", Func, 0},
- {"ServeConn", Func, 0},
- {"ServeRequest", Func, 0},
- {"Server", Type, 0},
- {"ServerCodec", Type, 0},
- {"ServerError", Type, 0},
- },
- "net/rpc/jsonrpc": {
- {"Dial", Func, 0},
- {"NewClient", Func, 0},
- {"NewClientCodec", Func, 0},
- {"NewServerCodec", Func, 0},
- {"ServeConn", Func, 0},
- },
- "net/smtp": {
- {"(*Client).Auth", Method, 0},
- {"(*Client).Close", Method, 2},
- {"(*Client).Data", Method, 0},
- {"(*Client).Extension", Method, 0},
- {"(*Client).Hello", Method, 1},
- {"(*Client).Mail", Method, 0},
- {"(*Client).Noop", Method, 10},
- {"(*Client).Quit", Method, 0},
- {"(*Client).Rcpt", Method, 0},
- {"(*Client).Reset", Method, 0},
- {"(*Client).StartTLS", Method, 0},
- {"(*Client).TLSConnectionState", Method, 5},
- {"(*Client).Verify", Method, 0},
- {"Auth", Type, 0},
- {"CRAMMD5Auth", Func, 0},
- {"Client", Type, 0},
- {"Client.Text", Field, 0},
- {"Dial", Func, 0},
- {"NewClient", Func, 0},
- {"PlainAuth", Func, 0},
- {"SendMail", Func, 0},
- {"ServerInfo", Type, 0},
- {"ServerInfo.Auth", Field, 0},
- {"ServerInfo.Name", Field, 0},
- {"ServerInfo.TLS", Field, 0},
- },
- "net/textproto": {
- {"(*Conn).Close", Method, 0},
- {"(*Conn).Cmd", Method, 0},
- {"(*Conn).DotReader", Method, 0},
- {"(*Conn).DotWriter", Method, 0},
- {"(*Conn).EndRequest", Method, 0},
- {"(*Conn).EndResponse", Method, 0},
- {"(*Conn).Next", Method, 0},
- {"(*Conn).PrintfLine", Method, 0},
- {"(*Conn).ReadCodeLine", Method, 0},
- {"(*Conn).ReadContinuedLine", Method, 0},
- {"(*Conn).ReadContinuedLineBytes", Method, 0},
- {"(*Conn).ReadDotBytes", Method, 0},
- {"(*Conn).ReadDotLines", Method, 0},
- {"(*Conn).ReadLine", Method, 0},
- {"(*Conn).ReadLineBytes", Method, 0},
- {"(*Conn).ReadMIMEHeader", Method, 0},
- {"(*Conn).ReadResponse", Method, 0},
- {"(*Conn).StartRequest", Method, 0},
- {"(*Conn).StartResponse", Method, 0},
- {"(*Error).Error", Method, 0},
- {"(*Pipeline).EndRequest", Method, 0},
- {"(*Pipeline).EndResponse", Method, 0},
- {"(*Pipeline).Next", Method, 0},
- {"(*Pipeline).StartRequest", Method, 0},
- {"(*Pipeline).StartResponse", Method, 0},
- {"(*Reader).DotReader", Method, 0},
- {"(*Reader).ReadCodeLine", Method, 0},
- {"(*Reader).ReadContinuedLine", Method, 0},
- {"(*Reader).ReadContinuedLineBytes", Method, 0},
- {"(*Reader).ReadDotBytes", Method, 0},
- {"(*Reader).ReadDotLines", Method, 0},
- {"(*Reader).ReadLine", Method, 0},
- {"(*Reader).ReadLineBytes", Method, 0},
- {"(*Reader).ReadMIMEHeader", Method, 0},
- {"(*Reader).ReadResponse", Method, 0},
- {"(*Writer).DotWriter", Method, 0},
- {"(*Writer).PrintfLine", Method, 0},
- {"(MIMEHeader).Add", Method, 0},
- {"(MIMEHeader).Del", Method, 0},
- {"(MIMEHeader).Get", Method, 0},
- {"(MIMEHeader).Set", Method, 0},
- {"(MIMEHeader).Values", Method, 14},
- {"(ProtocolError).Error", Method, 0},
- {"CanonicalMIMEHeaderKey", Func, 0},
- {"Conn", Type, 0},
- {"Conn.Pipeline", Field, 0},
- {"Conn.Reader", Field, 0},
- {"Conn.Writer", Field, 0},
- {"Dial", Func, 0},
- {"Error", Type, 0},
- {"Error.Code", Field, 0},
- {"Error.Msg", Field, 0},
- {"MIMEHeader", Type, 0},
- {"NewConn", Func, 0},
- {"NewReader", Func, 0},
- {"NewWriter", Func, 0},
- {"Pipeline", Type, 0},
- {"ProtocolError", Type, 0},
- {"Reader", Type, 0},
- {"Reader.R", Field, 0},
- {"TrimBytes", Func, 1},
- {"TrimString", Func, 1},
- {"Writer", Type, 0},
- {"Writer.W", Field, 0},
- },
- "net/url": {
- {"(*Error).Error", Method, 0},
- {"(*Error).Temporary", Method, 6},
- {"(*Error).Timeout", Method, 6},
- {"(*Error).Unwrap", Method, 13},
- {"(*URL).EscapedFragment", Method, 15},
- {"(*URL).EscapedPath", Method, 5},
- {"(*URL).Hostname", Method, 8},
- {"(*URL).IsAbs", Method, 0},
- {"(*URL).JoinPath", Method, 19},
- {"(*URL).MarshalBinary", Method, 8},
- {"(*URL).Parse", Method, 0},
- {"(*URL).Port", Method, 8},
- {"(*URL).Query", Method, 0},
- {"(*URL).Redacted", Method, 15},
- {"(*URL).RequestURI", Method, 0},
- {"(*URL).ResolveReference", Method, 0},
- {"(*URL).String", Method, 0},
- {"(*URL).UnmarshalBinary", Method, 8},
- {"(*Userinfo).Password", Method, 0},
- {"(*Userinfo).String", Method, 0},
- {"(*Userinfo).Username", Method, 0},
- {"(EscapeError).Error", Method, 0},
- {"(InvalidHostError).Error", Method, 6},
- {"(Values).Add", Method, 0},
- {"(Values).Del", Method, 0},
- {"(Values).Encode", Method, 0},
- {"(Values).Get", Method, 0},
- {"(Values).Has", Method, 17},
- {"(Values).Set", Method, 0},
- {"Error", Type, 0},
- {"Error.Err", Field, 0},
- {"Error.Op", Field, 0},
- {"Error.URL", Field, 0},
- {"EscapeError", Type, 0},
- {"InvalidHostError", Type, 6},
- {"JoinPath", Func, 19},
- {"Parse", Func, 0},
- {"ParseQuery", Func, 0},
- {"ParseRequestURI", Func, 0},
- {"PathEscape", Func, 8},
- {"PathUnescape", Func, 8},
- {"QueryEscape", Func, 0},
- {"QueryUnescape", Func, 0},
- {"URL", Type, 0},
- {"URL.ForceQuery", Field, 7},
- {"URL.Fragment", Field, 0},
- {"URL.Host", Field, 0},
- {"URL.OmitHost", Field, 19},
- {"URL.Opaque", Field, 0},
- {"URL.Path", Field, 0},
- {"URL.RawFragment", Field, 15},
- {"URL.RawPath", Field, 5},
- {"URL.RawQuery", Field, 0},
- {"URL.Scheme", Field, 0},
- {"URL.User", Field, 0},
- {"User", Func, 0},
- {"UserPassword", Func, 0},
- {"Userinfo", Type, 0},
- {"Values", Type, 0},
- },
- "os": {
- {"(*File).Chdir", Method, 0},
- {"(*File).Chmod", Method, 0},
- {"(*File).Chown", Method, 0},
- {"(*File).Close", Method, 0},
- {"(*File).Fd", Method, 0},
- {"(*File).Name", Method, 0},
- {"(*File).Read", Method, 0},
- {"(*File).ReadAt", Method, 0},
- {"(*File).ReadDir", Method, 16},
- {"(*File).ReadFrom", Method, 15},
- {"(*File).Readdir", Method, 0},
- {"(*File).Readdirnames", Method, 0},
- {"(*File).Seek", Method, 0},
- {"(*File).SetDeadline", Method, 10},
- {"(*File).SetReadDeadline", Method, 10},
- {"(*File).SetWriteDeadline", Method, 10},
- {"(*File).Stat", Method, 0},
- {"(*File).Sync", Method, 0},
- {"(*File).SyscallConn", Method, 12},
- {"(*File).Truncate", Method, 0},
- {"(*File).Write", Method, 0},
- {"(*File).WriteAt", Method, 0},
- {"(*File).WriteString", Method, 0},
- {"(*File).WriteTo", Method, 22},
- {"(*LinkError).Error", Method, 0},
- {"(*LinkError).Unwrap", Method, 13},
- {"(*PathError).Error", Method, 0},
- {"(*PathError).Timeout", Method, 10},
- {"(*PathError).Unwrap", Method, 13},
- {"(*Process).Kill", Method, 0},
- {"(*Process).Release", Method, 0},
- {"(*Process).Signal", Method, 0},
- {"(*Process).Wait", Method, 0},
- {"(*ProcessState).ExitCode", Method, 12},
- {"(*ProcessState).Exited", Method, 0},
- {"(*ProcessState).Pid", Method, 0},
- {"(*ProcessState).String", Method, 0},
- {"(*ProcessState).Success", Method, 0},
- {"(*ProcessState).Sys", Method, 0},
- {"(*ProcessState).SysUsage", Method, 0},
- {"(*ProcessState).SystemTime", Method, 0},
- {"(*ProcessState).UserTime", Method, 0},
- {"(*SyscallError).Error", Method, 0},
- {"(*SyscallError).Timeout", Method, 10},
- {"(*SyscallError).Unwrap", Method, 13},
- {"(FileMode).IsDir", Method, 0},
- {"(FileMode).IsRegular", Method, 1},
- {"(FileMode).Perm", Method, 0},
- {"(FileMode).String", Method, 0},
- {"Args", Var, 0},
- {"Chdir", Func, 0},
- {"Chmod", Func, 0},
- {"Chown", Func, 0},
- {"Chtimes", Func, 0},
- {"Clearenv", Func, 0},
- {"CopyFS", Func, 23},
- {"Create", Func, 0},
- {"CreateTemp", Func, 16},
- {"DevNull", Const, 0},
- {"DirEntry", Type, 16},
- {"DirFS", Func, 16},
- {"Environ", Func, 0},
- {"ErrClosed", Var, 8},
- {"ErrDeadlineExceeded", Var, 15},
- {"ErrExist", Var, 0},
- {"ErrInvalid", Var, 0},
- {"ErrNoDeadline", Var, 10},
- {"ErrNotExist", Var, 0},
- {"ErrPermission", Var, 0},
- {"ErrProcessDone", Var, 16},
- {"Executable", Func, 8},
- {"Exit", Func, 0},
- {"Expand", Func, 0},
- {"ExpandEnv", Func, 0},
- {"File", Type, 0},
- {"FileInfo", Type, 0},
- {"FileMode", Type, 0},
- {"FindProcess", Func, 0},
- {"Getegid", Func, 0},
- {"Getenv", Func, 0},
- {"Geteuid", Func, 0},
- {"Getgid", Func, 0},
- {"Getgroups", Func, 0},
- {"Getpagesize", Func, 0},
- {"Getpid", Func, 0},
- {"Getppid", Func, 0},
- {"Getuid", Func, 0},
- {"Getwd", Func, 0},
- {"Hostname", Func, 0},
- {"Interrupt", Var, 0},
- {"IsExist", Func, 0},
- {"IsNotExist", Func, 0},
- {"IsPathSeparator", Func, 0},
- {"IsPermission", Func, 0},
- {"IsTimeout", Func, 10},
- {"Kill", Var, 0},
- {"Lchown", Func, 0},
- {"Link", Func, 0},
- {"LinkError", Type, 0},
- {"LinkError.Err", Field, 0},
- {"LinkError.New", Field, 0},
- {"LinkError.Old", Field, 0},
- {"LinkError.Op", Field, 0},
- {"LookupEnv", Func, 5},
- {"Lstat", Func, 0},
- {"Mkdir", Func, 0},
- {"MkdirAll", Func, 0},
- {"MkdirTemp", Func, 16},
- {"ModeAppend", Const, 0},
- {"ModeCharDevice", Const, 0},
- {"ModeDevice", Const, 0},
- {"ModeDir", Const, 0},
- {"ModeExclusive", Const, 0},
- {"ModeIrregular", Const, 11},
- {"ModeNamedPipe", Const, 0},
- {"ModePerm", Const, 0},
- {"ModeSetgid", Const, 0},
- {"ModeSetuid", Const, 0},
- {"ModeSocket", Const, 0},
- {"ModeSticky", Const, 0},
- {"ModeSymlink", Const, 0},
- {"ModeTemporary", Const, 0},
- {"ModeType", Const, 0},
- {"NewFile", Func, 0},
- {"NewSyscallError", Func, 0},
- {"O_APPEND", Const, 0},
- {"O_CREATE", Const, 0},
- {"O_EXCL", Const, 0},
- {"O_RDONLY", Const, 0},
- {"O_RDWR", Const, 0},
- {"O_SYNC", Const, 0},
- {"O_TRUNC", Const, 0},
- {"O_WRONLY", Const, 0},
- {"Open", Func, 0},
- {"OpenFile", Func, 0},
- {"PathError", Type, 0},
- {"PathError.Err", Field, 0},
- {"PathError.Op", Field, 0},
- {"PathError.Path", Field, 0},
- {"PathListSeparator", Const, 0},
- {"PathSeparator", Const, 0},
- {"Pipe", Func, 0},
- {"ProcAttr", Type, 0},
- {"ProcAttr.Dir", Field, 0},
- {"ProcAttr.Env", Field, 0},
- {"ProcAttr.Files", Field, 0},
- {"ProcAttr.Sys", Field, 0},
- {"Process", Type, 0},
- {"Process.Pid", Field, 0},
- {"ProcessState", Type, 0},
- {"ReadDir", Func, 16},
- {"ReadFile", Func, 16},
- {"Readlink", Func, 0},
- {"Remove", Func, 0},
- {"RemoveAll", Func, 0},
- {"Rename", Func, 0},
- {"SEEK_CUR", Const, 0},
- {"SEEK_END", Const, 0},
- {"SEEK_SET", Const, 0},
- {"SameFile", Func, 0},
- {"Setenv", Func, 0},
- {"Signal", Type, 0},
- {"StartProcess", Func, 0},
- {"Stat", Func, 0},
- {"Stderr", Var, 0},
- {"Stdin", Var, 0},
- {"Stdout", Var, 0},
- {"Symlink", Func, 0},
- {"SyscallError", Type, 0},
- {"SyscallError.Err", Field, 0},
- {"SyscallError.Syscall", Field, 0},
- {"TempDir", Func, 0},
- {"Truncate", Func, 0},
- {"Unsetenv", Func, 4},
- {"UserCacheDir", Func, 11},
- {"UserConfigDir", Func, 13},
- {"UserHomeDir", Func, 12},
- {"WriteFile", Func, 16},
- },
- "os/exec": {
- {"(*Cmd).CombinedOutput", Method, 0},
- {"(*Cmd).Environ", Method, 19},
- {"(*Cmd).Output", Method, 0},
- {"(*Cmd).Run", Method, 0},
- {"(*Cmd).Start", Method, 0},
- {"(*Cmd).StderrPipe", Method, 0},
- {"(*Cmd).StdinPipe", Method, 0},
- {"(*Cmd).StdoutPipe", Method, 0},
- {"(*Cmd).String", Method, 13},
- {"(*Cmd).Wait", Method, 0},
- {"(*Error).Error", Method, 0},
- {"(*Error).Unwrap", Method, 13},
- {"(*ExitError).Error", Method, 0},
- {"(ExitError).ExitCode", Method, 12},
- {"(ExitError).Exited", Method, 0},
- {"(ExitError).Pid", Method, 0},
- {"(ExitError).String", Method, 0},
- {"(ExitError).Success", Method, 0},
- {"(ExitError).Sys", Method, 0},
- {"(ExitError).SysUsage", Method, 0},
- {"(ExitError).SystemTime", Method, 0},
- {"(ExitError).UserTime", Method, 0},
- {"Cmd", Type, 0},
- {"Cmd.Args", Field, 0},
- {"Cmd.Cancel", Field, 20},
- {"Cmd.Dir", Field, 0},
- {"Cmd.Env", Field, 0},
- {"Cmd.Err", Field, 19},
- {"Cmd.ExtraFiles", Field, 0},
- {"Cmd.Path", Field, 0},
- {"Cmd.Process", Field, 0},
- {"Cmd.ProcessState", Field, 0},
- {"Cmd.Stderr", Field, 0},
- {"Cmd.Stdin", Field, 0},
- {"Cmd.Stdout", Field, 0},
- {"Cmd.SysProcAttr", Field, 0},
- {"Cmd.WaitDelay", Field, 20},
- {"Command", Func, 0},
- {"CommandContext", Func, 7},
- {"ErrDot", Var, 19},
- {"ErrNotFound", Var, 0},
- {"ErrWaitDelay", Var, 20},
- {"Error", Type, 0},
- {"Error.Err", Field, 0},
- {"Error.Name", Field, 0},
- {"ExitError", Type, 0},
- {"ExitError.ProcessState", Field, 0},
- {"ExitError.Stderr", Field, 6},
- {"LookPath", Func, 0},
- },
- "os/signal": {
- {"Ignore", Func, 5},
- {"Ignored", Func, 11},
- {"Notify", Func, 0},
- {"NotifyContext", Func, 16},
- {"Reset", Func, 5},
- {"Stop", Func, 1},
- },
- "os/user": {
- {"(*User).GroupIds", Method, 7},
- {"(UnknownGroupError).Error", Method, 7},
- {"(UnknownGroupIdError).Error", Method, 7},
- {"(UnknownUserError).Error", Method, 0},
- {"(UnknownUserIdError).Error", Method, 0},
- {"Current", Func, 0},
- {"Group", Type, 7},
- {"Group.Gid", Field, 7},
- {"Group.Name", Field, 7},
- {"Lookup", Func, 0},
- {"LookupGroup", Func, 7},
- {"LookupGroupId", Func, 7},
- {"LookupId", Func, 0},
- {"UnknownGroupError", Type, 7},
- {"UnknownGroupIdError", Type, 7},
- {"UnknownUserError", Type, 0},
- {"UnknownUserIdError", Type, 0},
- {"User", Type, 0},
- {"User.Gid", Field, 0},
- {"User.HomeDir", Field, 0},
- {"User.Name", Field, 0},
- {"User.Uid", Field, 0},
- {"User.Username", Field, 0},
- },
- "path": {
- {"Base", Func, 0},
- {"Clean", Func, 0},
- {"Dir", Func, 0},
- {"ErrBadPattern", Var, 0},
- {"Ext", Func, 0},
- {"IsAbs", Func, 0},
- {"Join", Func, 0},
- {"Match", Func, 0},
- {"Split", Func, 0},
- },
- "path/filepath": {
- {"Abs", Func, 0},
- {"Base", Func, 0},
- {"Clean", Func, 0},
- {"Dir", Func, 0},
- {"ErrBadPattern", Var, 0},
- {"EvalSymlinks", Func, 0},
- {"Ext", Func, 0},
- {"FromSlash", Func, 0},
- {"Glob", Func, 0},
- {"HasPrefix", Func, 0},
- {"IsAbs", Func, 0},
- {"IsLocal", Func, 20},
- {"Join", Func, 0},
- {"ListSeparator", Const, 0},
- {"Localize", Func, 23},
- {"Match", Func, 0},
- {"Rel", Func, 0},
- {"Separator", Const, 0},
- {"SkipAll", Var, 20},
- {"SkipDir", Var, 0},
- {"Split", Func, 0},
- {"SplitList", Func, 0},
- {"ToSlash", Func, 0},
- {"VolumeName", Func, 0},
- {"Walk", Func, 0},
- {"WalkDir", Func, 16},
- {"WalkFunc", Type, 0},
- },
- "plugin": {
- {"(*Plugin).Lookup", Method, 8},
- {"Open", Func, 8},
- {"Plugin", Type, 8},
- {"Symbol", Type, 8},
- },
- "reflect": {
- {"(*MapIter).Key", Method, 12},
- {"(*MapIter).Next", Method, 12},
- {"(*MapIter).Reset", Method, 18},
- {"(*MapIter).Value", Method, 12},
- {"(*ValueError).Error", Method, 0},
- {"(ChanDir).String", Method, 0},
- {"(Kind).String", Method, 0},
- {"(Method).IsExported", Method, 17},
- {"(StructField).IsExported", Method, 17},
- {"(StructTag).Get", Method, 0},
- {"(StructTag).Lookup", Method, 7},
- {"(Value).Addr", Method, 0},
- {"(Value).Bool", Method, 0},
- {"(Value).Bytes", Method, 0},
- {"(Value).Call", Method, 0},
- {"(Value).CallSlice", Method, 0},
- {"(Value).CanAddr", Method, 0},
- {"(Value).CanComplex", Method, 18},
- {"(Value).CanConvert", Method, 17},
- {"(Value).CanFloat", Method, 18},
- {"(Value).CanInt", Method, 18},
- {"(Value).CanInterface", Method, 0},
- {"(Value).CanSet", Method, 0},
- {"(Value).CanUint", Method, 18},
- {"(Value).Cap", Method, 0},
- {"(Value).Clear", Method, 21},
- {"(Value).Close", Method, 0},
- {"(Value).Comparable", Method, 20},
- {"(Value).Complex", Method, 0},
- {"(Value).Convert", Method, 1},
- {"(Value).Elem", Method, 0},
- {"(Value).Equal", Method, 20},
- {"(Value).Field", Method, 0},
- {"(Value).FieldByIndex", Method, 0},
- {"(Value).FieldByIndexErr", Method, 18},
- {"(Value).FieldByName", Method, 0},
- {"(Value).FieldByNameFunc", Method, 0},
- {"(Value).Float", Method, 0},
- {"(Value).Grow", Method, 20},
- {"(Value).Index", Method, 0},
- {"(Value).Int", Method, 0},
- {"(Value).Interface", Method, 0},
- {"(Value).InterfaceData", Method, 0},
- {"(Value).IsNil", Method, 0},
- {"(Value).IsValid", Method, 0},
- {"(Value).IsZero", Method, 13},
- {"(Value).Kind", Method, 0},
- {"(Value).Len", Method, 0},
- {"(Value).MapIndex", Method, 0},
- {"(Value).MapKeys", Method, 0},
- {"(Value).MapRange", Method, 12},
- {"(Value).Method", Method, 0},
- {"(Value).MethodByName", Method, 0},
- {"(Value).NumField", Method, 0},
- {"(Value).NumMethod", Method, 0},
- {"(Value).OverflowComplex", Method, 0},
- {"(Value).OverflowFloat", Method, 0},
- {"(Value).OverflowInt", Method, 0},
- {"(Value).OverflowUint", Method, 0},
- {"(Value).Pointer", Method, 0},
- {"(Value).Recv", Method, 0},
- {"(Value).Send", Method, 0},
- {"(Value).Seq", Method, 23},
- {"(Value).Seq2", Method, 23},
- {"(Value).Set", Method, 0},
- {"(Value).SetBool", Method, 0},
- {"(Value).SetBytes", Method, 0},
- {"(Value).SetCap", Method, 2},
- {"(Value).SetComplex", Method, 0},
- {"(Value).SetFloat", Method, 0},
- {"(Value).SetInt", Method, 0},
- {"(Value).SetIterKey", Method, 18},
- {"(Value).SetIterValue", Method, 18},
- {"(Value).SetLen", Method, 0},
- {"(Value).SetMapIndex", Method, 0},
- {"(Value).SetPointer", Method, 0},
- {"(Value).SetString", Method, 0},
- {"(Value).SetUint", Method, 0},
- {"(Value).SetZero", Method, 20},
- {"(Value).Slice", Method, 0},
- {"(Value).Slice3", Method, 2},
- {"(Value).String", Method, 0},
- {"(Value).TryRecv", Method, 0},
- {"(Value).TrySend", Method, 0},
- {"(Value).Type", Method, 0},
- {"(Value).Uint", Method, 0},
- {"(Value).UnsafeAddr", Method, 0},
- {"(Value).UnsafePointer", Method, 18},
- {"Append", Func, 0},
- {"AppendSlice", Func, 0},
- {"Array", Const, 0},
- {"ArrayOf", Func, 5},
- {"Bool", Const, 0},
- {"BothDir", Const, 0},
- {"Chan", Const, 0},
- {"ChanDir", Type, 0},
- {"ChanOf", Func, 1},
- {"Complex128", Const, 0},
- {"Complex64", Const, 0},
- {"Copy", Func, 0},
- {"DeepEqual", Func, 0},
- {"Float32", Const, 0},
- {"Float64", Const, 0},
- {"Func", Const, 0},
- {"FuncOf", Func, 5},
- {"Indirect", Func, 0},
- {"Int", Const, 0},
- {"Int16", Const, 0},
- {"Int32", Const, 0},
- {"Int64", Const, 0},
- {"Int8", Const, 0},
- {"Interface", Const, 0},
- {"Invalid", Const, 0},
- {"Kind", Type, 0},
- {"MakeChan", Func, 0},
- {"MakeFunc", Func, 1},
- {"MakeMap", Func, 0},
- {"MakeMapWithSize", Func, 9},
- {"MakeSlice", Func, 0},
- {"Map", Const, 0},
- {"MapIter", Type, 12},
- {"MapOf", Func, 1},
- {"Method", Type, 0},
- {"Method.Func", Field, 0},
- {"Method.Index", Field, 0},
- {"Method.Name", Field, 0},
- {"Method.PkgPath", Field, 0},
- {"Method.Type", Field, 0},
- {"New", Func, 0},
- {"NewAt", Func, 0},
- {"Pointer", Const, 18},
- {"PointerTo", Func, 18},
- {"Ptr", Const, 0},
- {"PtrTo", Func, 0},
- {"RecvDir", Const, 0},
- {"Select", Func, 1},
- {"SelectCase", Type, 1},
- {"SelectCase.Chan", Field, 1},
- {"SelectCase.Dir", Field, 1},
- {"SelectCase.Send", Field, 1},
- {"SelectDefault", Const, 1},
- {"SelectDir", Type, 1},
- {"SelectRecv", Const, 1},
- {"SelectSend", Const, 1},
- {"SendDir", Const, 0},
- {"Slice", Const, 0},
- {"SliceAt", Func, 23},
- {"SliceHeader", Type, 0},
- {"SliceHeader.Cap", Field, 0},
- {"SliceHeader.Data", Field, 0},
- {"SliceHeader.Len", Field, 0},
- {"SliceOf", Func, 1},
- {"String", Const, 0},
- {"StringHeader", Type, 0},
- {"StringHeader.Data", Field, 0},
- {"StringHeader.Len", Field, 0},
- {"Struct", Const, 0},
- {"StructField", Type, 0},
- {"StructField.Anonymous", Field, 0},
- {"StructField.Index", Field, 0},
- {"StructField.Name", Field, 0},
- {"StructField.Offset", Field, 0},
- {"StructField.PkgPath", Field, 0},
- {"StructField.Tag", Field, 0},
- {"StructField.Type", Field, 0},
- {"StructOf", Func, 7},
- {"StructTag", Type, 0},
- {"Swapper", Func, 8},
- {"Type", Type, 0},
- {"TypeFor", Func, 22},
- {"TypeOf", Func, 0},
- {"Uint", Const, 0},
- {"Uint16", Const, 0},
- {"Uint32", Const, 0},
- {"Uint64", Const, 0},
- {"Uint8", Const, 0},
- {"Uintptr", Const, 0},
- {"UnsafePointer", Const, 0},
- {"Value", Type, 0},
- {"ValueError", Type, 0},
- {"ValueError.Kind", Field, 0},
- {"ValueError.Method", Field, 0},
- {"ValueOf", Func, 0},
- {"VisibleFields", Func, 17},
- {"Zero", Func, 0},
- },
- "regexp": {
- {"(*Regexp).Copy", Method, 6},
- {"(*Regexp).Expand", Method, 0},
- {"(*Regexp).ExpandString", Method, 0},
- {"(*Regexp).Find", Method, 0},
- {"(*Regexp).FindAll", Method, 0},
- {"(*Regexp).FindAllIndex", Method, 0},
- {"(*Regexp).FindAllString", Method, 0},
- {"(*Regexp).FindAllStringIndex", Method, 0},
- {"(*Regexp).FindAllStringSubmatch", Method, 0},
- {"(*Regexp).FindAllStringSubmatchIndex", Method, 0},
- {"(*Regexp).FindAllSubmatch", Method, 0},
- {"(*Regexp).FindAllSubmatchIndex", Method, 0},
- {"(*Regexp).FindIndex", Method, 0},
- {"(*Regexp).FindReaderIndex", Method, 0},
- {"(*Regexp).FindReaderSubmatchIndex", Method, 0},
- {"(*Regexp).FindString", Method, 0},
- {"(*Regexp).FindStringIndex", Method, 0},
- {"(*Regexp).FindStringSubmatch", Method, 0},
- {"(*Regexp).FindStringSubmatchIndex", Method, 0},
- {"(*Regexp).FindSubmatch", Method, 0},
- {"(*Regexp).FindSubmatchIndex", Method, 0},
- {"(*Regexp).LiteralPrefix", Method, 0},
- {"(*Regexp).Longest", Method, 1},
- {"(*Regexp).MarshalText", Method, 21},
- {"(*Regexp).Match", Method, 0},
- {"(*Regexp).MatchReader", Method, 0},
- {"(*Regexp).MatchString", Method, 0},
- {"(*Regexp).NumSubexp", Method, 0},
- {"(*Regexp).ReplaceAll", Method, 0},
- {"(*Regexp).ReplaceAllFunc", Method, 0},
- {"(*Regexp).ReplaceAllLiteral", Method, 0},
- {"(*Regexp).ReplaceAllLiteralString", Method, 0},
- {"(*Regexp).ReplaceAllString", Method, 0},
- {"(*Regexp).ReplaceAllStringFunc", Method, 0},
- {"(*Regexp).Split", Method, 1},
- {"(*Regexp).String", Method, 0},
- {"(*Regexp).SubexpIndex", Method, 15},
- {"(*Regexp).SubexpNames", Method, 0},
- {"(*Regexp).UnmarshalText", Method, 21},
- {"Compile", Func, 0},
- {"CompilePOSIX", Func, 0},
- {"Match", Func, 0},
- {"MatchReader", Func, 0},
- {"MatchString", Func, 0},
- {"MustCompile", Func, 0},
- {"MustCompilePOSIX", Func, 0},
- {"QuoteMeta", Func, 0},
- {"Regexp", Type, 0},
- },
- "regexp/syntax": {
- {"(*Error).Error", Method, 0},
- {"(*Inst).MatchEmptyWidth", Method, 0},
- {"(*Inst).MatchRune", Method, 0},
- {"(*Inst).MatchRunePos", Method, 3},
- {"(*Inst).String", Method, 0},
- {"(*Prog).Prefix", Method, 0},
- {"(*Prog).StartCond", Method, 0},
- {"(*Prog).String", Method, 0},
- {"(*Regexp).CapNames", Method, 0},
- {"(*Regexp).Equal", Method, 0},
- {"(*Regexp).MaxCap", Method, 0},
- {"(*Regexp).Simplify", Method, 0},
- {"(*Regexp).String", Method, 0},
- {"(ErrorCode).String", Method, 0},
- {"(InstOp).String", Method, 3},
- {"(Op).String", Method, 11},
- {"ClassNL", Const, 0},
- {"Compile", Func, 0},
- {"DotNL", Const, 0},
- {"EmptyBeginLine", Const, 0},
- {"EmptyBeginText", Const, 0},
- {"EmptyEndLine", Const, 0},
- {"EmptyEndText", Const, 0},
- {"EmptyNoWordBoundary", Const, 0},
- {"EmptyOp", Type, 0},
- {"EmptyOpContext", Func, 0},
- {"EmptyWordBoundary", Const, 0},
- {"ErrInternalError", Const, 0},
- {"ErrInvalidCharClass", Const, 0},
- {"ErrInvalidCharRange", Const, 0},
- {"ErrInvalidEscape", Const, 0},
- {"ErrInvalidNamedCapture", Const, 0},
- {"ErrInvalidPerlOp", Const, 0},
- {"ErrInvalidRepeatOp", Const, 0},
- {"ErrInvalidRepeatSize", Const, 0},
- {"ErrInvalidUTF8", Const, 0},
- {"ErrLarge", Const, 20},
- {"ErrMissingBracket", Const, 0},
- {"ErrMissingParen", Const, 0},
- {"ErrMissingRepeatArgument", Const, 0},
- {"ErrNestingDepth", Const, 19},
- {"ErrTrailingBackslash", Const, 0},
- {"ErrUnexpectedParen", Const, 1},
- {"Error", Type, 0},
- {"Error.Code", Field, 0},
- {"Error.Expr", Field, 0},
- {"ErrorCode", Type, 0},
- {"Flags", Type, 0},
- {"FoldCase", Const, 0},
- {"Inst", Type, 0},
- {"Inst.Arg", Field, 0},
- {"Inst.Op", Field, 0},
- {"Inst.Out", Field, 0},
- {"Inst.Rune", Field, 0},
- {"InstAlt", Const, 0},
- {"InstAltMatch", Const, 0},
- {"InstCapture", Const, 0},
- {"InstEmptyWidth", Const, 0},
- {"InstFail", Const, 0},
- {"InstMatch", Const, 0},
- {"InstNop", Const, 0},
- {"InstOp", Type, 0},
- {"InstRune", Const, 0},
- {"InstRune1", Const, 0},
- {"InstRuneAny", Const, 0},
- {"InstRuneAnyNotNL", Const, 0},
- {"IsWordChar", Func, 0},
- {"Literal", Const, 0},
- {"MatchNL", Const, 0},
- {"NonGreedy", Const, 0},
- {"OneLine", Const, 0},
- {"Op", Type, 0},
- {"OpAlternate", Const, 0},
- {"OpAnyChar", Const, 0},
- {"OpAnyCharNotNL", Const, 0},
- {"OpBeginLine", Const, 0},
- {"OpBeginText", Const, 0},
- {"OpCapture", Const, 0},
- {"OpCharClass", Const, 0},
- {"OpConcat", Const, 0},
- {"OpEmptyMatch", Const, 0},
- {"OpEndLine", Const, 0},
- {"OpEndText", Const, 0},
- {"OpLiteral", Const, 0},
- {"OpNoMatch", Const, 0},
- {"OpNoWordBoundary", Const, 0},
- {"OpPlus", Const, 0},
- {"OpQuest", Const, 0},
- {"OpRepeat", Const, 0},
- {"OpStar", Const, 0},
- {"OpWordBoundary", Const, 0},
- {"POSIX", Const, 0},
- {"Parse", Func, 0},
- {"Perl", Const, 0},
- {"PerlX", Const, 0},
- {"Prog", Type, 0},
- {"Prog.Inst", Field, 0},
- {"Prog.NumCap", Field, 0},
- {"Prog.Start", Field, 0},
- {"Regexp", Type, 0},
- {"Regexp.Cap", Field, 0},
- {"Regexp.Flags", Field, 0},
- {"Regexp.Max", Field, 0},
- {"Regexp.Min", Field, 0},
- {"Regexp.Name", Field, 0},
- {"Regexp.Op", Field, 0},
- {"Regexp.Rune", Field, 0},
- {"Regexp.Rune0", Field, 0},
- {"Regexp.Sub", Field, 0},
- {"Regexp.Sub0", Field, 0},
- {"Simple", Const, 0},
- {"UnicodeGroups", Const, 0},
- {"WasDollar", Const, 0},
- },
- "runtime": {
- {"(*BlockProfileRecord).Stack", Method, 1},
- {"(*Frames).Next", Method, 7},
- {"(*Func).Entry", Method, 0},
- {"(*Func).FileLine", Method, 0},
- {"(*Func).Name", Method, 0},
- {"(*MemProfileRecord).InUseBytes", Method, 0},
- {"(*MemProfileRecord).InUseObjects", Method, 0},
- {"(*MemProfileRecord).Stack", Method, 0},
- {"(*PanicNilError).Error", Method, 21},
- {"(*PanicNilError).RuntimeError", Method, 21},
- {"(*Pinner).Pin", Method, 21},
- {"(*Pinner).Unpin", Method, 21},
- {"(*StackRecord).Stack", Method, 0},
- {"(*TypeAssertionError).Error", Method, 0},
- {"(*TypeAssertionError).RuntimeError", Method, 0},
- {"BlockProfile", Func, 1},
- {"BlockProfileRecord", Type, 1},
- {"BlockProfileRecord.Count", Field, 1},
- {"BlockProfileRecord.Cycles", Field, 1},
- {"BlockProfileRecord.StackRecord", Field, 1},
- {"Breakpoint", Func, 0},
- {"CPUProfile", Func, 0},
- {"Caller", Func, 0},
- {"Callers", Func, 0},
- {"CallersFrames", Func, 7},
- {"Compiler", Const, 0},
- {"Error", Type, 0},
- {"Frame", Type, 7},
- {"Frame.Entry", Field, 7},
- {"Frame.File", Field, 7},
- {"Frame.Func", Field, 7},
- {"Frame.Function", Field, 7},
- {"Frame.Line", Field, 7},
- {"Frame.PC", Field, 7},
- {"Frames", Type, 7},
- {"Func", Type, 0},
- {"FuncForPC", Func, 0},
- {"GC", Func, 0},
- {"GOARCH", Const, 0},
- {"GOMAXPROCS", Func, 0},
- {"GOOS", Const, 0},
- {"GOROOT", Func, 0},
- {"Goexit", Func, 0},
- {"GoroutineProfile", Func, 0},
- {"Gosched", Func, 0},
- {"KeepAlive", Func, 7},
- {"LockOSThread", Func, 0},
- {"MemProfile", Func, 0},
- {"MemProfileRate", Var, 0},
- {"MemProfileRecord", Type, 0},
- {"MemProfileRecord.AllocBytes", Field, 0},
- {"MemProfileRecord.AllocObjects", Field, 0},
- {"MemProfileRecord.FreeBytes", Field, 0},
- {"MemProfileRecord.FreeObjects", Field, 0},
- {"MemProfileRecord.Stack0", Field, 0},
- {"MemStats", Type, 0},
- {"MemStats.Alloc", Field, 0},
- {"MemStats.BuckHashSys", Field, 0},
- {"MemStats.BySize", Field, 0},
- {"MemStats.DebugGC", Field, 0},
- {"MemStats.EnableGC", Field, 0},
- {"MemStats.Frees", Field, 0},
- {"MemStats.GCCPUFraction", Field, 5},
- {"MemStats.GCSys", Field, 2},
- {"MemStats.HeapAlloc", Field, 0},
- {"MemStats.HeapIdle", Field, 0},
- {"MemStats.HeapInuse", Field, 0},
- {"MemStats.HeapObjects", Field, 0},
- {"MemStats.HeapReleased", Field, 0},
- {"MemStats.HeapSys", Field, 0},
- {"MemStats.LastGC", Field, 0},
- {"MemStats.Lookups", Field, 0},
- {"MemStats.MCacheInuse", Field, 0},
- {"MemStats.MCacheSys", Field, 0},
- {"MemStats.MSpanInuse", Field, 0},
- {"MemStats.MSpanSys", Field, 0},
- {"MemStats.Mallocs", Field, 0},
- {"MemStats.NextGC", Field, 0},
- {"MemStats.NumForcedGC", Field, 8},
- {"MemStats.NumGC", Field, 0},
- {"MemStats.OtherSys", Field, 2},
- {"MemStats.PauseEnd", Field, 4},
- {"MemStats.PauseNs", Field, 0},
- {"MemStats.PauseTotalNs", Field, 0},
- {"MemStats.StackInuse", Field, 0},
- {"MemStats.StackSys", Field, 0},
- {"MemStats.Sys", Field, 0},
- {"MemStats.TotalAlloc", Field, 0},
- {"MutexProfile", Func, 8},
- {"NumCPU", Func, 0},
- {"NumCgoCall", Func, 0},
- {"NumGoroutine", Func, 0},
- {"PanicNilError", Type, 21},
- {"Pinner", Type, 21},
- {"ReadMemStats", Func, 0},
- {"ReadTrace", Func, 5},
- {"SetBlockProfileRate", Func, 1},
- {"SetCPUProfileRate", Func, 0},
- {"SetCgoTraceback", Func, 7},
- {"SetFinalizer", Func, 0},
- {"SetMutexProfileFraction", Func, 8},
- {"Stack", Func, 0},
- {"StackRecord", Type, 0},
- {"StackRecord.Stack0", Field, 0},
- {"StartTrace", Func, 5},
- {"StopTrace", Func, 5},
- {"ThreadCreateProfile", Func, 0},
- {"TypeAssertionError", Type, 0},
- {"UnlockOSThread", Func, 0},
- {"Version", Func, 0},
- },
- "runtime/cgo": {
- {"(Handle).Delete", Method, 17},
- {"(Handle).Value", Method, 17},
- {"Handle", Type, 17},
- {"Incomplete", Type, 20},
- {"NewHandle", Func, 17},
- },
- "runtime/coverage": {
- {"ClearCounters", Func, 20},
- {"WriteCounters", Func, 20},
- {"WriteCountersDir", Func, 20},
- {"WriteMeta", Func, 20},
- {"WriteMetaDir", Func, 20},
- },
- "runtime/debug": {
- {"(*BuildInfo).String", Method, 18},
- {"BuildInfo", Type, 12},
- {"BuildInfo.Deps", Field, 12},
- {"BuildInfo.GoVersion", Field, 18},
- {"BuildInfo.Main", Field, 12},
- {"BuildInfo.Path", Field, 12},
- {"BuildInfo.Settings", Field, 18},
- {"BuildSetting", Type, 18},
- {"BuildSetting.Key", Field, 18},
- {"BuildSetting.Value", Field, 18},
- {"CrashOptions", Type, 23},
- {"FreeOSMemory", Func, 1},
- {"GCStats", Type, 1},
- {"GCStats.LastGC", Field, 1},
- {"GCStats.NumGC", Field, 1},
- {"GCStats.Pause", Field, 1},
- {"GCStats.PauseEnd", Field, 4},
- {"GCStats.PauseQuantiles", Field, 1},
- {"GCStats.PauseTotal", Field, 1},
- {"Module", Type, 12},
- {"Module.Path", Field, 12},
- {"Module.Replace", Field, 12},
- {"Module.Sum", Field, 12},
- {"Module.Version", Field, 12},
- {"ParseBuildInfo", Func, 18},
- {"PrintStack", Func, 0},
- {"ReadBuildInfo", Func, 12},
- {"ReadGCStats", Func, 1},
- {"SetCrashOutput", Func, 23},
- {"SetGCPercent", Func, 1},
- {"SetMaxStack", Func, 2},
- {"SetMaxThreads", Func, 2},
- {"SetMemoryLimit", Func, 19},
- {"SetPanicOnFault", Func, 3},
- {"SetTraceback", Func, 6},
- {"Stack", Func, 0},
- {"WriteHeapDump", Func, 3},
- },
- "runtime/metrics": {
- {"(Value).Float64", Method, 16},
- {"(Value).Float64Histogram", Method, 16},
- {"(Value).Kind", Method, 16},
- {"(Value).Uint64", Method, 16},
- {"All", Func, 16},
- {"Description", Type, 16},
- {"Description.Cumulative", Field, 16},
- {"Description.Description", Field, 16},
- {"Description.Kind", Field, 16},
- {"Description.Name", Field, 16},
- {"Float64Histogram", Type, 16},
- {"Float64Histogram.Buckets", Field, 16},
- {"Float64Histogram.Counts", Field, 16},
- {"KindBad", Const, 16},
- {"KindFloat64", Const, 16},
- {"KindFloat64Histogram", Const, 16},
- {"KindUint64", Const, 16},
- {"Read", Func, 16},
- {"Sample", Type, 16},
- {"Sample.Name", Field, 16},
- {"Sample.Value", Field, 16},
- {"Value", Type, 16},
- {"ValueKind", Type, 16},
- },
- "runtime/pprof": {
- {"(*Profile).Add", Method, 0},
- {"(*Profile).Count", Method, 0},
- {"(*Profile).Name", Method, 0},
- {"(*Profile).Remove", Method, 0},
- {"(*Profile).WriteTo", Method, 0},
- {"Do", Func, 9},
- {"ForLabels", Func, 9},
- {"Label", Func, 9},
- {"LabelSet", Type, 9},
- {"Labels", Func, 9},
- {"Lookup", Func, 0},
- {"NewProfile", Func, 0},
- {"Profile", Type, 0},
- {"Profiles", Func, 0},
- {"SetGoroutineLabels", Func, 9},
- {"StartCPUProfile", Func, 0},
- {"StopCPUProfile", Func, 0},
- {"WithLabels", Func, 9},
- {"WriteHeapProfile", Func, 0},
- },
- "runtime/trace": {
- {"(*Region).End", Method, 11},
- {"(*Task).End", Method, 11},
- {"IsEnabled", Func, 11},
- {"Log", Func, 11},
- {"Logf", Func, 11},
- {"NewTask", Func, 11},
- {"Region", Type, 11},
- {"Start", Func, 5},
- {"StartRegion", Func, 11},
- {"Stop", Func, 5},
- {"Task", Type, 11},
- {"WithRegion", Func, 11},
- },
- "slices": {
- {"All", Func, 23},
- {"AppendSeq", Func, 23},
- {"Backward", Func, 23},
- {"BinarySearch", Func, 21},
- {"BinarySearchFunc", Func, 21},
- {"Chunk", Func, 23},
- {"Clip", Func, 21},
- {"Clone", Func, 21},
- {"Collect", Func, 23},
- {"Compact", Func, 21},
- {"CompactFunc", Func, 21},
- {"Compare", Func, 21},
- {"CompareFunc", Func, 21},
- {"Concat", Func, 22},
- {"Contains", Func, 21},
- {"ContainsFunc", Func, 21},
- {"Delete", Func, 21},
- {"DeleteFunc", Func, 21},
- {"Equal", Func, 21},
- {"EqualFunc", Func, 21},
- {"Grow", Func, 21},
- {"Index", Func, 21},
- {"IndexFunc", Func, 21},
- {"Insert", Func, 21},
- {"IsSorted", Func, 21},
- {"IsSortedFunc", Func, 21},
- {"Max", Func, 21},
- {"MaxFunc", Func, 21},
- {"Min", Func, 21},
- {"MinFunc", Func, 21},
- {"Repeat", Func, 23},
- {"Replace", Func, 21},
- {"Reverse", Func, 21},
- {"Sort", Func, 21},
- {"SortFunc", Func, 21},
- {"SortStableFunc", Func, 21},
- {"Sorted", Func, 23},
- {"SortedFunc", Func, 23},
- {"SortedStableFunc", Func, 23},
- {"Values", Func, 23},
- },
- "sort": {
- {"(Float64Slice).Len", Method, 0},
- {"(Float64Slice).Less", Method, 0},
- {"(Float64Slice).Search", Method, 0},
- {"(Float64Slice).Sort", Method, 0},
- {"(Float64Slice).Swap", Method, 0},
- {"(IntSlice).Len", Method, 0},
- {"(IntSlice).Less", Method, 0},
- {"(IntSlice).Search", Method, 0},
- {"(IntSlice).Sort", Method, 0},
- {"(IntSlice).Swap", Method, 0},
- {"(StringSlice).Len", Method, 0},
- {"(StringSlice).Less", Method, 0},
- {"(StringSlice).Search", Method, 0},
- {"(StringSlice).Sort", Method, 0},
- {"(StringSlice).Swap", Method, 0},
- {"Find", Func, 19},
- {"Float64Slice", Type, 0},
- {"Float64s", Func, 0},
- {"Float64sAreSorted", Func, 0},
- {"IntSlice", Type, 0},
- {"Interface", Type, 0},
- {"Ints", Func, 0},
- {"IntsAreSorted", Func, 0},
- {"IsSorted", Func, 0},
- {"Reverse", Func, 1},
- {"Search", Func, 0},
- {"SearchFloat64s", Func, 0},
- {"SearchInts", Func, 0},
- {"SearchStrings", Func, 0},
- {"Slice", Func, 8},
- {"SliceIsSorted", Func, 8},
- {"SliceStable", Func, 8},
- {"Sort", Func, 0},
- {"Stable", Func, 2},
- {"StringSlice", Type, 0},
- {"Strings", Func, 0},
- {"StringsAreSorted", Func, 0},
- },
- "strconv": {
- {"(*NumError).Error", Method, 0},
- {"(*NumError).Unwrap", Method, 14},
- {"AppendBool", Func, 0},
- {"AppendFloat", Func, 0},
- {"AppendInt", Func, 0},
- {"AppendQuote", Func, 0},
- {"AppendQuoteRune", Func, 0},
- {"AppendQuoteRuneToASCII", Func, 0},
- {"AppendQuoteRuneToGraphic", Func, 6},
- {"AppendQuoteToASCII", Func, 0},
- {"AppendQuoteToGraphic", Func, 6},
- {"AppendUint", Func, 0},
- {"Atoi", Func, 0},
- {"CanBackquote", Func, 0},
- {"ErrRange", Var, 0},
- {"ErrSyntax", Var, 0},
- {"FormatBool", Func, 0},
- {"FormatComplex", Func, 15},
- {"FormatFloat", Func, 0},
- {"FormatInt", Func, 0},
- {"FormatUint", Func, 0},
- {"IntSize", Const, 0},
- {"IsGraphic", Func, 6},
- {"IsPrint", Func, 0},
- {"Itoa", Func, 0},
- {"NumError", Type, 0},
- {"NumError.Err", Field, 0},
- {"NumError.Func", Field, 0},
- {"NumError.Num", Field, 0},
- {"ParseBool", Func, 0},
- {"ParseComplex", Func, 15},
- {"ParseFloat", Func, 0},
- {"ParseInt", Func, 0},
- {"ParseUint", Func, 0},
- {"Quote", Func, 0},
- {"QuoteRune", Func, 0},
- {"QuoteRuneToASCII", Func, 0},
- {"QuoteRuneToGraphic", Func, 6},
- {"QuoteToASCII", Func, 0},
- {"QuoteToGraphic", Func, 6},
- {"QuotedPrefix", Func, 17},
- {"Unquote", Func, 0},
- {"UnquoteChar", Func, 0},
- },
- "strings": {
- {"(*Builder).Cap", Method, 12},
- {"(*Builder).Grow", Method, 10},
- {"(*Builder).Len", Method, 10},
- {"(*Builder).Reset", Method, 10},
- {"(*Builder).String", Method, 10},
- {"(*Builder).Write", Method, 10},
- {"(*Builder).WriteByte", Method, 10},
- {"(*Builder).WriteRune", Method, 10},
- {"(*Builder).WriteString", Method, 10},
- {"(*Reader).Len", Method, 0},
- {"(*Reader).Read", Method, 0},
- {"(*Reader).ReadAt", Method, 0},
- {"(*Reader).ReadByte", Method, 0},
- {"(*Reader).ReadRune", Method, 0},
- {"(*Reader).Reset", Method, 7},
- {"(*Reader).Seek", Method, 0},
- {"(*Reader).Size", Method, 5},
- {"(*Reader).UnreadByte", Method, 0},
- {"(*Reader).UnreadRune", Method, 0},
- {"(*Reader).WriteTo", Method, 1},
- {"(*Replacer).Replace", Method, 0},
- {"(*Replacer).WriteString", Method, 0},
- {"Builder", Type, 10},
- {"Clone", Func, 18},
- {"Compare", Func, 5},
- {"Contains", Func, 0},
- {"ContainsAny", Func, 0},
- {"ContainsFunc", Func, 21},
- {"ContainsRune", Func, 0},
- {"Count", Func, 0},
- {"Cut", Func, 18},
- {"CutPrefix", Func, 20},
- {"CutSuffix", Func, 20},
- {"EqualFold", Func, 0},
- {"Fields", Func, 0},
- {"FieldsFunc", Func, 0},
- {"HasPrefix", Func, 0},
- {"HasSuffix", Func, 0},
- {"Index", Func, 0},
- {"IndexAny", Func, 0},
- {"IndexByte", Func, 2},
- {"IndexFunc", Func, 0},
- {"IndexRune", Func, 0},
- {"Join", Func, 0},
- {"LastIndex", Func, 0},
- {"LastIndexAny", Func, 0},
- {"LastIndexByte", Func, 5},
- {"LastIndexFunc", Func, 0},
- {"Map", Func, 0},
- {"NewReader", Func, 0},
- {"NewReplacer", Func, 0},
- {"Reader", Type, 0},
- {"Repeat", Func, 0},
- {"Replace", Func, 0},
- {"ReplaceAll", Func, 12},
- {"Replacer", Type, 0},
- {"Split", Func, 0},
- {"SplitAfter", Func, 0},
- {"SplitAfterN", Func, 0},
- {"SplitN", Func, 0},
- {"Title", Func, 0},
- {"ToLower", Func, 0},
- {"ToLowerSpecial", Func, 0},
- {"ToTitle", Func, 0},
- {"ToTitleSpecial", Func, 0},
- {"ToUpper", Func, 0},
- {"ToUpperSpecial", Func, 0},
- {"ToValidUTF8", Func, 13},
- {"Trim", Func, 0},
- {"TrimFunc", Func, 0},
- {"TrimLeft", Func, 0},
- {"TrimLeftFunc", Func, 0},
- {"TrimPrefix", Func, 1},
- {"TrimRight", Func, 0},
- {"TrimRightFunc", Func, 0},
- {"TrimSpace", Func, 0},
- {"TrimSuffix", Func, 1},
- },
- "structs": {
- {"HostLayout", Type, 23},
- },
- "sync": {
- {"(*Cond).Broadcast", Method, 0},
- {"(*Cond).Signal", Method, 0},
- {"(*Cond).Wait", Method, 0},
- {"(*Map).Clear", Method, 23},
- {"(*Map).CompareAndDelete", Method, 20},
- {"(*Map).CompareAndSwap", Method, 20},
- {"(*Map).Delete", Method, 9},
- {"(*Map).Load", Method, 9},
- {"(*Map).LoadAndDelete", Method, 15},
- {"(*Map).LoadOrStore", Method, 9},
- {"(*Map).Range", Method, 9},
- {"(*Map).Store", Method, 9},
- {"(*Map).Swap", Method, 20},
- {"(*Mutex).Lock", Method, 0},
- {"(*Mutex).TryLock", Method, 18},
- {"(*Mutex).Unlock", Method, 0},
- {"(*Once).Do", Method, 0},
- {"(*Pool).Get", Method, 3},
- {"(*Pool).Put", Method, 3},
- {"(*RWMutex).Lock", Method, 0},
- {"(*RWMutex).RLock", Method, 0},
- {"(*RWMutex).RLocker", Method, 0},
- {"(*RWMutex).RUnlock", Method, 0},
- {"(*RWMutex).TryLock", Method, 18},
- {"(*RWMutex).TryRLock", Method, 18},
- {"(*RWMutex).Unlock", Method, 0},
- {"(*WaitGroup).Add", Method, 0},
- {"(*WaitGroup).Done", Method, 0},
- {"(*WaitGroup).Wait", Method, 0},
- {"Cond", Type, 0},
- {"Cond.L", Field, 0},
- {"Locker", Type, 0},
- {"Map", Type, 9},
- {"Mutex", Type, 0},
- {"NewCond", Func, 0},
- {"Once", Type, 0},
- {"OnceFunc", Func, 21},
- {"OnceValue", Func, 21},
- {"OnceValues", Func, 21},
- {"Pool", Type, 3},
- {"Pool.New", Field, 3},
- {"RWMutex", Type, 0},
- {"WaitGroup", Type, 0},
- },
- "sync/atomic": {
- {"(*Bool).CompareAndSwap", Method, 19},
- {"(*Bool).Load", Method, 19},
- {"(*Bool).Store", Method, 19},
- {"(*Bool).Swap", Method, 19},
- {"(*Int32).Add", Method, 19},
- {"(*Int32).And", Method, 23},
- {"(*Int32).CompareAndSwap", Method, 19},
- {"(*Int32).Load", Method, 19},
- {"(*Int32).Or", Method, 23},
- {"(*Int32).Store", Method, 19},
- {"(*Int32).Swap", Method, 19},
- {"(*Int64).Add", Method, 19},
- {"(*Int64).And", Method, 23},
- {"(*Int64).CompareAndSwap", Method, 19},
- {"(*Int64).Load", Method, 19},
- {"(*Int64).Or", Method, 23},
- {"(*Int64).Store", Method, 19},
- {"(*Int64).Swap", Method, 19},
- {"(*Pointer).CompareAndSwap", Method, 19},
- {"(*Pointer).Load", Method, 19},
- {"(*Pointer).Store", Method, 19},
- {"(*Pointer).Swap", Method, 19},
- {"(*Uint32).Add", Method, 19},
- {"(*Uint32).And", Method, 23},
- {"(*Uint32).CompareAndSwap", Method, 19},
- {"(*Uint32).Load", Method, 19},
- {"(*Uint32).Or", Method, 23},
- {"(*Uint32).Store", Method, 19},
- {"(*Uint32).Swap", Method, 19},
- {"(*Uint64).Add", Method, 19},
- {"(*Uint64).And", Method, 23},
- {"(*Uint64).CompareAndSwap", Method, 19},
- {"(*Uint64).Load", Method, 19},
- {"(*Uint64).Or", Method, 23},
- {"(*Uint64).Store", Method, 19},
- {"(*Uint64).Swap", Method, 19},
- {"(*Uintptr).Add", Method, 19},
- {"(*Uintptr).And", Method, 23},
- {"(*Uintptr).CompareAndSwap", Method, 19},
- {"(*Uintptr).Load", Method, 19},
- {"(*Uintptr).Or", Method, 23},
- {"(*Uintptr).Store", Method, 19},
- {"(*Uintptr).Swap", Method, 19},
- {"(*Value).CompareAndSwap", Method, 17},
- {"(*Value).Load", Method, 4},
- {"(*Value).Store", Method, 4},
- {"(*Value).Swap", Method, 17},
- {"AddInt32", Func, 0},
- {"AddInt64", Func, 0},
- {"AddUint32", Func, 0},
- {"AddUint64", Func, 0},
- {"AddUintptr", Func, 0},
- {"AndInt32", Func, 23},
- {"AndInt64", Func, 23},
- {"AndUint32", Func, 23},
- {"AndUint64", Func, 23},
- {"AndUintptr", Func, 23},
- {"Bool", Type, 19},
- {"CompareAndSwapInt32", Func, 0},
- {"CompareAndSwapInt64", Func, 0},
- {"CompareAndSwapPointer", Func, 0},
- {"CompareAndSwapUint32", Func, 0},
- {"CompareAndSwapUint64", Func, 0},
- {"CompareAndSwapUintptr", Func, 0},
- {"Int32", Type, 19},
- {"Int64", Type, 19},
- {"LoadInt32", Func, 0},
- {"LoadInt64", Func, 0},
- {"LoadPointer", Func, 0},
- {"LoadUint32", Func, 0},
- {"LoadUint64", Func, 0},
- {"LoadUintptr", Func, 0},
- {"OrInt32", Func, 23},
- {"OrInt64", Func, 23},
- {"OrUint32", Func, 23},
- {"OrUint64", Func, 23},
- {"OrUintptr", Func, 23},
- {"Pointer", Type, 19},
- {"StoreInt32", Func, 0},
- {"StoreInt64", Func, 0},
- {"StorePointer", Func, 0},
- {"StoreUint32", Func, 0},
- {"StoreUint64", Func, 0},
- {"StoreUintptr", Func, 0},
- {"SwapInt32", Func, 2},
- {"SwapInt64", Func, 2},
- {"SwapPointer", Func, 2},
- {"SwapUint32", Func, 2},
- {"SwapUint64", Func, 2},
- {"SwapUintptr", Func, 2},
- {"Uint32", Type, 19},
- {"Uint64", Type, 19},
- {"Uintptr", Type, 19},
- {"Value", Type, 4},
- },
- "syscall": {
- {"(*Cmsghdr).SetLen", Method, 0},
- {"(*DLL).FindProc", Method, 0},
- {"(*DLL).MustFindProc", Method, 0},
- {"(*DLL).Release", Method, 0},
- {"(*DLLError).Error", Method, 0},
- {"(*DLLError).Unwrap", Method, 16},
- {"(*Filetime).Nanoseconds", Method, 0},
- {"(*Iovec).SetLen", Method, 0},
- {"(*LazyDLL).Handle", Method, 0},
- {"(*LazyDLL).Load", Method, 0},
- {"(*LazyDLL).NewProc", Method, 0},
- {"(*LazyProc).Addr", Method, 0},
- {"(*LazyProc).Call", Method, 0},
- {"(*LazyProc).Find", Method, 0},
- {"(*Msghdr).SetControllen", Method, 0},
- {"(*Proc).Addr", Method, 0},
- {"(*Proc).Call", Method, 0},
- {"(*PtraceRegs).PC", Method, 0},
- {"(*PtraceRegs).SetPC", Method, 0},
- {"(*RawSockaddrAny).Sockaddr", Method, 0},
- {"(*SID).Copy", Method, 0},
- {"(*SID).Len", Method, 0},
- {"(*SID).LookupAccount", Method, 0},
- {"(*SID).String", Method, 0},
- {"(*Timespec).Nano", Method, 0},
- {"(*Timespec).Unix", Method, 0},
- {"(*Timeval).Nano", Method, 0},
- {"(*Timeval).Nanoseconds", Method, 0},
- {"(*Timeval).Unix", Method, 0},
- {"(Errno).Error", Method, 0},
- {"(Errno).Is", Method, 13},
- {"(Errno).Temporary", Method, 0},
- {"(Errno).Timeout", Method, 0},
- {"(Signal).Signal", Method, 0},
- {"(Signal).String", Method, 0},
- {"(Token).Close", Method, 0},
- {"(Token).GetTokenPrimaryGroup", Method, 0},
- {"(Token).GetTokenUser", Method, 0},
- {"(Token).GetUserProfileDirectory", Method, 0},
- {"(WaitStatus).Continued", Method, 0},
- {"(WaitStatus).CoreDump", Method, 0},
- {"(WaitStatus).ExitStatus", Method, 0},
- {"(WaitStatus).Exited", Method, 0},
- {"(WaitStatus).Signal", Method, 0},
- {"(WaitStatus).Signaled", Method, 0},
- {"(WaitStatus).StopSignal", Method, 0},
- {"(WaitStatus).Stopped", Method, 0},
- {"(WaitStatus).TrapCause", Method, 0},
- {"AF_ALG", Const, 0},
- {"AF_APPLETALK", Const, 0},
- {"AF_ARP", Const, 0},
- {"AF_ASH", Const, 0},
- {"AF_ATM", Const, 0},
- {"AF_ATMPVC", Const, 0},
- {"AF_ATMSVC", Const, 0},
- {"AF_AX25", Const, 0},
- {"AF_BLUETOOTH", Const, 0},
- {"AF_BRIDGE", Const, 0},
- {"AF_CAIF", Const, 0},
- {"AF_CAN", Const, 0},
- {"AF_CCITT", Const, 0},
- {"AF_CHAOS", Const, 0},
- {"AF_CNT", Const, 0},
- {"AF_COIP", Const, 0},
- {"AF_DATAKIT", Const, 0},
- {"AF_DECnet", Const, 0},
- {"AF_DLI", Const, 0},
- {"AF_E164", Const, 0},
- {"AF_ECMA", Const, 0},
- {"AF_ECONET", Const, 0},
- {"AF_ENCAP", Const, 1},
- {"AF_FILE", Const, 0},
- {"AF_HYLINK", Const, 0},
- {"AF_IEEE80211", Const, 0},
- {"AF_IEEE802154", Const, 0},
- {"AF_IMPLINK", Const, 0},
- {"AF_INET", Const, 0},
- {"AF_INET6", Const, 0},
- {"AF_INET6_SDP", Const, 3},
- {"AF_INET_SDP", Const, 3},
- {"AF_IPX", Const, 0},
- {"AF_IRDA", Const, 0},
- {"AF_ISDN", Const, 0},
- {"AF_ISO", Const, 0},
- {"AF_IUCV", Const, 0},
- {"AF_KEY", Const, 0},
- {"AF_LAT", Const, 0},
- {"AF_LINK", Const, 0},
- {"AF_LLC", Const, 0},
- {"AF_LOCAL", Const, 0},
- {"AF_MAX", Const, 0},
- {"AF_MPLS", Const, 1},
- {"AF_NATM", Const, 0},
- {"AF_NDRV", Const, 0},
- {"AF_NETBEUI", Const, 0},
- {"AF_NETBIOS", Const, 0},
- {"AF_NETGRAPH", Const, 0},
- {"AF_NETLINK", Const, 0},
- {"AF_NETROM", Const, 0},
- {"AF_NS", Const, 0},
- {"AF_OROUTE", Const, 1},
- {"AF_OSI", Const, 0},
- {"AF_PACKET", Const, 0},
- {"AF_PHONET", Const, 0},
- {"AF_PPP", Const, 0},
- {"AF_PPPOX", Const, 0},
- {"AF_PUP", Const, 0},
- {"AF_RDS", Const, 0},
- {"AF_RESERVED_36", Const, 0},
- {"AF_ROSE", Const, 0},
- {"AF_ROUTE", Const, 0},
- {"AF_RXRPC", Const, 0},
- {"AF_SCLUSTER", Const, 0},
- {"AF_SECURITY", Const, 0},
- {"AF_SIP", Const, 0},
- {"AF_SLOW", Const, 0},
- {"AF_SNA", Const, 0},
- {"AF_SYSTEM", Const, 0},
- {"AF_TIPC", Const, 0},
- {"AF_UNIX", Const, 0},
- {"AF_UNSPEC", Const, 0},
- {"AF_UTUN", Const, 16},
- {"AF_VENDOR00", Const, 0},
- {"AF_VENDOR01", Const, 0},
- {"AF_VENDOR02", Const, 0},
- {"AF_VENDOR03", Const, 0},
- {"AF_VENDOR04", Const, 0},
- {"AF_VENDOR05", Const, 0},
- {"AF_VENDOR06", Const, 0},
- {"AF_VENDOR07", Const, 0},
- {"AF_VENDOR08", Const, 0},
- {"AF_VENDOR09", Const, 0},
- {"AF_VENDOR10", Const, 0},
- {"AF_VENDOR11", Const, 0},
- {"AF_VENDOR12", Const, 0},
- {"AF_VENDOR13", Const, 0},
- {"AF_VENDOR14", Const, 0},
- {"AF_VENDOR15", Const, 0},
- {"AF_VENDOR16", Const, 0},
- {"AF_VENDOR17", Const, 0},
- {"AF_VENDOR18", Const, 0},
- {"AF_VENDOR19", Const, 0},
- {"AF_VENDOR20", Const, 0},
- {"AF_VENDOR21", Const, 0},
- {"AF_VENDOR22", Const, 0},
- {"AF_VENDOR23", Const, 0},
- {"AF_VENDOR24", Const, 0},
- {"AF_VENDOR25", Const, 0},
- {"AF_VENDOR26", Const, 0},
- {"AF_VENDOR27", Const, 0},
- {"AF_VENDOR28", Const, 0},
- {"AF_VENDOR29", Const, 0},
- {"AF_VENDOR30", Const, 0},
- {"AF_VENDOR31", Const, 0},
- {"AF_VENDOR32", Const, 0},
- {"AF_VENDOR33", Const, 0},
- {"AF_VENDOR34", Const, 0},
- {"AF_VENDOR35", Const, 0},
- {"AF_VENDOR36", Const, 0},
- {"AF_VENDOR37", Const, 0},
- {"AF_VENDOR38", Const, 0},
- {"AF_VENDOR39", Const, 0},
- {"AF_VENDOR40", Const, 0},
- {"AF_VENDOR41", Const, 0},
- {"AF_VENDOR42", Const, 0},
- {"AF_VENDOR43", Const, 0},
- {"AF_VENDOR44", Const, 0},
- {"AF_VENDOR45", Const, 0},
- {"AF_VENDOR46", Const, 0},
- {"AF_VENDOR47", Const, 0},
- {"AF_WANPIPE", Const, 0},
- {"AF_X25", Const, 0},
- {"AI_CANONNAME", Const, 1},
- {"AI_NUMERICHOST", Const, 1},
- {"AI_PASSIVE", Const, 1},
- {"APPLICATION_ERROR", Const, 0},
- {"ARPHRD_ADAPT", Const, 0},
- {"ARPHRD_APPLETLK", Const, 0},
- {"ARPHRD_ARCNET", Const, 0},
- {"ARPHRD_ASH", Const, 0},
- {"ARPHRD_ATM", Const, 0},
- {"ARPHRD_AX25", Const, 0},
- {"ARPHRD_BIF", Const, 0},
- {"ARPHRD_CHAOS", Const, 0},
- {"ARPHRD_CISCO", Const, 0},
- {"ARPHRD_CSLIP", Const, 0},
- {"ARPHRD_CSLIP6", Const, 0},
- {"ARPHRD_DDCMP", Const, 0},
- {"ARPHRD_DLCI", Const, 0},
- {"ARPHRD_ECONET", Const, 0},
- {"ARPHRD_EETHER", Const, 0},
- {"ARPHRD_ETHER", Const, 0},
- {"ARPHRD_EUI64", Const, 0},
- {"ARPHRD_FCAL", Const, 0},
- {"ARPHRD_FCFABRIC", Const, 0},
- {"ARPHRD_FCPL", Const, 0},
- {"ARPHRD_FCPP", Const, 0},
- {"ARPHRD_FDDI", Const, 0},
- {"ARPHRD_FRAD", Const, 0},
- {"ARPHRD_FRELAY", Const, 1},
- {"ARPHRD_HDLC", Const, 0},
- {"ARPHRD_HIPPI", Const, 0},
- {"ARPHRD_HWX25", Const, 0},
- {"ARPHRD_IEEE1394", Const, 0},
- {"ARPHRD_IEEE802", Const, 0},
- {"ARPHRD_IEEE80211", Const, 0},
- {"ARPHRD_IEEE80211_PRISM", Const, 0},
- {"ARPHRD_IEEE80211_RADIOTAP", Const, 0},
- {"ARPHRD_IEEE802154", Const, 0},
- {"ARPHRD_IEEE802154_PHY", Const, 0},
- {"ARPHRD_IEEE802_TR", Const, 0},
- {"ARPHRD_INFINIBAND", Const, 0},
- {"ARPHRD_IPDDP", Const, 0},
- {"ARPHRD_IPGRE", Const, 0},
- {"ARPHRD_IRDA", Const, 0},
- {"ARPHRD_LAPB", Const, 0},
- {"ARPHRD_LOCALTLK", Const, 0},
- {"ARPHRD_LOOPBACK", Const, 0},
- {"ARPHRD_METRICOM", Const, 0},
- {"ARPHRD_NETROM", Const, 0},
- {"ARPHRD_NONE", Const, 0},
- {"ARPHRD_PIMREG", Const, 0},
- {"ARPHRD_PPP", Const, 0},
- {"ARPHRD_PRONET", Const, 0},
- {"ARPHRD_RAWHDLC", Const, 0},
- {"ARPHRD_ROSE", Const, 0},
- {"ARPHRD_RSRVD", Const, 0},
- {"ARPHRD_SIT", Const, 0},
- {"ARPHRD_SKIP", Const, 0},
- {"ARPHRD_SLIP", Const, 0},
- {"ARPHRD_SLIP6", Const, 0},
- {"ARPHRD_STRIP", Const, 1},
- {"ARPHRD_TUNNEL", Const, 0},
- {"ARPHRD_TUNNEL6", Const, 0},
- {"ARPHRD_VOID", Const, 0},
- {"ARPHRD_X25", Const, 0},
- {"AUTHTYPE_CLIENT", Const, 0},
- {"AUTHTYPE_SERVER", Const, 0},
- {"Accept", Func, 0},
- {"Accept4", Func, 1},
- {"AcceptEx", Func, 0},
- {"Access", Func, 0},
- {"Acct", Func, 0},
- {"AddrinfoW", Type, 1},
- {"AddrinfoW.Addr", Field, 1},
- {"AddrinfoW.Addrlen", Field, 1},
- {"AddrinfoW.Canonname", Field, 1},
- {"AddrinfoW.Family", Field, 1},
- {"AddrinfoW.Flags", Field, 1},
- {"AddrinfoW.Next", Field, 1},
- {"AddrinfoW.Protocol", Field, 1},
- {"AddrinfoW.Socktype", Field, 1},
- {"Adjtime", Func, 0},
- {"Adjtimex", Func, 0},
- {"AllThreadsSyscall", Func, 16},
- {"AllThreadsSyscall6", Func, 16},
- {"AttachLsf", Func, 0},
- {"B0", Const, 0},
- {"B1000000", Const, 0},
- {"B110", Const, 0},
- {"B115200", Const, 0},
- {"B1152000", Const, 0},
- {"B1200", Const, 0},
- {"B134", Const, 0},
- {"B14400", Const, 1},
- {"B150", Const, 0},
- {"B1500000", Const, 0},
- {"B1800", Const, 0},
- {"B19200", Const, 0},
- {"B200", Const, 0},
- {"B2000000", Const, 0},
- {"B230400", Const, 0},
- {"B2400", Const, 0},
- {"B2500000", Const, 0},
- {"B28800", Const, 1},
- {"B300", Const, 0},
- {"B3000000", Const, 0},
- {"B3500000", Const, 0},
- {"B38400", Const, 0},
- {"B4000000", Const, 0},
- {"B460800", Const, 0},
- {"B4800", Const, 0},
- {"B50", Const, 0},
- {"B500000", Const, 0},
- {"B57600", Const, 0},
- {"B576000", Const, 0},
- {"B600", Const, 0},
- {"B7200", Const, 1},
- {"B75", Const, 0},
- {"B76800", Const, 1},
- {"B921600", Const, 0},
- {"B9600", Const, 0},
- {"BASE_PROTOCOL", Const, 2},
- {"BIOCFEEDBACK", Const, 0},
- {"BIOCFLUSH", Const, 0},
- {"BIOCGBLEN", Const, 0},
- {"BIOCGDIRECTION", Const, 0},
- {"BIOCGDIRFILT", Const, 1},
- {"BIOCGDLT", Const, 0},
- {"BIOCGDLTLIST", Const, 0},
- {"BIOCGETBUFMODE", Const, 0},
- {"BIOCGETIF", Const, 0},
- {"BIOCGETZMAX", Const, 0},
- {"BIOCGFEEDBACK", Const, 1},
- {"BIOCGFILDROP", Const, 1},
- {"BIOCGHDRCMPLT", Const, 0},
- {"BIOCGRSIG", Const, 0},
- {"BIOCGRTIMEOUT", Const, 0},
- {"BIOCGSEESENT", Const, 0},
- {"BIOCGSTATS", Const, 0},
- {"BIOCGSTATSOLD", Const, 1},
- {"BIOCGTSTAMP", Const, 1},
- {"BIOCIMMEDIATE", Const, 0},
- {"BIOCLOCK", Const, 0},
- {"BIOCPROMISC", Const, 0},
- {"BIOCROTZBUF", Const, 0},
- {"BIOCSBLEN", Const, 0},
- {"BIOCSDIRECTION", Const, 0},
- {"BIOCSDIRFILT", Const, 1},
- {"BIOCSDLT", Const, 0},
- {"BIOCSETBUFMODE", Const, 0},
- {"BIOCSETF", Const, 0},
- {"BIOCSETFNR", Const, 0},
- {"BIOCSETIF", Const, 0},
- {"BIOCSETWF", Const, 0},
- {"BIOCSETZBUF", Const, 0},
- {"BIOCSFEEDBACK", Const, 1},
- {"BIOCSFILDROP", Const, 1},
- {"BIOCSHDRCMPLT", Const, 0},
- {"BIOCSRSIG", Const, 0},
- {"BIOCSRTIMEOUT", Const, 0},
- {"BIOCSSEESENT", Const, 0},
- {"BIOCSTCPF", Const, 1},
- {"BIOCSTSTAMP", Const, 1},
- {"BIOCSUDPF", Const, 1},
- {"BIOCVERSION", Const, 0},
- {"BPF_A", Const, 0},
- {"BPF_ABS", Const, 0},
- {"BPF_ADD", Const, 0},
- {"BPF_ALIGNMENT", Const, 0},
- {"BPF_ALIGNMENT32", Const, 1},
- {"BPF_ALU", Const, 0},
- {"BPF_AND", Const, 0},
- {"BPF_B", Const, 0},
- {"BPF_BUFMODE_BUFFER", Const, 0},
- {"BPF_BUFMODE_ZBUF", Const, 0},
- {"BPF_DFLTBUFSIZE", Const, 1},
- {"BPF_DIRECTION_IN", Const, 1},
- {"BPF_DIRECTION_OUT", Const, 1},
- {"BPF_DIV", Const, 0},
- {"BPF_H", Const, 0},
- {"BPF_IMM", Const, 0},
- {"BPF_IND", Const, 0},
- {"BPF_JA", Const, 0},
- {"BPF_JEQ", Const, 0},
- {"BPF_JGE", Const, 0},
- {"BPF_JGT", Const, 0},
- {"BPF_JMP", Const, 0},
- {"BPF_JSET", Const, 0},
- {"BPF_K", Const, 0},
- {"BPF_LD", Const, 0},
- {"BPF_LDX", Const, 0},
- {"BPF_LEN", Const, 0},
- {"BPF_LSH", Const, 0},
- {"BPF_MAJOR_VERSION", Const, 0},
- {"BPF_MAXBUFSIZE", Const, 0},
- {"BPF_MAXINSNS", Const, 0},
- {"BPF_MEM", Const, 0},
- {"BPF_MEMWORDS", Const, 0},
- {"BPF_MINBUFSIZE", Const, 0},
- {"BPF_MINOR_VERSION", Const, 0},
- {"BPF_MISC", Const, 0},
- {"BPF_MSH", Const, 0},
- {"BPF_MUL", Const, 0},
- {"BPF_NEG", Const, 0},
- {"BPF_OR", Const, 0},
- {"BPF_RELEASE", Const, 0},
- {"BPF_RET", Const, 0},
- {"BPF_RSH", Const, 0},
- {"BPF_ST", Const, 0},
- {"BPF_STX", Const, 0},
- {"BPF_SUB", Const, 0},
- {"BPF_TAX", Const, 0},
- {"BPF_TXA", Const, 0},
- {"BPF_T_BINTIME", Const, 1},
- {"BPF_T_BINTIME_FAST", Const, 1},
- {"BPF_T_BINTIME_MONOTONIC", Const, 1},
- {"BPF_T_BINTIME_MONOTONIC_FAST", Const, 1},
- {"BPF_T_FAST", Const, 1},
- {"BPF_T_FLAG_MASK", Const, 1},
- {"BPF_T_FORMAT_MASK", Const, 1},
- {"BPF_T_MICROTIME", Const, 1},
- {"BPF_T_MICROTIME_FAST", Const, 1},
- {"BPF_T_MICROTIME_MONOTONIC", Const, 1},
- {"BPF_T_MICROTIME_MONOTONIC_FAST", Const, 1},
- {"BPF_T_MONOTONIC", Const, 1},
- {"BPF_T_MONOTONIC_FAST", Const, 1},
- {"BPF_T_NANOTIME", Const, 1},
- {"BPF_T_NANOTIME_FAST", Const, 1},
- {"BPF_T_NANOTIME_MONOTONIC", Const, 1},
- {"BPF_T_NANOTIME_MONOTONIC_FAST", Const, 1},
- {"BPF_T_NONE", Const, 1},
- {"BPF_T_NORMAL", Const, 1},
- {"BPF_W", Const, 0},
- {"BPF_X", Const, 0},
- {"BRKINT", Const, 0},
- {"Bind", Func, 0},
- {"BindToDevice", Func, 0},
- {"BpfBuflen", Func, 0},
- {"BpfDatalink", Func, 0},
- {"BpfHdr", Type, 0},
- {"BpfHdr.Caplen", Field, 0},
- {"BpfHdr.Datalen", Field, 0},
- {"BpfHdr.Hdrlen", Field, 0},
- {"BpfHdr.Pad_cgo_0", Field, 0},
- {"BpfHdr.Tstamp", Field, 0},
- {"BpfHeadercmpl", Func, 0},
- {"BpfInsn", Type, 0},
- {"BpfInsn.Code", Field, 0},
- {"BpfInsn.Jf", Field, 0},
- {"BpfInsn.Jt", Field, 0},
- {"BpfInsn.K", Field, 0},
- {"BpfInterface", Func, 0},
- {"BpfJump", Func, 0},
- {"BpfProgram", Type, 0},
- {"BpfProgram.Insns", Field, 0},
- {"BpfProgram.Len", Field, 0},
- {"BpfProgram.Pad_cgo_0", Field, 0},
- {"BpfStat", Type, 0},
- {"BpfStat.Capt", Field, 2},
- {"BpfStat.Drop", Field, 0},
- {"BpfStat.Padding", Field, 2},
- {"BpfStat.Recv", Field, 0},
- {"BpfStats", Func, 0},
- {"BpfStmt", Func, 0},
- {"BpfTimeout", Func, 0},
- {"BpfTimeval", Type, 2},
- {"BpfTimeval.Sec", Field, 2},
- {"BpfTimeval.Usec", Field, 2},
- {"BpfVersion", Type, 0},
- {"BpfVersion.Major", Field, 0},
- {"BpfVersion.Minor", Field, 0},
- {"BpfZbuf", Type, 0},
- {"BpfZbuf.Bufa", Field, 0},
- {"BpfZbuf.Bufb", Field, 0},
- {"BpfZbuf.Buflen", Field, 0},
- {"BpfZbufHeader", Type, 0},
- {"BpfZbufHeader.Kernel_gen", Field, 0},
- {"BpfZbufHeader.Kernel_len", Field, 0},
- {"BpfZbufHeader.User_gen", Field, 0},
- {"BpfZbufHeader.X_bzh_pad", Field, 0},
- {"ByHandleFileInformation", Type, 0},
- {"ByHandleFileInformation.CreationTime", Field, 0},
- {"ByHandleFileInformation.FileAttributes", Field, 0},
- {"ByHandleFileInformation.FileIndexHigh", Field, 0},
- {"ByHandleFileInformation.FileIndexLow", Field, 0},
- {"ByHandleFileInformation.FileSizeHigh", Field, 0},
- {"ByHandleFileInformation.FileSizeLow", Field, 0},
- {"ByHandleFileInformation.LastAccessTime", Field, 0},
- {"ByHandleFileInformation.LastWriteTime", Field, 0},
- {"ByHandleFileInformation.NumberOfLinks", Field, 0},
- {"ByHandleFileInformation.VolumeSerialNumber", Field, 0},
- {"BytePtrFromString", Func, 1},
- {"ByteSliceFromString", Func, 1},
- {"CCR0_FLUSH", Const, 1},
- {"CERT_CHAIN_POLICY_AUTHENTICODE", Const, 0},
- {"CERT_CHAIN_POLICY_AUTHENTICODE_TS", Const, 0},
- {"CERT_CHAIN_POLICY_BASE", Const, 0},
- {"CERT_CHAIN_POLICY_BASIC_CONSTRAINTS", Const, 0},
- {"CERT_CHAIN_POLICY_EV", Const, 0},
- {"CERT_CHAIN_POLICY_MICROSOFT_ROOT", Const, 0},
- {"CERT_CHAIN_POLICY_NT_AUTH", Const, 0},
- {"CERT_CHAIN_POLICY_SSL", Const, 0},
- {"CERT_E_CN_NO_MATCH", Const, 0},
- {"CERT_E_EXPIRED", Const, 0},
- {"CERT_E_PURPOSE", Const, 0},
- {"CERT_E_ROLE", Const, 0},
- {"CERT_E_UNTRUSTEDROOT", Const, 0},
- {"CERT_STORE_ADD_ALWAYS", Const, 0},
- {"CERT_STORE_DEFER_CLOSE_UNTIL_LAST_FREE_FLAG", Const, 0},
- {"CERT_STORE_PROV_MEMORY", Const, 0},
- {"CERT_TRUST_HAS_EXCLUDED_NAME_CONSTRAINT", Const, 0},
- {"CERT_TRUST_HAS_NOT_DEFINED_NAME_CONSTRAINT", Const, 0},
- {"CERT_TRUST_HAS_NOT_PERMITTED_NAME_CONSTRAINT", Const, 0},
- {"CERT_TRUST_HAS_NOT_SUPPORTED_CRITICAL_EXT", Const, 0},
- {"CERT_TRUST_HAS_NOT_SUPPORTED_NAME_CONSTRAINT", Const, 0},
- {"CERT_TRUST_INVALID_BASIC_CONSTRAINTS", Const, 0},
- {"CERT_TRUST_INVALID_EXTENSION", Const, 0},
- {"CERT_TRUST_INVALID_NAME_CONSTRAINTS", Const, 0},
- {"CERT_TRUST_INVALID_POLICY_CONSTRAINTS", Const, 0},
- {"CERT_TRUST_IS_CYCLIC", Const, 0},
- {"CERT_TRUST_IS_EXPLICIT_DISTRUST", Const, 0},
- {"CERT_TRUST_IS_NOT_SIGNATURE_VALID", Const, 0},
- {"CERT_TRUST_IS_NOT_TIME_VALID", Const, 0},
- {"CERT_TRUST_IS_NOT_VALID_FOR_USAGE", Const, 0},
- {"CERT_TRUST_IS_OFFLINE_REVOCATION", Const, 0},
- {"CERT_TRUST_IS_REVOKED", Const, 0},
- {"CERT_TRUST_IS_UNTRUSTED_ROOT", Const, 0},
- {"CERT_TRUST_NO_ERROR", Const, 0},
- {"CERT_TRUST_NO_ISSUANCE_CHAIN_POLICY", Const, 0},
- {"CERT_TRUST_REVOCATION_STATUS_UNKNOWN", Const, 0},
- {"CFLUSH", Const, 1},
- {"CLOCAL", Const, 0},
- {"CLONE_CHILD_CLEARTID", Const, 2},
- {"CLONE_CHILD_SETTID", Const, 2},
- {"CLONE_CLEAR_SIGHAND", Const, 20},
- {"CLONE_CSIGNAL", Const, 3},
- {"CLONE_DETACHED", Const, 2},
- {"CLONE_FILES", Const, 2},
- {"CLONE_FS", Const, 2},
- {"CLONE_INTO_CGROUP", Const, 20},
- {"CLONE_IO", Const, 2},
- {"CLONE_NEWCGROUP", Const, 20},
- {"CLONE_NEWIPC", Const, 2},
- {"CLONE_NEWNET", Const, 2},
- {"CLONE_NEWNS", Const, 2},
- {"CLONE_NEWPID", Const, 2},
- {"CLONE_NEWTIME", Const, 20},
- {"CLONE_NEWUSER", Const, 2},
- {"CLONE_NEWUTS", Const, 2},
- {"CLONE_PARENT", Const, 2},
- {"CLONE_PARENT_SETTID", Const, 2},
- {"CLONE_PID", Const, 3},
- {"CLONE_PIDFD", Const, 20},
- {"CLONE_PTRACE", Const, 2},
- {"CLONE_SETTLS", Const, 2},
- {"CLONE_SIGHAND", Const, 2},
- {"CLONE_SYSVSEM", Const, 2},
- {"CLONE_THREAD", Const, 2},
- {"CLONE_UNTRACED", Const, 2},
- {"CLONE_VFORK", Const, 2},
- {"CLONE_VM", Const, 2},
- {"CPUID_CFLUSH", Const, 1},
- {"CREAD", Const, 0},
- {"CREATE_ALWAYS", Const, 0},
- {"CREATE_NEW", Const, 0},
- {"CREATE_NEW_PROCESS_GROUP", Const, 1},
- {"CREATE_UNICODE_ENVIRONMENT", Const, 0},
- {"CRYPT_DEFAULT_CONTAINER_OPTIONAL", Const, 0},
- {"CRYPT_DELETEKEYSET", Const, 0},
- {"CRYPT_MACHINE_KEYSET", Const, 0},
- {"CRYPT_NEWKEYSET", Const, 0},
- {"CRYPT_SILENT", Const, 0},
- {"CRYPT_VERIFYCONTEXT", Const, 0},
- {"CS5", Const, 0},
- {"CS6", Const, 0},
- {"CS7", Const, 0},
- {"CS8", Const, 0},
- {"CSIZE", Const, 0},
- {"CSTART", Const, 1},
- {"CSTATUS", Const, 1},
- {"CSTOP", Const, 1},
- {"CSTOPB", Const, 0},
- {"CSUSP", Const, 1},
- {"CTL_MAXNAME", Const, 0},
- {"CTL_NET", Const, 0},
- {"CTL_QUERY", Const, 1},
- {"CTRL_BREAK_EVENT", Const, 1},
- {"CTRL_CLOSE_EVENT", Const, 14},
- {"CTRL_C_EVENT", Const, 1},
- {"CTRL_LOGOFF_EVENT", Const, 14},
- {"CTRL_SHUTDOWN_EVENT", Const, 14},
- {"CancelIo", Func, 0},
- {"CancelIoEx", Func, 1},
- {"CertAddCertificateContextToStore", Func, 0},
- {"CertChainContext", Type, 0},
- {"CertChainContext.ChainCount", Field, 0},
- {"CertChainContext.Chains", Field, 0},
- {"CertChainContext.HasRevocationFreshnessTime", Field, 0},
- {"CertChainContext.LowerQualityChainCount", Field, 0},
- {"CertChainContext.LowerQualityChains", Field, 0},
- {"CertChainContext.RevocationFreshnessTime", Field, 0},
- {"CertChainContext.Size", Field, 0},
- {"CertChainContext.TrustStatus", Field, 0},
- {"CertChainElement", Type, 0},
- {"CertChainElement.ApplicationUsage", Field, 0},
- {"CertChainElement.CertContext", Field, 0},
- {"CertChainElement.ExtendedErrorInfo", Field, 0},
- {"CertChainElement.IssuanceUsage", Field, 0},
- {"CertChainElement.RevocationInfo", Field, 0},
- {"CertChainElement.Size", Field, 0},
- {"CertChainElement.TrustStatus", Field, 0},
- {"CertChainPara", Type, 0},
- {"CertChainPara.CacheResync", Field, 0},
- {"CertChainPara.CheckRevocationFreshnessTime", Field, 0},
- {"CertChainPara.RequestedUsage", Field, 0},
- {"CertChainPara.RequstedIssuancePolicy", Field, 0},
- {"CertChainPara.RevocationFreshnessTime", Field, 0},
- {"CertChainPara.Size", Field, 0},
- {"CertChainPara.URLRetrievalTimeout", Field, 0},
- {"CertChainPolicyPara", Type, 0},
- {"CertChainPolicyPara.ExtraPolicyPara", Field, 0},
- {"CertChainPolicyPara.Flags", Field, 0},
- {"CertChainPolicyPara.Size", Field, 0},
- {"CertChainPolicyStatus", Type, 0},
- {"CertChainPolicyStatus.ChainIndex", Field, 0},
- {"CertChainPolicyStatus.ElementIndex", Field, 0},
- {"CertChainPolicyStatus.Error", Field, 0},
- {"CertChainPolicyStatus.ExtraPolicyStatus", Field, 0},
- {"CertChainPolicyStatus.Size", Field, 0},
- {"CertCloseStore", Func, 0},
- {"CertContext", Type, 0},
- {"CertContext.CertInfo", Field, 0},
- {"CertContext.EncodedCert", Field, 0},
- {"CertContext.EncodingType", Field, 0},
- {"CertContext.Length", Field, 0},
- {"CertContext.Store", Field, 0},
- {"CertCreateCertificateContext", Func, 0},
- {"CertEnhKeyUsage", Type, 0},
- {"CertEnhKeyUsage.Length", Field, 0},
- {"CertEnhKeyUsage.UsageIdentifiers", Field, 0},
- {"CertEnumCertificatesInStore", Func, 0},
- {"CertFreeCertificateChain", Func, 0},
- {"CertFreeCertificateContext", Func, 0},
- {"CertGetCertificateChain", Func, 0},
- {"CertInfo", Type, 11},
- {"CertOpenStore", Func, 0},
- {"CertOpenSystemStore", Func, 0},
- {"CertRevocationCrlInfo", Type, 11},
- {"CertRevocationInfo", Type, 0},
- {"CertRevocationInfo.CrlInfo", Field, 0},
- {"CertRevocationInfo.FreshnessTime", Field, 0},
- {"CertRevocationInfo.HasFreshnessTime", Field, 0},
- {"CertRevocationInfo.OidSpecificInfo", Field, 0},
- {"CertRevocationInfo.RevocationOid", Field, 0},
- {"CertRevocationInfo.RevocationResult", Field, 0},
- {"CertRevocationInfo.Size", Field, 0},
- {"CertSimpleChain", Type, 0},
- {"CertSimpleChain.Elements", Field, 0},
- {"CertSimpleChain.HasRevocationFreshnessTime", Field, 0},
- {"CertSimpleChain.NumElements", Field, 0},
- {"CertSimpleChain.RevocationFreshnessTime", Field, 0},
- {"CertSimpleChain.Size", Field, 0},
- {"CertSimpleChain.TrustListInfo", Field, 0},
- {"CertSimpleChain.TrustStatus", Field, 0},
- {"CertTrustListInfo", Type, 11},
- {"CertTrustStatus", Type, 0},
- {"CertTrustStatus.ErrorStatus", Field, 0},
- {"CertTrustStatus.InfoStatus", Field, 0},
- {"CertUsageMatch", Type, 0},
- {"CertUsageMatch.Type", Field, 0},
- {"CertUsageMatch.Usage", Field, 0},
- {"CertVerifyCertificateChainPolicy", Func, 0},
- {"Chdir", Func, 0},
- {"CheckBpfVersion", Func, 0},
- {"Chflags", Func, 0},
- {"Chmod", Func, 0},
- {"Chown", Func, 0},
- {"Chroot", Func, 0},
- {"Clearenv", Func, 0},
- {"Close", Func, 0},
- {"CloseHandle", Func, 0},
- {"CloseOnExec", Func, 0},
- {"Closesocket", Func, 0},
- {"CmsgLen", Func, 0},
- {"CmsgSpace", Func, 0},
- {"Cmsghdr", Type, 0},
- {"Cmsghdr.Len", Field, 0},
- {"Cmsghdr.Level", Field, 0},
- {"Cmsghdr.Type", Field, 0},
- {"Cmsghdr.X__cmsg_data", Field, 0},
- {"CommandLineToArgv", Func, 0},
- {"ComputerName", Func, 0},
- {"Conn", Type, 9},
- {"Connect", Func, 0},
- {"ConnectEx", Func, 1},
- {"ConvertSidToStringSid", Func, 0},
- {"ConvertStringSidToSid", Func, 0},
- {"CopySid", Func, 0},
- {"Creat", Func, 0},
- {"CreateDirectory", Func, 0},
- {"CreateFile", Func, 0},
- {"CreateFileMapping", Func, 0},
- {"CreateHardLink", Func, 4},
- {"CreateIoCompletionPort", Func, 0},
- {"CreatePipe", Func, 0},
- {"CreateProcess", Func, 0},
- {"CreateProcessAsUser", Func, 10},
- {"CreateSymbolicLink", Func, 4},
- {"CreateToolhelp32Snapshot", Func, 4},
- {"Credential", Type, 0},
- {"Credential.Gid", Field, 0},
- {"Credential.Groups", Field, 0},
- {"Credential.NoSetGroups", Field, 9},
- {"Credential.Uid", Field, 0},
- {"CryptAcquireContext", Func, 0},
- {"CryptGenRandom", Func, 0},
- {"CryptReleaseContext", Func, 0},
- {"DIOCBSFLUSH", Const, 1},
- {"DIOCOSFPFLUSH", Const, 1},
- {"DLL", Type, 0},
- {"DLL.Handle", Field, 0},
- {"DLL.Name", Field, 0},
- {"DLLError", Type, 0},
- {"DLLError.Err", Field, 0},
- {"DLLError.Msg", Field, 0},
- {"DLLError.ObjName", Field, 0},
- {"DLT_A429", Const, 0},
- {"DLT_A653_ICM", Const, 0},
- {"DLT_AIRONET_HEADER", Const, 0},
- {"DLT_AOS", Const, 1},
- {"DLT_APPLE_IP_OVER_IEEE1394", Const, 0},
- {"DLT_ARCNET", Const, 0},
- {"DLT_ARCNET_LINUX", Const, 0},
- {"DLT_ATM_CLIP", Const, 0},
- {"DLT_ATM_RFC1483", Const, 0},
- {"DLT_AURORA", Const, 0},
- {"DLT_AX25", Const, 0},
- {"DLT_AX25_KISS", Const, 0},
- {"DLT_BACNET_MS_TP", Const, 0},
- {"DLT_BLUETOOTH_HCI_H4", Const, 0},
- {"DLT_BLUETOOTH_HCI_H4_WITH_PHDR", Const, 0},
- {"DLT_CAN20B", Const, 0},
- {"DLT_CAN_SOCKETCAN", Const, 1},
- {"DLT_CHAOS", Const, 0},
- {"DLT_CHDLC", Const, 0},
- {"DLT_CISCO_IOS", Const, 0},
- {"DLT_C_HDLC", Const, 0},
- {"DLT_C_HDLC_WITH_DIR", Const, 0},
- {"DLT_DBUS", Const, 1},
- {"DLT_DECT", Const, 1},
- {"DLT_DOCSIS", Const, 0},
- {"DLT_DVB_CI", Const, 1},
- {"DLT_ECONET", Const, 0},
- {"DLT_EN10MB", Const, 0},
- {"DLT_EN3MB", Const, 0},
- {"DLT_ENC", Const, 0},
- {"DLT_ERF", Const, 0},
- {"DLT_ERF_ETH", Const, 0},
- {"DLT_ERF_POS", Const, 0},
- {"DLT_FC_2", Const, 1},
- {"DLT_FC_2_WITH_FRAME_DELIMS", Const, 1},
- {"DLT_FDDI", Const, 0},
- {"DLT_FLEXRAY", Const, 0},
- {"DLT_FRELAY", Const, 0},
- {"DLT_FRELAY_WITH_DIR", Const, 0},
- {"DLT_GCOM_SERIAL", Const, 0},
- {"DLT_GCOM_T1E1", Const, 0},
- {"DLT_GPF_F", Const, 0},
- {"DLT_GPF_T", Const, 0},
- {"DLT_GPRS_LLC", Const, 0},
- {"DLT_GSMTAP_ABIS", Const, 1},
- {"DLT_GSMTAP_UM", Const, 1},
- {"DLT_HDLC", Const, 1},
- {"DLT_HHDLC", Const, 0},
- {"DLT_HIPPI", Const, 1},
- {"DLT_IBM_SN", Const, 0},
- {"DLT_IBM_SP", Const, 0},
- {"DLT_IEEE802", Const, 0},
- {"DLT_IEEE802_11", Const, 0},
- {"DLT_IEEE802_11_RADIO", Const, 0},
- {"DLT_IEEE802_11_RADIO_AVS", Const, 0},
- {"DLT_IEEE802_15_4", Const, 0},
- {"DLT_IEEE802_15_4_LINUX", Const, 0},
- {"DLT_IEEE802_15_4_NOFCS", Const, 1},
- {"DLT_IEEE802_15_4_NONASK_PHY", Const, 0},
- {"DLT_IEEE802_16_MAC_CPS", Const, 0},
- {"DLT_IEEE802_16_MAC_CPS_RADIO", Const, 0},
- {"DLT_IPFILTER", Const, 0},
- {"DLT_IPMB", Const, 0},
- {"DLT_IPMB_LINUX", Const, 0},
- {"DLT_IPNET", Const, 1},
- {"DLT_IPOIB", Const, 1},
- {"DLT_IPV4", Const, 1},
- {"DLT_IPV6", Const, 1},
- {"DLT_IP_OVER_FC", Const, 0},
- {"DLT_JUNIPER_ATM1", Const, 0},
- {"DLT_JUNIPER_ATM2", Const, 0},
- {"DLT_JUNIPER_ATM_CEMIC", Const, 1},
- {"DLT_JUNIPER_CHDLC", Const, 0},
- {"DLT_JUNIPER_ES", Const, 0},
- {"DLT_JUNIPER_ETHER", Const, 0},
- {"DLT_JUNIPER_FIBRECHANNEL", Const, 1},
- {"DLT_JUNIPER_FRELAY", Const, 0},
- {"DLT_JUNIPER_GGSN", Const, 0},
- {"DLT_JUNIPER_ISM", Const, 0},
- {"DLT_JUNIPER_MFR", Const, 0},
- {"DLT_JUNIPER_MLFR", Const, 0},
- {"DLT_JUNIPER_MLPPP", Const, 0},
- {"DLT_JUNIPER_MONITOR", Const, 0},
- {"DLT_JUNIPER_PIC_PEER", Const, 0},
- {"DLT_JUNIPER_PPP", Const, 0},
- {"DLT_JUNIPER_PPPOE", Const, 0},
- {"DLT_JUNIPER_PPPOE_ATM", Const, 0},
- {"DLT_JUNIPER_SERVICES", Const, 0},
- {"DLT_JUNIPER_SRX_E2E", Const, 1},
- {"DLT_JUNIPER_ST", Const, 0},
- {"DLT_JUNIPER_VP", Const, 0},
- {"DLT_JUNIPER_VS", Const, 1},
- {"DLT_LAPB_WITH_DIR", Const, 0},
- {"DLT_LAPD", Const, 0},
- {"DLT_LIN", Const, 0},
- {"DLT_LINUX_EVDEV", Const, 1},
- {"DLT_LINUX_IRDA", Const, 0},
- {"DLT_LINUX_LAPD", Const, 0},
- {"DLT_LINUX_PPP_WITHDIRECTION", Const, 0},
- {"DLT_LINUX_SLL", Const, 0},
- {"DLT_LOOP", Const, 0},
- {"DLT_LTALK", Const, 0},
- {"DLT_MATCHING_MAX", Const, 1},
- {"DLT_MATCHING_MIN", Const, 1},
- {"DLT_MFR", Const, 0},
- {"DLT_MOST", Const, 0},
- {"DLT_MPEG_2_TS", Const, 1},
- {"DLT_MPLS", Const, 1},
- {"DLT_MTP2", Const, 0},
- {"DLT_MTP2_WITH_PHDR", Const, 0},
- {"DLT_MTP3", Const, 0},
- {"DLT_MUX27010", Const, 1},
- {"DLT_NETANALYZER", Const, 1},
- {"DLT_NETANALYZER_TRANSPARENT", Const, 1},
- {"DLT_NFC_LLCP", Const, 1},
- {"DLT_NFLOG", Const, 1},
- {"DLT_NG40", Const, 1},
- {"DLT_NULL", Const, 0},
- {"DLT_PCI_EXP", Const, 0},
- {"DLT_PFLOG", Const, 0},
- {"DLT_PFSYNC", Const, 0},
- {"DLT_PPI", Const, 0},
- {"DLT_PPP", Const, 0},
- {"DLT_PPP_BSDOS", Const, 0},
- {"DLT_PPP_ETHER", Const, 0},
- {"DLT_PPP_PPPD", Const, 0},
- {"DLT_PPP_SERIAL", Const, 0},
- {"DLT_PPP_WITH_DIR", Const, 0},
- {"DLT_PPP_WITH_DIRECTION", Const, 0},
- {"DLT_PRISM_HEADER", Const, 0},
- {"DLT_PRONET", Const, 0},
- {"DLT_RAIF1", Const, 0},
- {"DLT_RAW", Const, 0},
- {"DLT_RAWAF_MASK", Const, 1},
- {"DLT_RIO", Const, 0},
- {"DLT_SCCP", Const, 0},
- {"DLT_SITA", Const, 0},
- {"DLT_SLIP", Const, 0},
- {"DLT_SLIP_BSDOS", Const, 0},
- {"DLT_STANAG_5066_D_PDU", Const, 1},
- {"DLT_SUNATM", Const, 0},
- {"DLT_SYMANTEC_FIREWALL", Const, 0},
- {"DLT_TZSP", Const, 0},
- {"DLT_USB", Const, 0},
- {"DLT_USB_LINUX", Const, 0},
- {"DLT_USB_LINUX_MMAPPED", Const, 1},
- {"DLT_USER0", Const, 0},
- {"DLT_USER1", Const, 0},
- {"DLT_USER10", Const, 0},
- {"DLT_USER11", Const, 0},
- {"DLT_USER12", Const, 0},
- {"DLT_USER13", Const, 0},
- {"DLT_USER14", Const, 0},
- {"DLT_USER15", Const, 0},
- {"DLT_USER2", Const, 0},
- {"DLT_USER3", Const, 0},
- {"DLT_USER4", Const, 0},
- {"DLT_USER5", Const, 0},
- {"DLT_USER6", Const, 0},
- {"DLT_USER7", Const, 0},
- {"DLT_USER8", Const, 0},
- {"DLT_USER9", Const, 0},
- {"DLT_WIHART", Const, 1},
- {"DLT_X2E_SERIAL", Const, 0},
- {"DLT_X2E_XORAYA", Const, 0},
- {"DNSMXData", Type, 0},
- {"DNSMXData.NameExchange", Field, 0},
- {"DNSMXData.Pad", Field, 0},
- {"DNSMXData.Preference", Field, 0},
- {"DNSPTRData", Type, 0},
- {"DNSPTRData.Host", Field, 0},
- {"DNSRecord", Type, 0},
- {"DNSRecord.Data", Field, 0},
- {"DNSRecord.Dw", Field, 0},
- {"DNSRecord.Length", Field, 0},
- {"DNSRecord.Name", Field, 0},
- {"DNSRecord.Next", Field, 0},
- {"DNSRecord.Reserved", Field, 0},
- {"DNSRecord.Ttl", Field, 0},
- {"DNSRecord.Type", Field, 0},
- {"DNSSRVData", Type, 0},
- {"DNSSRVData.Pad", Field, 0},
- {"DNSSRVData.Port", Field, 0},
- {"DNSSRVData.Priority", Field, 0},
- {"DNSSRVData.Target", Field, 0},
- {"DNSSRVData.Weight", Field, 0},
- {"DNSTXTData", Type, 0},
- {"DNSTXTData.StringArray", Field, 0},
- {"DNSTXTData.StringCount", Field, 0},
- {"DNS_INFO_NO_RECORDS", Const, 4},
- {"DNS_TYPE_A", Const, 0},
- {"DNS_TYPE_A6", Const, 0},
- {"DNS_TYPE_AAAA", Const, 0},
- {"DNS_TYPE_ADDRS", Const, 0},
- {"DNS_TYPE_AFSDB", Const, 0},
- {"DNS_TYPE_ALL", Const, 0},
- {"DNS_TYPE_ANY", Const, 0},
- {"DNS_TYPE_ATMA", Const, 0},
- {"DNS_TYPE_AXFR", Const, 0},
- {"DNS_TYPE_CERT", Const, 0},
- {"DNS_TYPE_CNAME", Const, 0},
- {"DNS_TYPE_DHCID", Const, 0},
- {"DNS_TYPE_DNAME", Const, 0},
- {"DNS_TYPE_DNSKEY", Const, 0},
- {"DNS_TYPE_DS", Const, 0},
- {"DNS_TYPE_EID", Const, 0},
- {"DNS_TYPE_GID", Const, 0},
- {"DNS_TYPE_GPOS", Const, 0},
- {"DNS_TYPE_HINFO", Const, 0},
- {"DNS_TYPE_ISDN", Const, 0},
- {"DNS_TYPE_IXFR", Const, 0},
- {"DNS_TYPE_KEY", Const, 0},
- {"DNS_TYPE_KX", Const, 0},
- {"DNS_TYPE_LOC", Const, 0},
- {"DNS_TYPE_MAILA", Const, 0},
- {"DNS_TYPE_MAILB", Const, 0},
- {"DNS_TYPE_MB", Const, 0},
- {"DNS_TYPE_MD", Const, 0},
- {"DNS_TYPE_MF", Const, 0},
- {"DNS_TYPE_MG", Const, 0},
- {"DNS_TYPE_MINFO", Const, 0},
- {"DNS_TYPE_MR", Const, 0},
- {"DNS_TYPE_MX", Const, 0},
- {"DNS_TYPE_NAPTR", Const, 0},
- {"DNS_TYPE_NBSTAT", Const, 0},
- {"DNS_TYPE_NIMLOC", Const, 0},
- {"DNS_TYPE_NS", Const, 0},
- {"DNS_TYPE_NSAP", Const, 0},
- {"DNS_TYPE_NSAPPTR", Const, 0},
- {"DNS_TYPE_NSEC", Const, 0},
- {"DNS_TYPE_NULL", Const, 0},
- {"DNS_TYPE_NXT", Const, 0},
- {"DNS_TYPE_OPT", Const, 0},
- {"DNS_TYPE_PTR", Const, 0},
- {"DNS_TYPE_PX", Const, 0},
- {"DNS_TYPE_RP", Const, 0},
- {"DNS_TYPE_RRSIG", Const, 0},
- {"DNS_TYPE_RT", Const, 0},
- {"DNS_TYPE_SIG", Const, 0},
- {"DNS_TYPE_SINK", Const, 0},
- {"DNS_TYPE_SOA", Const, 0},
- {"DNS_TYPE_SRV", Const, 0},
- {"DNS_TYPE_TEXT", Const, 0},
- {"DNS_TYPE_TKEY", Const, 0},
- {"DNS_TYPE_TSIG", Const, 0},
- {"DNS_TYPE_UID", Const, 0},
- {"DNS_TYPE_UINFO", Const, 0},
- {"DNS_TYPE_UNSPEC", Const, 0},
- {"DNS_TYPE_WINS", Const, 0},
- {"DNS_TYPE_WINSR", Const, 0},
- {"DNS_TYPE_WKS", Const, 0},
- {"DNS_TYPE_X25", Const, 0},
- {"DT_BLK", Const, 0},
- {"DT_CHR", Const, 0},
- {"DT_DIR", Const, 0},
- {"DT_FIFO", Const, 0},
- {"DT_LNK", Const, 0},
- {"DT_REG", Const, 0},
- {"DT_SOCK", Const, 0},
- {"DT_UNKNOWN", Const, 0},
- {"DT_WHT", Const, 0},
- {"DUPLICATE_CLOSE_SOURCE", Const, 0},
- {"DUPLICATE_SAME_ACCESS", Const, 0},
- {"DeleteFile", Func, 0},
- {"DetachLsf", Func, 0},
- {"DeviceIoControl", Func, 4},
- {"Dirent", Type, 0},
- {"Dirent.Fileno", Field, 0},
- {"Dirent.Ino", Field, 0},
- {"Dirent.Name", Field, 0},
- {"Dirent.Namlen", Field, 0},
- {"Dirent.Off", Field, 0},
- {"Dirent.Pad0", Field, 12},
- {"Dirent.Pad1", Field, 12},
- {"Dirent.Pad_cgo_0", Field, 0},
- {"Dirent.Reclen", Field, 0},
- {"Dirent.Seekoff", Field, 0},
- {"Dirent.Type", Field, 0},
- {"Dirent.X__d_padding", Field, 3},
- {"DnsNameCompare", Func, 4},
- {"DnsQuery", Func, 0},
- {"DnsRecordListFree", Func, 0},
- {"DnsSectionAdditional", Const, 4},
- {"DnsSectionAnswer", Const, 4},
- {"DnsSectionAuthority", Const, 4},
- {"DnsSectionQuestion", Const, 4},
- {"Dup", Func, 0},
- {"Dup2", Func, 0},
- {"Dup3", Func, 2},
- {"DuplicateHandle", Func, 0},
- {"E2BIG", Const, 0},
- {"EACCES", Const, 0},
- {"EADDRINUSE", Const, 0},
- {"EADDRNOTAVAIL", Const, 0},
- {"EADV", Const, 0},
- {"EAFNOSUPPORT", Const, 0},
- {"EAGAIN", Const, 0},
- {"EALREADY", Const, 0},
- {"EAUTH", Const, 0},
- {"EBADARCH", Const, 0},
- {"EBADE", Const, 0},
- {"EBADEXEC", Const, 0},
- {"EBADF", Const, 0},
- {"EBADFD", Const, 0},
- {"EBADMACHO", Const, 0},
- {"EBADMSG", Const, 0},
- {"EBADR", Const, 0},
- {"EBADRPC", Const, 0},
- {"EBADRQC", Const, 0},
- {"EBADSLT", Const, 0},
- {"EBFONT", Const, 0},
- {"EBUSY", Const, 0},
- {"ECANCELED", Const, 0},
- {"ECAPMODE", Const, 1},
- {"ECHILD", Const, 0},
- {"ECHO", Const, 0},
- {"ECHOCTL", Const, 0},
- {"ECHOE", Const, 0},
- {"ECHOK", Const, 0},
- {"ECHOKE", Const, 0},
- {"ECHONL", Const, 0},
- {"ECHOPRT", Const, 0},
- {"ECHRNG", Const, 0},
- {"ECOMM", Const, 0},
- {"ECONNABORTED", Const, 0},
- {"ECONNREFUSED", Const, 0},
- {"ECONNRESET", Const, 0},
- {"EDEADLK", Const, 0},
- {"EDEADLOCK", Const, 0},
- {"EDESTADDRREQ", Const, 0},
- {"EDEVERR", Const, 0},
- {"EDOM", Const, 0},
- {"EDOOFUS", Const, 0},
- {"EDOTDOT", Const, 0},
- {"EDQUOT", Const, 0},
- {"EEXIST", Const, 0},
- {"EFAULT", Const, 0},
- {"EFBIG", Const, 0},
- {"EFER_LMA", Const, 1},
- {"EFER_LME", Const, 1},
- {"EFER_NXE", Const, 1},
- {"EFER_SCE", Const, 1},
- {"EFTYPE", Const, 0},
- {"EHOSTDOWN", Const, 0},
- {"EHOSTUNREACH", Const, 0},
- {"EHWPOISON", Const, 0},
- {"EIDRM", Const, 0},
- {"EILSEQ", Const, 0},
- {"EINPROGRESS", Const, 0},
- {"EINTR", Const, 0},
- {"EINVAL", Const, 0},
- {"EIO", Const, 0},
- {"EIPSEC", Const, 1},
- {"EISCONN", Const, 0},
- {"EISDIR", Const, 0},
- {"EISNAM", Const, 0},
- {"EKEYEXPIRED", Const, 0},
- {"EKEYREJECTED", Const, 0},
- {"EKEYREVOKED", Const, 0},
- {"EL2HLT", Const, 0},
- {"EL2NSYNC", Const, 0},
- {"EL3HLT", Const, 0},
- {"EL3RST", Const, 0},
- {"ELAST", Const, 0},
- {"ELF_NGREG", Const, 0},
- {"ELF_PRARGSZ", Const, 0},
- {"ELIBACC", Const, 0},
- {"ELIBBAD", Const, 0},
- {"ELIBEXEC", Const, 0},
- {"ELIBMAX", Const, 0},
- {"ELIBSCN", Const, 0},
- {"ELNRNG", Const, 0},
- {"ELOOP", Const, 0},
- {"EMEDIUMTYPE", Const, 0},
- {"EMFILE", Const, 0},
- {"EMLINK", Const, 0},
- {"EMSGSIZE", Const, 0},
- {"EMT_TAGOVF", Const, 1},
- {"EMULTIHOP", Const, 0},
- {"EMUL_ENABLED", Const, 1},
- {"EMUL_LINUX", Const, 1},
- {"EMUL_LINUX32", Const, 1},
- {"EMUL_MAXID", Const, 1},
- {"EMUL_NATIVE", Const, 1},
- {"ENAMETOOLONG", Const, 0},
- {"ENAVAIL", Const, 0},
- {"ENDRUNDISC", Const, 1},
- {"ENEEDAUTH", Const, 0},
- {"ENETDOWN", Const, 0},
- {"ENETRESET", Const, 0},
- {"ENETUNREACH", Const, 0},
- {"ENFILE", Const, 0},
- {"ENOANO", Const, 0},
- {"ENOATTR", Const, 0},
- {"ENOBUFS", Const, 0},
- {"ENOCSI", Const, 0},
- {"ENODATA", Const, 0},
- {"ENODEV", Const, 0},
- {"ENOENT", Const, 0},
- {"ENOEXEC", Const, 0},
- {"ENOKEY", Const, 0},
- {"ENOLCK", Const, 0},
- {"ENOLINK", Const, 0},
- {"ENOMEDIUM", Const, 0},
- {"ENOMEM", Const, 0},
- {"ENOMSG", Const, 0},
- {"ENONET", Const, 0},
- {"ENOPKG", Const, 0},
- {"ENOPOLICY", Const, 0},
- {"ENOPROTOOPT", Const, 0},
- {"ENOSPC", Const, 0},
- {"ENOSR", Const, 0},
- {"ENOSTR", Const, 0},
- {"ENOSYS", Const, 0},
- {"ENOTBLK", Const, 0},
- {"ENOTCAPABLE", Const, 0},
- {"ENOTCONN", Const, 0},
- {"ENOTDIR", Const, 0},
- {"ENOTEMPTY", Const, 0},
- {"ENOTNAM", Const, 0},
- {"ENOTRECOVERABLE", Const, 0},
- {"ENOTSOCK", Const, 0},
- {"ENOTSUP", Const, 0},
- {"ENOTTY", Const, 0},
- {"ENOTUNIQ", Const, 0},
- {"ENXIO", Const, 0},
- {"EN_SW_CTL_INF", Const, 1},
- {"EN_SW_CTL_PREC", Const, 1},
- {"EN_SW_CTL_ROUND", Const, 1},
- {"EN_SW_DATACHAIN", Const, 1},
- {"EN_SW_DENORM", Const, 1},
- {"EN_SW_INVOP", Const, 1},
- {"EN_SW_OVERFLOW", Const, 1},
- {"EN_SW_PRECLOSS", Const, 1},
- {"EN_SW_UNDERFLOW", Const, 1},
- {"EN_SW_ZERODIV", Const, 1},
- {"EOPNOTSUPP", Const, 0},
- {"EOVERFLOW", Const, 0},
- {"EOWNERDEAD", Const, 0},
- {"EPERM", Const, 0},
- {"EPFNOSUPPORT", Const, 0},
- {"EPIPE", Const, 0},
- {"EPOLLERR", Const, 0},
- {"EPOLLET", Const, 0},
- {"EPOLLHUP", Const, 0},
- {"EPOLLIN", Const, 0},
- {"EPOLLMSG", Const, 0},
- {"EPOLLONESHOT", Const, 0},
- {"EPOLLOUT", Const, 0},
- {"EPOLLPRI", Const, 0},
- {"EPOLLRDBAND", Const, 0},
- {"EPOLLRDHUP", Const, 0},
- {"EPOLLRDNORM", Const, 0},
- {"EPOLLWRBAND", Const, 0},
- {"EPOLLWRNORM", Const, 0},
- {"EPOLL_CLOEXEC", Const, 0},
- {"EPOLL_CTL_ADD", Const, 0},
- {"EPOLL_CTL_DEL", Const, 0},
- {"EPOLL_CTL_MOD", Const, 0},
- {"EPOLL_NONBLOCK", Const, 0},
- {"EPROCLIM", Const, 0},
- {"EPROCUNAVAIL", Const, 0},
- {"EPROGMISMATCH", Const, 0},
- {"EPROGUNAVAIL", Const, 0},
- {"EPROTO", Const, 0},
- {"EPROTONOSUPPORT", Const, 0},
- {"EPROTOTYPE", Const, 0},
- {"EPWROFF", Const, 0},
- {"EQFULL", Const, 16},
- {"ERANGE", Const, 0},
- {"EREMCHG", Const, 0},
- {"EREMOTE", Const, 0},
- {"EREMOTEIO", Const, 0},
- {"ERESTART", Const, 0},
- {"ERFKILL", Const, 0},
- {"EROFS", Const, 0},
- {"ERPCMISMATCH", Const, 0},
- {"ERROR_ACCESS_DENIED", Const, 0},
- {"ERROR_ALREADY_EXISTS", Const, 0},
- {"ERROR_BROKEN_PIPE", Const, 0},
- {"ERROR_BUFFER_OVERFLOW", Const, 0},
- {"ERROR_DIR_NOT_EMPTY", Const, 8},
- {"ERROR_ENVVAR_NOT_FOUND", Const, 0},
- {"ERROR_FILE_EXISTS", Const, 0},
- {"ERROR_FILE_NOT_FOUND", Const, 0},
- {"ERROR_HANDLE_EOF", Const, 2},
- {"ERROR_INSUFFICIENT_BUFFER", Const, 0},
- {"ERROR_IO_PENDING", Const, 0},
- {"ERROR_MOD_NOT_FOUND", Const, 0},
- {"ERROR_MORE_DATA", Const, 3},
- {"ERROR_NETNAME_DELETED", Const, 3},
- {"ERROR_NOT_FOUND", Const, 1},
- {"ERROR_NO_MORE_FILES", Const, 0},
- {"ERROR_OPERATION_ABORTED", Const, 0},
- {"ERROR_PATH_NOT_FOUND", Const, 0},
- {"ERROR_PRIVILEGE_NOT_HELD", Const, 4},
- {"ERROR_PROC_NOT_FOUND", Const, 0},
- {"ESHLIBVERS", Const, 0},
- {"ESHUTDOWN", Const, 0},
- {"ESOCKTNOSUPPORT", Const, 0},
- {"ESPIPE", Const, 0},
- {"ESRCH", Const, 0},
- {"ESRMNT", Const, 0},
- {"ESTALE", Const, 0},
- {"ESTRPIPE", Const, 0},
- {"ETHERCAP_JUMBO_MTU", Const, 1},
- {"ETHERCAP_VLAN_HWTAGGING", Const, 1},
- {"ETHERCAP_VLAN_MTU", Const, 1},
- {"ETHERMIN", Const, 1},
- {"ETHERMTU", Const, 1},
- {"ETHERMTU_JUMBO", Const, 1},
- {"ETHERTYPE_8023", Const, 1},
- {"ETHERTYPE_AARP", Const, 1},
- {"ETHERTYPE_ACCTON", Const, 1},
- {"ETHERTYPE_AEONIC", Const, 1},
- {"ETHERTYPE_ALPHA", Const, 1},
- {"ETHERTYPE_AMBER", Const, 1},
- {"ETHERTYPE_AMOEBA", Const, 1},
- {"ETHERTYPE_AOE", Const, 1},
- {"ETHERTYPE_APOLLO", Const, 1},
- {"ETHERTYPE_APOLLODOMAIN", Const, 1},
- {"ETHERTYPE_APPLETALK", Const, 1},
- {"ETHERTYPE_APPLITEK", Const, 1},
- {"ETHERTYPE_ARGONAUT", Const, 1},
- {"ETHERTYPE_ARP", Const, 1},
- {"ETHERTYPE_AT", Const, 1},
- {"ETHERTYPE_ATALK", Const, 1},
- {"ETHERTYPE_ATOMIC", Const, 1},
- {"ETHERTYPE_ATT", Const, 1},
- {"ETHERTYPE_ATTSTANFORD", Const, 1},
- {"ETHERTYPE_AUTOPHON", Const, 1},
- {"ETHERTYPE_AXIS", Const, 1},
- {"ETHERTYPE_BCLOOP", Const, 1},
- {"ETHERTYPE_BOFL", Const, 1},
- {"ETHERTYPE_CABLETRON", Const, 1},
- {"ETHERTYPE_CHAOS", Const, 1},
- {"ETHERTYPE_COMDESIGN", Const, 1},
- {"ETHERTYPE_COMPUGRAPHIC", Const, 1},
- {"ETHERTYPE_COUNTERPOINT", Const, 1},
- {"ETHERTYPE_CRONUS", Const, 1},
- {"ETHERTYPE_CRONUSVLN", Const, 1},
- {"ETHERTYPE_DCA", Const, 1},
- {"ETHERTYPE_DDE", Const, 1},
- {"ETHERTYPE_DEBNI", Const, 1},
- {"ETHERTYPE_DECAM", Const, 1},
- {"ETHERTYPE_DECCUST", Const, 1},
- {"ETHERTYPE_DECDIAG", Const, 1},
- {"ETHERTYPE_DECDNS", Const, 1},
- {"ETHERTYPE_DECDTS", Const, 1},
- {"ETHERTYPE_DECEXPER", Const, 1},
- {"ETHERTYPE_DECLAST", Const, 1},
- {"ETHERTYPE_DECLTM", Const, 1},
- {"ETHERTYPE_DECMUMPS", Const, 1},
- {"ETHERTYPE_DECNETBIOS", Const, 1},
- {"ETHERTYPE_DELTACON", Const, 1},
- {"ETHERTYPE_DIDDLE", Const, 1},
- {"ETHERTYPE_DLOG1", Const, 1},
- {"ETHERTYPE_DLOG2", Const, 1},
- {"ETHERTYPE_DN", Const, 1},
- {"ETHERTYPE_DOGFIGHT", Const, 1},
- {"ETHERTYPE_DSMD", Const, 1},
- {"ETHERTYPE_ECMA", Const, 1},
- {"ETHERTYPE_ENCRYPT", Const, 1},
- {"ETHERTYPE_ES", Const, 1},
- {"ETHERTYPE_EXCELAN", Const, 1},
- {"ETHERTYPE_EXPERDATA", Const, 1},
- {"ETHERTYPE_FLIP", Const, 1},
- {"ETHERTYPE_FLOWCONTROL", Const, 1},
- {"ETHERTYPE_FRARP", Const, 1},
- {"ETHERTYPE_GENDYN", Const, 1},
- {"ETHERTYPE_HAYES", Const, 1},
- {"ETHERTYPE_HIPPI_FP", Const, 1},
- {"ETHERTYPE_HITACHI", Const, 1},
- {"ETHERTYPE_HP", Const, 1},
- {"ETHERTYPE_IEEEPUP", Const, 1},
- {"ETHERTYPE_IEEEPUPAT", Const, 1},
- {"ETHERTYPE_IMLBL", Const, 1},
- {"ETHERTYPE_IMLBLDIAG", Const, 1},
- {"ETHERTYPE_IP", Const, 1},
- {"ETHERTYPE_IPAS", Const, 1},
- {"ETHERTYPE_IPV6", Const, 1},
- {"ETHERTYPE_IPX", Const, 1},
- {"ETHERTYPE_IPXNEW", Const, 1},
- {"ETHERTYPE_KALPANA", Const, 1},
- {"ETHERTYPE_LANBRIDGE", Const, 1},
- {"ETHERTYPE_LANPROBE", Const, 1},
- {"ETHERTYPE_LAT", Const, 1},
- {"ETHERTYPE_LBACK", Const, 1},
- {"ETHERTYPE_LITTLE", Const, 1},
- {"ETHERTYPE_LLDP", Const, 1},
- {"ETHERTYPE_LOGICRAFT", Const, 1},
- {"ETHERTYPE_LOOPBACK", Const, 1},
- {"ETHERTYPE_MATRA", Const, 1},
- {"ETHERTYPE_MAX", Const, 1},
- {"ETHERTYPE_MERIT", Const, 1},
- {"ETHERTYPE_MICP", Const, 1},
- {"ETHERTYPE_MOPDL", Const, 1},
- {"ETHERTYPE_MOPRC", Const, 1},
- {"ETHERTYPE_MOTOROLA", Const, 1},
- {"ETHERTYPE_MPLS", Const, 1},
- {"ETHERTYPE_MPLS_MCAST", Const, 1},
- {"ETHERTYPE_MUMPS", Const, 1},
- {"ETHERTYPE_NBPCC", Const, 1},
- {"ETHERTYPE_NBPCLAIM", Const, 1},
- {"ETHERTYPE_NBPCLREQ", Const, 1},
- {"ETHERTYPE_NBPCLRSP", Const, 1},
- {"ETHERTYPE_NBPCREQ", Const, 1},
- {"ETHERTYPE_NBPCRSP", Const, 1},
- {"ETHERTYPE_NBPDG", Const, 1},
- {"ETHERTYPE_NBPDGB", Const, 1},
- {"ETHERTYPE_NBPDLTE", Const, 1},
- {"ETHERTYPE_NBPRAR", Const, 1},
- {"ETHERTYPE_NBPRAS", Const, 1},
- {"ETHERTYPE_NBPRST", Const, 1},
- {"ETHERTYPE_NBPSCD", Const, 1},
- {"ETHERTYPE_NBPVCD", Const, 1},
- {"ETHERTYPE_NBS", Const, 1},
- {"ETHERTYPE_NCD", Const, 1},
- {"ETHERTYPE_NESTAR", Const, 1},
- {"ETHERTYPE_NETBEUI", Const, 1},
- {"ETHERTYPE_NOVELL", Const, 1},
- {"ETHERTYPE_NS", Const, 1},
- {"ETHERTYPE_NSAT", Const, 1},
- {"ETHERTYPE_NSCOMPAT", Const, 1},
- {"ETHERTYPE_NTRAILER", Const, 1},
- {"ETHERTYPE_OS9", Const, 1},
- {"ETHERTYPE_OS9NET", Const, 1},
- {"ETHERTYPE_PACER", Const, 1},
- {"ETHERTYPE_PAE", Const, 1},
- {"ETHERTYPE_PCS", Const, 1},
- {"ETHERTYPE_PLANNING", Const, 1},
- {"ETHERTYPE_PPP", Const, 1},
- {"ETHERTYPE_PPPOE", Const, 1},
- {"ETHERTYPE_PPPOEDISC", Const, 1},
- {"ETHERTYPE_PRIMENTS", Const, 1},
- {"ETHERTYPE_PUP", Const, 1},
- {"ETHERTYPE_PUPAT", Const, 1},
- {"ETHERTYPE_QINQ", Const, 1},
- {"ETHERTYPE_RACAL", Const, 1},
- {"ETHERTYPE_RATIONAL", Const, 1},
- {"ETHERTYPE_RAWFR", Const, 1},
- {"ETHERTYPE_RCL", Const, 1},
- {"ETHERTYPE_RDP", Const, 1},
- {"ETHERTYPE_RETIX", Const, 1},
- {"ETHERTYPE_REVARP", Const, 1},
- {"ETHERTYPE_SCA", Const, 1},
- {"ETHERTYPE_SECTRA", Const, 1},
- {"ETHERTYPE_SECUREDATA", Const, 1},
- {"ETHERTYPE_SGITW", Const, 1},
- {"ETHERTYPE_SG_BOUNCE", Const, 1},
- {"ETHERTYPE_SG_DIAG", Const, 1},
- {"ETHERTYPE_SG_NETGAMES", Const, 1},
- {"ETHERTYPE_SG_RESV", Const, 1},
- {"ETHERTYPE_SIMNET", Const, 1},
- {"ETHERTYPE_SLOW", Const, 1},
- {"ETHERTYPE_SLOWPROTOCOLS", Const, 1},
- {"ETHERTYPE_SNA", Const, 1},
- {"ETHERTYPE_SNMP", Const, 1},
- {"ETHERTYPE_SONIX", Const, 1},
- {"ETHERTYPE_SPIDER", Const, 1},
- {"ETHERTYPE_SPRITE", Const, 1},
- {"ETHERTYPE_STP", Const, 1},
- {"ETHERTYPE_TALARIS", Const, 1},
- {"ETHERTYPE_TALARISMC", Const, 1},
- {"ETHERTYPE_TCPCOMP", Const, 1},
- {"ETHERTYPE_TCPSM", Const, 1},
- {"ETHERTYPE_TEC", Const, 1},
- {"ETHERTYPE_TIGAN", Const, 1},
- {"ETHERTYPE_TRAIL", Const, 1},
- {"ETHERTYPE_TRANSETHER", Const, 1},
- {"ETHERTYPE_TYMSHARE", Const, 1},
- {"ETHERTYPE_UBBST", Const, 1},
- {"ETHERTYPE_UBDEBUG", Const, 1},
- {"ETHERTYPE_UBDIAGLOOP", Const, 1},
- {"ETHERTYPE_UBDL", Const, 1},
- {"ETHERTYPE_UBNIU", Const, 1},
- {"ETHERTYPE_UBNMC", Const, 1},
- {"ETHERTYPE_VALID", Const, 1},
- {"ETHERTYPE_VARIAN", Const, 1},
- {"ETHERTYPE_VAXELN", Const, 1},
- {"ETHERTYPE_VEECO", Const, 1},
- {"ETHERTYPE_VEXP", Const, 1},
- {"ETHERTYPE_VGLAB", Const, 1},
- {"ETHERTYPE_VINES", Const, 1},
- {"ETHERTYPE_VINESECHO", Const, 1},
- {"ETHERTYPE_VINESLOOP", Const, 1},
- {"ETHERTYPE_VITAL", Const, 1},
- {"ETHERTYPE_VLAN", Const, 1},
- {"ETHERTYPE_VLTLMAN", Const, 1},
- {"ETHERTYPE_VPROD", Const, 1},
- {"ETHERTYPE_VURESERVED", Const, 1},
- {"ETHERTYPE_WATERLOO", Const, 1},
- {"ETHERTYPE_WELLFLEET", Const, 1},
- {"ETHERTYPE_X25", Const, 1},
- {"ETHERTYPE_X75", Const, 1},
- {"ETHERTYPE_XNSSM", Const, 1},
- {"ETHERTYPE_XTP", Const, 1},
- {"ETHER_ADDR_LEN", Const, 1},
- {"ETHER_ALIGN", Const, 1},
- {"ETHER_CRC_LEN", Const, 1},
- {"ETHER_CRC_POLY_BE", Const, 1},
- {"ETHER_CRC_POLY_LE", Const, 1},
- {"ETHER_HDR_LEN", Const, 1},
- {"ETHER_MAX_DIX_LEN", Const, 1},
- {"ETHER_MAX_LEN", Const, 1},
- {"ETHER_MAX_LEN_JUMBO", Const, 1},
- {"ETHER_MIN_LEN", Const, 1},
- {"ETHER_PPPOE_ENCAP_LEN", Const, 1},
- {"ETHER_TYPE_LEN", Const, 1},
- {"ETHER_VLAN_ENCAP_LEN", Const, 1},
- {"ETH_P_1588", Const, 0},
- {"ETH_P_8021Q", Const, 0},
- {"ETH_P_802_2", Const, 0},
- {"ETH_P_802_3", Const, 0},
- {"ETH_P_AARP", Const, 0},
- {"ETH_P_ALL", Const, 0},
- {"ETH_P_AOE", Const, 0},
- {"ETH_P_ARCNET", Const, 0},
- {"ETH_P_ARP", Const, 0},
- {"ETH_P_ATALK", Const, 0},
- {"ETH_P_ATMFATE", Const, 0},
- {"ETH_P_ATMMPOA", Const, 0},
- {"ETH_P_AX25", Const, 0},
- {"ETH_P_BPQ", Const, 0},
- {"ETH_P_CAIF", Const, 0},
- {"ETH_P_CAN", Const, 0},
- {"ETH_P_CONTROL", Const, 0},
- {"ETH_P_CUST", Const, 0},
- {"ETH_P_DDCMP", Const, 0},
- {"ETH_P_DEC", Const, 0},
- {"ETH_P_DIAG", Const, 0},
- {"ETH_P_DNA_DL", Const, 0},
- {"ETH_P_DNA_RC", Const, 0},
- {"ETH_P_DNA_RT", Const, 0},
- {"ETH_P_DSA", Const, 0},
- {"ETH_P_ECONET", Const, 0},
- {"ETH_P_EDSA", Const, 0},
- {"ETH_P_FCOE", Const, 0},
- {"ETH_P_FIP", Const, 0},
- {"ETH_P_HDLC", Const, 0},
- {"ETH_P_IEEE802154", Const, 0},
- {"ETH_P_IEEEPUP", Const, 0},
- {"ETH_P_IEEEPUPAT", Const, 0},
- {"ETH_P_IP", Const, 0},
- {"ETH_P_IPV6", Const, 0},
- {"ETH_P_IPX", Const, 0},
- {"ETH_P_IRDA", Const, 0},
- {"ETH_P_LAT", Const, 0},
- {"ETH_P_LINK_CTL", Const, 0},
- {"ETH_P_LOCALTALK", Const, 0},
- {"ETH_P_LOOP", Const, 0},
- {"ETH_P_MOBITEX", Const, 0},
- {"ETH_P_MPLS_MC", Const, 0},
- {"ETH_P_MPLS_UC", Const, 0},
- {"ETH_P_PAE", Const, 0},
- {"ETH_P_PAUSE", Const, 0},
- {"ETH_P_PHONET", Const, 0},
- {"ETH_P_PPPTALK", Const, 0},
- {"ETH_P_PPP_DISC", Const, 0},
- {"ETH_P_PPP_MP", Const, 0},
- {"ETH_P_PPP_SES", Const, 0},
- {"ETH_P_PUP", Const, 0},
- {"ETH_P_PUPAT", Const, 0},
- {"ETH_P_RARP", Const, 0},
- {"ETH_P_SCA", Const, 0},
- {"ETH_P_SLOW", Const, 0},
- {"ETH_P_SNAP", Const, 0},
- {"ETH_P_TEB", Const, 0},
- {"ETH_P_TIPC", Const, 0},
- {"ETH_P_TRAILER", Const, 0},
- {"ETH_P_TR_802_2", Const, 0},
- {"ETH_P_WAN_PPP", Const, 0},
- {"ETH_P_WCCP", Const, 0},
- {"ETH_P_X25", Const, 0},
- {"ETIME", Const, 0},
- {"ETIMEDOUT", Const, 0},
- {"ETOOMANYREFS", Const, 0},
- {"ETXTBSY", Const, 0},
- {"EUCLEAN", Const, 0},
- {"EUNATCH", Const, 0},
- {"EUSERS", Const, 0},
- {"EVFILT_AIO", Const, 0},
- {"EVFILT_FS", Const, 0},
- {"EVFILT_LIO", Const, 0},
- {"EVFILT_MACHPORT", Const, 0},
- {"EVFILT_PROC", Const, 0},
- {"EVFILT_READ", Const, 0},
- {"EVFILT_SIGNAL", Const, 0},
- {"EVFILT_SYSCOUNT", Const, 0},
- {"EVFILT_THREADMARKER", Const, 0},
- {"EVFILT_TIMER", Const, 0},
- {"EVFILT_USER", Const, 0},
- {"EVFILT_VM", Const, 0},
- {"EVFILT_VNODE", Const, 0},
- {"EVFILT_WRITE", Const, 0},
- {"EV_ADD", Const, 0},
- {"EV_CLEAR", Const, 0},
- {"EV_DELETE", Const, 0},
- {"EV_DISABLE", Const, 0},
- {"EV_DISPATCH", Const, 0},
- {"EV_DROP", Const, 3},
- {"EV_ENABLE", Const, 0},
- {"EV_EOF", Const, 0},
- {"EV_ERROR", Const, 0},
- {"EV_FLAG0", Const, 0},
- {"EV_FLAG1", Const, 0},
- {"EV_ONESHOT", Const, 0},
- {"EV_OOBAND", Const, 0},
- {"EV_POLL", Const, 0},
- {"EV_RECEIPT", Const, 0},
- {"EV_SYSFLAGS", Const, 0},
- {"EWINDOWS", Const, 0},
- {"EWOULDBLOCK", Const, 0},
- {"EXDEV", Const, 0},
- {"EXFULL", Const, 0},
- {"EXTA", Const, 0},
- {"EXTB", Const, 0},
- {"EXTPROC", Const, 0},
- {"Environ", Func, 0},
- {"EpollCreate", Func, 0},
- {"EpollCreate1", Func, 0},
- {"EpollCtl", Func, 0},
- {"EpollEvent", Type, 0},
- {"EpollEvent.Events", Field, 0},
- {"EpollEvent.Fd", Field, 0},
- {"EpollEvent.Pad", Field, 0},
- {"EpollEvent.PadFd", Field, 0},
- {"EpollWait", Func, 0},
- {"Errno", Type, 0},
- {"EscapeArg", Func, 0},
- {"Exchangedata", Func, 0},
- {"Exec", Func, 0},
- {"Exit", Func, 0},
- {"ExitProcess", Func, 0},
- {"FD_CLOEXEC", Const, 0},
- {"FD_SETSIZE", Const, 0},
- {"FILE_ACTION_ADDED", Const, 0},
- {"FILE_ACTION_MODIFIED", Const, 0},
- {"FILE_ACTION_REMOVED", Const, 0},
- {"FILE_ACTION_RENAMED_NEW_NAME", Const, 0},
- {"FILE_ACTION_RENAMED_OLD_NAME", Const, 0},
- {"FILE_APPEND_DATA", Const, 0},
- {"FILE_ATTRIBUTE_ARCHIVE", Const, 0},
- {"FILE_ATTRIBUTE_DIRECTORY", Const, 0},
- {"FILE_ATTRIBUTE_HIDDEN", Const, 0},
- {"FILE_ATTRIBUTE_NORMAL", Const, 0},
- {"FILE_ATTRIBUTE_READONLY", Const, 0},
- {"FILE_ATTRIBUTE_REPARSE_POINT", Const, 4},
- {"FILE_ATTRIBUTE_SYSTEM", Const, 0},
- {"FILE_BEGIN", Const, 0},
- {"FILE_CURRENT", Const, 0},
- {"FILE_END", Const, 0},
- {"FILE_FLAG_BACKUP_SEMANTICS", Const, 0},
- {"FILE_FLAG_OPEN_REPARSE_POINT", Const, 4},
- {"FILE_FLAG_OVERLAPPED", Const, 0},
- {"FILE_LIST_DIRECTORY", Const, 0},
- {"FILE_MAP_COPY", Const, 0},
- {"FILE_MAP_EXECUTE", Const, 0},
- {"FILE_MAP_READ", Const, 0},
- {"FILE_MAP_WRITE", Const, 0},
- {"FILE_NOTIFY_CHANGE_ATTRIBUTES", Const, 0},
- {"FILE_NOTIFY_CHANGE_CREATION", Const, 0},
- {"FILE_NOTIFY_CHANGE_DIR_NAME", Const, 0},
- {"FILE_NOTIFY_CHANGE_FILE_NAME", Const, 0},
- {"FILE_NOTIFY_CHANGE_LAST_ACCESS", Const, 0},
- {"FILE_NOTIFY_CHANGE_LAST_WRITE", Const, 0},
- {"FILE_NOTIFY_CHANGE_SIZE", Const, 0},
- {"FILE_SHARE_DELETE", Const, 0},
- {"FILE_SHARE_READ", Const, 0},
- {"FILE_SHARE_WRITE", Const, 0},
- {"FILE_SKIP_COMPLETION_PORT_ON_SUCCESS", Const, 2},
- {"FILE_SKIP_SET_EVENT_ON_HANDLE", Const, 2},
- {"FILE_TYPE_CHAR", Const, 0},
- {"FILE_TYPE_DISK", Const, 0},
- {"FILE_TYPE_PIPE", Const, 0},
- {"FILE_TYPE_REMOTE", Const, 0},
- {"FILE_TYPE_UNKNOWN", Const, 0},
- {"FILE_WRITE_ATTRIBUTES", Const, 0},
- {"FLUSHO", Const, 0},
- {"FORMAT_MESSAGE_ALLOCATE_BUFFER", Const, 0},
- {"FORMAT_MESSAGE_ARGUMENT_ARRAY", Const, 0},
- {"FORMAT_MESSAGE_FROM_HMODULE", Const, 0},
- {"FORMAT_MESSAGE_FROM_STRING", Const, 0},
- {"FORMAT_MESSAGE_FROM_SYSTEM", Const, 0},
- {"FORMAT_MESSAGE_IGNORE_INSERTS", Const, 0},
- {"FORMAT_MESSAGE_MAX_WIDTH_MASK", Const, 0},
- {"FSCTL_GET_REPARSE_POINT", Const, 4},
- {"F_ADDFILESIGS", Const, 0},
- {"F_ADDSIGS", Const, 0},
- {"F_ALLOCATEALL", Const, 0},
- {"F_ALLOCATECONTIG", Const, 0},
- {"F_CANCEL", Const, 0},
- {"F_CHKCLEAN", Const, 0},
- {"F_CLOSEM", Const, 1},
- {"F_DUP2FD", Const, 0},
- {"F_DUP2FD_CLOEXEC", Const, 1},
- {"F_DUPFD", Const, 0},
- {"F_DUPFD_CLOEXEC", Const, 0},
- {"F_EXLCK", Const, 0},
- {"F_FINDSIGS", Const, 16},
- {"F_FLUSH_DATA", Const, 0},
- {"F_FREEZE_FS", Const, 0},
- {"F_FSCTL", Const, 1},
- {"F_FSDIRMASK", Const, 1},
- {"F_FSIN", Const, 1},
- {"F_FSINOUT", Const, 1},
- {"F_FSOUT", Const, 1},
- {"F_FSPRIV", Const, 1},
- {"F_FSVOID", Const, 1},
- {"F_FULLFSYNC", Const, 0},
- {"F_GETCODEDIR", Const, 16},
- {"F_GETFD", Const, 0},
- {"F_GETFL", Const, 0},
- {"F_GETLEASE", Const, 0},
- {"F_GETLK", Const, 0},
- {"F_GETLK64", Const, 0},
- {"F_GETLKPID", Const, 0},
- {"F_GETNOSIGPIPE", Const, 0},
- {"F_GETOWN", Const, 0},
- {"F_GETOWN_EX", Const, 0},
- {"F_GETPATH", Const, 0},
- {"F_GETPATH_MTMINFO", Const, 0},
- {"F_GETPIPE_SZ", Const, 0},
- {"F_GETPROTECTIONCLASS", Const, 0},
- {"F_GETPROTECTIONLEVEL", Const, 16},
- {"F_GETSIG", Const, 0},
- {"F_GLOBAL_NOCACHE", Const, 0},
- {"F_LOCK", Const, 0},
- {"F_LOG2PHYS", Const, 0},
- {"F_LOG2PHYS_EXT", Const, 0},
- {"F_MARKDEPENDENCY", Const, 0},
- {"F_MAXFD", Const, 1},
- {"F_NOCACHE", Const, 0},
- {"F_NODIRECT", Const, 0},
- {"F_NOTIFY", Const, 0},
- {"F_OGETLK", Const, 0},
- {"F_OK", Const, 0},
- {"F_OSETLK", Const, 0},
- {"F_OSETLKW", Const, 0},
- {"F_PARAM_MASK", Const, 1},
- {"F_PARAM_MAX", Const, 1},
- {"F_PATHPKG_CHECK", Const, 0},
- {"F_PEOFPOSMODE", Const, 0},
- {"F_PREALLOCATE", Const, 0},
- {"F_RDADVISE", Const, 0},
- {"F_RDAHEAD", Const, 0},
- {"F_RDLCK", Const, 0},
- {"F_READAHEAD", Const, 0},
- {"F_READBOOTSTRAP", Const, 0},
- {"F_SETBACKINGSTORE", Const, 0},
- {"F_SETFD", Const, 0},
- {"F_SETFL", Const, 0},
- {"F_SETLEASE", Const, 0},
- {"F_SETLK", Const, 0},
- {"F_SETLK64", Const, 0},
- {"F_SETLKW", Const, 0},
- {"F_SETLKW64", Const, 0},
- {"F_SETLKWTIMEOUT", Const, 16},
- {"F_SETLK_REMOTE", Const, 0},
- {"F_SETNOSIGPIPE", Const, 0},
- {"F_SETOWN", Const, 0},
- {"F_SETOWN_EX", Const, 0},
- {"F_SETPIPE_SZ", Const, 0},
- {"F_SETPROTECTIONCLASS", Const, 0},
- {"F_SETSIG", Const, 0},
- {"F_SETSIZE", Const, 0},
- {"F_SHLCK", Const, 0},
- {"F_SINGLE_WRITER", Const, 16},
- {"F_TEST", Const, 0},
- {"F_THAW_FS", Const, 0},
- {"F_TLOCK", Const, 0},
- {"F_TRANSCODEKEY", Const, 16},
- {"F_ULOCK", Const, 0},
- {"F_UNLCK", Const, 0},
- {"F_UNLCKSYS", Const, 0},
- {"F_VOLPOSMODE", Const, 0},
- {"F_WRITEBOOTSTRAP", Const, 0},
- {"F_WRLCK", Const, 0},
- {"Faccessat", Func, 0},
- {"Fallocate", Func, 0},
- {"Fbootstraptransfer_t", Type, 0},
- {"Fbootstraptransfer_t.Buffer", Field, 0},
- {"Fbootstraptransfer_t.Length", Field, 0},
- {"Fbootstraptransfer_t.Offset", Field, 0},
- {"Fchdir", Func, 0},
- {"Fchflags", Func, 0},
- {"Fchmod", Func, 0},
- {"Fchmodat", Func, 0},
- {"Fchown", Func, 0},
- {"Fchownat", Func, 0},
- {"FcntlFlock", Func, 3},
- {"FdSet", Type, 0},
- {"FdSet.Bits", Field, 0},
- {"FdSet.X__fds_bits", Field, 0},
- {"Fdatasync", Func, 0},
- {"FileNotifyInformation", Type, 0},
- {"FileNotifyInformation.Action", Field, 0},
- {"FileNotifyInformation.FileName", Field, 0},
- {"FileNotifyInformation.FileNameLength", Field, 0},
- {"FileNotifyInformation.NextEntryOffset", Field, 0},
- {"Filetime", Type, 0},
- {"Filetime.HighDateTime", Field, 0},
- {"Filetime.LowDateTime", Field, 0},
- {"FindClose", Func, 0},
- {"FindFirstFile", Func, 0},
- {"FindNextFile", Func, 0},
- {"Flock", Func, 0},
- {"Flock_t", Type, 0},
- {"Flock_t.Len", Field, 0},
- {"Flock_t.Pad_cgo_0", Field, 0},
- {"Flock_t.Pad_cgo_1", Field, 3},
- {"Flock_t.Pid", Field, 0},
- {"Flock_t.Start", Field, 0},
- {"Flock_t.Sysid", Field, 0},
- {"Flock_t.Type", Field, 0},
- {"Flock_t.Whence", Field, 0},
- {"FlushBpf", Func, 0},
- {"FlushFileBuffers", Func, 0},
- {"FlushViewOfFile", Func, 0},
- {"ForkExec", Func, 0},
- {"ForkLock", Var, 0},
- {"FormatMessage", Func, 0},
- {"Fpathconf", Func, 0},
- {"FreeAddrInfoW", Func, 1},
- {"FreeEnvironmentStrings", Func, 0},
- {"FreeLibrary", Func, 0},
- {"Fsid", Type, 0},
- {"Fsid.Val", Field, 0},
- {"Fsid.X__fsid_val", Field, 2},
- {"Fsid.X__val", Field, 0},
- {"Fstat", Func, 0},
- {"Fstatat", Func, 12},
- {"Fstatfs", Func, 0},
- {"Fstore_t", Type, 0},
- {"Fstore_t.Bytesalloc", Field, 0},
- {"Fstore_t.Flags", Field, 0},
- {"Fstore_t.Length", Field, 0},
- {"Fstore_t.Offset", Field, 0},
- {"Fstore_t.Posmode", Field, 0},
- {"Fsync", Func, 0},
- {"Ftruncate", Func, 0},
- {"FullPath", Func, 4},
- {"Futimes", Func, 0},
- {"Futimesat", Func, 0},
- {"GENERIC_ALL", Const, 0},
- {"GENERIC_EXECUTE", Const, 0},
- {"GENERIC_READ", Const, 0},
- {"GENERIC_WRITE", Const, 0},
- {"GUID", Type, 1},
- {"GUID.Data1", Field, 1},
- {"GUID.Data2", Field, 1},
- {"GUID.Data3", Field, 1},
- {"GUID.Data4", Field, 1},
- {"GetAcceptExSockaddrs", Func, 0},
- {"GetAdaptersInfo", Func, 0},
- {"GetAddrInfoW", Func, 1},
- {"GetCommandLine", Func, 0},
- {"GetComputerName", Func, 0},
- {"GetConsoleMode", Func, 1},
- {"GetCurrentDirectory", Func, 0},
- {"GetCurrentProcess", Func, 0},
- {"GetEnvironmentStrings", Func, 0},
- {"GetEnvironmentVariable", Func, 0},
- {"GetExitCodeProcess", Func, 0},
- {"GetFileAttributes", Func, 0},
- {"GetFileAttributesEx", Func, 0},
- {"GetFileExInfoStandard", Const, 0},
- {"GetFileExMaxInfoLevel", Const, 0},
- {"GetFileInformationByHandle", Func, 0},
- {"GetFileType", Func, 0},
- {"GetFullPathName", Func, 0},
- {"GetHostByName", Func, 0},
- {"GetIfEntry", Func, 0},
- {"GetLastError", Func, 0},
- {"GetLengthSid", Func, 0},
- {"GetLongPathName", Func, 0},
- {"GetProcAddress", Func, 0},
- {"GetProcessTimes", Func, 0},
- {"GetProtoByName", Func, 0},
- {"GetQueuedCompletionStatus", Func, 0},
- {"GetServByName", Func, 0},
- {"GetShortPathName", Func, 0},
- {"GetStartupInfo", Func, 0},
- {"GetStdHandle", Func, 0},
- {"GetSystemTimeAsFileTime", Func, 0},
- {"GetTempPath", Func, 0},
- {"GetTimeZoneInformation", Func, 0},
- {"GetTokenInformation", Func, 0},
- {"GetUserNameEx", Func, 0},
- {"GetUserProfileDirectory", Func, 0},
- {"GetVersion", Func, 0},
- {"Getcwd", Func, 0},
- {"Getdents", Func, 0},
- {"Getdirentries", Func, 0},
- {"Getdtablesize", Func, 0},
- {"Getegid", Func, 0},
- {"Getenv", Func, 0},
- {"Geteuid", Func, 0},
- {"Getfsstat", Func, 0},
- {"Getgid", Func, 0},
- {"Getgroups", Func, 0},
- {"Getpagesize", Func, 0},
- {"Getpeername", Func, 0},
- {"Getpgid", Func, 0},
- {"Getpgrp", Func, 0},
- {"Getpid", Func, 0},
- {"Getppid", Func, 0},
- {"Getpriority", Func, 0},
- {"Getrlimit", Func, 0},
- {"Getrusage", Func, 0},
- {"Getsid", Func, 0},
- {"Getsockname", Func, 0},
- {"Getsockopt", Func, 1},
- {"GetsockoptByte", Func, 0},
- {"GetsockoptICMPv6Filter", Func, 2},
- {"GetsockoptIPMreq", Func, 0},
- {"GetsockoptIPMreqn", Func, 0},
- {"GetsockoptIPv6MTUInfo", Func, 2},
- {"GetsockoptIPv6Mreq", Func, 0},
- {"GetsockoptInet4Addr", Func, 0},
- {"GetsockoptInt", Func, 0},
- {"GetsockoptUcred", Func, 1},
- {"Gettid", Func, 0},
- {"Gettimeofday", Func, 0},
- {"Getuid", Func, 0},
- {"Getwd", Func, 0},
- {"Getxattr", Func, 1},
- {"HANDLE_FLAG_INHERIT", Const, 0},
- {"HKEY_CLASSES_ROOT", Const, 0},
- {"HKEY_CURRENT_CONFIG", Const, 0},
- {"HKEY_CURRENT_USER", Const, 0},
- {"HKEY_DYN_DATA", Const, 0},
- {"HKEY_LOCAL_MACHINE", Const, 0},
- {"HKEY_PERFORMANCE_DATA", Const, 0},
- {"HKEY_USERS", Const, 0},
- {"HUPCL", Const, 0},
- {"Handle", Type, 0},
- {"Hostent", Type, 0},
- {"Hostent.AddrList", Field, 0},
- {"Hostent.AddrType", Field, 0},
- {"Hostent.Aliases", Field, 0},
- {"Hostent.Length", Field, 0},
- {"Hostent.Name", Field, 0},
- {"ICANON", Const, 0},
- {"ICMP6_FILTER", Const, 2},
- {"ICMPV6_FILTER", Const, 2},
- {"ICMPv6Filter", Type, 2},
- {"ICMPv6Filter.Data", Field, 2},
- {"ICMPv6Filter.Filt", Field, 2},
- {"ICRNL", Const, 0},
- {"IEXTEN", Const, 0},
- {"IFAN_ARRIVAL", Const, 1},
- {"IFAN_DEPARTURE", Const, 1},
- {"IFA_ADDRESS", Const, 0},
- {"IFA_ANYCAST", Const, 0},
- {"IFA_BROADCAST", Const, 0},
- {"IFA_CACHEINFO", Const, 0},
- {"IFA_F_DADFAILED", Const, 0},
- {"IFA_F_DEPRECATED", Const, 0},
- {"IFA_F_HOMEADDRESS", Const, 0},
- {"IFA_F_NODAD", Const, 0},
- {"IFA_F_OPTIMISTIC", Const, 0},
- {"IFA_F_PERMANENT", Const, 0},
- {"IFA_F_SECONDARY", Const, 0},
- {"IFA_F_TEMPORARY", Const, 0},
- {"IFA_F_TENTATIVE", Const, 0},
- {"IFA_LABEL", Const, 0},
- {"IFA_LOCAL", Const, 0},
- {"IFA_MAX", Const, 0},
- {"IFA_MULTICAST", Const, 0},
- {"IFA_ROUTE", Const, 1},
- {"IFA_UNSPEC", Const, 0},
- {"IFF_ALLMULTI", Const, 0},
- {"IFF_ALTPHYS", Const, 0},
- {"IFF_AUTOMEDIA", Const, 0},
- {"IFF_BROADCAST", Const, 0},
- {"IFF_CANTCHANGE", Const, 0},
- {"IFF_CANTCONFIG", Const, 1},
- {"IFF_DEBUG", Const, 0},
- {"IFF_DRV_OACTIVE", Const, 0},
- {"IFF_DRV_RUNNING", Const, 0},
- {"IFF_DYING", Const, 0},
- {"IFF_DYNAMIC", Const, 0},
- {"IFF_LINK0", Const, 0},
- {"IFF_LINK1", Const, 0},
- {"IFF_LINK2", Const, 0},
- {"IFF_LOOPBACK", Const, 0},
- {"IFF_MASTER", Const, 0},
- {"IFF_MONITOR", Const, 0},
- {"IFF_MULTICAST", Const, 0},
- {"IFF_NOARP", Const, 0},
- {"IFF_NOTRAILERS", Const, 0},
- {"IFF_NO_PI", Const, 0},
- {"IFF_OACTIVE", Const, 0},
- {"IFF_ONE_QUEUE", Const, 0},
- {"IFF_POINTOPOINT", Const, 0},
- {"IFF_POINTTOPOINT", Const, 0},
- {"IFF_PORTSEL", Const, 0},
- {"IFF_PPROMISC", Const, 0},
- {"IFF_PROMISC", Const, 0},
- {"IFF_RENAMING", Const, 0},
- {"IFF_RUNNING", Const, 0},
- {"IFF_SIMPLEX", Const, 0},
- {"IFF_SLAVE", Const, 0},
- {"IFF_SMART", Const, 0},
- {"IFF_STATICARP", Const, 0},
- {"IFF_TAP", Const, 0},
- {"IFF_TUN", Const, 0},
- {"IFF_TUN_EXCL", Const, 0},
- {"IFF_UP", Const, 0},
- {"IFF_VNET_HDR", Const, 0},
- {"IFLA_ADDRESS", Const, 0},
- {"IFLA_BROADCAST", Const, 0},
- {"IFLA_COST", Const, 0},
- {"IFLA_IFALIAS", Const, 0},
- {"IFLA_IFNAME", Const, 0},
- {"IFLA_LINK", Const, 0},
- {"IFLA_LINKINFO", Const, 0},
- {"IFLA_LINKMODE", Const, 0},
- {"IFLA_MAP", Const, 0},
- {"IFLA_MASTER", Const, 0},
- {"IFLA_MAX", Const, 0},
- {"IFLA_MTU", Const, 0},
- {"IFLA_NET_NS_PID", Const, 0},
- {"IFLA_OPERSTATE", Const, 0},
- {"IFLA_PRIORITY", Const, 0},
- {"IFLA_PROTINFO", Const, 0},
- {"IFLA_QDISC", Const, 0},
- {"IFLA_STATS", Const, 0},
- {"IFLA_TXQLEN", Const, 0},
- {"IFLA_UNSPEC", Const, 0},
- {"IFLA_WEIGHT", Const, 0},
- {"IFLA_WIRELESS", Const, 0},
- {"IFNAMSIZ", Const, 0},
- {"IFT_1822", Const, 0},
- {"IFT_A12MPPSWITCH", Const, 0},
- {"IFT_AAL2", Const, 0},
- {"IFT_AAL5", Const, 0},
- {"IFT_ADSL", Const, 0},
- {"IFT_AFLANE8023", Const, 0},
- {"IFT_AFLANE8025", Const, 0},
- {"IFT_ARAP", Const, 0},
- {"IFT_ARCNET", Const, 0},
- {"IFT_ARCNETPLUS", Const, 0},
- {"IFT_ASYNC", Const, 0},
- {"IFT_ATM", Const, 0},
- {"IFT_ATMDXI", Const, 0},
- {"IFT_ATMFUNI", Const, 0},
- {"IFT_ATMIMA", Const, 0},
- {"IFT_ATMLOGICAL", Const, 0},
- {"IFT_ATMRADIO", Const, 0},
- {"IFT_ATMSUBINTERFACE", Const, 0},
- {"IFT_ATMVCIENDPT", Const, 0},
- {"IFT_ATMVIRTUAL", Const, 0},
- {"IFT_BGPPOLICYACCOUNTING", Const, 0},
- {"IFT_BLUETOOTH", Const, 1},
- {"IFT_BRIDGE", Const, 0},
- {"IFT_BSC", Const, 0},
- {"IFT_CARP", Const, 0},
- {"IFT_CCTEMUL", Const, 0},
- {"IFT_CELLULAR", Const, 0},
- {"IFT_CEPT", Const, 0},
- {"IFT_CES", Const, 0},
- {"IFT_CHANNEL", Const, 0},
- {"IFT_CNR", Const, 0},
- {"IFT_COFFEE", Const, 0},
- {"IFT_COMPOSITELINK", Const, 0},
- {"IFT_DCN", Const, 0},
- {"IFT_DIGITALPOWERLINE", Const, 0},
- {"IFT_DIGITALWRAPPEROVERHEADCHANNEL", Const, 0},
- {"IFT_DLSW", Const, 0},
- {"IFT_DOCSCABLEDOWNSTREAM", Const, 0},
- {"IFT_DOCSCABLEMACLAYER", Const, 0},
- {"IFT_DOCSCABLEUPSTREAM", Const, 0},
- {"IFT_DOCSCABLEUPSTREAMCHANNEL", Const, 1},
- {"IFT_DS0", Const, 0},
- {"IFT_DS0BUNDLE", Const, 0},
- {"IFT_DS1FDL", Const, 0},
- {"IFT_DS3", Const, 0},
- {"IFT_DTM", Const, 0},
- {"IFT_DUMMY", Const, 1},
- {"IFT_DVBASILN", Const, 0},
- {"IFT_DVBASIOUT", Const, 0},
- {"IFT_DVBRCCDOWNSTREAM", Const, 0},
- {"IFT_DVBRCCMACLAYER", Const, 0},
- {"IFT_DVBRCCUPSTREAM", Const, 0},
- {"IFT_ECONET", Const, 1},
- {"IFT_ENC", Const, 0},
- {"IFT_EON", Const, 0},
- {"IFT_EPLRS", Const, 0},
- {"IFT_ESCON", Const, 0},
- {"IFT_ETHER", Const, 0},
- {"IFT_FAITH", Const, 0},
- {"IFT_FAST", Const, 0},
- {"IFT_FASTETHER", Const, 0},
- {"IFT_FASTETHERFX", Const, 0},
- {"IFT_FDDI", Const, 0},
- {"IFT_FIBRECHANNEL", Const, 0},
- {"IFT_FRAMERELAYINTERCONNECT", Const, 0},
- {"IFT_FRAMERELAYMPI", Const, 0},
- {"IFT_FRDLCIENDPT", Const, 0},
- {"IFT_FRELAY", Const, 0},
- {"IFT_FRELAYDCE", Const, 0},
- {"IFT_FRF16MFRBUNDLE", Const, 0},
- {"IFT_FRFORWARD", Const, 0},
- {"IFT_G703AT2MB", Const, 0},
- {"IFT_G703AT64K", Const, 0},
- {"IFT_GIF", Const, 0},
- {"IFT_GIGABITETHERNET", Const, 0},
- {"IFT_GR303IDT", Const, 0},
- {"IFT_GR303RDT", Const, 0},
- {"IFT_H323GATEKEEPER", Const, 0},
- {"IFT_H323PROXY", Const, 0},
- {"IFT_HDH1822", Const, 0},
- {"IFT_HDLC", Const, 0},
- {"IFT_HDSL2", Const, 0},
- {"IFT_HIPERLAN2", Const, 0},
- {"IFT_HIPPI", Const, 0},
- {"IFT_HIPPIINTERFACE", Const, 0},
- {"IFT_HOSTPAD", Const, 0},
- {"IFT_HSSI", Const, 0},
- {"IFT_HY", Const, 0},
- {"IFT_IBM370PARCHAN", Const, 0},
- {"IFT_IDSL", Const, 0},
- {"IFT_IEEE1394", Const, 0},
- {"IFT_IEEE80211", Const, 0},
- {"IFT_IEEE80212", Const, 0},
- {"IFT_IEEE8023ADLAG", Const, 0},
- {"IFT_IFGSN", Const, 0},
- {"IFT_IMT", Const, 0},
- {"IFT_INFINIBAND", Const, 1},
- {"IFT_INTERLEAVE", Const, 0},
- {"IFT_IP", Const, 0},
- {"IFT_IPFORWARD", Const, 0},
- {"IFT_IPOVERATM", Const, 0},
- {"IFT_IPOVERCDLC", Const, 0},
- {"IFT_IPOVERCLAW", Const, 0},
- {"IFT_IPSWITCH", Const, 0},
- {"IFT_IPXIP", Const, 0},
- {"IFT_ISDN", Const, 0},
- {"IFT_ISDNBASIC", Const, 0},
- {"IFT_ISDNPRIMARY", Const, 0},
- {"IFT_ISDNS", Const, 0},
- {"IFT_ISDNU", Const, 0},
- {"IFT_ISO88022LLC", Const, 0},
- {"IFT_ISO88023", Const, 0},
- {"IFT_ISO88024", Const, 0},
- {"IFT_ISO88025", Const, 0},
- {"IFT_ISO88025CRFPINT", Const, 0},
- {"IFT_ISO88025DTR", Const, 0},
- {"IFT_ISO88025FIBER", Const, 0},
- {"IFT_ISO88026", Const, 0},
- {"IFT_ISUP", Const, 0},
- {"IFT_L2VLAN", Const, 0},
- {"IFT_L3IPVLAN", Const, 0},
- {"IFT_L3IPXVLAN", Const, 0},
- {"IFT_LAPB", Const, 0},
- {"IFT_LAPD", Const, 0},
- {"IFT_LAPF", Const, 0},
- {"IFT_LINEGROUP", Const, 1},
- {"IFT_LOCALTALK", Const, 0},
- {"IFT_LOOP", Const, 0},
- {"IFT_MEDIAMAILOVERIP", Const, 0},
- {"IFT_MFSIGLINK", Const, 0},
- {"IFT_MIOX25", Const, 0},
- {"IFT_MODEM", Const, 0},
- {"IFT_MPC", Const, 0},
- {"IFT_MPLS", Const, 0},
- {"IFT_MPLSTUNNEL", Const, 0},
- {"IFT_MSDSL", Const, 0},
- {"IFT_MVL", Const, 0},
- {"IFT_MYRINET", Const, 0},
- {"IFT_NFAS", Const, 0},
- {"IFT_NSIP", Const, 0},
- {"IFT_OPTICALCHANNEL", Const, 0},
- {"IFT_OPTICALTRANSPORT", Const, 0},
- {"IFT_OTHER", Const, 0},
- {"IFT_P10", Const, 0},
- {"IFT_P80", Const, 0},
- {"IFT_PARA", Const, 0},
- {"IFT_PDP", Const, 0},
- {"IFT_PFLOG", Const, 0},
- {"IFT_PFLOW", Const, 1},
- {"IFT_PFSYNC", Const, 0},
- {"IFT_PLC", Const, 0},
- {"IFT_PON155", Const, 1},
- {"IFT_PON622", Const, 1},
- {"IFT_POS", Const, 0},
- {"IFT_PPP", Const, 0},
- {"IFT_PPPMULTILINKBUNDLE", Const, 0},
- {"IFT_PROPATM", Const, 1},
- {"IFT_PROPBWAP2MP", Const, 0},
- {"IFT_PROPCNLS", Const, 0},
- {"IFT_PROPDOCSWIRELESSDOWNSTREAM", Const, 0},
- {"IFT_PROPDOCSWIRELESSMACLAYER", Const, 0},
- {"IFT_PROPDOCSWIRELESSUPSTREAM", Const, 0},
- {"IFT_PROPMUX", Const, 0},
- {"IFT_PROPVIRTUAL", Const, 0},
- {"IFT_PROPWIRELESSP2P", Const, 0},
- {"IFT_PTPSERIAL", Const, 0},
- {"IFT_PVC", Const, 0},
- {"IFT_Q2931", Const, 1},
- {"IFT_QLLC", Const, 0},
- {"IFT_RADIOMAC", Const, 0},
- {"IFT_RADSL", Const, 0},
- {"IFT_REACHDSL", Const, 0},
- {"IFT_RFC1483", Const, 0},
- {"IFT_RS232", Const, 0},
- {"IFT_RSRB", Const, 0},
- {"IFT_SDLC", Const, 0},
- {"IFT_SDSL", Const, 0},
- {"IFT_SHDSL", Const, 0},
- {"IFT_SIP", Const, 0},
- {"IFT_SIPSIG", Const, 1},
- {"IFT_SIPTG", Const, 1},
- {"IFT_SLIP", Const, 0},
- {"IFT_SMDSDXI", Const, 0},
- {"IFT_SMDSICIP", Const, 0},
- {"IFT_SONET", Const, 0},
- {"IFT_SONETOVERHEADCHANNEL", Const, 0},
- {"IFT_SONETPATH", Const, 0},
- {"IFT_SONETVT", Const, 0},
- {"IFT_SRP", Const, 0},
- {"IFT_SS7SIGLINK", Const, 0},
- {"IFT_STACKTOSTACK", Const, 0},
- {"IFT_STARLAN", Const, 0},
- {"IFT_STF", Const, 0},
- {"IFT_T1", Const, 0},
- {"IFT_TDLC", Const, 0},
- {"IFT_TELINK", Const, 1},
- {"IFT_TERMPAD", Const, 0},
- {"IFT_TR008", Const, 0},
- {"IFT_TRANSPHDLC", Const, 0},
- {"IFT_TUNNEL", Const, 0},
- {"IFT_ULTRA", Const, 0},
- {"IFT_USB", Const, 0},
- {"IFT_V11", Const, 0},
- {"IFT_V35", Const, 0},
- {"IFT_V36", Const, 0},
- {"IFT_V37", Const, 0},
- {"IFT_VDSL", Const, 0},
- {"IFT_VIRTUALIPADDRESS", Const, 0},
- {"IFT_VIRTUALTG", Const, 1},
- {"IFT_VOICEDID", Const, 1},
- {"IFT_VOICEEM", Const, 0},
- {"IFT_VOICEEMFGD", Const, 1},
- {"IFT_VOICEENCAP", Const, 0},
- {"IFT_VOICEFGDEANA", Const, 1},
- {"IFT_VOICEFXO", Const, 0},
- {"IFT_VOICEFXS", Const, 0},
- {"IFT_VOICEOVERATM", Const, 0},
- {"IFT_VOICEOVERCABLE", Const, 1},
- {"IFT_VOICEOVERFRAMERELAY", Const, 0},
- {"IFT_VOICEOVERIP", Const, 0},
- {"IFT_X213", Const, 0},
- {"IFT_X25", Const, 0},
- {"IFT_X25DDN", Const, 0},
- {"IFT_X25HUNTGROUP", Const, 0},
- {"IFT_X25MLP", Const, 0},
- {"IFT_X25PLE", Const, 0},
- {"IFT_XETHER", Const, 0},
- {"IGNBRK", Const, 0},
- {"IGNCR", Const, 0},
- {"IGNORE", Const, 0},
- {"IGNPAR", Const, 0},
- {"IMAXBEL", Const, 0},
- {"INFINITE", Const, 0},
- {"INLCR", Const, 0},
- {"INPCK", Const, 0},
- {"INVALID_FILE_ATTRIBUTES", Const, 0},
- {"IN_ACCESS", Const, 0},
- {"IN_ALL_EVENTS", Const, 0},
- {"IN_ATTRIB", Const, 0},
- {"IN_CLASSA_HOST", Const, 0},
- {"IN_CLASSA_MAX", Const, 0},
- {"IN_CLASSA_NET", Const, 0},
- {"IN_CLASSA_NSHIFT", Const, 0},
- {"IN_CLASSB_HOST", Const, 0},
- {"IN_CLASSB_MAX", Const, 0},
- {"IN_CLASSB_NET", Const, 0},
- {"IN_CLASSB_NSHIFT", Const, 0},
- {"IN_CLASSC_HOST", Const, 0},
- {"IN_CLASSC_NET", Const, 0},
- {"IN_CLASSC_NSHIFT", Const, 0},
- {"IN_CLASSD_HOST", Const, 0},
- {"IN_CLASSD_NET", Const, 0},
- {"IN_CLASSD_NSHIFT", Const, 0},
- {"IN_CLOEXEC", Const, 0},
- {"IN_CLOSE", Const, 0},
- {"IN_CLOSE_NOWRITE", Const, 0},
- {"IN_CLOSE_WRITE", Const, 0},
- {"IN_CREATE", Const, 0},
- {"IN_DELETE", Const, 0},
- {"IN_DELETE_SELF", Const, 0},
- {"IN_DONT_FOLLOW", Const, 0},
- {"IN_EXCL_UNLINK", Const, 0},
- {"IN_IGNORED", Const, 0},
- {"IN_ISDIR", Const, 0},
- {"IN_LINKLOCALNETNUM", Const, 0},
- {"IN_LOOPBACKNET", Const, 0},
- {"IN_MASK_ADD", Const, 0},
- {"IN_MODIFY", Const, 0},
- {"IN_MOVE", Const, 0},
- {"IN_MOVED_FROM", Const, 0},
- {"IN_MOVED_TO", Const, 0},
- {"IN_MOVE_SELF", Const, 0},
- {"IN_NONBLOCK", Const, 0},
- {"IN_ONESHOT", Const, 0},
- {"IN_ONLYDIR", Const, 0},
- {"IN_OPEN", Const, 0},
- {"IN_Q_OVERFLOW", Const, 0},
- {"IN_RFC3021_HOST", Const, 1},
- {"IN_RFC3021_MASK", Const, 1},
- {"IN_RFC3021_NET", Const, 1},
- {"IN_RFC3021_NSHIFT", Const, 1},
- {"IN_UNMOUNT", Const, 0},
- {"IOC_IN", Const, 1},
- {"IOC_INOUT", Const, 1},
- {"IOC_OUT", Const, 1},
- {"IOC_VENDOR", Const, 3},
- {"IOC_WS2", Const, 1},
- {"IO_REPARSE_TAG_SYMLINK", Const, 4},
- {"IPMreq", Type, 0},
- {"IPMreq.Interface", Field, 0},
- {"IPMreq.Multiaddr", Field, 0},
- {"IPMreqn", Type, 0},
- {"IPMreqn.Address", Field, 0},
- {"IPMreqn.Ifindex", Field, 0},
- {"IPMreqn.Multiaddr", Field, 0},
- {"IPPROTO_3PC", Const, 0},
- {"IPPROTO_ADFS", Const, 0},
- {"IPPROTO_AH", Const, 0},
- {"IPPROTO_AHIP", Const, 0},
- {"IPPROTO_APES", Const, 0},
- {"IPPROTO_ARGUS", Const, 0},
- {"IPPROTO_AX25", Const, 0},
- {"IPPROTO_BHA", Const, 0},
- {"IPPROTO_BLT", Const, 0},
- {"IPPROTO_BRSATMON", Const, 0},
- {"IPPROTO_CARP", Const, 0},
- {"IPPROTO_CFTP", Const, 0},
- {"IPPROTO_CHAOS", Const, 0},
- {"IPPROTO_CMTP", Const, 0},
- {"IPPROTO_COMP", Const, 0},
- {"IPPROTO_CPHB", Const, 0},
- {"IPPROTO_CPNX", Const, 0},
- {"IPPROTO_DCCP", Const, 0},
- {"IPPROTO_DDP", Const, 0},
- {"IPPROTO_DGP", Const, 0},
- {"IPPROTO_DIVERT", Const, 0},
- {"IPPROTO_DIVERT_INIT", Const, 3},
- {"IPPROTO_DIVERT_RESP", Const, 3},
- {"IPPROTO_DONE", Const, 0},
- {"IPPROTO_DSTOPTS", Const, 0},
- {"IPPROTO_EGP", Const, 0},
- {"IPPROTO_EMCON", Const, 0},
- {"IPPROTO_ENCAP", Const, 0},
- {"IPPROTO_EON", Const, 0},
- {"IPPROTO_ESP", Const, 0},
- {"IPPROTO_ETHERIP", Const, 0},
- {"IPPROTO_FRAGMENT", Const, 0},
- {"IPPROTO_GGP", Const, 0},
- {"IPPROTO_GMTP", Const, 0},
- {"IPPROTO_GRE", Const, 0},
- {"IPPROTO_HELLO", Const, 0},
- {"IPPROTO_HMP", Const, 0},
- {"IPPROTO_HOPOPTS", Const, 0},
- {"IPPROTO_ICMP", Const, 0},
- {"IPPROTO_ICMPV6", Const, 0},
- {"IPPROTO_IDP", Const, 0},
- {"IPPROTO_IDPR", Const, 0},
- {"IPPROTO_IDRP", Const, 0},
- {"IPPROTO_IGMP", Const, 0},
- {"IPPROTO_IGP", Const, 0},
- {"IPPROTO_IGRP", Const, 0},
- {"IPPROTO_IL", Const, 0},
- {"IPPROTO_INLSP", Const, 0},
- {"IPPROTO_INP", Const, 0},
- {"IPPROTO_IP", Const, 0},
- {"IPPROTO_IPCOMP", Const, 0},
- {"IPPROTO_IPCV", Const, 0},
- {"IPPROTO_IPEIP", Const, 0},
- {"IPPROTO_IPIP", Const, 0},
- {"IPPROTO_IPPC", Const, 0},
- {"IPPROTO_IPV4", Const, 0},
- {"IPPROTO_IPV6", Const, 0},
- {"IPPROTO_IPV6_ICMP", Const, 1},
- {"IPPROTO_IRTP", Const, 0},
- {"IPPROTO_KRYPTOLAN", Const, 0},
- {"IPPROTO_LARP", Const, 0},
- {"IPPROTO_LEAF1", Const, 0},
- {"IPPROTO_LEAF2", Const, 0},
- {"IPPROTO_MAX", Const, 0},
- {"IPPROTO_MAXID", Const, 0},
- {"IPPROTO_MEAS", Const, 0},
- {"IPPROTO_MH", Const, 1},
- {"IPPROTO_MHRP", Const, 0},
- {"IPPROTO_MICP", Const, 0},
- {"IPPROTO_MOBILE", Const, 0},
- {"IPPROTO_MPLS", Const, 1},
- {"IPPROTO_MTP", Const, 0},
- {"IPPROTO_MUX", Const, 0},
- {"IPPROTO_ND", Const, 0},
- {"IPPROTO_NHRP", Const, 0},
- {"IPPROTO_NONE", Const, 0},
- {"IPPROTO_NSP", Const, 0},
- {"IPPROTO_NVPII", Const, 0},
- {"IPPROTO_OLD_DIVERT", Const, 0},
- {"IPPROTO_OSPFIGP", Const, 0},
- {"IPPROTO_PFSYNC", Const, 0},
- {"IPPROTO_PGM", Const, 0},
- {"IPPROTO_PIGP", Const, 0},
- {"IPPROTO_PIM", Const, 0},
- {"IPPROTO_PRM", Const, 0},
- {"IPPROTO_PUP", Const, 0},
- {"IPPROTO_PVP", Const, 0},
- {"IPPROTO_RAW", Const, 0},
- {"IPPROTO_RCCMON", Const, 0},
- {"IPPROTO_RDP", Const, 0},
- {"IPPROTO_ROUTING", Const, 0},
- {"IPPROTO_RSVP", Const, 0},
- {"IPPROTO_RVD", Const, 0},
- {"IPPROTO_SATEXPAK", Const, 0},
- {"IPPROTO_SATMON", Const, 0},
- {"IPPROTO_SCCSP", Const, 0},
- {"IPPROTO_SCTP", Const, 0},
- {"IPPROTO_SDRP", Const, 0},
- {"IPPROTO_SEND", Const, 1},
- {"IPPROTO_SEP", Const, 0},
- {"IPPROTO_SKIP", Const, 0},
- {"IPPROTO_SPACER", Const, 0},
- {"IPPROTO_SRPC", Const, 0},
- {"IPPROTO_ST", Const, 0},
- {"IPPROTO_SVMTP", Const, 0},
- {"IPPROTO_SWIPE", Const, 0},
- {"IPPROTO_TCF", Const, 0},
- {"IPPROTO_TCP", Const, 0},
- {"IPPROTO_TLSP", Const, 0},
- {"IPPROTO_TP", Const, 0},
- {"IPPROTO_TPXX", Const, 0},
- {"IPPROTO_TRUNK1", Const, 0},
- {"IPPROTO_TRUNK2", Const, 0},
- {"IPPROTO_TTP", Const, 0},
- {"IPPROTO_UDP", Const, 0},
- {"IPPROTO_UDPLITE", Const, 0},
- {"IPPROTO_VINES", Const, 0},
- {"IPPROTO_VISA", Const, 0},
- {"IPPROTO_VMTP", Const, 0},
- {"IPPROTO_VRRP", Const, 1},
- {"IPPROTO_WBEXPAK", Const, 0},
- {"IPPROTO_WBMON", Const, 0},
- {"IPPROTO_WSN", Const, 0},
- {"IPPROTO_XNET", Const, 0},
- {"IPPROTO_XTP", Const, 0},
- {"IPV6_2292DSTOPTS", Const, 0},
- {"IPV6_2292HOPLIMIT", Const, 0},
- {"IPV6_2292HOPOPTS", Const, 0},
- {"IPV6_2292NEXTHOP", Const, 0},
- {"IPV6_2292PKTINFO", Const, 0},
- {"IPV6_2292PKTOPTIONS", Const, 0},
- {"IPV6_2292RTHDR", Const, 0},
- {"IPV6_ADDRFORM", Const, 0},
- {"IPV6_ADD_MEMBERSHIP", Const, 0},
- {"IPV6_AUTHHDR", Const, 0},
- {"IPV6_AUTH_LEVEL", Const, 1},
- {"IPV6_AUTOFLOWLABEL", Const, 0},
- {"IPV6_BINDANY", Const, 0},
- {"IPV6_BINDV6ONLY", Const, 0},
- {"IPV6_BOUND_IF", Const, 0},
- {"IPV6_CHECKSUM", Const, 0},
- {"IPV6_DEFAULT_MULTICAST_HOPS", Const, 0},
- {"IPV6_DEFAULT_MULTICAST_LOOP", Const, 0},
- {"IPV6_DEFHLIM", Const, 0},
- {"IPV6_DONTFRAG", Const, 0},
- {"IPV6_DROP_MEMBERSHIP", Const, 0},
- {"IPV6_DSTOPTS", Const, 0},
- {"IPV6_ESP_NETWORK_LEVEL", Const, 1},
- {"IPV6_ESP_TRANS_LEVEL", Const, 1},
- {"IPV6_FAITH", Const, 0},
- {"IPV6_FLOWINFO_MASK", Const, 0},
- {"IPV6_FLOWLABEL_MASK", Const, 0},
- {"IPV6_FRAGTTL", Const, 0},
- {"IPV6_FW_ADD", Const, 0},
- {"IPV6_FW_DEL", Const, 0},
- {"IPV6_FW_FLUSH", Const, 0},
- {"IPV6_FW_GET", Const, 0},
- {"IPV6_FW_ZERO", Const, 0},
- {"IPV6_HLIMDEC", Const, 0},
- {"IPV6_HOPLIMIT", Const, 0},
- {"IPV6_HOPOPTS", Const, 0},
- {"IPV6_IPCOMP_LEVEL", Const, 1},
- {"IPV6_IPSEC_POLICY", Const, 0},
- {"IPV6_JOIN_ANYCAST", Const, 0},
- {"IPV6_JOIN_GROUP", Const, 0},
- {"IPV6_LEAVE_ANYCAST", Const, 0},
- {"IPV6_LEAVE_GROUP", Const, 0},
- {"IPV6_MAXHLIM", Const, 0},
- {"IPV6_MAXOPTHDR", Const, 0},
- {"IPV6_MAXPACKET", Const, 0},
- {"IPV6_MAX_GROUP_SRC_FILTER", Const, 0},
- {"IPV6_MAX_MEMBERSHIPS", Const, 0},
- {"IPV6_MAX_SOCK_SRC_FILTER", Const, 0},
- {"IPV6_MIN_MEMBERSHIPS", Const, 0},
- {"IPV6_MMTU", Const, 0},
- {"IPV6_MSFILTER", Const, 0},
- {"IPV6_MTU", Const, 0},
- {"IPV6_MTU_DISCOVER", Const, 0},
- {"IPV6_MULTICAST_HOPS", Const, 0},
- {"IPV6_MULTICAST_IF", Const, 0},
- {"IPV6_MULTICAST_LOOP", Const, 0},
- {"IPV6_NEXTHOP", Const, 0},
- {"IPV6_OPTIONS", Const, 1},
- {"IPV6_PATHMTU", Const, 0},
- {"IPV6_PIPEX", Const, 1},
- {"IPV6_PKTINFO", Const, 0},
- {"IPV6_PMTUDISC_DO", Const, 0},
- {"IPV6_PMTUDISC_DONT", Const, 0},
- {"IPV6_PMTUDISC_PROBE", Const, 0},
- {"IPV6_PMTUDISC_WANT", Const, 0},
- {"IPV6_PORTRANGE", Const, 0},
- {"IPV6_PORTRANGE_DEFAULT", Const, 0},
- {"IPV6_PORTRANGE_HIGH", Const, 0},
- {"IPV6_PORTRANGE_LOW", Const, 0},
- {"IPV6_PREFER_TEMPADDR", Const, 0},
- {"IPV6_RECVDSTOPTS", Const, 0},
- {"IPV6_RECVDSTPORT", Const, 3},
- {"IPV6_RECVERR", Const, 0},
- {"IPV6_RECVHOPLIMIT", Const, 0},
- {"IPV6_RECVHOPOPTS", Const, 0},
- {"IPV6_RECVPATHMTU", Const, 0},
- {"IPV6_RECVPKTINFO", Const, 0},
- {"IPV6_RECVRTHDR", Const, 0},
- {"IPV6_RECVTCLASS", Const, 0},
- {"IPV6_ROUTER_ALERT", Const, 0},
- {"IPV6_RTABLE", Const, 1},
- {"IPV6_RTHDR", Const, 0},
- {"IPV6_RTHDRDSTOPTS", Const, 0},
- {"IPV6_RTHDR_LOOSE", Const, 0},
- {"IPV6_RTHDR_STRICT", Const, 0},
- {"IPV6_RTHDR_TYPE_0", Const, 0},
- {"IPV6_RXDSTOPTS", Const, 0},
- {"IPV6_RXHOPOPTS", Const, 0},
- {"IPV6_SOCKOPT_RESERVED1", Const, 0},
- {"IPV6_TCLASS", Const, 0},
- {"IPV6_UNICAST_HOPS", Const, 0},
- {"IPV6_USE_MIN_MTU", Const, 0},
- {"IPV6_V6ONLY", Const, 0},
- {"IPV6_VERSION", Const, 0},
- {"IPV6_VERSION_MASK", Const, 0},
- {"IPV6_XFRM_POLICY", Const, 0},
- {"IP_ADD_MEMBERSHIP", Const, 0},
- {"IP_ADD_SOURCE_MEMBERSHIP", Const, 0},
- {"IP_AUTH_LEVEL", Const, 1},
- {"IP_BINDANY", Const, 0},
- {"IP_BLOCK_SOURCE", Const, 0},
- {"IP_BOUND_IF", Const, 0},
- {"IP_DEFAULT_MULTICAST_LOOP", Const, 0},
- {"IP_DEFAULT_MULTICAST_TTL", Const, 0},
- {"IP_DF", Const, 0},
- {"IP_DIVERTFL", Const, 3},
- {"IP_DONTFRAG", Const, 0},
- {"IP_DROP_MEMBERSHIP", Const, 0},
- {"IP_DROP_SOURCE_MEMBERSHIP", Const, 0},
- {"IP_DUMMYNET3", Const, 0},
- {"IP_DUMMYNET_CONFIGURE", Const, 0},
- {"IP_DUMMYNET_DEL", Const, 0},
- {"IP_DUMMYNET_FLUSH", Const, 0},
- {"IP_DUMMYNET_GET", Const, 0},
- {"IP_EF", Const, 1},
- {"IP_ERRORMTU", Const, 1},
- {"IP_ESP_NETWORK_LEVEL", Const, 1},
- {"IP_ESP_TRANS_LEVEL", Const, 1},
- {"IP_FAITH", Const, 0},
- {"IP_FREEBIND", Const, 0},
- {"IP_FW3", Const, 0},
- {"IP_FW_ADD", Const, 0},
- {"IP_FW_DEL", Const, 0},
- {"IP_FW_FLUSH", Const, 0},
- {"IP_FW_GET", Const, 0},
- {"IP_FW_NAT_CFG", Const, 0},
- {"IP_FW_NAT_DEL", Const, 0},
- {"IP_FW_NAT_GET_CONFIG", Const, 0},
- {"IP_FW_NAT_GET_LOG", Const, 0},
- {"IP_FW_RESETLOG", Const, 0},
- {"IP_FW_TABLE_ADD", Const, 0},
- {"IP_FW_TABLE_DEL", Const, 0},
- {"IP_FW_TABLE_FLUSH", Const, 0},
- {"IP_FW_TABLE_GETSIZE", Const, 0},
- {"IP_FW_TABLE_LIST", Const, 0},
- {"IP_FW_ZERO", Const, 0},
- {"IP_HDRINCL", Const, 0},
- {"IP_IPCOMP_LEVEL", Const, 1},
- {"IP_IPSECFLOWINFO", Const, 1},
- {"IP_IPSEC_LOCAL_AUTH", Const, 1},
- {"IP_IPSEC_LOCAL_CRED", Const, 1},
- {"IP_IPSEC_LOCAL_ID", Const, 1},
- {"IP_IPSEC_POLICY", Const, 0},
- {"IP_IPSEC_REMOTE_AUTH", Const, 1},
- {"IP_IPSEC_REMOTE_CRED", Const, 1},
- {"IP_IPSEC_REMOTE_ID", Const, 1},
- {"IP_MAXPACKET", Const, 0},
- {"IP_MAX_GROUP_SRC_FILTER", Const, 0},
- {"IP_MAX_MEMBERSHIPS", Const, 0},
- {"IP_MAX_SOCK_MUTE_FILTER", Const, 0},
- {"IP_MAX_SOCK_SRC_FILTER", Const, 0},
- {"IP_MAX_SOURCE_FILTER", Const, 0},
- {"IP_MF", Const, 0},
- {"IP_MINFRAGSIZE", Const, 1},
- {"IP_MINTTL", Const, 0},
- {"IP_MIN_MEMBERSHIPS", Const, 0},
- {"IP_MSFILTER", Const, 0},
- {"IP_MSS", Const, 0},
- {"IP_MTU", Const, 0},
- {"IP_MTU_DISCOVER", Const, 0},
- {"IP_MULTICAST_IF", Const, 0},
- {"IP_MULTICAST_IFINDEX", Const, 0},
- {"IP_MULTICAST_LOOP", Const, 0},
- {"IP_MULTICAST_TTL", Const, 0},
- {"IP_MULTICAST_VIF", Const, 0},
- {"IP_NAT__XXX", Const, 0},
- {"IP_OFFMASK", Const, 0},
- {"IP_OLD_FW_ADD", Const, 0},
- {"IP_OLD_FW_DEL", Const, 0},
- {"IP_OLD_FW_FLUSH", Const, 0},
- {"IP_OLD_FW_GET", Const, 0},
- {"IP_OLD_FW_RESETLOG", Const, 0},
- {"IP_OLD_FW_ZERO", Const, 0},
- {"IP_ONESBCAST", Const, 0},
- {"IP_OPTIONS", Const, 0},
- {"IP_ORIGDSTADDR", Const, 0},
- {"IP_PASSSEC", Const, 0},
- {"IP_PIPEX", Const, 1},
- {"IP_PKTINFO", Const, 0},
- {"IP_PKTOPTIONS", Const, 0},
- {"IP_PMTUDISC", Const, 0},
- {"IP_PMTUDISC_DO", Const, 0},
- {"IP_PMTUDISC_DONT", Const, 0},
- {"IP_PMTUDISC_PROBE", Const, 0},
- {"IP_PMTUDISC_WANT", Const, 0},
- {"IP_PORTRANGE", Const, 0},
- {"IP_PORTRANGE_DEFAULT", Const, 0},
- {"IP_PORTRANGE_HIGH", Const, 0},
- {"IP_PORTRANGE_LOW", Const, 0},
- {"IP_RECVDSTADDR", Const, 0},
- {"IP_RECVDSTPORT", Const, 1},
- {"IP_RECVERR", Const, 0},
- {"IP_RECVIF", Const, 0},
- {"IP_RECVOPTS", Const, 0},
- {"IP_RECVORIGDSTADDR", Const, 0},
- {"IP_RECVPKTINFO", Const, 0},
- {"IP_RECVRETOPTS", Const, 0},
- {"IP_RECVRTABLE", Const, 1},
- {"IP_RECVTOS", Const, 0},
- {"IP_RECVTTL", Const, 0},
- {"IP_RETOPTS", Const, 0},
- {"IP_RF", Const, 0},
- {"IP_ROUTER_ALERT", Const, 0},
- {"IP_RSVP_OFF", Const, 0},
- {"IP_RSVP_ON", Const, 0},
- {"IP_RSVP_VIF_OFF", Const, 0},
- {"IP_RSVP_VIF_ON", Const, 0},
- {"IP_RTABLE", Const, 1},
- {"IP_SENDSRCADDR", Const, 0},
- {"IP_STRIPHDR", Const, 0},
- {"IP_TOS", Const, 0},
- {"IP_TRAFFIC_MGT_BACKGROUND", Const, 0},
- {"IP_TRANSPARENT", Const, 0},
- {"IP_TTL", Const, 0},
- {"IP_UNBLOCK_SOURCE", Const, 0},
- {"IP_XFRM_POLICY", Const, 0},
- {"IPv6MTUInfo", Type, 2},
- {"IPv6MTUInfo.Addr", Field, 2},
- {"IPv6MTUInfo.Mtu", Field, 2},
- {"IPv6Mreq", Type, 0},
- {"IPv6Mreq.Interface", Field, 0},
- {"IPv6Mreq.Multiaddr", Field, 0},
- {"ISIG", Const, 0},
- {"ISTRIP", Const, 0},
- {"IUCLC", Const, 0},
- {"IUTF8", Const, 0},
- {"IXANY", Const, 0},
- {"IXOFF", Const, 0},
- {"IXON", Const, 0},
- {"IfAddrmsg", Type, 0},
- {"IfAddrmsg.Family", Field, 0},
- {"IfAddrmsg.Flags", Field, 0},
- {"IfAddrmsg.Index", Field, 0},
- {"IfAddrmsg.Prefixlen", Field, 0},
- {"IfAddrmsg.Scope", Field, 0},
- {"IfAnnounceMsghdr", Type, 1},
- {"IfAnnounceMsghdr.Hdrlen", Field, 2},
- {"IfAnnounceMsghdr.Index", Field, 1},
- {"IfAnnounceMsghdr.Msglen", Field, 1},
- {"IfAnnounceMsghdr.Name", Field, 1},
- {"IfAnnounceMsghdr.Type", Field, 1},
- {"IfAnnounceMsghdr.Version", Field, 1},
- {"IfAnnounceMsghdr.What", Field, 1},
- {"IfData", Type, 0},
- {"IfData.Addrlen", Field, 0},
- {"IfData.Baudrate", Field, 0},
- {"IfData.Capabilities", Field, 2},
- {"IfData.Collisions", Field, 0},
- {"IfData.Datalen", Field, 0},
- {"IfData.Epoch", Field, 0},
- {"IfData.Hdrlen", Field, 0},
- {"IfData.Hwassist", Field, 0},
- {"IfData.Ibytes", Field, 0},
- {"IfData.Ierrors", Field, 0},
- {"IfData.Imcasts", Field, 0},
- {"IfData.Ipackets", Field, 0},
- {"IfData.Iqdrops", Field, 0},
- {"IfData.Lastchange", Field, 0},
- {"IfData.Link_state", Field, 0},
- {"IfData.Mclpool", Field, 2},
- {"IfData.Metric", Field, 0},
- {"IfData.Mtu", Field, 0},
- {"IfData.Noproto", Field, 0},
- {"IfData.Obytes", Field, 0},
- {"IfData.Oerrors", Field, 0},
- {"IfData.Omcasts", Field, 0},
- {"IfData.Opackets", Field, 0},
- {"IfData.Pad", Field, 2},
- {"IfData.Pad_cgo_0", Field, 2},
- {"IfData.Pad_cgo_1", Field, 2},
- {"IfData.Physical", Field, 0},
- {"IfData.Recvquota", Field, 0},
- {"IfData.Recvtiming", Field, 0},
- {"IfData.Reserved1", Field, 0},
- {"IfData.Reserved2", Field, 0},
- {"IfData.Spare_char1", Field, 0},
- {"IfData.Spare_char2", Field, 0},
- {"IfData.Type", Field, 0},
- {"IfData.Typelen", Field, 0},
- {"IfData.Unused1", Field, 0},
- {"IfData.Unused2", Field, 0},
- {"IfData.Xmitquota", Field, 0},
- {"IfData.Xmittiming", Field, 0},
- {"IfInfomsg", Type, 0},
- {"IfInfomsg.Change", Field, 0},
- {"IfInfomsg.Family", Field, 0},
- {"IfInfomsg.Flags", Field, 0},
- {"IfInfomsg.Index", Field, 0},
- {"IfInfomsg.Type", Field, 0},
- {"IfInfomsg.X__ifi_pad", Field, 0},
- {"IfMsghdr", Type, 0},
- {"IfMsghdr.Addrs", Field, 0},
- {"IfMsghdr.Data", Field, 0},
- {"IfMsghdr.Flags", Field, 0},
- {"IfMsghdr.Hdrlen", Field, 2},
- {"IfMsghdr.Index", Field, 0},
- {"IfMsghdr.Msglen", Field, 0},
- {"IfMsghdr.Pad1", Field, 2},
- {"IfMsghdr.Pad2", Field, 2},
- {"IfMsghdr.Pad_cgo_0", Field, 0},
- {"IfMsghdr.Pad_cgo_1", Field, 2},
- {"IfMsghdr.Tableid", Field, 2},
- {"IfMsghdr.Type", Field, 0},
- {"IfMsghdr.Version", Field, 0},
- {"IfMsghdr.Xflags", Field, 2},
- {"IfaMsghdr", Type, 0},
- {"IfaMsghdr.Addrs", Field, 0},
- {"IfaMsghdr.Flags", Field, 0},
- {"IfaMsghdr.Hdrlen", Field, 2},
- {"IfaMsghdr.Index", Field, 0},
- {"IfaMsghdr.Metric", Field, 0},
- {"IfaMsghdr.Msglen", Field, 0},
- {"IfaMsghdr.Pad1", Field, 2},
- {"IfaMsghdr.Pad2", Field, 2},
- {"IfaMsghdr.Pad_cgo_0", Field, 0},
- {"IfaMsghdr.Tableid", Field, 2},
- {"IfaMsghdr.Type", Field, 0},
- {"IfaMsghdr.Version", Field, 0},
- {"IfmaMsghdr", Type, 0},
- {"IfmaMsghdr.Addrs", Field, 0},
- {"IfmaMsghdr.Flags", Field, 0},
- {"IfmaMsghdr.Index", Field, 0},
- {"IfmaMsghdr.Msglen", Field, 0},
- {"IfmaMsghdr.Pad_cgo_0", Field, 0},
- {"IfmaMsghdr.Type", Field, 0},
- {"IfmaMsghdr.Version", Field, 0},
- {"IfmaMsghdr2", Type, 0},
- {"IfmaMsghdr2.Addrs", Field, 0},
- {"IfmaMsghdr2.Flags", Field, 0},
- {"IfmaMsghdr2.Index", Field, 0},
- {"IfmaMsghdr2.Msglen", Field, 0},
- {"IfmaMsghdr2.Pad_cgo_0", Field, 0},
- {"IfmaMsghdr2.Refcount", Field, 0},
- {"IfmaMsghdr2.Type", Field, 0},
- {"IfmaMsghdr2.Version", Field, 0},
- {"ImplementsGetwd", Const, 0},
- {"Inet4Pktinfo", Type, 0},
- {"Inet4Pktinfo.Addr", Field, 0},
- {"Inet4Pktinfo.Ifindex", Field, 0},
- {"Inet4Pktinfo.Spec_dst", Field, 0},
- {"Inet6Pktinfo", Type, 0},
- {"Inet6Pktinfo.Addr", Field, 0},
- {"Inet6Pktinfo.Ifindex", Field, 0},
- {"InotifyAddWatch", Func, 0},
- {"InotifyEvent", Type, 0},
- {"InotifyEvent.Cookie", Field, 0},
- {"InotifyEvent.Len", Field, 0},
- {"InotifyEvent.Mask", Field, 0},
- {"InotifyEvent.Name", Field, 0},
- {"InotifyEvent.Wd", Field, 0},
- {"InotifyInit", Func, 0},
- {"InotifyInit1", Func, 0},
- {"InotifyRmWatch", Func, 0},
- {"InterfaceAddrMessage", Type, 0},
- {"InterfaceAddrMessage.Data", Field, 0},
- {"InterfaceAddrMessage.Header", Field, 0},
- {"InterfaceAnnounceMessage", Type, 1},
- {"InterfaceAnnounceMessage.Header", Field, 1},
- {"InterfaceInfo", Type, 0},
- {"InterfaceInfo.Address", Field, 0},
- {"InterfaceInfo.BroadcastAddress", Field, 0},
- {"InterfaceInfo.Flags", Field, 0},
- {"InterfaceInfo.Netmask", Field, 0},
- {"InterfaceMessage", Type, 0},
- {"InterfaceMessage.Data", Field, 0},
- {"InterfaceMessage.Header", Field, 0},
- {"InterfaceMulticastAddrMessage", Type, 0},
- {"InterfaceMulticastAddrMessage.Data", Field, 0},
- {"InterfaceMulticastAddrMessage.Header", Field, 0},
- {"InvalidHandle", Const, 0},
- {"Ioperm", Func, 0},
- {"Iopl", Func, 0},
- {"Iovec", Type, 0},
- {"Iovec.Base", Field, 0},
- {"Iovec.Len", Field, 0},
- {"IpAdapterInfo", Type, 0},
- {"IpAdapterInfo.AdapterName", Field, 0},
- {"IpAdapterInfo.Address", Field, 0},
- {"IpAdapterInfo.AddressLength", Field, 0},
- {"IpAdapterInfo.ComboIndex", Field, 0},
- {"IpAdapterInfo.CurrentIpAddress", Field, 0},
- {"IpAdapterInfo.Description", Field, 0},
- {"IpAdapterInfo.DhcpEnabled", Field, 0},
- {"IpAdapterInfo.DhcpServer", Field, 0},
- {"IpAdapterInfo.GatewayList", Field, 0},
- {"IpAdapterInfo.HaveWins", Field, 0},
- {"IpAdapterInfo.Index", Field, 0},
- {"IpAdapterInfo.IpAddressList", Field, 0},
- {"IpAdapterInfo.LeaseExpires", Field, 0},
- {"IpAdapterInfo.LeaseObtained", Field, 0},
- {"IpAdapterInfo.Next", Field, 0},
- {"IpAdapterInfo.PrimaryWinsServer", Field, 0},
- {"IpAdapterInfo.SecondaryWinsServer", Field, 0},
- {"IpAdapterInfo.Type", Field, 0},
- {"IpAddrString", Type, 0},
- {"IpAddrString.Context", Field, 0},
- {"IpAddrString.IpAddress", Field, 0},
- {"IpAddrString.IpMask", Field, 0},
- {"IpAddrString.Next", Field, 0},
- {"IpAddressString", Type, 0},
- {"IpAddressString.String", Field, 0},
- {"IpMaskString", Type, 0},
- {"IpMaskString.String", Field, 2},
- {"Issetugid", Func, 0},
- {"KEY_ALL_ACCESS", Const, 0},
- {"KEY_CREATE_LINK", Const, 0},
- {"KEY_CREATE_SUB_KEY", Const, 0},
- {"KEY_ENUMERATE_SUB_KEYS", Const, 0},
- {"KEY_EXECUTE", Const, 0},
- {"KEY_NOTIFY", Const, 0},
- {"KEY_QUERY_VALUE", Const, 0},
- {"KEY_READ", Const, 0},
- {"KEY_SET_VALUE", Const, 0},
- {"KEY_WOW64_32KEY", Const, 0},
- {"KEY_WOW64_64KEY", Const, 0},
- {"KEY_WRITE", Const, 0},
- {"Kevent", Func, 0},
- {"Kevent_t", Type, 0},
- {"Kevent_t.Data", Field, 0},
- {"Kevent_t.Fflags", Field, 0},
- {"Kevent_t.Filter", Field, 0},
- {"Kevent_t.Flags", Field, 0},
- {"Kevent_t.Ident", Field, 0},
- {"Kevent_t.Pad_cgo_0", Field, 2},
- {"Kevent_t.Udata", Field, 0},
- {"Kill", Func, 0},
- {"Klogctl", Func, 0},
- {"Kqueue", Func, 0},
- {"LANG_ENGLISH", Const, 0},
- {"LAYERED_PROTOCOL", Const, 2},
- {"LCNT_OVERLOAD_FLUSH", Const, 1},
- {"LINUX_REBOOT_CMD_CAD_OFF", Const, 0},
- {"LINUX_REBOOT_CMD_CAD_ON", Const, 0},
- {"LINUX_REBOOT_CMD_HALT", Const, 0},
- {"LINUX_REBOOT_CMD_KEXEC", Const, 0},
- {"LINUX_REBOOT_CMD_POWER_OFF", Const, 0},
- {"LINUX_REBOOT_CMD_RESTART", Const, 0},
- {"LINUX_REBOOT_CMD_RESTART2", Const, 0},
- {"LINUX_REBOOT_CMD_SW_SUSPEND", Const, 0},
- {"LINUX_REBOOT_MAGIC1", Const, 0},
- {"LINUX_REBOOT_MAGIC2", Const, 0},
- {"LOCK_EX", Const, 0},
- {"LOCK_NB", Const, 0},
- {"LOCK_SH", Const, 0},
- {"LOCK_UN", Const, 0},
- {"LazyDLL", Type, 0},
- {"LazyDLL.Name", Field, 0},
- {"LazyProc", Type, 0},
- {"LazyProc.Name", Field, 0},
- {"Lchown", Func, 0},
- {"Linger", Type, 0},
- {"Linger.Linger", Field, 0},
- {"Linger.Onoff", Field, 0},
- {"Link", Func, 0},
- {"Listen", Func, 0},
- {"Listxattr", Func, 1},
- {"LoadCancelIoEx", Func, 1},
- {"LoadConnectEx", Func, 1},
- {"LoadCreateSymbolicLink", Func, 4},
- {"LoadDLL", Func, 0},
- {"LoadGetAddrInfo", Func, 1},
- {"LoadLibrary", Func, 0},
- {"LoadSetFileCompletionNotificationModes", Func, 2},
- {"LocalFree", Func, 0},
- {"Log2phys_t", Type, 0},
- {"Log2phys_t.Contigbytes", Field, 0},
- {"Log2phys_t.Devoffset", Field, 0},
- {"Log2phys_t.Flags", Field, 0},
- {"LookupAccountName", Func, 0},
- {"LookupAccountSid", Func, 0},
- {"LookupSID", Func, 0},
- {"LsfJump", Func, 0},
- {"LsfSocket", Func, 0},
- {"LsfStmt", Func, 0},
- {"Lstat", Func, 0},
- {"MADV_AUTOSYNC", Const, 1},
- {"MADV_CAN_REUSE", Const, 0},
- {"MADV_CORE", Const, 1},
- {"MADV_DOFORK", Const, 0},
- {"MADV_DONTFORK", Const, 0},
- {"MADV_DONTNEED", Const, 0},
- {"MADV_FREE", Const, 0},
- {"MADV_FREE_REUSABLE", Const, 0},
- {"MADV_FREE_REUSE", Const, 0},
- {"MADV_HUGEPAGE", Const, 0},
- {"MADV_HWPOISON", Const, 0},
- {"MADV_MERGEABLE", Const, 0},
- {"MADV_NOCORE", Const, 1},
- {"MADV_NOHUGEPAGE", Const, 0},
- {"MADV_NORMAL", Const, 0},
- {"MADV_NOSYNC", Const, 1},
- {"MADV_PROTECT", Const, 1},
- {"MADV_RANDOM", Const, 0},
- {"MADV_REMOVE", Const, 0},
- {"MADV_SEQUENTIAL", Const, 0},
- {"MADV_SPACEAVAIL", Const, 3},
- {"MADV_UNMERGEABLE", Const, 0},
- {"MADV_WILLNEED", Const, 0},
- {"MADV_ZERO_WIRED_PAGES", Const, 0},
- {"MAP_32BIT", Const, 0},
- {"MAP_ALIGNED_SUPER", Const, 3},
- {"MAP_ALIGNMENT_16MB", Const, 3},
- {"MAP_ALIGNMENT_1TB", Const, 3},
- {"MAP_ALIGNMENT_256TB", Const, 3},
- {"MAP_ALIGNMENT_4GB", Const, 3},
- {"MAP_ALIGNMENT_64KB", Const, 3},
- {"MAP_ALIGNMENT_64PB", Const, 3},
- {"MAP_ALIGNMENT_MASK", Const, 3},
- {"MAP_ALIGNMENT_SHIFT", Const, 3},
- {"MAP_ANON", Const, 0},
- {"MAP_ANONYMOUS", Const, 0},
- {"MAP_COPY", Const, 0},
- {"MAP_DENYWRITE", Const, 0},
- {"MAP_EXECUTABLE", Const, 0},
- {"MAP_FILE", Const, 0},
- {"MAP_FIXED", Const, 0},
- {"MAP_FLAGMASK", Const, 3},
- {"MAP_GROWSDOWN", Const, 0},
- {"MAP_HASSEMAPHORE", Const, 0},
- {"MAP_HUGETLB", Const, 0},
- {"MAP_INHERIT", Const, 3},
- {"MAP_INHERIT_COPY", Const, 3},
- {"MAP_INHERIT_DEFAULT", Const, 3},
- {"MAP_INHERIT_DONATE_COPY", Const, 3},
- {"MAP_INHERIT_NONE", Const, 3},
- {"MAP_INHERIT_SHARE", Const, 3},
- {"MAP_JIT", Const, 0},
- {"MAP_LOCKED", Const, 0},
- {"MAP_NOCACHE", Const, 0},
- {"MAP_NOCORE", Const, 1},
- {"MAP_NOEXTEND", Const, 0},
- {"MAP_NONBLOCK", Const, 0},
- {"MAP_NORESERVE", Const, 0},
- {"MAP_NOSYNC", Const, 1},
- {"MAP_POPULATE", Const, 0},
- {"MAP_PREFAULT_READ", Const, 1},
- {"MAP_PRIVATE", Const, 0},
- {"MAP_RENAME", Const, 0},
- {"MAP_RESERVED0080", Const, 0},
- {"MAP_RESERVED0100", Const, 1},
- {"MAP_SHARED", Const, 0},
- {"MAP_STACK", Const, 0},
- {"MAP_TRYFIXED", Const, 3},
- {"MAP_TYPE", Const, 0},
- {"MAP_WIRED", Const, 3},
- {"MAXIMUM_REPARSE_DATA_BUFFER_SIZE", Const, 4},
- {"MAXLEN_IFDESCR", Const, 0},
- {"MAXLEN_PHYSADDR", Const, 0},
- {"MAX_ADAPTER_ADDRESS_LENGTH", Const, 0},
- {"MAX_ADAPTER_DESCRIPTION_LENGTH", Const, 0},
- {"MAX_ADAPTER_NAME_LENGTH", Const, 0},
- {"MAX_COMPUTERNAME_LENGTH", Const, 0},
- {"MAX_INTERFACE_NAME_LEN", Const, 0},
- {"MAX_LONG_PATH", Const, 0},
- {"MAX_PATH", Const, 0},
- {"MAX_PROTOCOL_CHAIN", Const, 2},
- {"MCL_CURRENT", Const, 0},
- {"MCL_FUTURE", Const, 0},
- {"MNT_DETACH", Const, 0},
- {"MNT_EXPIRE", Const, 0},
- {"MNT_FORCE", Const, 0},
- {"MSG_BCAST", Const, 1},
- {"MSG_CMSG_CLOEXEC", Const, 0},
- {"MSG_COMPAT", Const, 0},
- {"MSG_CONFIRM", Const, 0},
- {"MSG_CONTROLMBUF", Const, 1},
- {"MSG_CTRUNC", Const, 0},
- {"MSG_DONTROUTE", Const, 0},
- {"MSG_DONTWAIT", Const, 0},
- {"MSG_EOF", Const, 0},
- {"MSG_EOR", Const, 0},
- {"MSG_ERRQUEUE", Const, 0},
- {"MSG_FASTOPEN", Const, 1},
- {"MSG_FIN", Const, 0},
- {"MSG_FLUSH", Const, 0},
- {"MSG_HAVEMORE", Const, 0},
- {"MSG_HOLD", Const, 0},
- {"MSG_IOVUSRSPACE", Const, 1},
- {"MSG_LENUSRSPACE", Const, 1},
- {"MSG_MCAST", Const, 1},
- {"MSG_MORE", Const, 0},
- {"MSG_NAMEMBUF", Const, 1},
- {"MSG_NBIO", Const, 0},
- {"MSG_NEEDSA", Const, 0},
- {"MSG_NOSIGNAL", Const, 0},
- {"MSG_NOTIFICATION", Const, 0},
- {"MSG_OOB", Const, 0},
- {"MSG_PEEK", Const, 0},
- {"MSG_PROXY", Const, 0},
- {"MSG_RCVMORE", Const, 0},
- {"MSG_RST", Const, 0},
- {"MSG_SEND", Const, 0},
- {"MSG_SYN", Const, 0},
- {"MSG_TRUNC", Const, 0},
- {"MSG_TRYHARD", Const, 0},
- {"MSG_USERFLAGS", Const, 1},
- {"MSG_WAITALL", Const, 0},
- {"MSG_WAITFORONE", Const, 0},
- {"MSG_WAITSTREAM", Const, 0},
- {"MS_ACTIVE", Const, 0},
- {"MS_ASYNC", Const, 0},
- {"MS_BIND", Const, 0},
- {"MS_DEACTIVATE", Const, 0},
- {"MS_DIRSYNC", Const, 0},
- {"MS_INVALIDATE", Const, 0},
- {"MS_I_VERSION", Const, 0},
- {"MS_KERNMOUNT", Const, 0},
- {"MS_KILLPAGES", Const, 0},
- {"MS_MANDLOCK", Const, 0},
- {"MS_MGC_MSK", Const, 0},
- {"MS_MGC_VAL", Const, 0},
- {"MS_MOVE", Const, 0},
- {"MS_NOATIME", Const, 0},
- {"MS_NODEV", Const, 0},
- {"MS_NODIRATIME", Const, 0},
- {"MS_NOEXEC", Const, 0},
- {"MS_NOSUID", Const, 0},
- {"MS_NOUSER", Const, 0},
- {"MS_POSIXACL", Const, 0},
- {"MS_PRIVATE", Const, 0},
- {"MS_RDONLY", Const, 0},
- {"MS_REC", Const, 0},
- {"MS_RELATIME", Const, 0},
- {"MS_REMOUNT", Const, 0},
- {"MS_RMT_MASK", Const, 0},
- {"MS_SHARED", Const, 0},
- {"MS_SILENT", Const, 0},
- {"MS_SLAVE", Const, 0},
- {"MS_STRICTATIME", Const, 0},
- {"MS_SYNC", Const, 0},
- {"MS_SYNCHRONOUS", Const, 0},
- {"MS_UNBINDABLE", Const, 0},
- {"Madvise", Func, 0},
- {"MapViewOfFile", Func, 0},
- {"MaxTokenInfoClass", Const, 0},
- {"Mclpool", Type, 2},
- {"Mclpool.Alive", Field, 2},
- {"Mclpool.Cwm", Field, 2},
- {"Mclpool.Grown", Field, 2},
- {"Mclpool.Hwm", Field, 2},
- {"Mclpool.Lwm", Field, 2},
- {"MibIfRow", Type, 0},
- {"MibIfRow.AdminStatus", Field, 0},
- {"MibIfRow.Descr", Field, 0},
- {"MibIfRow.DescrLen", Field, 0},
- {"MibIfRow.InDiscards", Field, 0},
- {"MibIfRow.InErrors", Field, 0},
- {"MibIfRow.InNUcastPkts", Field, 0},
- {"MibIfRow.InOctets", Field, 0},
- {"MibIfRow.InUcastPkts", Field, 0},
- {"MibIfRow.InUnknownProtos", Field, 0},
- {"MibIfRow.Index", Field, 0},
- {"MibIfRow.LastChange", Field, 0},
- {"MibIfRow.Mtu", Field, 0},
- {"MibIfRow.Name", Field, 0},
- {"MibIfRow.OperStatus", Field, 0},
- {"MibIfRow.OutDiscards", Field, 0},
- {"MibIfRow.OutErrors", Field, 0},
- {"MibIfRow.OutNUcastPkts", Field, 0},
- {"MibIfRow.OutOctets", Field, 0},
- {"MibIfRow.OutQLen", Field, 0},
- {"MibIfRow.OutUcastPkts", Field, 0},
- {"MibIfRow.PhysAddr", Field, 0},
- {"MibIfRow.PhysAddrLen", Field, 0},
- {"MibIfRow.Speed", Field, 0},
- {"MibIfRow.Type", Field, 0},
- {"Mkdir", Func, 0},
- {"Mkdirat", Func, 0},
- {"Mkfifo", Func, 0},
- {"Mknod", Func, 0},
- {"Mknodat", Func, 0},
- {"Mlock", Func, 0},
- {"Mlockall", Func, 0},
- {"Mmap", Func, 0},
- {"Mount", Func, 0},
- {"MoveFile", Func, 0},
- {"Mprotect", Func, 0},
- {"Msghdr", Type, 0},
- {"Msghdr.Control", Field, 0},
- {"Msghdr.Controllen", Field, 0},
- {"Msghdr.Flags", Field, 0},
- {"Msghdr.Iov", Field, 0},
- {"Msghdr.Iovlen", Field, 0},
- {"Msghdr.Name", Field, 0},
- {"Msghdr.Namelen", Field, 0},
- {"Msghdr.Pad_cgo_0", Field, 0},
- {"Msghdr.Pad_cgo_1", Field, 0},
- {"Munlock", Func, 0},
- {"Munlockall", Func, 0},
- {"Munmap", Func, 0},
- {"MustLoadDLL", Func, 0},
- {"NAME_MAX", Const, 0},
- {"NETLINK_ADD_MEMBERSHIP", Const, 0},
- {"NETLINK_AUDIT", Const, 0},
- {"NETLINK_BROADCAST_ERROR", Const, 0},
- {"NETLINK_CONNECTOR", Const, 0},
- {"NETLINK_DNRTMSG", Const, 0},
- {"NETLINK_DROP_MEMBERSHIP", Const, 0},
- {"NETLINK_ECRYPTFS", Const, 0},
- {"NETLINK_FIB_LOOKUP", Const, 0},
- {"NETLINK_FIREWALL", Const, 0},
- {"NETLINK_GENERIC", Const, 0},
- {"NETLINK_INET_DIAG", Const, 0},
- {"NETLINK_IP6_FW", Const, 0},
- {"NETLINK_ISCSI", Const, 0},
- {"NETLINK_KOBJECT_UEVENT", Const, 0},
- {"NETLINK_NETFILTER", Const, 0},
- {"NETLINK_NFLOG", Const, 0},
- {"NETLINK_NO_ENOBUFS", Const, 0},
- {"NETLINK_PKTINFO", Const, 0},
- {"NETLINK_RDMA", Const, 0},
- {"NETLINK_ROUTE", Const, 0},
- {"NETLINK_SCSITRANSPORT", Const, 0},
- {"NETLINK_SELINUX", Const, 0},
- {"NETLINK_UNUSED", Const, 0},
- {"NETLINK_USERSOCK", Const, 0},
- {"NETLINK_XFRM", Const, 0},
- {"NET_RT_DUMP", Const, 0},
- {"NET_RT_DUMP2", Const, 0},
- {"NET_RT_FLAGS", Const, 0},
- {"NET_RT_IFLIST", Const, 0},
- {"NET_RT_IFLIST2", Const, 0},
- {"NET_RT_IFLISTL", Const, 1},
- {"NET_RT_IFMALIST", Const, 0},
- {"NET_RT_MAXID", Const, 0},
- {"NET_RT_OIFLIST", Const, 1},
- {"NET_RT_OOIFLIST", Const, 1},
- {"NET_RT_STAT", Const, 0},
- {"NET_RT_STATS", Const, 1},
- {"NET_RT_TABLE", Const, 1},
- {"NET_RT_TRASH", Const, 0},
- {"NLA_ALIGNTO", Const, 0},
- {"NLA_F_NESTED", Const, 0},
- {"NLA_F_NET_BYTEORDER", Const, 0},
- {"NLA_HDRLEN", Const, 0},
- {"NLMSG_ALIGNTO", Const, 0},
- {"NLMSG_DONE", Const, 0},
- {"NLMSG_ERROR", Const, 0},
- {"NLMSG_HDRLEN", Const, 0},
- {"NLMSG_MIN_TYPE", Const, 0},
- {"NLMSG_NOOP", Const, 0},
- {"NLMSG_OVERRUN", Const, 0},
- {"NLM_F_ACK", Const, 0},
- {"NLM_F_APPEND", Const, 0},
- {"NLM_F_ATOMIC", Const, 0},
- {"NLM_F_CREATE", Const, 0},
- {"NLM_F_DUMP", Const, 0},
- {"NLM_F_ECHO", Const, 0},
- {"NLM_F_EXCL", Const, 0},
- {"NLM_F_MATCH", Const, 0},
- {"NLM_F_MULTI", Const, 0},
- {"NLM_F_REPLACE", Const, 0},
- {"NLM_F_REQUEST", Const, 0},
- {"NLM_F_ROOT", Const, 0},
- {"NOFLSH", Const, 0},
- {"NOTE_ABSOLUTE", Const, 0},
- {"NOTE_ATTRIB", Const, 0},
- {"NOTE_BACKGROUND", Const, 16},
- {"NOTE_CHILD", Const, 0},
- {"NOTE_CRITICAL", Const, 16},
- {"NOTE_DELETE", Const, 0},
- {"NOTE_EOF", Const, 1},
- {"NOTE_EXEC", Const, 0},
- {"NOTE_EXIT", Const, 0},
- {"NOTE_EXITSTATUS", Const, 0},
- {"NOTE_EXIT_CSERROR", Const, 16},
- {"NOTE_EXIT_DECRYPTFAIL", Const, 16},
- {"NOTE_EXIT_DETAIL", Const, 16},
- {"NOTE_EXIT_DETAIL_MASK", Const, 16},
- {"NOTE_EXIT_MEMORY", Const, 16},
- {"NOTE_EXIT_REPARENTED", Const, 16},
- {"NOTE_EXTEND", Const, 0},
- {"NOTE_FFAND", Const, 0},
- {"NOTE_FFCOPY", Const, 0},
- {"NOTE_FFCTRLMASK", Const, 0},
- {"NOTE_FFLAGSMASK", Const, 0},
- {"NOTE_FFNOP", Const, 0},
- {"NOTE_FFOR", Const, 0},
- {"NOTE_FORK", Const, 0},
- {"NOTE_LEEWAY", Const, 16},
- {"NOTE_LINK", Const, 0},
- {"NOTE_LOWAT", Const, 0},
- {"NOTE_NONE", Const, 0},
- {"NOTE_NSECONDS", Const, 0},
- {"NOTE_PCTRLMASK", Const, 0},
- {"NOTE_PDATAMASK", Const, 0},
- {"NOTE_REAP", Const, 0},
- {"NOTE_RENAME", Const, 0},
- {"NOTE_RESOURCEEND", Const, 0},
- {"NOTE_REVOKE", Const, 0},
- {"NOTE_SECONDS", Const, 0},
- {"NOTE_SIGNAL", Const, 0},
- {"NOTE_TRACK", Const, 0},
- {"NOTE_TRACKERR", Const, 0},
- {"NOTE_TRIGGER", Const, 0},
- {"NOTE_TRUNCATE", Const, 1},
- {"NOTE_USECONDS", Const, 0},
- {"NOTE_VM_ERROR", Const, 0},
- {"NOTE_VM_PRESSURE", Const, 0},
- {"NOTE_VM_PRESSURE_SUDDEN_TERMINATE", Const, 0},
- {"NOTE_VM_PRESSURE_TERMINATE", Const, 0},
- {"NOTE_WRITE", Const, 0},
- {"NameCanonical", Const, 0},
- {"NameCanonicalEx", Const, 0},
- {"NameDisplay", Const, 0},
- {"NameDnsDomain", Const, 0},
- {"NameFullyQualifiedDN", Const, 0},
- {"NameSamCompatible", Const, 0},
- {"NameServicePrincipal", Const, 0},
- {"NameUniqueId", Const, 0},
- {"NameUnknown", Const, 0},
- {"NameUserPrincipal", Const, 0},
- {"Nanosleep", Func, 0},
- {"NetApiBufferFree", Func, 0},
- {"NetGetJoinInformation", Func, 2},
- {"NetSetupDomainName", Const, 2},
- {"NetSetupUnjoined", Const, 2},
- {"NetSetupUnknownStatus", Const, 2},
- {"NetSetupWorkgroupName", Const, 2},
- {"NetUserGetInfo", Func, 0},
- {"NetlinkMessage", Type, 0},
- {"NetlinkMessage.Data", Field, 0},
- {"NetlinkMessage.Header", Field, 0},
- {"NetlinkRIB", Func, 0},
- {"NetlinkRouteAttr", Type, 0},
- {"NetlinkRouteAttr.Attr", Field, 0},
- {"NetlinkRouteAttr.Value", Field, 0},
- {"NetlinkRouteRequest", Type, 0},
- {"NetlinkRouteRequest.Data", Field, 0},
- {"NetlinkRouteRequest.Header", Field, 0},
- {"NewCallback", Func, 0},
- {"NewCallbackCDecl", Func, 3},
- {"NewLazyDLL", Func, 0},
- {"NlAttr", Type, 0},
- {"NlAttr.Len", Field, 0},
- {"NlAttr.Type", Field, 0},
- {"NlMsgerr", Type, 0},
- {"NlMsgerr.Error", Field, 0},
- {"NlMsgerr.Msg", Field, 0},
- {"NlMsghdr", Type, 0},
- {"NlMsghdr.Flags", Field, 0},
- {"NlMsghdr.Len", Field, 0},
- {"NlMsghdr.Pid", Field, 0},
- {"NlMsghdr.Seq", Field, 0},
- {"NlMsghdr.Type", Field, 0},
- {"NsecToFiletime", Func, 0},
- {"NsecToTimespec", Func, 0},
- {"NsecToTimeval", Func, 0},
- {"Ntohs", Func, 0},
- {"OCRNL", Const, 0},
- {"OFDEL", Const, 0},
- {"OFILL", Const, 0},
- {"OFIOGETBMAP", Const, 1},
- {"OID_PKIX_KP_SERVER_AUTH", Var, 0},
- {"OID_SERVER_GATED_CRYPTO", Var, 0},
- {"OID_SGC_NETSCAPE", Var, 0},
- {"OLCUC", Const, 0},
- {"ONLCR", Const, 0},
- {"ONLRET", Const, 0},
- {"ONOCR", Const, 0},
- {"ONOEOT", Const, 1},
- {"OPEN_ALWAYS", Const, 0},
- {"OPEN_EXISTING", Const, 0},
- {"OPOST", Const, 0},
- {"O_ACCMODE", Const, 0},
- {"O_ALERT", Const, 0},
- {"O_ALT_IO", Const, 1},
- {"O_APPEND", Const, 0},
- {"O_ASYNC", Const, 0},
- {"O_CLOEXEC", Const, 0},
- {"O_CREAT", Const, 0},
- {"O_DIRECT", Const, 0},
- {"O_DIRECTORY", Const, 0},
- {"O_DP_GETRAWENCRYPTED", Const, 16},
- {"O_DSYNC", Const, 0},
- {"O_EVTONLY", Const, 0},
- {"O_EXCL", Const, 0},
- {"O_EXEC", Const, 0},
- {"O_EXLOCK", Const, 0},
- {"O_FSYNC", Const, 0},
- {"O_LARGEFILE", Const, 0},
- {"O_NDELAY", Const, 0},
- {"O_NOATIME", Const, 0},
- {"O_NOCTTY", Const, 0},
- {"O_NOFOLLOW", Const, 0},
- {"O_NONBLOCK", Const, 0},
- {"O_NOSIGPIPE", Const, 1},
- {"O_POPUP", Const, 0},
- {"O_RDONLY", Const, 0},
- {"O_RDWR", Const, 0},
- {"O_RSYNC", Const, 0},
- {"O_SHLOCK", Const, 0},
- {"O_SYMLINK", Const, 0},
- {"O_SYNC", Const, 0},
- {"O_TRUNC", Const, 0},
- {"O_TTY_INIT", Const, 0},
- {"O_WRONLY", Const, 0},
- {"Open", Func, 0},
- {"OpenCurrentProcessToken", Func, 0},
- {"OpenProcess", Func, 0},
- {"OpenProcessToken", Func, 0},
- {"Openat", Func, 0},
- {"Overlapped", Type, 0},
- {"Overlapped.HEvent", Field, 0},
- {"Overlapped.Internal", Field, 0},
- {"Overlapped.InternalHigh", Field, 0},
- {"Overlapped.Offset", Field, 0},
- {"Overlapped.OffsetHigh", Field, 0},
- {"PACKET_ADD_MEMBERSHIP", Const, 0},
- {"PACKET_BROADCAST", Const, 0},
- {"PACKET_DROP_MEMBERSHIP", Const, 0},
- {"PACKET_FASTROUTE", Const, 0},
- {"PACKET_HOST", Const, 0},
- {"PACKET_LOOPBACK", Const, 0},
- {"PACKET_MR_ALLMULTI", Const, 0},
- {"PACKET_MR_MULTICAST", Const, 0},
- {"PACKET_MR_PROMISC", Const, 0},
- {"PACKET_MULTICAST", Const, 0},
- {"PACKET_OTHERHOST", Const, 0},
- {"PACKET_OUTGOING", Const, 0},
- {"PACKET_RECV_OUTPUT", Const, 0},
- {"PACKET_RX_RING", Const, 0},
- {"PACKET_STATISTICS", Const, 0},
- {"PAGE_EXECUTE_READ", Const, 0},
- {"PAGE_EXECUTE_READWRITE", Const, 0},
- {"PAGE_EXECUTE_WRITECOPY", Const, 0},
- {"PAGE_READONLY", Const, 0},
- {"PAGE_READWRITE", Const, 0},
- {"PAGE_WRITECOPY", Const, 0},
- {"PARENB", Const, 0},
- {"PARMRK", Const, 0},
- {"PARODD", Const, 0},
- {"PENDIN", Const, 0},
- {"PFL_HIDDEN", Const, 2},
- {"PFL_MATCHES_PROTOCOL_ZERO", Const, 2},
- {"PFL_MULTIPLE_PROTO_ENTRIES", Const, 2},
- {"PFL_NETWORKDIRECT_PROVIDER", Const, 2},
- {"PFL_RECOMMENDED_PROTO_ENTRY", Const, 2},
- {"PF_FLUSH", Const, 1},
- {"PKCS_7_ASN_ENCODING", Const, 0},
- {"PMC5_PIPELINE_FLUSH", Const, 1},
- {"PRIO_PGRP", Const, 2},
- {"PRIO_PROCESS", Const, 2},
- {"PRIO_USER", Const, 2},
- {"PRI_IOFLUSH", Const, 1},
- {"PROCESS_QUERY_INFORMATION", Const, 0},
- {"PROCESS_TERMINATE", Const, 2},
- {"PROT_EXEC", Const, 0},
- {"PROT_GROWSDOWN", Const, 0},
- {"PROT_GROWSUP", Const, 0},
- {"PROT_NONE", Const, 0},
- {"PROT_READ", Const, 0},
- {"PROT_WRITE", Const, 0},
- {"PROV_DH_SCHANNEL", Const, 0},
- {"PROV_DSS", Const, 0},
- {"PROV_DSS_DH", Const, 0},
- {"PROV_EC_ECDSA_FULL", Const, 0},
- {"PROV_EC_ECDSA_SIG", Const, 0},
- {"PROV_EC_ECNRA_FULL", Const, 0},
- {"PROV_EC_ECNRA_SIG", Const, 0},
- {"PROV_FORTEZZA", Const, 0},
- {"PROV_INTEL_SEC", Const, 0},
- {"PROV_MS_EXCHANGE", Const, 0},
- {"PROV_REPLACE_OWF", Const, 0},
- {"PROV_RNG", Const, 0},
- {"PROV_RSA_AES", Const, 0},
- {"PROV_RSA_FULL", Const, 0},
- {"PROV_RSA_SCHANNEL", Const, 0},
- {"PROV_RSA_SIG", Const, 0},
- {"PROV_SPYRUS_LYNKS", Const, 0},
- {"PROV_SSL", Const, 0},
- {"PR_CAPBSET_DROP", Const, 0},
- {"PR_CAPBSET_READ", Const, 0},
- {"PR_CLEAR_SECCOMP_FILTER", Const, 0},
- {"PR_ENDIAN_BIG", Const, 0},
- {"PR_ENDIAN_LITTLE", Const, 0},
- {"PR_ENDIAN_PPC_LITTLE", Const, 0},
- {"PR_FPEMU_NOPRINT", Const, 0},
- {"PR_FPEMU_SIGFPE", Const, 0},
- {"PR_FP_EXC_ASYNC", Const, 0},
- {"PR_FP_EXC_DISABLED", Const, 0},
- {"PR_FP_EXC_DIV", Const, 0},
- {"PR_FP_EXC_INV", Const, 0},
- {"PR_FP_EXC_NONRECOV", Const, 0},
- {"PR_FP_EXC_OVF", Const, 0},
- {"PR_FP_EXC_PRECISE", Const, 0},
- {"PR_FP_EXC_RES", Const, 0},
- {"PR_FP_EXC_SW_ENABLE", Const, 0},
- {"PR_FP_EXC_UND", Const, 0},
- {"PR_GET_DUMPABLE", Const, 0},
- {"PR_GET_ENDIAN", Const, 0},
- {"PR_GET_FPEMU", Const, 0},
- {"PR_GET_FPEXC", Const, 0},
- {"PR_GET_KEEPCAPS", Const, 0},
- {"PR_GET_NAME", Const, 0},
- {"PR_GET_PDEATHSIG", Const, 0},
- {"PR_GET_SECCOMP", Const, 0},
- {"PR_GET_SECCOMP_FILTER", Const, 0},
- {"PR_GET_SECUREBITS", Const, 0},
- {"PR_GET_TIMERSLACK", Const, 0},
- {"PR_GET_TIMING", Const, 0},
- {"PR_GET_TSC", Const, 0},
- {"PR_GET_UNALIGN", Const, 0},
- {"PR_MCE_KILL", Const, 0},
- {"PR_MCE_KILL_CLEAR", Const, 0},
- {"PR_MCE_KILL_DEFAULT", Const, 0},
- {"PR_MCE_KILL_EARLY", Const, 0},
- {"PR_MCE_KILL_GET", Const, 0},
- {"PR_MCE_KILL_LATE", Const, 0},
- {"PR_MCE_KILL_SET", Const, 0},
- {"PR_SECCOMP_FILTER_EVENT", Const, 0},
- {"PR_SECCOMP_FILTER_SYSCALL", Const, 0},
- {"PR_SET_DUMPABLE", Const, 0},
- {"PR_SET_ENDIAN", Const, 0},
- {"PR_SET_FPEMU", Const, 0},
- {"PR_SET_FPEXC", Const, 0},
- {"PR_SET_KEEPCAPS", Const, 0},
- {"PR_SET_NAME", Const, 0},
- {"PR_SET_PDEATHSIG", Const, 0},
- {"PR_SET_PTRACER", Const, 0},
- {"PR_SET_SECCOMP", Const, 0},
- {"PR_SET_SECCOMP_FILTER", Const, 0},
- {"PR_SET_SECUREBITS", Const, 0},
- {"PR_SET_TIMERSLACK", Const, 0},
- {"PR_SET_TIMING", Const, 0},
- {"PR_SET_TSC", Const, 0},
- {"PR_SET_UNALIGN", Const, 0},
- {"PR_TASK_PERF_EVENTS_DISABLE", Const, 0},
- {"PR_TASK_PERF_EVENTS_ENABLE", Const, 0},
- {"PR_TIMING_STATISTICAL", Const, 0},
- {"PR_TIMING_TIMESTAMP", Const, 0},
- {"PR_TSC_ENABLE", Const, 0},
- {"PR_TSC_SIGSEGV", Const, 0},
- {"PR_UNALIGN_NOPRINT", Const, 0},
- {"PR_UNALIGN_SIGBUS", Const, 0},
- {"PTRACE_ARCH_PRCTL", Const, 0},
- {"PTRACE_ATTACH", Const, 0},
- {"PTRACE_CONT", Const, 0},
- {"PTRACE_DETACH", Const, 0},
- {"PTRACE_EVENT_CLONE", Const, 0},
- {"PTRACE_EVENT_EXEC", Const, 0},
- {"PTRACE_EVENT_EXIT", Const, 0},
- {"PTRACE_EVENT_FORK", Const, 0},
- {"PTRACE_EVENT_VFORK", Const, 0},
- {"PTRACE_EVENT_VFORK_DONE", Const, 0},
- {"PTRACE_GETCRUNCHREGS", Const, 0},
- {"PTRACE_GETEVENTMSG", Const, 0},
- {"PTRACE_GETFPREGS", Const, 0},
- {"PTRACE_GETFPXREGS", Const, 0},
- {"PTRACE_GETHBPREGS", Const, 0},
- {"PTRACE_GETREGS", Const, 0},
- {"PTRACE_GETREGSET", Const, 0},
- {"PTRACE_GETSIGINFO", Const, 0},
- {"PTRACE_GETVFPREGS", Const, 0},
- {"PTRACE_GETWMMXREGS", Const, 0},
- {"PTRACE_GET_THREAD_AREA", Const, 0},
- {"PTRACE_KILL", Const, 0},
- {"PTRACE_OLDSETOPTIONS", Const, 0},
- {"PTRACE_O_MASK", Const, 0},
- {"PTRACE_O_TRACECLONE", Const, 0},
- {"PTRACE_O_TRACEEXEC", Const, 0},
- {"PTRACE_O_TRACEEXIT", Const, 0},
- {"PTRACE_O_TRACEFORK", Const, 0},
- {"PTRACE_O_TRACESYSGOOD", Const, 0},
- {"PTRACE_O_TRACEVFORK", Const, 0},
- {"PTRACE_O_TRACEVFORKDONE", Const, 0},
- {"PTRACE_PEEKDATA", Const, 0},
- {"PTRACE_PEEKTEXT", Const, 0},
- {"PTRACE_PEEKUSR", Const, 0},
- {"PTRACE_POKEDATA", Const, 0},
- {"PTRACE_POKETEXT", Const, 0},
- {"PTRACE_POKEUSR", Const, 0},
- {"PTRACE_SETCRUNCHREGS", Const, 0},
- {"PTRACE_SETFPREGS", Const, 0},
- {"PTRACE_SETFPXREGS", Const, 0},
- {"PTRACE_SETHBPREGS", Const, 0},
- {"PTRACE_SETOPTIONS", Const, 0},
- {"PTRACE_SETREGS", Const, 0},
- {"PTRACE_SETREGSET", Const, 0},
- {"PTRACE_SETSIGINFO", Const, 0},
- {"PTRACE_SETVFPREGS", Const, 0},
- {"PTRACE_SETWMMXREGS", Const, 0},
- {"PTRACE_SET_SYSCALL", Const, 0},
- {"PTRACE_SET_THREAD_AREA", Const, 0},
- {"PTRACE_SINGLEBLOCK", Const, 0},
- {"PTRACE_SINGLESTEP", Const, 0},
- {"PTRACE_SYSCALL", Const, 0},
- {"PTRACE_SYSEMU", Const, 0},
- {"PTRACE_SYSEMU_SINGLESTEP", Const, 0},
- {"PTRACE_TRACEME", Const, 0},
- {"PT_ATTACH", Const, 0},
- {"PT_ATTACHEXC", Const, 0},
- {"PT_CONTINUE", Const, 0},
- {"PT_DATA_ADDR", Const, 0},
- {"PT_DENY_ATTACH", Const, 0},
- {"PT_DETACH", Const, 0},
- {"PT_FIRSTMACH", Const, 0},
- {"PT_FORCEQUOTA", Const, 0},
- {"PT_KILL", Const, 0},
- {"PT_MASK", Const, 1},
- {"PT_READ_D", Const, 0},
- {"PT_READ_I", Const, 0},
- {"PT_READ_U", Const, 0},
- {"PT_SIGEXC", Const, 0},
- {"PT_STEP", Const, 0},
- {"PT_TEXT_ADDR", Const, 0},
- {"PT_TEXT_END_ADDR", Const, 0},
- {"PT_THUPDATE", Const, 0},
- {"PT_TRACE_ME", Const, 0},
- {"PT_WRITE_D", Const, 0},
- {"PT_WRITE_I", Const, 0},
- {"PT_WRITE_U", Const, 0},
- {"ParseDirent", Func, 0},
- {"ParseNetlinkMessage", Func, 0},
- {"ParseNetlinkRouteAttr", Func, 0},
- {"ParseRoutingMessage", Func, 0},
- {"ParseRoutingSockaddr", Func, 0},
- {"ParseSocketControlMessage", Func, 0},
- {"ParseUnixCredentials", Func, 0},
- {"ParseUnixRights", Func, 0},
- {"PathMax", Const, 0},
- {"Pathconf", Func, 0},
- {"Pause", Func, 0},
- {"Pipe", Func, 0},
- {"Pipe2", Func, 1},
- {"PivotRoot", Func, 0},
- {"Pointer", Type, 11},
- {"PostQueuedCompletionStatus", Func, 0},
- {"Pread", Func, 0},
- {"Proc", Type, 0},
- {"Proc.Dll", Field, 0},
- {"Proc.Name", Field, 0},
- {"ProcAttr", Type, 0},
- {"ProcAttr.Dir", Field, 0},
- {"ProcAttr.Env", Field, 0},
- {"ProcAttr.Files", Field, 0},
- {"ProcAttr.Sys", Field, 0},
- {"Process32First", Func, 4},
- {"Process32Next", Func, 4},
- {"ProcessEntry32", Type, 4},
- {"ProcessEntry32.DefaultHeapID", Field, 4},
- {"ProcessEntry32.ExeFile", Field, 4},
- {"ProcessEntry32.Flags", Field, 4},
- {"ProcessEntry32.ModuleID", Field, 4},
- {"ProcessEntry32.ParentProcessID", Field, 4},
- {"ProcessEntry32.PriClassBase", Field, 4},
- {"ProcessEntry32.ProcessID", Field, 4},
- {"ProcessEntry32.Size", Field, 4},
- {"ProcessEntry32.Threads", Field, 4},
- {"ProcessEntry32.Usage", Field, 4},
- {"ProcessInformation", Type, 0},
- {"ProcessInformation.Process", Field, 0},
- {"ProcessInformation.ProcessId", Field, 0},
- {"ProcessInformation.Thread", Field, 0},
- {"ProcessInformation.ThreadId", Field, 0},
- {"Protoent", Type, 0},
- {"Protoent.Aliases", Field, 0},
- {"Protoent.Name", Field, 0},
- {"Protoent.Proto", Field, 0},
- {"PtraceAttach", Func, 0},
- {"PtraceCont", Func, 0},
- {"PtraceDetach", Func, 0},
- {"PtraceGetEventMsg", Func, 0},
- {"PtraceGetRegs", Func, 0},
- {"PtracePeekData", Func, 0},
- {"PtracePeekText", Func, 0},
- {"PtracePokeData", Func, 0},
- {"PtracePokeText", Func, 0},
- {"PtraceRegs", Type, 0},
- {"PtraceRegs.Cs", Field, 0},
- {"PtraceRegs.Ds", Field, 0},
- {"PtraceRegs.Eax", Field, 0},
- {"PtraceRegs.Ebp", Field, 0},
- {"PtraceRegs.Ebx", Field, 0},
- {"PtraceRegs.Ecx", Field, 0},
- {"PtraceRegs.Edi", Field, 0},
- {"PtraceRegs.Edx", Field, 0},
- {"PtraceRegs.Eflags", Field, 0},
- {"PtraceRegs.Eip", Field, 0},
- {"PtraceRegs.Es", Field, 0},
- {"PtraceRegs.Esi", Field, 0},
- {"PtraceRegs.Esp", Field, 0},
- {"PtraceRegs.Fs", Field, 0},
- {"PtraceRegs.Fs_base", Field, 0},
- {"PtraceRegs.Gs", Field, 0},
- {"PtraceRegs.Gs_base", Field, 0},
- {"PtraceRegs.Orig_eax", Field, 0},
- {"PtraceRegs.Orig_rax", Field, 0},
- {"PtraceRegs.R10", Field, 0},
- {"PtraceRegs.R11", Field, 0},
- {"PtraceRegs.R12", Field, 0},
- {"PtraceRegs.R13", Field, 0},
- {"PtraceRegs.R14", Field, 0},
- {"PtraceRegs.R15", Field, 0},
- {"PtraceRegs.R8", Field, 0},
- {"PtraceRegs.R9", Field, 0},
- {"PtraceRegs.Rax", Field, 0},
- {"PtraceRegs.Rbp", Field, 0},
- {"PtraceRegs.Rbx", Field, 0},
- {"PtraceRegs.Rcx", Field, 0},
- {"PtraceRegs.Rdi", Field, 0},
- {"PtraceRegs.Rdx", Field, 0},
- {"PtraceRegs.Rip", Field, 0},
- {"PtraceRegs.Rsi", Field, 0},
- {"PtraceRegs.Rsp", Field, 0},
- {"PtraceRegs.Ss", Field, 0},
- {"PtraceRegs.Uregs", Field, 0},
- {"PtraceRegs.Xcs", Field, 0},
- {"PtraceRegs.Xds", Field, 0},
- {"PtraceRegs.Xes", Field, 0},
- {"PtraceRegs.Xfs", Field, 0},
- {"PtraceRegs.Xgs", Field, 0},
- {"PtraceRegs.Xss", Field, 0},
- {"PtraceSetOptions", Func, 0},
- {"PtraceSetRegs", Func, 0},
- {"PtraceSingleStep", Func, 0},
- {"PtraceSyscall", Func, 1},
- {"Pwrite", Func, 0},
- {"REG_BINARY", Const, 0},
- {"REG_DWORD", Const, 0},
- {"REG_DWORD_BIG_ENDIAN", Const, 0},
- {"REG_DWORD_LITTLE_ENDIAN", Const, 0},
- {"REG_EXPAND_SZ", Const, 0},
- {"REG_FULL_RESOURCE_DESCRIPTOR", Const, 0},
- {"REG_LINK", Const, 0},
- {"REG_MULTI_SZ", Const, 0},
- {"REG_NONE", Const, 0},
- {"REG_QWORD", Const, 0},
- {"REG_QWORD_LITTLE_ENDIAN", Const, 0},
- {"REG_RESOURCE_LIST", Const, 0},
- {"REG_RESOURCE_REQUIREMENTS_LIST", Const, 0},
- {"REG_SZ", Const, 0},
- {"RLIMIT_AS", Const, 0},
- {"RLIMIT_CORE", Const, 0},
- {"RLIMIT_CPU", Const, 0},
- {"RLIMIT_CPU_USAGE_MONITOR", Const, 16},
- {"RLIMIT_DATA", Const, 0},
- {"RLIMIT_FSIZE", Const, 0},
- {"RLIMIT_NOFILE", Const, 0},
- {"RLIMIT_STACK", Const, 0},
- {"RLIM_INFINITY", Const, 0},
- {"RTAX_ADVMSS", Const, 0},
- {"RTAX_AUTHOR", Const, 0},
- {"RTAX_BRD", Const, 0},
- {"RTAX_CWND", Const, 0},
- {"RTAX_DST", Const, 0},
- {"RTAX_FEATURES", Const, 0},
- {"RTAX_FEATURE_ALLFRAG", Const, 0},
- {"RTAX_FEATURE_ECN", Const, 0},
- {"RTAX_FEATURE_SACK", Const, 0},
- {"RTAX_FEATURE_TIMESTAMP", Const, 0},
- {"RTAX_GATEWAY", Const, 0},
- {"RTAX_GENMASK", Const, 0},
- {"RTAX_HOPLIMIT", Const, 0},
- {"RTAX_IFA", Const, 0},
- {"RTAX_IFP", Const, 0},
- {"RTAX_INITCWND", Const, 0},
- {"RTAX_INITRWND", Const, 0},
- {"RTAX_LABEL", Const, 1},
- {"RTAX_LOCK", Const, 0},
- {"RTAX_MAX", Const, 0},
- {"RTAX_MTU", Const, 0},
- {"RTAX_NETMASK", Const, 0},
- {"RTAX_REORDERING", Const, 0},
- {"RTAX_RTO_MIN", Const, 0},
- {"RTAX_RTT", Const, 0},
- {"RTAX_RTTVAR", Const, 0},
- {"RTAX_SRC", Const, 1},
- {"RTAX_SRCMASK", Const, 1},
- {"RTAX_SSTHRESH", Const, 0},
- {"RTAX_TAG", Const, 1},
- {"RTAX_UNSPEC", Const, 0},
- {"RTAX_WINDOW", Const, 0},
- {"RTA_ALIGNTO", Const, 0},
- {"RTA_AUTHOR", Const, 0},
- {"RTA_BRD", Const, 0},
- {"RTA_CACHEINFO", Const, 0},
- {"RTA_DST", Const, 0},
- {"RTA_FLOW", Const, 0},
- {"RTA_GATEWAY", Const, 0},
- {"RTA_GENMASK", Const, 0},
- {"RTA_IFA", Const, 0},
- {"RTA_IFP", Const, 0},
- {"RTA_IIF", Const, 0},
- {"RTA_LABEL", Const, 1},
- {"RTA_MAX", Const, 0},
- {"RTA_METRICS", Const, 0},
- {"RTA_MULTIPATH", Const, 0},
- {"RTA_NETMASK", Const, 0},
- {"RTA_OIF", Const, 0},
- {"RTA_PREFSRC", Const, 0},
- {"RTA_PRIORITY", Const, 0},
- {"RTA_SRC", Const, 0},
- {"RTA_SRCMASK", Const, 1},
- {"RTA_TABLE", Const, 0},
- {"RTA_TAG", Const, 1},
- {"RTA_UNSPEC", Const, 0},
- {"RTCF_DIRECTSRC", Const, 0},
- {"RTCF_DOREDIRECT", Const, 0},
- {"RTCF_LOG", Const, 0},
- {"RTCF_MASQ", Const, 0},
- {"RTCF_NAT", Const, 0},
- {"RTCF_VALVE", Const, 0},
- {"RTF_ADDRCLASSMASK", Const, 0},
- {"RTF_ADDRCONF", Const, 0},
- {"RTF_ALLONLINK", Const, 0},
- {"RTF_ANNOUNCE", Const, 1},
- {"RTF_BLACKHOLE", Const, 0},
- {"RTF_BROADCAST", Const, 0},
- {"RTF_CACHE", Const, 0},
- {"RTF_CLONED", Const, 1},
- {"RTF_CLONING", Const, 0},
- {"RTF_CONDEMNED", Const, 0},
- {"RTF_DEFAULT", Const, 0},
- {"RTF_DELCLONE", Const, 0},
- {"RTF_DONE", Const, 0},
- {"RTF_DYNAMIC", Const, 0},
- {"RTF_FLOW", Const, 0},
- {"RTF_FMASK", Const, 0},
- {"RTF_GATEWAY", Const, 0},
- {"RTF_GWFLAG_COMPAT", Const, 3},
- {"RTF_HOST", Const, 0},
- {"RTF_IFREF", Const, 0},
- {"RTF_IFSCOPE", Const, 0},
- {"RTF_INTERFACE", Const, 0},
- {"RTF_IRTT", Const, 0},
- {"RTF_LINKRT", Const, 0},
- {"RTF_LLDATA", Const, 0},
- {"RTF_LLINFO", Const, 0},
- {"RTF_LOCAL", Const, 0},
- {"RTF_MASK", Const, 1},
- {"RTF_MODIFIED", Const, 0},
- {"RTF_MPATH", Const, 1},
- {"RTF_MPLS", Const, 1},
- {"RTF_MSS", Const, 0},
- {"RTF_MTU", Const, 0},
- {"RTF_MULTICAST", Const, 0},
- {"RTF_NAT", Const, 0},
- {"RTF_NOFORWARD", Const, 0},
- {"RTF_NONEXTHOP", Const, 0},
- {"RTF_NOPMTUDISC", Const, 0},
- {"RTF_PERMANENT_ARP", Const, 1},
- {"RTF_PINNED", Const, 0},
- {"RTF_POLICY", Const, 0},
- {"RTF_PRCLONING", Const, 0},
- {"RTF_PROTO1", Const, 0},
- {"RTF_PROTO2", Const, 0},
- {"RTF_PROTO3", Const, 0},
- {"RTF_PROXY", Const, 16},
- {"RTF_REINSTATE", Const, 0},
- {"RTF_REJECT", Const, 0},
- {"RTF_RNH_LOCKED", Const, 0},
- {"RTF_ROUTER", Const, 16},
- {"RTF_SOURCE", Const, 1},
- {"RTF_SRC", Const, 1},
- {"RTF_STATIC", Const, 0},
- {"RTF_STICKY", Const, 0},
- {"RTF_THROW", Const, 0},
- {"RTF_TUNNEL", Const, 1},
- {"RTF_UP", Const, 0},
- {"RTF_USETRAILERS", Const, 1},
- {"RTF_WASCLONED", Const, 0},
- {"RTF_WINDOW", Const, 0},
- {"RTF_XRESOLVE", Const, 0},
- {"RTM_ADD", Const, 0},
- {"RTM_BASE", Const, 0},
- {"RTM_CHANGE", Const, 0},
- {"RTM_CHGADDR", Const, 1},
- {"RTM_DELACTION", Const, 0},
- {"RTM_DELADDR", Const, 0},
- {"RTM_DELADDRLABEL", Const, 0},
- {"RTM_DELETE", Const, 0},
- {"RTM_DELLINK", Const, 0},
- {"RTM_DELMADDR", Const, 0},
- {"RTM_DELNEIGH", Const, 0},
- {"RTM_DELQDISC", Const, 0},
- {"RTM_DELROUTE", Const, 0},
- {"RTM_DELRULE", Const, 0},
- {"RTM_DELTCLASS", Const, 0},
- {"RTM_DELTFILTER", Const, 0},
- {"RTM_DESYNC", Const, 1},
- {"RTM_F_CLONED", Const, 0},
- {"RTM_F_EQUALIZE", Const, 0},
- {"RTM_F_NOTIFY", Const, 0},
- {"RTM_F_PREFIX", Const, 0},
- {"RTM_GET", Const, 0},
- {"RTM_GET2", Const, 0},
- {"RTM_GETACTION", Const, 0},
- {"RTM_GETADDR", Const, 0},
- {"RTM_GETADDRLABEL", Const, 0},
- {"RTM_GETANYCAST", Const, 0},
- {"RTM_GETDCB", Const, 0},
- {"RTM_GETLINK", Const, 0},
- {"RTM_GETMULTICAST", Const, 0},
- {"RTM_GETNEIGH", Const, 0},
- {"RTM_GETNEIGHTBL", Const, 0},
- {"RTM_GETQDISC", Const, 0},
- {"RTM_GETROUTE", Const, 0},
- {"RTM_GETRULE", Const, 0},
- {"RTM_GETTCLASS", Const, 0},
- {"RTM_GETTFILTER", Const, 0},
- {"RTM_IEEE80211", Const, 0},
- {"RTM_IFANNOUNCE", Const, 0},
- {"RTM_IFINFO", Const, 0},
- {"RTM_IFINFO2", Const, 0},
- {"RTM_LLINFO_UPD", Const, 1},
- {"RTM_LOCK", Const, 0},
- {"RTM_LOSING", Const, 0},
- {"RTM_MAX", Const, 0},
- {"RTM_MAXSIZE", Const, 1},
- {"RTM_MISS", Const, 0},
- {"RTM_NEWACTION", Const, 0},
- {"RTM_NEWADDR", Const, 0},
- {"RTM_NEWADDRLABEL", Const, 0},
- {"RTM_NEWLINK", Const, 0},
- {"RTM_NEWMADDR", Const, 0},
- {"RTM_NEWMADDR2", Const, 0},
- {"RTM_NEWNDUSEROPT", Const, 0},
- {"RTM_NEWNEIGH", Const, 0},
- {"RTM_NEWNEIGHTBL", Const, 0},
- {"RTM_NEWPREFIX", Const, 0},
- {"RTM_NEWQDISC", Const, 0},
- {"RTM_NEWROUTE", Const, 0},
- {"RTM_NEWRULE", Const, 0},
- {"RTM_NEWTCLASS", Const, 0},
- {"RTM_NEWTFILTER", Const, 0},
- {"RTM_NR_FAMILIES", Const, 0},
- {"RTM_NR_MSGTYPES", Const, 0},
- {"RTM_OIFINFO", Const, 1},
- {"RTM_OLDADD", Const, 0},
- {"RTM_OLDDEL", Const, 0},
- {"RTM_OOIFINFO", Const, 1},
- {"RTM_REDIRECT", Const, 0},
- {"RTM_RESOLVE", Const, 0},
- {"RTM_RTTUNIT", Const, 0},
- {"RTM_SETDCB", Const, 0},
- {"RTM_SETGATE", Const, 1},
- {"RTM_SETLINK", Const, 0},
- {"RTM_SETNEIGHTBL", Const, 0},
- {"RTM_VERSION", Const, 0},
- {"RTNH_ALIGNTO", Const, 0},
- {"RTNH_F_DEAD", Const, 0},
- {"RTNH_F_ONLINK", Const, 0},
- {"RTNH_F_PERVASIVE", Const, 0},
- {"RTNLGRP_IPV4_IFADDR", Const, 1},
- {"RTNLGRP_IPV4_MROUTE", Const, 1},
- {"RTNLGRP_IPV4_ROUTE", Const, 1},
- {"RTNLGRP_IPV4_RULE", Const, 1},
- {"RTNLGRP_IPV6_IFADDR", Const, 1},
- {"RTNLGRP_IPV6_IFINFO", Const, 1},
- {"RTNLGRP_IPV6_MROUTE", Const, 1},
- {"RTNLGRP_IPV6_PREFIX", Const, 1},
- {"RTNLGRP_IPV6_ROUTE", Const, 1},
- {"RTNLGRP_IPV6_RULE", Const, 1},
- {"RTNLGRP_LINK", Const, 1},
- {"RTNLGRP_ND_USEROPT", Const, 1},
- {"RTNLGRP_NEIGH", Const, 1},
- {"RTNLGRP_NONE", Const, 1},
- {"RTNLGRP_NOTIFY", Const, 1},
- {"RTNLGRP_TC", Const, 1},
- {"RTN_ANYCAST", Const, 0},
- {"RTN_BLACKHOLE", Const, 0},
- {"RTN_BROADCAST", Const, 0},
- {"RTN_LOCAL", Const, 0},
- {"RTN_MAX", Const, 0},
- {"RTN_MULTICAST", Const, 0},
- {"RTN_NAT", Const, 0},
- {"RTN_PROHIBIT", Const, 0},
- {"RTN_THROW", Const, 0},
- {"RTN_UNICAST", Const, 0},
- {"RTN_UNREACHABLE", Const, 0},
- {"RTN_UNSPEC", Const, 0},
- {"RTN_XRESOLVE", Const, 0},
- {"RTPROT_BIRD", Const, 0},
- {"RTPROT_BOOT", Const, 0},
- {"RTPROT_DHCP", Const, 0},
- {"RTPROT_DNROUTED", Const, 0},
- {"RTPROT_GATED", Const, 0},
- {"RTPROT_KERNEL", Const, 0},
- {"RTPROT_MRT", Const, 0},
- {"RTPROT_NTK", Const, 0},
- {"RTPROT_RA", Const, 0},
- {"RTPROT_REDIRECT", Const, 0},
- {"RTPROT_STATIC", Const, 0},
- {"RTPROT_UNSPEC", Const, 0},
- {"RTPROT_XORP", Const, 0},
- {"RTPROT_ZEBRA", Const, 0},
- {"RTV_EXPIRE", Const, 0},
- {"RTV_HOPCOUNT", Const, 0},
- {"RTV_MTU", Const, 0},
- {"RTV_RPIPE", Const, 0},
- {"RTV_RTT", Const, 0},
- {"RTV_RTTVAR", Const, 0},
- {"RTV_SPIPE", Const, 0},
- {"RTV_SSTHRESH", Const, 0},
- {"RTV_WEIGHT", Const, 0},
- {"RT_CACHING_CONTEXT", Const, 1},
- {"RT_CLASS_DEFAULT", Const, 0},
- {"RT_CLASS_LOCAL", Const, 0},
- {"RT_CLASS_MAIN", Const, 0},
- {"RT_CLASS_MAX", Const, 0},
- {"RT_CLASS_UNSPEC", Const, 0},
- {"RT_DEFAULT_FIB", Const, 1},
- {"RT_NORTREF", Const, 1},
- {"RT_SCOPE_HOST", Const, 0},
- {"RT_SCOPE_LINK", Const, 0},
- {"RT_SCOPE_NOWHERE", Const, 0},
- {"RT_SCOPE_SITE", Const, 0},
- {"RT_SCOPE_UNIVERSE", Const, 0},
- {"RT_TABLEID_MAX", Const, 1},
- {"RT_TABLE_COMPAT", Const, 0},
- {"RT_TABLE_DEFAULT", Const, 0},
- {"RT_TABLE_LOCAL", Const, 0},
- {"RT_TABLE_MAIN", Const, 0},
- {"RT_TABLE_MAX", Const, 0},
- {"RT_TABLE_UNSPEC", Const, 0},
- {"RUSAGE_CHILDREN", Const, 0},
- {"RUSAGE_SELF", Const, 0},
- {"RUSAGE_THREAD", Const, 0},
- {"Radvisory_t", Type, 0},
- {"Radvisory_t.Count", Field, 0},
- {"Radvisory_t.Offset", Field, 0},
- {"Radvisory_t.Pad_cgo_0", Field, 0},
- {"RawConn", Type, 9},
- {"RawSockaddr", Type, 0},
- {"RawSockaddr.Data", Field, 0},
- {"RawSockaddr.Family", Field, 0},
- {"RawSockaddr.Len", Field, 0},
- {"RawSockaddrAny", Type, 0},
- {"RawSockaddrAny.Addr", Field, 0},
- {"RawSockaddrAny.Pad", Field, 0},
- {"RawSockaddrDatalink", Type, 0},
- {"RawSockaddrDatalink.Alen", Field, 0},
- {"RawSockaddrDatalink.Data", Field, 0},
- {"RawSockaddrDatalink.Family", Field, 0},
- {"RawSockaddrDatalink.Index", Field, 0},
- {"RawSockaddrDatalink.Len", Field, 0},
- {"RawSockaddrDatalink.Nlen", Field, 0},
- {"RawSockaddrDatalink.Pad_cgo_0", Field, 2},
- {"RawSockaddrDatalink.Slen", Field, 0},
- {"RawSockaddrDatalink.Type", Field, 0},
- {"RawSockaddrInet4", Type, 0},
- {"RawSockaddrInet4.Addr", Field, 0},
- {"RawSockaddrInet4.Family", Field, 0},
- {"RawSockaddrInet4.Len", Field, 0},
- {"RawSockaddrInet4.Port", Field, 0},
- {"RawSockaddrInet4.Zero", Field, 0},
- {"RawSockaddrInet6", Type, 0},
- {"RawSockaddrInet6.Addr", Field, 0},
- {"RawSockaddrInet6.Family", Field, 0},
- {"RawSockaddrInet6.Flowinfo", Field, 0},
- {"RawSockaddrInet6.Len", Field, 0},
- {"RawSockaddrInet6.Port", Field, 0},
- {"RawSockaddrInet6.Scope_id", Field, 0},
- {"RawSockaddrLinklayer", Type, 0},
- {"RawSockaddrLinklayer.Addr", Field, 0},
- {"RawSockaddrLinklayer.Family", Field, 0},
- {"RawSockaddrLinklayer.Halen", Field, 0},
- {"RawSockaddrLinklayer.Hatype", Field, 0},
- {"RawSockaddrLinklayer.Ifindex", Field, 0},
- {"RawSockaddrLinklayer.Pkttype", Field, 0},
- {"RawSockaddrLinklayer.Protocol", Field, 0},
- {"RawSockaddrNetlink", Type, 0},
- {"RawSockaddrNetlink.Family", Field, 0},
- {"RawSockaddrNetlink.Groups", Field, 0},
- {"RawSockaddrNetlink.Pad", Field, 0},
- {"RawSockaddrNetlink.Pid", Field, 0},
- {"RawSockaddrUnix", Type, 0},
- {"RawSockaddrUnix.Family", Field, 0},
- {"RawSockaddrUnix.Len", Field, 0},
- {"RawSockaddrUnix.Pad_cgo_0", Field, 2},
- {"RawSockaddrUnix.Path", Field, 0},
- {"RawSyscall", Func, 0},
- {"RawSyscall6", Func, 0},
- {"Read", Func, 0},
- {"ReadConsole", Func, 1},
- {"ReadDirectoryChanges", Func, 0},
- {"ReadDirent", Func, 0},
- {"ReadFile", Func, 0},
- {"Readlink", Func, 0},
- {"Reboot", Func, 0},
- {"Recvfrom", Func, 0},
- {"Recvmsg", Func, 0},
- {"RegCloseKey", Func, 0},
- {"RegEnumKeyEx", Func, 0},
- {"RegOpenKeyEx", Func, 0},
- {"RegQueryInfoKey", Func, 0},
- {"RegQueryValueEx", Func, 0},
- {"RemoveDirectory", Func, 0},
- {"Removexattr", Func, 1},
- {"Rename", Func, 0},
- {"Renameat", Func, 0},
- {"Revoke", Func, 0},
- {"Rlimit", Type, 0},
- {"Rlimit.Cur", Field, 0},
- {"Rlimit.Max", Field, 0},
- {"Rmdir", Func, 0},
- {"RouteMessage", Type, 0},
- {"RouteMessage.Data", Field, 0},
- {"RouteMessage.Header", Field, 0},
- {"RouteRIB", Func, 0},
- {"RoutingMessage", Type, 0},
- {"RtAttr", Type, 0},
- {"RtAttr.Len", Field, 0},
- {"RtAttr.Type", Field, 0},
- {"RtGenmsg", Type, 0},
- {"RtGenmsg.Family", Field, 0},
- {"RtMetrics", Type, 0},
- {"RtMetrics.Expire", Field, 0},
- {"RtMetrics.Filler", Field, 0},
- {"RtMetrics.Hopcount", Field, 0},
- {"RtMetrics.Locks", Field, 0},
- {"RtMetrics.Mtu", Field, 0},
- {"RtMetrics.Pad", Field, 3},
- {"RtMetrics.Pksent", Field, 0},
- {"RtMetrics.Recvpipe", Field, 0},
- {"RtMetrics.Refcnt", Field, 2},
- {"RtMetrics.Rtt", Field, 0},
- {"RtMetrics.Rttvar", Field, 0},
- {"RtMetrics.Sendpipe", Field, 0},
- {"RtMetrics.Ssthresh", Field, 0},
- {"RtMetrics.Weight", Field, 0},
- {"RtMsg", Type, 0},
- {"RtMsg.Dst_len", Field, 0},
- {"RtMsg.Family", Field, 0},
- {"RtMsg.Flags", Field, 0},
- {"RtMsg.Protocol", Field, 0},
- {"RtMsg.Scope", Field, 0},
- {"RtMsg.Src_len", Field, 0},
- {"RtMsg.Table", Field, 0},
- {"RtMsg.Tos", Field, 0},
- {"RtMsg.Type", Field, 0},
- {"RtMsghdr", Type, 0},
- {"RtMsghdr.Addrs", Field, 0},
- {"RtMsghdr.Errno", Field, 0},
- {"RtMsghdr.Flags", Field, 0},
- {"RtMsghdr.Fmask", Field, 0},
- {"RtMsghdr.Hdrlen", Field, 2},
- {"RtMsghdr.Index", Field, 0},
- {"RtMsghdr.Inits", Field, 0},
- {"RtMsghdr.Mpls", Field, 2},
- {"RtMsghdr.Msglen", Field, 0},
- {"RtMsghdr.Pad_cgo_0", Field, 0},
- {"RtMsghdr.Pad_cgo_1", Field, 2},
- {"RtMsghdr.Pid", Field, 0},
- {"RtMsghdr.Priority", Field, 2},
- {"RtMsghdr.Rmx", Field, 0},
- {"RtMsghdr.Seq", Field, 0},
- {"RtMsghdr.Tableid", Field, 2},
- {"RtMsghdr.Type", Field, 0},
- {"RtMsghdr.Use", Field, 0},
- {"RtMsghdr.Version", Field, 0},
- {"RtNexthop", Type, 0},
- {"RtNexthop.Flags", Field, 0},
- {"RtNexthop.Hops", Field, 0},
- {"RtNexthop.Ifindex", Field, 0},
- {"RtNexthop.Len", Field, 0},
- {"Rusage", Type, 0},
- {"Rusage.CreationTime", Field, 0},
- {"Rusage.ExitTime", Field, 0},
- {"Rusage.Idrss", Field, 0},
- {"Rusage.Inblock", Field, 0},
- {"Rusage.Isrss", Field, 0},
- {"Rusage.Ixrss", Field, 0},
- {"Rusage.KernelTime", Field, 0},
- {"Rusage.Majflt", Field, 0},
- {"Rusage.Maxrss", Field, 0},
- {"Rusage.Minflt", Field, 0},
- {"Rusage.Msgrcv", Field, 0},
- {"Rusage.Msgsnd", Field, 0},
- {"Rusage.Nivcsw", Field, 0},
- {"Rusage.Nsignals", Field, 0},
- {"Rusage.Nswap", Field, 0},
- {"Rusage.Nvcsw", Field, 0},
- {"Rusage.Oublock", Field, 0},
- {"Rusage.Stime", Field, 0},
- {"Rusage.UserTime", Field, 0},
- {"Rusage.Utime", Field, 0},
- {"SCM_BINTIME", Const, 0},
- {"SCM_CREDENTIALS", Const, 0},
- {"SCM_CREDS", Const, 0},
- {"SCM_RIGHTS", Const, 0},
- {"SCM_TIMESTAMP", Const, 0},
- {"SCM_TIMESTAMPING", Const, 0},
- {"SCM_TIMESTAMPNS", Const, 0},
- {"SCM_TIMESTAMP_MONOTONIC", Const, 0},
- {"SHUT_RD", Const, 0},
- {"SHUT_RDWR", Const, 0},
- {"SHUT_WR", Const, 0},
- {"SID", Type, 0},
- {"SIDAndAttributes", Type, 0},
- {"SIDAndAttributes.Attributes", Field, 0},
- {"SIDAndAttributes.Sid", Field, 0},
- {"SIGABRT", Const, 0},
- {"SIGALRM", Const, 0},
- {"SIGBUS", Const, 0},
- {"SIGCHLD", Const, 0},
- {"SIGCLD", Const, 0},
- {"SIGCONT", Const, 0},
- {"SIGEMT", Const, 0},
- {"SIGFPE", Const, 0},
- {"SIGHUP", Const, 0},
- {"SIGILL", Const, 0},
- {"SIGINFO", Const, 0},
- {"SIGINT", Const, 0},
- {"SIGIO", Const, 0},
- {"SIGIOT", Const, 0},
- {"SIGKILL", Const, 0},
- {"SIGLIBRT", Const, 1},
- {"SIGLWP", Const, 0},
- {"SIGPIPE", Const, 0},
- {"SIGPOLL", Const, 0},
- {"SIGPROF", Const, 0},
- {"SIGPWR", Const, 0},
- {"SIGQUIT", Const, 0},
- {"SIGSEGV", Const, 0},
- {"SIGSTKFLT", Const, 0},
- {"SIGSTOP", Const, 0},
- {"SIGSYS", Const, 0},
- {"SIGTERM", Const, 0},
- {"SIGTHR", Const, 0},
- {"SIGTRAP", Const, 0},
- {"SIGTSTP", Const, 0},
- {"SIGTTIN", Const, 0},
- {"SIGTTOU", Const, 0},
- {"SIGUNUSED", Const, 0},
- {"SIGURG", Const, 0},
- {"SIGUSR1", Const, 0},
- {"SIGUSR2", Const, 0},
- {"SIGVTALRM", Const, 0},
- {"SIGWINCH", Const, 0},
- {"SIGXCPU", Const, 0},
- {"SIGXFSZ", Const, 0},
- {"SIOCADDDLCI", Const, 0},
- {"SIOCADDMULTI", Const, 0},
- {"SIOCADDRT", Const, 0},
- {"SIOCAIFADDR", Const, 0},
- {"SIOCAIFGROUP", Const, 0},
- {"SIOCALIFADDR", Const, 0},
- {"SIOCARPIPLL", Const, 0},
- {"SIOCATMARK", Const, 0},
- {"SIOCAUTOADDR", Const, 0},
- {"SIOCAUTONETMASK", Const, 0},
- {"SIOCBRDGADD", Const, 1},
- {"SIOCBRDGADDS", Const, 1},
- {"SIOCBRDGARL", Const, 1},
- {"SIOCBRDGDADDR", Const, 1},
- {"SIOCBRDGDEL", Const, 1},
- {"SIOCBRDGDELS", Const, 1},
- {"SIOCBRDGFLUSH", Const, 1},
- {"SIOCBRDGFRL", Const, 1},
- {"SIOCBRDGGCACHE", Const, 1},
- {"SIOCBRDGGFD", Const, 1},
- {"SIOCBRDGGHT", Const, 1},
- {"SIOCBRDGGIFFLGS", Const, 1},
- {"SIOCBRDGGMA", Const, 1},
- {"SIOCBRDGGPARAM", Const, 1},
- {"SIOCBRDGGPRI", Const, 1},
- {"SIOCBRDGGRL", Const, 1},
- {"SIOCBRDGGSIFS", Const, 1},
- {"SIOCBRDGGTO", Const, 1},
- {"SIOCBRDGIFS", Const, 1},
- {"SIOCBRDGRTS", Const, 1},
- {"SIOCBRDGSADDR", Const, 1},
- {"SIOCBRDGSCACHE", Const, 1},
- {"SIOCBRDGSFD", Const, 1},
- {"SIOCBRDGSHT", Const, 1},
- {"SIOCBRDGSIFCOST", Const, 1},
- {"SIOCBRDGSIFFLGS", Const, 1},
- {"SIOCBRDGSIFPRIO", Const, 1},
- {"SIOCBRDGSMA", Const, 1},
- {"SIOCBRDGSPRI", Const, 1},
- {"SIOCBRDGSPROTO", Const, 1},
- {"SIOCBRDGSTO", Const, 1},
- {"SIOCBRDGSTXHC", Const, 1},
- {"SIOCDARP", Const, 0},
- {"SIOCDELDLCI", Const, 0},
- {"SIOCDELMULTI", Const, 0},
- {"SIOCDELRT", Const, 0},
- {"SIOCDEVPRIVATE", Const, 0},
- {"SIOCDIFADDR", Const, 0},
- {"SIOCDIFGROUP", Const, 0},
- {"SIOCDIFPHYADDR", Const, 0},
- {"SIOCDLIFADDR", Const, 0},
- {"SIOCDRARP", Const, 0},
- {"SIOCGARP", Const, 0},
- {"SIOCGDRVSPEC", Const, 0},
- {"SIOCGETKALIVE", Const, 1},
- {"SIOCGETLABEL", Const, 1},
- {"SIOCGETPFLOW", Const, 1},
- {"SIOCGETPFSYNC", Const, 1},
- {"SIOCGETSGCNT", Const, 0},
- {"SIOCGETVIFCNT", Const, 0},
- {"SIOCGETVLAN", Const, 0},
- {"SIOCGHIWAT", Const, 0},
- {"SIOCGIFADDR", Const, 0},
- {"SIOCGIFADDRPREF", Const, 1},
- {"SIOCGIFALIAS", Const, 1},
- {"SIOCGIFALTMTU", Const, 0},
- {"SIOCGIFASYNCMAP", Const, 0},
- {"SIOCGIFBOND", Const, 0},
- {"SIOCGIFBR", Const, 0},
- {"SIOCGIFBRDADDR", Const, 0},
- {"SIOCGIFCAP", Const, 0},
- {"SIOCGIFCONF", Const, 0},
- {"SIOCGIFCOUNT", Const, 0},
- {"SIOCGIFDATA", Const, 1},
- {"SIOCGIFDESCR", Const, 0},
- {"SIOCGIFDEVMTU", Const, 0},
- {"SIOCGIFDLT", Const, 1},
- {"SIOCGIFDSTADDR", Const, 0},
- {"SIOCGIFENCAP", Const, 0},
- {"SIOCGIFFIB", Const, 1},
- {"SIOCGIFFLAGS", Const, 0},
- {"SIOCGIFGATTR", Const, 1},
- {"SIOCGIFGENERIC", Const, 0},
- {"SIOCGIFGMEMB", Const, 0},
- {"SIOCGIFGROUP", Const, 0},
- {"SIOCGIFHARDMTU", Const, 3},
- {"SIOCGIFHWADDR", Const, 0},
- {"SIOCGIFINDEX", Const, 0},
- {"SIOCGIFKPI", Const, 0},
- {"SIOCGIFMAC", Const, 0},
- {"SIOCGIFMAP", Const, 0},
- {"SIOCGIFMEDIA", Const, 0},
- {"SIOCGIFMEM", Const, 0},
- {"SIOCGIFMETRIC", Const, 0},
- {"SIOCGIFMTU", Const, 0},
- {"SIOCGIFNAME", Const, 0},
- {"SIOCGIFNETMASK", Const, 0},
- {"SIOCGIFPDSTADDR", Const, 0},
- {"SIOCGIFPFLAGS", Const, 0},
- {"SIOCGIFPHYS", Const, 0},
- {"SIOCGIFPRIORITY", Const, 1},
- {"SIOCGIFPSRCADDR", Const, 0},
- {"SIOCGIFRDOMAIN", Const, 1},
- {"SIOCGIFRTLABEL", Const, 1},
- {"SIOCGIFSLAVE", Const, 0},
- {"SIOCGIFSTATUS", Const, 0},
- {"SIOCGIFTIMESLOT", Const, 1},
- {"SIOCGIFTXQLEN", Const, 0},
- {"SIOCGIFVLAN", Const, 0},
- {"SIOCGIFWAKEFLAGS", Const, 0},
- {"SIOCGIFXFLAGS", Const, 1},
- {"SIOCGLIFADDR", Const, 0},
- {"SIOCGLIFPHYADDR", Const, 0},
- {"SIOCGLIFPHYRTABLE", Const, 1},
- {"SIOCGLIFPHYTTL", Const, 3},
- {"SIOCGLINKSTR", Const, 1},
- {"SIOCGLOWAT", Const, 0},
- {"SIOCGPGRP", Const, 0},
- {"SIOCGPRIVATE_0", Const, 0},
- {"SIOCGPRIVATE_1", Const, 0},
- {"SIOCGRARP", Const, 0},
- {"SIOCGSPPPPARAMS", Const, 3},
- {"SIOCGSTAMP", Const, 0},
- {"SIOCGSTAMPNS", Const, 0},
- {"SIOCGVH", Const, 1},
- {"SIOCGVNETID", Const, 3},
- {"SIOCIFCREATE", Const, 0},
- {"SIOCIFCREATE2", Const, 0},
- {"SIOCIFDESTROY", Const, 0},
- {"SIOCIFGCLONERS", Const, 0},
- {"SIOCINITIFADDR", Const, 1},
- {"SIOCPROTOPRIVATE", Const, 0},
- {"SIOCRSLVMULTI", Const, 0},
- {"SIOCRTMSG", Const, 0},
- {"SIOCSARP", Const, 0},
- {"SIOCSDRVSPEC", Const, 0},
- {"SIOCSETKALIVE", Const, 1},
- {"SIOCSETLABEL", Const, 1},
- {"SIOCSETPFLOW", Const, 1},
- {"SIOCSETPFSYNC", Const, 1},
- {"SIOCSETVLAN", Const, 0},
- {"SIOCSHIWAT", Const, 0},
- {"SIOCSIFADDR", Const, 0},
- {"SIOCSIFADDRPREF", Const, 1},
- {"SIOCSIFALTMTU", Const, 0},
- {"SIOCSIFASYNCMAP", Const, 0},
- {"SIOCSIFBOND", Const, 0},
- {"SIOCSIFBR", Const, 0},
- {"SIOCSIFBRDADDR", Const, 0},
- {"SIOCSIFCAP", Const, 0},
- {"SIOCSIFDESCR", Const, 0},
- {"SIOCSIFDSTADDR", Const, 0},
- {"SIOCSIFENCAP", Const, 0},
- {"SIOCSIFFIB", Const, 1},
- {"SIOCSIFFLAGS", Const, 0},
- {"SIOCSIFGATTR", Const, 1},
- {"SIOCSIFGENERIC", Const, 0},
- {"SIOCSIFHWADDR", Const, 0},
- {"SIOCSIFHWBROADCAST", Const, 0},
- {"SIOCSIFKPI", Const, 0},
- {"SIOCSIFLINK", Const, 0},
- {"SIOCSIFLLADDR", Const, 0},
- {"SIOCSIFMAC", Const, 0},
- {"SIOCSIFMAP", Const, 0},
- {"SIOCSIFMEDIA", Const, 0},
- {"SIOCSIFMEM", Const, 0},
- {"SIOCSIFMETRIC", Const, 0},
- {"SIOCSIFMTU", Const, 0},
- {"SIOCSIFNAME", Const, 0},
- {"SIOCSIFNETMASK", Const, 0},
- {"SIOCSIFPFLAGS", Const, 0},
- {"SIOCSIFPHYADDR", Const, 0},
- {"SIOCSIFPHYS", Const, 0},
- {"SIOCSIFPRIORITY", Const, 1},
- {"SIOCSIFRDOMAIN", Const, 1},
- {"SIOCSIFRTLABEL", Const, 1},
- {"SIOCSIFRVNET", Const, 0},
- {"SIOCSIFSLAVE", Const, 0},
- {"SIOCSIFTIMESLOT", Const, 1},
- {"SIOCSIFTXQLEN", Const, 0},
- {"SIOCSIFVLAN", Const, 0},
- {"SIOCSIFVNET", Const, 0},
- {"SIOCSIFXFLAGS", Const, 1},
- {"SIOCSLIFPHYADDR", Const, 0},
- {"SIOCSLIFPHYRTABLE", Const, 1},
- {"SIOCSLIFPHYTTL", Const, 3},
- {"SIOCSLINKSTR", Const, 1},
- {"SIOCSLOWAT", Const, 0},
- {"SIOCSPGRP", Const, 0},
- {"SIOCSRARP", Const, 0},
- {"SIOCSSPPPPARAMS", Const, 3},
- {"SIOCSVH", Const, 1},
- {"SIOCSVNETID", Const, 3},
- {"SIOCZIFDATA", Const, 1},
- {"SIO_GET_EXTENSION_FUNCTION_POINTER", Const, 1},
- {"SIO_GET_INTERFACE_LIST", Const, 0},
- {"SIO_KEEPALIVE_VALS", Const, 3},
- {"SIO_UDP_CONNRESET", Const, 4},
- {"SOCK_CLOEXEC", Const, 0},
- {"SOCK_DCCP", Const, 0},
- {"SOCK_DGRAM", Const, 0},
- {"SOCK_FLAGS_MASK", Const, 1},
- {"SOCK_MAXADDRLEN", Const, 0},
- {"SOCK_NONBLOCK", Const, 0},
- {"SOCK_NOSIGPIPE", Const, 1},
- {"SOCK_PACKET", Const, 0},
- {"SOCK_RAW", Const, 0},
- {"SOCK_RDM", Const, 0},
- {"SOCK_SEQPACKET", Const, 0},
- {"SOCK_STREAM", Const, 0},
- {"SOL_AAL", Const, 0},
- {"SOL_ATM", Const, 0},
- {"SOL_DECNET", Const, 0},
- {"SOL_ICMPV6", Const, 0},
- {"SOL_IP", Const, 0},
- {"SOL_IPV6", Const, 0},
- {"SOL_IRDA", Const, 0},
- {"SOL_PACKET", Const, 0},
- {"SOL_RAW", Const, 0},
- {"SOL_SOCKET", Const, 0},
- {"SOL_TCP", Const, 0},
- {"SOL_X25", Const, 0},
- {"SOMAXCONN", Const, 0},
- {"SO_ACCEPTCONN", Const, 0},
- {"SO_ACCEPTFILTER", Const, 0},
- {"SO_ATTACH_FILTER", Const, 0},
- {"SO_BINDANY", Const, 1},
- {"SO_BINDTODEVICE", Const, 0},
- {"SO_BINTIME", Const, 0},
- {"SO_BROADCAST", Const, 0},
- {"SO_BSDCOMPAT", Const, 0},
- {"SO_DEBUG", Const, 0},
- {"SO_DETACH_FILTER", Const, 0},
- {"SO_DOMAIN", Const, 0},
- {"SO_DONTROUTE", Const, 0},
- {"SO_DONTTRUNC", Const, 0},
- {"SO_ERROR", Const, 0},
- {"SO_KEEPALIVE", Const, 0},
- {"SO_LABEL", Const, 0},
- {"SO_LINGER", Const, 0},
- {"SO_LINGER_SEC", Const, 0},
- {"SO_LISTENINCQLEN", Const, 0},
- {"SO_LISTENQLEN", Const, 0},
- {"SO_LISTENQLIMIT", Const, 0},
- {"SO_MARK", Const, 0},
- {"SO_NETPROC", Const, 1},
- {"SO_NKE", Const, 0},
- {"SO_NOADDRERR", Const, 0},
- {"SO_NOHEADER", Const, 1},
- {"SO_NOSIGPIPE", Const, 0},
- {"SO_NOTIFYCONFLICT", Const, 0},
- {"SO_NO_CHECK", Const, 0},
- {"SO_NO_DDP", Const, 0},
- {"SO_NO_OFFLOAD", Const, 0},
- {"SO_NP_EXTENSIONS", Const, 0},
- {"SO_NREAD", Const, 0},
- {"SO_NUMRCVPKT", Const, 16},
- {"SO_NWRITE", Const, 0},
- {"SO_OOBINLINE", Const, 0},
- {"SO_OVERFLOWED", Const, 1},
- {"SO_PASSCRED", Const, 0},
- {"SO_PASSSEC", Const, 0},
- {"SO_PEERCRED", Const, 0},
- {"SO_PEERLABEL", Const, 0},
- {"SO_PEERNAME", Const, 0},
- {"SO_PEERSEC", Const, 0},
- {"SO_PRIORITY", Const, 0},
- {"SO_PROTOCOL", Const, 0},
- {"SO_PROTOTYPE", Const, 1},
- {"SO_RANDOMPORT", Const, 0},
- {"SO_RCVBUF", Const, 0},
- {"SO_RCVBUFFORCE", Const, 0},
- {"SO_RCVLOWAT", Const, 0},
- {"SO_RCVTIMEO", Const, 0},
- {"SO_RESTRICTIONS", Const, 0},
- {"SO_RESTRICT_DENYIN", Const, 0},
- {"SO_RESTRICT_DENYOUT", Const, 0},
- {"SO_RESTRICT_DENYSET", Const, 0},
- {"SO_REUSEADDR", Const, 0},
- {"SO_REUSEPORT", Const, 0},
- {"SO_REUSESHAREUID", Const, 0},
- {"SO_RTABLE", Const, 1},
- {"SO_RXQ_OVFL", Const, 0},
- {"SO_SECURITY_AUTHENTICATION", Const, 0},
- {"SO_SECURITY_ENCRYPTION_NETWORK", Const, 0},
- {"SO_SECURITY_ENCRYPTION_TRANSPORT", Const, 0},
- {"SO_SETFIB", Const, 0},
- {"SO_SNDBUF", Const, 0},
- {"SO_SNDBUFFORCE", Const, 0},
- {"SO_SNDLOWAT", Const, 0},
- {"SO_SNDTIMEO", Const, 0},
- {"SO_SPLICE", Const, 1},
- {"SO_TIMESTAMP", Const, 0},
- {"SO_TIMESTAMPING", Const, 0},
- {"SO_TIMESTAMPNS", Const, 0},
- {"SO_TIMESTAMP_MONOTONIC", Const, 0},
- {"SO_TYPE", Const, 0},
- {"SO_UPCALLCLOSEWAIT", Const, 0},
- {"SO_UPDATE_ACCEPT_CONTEXT", Const, 0},
- {"SO_UPDATE_CONNECT_CONTEXT", Const, 1},
- {"SO_USELOOPBACK", Const, 0},
- {"SO_USER_COOKIE", Const, 1},
- {"SO_VENDOR", Const, 3},
- {"SO_WANTMORE", Const, 0},
- {"SO_WANTOOBFLAG", Const, 0},
- {"SSLExtraCertChainPolicyPara", Type, 0},
- {"SSLExtraCertChainPolicyPara.AuthType", Field, 0},
- {"SSLExtraCertChainPolicyPara.Checks", Field, 0},
- {"SSLExtraCertChainPolicyPara.ServerName", Field, 0},
- {"SSLExtraCertChainPolicyPara.Size", Field, 0},
- {"STANDARD_RIGHTS_ALL", Const, 0},
- {"STANDARD_RIGHTS_EXECUTE", Const, 0},
- {"STANDARD_RIGHTS_READ", Const, 0},
- {"STANDARD_RIGHTS_REQUIRED", Const, 0},
- {"STANDARD_RIGHTS_WRITE", Const, 0},
- {"STARTF_USESHOWWINDOW", Const, 0},
- {"STARTF_USESTDHANDLES", Const, 0},
- {"STD_ERROR_HANDLE", Const, 0},
- {"STD_INPUT_HANDLE", Const, 0},
- {"STD_OUTPUT_HANDLE", Const, 0},
- {"SUBLANG_ENGLISH_US", Const, 0},
- {"SW_FORCEMINIMIZE", Const, 0},
- {"SW_HIDE", Const, 0},
- {"SW_MAXIMIZE", Const, 0},
- {"SW_MINIMIZE", Const, 0},
- {"SW_NORMAL", Const, 0},
- {"SW_RESTORE", Const, 0},
- {"SW_SHOW", Const, 0},
- {"SW_SHOWDEFAULT", Const, 0},
- {"SW_SHOWMAXIMIZED", Const, 0},
- {"SW_SHOWMINIMIZED", Const, 0},
- {"SW_SHOWMINNOACTIVE", Const, 0},
- {"SW_SHOWNA", Const, 0},
- {"SW_SHOWNOACTIVATE", Const, 0},
- {"SW_SHOWNORMAL", Const, 0},
- {"SYMBOLIC_LINK_FLAG_DIRECTORY", Const, 4},
- {"SYNCHRONIZE", Const, 0},
- {"SYSCTL_VERSION", Const, 1},
- {"SYSCTL_VERS_0", Const, 1},
- {"SYSCTL_VERS_1", Const, 1},
- {"SYSCTL_VERS_MASK", Const, 1},
- {"SYS_ABORT2", Const, 0},
- {"SYS_ACCEPT", Const, 0},
- {"SYS_ACCEPT4", Const, 0},
- {"SYS_ACCEPT_NOCANCEL", Const, 0},
- {"SYS_ACCESS", Const, 0},
- {"SYS_ACCESS_EXTENDED", Const, 0},
- {"SYS_ACCT", Const, 0},
- {"SYS_ADD_KEY", Const, 0},
- {"SYS_ADD_PROFIL", Const, 0},
- {"SYS_ADJFREQ", Const, 1},
- {"SYS_ADJTIME", Const, 0},
- {"SYS_ADJTIMEX", Const, 0},
- {"SYS_AFS_SYSCALL", Const, 0},
- {"SYS_AIO_CANCEL", Const, 0},
- {"SYS_AIO_ERROR", Const, 0},
- {"SYS_AIO_FSYNC", Const, 0},
- {"SYS_AIO_MLOCK", Const, 14},
- {"SYS_AIO_READ", Const, 0},
- {"SYS_AIO_RETURN", Const, 0},
- {"SYS_AIO_SUSPEND", Const, 0},
- {"SYS_AIO_SUSPEND_NOCANCEL", Const, 0},
- {"SYS_AIO_WAITCOMPLETE", Const, 14},
- {"SYS_AIO_WRITE", Const, 0},
- {"SYS_ALARM", Const, 0},
- {"SYS_ARCH_PRCTL", Const, 0},
- {"SYS_ARM_FADVISE64_64", Const, 0},
- {"SYS_ARM_SYNC_FILE_RANGE", Const, 0},
- {"SYS_ATGETMSG", Const, 0},
- {"SYS_ATPGETREQ", Const, 0},
- {"SYS_ATPGETRSP", Const, 0},
- {"SYS_ATPSNDREQ", Const, 0},
- {"SYS_ATPSNDRSP", Const, 0},
- {"SYS_ATPUTMSG", Const, 0},
- {"SYS_ATSOCKET", Const, 0},
- {"SYS_AUDIT", Const, 0},
- {"SYS_AUDITCTL", Const, 0},
- {"SYS_AUDITON", Const, 0},
- {"SYS_AUDIT_SESSION_JOIN", Const, 0},
- {"SYS_AUDIT_SESSION_PORT", Const, 0},
- {"SYS_AUDIT_SESSION_SELF", Const, 0},
- {"SYS_BDFLUSH", Const, 0},
- {"SYS_BIND", Const, 0},
- {"SYS_BINDAT", Const, 3},
- {"SYS_BREAK", Const, 0},
- {"SYS_BRK", Const, 0},
- {"SYS_BSDTHREAD_CREATE", Const, 0},
- {"SYS_BSDTHREAD_REGISTER", Const, 0},
- {"SYS_BSDTHREAD_TERMINATE", Const, 0},
- {"SYS_CAPGET", Const, 0},
- {"SYS_CAPSET", Const, 0},
- {"SYS_CAP_ENTER", Const, 0},
- {"SYS_CAP_FCNTLS_GET", Const, 1},
- {"SYS_CAP_FCNTLS_LIMIT", Const, 1},
- {"SYS_CAP_GETMODE", Const, 0},
- {"SYS_CAP_GETRIGHTS", Const, 0},
- {"SYS_CAP_IOCTLS_GET", Const, 1},
- {"SYS_CAP_IOCTLS_LIMIT", Const, 1},
- {"SYS_CAP_NEW", Const, 0},
- {"SYS_CAP_RIGHTS_GET", Const, 1},
- {"SYS_CAP_RIGHTS_LIMIT", Const, 1},
- {"SYS_CHDIR", Const, 0},
- {"SYS_CHFLAGS", Const, 0},
- {"SYS_CHFLAGSAT", Const, 3},
- {"SYS_CHMOD", Const, 0},
- {"SYS_CHMOD_EXTENDED", Const, 0},
- {"SYS_CHOWN", Const, 0},
- {"SYS_CHOWN32", Const, 0},
- {"SYS_CHROOT", Const, 0},
- {"SYS_CHUD", Const, 0},
- {"SYS_CLOCK_ADJTIME", Const, 0},
- {"SYS_CLOCK_GETCPUCLOCKID2", Const, 1},
- {"SYS_CLOCK_GETRES", Const, 0},
- {"SYS_CLOCK_GETTIME", Const, 0},
- {"SYS_CLOCK_NANOSLEEP", Const, 0},
- {"SYS_CLOCK_SETTIME", Const, 0},
- {"SYS_CLONE", Const, 0},
- {"SYS_CLOSE", Const, 0},
- {"SYS_CLOSEFROM", Const, 0},
- {"SYS_CLOSE_NOCANCEL", Const, 0},
- {"SYS_CONNECT", Const, 0},
- {"SYS_CONNECTAT", Const, 3},
- {"SYS_CONNECT_NOCANCEL", Const, 0},
- {"SYS_COPYFILE", Const, 0},
- {"SYS_CPUSET", Const, 0},
- {"SYS_CPUSET_GETAFFINITY", Const, 0},
- {"SYS_CPUSET_GETID", Const, 0},
- {"SYS_CPUSET_SETAFFINITY", Const, 0},
- {"SYS_CPUSET_SETID", Const, 0},
- {"SYS_CREAT", Const, 0},
- {"SYS_CREATE_MODULE", Const, 0},
- {"SYS_CSOPS", Const, 0},
- {"SYS_CSOPS_AUDITTOKEN", Const, 16},
- {"SYS_DELETE", Const, 0},
- {"SYS_DELETE_MODULE", Const, 0},
- {"SYS_DUP", Const, 0},
- {"SYS_DUP2", Const, 0},
- {"SYS_DUP3", Const, 0},
- {"SYS_EACCESS", Const, 0},
- {"SYS_EPOLL_CREATE", Const, 0},
- {"SYS_EPOLL_CREATE1", Const, 0},
- {"SYS_EPOLL_CTL", Const, 0},
- {"SYS_EPOLL_CTL_OLD", Const, 0},
- {"SYS_EPOLL_PWAIT", Const, 0},
- {"SYS_EPOLL_WAIT", Const, 0},
- {"SYS_EPOLL_WAIT_OLD", Const, 0},
- {"SYS_EVENTFD", Const, 0},
- {"SYS_EVENTFD2", Const, 0},
- {"SYS_EXCHANGEDATA", Const, 0},
- {"SYS_EXECVE", Const, 0},
- {"SYS_EXIT", Const, 0},
- {"SYS_EXIT_GROUP", Const, 0},
- {"SYS_EXTATTRCTL", Const, 0},
- {"SYS_EXTATTR_DELETE_FD", Const, 0},
- {"SYS_EXTATTR_DELETE_FILE", Const, 0},
- {"SYS_EXTATTR_DELETE_LINK", Const, 0},
- {"SYS_EXTATTR_GET_FD", Const, 0},
- {"SYS_EXTATTR_GET_FILE", Const, 0},
- {"SYS_EXTATTR_GET_LINK", Const, 0},
- {"SYS_EXTATTR_LIST_FD", Const, 0},
- {"SYS_EXTATTR_LIST_FILE", Const, 0},
- {"SYS_EXTATTR_LIST_LINK", Const, 0},
- {"SYS_EXTATTR_SET_FD", Const, 0},
- {"SYS_EXTATTR_SET_FILE", Const, 0},
- {"SYS_EXTATTR_SET_LINK", Const, 0},
- {"SYS_FACCESSAT", Const, 0},
- {"SYS_FADVISE64", Const, 0},
- {"SYS_FADVISE64_64", Const, 0},
- {"SYS_FALLOCATE", Const, 0},
- {"SYS_FANOTIFY_INIT", Const, 0},
- {"SYS_FANOTIFY_MARK", Const, 0},
- {"SYS_FCHDIR", Const, 0},
- {"SYS_FCHFLAGS", Const, 0},
- {"SYS_FCHMOD", Const, 0},
- {"SYS_FCHMODAT", Const, 0},
- {"SYS_FCHMOD_EXTENDED", Const, 0},
- {"SYS_FCHOWN", Const, 0},
- {"SYS_FCHOWN32", Const, 0},
- {"SYS_FCHOWNAT", Const, 0},
- {"SYS_FCHROOT", Const, 1},
- {"SYS_FCNTL", Const, 0},
- {"SYS_FCNTL64", Const, 0},
- {"SYS_FCNTL_NOCANCEL", Const, 0},
- {"SYS_FDATASYNC", Const, 0},
- {"SYS_FEXECVE", Const, 0},
- {"SYS_FFCLOCK_GETCOUNTER", Const, 0},
- {"SYS_FFCLOCK_GETESTIMATE", Const, 0},
- {"SYS_FFCLOCK_SETESTIMATE", Const, 0},
- {"SYS_FFSCTL", Const, 0},
- {"SYS_FGETATTRLIST", Const, 0},
- {"SYS_FGETXATTR", Const, 0},
- {"SYS_FHOPEN", Const, 0},
- {"SYS_FHSTAT", Const, 0},
- {"SYS_FHSTATFS", Const, 0},
- {"SYS_FILEPORT_MAKEFD", Const, 0},
- {"SYS_FILEPORT_MAKEPORT", Const, 0},
- {"SYS_FKTRACE", Const, 1},
- {"SYS_FLISTXATTR", Const, 0},
- {"SYS_FLOCK", Const, 0},
- {"SYS_FORK", Const, 0},
- {"SYS_FPATHCONF", Const, 0},
- {"SYS_FREEBSD6_FTRUNCATE", Const, 0},
- {"SYS_FREEBSD6_LSEEK", Const, 0},
- {"SYS_FREEBSD6_MMAP", Const, 0},
- {"SYS_FREEBSD6_PREAD", Const, 0},
- {"SYS_FREEBSD6_PWRITE", Const, 0},
- {"SYS_FREEBSD6_TRUNCATE", Const, 0},
- {"SYS_FREMOVEXATTR", Const, 0},
- {"SYS_FSCTL", Const, 0},
- {"SYS_FSETATTRLIST", Const, 0},
- {"SYS_FSETXATTR", Const, 0},
- {"SYS_FSGETPATH", Const, 0},
- {"SYS_FSTAT", Const, 0},
- {"SYS_FSTAT64", Const, 0},
- {"SYS_FSTAT64_EXTENDED", Const, 0},
- {"SYS_FSTATAT", Const, 0},
- {"SYS_FSTATAT64", Const, 0},
- {"SYS_FSTATFS", Const, 0},
- {"SYS_FSTATFS64", Const, 0},
- {"SYS_FSTATV", Const, 0},
- {"SYS_FSTATVFS1", Const, 1},
- {"SYS_FSTAT_EXTENDED", Const, 0},
- {"SYS_FSYNC", Const, 0},
- {"SYS_FSYNC_NOCANCEL", Const, 0},
- {"SYS_FSYNC_RANGE", Const, 1},
- {"SYS_FTIME", Const, 0},
- {"SYS_FTRUNCATE", Const, 0},
- {"SYS_FTRUNCATE64", Const, 0},
- {"SYS_FUTEX", Const, 0},
- {"SYS_FUTIMENS", Const, 1},
- {"SYS_FUTIMES", Const, 0},
- {"SYS_FUTIMESAT", Const, 0},
- {"SYS_GETATTRLIST", Const, 0},
- {"SYS_GETAUDIT", Const, 0},
- {"SYS_GETAUDIT_ADDR", Const, 0},
- {"SYS_GETAUID", Const, 0},
- {"SYS_GETCONTEXT", Const, 0},
- {"SYS_GETCPU", Const, 0},
- {"SYS_GETCWD", Const, 0},
- {"SYS_GETDENTS", Const, 0},
- {"SYS_GETDENTS64", Const, 0},
- {"SYS_GETDIRENTRIES", Const, 0},
- {"SYS_GETDIRENTRIES64", Const, 0},
- {"SYS_GETDIRENTRIESATTR", Const, 0},
- {"SYS_GETDTABLECOUNT", Const, 1},
- {"SYS_GETDTABLESIZE", Const, 0},
- {"SYS_GETEGID", Const, 0},
- {"SYS_GETEGID32", Const, 0},
- {"SYS_GETEUID", Const, 0},
- {"SYS_GETEUID32", Const, 0},
- {"SYS_GETFH", Const, 0},
- {"SYS_GETFSSTAT", Const, 0},
- {"SYS_GETFSSTAT64", Const, 0},
- {"SYS_GETGID", Const, 0},
- {"SYS_GETGID32", Const, 0},
- {"SYS_GETGROUPS", Const, 0},
- {"SYS_GETGROUPS32", Const, 0},
- {"SYS_GETHOSTUUID", Const, 0},
- {"SYS_GETITIMER", Const, 0},
- {"SYS_GETLCID", Const, 0},
- {"SYS_GETLOGIN", Const, 0},
- {"SYS_GETLOGINCLASS", Const, 0},
- {"SYS_GETPEERNAME", Const, 0},
- {"SYS_GETPGID", Const, 0},
- {"SYS_GETPGRP", Const, 0},
- {"SYS_GETPID", Const, 0},
- {"SYS_GETPMSG", Const, 0},
- {"SYS_GETPPID", Const, 0},
- {"SYS_GETPRIORITY", Const, 0},
- {"SYS_GETRESGID", Const, 0},
- {"SYS_GETRESGID32", Const, 0},
- {"SYS_GETRESUID", Const, 0},
- {"SYS_GETRESUID32", Const, 0},
- {"SYS_GETRLIMIT", Const, 0},
- {"SYS_GETRTABLE", Const, 1},
- {"SYS_GETRUSAGE", Const, 0},
- {"SYS_GETSGROUPS", Const, 0},
- {"SYS_GETSID", Const, 0},
- {"SYS_GETSOCKNAME", Const, 0},
- {"SYS_GETSOCKOPT", Const, 0},
- {"SYS_GETTHRID", Const, 1},
- {"SYS_GETTID", Const, 0},
- {"SYS_GETTIMEOFDAY", Const, 0},
- {"SYS_GETUID", Const, 0},
- {"SYS_GETUID32", Const, 0},
- {"SYS_GETVFSSTAT", Const, 1},
- {"SYS_GETWGROUPS", Const, 0},
- {"SYS_GETXATTR", Const, 0},
- {"SYS_GET_KERNEL_SYMS", Const, 0},
- {"SYS_GET_MEMPOLICY", Const, 0},
- {"SYS_GET_ROBUST_LIST", Const, 0},
- {"SYS_GET_THREAD_AREA", Const, 0},
- {"SYS_GSSD_SYSCALL", Const, 14},
- {"SYS_GTTY", Const, 0},
- {"SYS_IDENTITYSVC", Const, 0},
- {"SYS_IDLE", Const, 0},
- {"SYS_INITGROUPS", Const, 0},
- {"SYS_INIT_MODULE", Const, 0},
- {"SYS_INOTIFY_ADD_WATCH", Const, 0},
- {"SYS_INOTIFY_INIT", Const, 0},
- {"SYS_INOTIFY_INIT1", Const, 0},
- {"SYS_INOTIFY_RM_WATCH", Const, 0},
- {"SYS_IOCTL", Const, 0},
- {"SYS_IOPERM", Const, 0},
- {"SYS_IOPL", Const, 0},
- {"SYS_IOPOLICYSYS", Const, 0},
- {"SYS_IOPRIO_GET", Const, 0},
- {"SYS_IOPRIO_SET", Const, 0},
- {"SYS_IO_CANCEL", Const, 0},
- {"SYS_IO_DESTROY", Const, 0},
- {"SYS_IO_GETEVENTS", Const, 0},
- {"SYS_IO_SETUP", Const, 0},
- {"SYS_IO_SUBMIT", Const, 0},
- {"SYS_IPC", Const, 0},
- {"SYS_ISSETUGID", Const, 0},
- {"SYS_JAIL", Const, 0},
- {"SYS_JAIL_ATTACH", Const, 0},
- {"SYS_JAIL_GET", Const, 0},
- {"SYS_JAIL_REMOVE", Const, 0},
- {"SYS_JAIL_SET", Const, 0},
- {"SYS_KAS_INFO", Const, 16},
- {"SYS_KDEBUG_TRACE", Const, 0},
- {"SYS_KENV", Const, 0},
- {"SYS_KEVENT", Const, 0},
- {"SYS_KEVENT64", Const, 0},
- {"SYS_KEXEC_LOAD", Const, 0},
- {"SYS_KEYCTL", Const, 0},
- {"SYS_KILL", Const, 0},
- {"SYS_KLDFIND", Const, 0},
- {"SYS_KLDFIRSTMOD", Const, 0},
- {"SYS_KLDLOAD", Const, 0},
- {"SYS_KLDNEXT", Const, 0},
- {"SYS_KLDSTAT", Const, 0},
- {"SYS_KLDSYM", Const, 0},
- {"SYS_KLDUNLOAD", Const, 0},
- {"SYS_KLDUNLOADF", Const, 0},
- {"SYS_KMQ_NOTIFY", Const, 14},
- {"SYS_KMQ_OPEN", Const, 14},
- {"SYS_KMQ_SETATTR", Const, 14},
- {"SYS_KMQ_TIMEDRECEIVE", Const, 14},
- {"SYS_KMQ_TIMEDSEND", Const, 14},
- {"SYS_KMQ_UNLINK", Const, 14},
- {"SYS_KQUEUE", Const, 0},
- {"SYS_KQUEUE1", Const, 1},
- {"SYS_KSEM_CLOSE", Const, 14},
- {"SYS_KSEM_DESTROY", Const, 14},
- {"SYS_KSEM_GETVALUE", Const, 14},
- {"SYS_KSEM_INIT", Const, 14},
- {"SYS_KSEM_OPEN", Const, 14},
- {"SYS_KSEM_POST", Const, 14},
- {"SYS_KSEM_TIMEDWAIT", Const, 14},
- {"SYS_KSEM_TRYWAIT", Const, 14},
- {"SYS_KSEM_UNLINK", Const, 14},
- {"SYS_KSEM_WAIT", Const, 14},
- {"SYS_KTIMER_CREATE", Const, 0},
- {"SYS_KTIMER_DELETE", Const, 0},
- {"SYS_KTIMER_GETOVERRUN", Const, 0},
- {"SYS_KTIMER_GETTIME", Const, 0},
- {"SYS_KTIMER_SETTIME", Const, 0},
- {"SYS_KTRACE", Const, 0},
- {"SYS_LCHFLAGS", Const, 0},
- {"SYS_LCHMOD", Const, 0},
- {"SYS_LCHOWN", Const, 0},
- {"SYS_LCHOWN32", Const, 0},
- {"SYS_LEDGER", Const, 16},
- {"SYS_LGETFH", Const, 0},
- {"SYS_LGETXATTR", Const, 0},
- {"SYS_LINK", Const, 0},
- {"SYS_LINKAT", Const, 0},
- {"SYS_LIO_LISTIO", Const, 0},
- {"SYS_LISTEN", Const, 0},
- {"SYS_LISTXATTR", Const, 0},
- {"SYS_LLISTXATTR", Const, 0},
- {"SYS_LOCK", Const, 0},
- {"SYS_LOOKUP_DCOOKIE", Const, 0},
- {"SYS_LPATHCONF", Const, 0},
- {"SYS_LREMOVEXATTR", Const, 0},
- {"SYS_LSEEK", Const, 0},
- {"SYS_LSETXATTR", Const, 0},
- {"SYS_LSTAT", Const, 0},
- {"SYS_LSTAT64", Const, 0},
- {"SYS_LSTAT64_EXTENDED", Const, 0},
- {"SYS_LSTATV", Const, 0},
- {"SYS_LSTAT_EXTENDED", Const, 0},
- {"SYS_LUTIMES", Const, 0},
- {"SYS_MAC_SYSCALL", Const, 0},
- {"SYS_MADVISE", Const, 0},
- {"SYS_MADVISE1", Const, 0},
- {"SYS_MAXSYSCALL", Const, 0},
- {"SYS_MBIND", Const, 0},
- {"SYS_MIGRATE_PAGES", Const, 0},
- {"SYS_MINCORE", Const, 0},
- {"SYS_MINHERIT", Const, 0},
- {"SYS_MKCOMPLEX", Const, 0},
- {"SYS_MKDIR", Const, 0},
- {"SYS_MKDIRAT", Const, 0},
- {"SYS_MKDIR_EXTENDED", Const, 0},
- {"SYS_MKFIFO", Const, 0},
- {"SYS_MKFIFOAT", Const, 0},
- {"SYS_MKFIFO_EXTENDED", Const, 0},
- {"SYS_MKNOD", Const, 0},
- {"SYS_MKNODAT", Const, 0},
- {"SYS_MLOCK", Const, 0},
- {"SYS_MLOCKALL", Const, 0},
- {"SYS_MMAP", Const, 0},
- {"SYS_MMAP2", Const, 0},
- {"SYS_MODCTL", Const, 1},
- {"SYS_MODFIND", Const, 0},
- {"SYS_MODFNEXT", Const, 0},
- {"SYS_MODIFY_LDT", Const, 0},
- {"SYS_MODNEXT", Const, 0},
- {"SYS_MODSTAT", Const, 0},
- {"SYS_MODWATCH", Const, 0},
- {"SYS_MOUNT", Const, 0},
- {"SYS_MOVE_PAGES", Const, 0},
- {"SYS_MPROTECT", Const, 0},
- {"SYS_MPX", Const, 0},
- {"SYS_MQUERY", Const, 1},
- {"SYS_MQ_GETSETATTR", Const, 0},
- {"SYS_MQ_NOTIFY", Const, 0},
- {"SYS_MQ_OPEN", Const, 0},
- {"SYS_MQ_TIMEDRECEIVE", Const, 0},
- {"SYS_MQ_TIMEDSEND", Const, 0},
- {"SYS_MQ_UNLINK", Const, 0},
- {"SYS_MREMAP", Const, 0},
- {"SYS_MSGCTL", Const, 0},
- {"SYS_MSGGET", Const, 0},
- {"SYS_MSGRCV", Const, 0},
- {"SYS_MSGRCV_NOCANCEL", Const, 0},
- {"SYS_MSGSND", Const, 0},
- {"SYS_MSGSND_NOCANCEL", Const, 0},
- {"SYS_MSGSYS", Const, 0},
- {"SYS_MSYNC", Const, 0},
- {"SYS_MSYNC_NOCANCEL", Const, 0},
- {"SYS_MUNLOCK", Const, 0},
- {"SYS_MUNLOCKALL", Const, 0},
- {"SYS_MUNMAP", Const, 0},
- {"SYS_NAME_TO_HANDLE_AT", Const, 0},
- {"SYS_NANOSLEEP", Const, 0},
- {"SYS_NEWFSTATAT", Const, 0},
- {"SYS_NFSCLNT", Const, 0},
- {"SYS_NFSSERVCTL", Const, 0},
- {"SYS_NFSSVC", Const, 0},
- {"SYS_NFSTAT", Const, 0},
- {"SYS_NICE", Const, 0},
- {"SYS_NLM_SYSCALL", Const, 14},
- {"SYS_NLSTAT", Const, 0},
- {"SYS_NMOUNT", Const, 0},
- {"SYS_NSTAT", Const, 0},
- {"SYS_NTP_ADJTIME", Const, 0},
- {"SYS_NTP_GETTIME", Const, 0},
- {"SYS_NUMA_GETAFFINITY", Const, 14},
- {"SYS_NUMA_SETAFFINITY", Const, 14},
- {"SYS_OABI_SYSCALL_BASE", Const, 0},
- {"SYS_OBREAK", Const, 0},
- {"SYS_OLDFSTAT", Const, 0},
- {"SYS_OLDLSTAT", Const, 0},
- {"SYS_OLDOLDUNAME", Const, 0},
- {"SYS_OLDSTAT", Const, 0},
- {"SYS_OLDUNAME", Const, 0},
- {"SYS_OPEN", Const, 0},
- {"SYS_OPENAT", Const, 0},
- {"SYS_OPENBSD_POLL", Const, 0},
- {"SYS_OPEN_BY_HANDLE_AT", Const, 0},
- {"SYS_OPEN_DPROTECTED_NP", Const, 16},
- {"SYS_OPEN_EXTENDED", Const, 0},
- {"SYS_OPEN_NOCANCEL", Const, 0},
- {"SYS_OVADVISE", Const, 0},
- {"SYS_PACCEPT", Const, 1},
- {"SYS_PATHCONF", Const, 0},
- {"SYS_PAUSE", Const, 0},
- {"SYS_PCICONFIG_IOBASE", Const, 0},
- {"SYS_PCICONFIG_READ", Const, 0},
- {"SYS_PCICONFIG_WRITE", Const, 0},
- {"SYS_PDFORK", Const, 0},
- {"SYS_PDGETPID", Const, 0},
- {"SYS_PDKILL", Const, 0},
- {"SYS_PERF_EVENT_OPEN", Const, 0},
- {"SYS_PERSONALITY", Const, 0},
- {"SYS_PID_HIBERNATE", Const, 0},
- {"SYS_PID_RESUME", Const, 0},
- {"SYS_PID_SHUTDOWN_SOCKETS", Const, 0},
- {"SYS_PID_SUSPEND", Const, 0},
- {"SYS_PIPE", Const, 0},
- {"SYS_PIPE2", Const, 0},
- {"SYS_PIVOT_ROOT", Const, 0},
- {"SYS_PMC_CONTROL", Const, 1},
- {"SYS_PMC_GET_INFO", Const, 1},
- {"SYS_POLL", Const, 0},
- {"SYS_POLLTS", Const, 1},
- {"SYS_POLL_NOCANCEL", Const, 0},
- {"SYS_POSIX_FADVISE", Const, 0},
- {"SYS_POSIX_FALLOCATE", Const, 0},
- {"SYS_POSIX_OPENPT", Const, 0},
- {"SYS_POSIX_SPAWN", Const, 0},
- {"SYS_PPOLL", Const, 0},
- {"SYS_PRCTL", Const, 0},
- {"SYS_PREAD", Const, 0},
- {"SYS_PREAD64", Const, 0},
- {"SYS_PREADV", Const, 0},
- {"SYS_PREAD_NOCANCEL", Const, 0},
- {"SYS_PRLIMIT64", Const, 0},
- {"SYS_PROCCTL", Const, 3},
- {"SYS_PROCESS_POLICY", Const, 0},
- {"SYS_PROCESS_VM_READV", Const, 0},
- {"SYS_PROCESS_VM_WRITEV", Const, 0},
- {"SYS_PROC_INFO", Const, 0},
- {"SYS_PROF", Const, 0},
- {"SYS_PROFIL", Const, 0},
- {"SYS_PSELECT", Const, 0},
- {"SYS_PSELECT6", Const, 0},
- {"SYS_PSET_ASSIGN", Const, 1},
- {"SYS_PSET_CREATE", Const, 1},
- {"SYS_PSET_DESTROY", Const, 1},
- {"SYS_PSYNCH_CVBROAD", Const, 0},
- {"SYS_PSYNCH_CVCLRPREPOST", Const, 0},
- {"SYS_PSYNCH_CVSIGNAL", Const, 0},
- {"SYS_PSYNCH_CVWAIT", Const, 0},
- {"SYS_PSYNCH_MUTEXDROP", Const, 0},
- {"SYS_PSYNCH_MUTEXWAIT", Const, 0},
- {"SYS_PSYNCH_RW_DOWNGRADE", Const, 0},
- {"SYS_PSYNCH_RW_LONGRDLOCK", Const, 0},
- {"SYS_PSYNCH_RW_RDLOCK", Const, 0},
- {"SYS_PSYNCH_RW_UNLOCK", Const, 0},
- {"SYS_PSYNCH_RW_UNLOCK2", Const, 0},
- {"SYS_PSYNCH_RW_UPGRADE", Const, 0},
- {"SYS_PSYNCH_RW_WRLOCK", Const, 0},
- {"SYS_PSYNCH_RW_YIELDWRLOCK", Const, 0},
- {"SYS_PTRACE", Const, 0},
- {"SYS_PUTPMSG", Const, 0},
- {"SYS_PWRITE", Const, 0},
- {"SYS_PWRITE64", Const, 0},
- {"SYS_PWRITEV", Const, 0},
- {"SYS_PWRITE_NOCANCEL", Const, 0},
- {"SYS_QUERY_MODULE", Const, 0},
- {"SYS_QUOTACTL", Const, 0},
- {"SYS_RASCTL", Const, 1},
- {"SYS_RCTL_ADD_RULE", Const, 0},
- {"SYS_RCTL_GET_LIMITS", Const, 0},
- {"SYS_RCTL_GET_RACCT", Const, 0},
- {"SYS_RCTL_GET_RULES", Const, 0},
- {"SYS_RCTL_REMOVE_RULE", Const, 0},
- {"SYS_READ", Const, 0},
- {"SYS_READAHEAD", Const, 0},
- {"SYS_READDIR", Const, 0},
- {"SYS_READLINK", Const, 0},
- {"SYS_READLINKAT", Const, 0},
- {"SYS_READV", Const, 0},
- {"SYS_READV_NOCANCEL", Const, 0},
- {"SYS_READ_NOCANCEL", Const, 0},
- {"SYS_REBOOT", Const, 0},
- {"SYS_RECV", Const, 0},
- {"SYS_RECVFROM", Const, 0},
- {"SYS_RECVFROM_NOCANCEL", Const, 0},
- {"SYS_RECVMMSG", Const, 0},
- {"SYS_RECVMSG", Const, 0},
- {"SYS_RECVMSG_NOCANCEL", Const, 0},
- {"SYS_REMAP_FILE_PAGES", Const, 0},
- {"SYS_REMOVEXATTR", Const, 0},
- {"SYS_RENAME", Const, 0},
- {"SYS_RENAMEAT", Const, 0},
- {"SYS_REQUEST_KEY", Const, 0},
- {"SYS_RESTART_SYSCALL", Const, 0},
- {"SYS_REVOKE", Const, 0},
- {"SYS_RFORK", Const, 0},
- {"SYS_RMDIR", Const, 0},
- {"SYS_RTPRIO", Const, 0},
- {"SYS_RTPRIO_THREAD", Const, 0},
- {"SYS_RT_SIGACTION", Const, 0},
- {"SYS_RT_SIGPENDING", Const, 0},
- {"SYS_RT_SIGPROCMASK", Const, 0},
- {"SYS_RT_SIGQUEUEINFO", Const, 0},
- {"SYS_RT_SIGRETURN", Const, 0},
- {"SYS_RT_SIGSUSPEND", Const, 0},
- {"SYS_RT_SIGTIMEDWAIT", Const, 0},
- {"SYS_RT_TGSIGQUEUEINFO", Const, 0},
- {"SYS_SBRK", Const, 0},
- {"SYS_SCHED_GETAFFINITY", Const, 0},
- {"SYS_SCHED_GETPARAM", Const, 0},
- {"SYS_SCHED_GETSCHEDULER", Const, 0},
- {"SYS_SCHED_GET_PRIORITY_MAX", Const, 0},
- {"SYS_SCHED_GET_PRIORITY_MIN", Const, 0},
- {"SYS_SCHED_RR_GET_INTERVAL", Const, 0},
- {"SYS_SCHED_SETAFFINITY", Const, 0},
- {"SYS_SCHED_SETPARAM", Const, 0},
- {"SYS_SCHED_SETSCHEDULER", Const, 0},
- {"SYS_SCHED_YIELD", Const, 0},
- {"SYS_SCTP_GENERIC_RECVMSG", Const, 0},
- {"SYS_SCTP_GENERIC_SENDMSG", Const, 0},
- {"SYS_SCTP_GENERIC_SENDMSG_IOV", Const, 0},
- {"SYS_SCTP_PEELOFF", Const, 0},
- {"SYS_SEARCHFS", Const, 0},
- {"SYS_SECURITY", Const, 0},
- {"SYS_SELECT", Const, 0},
- {"SYS_SELECT_NOCANCEL", Const, 0},
- {"SYS_SEMCONFIG", Const, 1},
- {"SYS_SEMCTL", Const, 0},
- {"SYS_SEMGET", Const, 0},
- {"SYS_SEMOP", Const, 0},
- {"SYS_SEMSYS", Const, 0},
- {"SYS_SEMTIMEDOP", Const, 0},
- {"SYS_SEM_CLOSE", Const, 0},
- {"SYS_SEM_DESTROY", Const, 0},
- {"SYS_SEM_GETVALUE", Const, 0},
- {"SYS_SEM_INIT", Const, 0},
- {"SYS_SEM_OPEN", Const, 0},
- {"SYS_SEM_POST", Const, 0},
- {"SYS_SEM_TRYWAIT", Const, 0},
- {"SYS_SEM_UNLINK", Const, 0},
- {"SYS_SEM_WAIT", Const, 0},
- {"SYS_SEM_WAIT_NOCANCEL", Const, 0},
- {"SYS_SEND", Const, 0},
- {"SYS_SENDFILE", Const, 0},
- {"SYS_SENDFILE64", Const, 0},
- {"SYS_SENDMMSG", Const, 0},
- {"SYS_SENDMSG", Const, 0},
- {"SYS_SENDMSG_NOCANCEL", Const, 0},
- {"SYS_SENDTO", Const, 0},
- {"SYS_SENDTO_NOCANCEL", Const, 0},
- {"SYS_SETATTRLIST", Const, 0},
- {"SYS_SETAUDIT", Const, 0},
- {"SYS_SETAUDIT_ADDR", Const, 0},
- {"SYS_SETAUID", Const, 0},
- {"SYS_SETCONTEXT", Const, 0},
- {"SYS_SETDOMAINNAME", Const, 0},
- {"SYS_SETEGID", Const, 0},
- {"SYS_SETEUID", Const, 0},
- {"SYS_SETFIB", Const, 0},
- {"SYS_SETFSGID", Const, 0},
- {"SYS_SETFSGID32", Const, 0},
- {"SYS_SETFSUID", Const, 0},
- {"SYS_SETFSUID32", Const, 0},
- {"SYS_SETGID", Const, 0},
- {"SYS_SETGID32", Const, 0},
- {"SYS_SETGROUPS", Const, 0},
- {"SYS_SETGROUPS32", Const, 0},
- {"SYS_SETHOSTNAME", Const, 0},
- {"SYS_SETITIMER", Const, 0},
- {"SYS_SETLCID", Const, 0},
- {"SYS_SETLOGIN", Const, 0},
- {"SYS_SETLOGINCLASS", Const, 0},
- {"SYS_SETNS", Const, 0},
- {"SYS_SETPGID", Const, 0},
- {"SYS_SETPRIORITY", Const, 0},
- {"SYS_SETPRIVEXEC", Const, 0},
- {"SYS_SETREGID", Const, 0},
- {"SYS_SETREGID32", Const, 0},
- {"SYS_SETRESGID", Const, 0},
- {"SYS_SETRESGID32", Const, 0},
- {"SYS_SETRESUID", Const, 0},
- {"SYS_SETRESUID32", Const, 0},
- {"SYS_SETREUID", Const, 0},
- {"SYS_SETREUID32", Const, 0},
- {"SYS_SETRLIMIT", Const, 0},
- {"SYS_SETRTABLE", Const, 1},
- {"SYS_SETSGROUPS", Const, 0},
- {"SYS_SETSID", Const, 0},
- {"SYS_SETSOCKOPT", Const, 0},
- {"SYS_SETTID", Const, 0},
- {"SYS_SETTID_WITH_PID", Const, 0},
- {"SYS_SETTIMEOFDAY", Const, 0},
- {"SYS_SETUID", Const, 0},
- {"SYS_SETUID32", Const, 0},
- {"SYS_SETWGROUPS", Const, 0},
- {"SYS_SETXATTR", Const, 0},
- {"SYS_SET_MEMPOLICY", Const, 0},
- {"SYS_SET_ROBUST_LIST", Const, 0},
- {"SYS_SET_THREAD_AREA", Const, 0},
- {"SYS_SET_TID_ADDRESS", Const, 0},
- {"SYS_SGETMASK", Const, 0},
- {"SYS_SHARED_REGION_CHECK_NP", Const, 0},
- {"SYS_SHARED_REGION_MAP_AND_SLIDE_NP", Const, 0},
- {"SYS_SHMAT", Const, 0},
- {"SYS_SHMCTL", Const, 0},
- {"SYS_SHMDT", Const, 0},
- {"SYS_SHMGET", Const, 0},
- {"SYS_SHMSYS", Const, 0},
- {"SYS_SHM_OPEN", Const, 0},
- {"SYS_SHM_UNLINK", Const, 0},
- {"SYS_SHUTDOWN", Const, 0},
- {"SYS_SIGACTION", Const, 0},
- {"SYS_SIGALTSTACK", Const, 0},
- {"SYS_SIGNAL", Const, 0},
- {"SYS_SIGNALFD", Const, 0},
- {"SYS_SIGNALFD4", Const, 0},
- {"SYS_SIGPENDING", Const, 0},
- {"SYS_SIGPROCMASK", Const, 0},
- {"SYS_SIGQUEUE", Const, 0},
- {"SYS_SIGQUEUEINFO", Const, 1},
- {"SYS_SIGRETURN", Const, 0},
- {"SYS_SIGSUSPEND", Const, 0},
- {"SYS_SIGSUSPEND_NOCANCEL", Const, 0},
- {"SYS_SIGTIMEDWAIT", Const, 0},
- {"SYS_SIGWAIT", Const, 0},
- {"SYS_SIGWAITINFO", Const, 0},
- {"SYS_SOCKET", Const, 0},
- {"SYS_SOCKETCALL", Const, 0},
- {"SYS_SOCKETPAIR", Const, 0},
- {"SYS_SPLICE", Const, 0},
- {"SYS_SSETMASK", Const, 0},
- {"SYS_SSTK", Const, 0},
- {"SYS_STACK_SNAPSHOT", Const, 0},
- {"SYS_STAT", Const, 0},
- {"SYS_STAT64", Const, 0},
- {"SYS_STAT64_EXTENDED", Const, 0},
- {"SYS_STATFS", Const, 0},
- {"SYS_STATFS64", Const, 0},
- {"SYS_STATV", Const, 0},
- {"SYS_STATVFS1", Const, 1},
- {"SYS_STAT_EXTENDED", Const, 0},
- {"SYS_STIME", Const, 0},
- {"SYS_STTY", Const, 0},
- {"SYS_SWAPCONTEXT", Const, 0},
- {"SYS_SWAPCTL", Const, 1},
- {"SYS_SWAPOFF", Const, 0},
- {"SYS_SWAPON", Const, 0},
- {"SYS_SYMLINK", Const, 0},
- {"SYS_SYMLINKAT", Const, 0},
- {"SYS_SYNC", Const, 0},
- {"SYS_SYNCFS", Const, 0},
- {"SYS_SYNC_FILE_RANGE", Const, 0},
- {"SYS_SYSARCH", Const, 0},
- {"SYS_SYSCALL", Const, 0},
- {"SYS_SYSCALL_BASE", Const, 0},
- {"SYS_SYSFS", Const, 0},
- {"SYS_SYSINFO", Const, 0},
- {"SYS_SYSLOG", Const, 0},
- {"SYS_TEE", Const, 0},
- {"SYS_TGKILL", Const, 0},
- {"SYS_THREAD_SELFID", Const, 0},
- {"SYS_THR_CREATE", Const, 0},
- {"SYS_THR_EXIT", Const, 0},
- {"SYS_THR_KILL", Const, 0},
- {"SYS_THR_KILL2", Const, 0},
- {"SYS_THR_NEW", Const, 0},
- {"SYS_THR_SELF", Const, 0},
- {"SYS_THR_SET_NAME", Const, 0},
- {"SYS_THR_SUSPEND", Const, 0},
- {"SYS_THR_WAKE", Const, 0},
- {"SYS_TIME", Const, 0},
- {"SYS_TIMERFD_CREATE", Const, 0},
- {"SYS_TIMERFD_GETTIME", Const, 0},
- {"SYS_TIMERFD_SETTIME", Const, 0},
- {"SYS_TIMER_CREATE", Const, 0},
- {"SYS_TIMER_DELETE", Const, 0},
- {"SYS_TIMER_GETOVERRUN", Const, 0},
- {"SYS_TIMER_GETTIME", Const, 0},
- {"SYS_TIMER_SETTIME", Const, 0},
- {"SYS_TIMES", Const, 0},
- {"SYS_TKILL", Const, 0},
- {"SYS_TRUNCATE", Const, 0},
- {"SYS_TRUNCATE64", Const, 0},
- {"SYS_TUXCALL", Const, 0},
- {"SYS_UGETRLIMIT", Const, 0},
- {"SYS_ULIMIT", Const, 0},
- {"SYS_UMASK", Const, 0},
- {"SYS_UMASK_EXTENDED", Const, 0},
- {"SYS_UMOUNT", Const, 0},
- {"SYS_UMOUNT2", Const, 0},
- {"SYS_UNAME", Const, 0},
- {"SYS_UNDELETE", Const, 0},
- {"SYS_UNLINK", Const, 0},
- {"SYS_UNLINKAT", Const, 0},
- {"SYS_UNMOUNT", Const, 0},
- {"SYS_UNSHARE", Const, 0},
- {"SYS_USELIB", Const, 0},
- {"SYS_USTAT", Const, 0},
- {"SYS_UTIME", Const, 0},
- {"SYS_UTIMENSAT", Const, 0},
- {"SYS_UTIMES", Const, 0},
- {"SYS_UTRACE", Const, 0},
- {"SYS_UUIDGEN", Const, 0},
- {"SYS_VADVISE", Const, 1},
- {"SYS_VFORK", Const, 0},
- {"SYS_VHANGUP", Const, 0},
- {"SYS_VM86", Const, 0},
- {"SYS_VM86OLD", Const, 0},
- {"SYS_VMSPLICE", Const, 0},
- {"SYS_VM_PRESSURE_MONITOR", Const, 0},
- {"SYS_VSERVER", Const, 0},
- {"SYS_WAIT4", Const, 0},
- {"SYS_WAIT4_NOCANCEL", Const, 0},
- {"SYS_WAIT6", Const, 1},
- {"SYS_WAITEVENT", Const, 0},
- {"SYS_WAITID", Const, 0},
- {"SYS_WAITID_NOCANCEL", Const, 0},
- {"SYS_WAITPID", Const, 0},
- {"SYS_WATCHEVENT", Const, 0},
- {"SYS_WORKQ_KERNRETURN", Const, 0},
- {"SYS_WORKQ_OPEN", Const, 0},
- {"SYS_WRITE", Const, 0},
- {"SYS_WRITEV", Const, 0},
- {"SYS_WRITEV_NOCANCEL", Const, 0},
- {"SYS_WRITE_NOCANCEL", Const, 0},
- {"SYS_YIELD", Const, 0},
- {"SYS__LLSEEK", Const, 0},
- {"SYS__LWP_CONTINUE", Const, 1},
- {"SYS__LWP_CREATE", Const, 1},
- {"SYS__LWP_CTL", Const, 1},
- {"SYS__LWP_DETACH", Const, 1},
- {"SYS__LWP_EXIT", Const, 1},
- {"SYS__LWP_GETNAME", Const, 1},
- {"SYS__LWP_GETPRIVATE", Const, 1},
- {"SYS__LWP_KILL", Const, 1},
- {"SYS__LWP_PARK", Const, 1},
- {"SYS__LWP_SELF", Const, 1},
- {"SYS__LWP_SETNAME", Const, 1},
- {"SYS__LWP_SETPRIVATE", Const, 1},
- {"SYS__LWP_SUSPEND", Const, 1},
- {"SYS__LWP_UNPARK", Const, 1},
- {"SYS__LWP_UNPARK_ALL", Const, 1},
- {"SYS__LWP_WAIT", Const, 1},
- {"SYS__LWP_WAKEUP", Const, 1},
- {"SYS__NEWSELECT", Const, 0},
- {"SYS__PSET_BIND", Const, 1},
- {"SYS__SCHED_GETAFFINITY", Const, 1},
- {"SYS__SCHED_GETPARAM", Const, 1},
- {"SYS__SCHED_SETAFFINITY", Const, 1},
- {"SYS__SCHED_SETPARAM", Const, 1},
- {"SYS__SYSCTL", Const, 0},
- {"SYS__UMTX_LOCK", Const, 0},
- {"SYS__UMTX_OP", Const, 0},
- {"SYS__UMTX_UNLOCK", Const, 0},
- {"SYS___ACL_ACLCHECK_FD", Const, 0},
- {"SYS___ACL_ACLCHECK_FILE", Const, 0},
- {"SYS___ACL_ACLCHECK_LINK", Const, 0},
- {"SYS___ACL_DELETE_FD", Const, 0},
- {"SYS___ACL_DELETE_FILE", Const, 0},
- {"SYS___ACL_DELETE_LINK", Const, 0},
- {"SYS___ACL_GET_FD", Const, 0},
- {"SYS___ACL_GET_FILE", Const, 0},
- {"SYS___ACL_GET_LINK", Const, 0},
- {"SYS___ACL_SET_FD", Const, 0},
- {"SYS___ACL_SET_FILE", Const, 0},
- {"SYS___ACL_SET_LINK", Const, 0},
- {"SYS___CAP_RIGHTS_GET", Const, 14},
- {"SYS___CLONE", Const, 1},
- {"SYS___DISABLE_THREADSIGNAL", Const, 0},
- {"SYS___GETCWD", Const, 0},
- {"SYS___GETLOGIN", Const, 1},
- {"SYS___GET_TCB", Const, 1},
- {"SYS___MAC_EXECVE", Const, 0},
- {"SYS___MAC_GETFSSTAT", Const, 0},
- {"SYS___MAC_GET_FD", Const, 0},
- {"SYS___MAC_GET_FILE", Const, 0},
- {"SYS___MAC_GET_LCID", Const, 0},
- {"SYS___MAC_GET_LCTX", Const, 0},
- {"SYS___MAC_GET_LINK", Const, 0},
- {"SYS___MAC_GET_MOUNT", Const, 0},
- {"SYS___MAC_GET_PID", Const, 0},
- {"SYS___MAC_GET_PROC", Const, 0},
- {"SYS___MAC_MOUNT", Const, 0},
- {"SYS___MAC_SET_FD", Const, 0},
- {"SYS___MAC_SET_FILE", Const, 0},
- {"SYS___MAC_SET_LCTX", Const, 0},
- {"SYS___MAC_SET_LINK", Const, 0},
- {"SYS___MAC_SET_PROC", Const, 0},
- {"SYS___MAC_SYSCALL", Const, 0},
- {"SYS___OLD_SEMWAIT_SIGNAL", Const, 0},
- {"SYS___OLD_SEMWAIT_SIGNAL_NOCANCEL", Const, 0},
- {"SYS___POSIX_CHOWN", Const, 1},
- {"SYS___POSIX_FCHOWN", Const, 1},
- {"SYS___POSIX_LCHOWN", Const, 1},
- {"SYS___POSIX_RENAME", Const, 1},
- {"SYS___PTHREAD_CANCELED", Const, 0},
- {"SYS___PTHREAD_CHDIR", Const, 0},
- {"SYS___PTHREAD_FCHDIR", Const, 0},
- {"SYS___PTHREAD_KILL", Const, 0},
- {"SYS___PTHREAD_MARKCANCEL", Const, 0},
- {"SYS___PTHREAD_SIGMASK", Const, 0},
- {"SYS___QUOTACTL", Const, 1},
- {"SYS___SEMCTL", Const, 1},
- {"SYS___SEMWAIT_SIGNAL", Const, 0},
- {"SYS___SEMWAIT_SIGNAL_NOCANCEL", Const, 0},
- {"SYS___SETLOGIN", Const, 1},
- {"SYS___SETUGID", Const, 0},
- {"SYS___SET_TCB", Const, 1},
- {"SYS___SIGACTION_SIGTRAMP", Const, 1},
- {"SYS___SIGTIMEDWAIT", Const, 1},
- {"SYS___SIGWAIT", Const, 0},
- {"SYS___SIGWAIT_NOCANCEL", Const, 0},
- {"SYS___SYSCTL", Const, 0},
- {"SYS___TFORK", Const, 1},
- {"SYS___THREXIT", Const, 1},
- {"SYS___THRSIGDIVERT", Const, 1},
- {"SYS___THRSLEEP", Const, 1},
- {"SYS___THRWAKEUP", Const, 1},
- {"S_ARCH1", Const, 1},
- {"S_ARCH2", Const, 1},
- {"S_BLKSIZE", Const, 0},
- {"S_IEXEC", Const, 0},
- {"S_IFBLK", Const, 0},
- {"S_IFCHR", Const, 0},
- {"S_IFDIR", Const, 0},
- {"S_IFIFO", Const, 0},
- {"S_IFLNK", Const, 0},
- {"S_IFMT", Const, 0},
- {"S_IFREG", Const, 0},
- {"S_IFSOCK", Const, 0},
- {"S_IFWHT", Const, 0},
- {"S_IREAD", Const, 0},
- {"S_IRGRP", Const, 0},
- {"S_IROTH", Const, 0},
- {"S_IRUSR", Const, 0},
- {"S_IRWXG", Const, 0},
- {"S_IRWXO", Const, 0},
- {"S_IRWXU", Const, 0},
- {"S_ISGID", Const, 0},
- {"S_ISTXT", Const, 0},
- {"S_ISUID", Const, 0},
- {"S_ISVTX", Const, 0},
- {"S_IWGRP", Const, 0},
- {"S_IWOTH", Const, 0},
- {"S_IWRITE", Const, 0},
- {"S_IWUSR", Const, 0},
- {"S_IXGRP", Const, 0},
- {"S_IXOTH", Const, 0},
- {"S_IXUSR", Const, 0},
- {"S_LOGIN_SET", Const, 1},
- {"SecurityAttributes", Type, 0},
- {"SecurityAttributes.InheritHandle", Field, 0},
- {"SecurityAttributes.Length", Field, 0},
- {"SecurityAttributes.SecurityDescriptor", Field, 0},
- {"Seek", Func, 0},
- {"Select", Func, 0},
- {"Sendfile", Func, 0},
- {"Sendmsg", Func, 0},
- {"SendmsgN", Func, 3},
- {"Sendto", Func, 0},
- {"Servent", Type, 0},
- {"Servent.Aliases", Field, 0},
- {"Servent.Name", Field, 0},
- {"Servent.Port", Field, 0},
- {"Servent.Proto", Field, 0},
- {"SetBpf", Func, 0},
- {"SetBpfBuflen", Func, 0},
- {"SetBpfDatalink", Func, 0},
- {"SetBpfHeadercmpl", Func, 0},
- {"SetBpfImmediate", Func, 0},
- {"SetBpfInterface", Func, 0},
- {"SetBpfPromisc", Func, 0},
- {"SetBpfTimeout", Func, 0},
- {"SetCurrentDirectory", Func, 0},
- {"SetEndOfFile", Func, 0},
- {"SetEnvironmentVariable", Func, 0},
- {"SetFileAttributes", Func, 0},
- {"SetFileCompletionNotificationModes", Func, 2},
- {"SetFilePointer", Func, 0},
- {"SetFileTime", Func, 0},
- {"SetHandleInformation", Func, 0},
- {"SetKevent", Func, 0},
- {"SetLsfPromisc", Func, 0},
- {"SetNonblock", Func, 0},
- {"Setdomainname", Func, 0},
- {"Setegid", Func, 0},
- {"Setenv", Func, 0},
- {"Seteuid", Func, 0},
- {"Setfsgid", Func, 0},
- {"Setfsuid", Func, 0},
- {"Setgid", Func, 0},
- {"Setgroups", Func, 0},
- {"Sethostname", Func, 0},
- {"Setlogin", Func, 0},
- {"Setpgid", Func, 0},
- {"Setpriority", Func, 0},
- {"Setprivexec", Func, 0},
- {"Setregid", Func, 0},
- {"Setresgid", Func, 0},
- {"Setresuid", Func, 0},
- {"Setreuid", Func, 0},
- {"Setrlimit", Func, 0},
- {"Setsid", Func, 0},
- {"Setsockopt", Func, 0},
- {"SetsockoptByte", Func, 0},
- {"SetsockoptICMPv6Filter", Func, 2},
- {"SetsockoptIPMreq", Func, 0},
- {"SetsockoptIPMreqn", Func, 0},
- {"SetsockoptIPv6Mreq", Func, 0},
- {"SetsockoptInet4Addr", Func, 0},
- {"SetsockoptInt", Func, 0},
- {"SetsockoptLinger", Func, 0},
- {"SetsockoptString", Func, 0},
- {"SetsockoptTimeval", Func, 0},
- {"Settimeofday", Func, 0},
- {"Setuid", Func, 0},
- {"Setxattr", Func, 1},
- {"Shutdown", Func, 0},
- {"SidTypeAlias", Const, 0},
- {"SidTypeComputer", Const, 0},
- {"SidTypeDeletedAccount", Const, 0},
- {"SidTypeDomain", Const, 0},
- {"SidTypeGroup", Const, 0},
- {"SidTypeInvalid", Const, 0},
- {"SidTypeLabel", Const, 0},
- {"SidTypeUnknown", Const, 0},
- {"SidTypeUser", Const, 0},
- {"SidTypeWellKnownGroup", Const, 0},
- {"Signal", Type, 0},
- {"SizeofBpfHdr", Const, 0},
- {"SizeofBpfInsn", Const, 0},
- {"SizeofBpfProgram", Const, 0},
- {"SizeofBpfStat", Const, 0},
- {"SizeofBpfVersion", Const, 0},
- {"SizeofBpfZbuf", Const, 0},
- {"SizeofBpfZbufHeader", Const, 0},
- {"SizeofCmsghdr", Const, 0},
- {"SizeofICMPv6Filter", Const, 2},
- {"SizeofIPMreq", Const, 0},
- {"SizeofIPMreqn", Const, 0},
- {"SizeofIPv6MTUInfo", Const, 2},
- {"SizeofIPv6Mreq", Const, 0},
- {"SizeofIfAddrmsg", Const, 0},
- {"SizeofIfAnnounceMsghdr", Const, 1},
- {"SizeofIfData", Const, 0},
- {"SizeofIfInfomsg", Const, 0},
- {"SizeofIfMsghdr", Const, 0},
- {"SizeofIfaMsghdr", Const, 0},
- {"SizeofIfmaMsghdr", Const, 0},
- {"SizeofIfmaMsghdr2", Const, 0},
- {"SizeofInet4Pktinfo", Const, 0},
- {"SizeofInet6Pktinfo", Const, 0},
- {"SizeofInotifyEvent", Const, 0},
- {"SizeofLinger", Const, 0},
- {"SizeofMsghdr", Const, 0},
- {"SizeofNlAttr", Const, 0},
- {"SizeofNlMsgerr", Const, 0},
- {"SizeofNlMsghdr", Const, 0},
- {"SizeofRtAttr", Const, 0},
- {"SizeofRtGenmsg", Const, 0},
- {"SizeofRtMetrics", Const, 0},
- {"SizeofRtMsg", Const, 0},
- {"SizeofRtMsghdr", Const, 0},
- {"SizeofRtNexthop", Const, 0},
- {"SizeofSockFilter", Const, 0},
- {"SizeofSockFprog", Const, 0},
- {"SizeofSockaddrAny", Const, 0},
- {"SizeofSockaddrDatalink", Const, 0},
- {"SizeofSockaddrInet4", Const, 0},
- {"SizeofSockaddrInet6", Const, 0},
- {"SizeofSockaddrLinklayer", Const, 0},
- {"SizeofSockaddrNetlink", Const, 0},
- {"SizeofSockaddrUnix", Const, 0},
- {"SizeofTCPInfo", Const, 1},
- {"SizeofUcred", Const, 0},
- {"SlicePtrFromStrings", Func, 1},
- {"SockFilter", Type, 0},
- {"SockFilter.Code", Field, 0},
- {"SockFilter.Jf", Field, 0},
- {"SockFilter.Jt", Field, 0},
- {"SockFilter.K", Field, 0},
- {"SockFprog", Type, 0},
- {"SockFprog.Filter", Field, 0},
- {"SockFprog.Len", Field, 0},
- {"SockFprog.Pad_cgo_0", Field, 0},
- {"Sockaddr", Type, 0},
- {"SockaddrDatalink", Type, 0},
- {"SockaddrDatalink.Alen", Field, 0},
- {"SockaddrDatalink.Data", Field, 0},
- {"SockaddrDatalink.Family", Field, 0},
- {"SockaddrDatalink.Index", Field, 0},
- {"SockaddrDatalink.Len", Field, 0},
- {"SockaddrDatalink.Nlen", Field, 0},
- {"SockaddrDatalink.Slen", Field, 0},
- {"SockaddrDatalink.Type", Field, 0},
- {"SockaddrGen", Type, 0},
- {"SockaddrInet4", Type, 0},
- {"SockaddrInet4.Addr", Field, 0},
- {"SockaddrInet4.Port", Field, 0},
- {"SockaddrInet6", Type, 0},
- {"SockaddrInet6.Addr", Field, 0},
- {"SockaddrInet6.Port", Field, 0},
- {"SockaddrInet6.ZoneId", Field, 0},
- {"SockaddrLinklayer", Type, 0},
- {"SockaddrLinklayer.Addr", Field, 0},
- {"SockaddrLinklayer.Halen", Field, 0},
- {"SockaddrLinklayer.Hatype", Field, 0},
- {"SockaddrLinklayer.Ifindex", Field, 0},
- {"SockaddrLinklayer.Pkttype", Field, 0},
- {"SockaddrLinklayer.Protocol", Field, 0},
- {"SockaddrNetlink", Type, 0},
- {"SockaddrNetlink.Family", Field, 0},
- {"SockaddrNetlink.Groups", Field, 0},
- {"SockaddrNetlink.Pad", Field, 0},
- {"SockaddrNetlink.Pid", Field, 0},
- {"SockaddrUnix", Type, 0},
- {"SockaddrUnix.Name", Field, 0},
- {"Socket", Func, 0},
- {"SocketControlMessage", Type, 0},
- {"SocketControlMessage.Data", Field, 0},
- {"SocketControlMessage.Header", Field, 0},
- {"SocketDisableIPv6", Var, 0},
- {"Socketpair", Func, 0},
- {"Splice", Func, 0},
- {"StartProcess", Func, 0},
- {"StartupInfo", Type, 0},
- {"StartupInfo.Cb", Field, 0},
- {"StartupInfo.Desktop", Field, 0},
- {"StartupInfo.FillAttribute", Field, 0},
- {"StartupInfo.Flags", Field, 0},
- {"StartupInfo.ShowWindow", Field, 0},
- {"StartupInfo.StdErr", Field, 0},
- {"StartupInfo.StdInput", Field, 0},
- {"StartupInfo.StdOutput", Field, 0},
- {"StartupInfo.Title", Field, 0},
- {"StartupInfo.X", Field, 0},
- {"StartupInfo.XCountChars", Field, 0},
- {"StartupInfo.XSize", Field, 0},
- {"StartupInfo.Y", Field, 0},
- {"StartupInfo.YCountChars", Field, 0},
- {"StartupInfo.YSize", Field, 0},
- {"Stat", Func, 0},
- {"Stat_t", Type, 0},
- {"Stat_t.Atim", Field, 0},
- {"Stat_t.Atim_ext", Field, 12},
- {"Stat_t.Atimespec", Field, 0},
- {"Stat_t.Birthtimespec", Field, 0},
- {"Stat_t.Blksize", Field, 0},
- {"Stat_t.Blocks", Field, 0},
- {"Stat_t.Btim_ext", Field, 12},
- {"Stat_t.Ctim", Field, 0},
- {"Stat_t.Ctim_ext", Field, 12},
- {"Stat_t.Ctimespec", Field, 0},
- {"Stat_t.Dev", Field, 0},
- {"Stat_t.Flags", Field, 0},
- {"Stat_t.Gen", Field, 0},
- {"Stat_t.Gid", Field, 0},
- {"Stat_t.Ino", Field, 0},
- {"Stat_t.Lspare", Field, 0},
- {"Stat_t.Lspare0", Field, 2},
- {"Stat_t.Lspare1", Field, 2},
- {"Stat_t.Mode", Field, 0},
- {"Stat_t.Mtim", Field, 0},
- {"Stat_t.Mtim_ext", Field, 12},
- {"Stat_t.Mtimespec", Field, 0},
- {"Stat_t.Nlink", Field, 0},
- {"Stat_t.Pad_cgo_0", Field, 0},
- {"Stat_t.Pad_cgo_1", Field, 0},
- {"Stat_t.Pad_cgo_2", Field, 0},
- {"Stat_t.Padding0", Field, 12},
- {"Stat_t.Padding1", Field, 12},
- {"Stat_t.Qspare", Field, 0},
- {"Stat_t.Rdev", Field, 0},
- {"Stat_t.Size", Field, 0},
- {"Stat_t.Spare", Field, 2},
- {"Stat_t.Uid", Field, 0},
- {"Stat_t.X__pad0", Field, 0},
- {"Stat_t.X__pad1", Field, 0},
- {"Stat_t.X__pad2", Field, 0},
- {"Stat_t.X__st_birthtim", Field, 2},
- {"Stat_t.X__st_ino", Field, 0},
- {"Stat_t.X__unused", Field, 0},
- {"Statfs", Func, 0},
- {"Statfs_t", Type, 0},
- {"Statfs_t.Asyncreads", Field, 0},
- {"Statfs_t.Asyncwrites", Field, 0},
- {"Statfs_t.Bavail", Field, 0},
- {"Statfs_t.Bfree", Field, 0},
- {"Statfs_t.Blocks", Field, 0},
- {"Statfs_t.Bsize", Field, 0},
- {"Statfs_t.Charspare", Field, 0},
- {"Statfs_t.F_asyncreads", Field, 2},
- {"Statfs_t.F_asyncwrites", Field, 2},
- {"Statfs_t.F_bavail", Field, 2},
- {"Statfs_t.F_bfree", Field, 2},
- {"Statfs_t.F_blocks", Field, 2},
- {"Statfs_t.F_bsize", Field, 2},
- {"Statfs_t.F_ctime", Field, 2},
- {"Statfs_t.F_favail", Field, 2},
- {"Statfs_t.F_ffree", Field, 2},
- {"Statfs_t.F_files", Field, 2},
- {"Statfs_t.F_flags", Field, 2},
- {"Statfs_t.F_fsid", Field, 2},
- {"Statfs_t.F_fstypename", Field, 2},
- {"Statfs_t.F_iosize", Field, 2},
- {"Statfs_t.F_mntfromname", Field, 2},
- {"Statfs_t.F_mntfromspec", Field, 3},
- {"Statfs_t.F_mntonname", Field, 2},
- {"Statfs_t.F_namemax", Field, 2},
- {"Statfs_t.F_owner", Field, 2},
- {"Statfs_t.F_spare", Field, 2},
- {"Statfs_t.F_syncreads", Field, 2},
- {"Statfs_t.F_syncwrites", Field, 2},
- {"Statfs_t.Ffree", Field, 0},
- {"Statfs_t.Files", Field, 0},
- {"Statfs_t.Flags", Field, 0},
- {"Statfs_t.Frsize", Field, 0},
- {"Statfs_t.Fsid", Field, 0},
- {"Statfs_t.Fssubtype", Field, 0},
- {"Statfs_t.Fstypename", Field, 0},
- {"Statfs_t.Iosize", Field, 0},
- {"Statfs_t.Mntfromname", Field, 0},
- {"Statfs_t.Mntonname", Field, 0},
- {"Statfs_t.Mount_info", Field, 2},
- {"Statfs_t.Namelen", Field, 0},
- {"Statfs_t.Namemax", Field, 0},
- {"Statfs_t.Owner", Field, 0},
- {"Statfs_t.Pad_cgo_0", Field, 0},
- {"Statfs_t.Pad_cgo_1", Field, 2},
- {"Statfs_t.Reserved", Field, 0},
- {"Statfs_t.Spare", Field, 0},
- {"Statfs_t.Syncreads", Field, 0},
- {"Statfs_t.Syncwrites", Field, 0},
- {"Statfs_t.Type", Field, 0},
- {"Statfs_t.Version", Field, 0},
- {"Stderr", Var, 0},
- {"Stdin", Var, 0},
- {"Stdout", Var, 0},
- {"StringBytePtr", Func, 0},
- {"StringByteSlice", Func, 0},
- {"StringSlicePtr", Func, 0},
- {"StringToSid", Func, 0},
- {"StringToUTF16", Func, 0},
- {"StringToUTF16Ptr", Func, 0},
- {"Symlink", Func, 0},
- {"Sync", Func, 0},
- {"SyncFileRange", Func, 0},
- {"SysProcAttr", Type, 0},
- {"SysProcAttr.AdditionalInheritedHandles", Field, 17},
- {"SysProcAttr.AmbientCaps", Field, 9},
- {"SysProcAttr.CgroupFD", Field, 20},
- {"SysProcAttr.Chroot", Field, 0},
- {"SysProcAttr.Cloneflags", Field, 2},
- {"SysProcAttr.CmdLine", Field, 0},
- {"SysProcAttr.CreationFlags", Field, 1},
- {"SysProcAttr.Credential", Field, 0},
- {"SysProcAttr.Ctty", Field, 1},
- {"SysProcAttr.Foreground", Field, 5},
- {"SysProcAttr.GidMappings", Field, 4},
- {"SysProcAttr.GidMappingsEnableSetgroups", Field, 5},
- {"SysProcAttr.HideWindow", Field, 0},
- {"SysProcAttr.Jail", Field, 21},
- {"SysProcAttr.NoInheritHandles", Field, 16},
- {"SysProcAttr.Noctty", Field, 0},
- {"SysProcAttr.ParentProcess", Field, 17},
- {"SysProcAttr.Pdeathsig", Field, 0},
- {"SysProcAttr.Pgid", Field, 5},
- {"SysProcAttr.PidFD", Field, 22},
- {"SysProcAttr.ProcessAttributes", Field, 13},
- {"SysProcAttr.Ptrace", Field, 0},
- {"SysProcAttr.Setctty", Field, 0},
- {"SysProcAttr.Setpgid", Field, 0},
- {"SysProcAttr.Setsid", Field, 0},
- {"SysProcAttr.ThreadAttributes", Field, 13},
- {"SysProcAttr.Token", Field, 10},
- {"SysProcAttr.UidMappings", Field, 4},
- {"SysProcAttr.Unshareflags", Field, 7},
- {"SysProcAttr.UseCgroupFD", Field, 20},
- {"SysProcIDMap", Type, 4},
- {"SysProcIDMap.ContainerID", Field, 4},
- {"SysProcIDMap.HostID", Field, 4},
- {"SysProcIDMap.Size", Field, 4},
- {"Syscall", Func, 0},
- {"Syscall12", Func, 0},
- {"Syscall15", Func, 0},
- {"Syscall18", Func, 12},
- {"Syscall6", Func, 0},
- {"Syscall9", Func, 0},
- {"SyscallN", Func, 18},
- {"Sysctl", Func, 0},
- {"SysctlUint32", Func, 0},
- {"Sysctlnode", Type, 2},
- {"Sysctlnode.Flags", Field, 2},
- {"Sysctlnode.Name", Field, 2},
- {"Sysctlnode.Num", Field, 2},
- {"Sysctlnode.Un", Field, 2},
- {"Sysctlnode.Ver", Field, 2},
- {"Sysctlnode.X__rsvd", Field, 2},
- {"Sysctlnode.X_sysctl_desc", Field, 2},
- {"Sysctlnode.X_sysctl_func", Field, 2},
- {"Sysctlnode.X_sysctl_parent", Field, 2},
- {"Sysctlnode.X_sysctl_size", Field, 2},
- {"Sysinfo", Func, 0},
- {"Sysinfo_t", Type, 0},
- {"Sysinfo_t.Bufferram", Field, 0},
- {"Sysinfo_t.Freehigh", Field, 0},
- {"Sysinfo_t.Freeram", Field, 0},
- {"Sysinfo_t.Freeswap", Field, 0},
- {"Sysinfo_t.Loads", Field, 0},
- {"Sysinfo_t.Pad", Field, 0},
- {"Sysinfo_t.Pad_cgo_0", Field, 0},
- {"Sysinfo_t.Pad_cgo_1", Field, 0},
- {"Sysinfo_t.Procs", Field, 0},
- {"Sysinfo_t.Sharedram", Field, 0},
- {"Sysinfo_t.Totalhigh", Field, 0},
- {"Sysinfo_t.Totalram", Field, 0},
- {"Sysinfo_t.Totalswap", Field, 0},
- {"Sysinfo_t.Unit", Field, 0},
- {"Sysinfo_t.Uptime", Field, 0},
- {"Sysinfo_t.X_f", Field, 0},
- {"Systemtime", Type, 0},
- {"Systemtime.Day", Field, 0},
- {"Systemtime.DayOfWeek", Field, 0},
- {"Systemtime.Hour", Field, 0},
- {"Systemtime.Milliseconds", Field, 0},
- {"Systemtime.Minute", Field, 0},
- {"Systemtime.Month", Field, 0},
- {"Systemtime.Second", Field, 0},
- {"Systemtime.Year", Field, 0},
- {"TCGETS", Const, 0},
- {"TCIFLUSH", Const, 1},
- {"TCIOFLUSH", Const, 1},
- {"TCOFLUSH", Const, 1},
- {"TCPInfo", Type, 1},
- {"TCPInfo.Advmss", Field, 1},
- {"TCPInfo.Ato", Field, 1},
- {"TCPInfo.Backoff", Field, 1},
- {"TCPInfo.Ca_state", Field, 1},
- {"TCPInfo.Fackets", Field, 1},
- {"TCPInfo.Last_ack_recv", Field, 1},
- {"TCPInfo.Last_ack_sent", Field, 1},
- {"TCPInfo.Last_data_recv", Field, 1},
- {"TCPInfo.Last_data_sent", Field, 1},
- {"TCPInfo.Lost", Field, 1},
- {"TCPInfo.Options", Field, 1},
- {"TCPInfo.Pad_cgo_0", Field, 1},
- {"TCPInfo.Pmtu", Field, 1},
- {"TCPInfo.Probes", Field, 1},
- {"TCPInfo.Rcv_mss", Field, 1},
- {"TCPInfo.Rcv_rtt", Field, 1},
- {"TCPInfo.Rcv_space", Field, 1},
- {"TCPInfo.Rcv_ssthresh", Field, 1},
- {"TCPInfo.Reordering", Field, 1},
- {"TCPInfo.Retrans", Field, 1},
- {"TCPInfo.Retransmits", Field, 1},
- {"TCPInfo.Rto", Field, 1},
- {"TCPInfo.Rtt", Field, 1},
- {"TCPInfo.Rttvar", Field, 1},
- {"TCPInfo.Sacked", Field, 1},
- {"TCPInfo.Snd_cwnd", Field, 1},
- {"TCPInfo.Snd_mss", Field, 1},
- {"TCPInfo.Snd_ssthresh", Field, 1},
- {"TCPInfo.State", Field, 1},
- {"TCPInfo.Total_retrans", Field, 1},
- {"TCPInfo.Unacked", Field, 1},
- {"TCPKeepalive", Type, 3},
- {"TCPKeepalive.Interval", Field, 3},
- {"TCPKeepalive.OnOff", Field, 3},
- {"TCPKeepalive.Time", Field, 3},
- {"TCP_CA_NAME_MAX", Const, 0},
- {"TCP_CONGCTL", Const, 1},
- {"TCP_CONGESTION", Const, 0},
- {"TCP_CONNECTIONTIMEOUT", Const, 0},
- {"TCP_CORK", Const, 0},
- {"TCP_DEFER_ACCEPT", Const, 0},
- {"TCP_ENABLE_ECN", Const, 16},
- {"TCP_INFO", Const, 0},
- {"TCP_KEEPALIVE", Const, 0},
- {"TCP_KEEPCNT", Const, 0},
- {"TCP_KEEPIDLE", Const, 0},
- {"TCP_KEEPINIT", Const, 1},
- {"TCP_KEEPINTVL", Const, 0},
- {"TCP_LINGER2", Const, 0},
- {"TCP_MAXBURST", Const, 0},
- {"TCP_MAXHLEN", Const, 0},
- {"TCP_MAXOLEN", Const, 0},
- {"TCP_MAXSEG", Const, 0},
- {"TCP_MAXWIN", Const, 0},
- {"TCP_MAX_SACK", Const, 0},
- {"TCP_MAX_WINSHIFT", Const, 0},
- {"TCP_MD5SIG", Const, 0},
- {"TCP_MD5SIG_MAXKEYLEN", Const, 0},
- {"TCP_MINMSS", Const, 0},
- {"TCP_MINMSSOVERLOAD", Const, 0},
- {"TCP_MSS", Const, 0},
- {"TCP_NODELAY", Const, 0},
- {"TCP_NOOPT", Const, 0},
- {"TCP_NOPUSH", Const, 0},
- {"TCP_NOTSENT_LOWAT", Const, 16},
- {"TCP_NSTATES", Const, 1},
- {"TCP_QUICKACK", Const, 0},
- {"TCP_RXT_CONNDROPTIME", Const, 0},
- {"TCP_RXT_FINDROP", Const, 0},
- {"TCP_SACK_ENABLE", Const, 1},
- {"TCP_SENDMOREACKS", Const, 16},
- {"TCP_SYNCNT", Const, 0},
- {"TCP_VENDOR", Const, 3},
- {"TCP_WINDOW_CLAMP", Const, 0},
- {"TCSAFLUSH", Const, 1},
- {"TCSETS", Const, 0},
- {"TF_DISCONNECT", Const, 0},
- {"TF_REUSE_SOCKET", Const, 0},
- {"TF_USE_DEFAULT_WORKER", Const, 0},
- {"TF_USE_KERNEL_APC", Const, 0},
- {"TF_USE_SYSTEM_THREAD", Const, 0},
- {"TF_WRITE_BEHIND", Const, 0},
- {"TH32CS_INHERIT", Const, 4},
- {"TH32CS_SNAPALL", Const, 4},
- {"TH32CS_SNAPHEAPLIST", Const, 4},
- {"TH32CS_SNAPMODULE", Const, 4},
- {"TH32CS_SNAPMODULE32", Const, 4},
- {"TH32CS_SNAPPROCESS", Const, 4},
- {"TH32CS_SNAPTHREAD", Const, 4},
- {"TIME_ZONE_ID_DAYLIGHT", Const, 0},
- {"TIME_ZONE_ID_STANDARD", Const, 0},
- {"TIME_ZONE_ID_UNKNOWN", Const, 0},
- {"TIOCCBRK", Const, 0},
- {"TIOCCDTR", Const, 0},
- {"TIOCCONS", Const, 0},
- {"TIOCDCDTIMESTAMP", Const, 0},
- {"TIOCDRAIN", Const, 0},
- {"TIOCDSIMICROCODE", Const, 0},
- {"TIOCEXCL", Const, 0},
- {"TIOCEXT", Const, 0},
- {"TIOCFLAG_CDTRCTS", Const, 1},
- {"TIOCFLAG_CLOCAL", Const, 1},
- {"TIOCFLAG_CRTSCTS", Const, 1},
- {"TIOCFLAG_MDMBUF", Const, 1},
- {"TIOCFLAG_PPS", Const, 1},
- {"TIOCFLAG_SOFTCAR", Const, 1},
- {"TIOCFLUSH", Const, 0},
- {"TIOCGDEV", Const, 0},
- {"TIOCGDRAINWAIT", Const, 0},
- {"TIOCGETA", Const, 0},
- {"TIOCGETD", Const, 0},
- {"TIOCGFLAGS", Const, 1},
- {"TIOCGICOUNT", Const, 0},
- {"TIOCGLCKTRMIOS", Const, 0},
- {"TIOCGLINED", Const, 1},
- {"TIOCGPGRP", Const, 0},
- {"TIOCGPTN", Const, 0},
- {"TIOCGQSIZE", Const, 1},
- {"TIOCGRANTPT", Const, 1},
- {"TIOCGRS485", Const, 0},
- {"TIOCGSERIAL", Const, 0},
- {"TIOCGSID", Const, 0},
- {"TIOCGSIZE", Const, 1},
- {"TIOCGSOFTCAR", Const, 0},
- {"TIOCGTSTAMP", Const, 1},
- {"TIOCGWINSZ", Const, 0},
- {"TIOCINQ", Const, 0},
- {"TIOCIXOFF", Const, 0},
- {"TIOCIXON", Const, 0},
- {"TIOCLINUX", Const, 0},
- {"TIOCMBIC", Const, 0},
- {"TIOCMBIS", Const, 0},
- {"TIOCMGDTRWAIT", Const, 0},
- {"TIOCMGET", Const, 0},
- {"TIOCMIWAIT", Const, 0},
- {"TIOCMODG", Const, 0},
- {"TIOCMODS", Const, 0},
- {"TIOCMSDTRWAIT", Const, 0},
- {"TIOCMSET", Const, 0},
- {"TIOCM_CAR", Const, 0},
- {"TIOCM_CD", Const, 0},
- {"TIOCM_CTS", Const, 0},
- {"TIOCM_DCD", Const, 0},
- {"TIOCM_DSR", Const, 0},
- {"TIOCM_DTR", Const, 0},
- {"TIOCM_LE", Const, 0},
- {"TIOCM_RI", Const, 0},
- {"TIOCM_RNG", Const, 0},
- {"TIOCM_RTS", Const, 0},
- {"TIOCM_SR", Const, 0},
- {"TIOCM_ST", Const, 0},
- {"TIOCNOTTY", Const, 0},
- {"TIOCNXCL", Const, 0},
- {"TIOCOUTQ", Const, 0},
- {"TIOCPKT", Const, 0},
- {"TIOCPKT_DATA", Const, 0},
- {"TIOCPKT_DOSTOP", Const, 0},
- {"TIOCPKT_FLUSHREAD", Const, 0},
- {"TIOCPKT_FLUSHWRITE", Const, 0},
- {"TIOCPKT_IOCTL", Const, 0},
- {"TIOCPKT_NOSTOP", Const, 0},
- {"TIOCPKT_START", Const, 0},
- {"TIOCPKT_STOP", Const, 0},
- {"TIOCPTMASTER", Const, 0},
- {"TIOCPTMGET", Const, 1},
- {"TIOCPTSNAME", Const, 1},
- {"TIOCPTYGNAME", Const, 0},
- {"TIOCPTYGRANT", Const, 0},
- {"TIOCPTYUNLK", Const, 0},
- {"TIOCRCVFRAME", Const, 1},
- {"TIOCREMOTE", Const, 0},
- {"TIOCSBRK", Const, 0},
- {"TIOCSCONS", Const, 0},
- {"TIOCSCTTY", Const, 0},
- {"TIOCSDRAINWAIT", Const, 0},
- {"TIOCSDTR", Const, 0},
- {"TIOCSERCONFIG", Const, 0},
- {"TIOCSERGETLSR", Const, 0},
- {"TIOCSERGETMULTI", Const, 0},
- {"TIOCSERGSTRUCT", Const, 0},
- {"TIOCSERGWILD", Const, 0},
- {"TIOCSERSETMULTI", Const, 0},
- {"TIOCSERSWILD", Const, 0},
- {"TIOCSER_TEMT", Const, 0},
- {"TIOCSETA", Const, 0},
- {"TIOCSETAF", Const, 0},
- {"TIOCSETAW", Const, 0},
- {"TIOCSETD", Const, 0},
- {"TIOCSFLAGS", Const, 1},
- {"TIOCSIG", Const, 0},
- {"TIOCSLCKTRMIOS", Const, 0},
- {"TIOCSLINED", Const, 1},
- {"TIOCSPGRP", Const, 0},
- {"TIOCSPTLCK", Const, 0},
- {"TIOCSQSIZE", Const, 1},
- {"TIOCSRS485", Const, 0},
- {"TIOCSSERIAL", Const, 0},
- {"TIOCSSIZE", Const, 1},
- {"TIOCSSOFTCAR", Const, 0},
- {"TIOCSTART", Const, 0},
- {"TIOCSTAT", Const, 0},
- {"TIOCSTI", Const, 0},
- {"TIOCSTOP", Const, 0},
- {"TIOCSTSTAMP", Const, 1},
- {"TIOCSWINSZ", Const, 0},
- {"TIOCTIMESTAMP", Const, 0},
- {"TIOCUCNTL", Const, 0},
- {"TIOCVHANGUP", Const, 0},
- {"TIOCXMTFRAME", Const, 1},
- {"TOKEN_ADJUST_DEFAULT", Const, 0},
- {"TOKEN_ADJUST_GROUPS", Const, 0},
- {"TOKEN_ADJUST_PRIVILEGES", Const, 0},
- {"TOKEN_ADJUST_SESSIONID", Const, 11},
- {"TOKEN_ALL_ACCESS", Const, 0},
- {"TOKEN_ASSIGN_PRIMARY", Const, 0},
- {"TOKEN_DUPLICATE", Const, 0},
- {"TOKEN_EXECUTE", Const, 0},
- {"TOKEN_IMPERSONATE", Const, 0},
- {"TOKEN_QUERY", Const, 0},
- {"TOKEN_QUERY_SOURCE", Const, 0},
- {"TOKEN_READ", Const, 0},
- {"TOKEN_WRITE", Const, 0},
- {"TOSTOP", Const, 0},
- {"TRUNCATE_EXISTING", Const, 0},
- {"TUNATTACHFILTER", Const, 0},
- {"TUNDETACHFILTER", Const, 0},
- {"TUNGETFEATURES", Const, 0},
- {"TUNGETIFF", Const, 0},
- {"TUNGETSNDBUF", Const, 0},
- {"TUNGETVNETHDRSZ", Const, 0},
- {"TUNSETDEBUG", Const, 0},
- {"TUNSETGROUP", Const, 0},
- {"TUNSETIFF", Const, 0},
- {"TUNSETLINK", Const, 0},
- {"TUNSETNOCSUM", Const, 0},
- {"TUNSETOFFLOAD", Const, 0},
- {"TUNSETOWNER", Const, 0},
- {"TUNSETPERSIST", Const, 0},
- {"TUNSETSNDBUF", Const, 0},
- {"TUNSETTXFILTER", Const, 0},
- {"TUNSETVNETHDRSZ", Const, 0},
- {"Tee", Func, 0},
- {"TerminateProcess", Func, 0},
- {"Termios", Type, 0},
- {"Termios.Cc", Field, 0},
- {"Termios.Cflag", Field, 0},
- {"Termios.Iflag", Field, 0},
- {"Termios.Ispeed", Field, 0},
- {"Termios.Lflag", Field, 0},
- {"Termios.Line", Field, 0},
- {"Termios.Oflag", Field, 0},
- {"Termios.Ospeed", Field, 0},
- {"Termios.Pad_cgo_0", Field, 0},
- {"Tgkill", Func, 0},
- {"Time", Func, 0},
- {"Time_t", Type, 0},
- {"Times", Func, 0},
- {"Timespec", Type, 0},
- {"Timespec.Nsec", Field, 0},
- {"Timespec.Pad_cgo_0", Field, 2},
- {"Timespec.Sec", Field, 0},
- {"TimespecToNsec", Func, 0},
- {"Timeval", Type, 0},
- {"Timeval.Pad_cgo_0", Field, 0},
- {"Timeval.Sec", Field, 0},
- {"Timeval.Usec", Field, 0},
- {"Timeval32", Type, 0},
- {"Timeval32.Sec", Field, 0},
- {"Timeval32.Usec", Field, 0},
- {"TimevalToNsec", Func, 0},
- {"Timex", Type, 0},
- {"Timex.Calcnt", Field, 0},
- {"Timex.Constant", Field, 0},
- {"Timex.Errcnt", Field, 0},
- {"Timex.Esterror", Field, 0},
- {"Timex.Freq", Field, 0},
- {"Timex.Jitcnt", Field, 0},
- {"Timex.Jitter", Field, 0},
- {"Timex.Maxerror", Field, 0},
- {"Timex.Modes", Field, 0},
- {"Timex.Offset", Field, 0},
- {"Timex.Pad_cgo_0", Field, 0},
- {"Timex.Pad_cgo_1", Field, 0},
- {"Timex.Pad_cgo_2", Field, 0},
- {"Timex.Pad_cgo_3", Field, 0},
- {"Timex.Ppsfreq", Field, 0},
- {"Timex.Precision", Field, 0},
- {"Timex.Shift", Field, 0},
- {"Timex.Stabil", Field, 0},
- {"Timex.Status", Field, 0},
- {"Timex.Stbcnt", Field, 0},
- {"Timex.Tai", Field, 0},
- {"Timex.Tick", Field, 0},
- {"Timex.Time", Field, 0},
- {"Timex.Tolerance", Field, 0},
- {"Timezoneinformation", Type, 0},
- {"Timezoneinformation.Bias", Field, 0},
- {"Timezoneinformation.DaylightBias", Field, 0},
- {"Timezoneinformation.DaylightDate", Field, 0},
- {"Timezoneinformation.DaylightName", Field, 0},
- {"Timezoneinformation.StandardBias", Field, 0},
- {"Timezoneinformation.StandardDate", Field, 0},
- {"Timezoneinformation.StandardName", Field, 0},
- {"Tms", Type, 0},
- {"Tms.Cstime", Field, 0},
- {"Tms.Cutime", Field, 0},
- {"Tms.Stime", Field, 0},
- {"Tms.Utime", Field, 0},
- {"Token", Type, 0},
- {"TokenAccessInformation", Const, 0},
- {"TokenAuditPolicy", Const, 0},
- {"TokenDefaultDacl", Const, 0},
- {"TokenElevation", Const, 0},
- {"TokenElevationType", Const, 0},
- {"TokenGroups", Const, 0},
- {"TokenGroupsAndPrivileges", Const, 0},
- {"TokenHasRestrictions", Const, 0},
- {"TokenImpersonationLevel", Const, 0},
- {"TokenIntegrityLevel", Const, 0},
- {"TokenLinkedToken", Const, 0},
- {"TokenLogonSid", Const, 0},
- {"TokenMandatoryPolicy", Const, 0},
- {"TokenOrigin", Const, 0},
- {"TokenOwner", Const, 0},
- {"TokenPrimaryGroup", Const, 0},
- {"TokenPrivileges", Const, 0},
- {"TokenRestrictedSids", Const, 0},
- {"TokenSandBoxInert", Const, 0},
- {"TokenSessionId", Const, 0},
- {"TokenSessionReference", Const, 0},
- {"TokenSource", Const, 0},
- {"TokenStatistics", Const, 0},
- {"TokenType", Const, 0},
- {"TokenUIAccess", Const, 0},
- {"TokenUser", Const, 0},
- {"TokenVirtualizationAllowed", Const, 0},
- {"TokenVirtualizationEnabled", Const, 0},
- {"Tokenprimarygroup", Type, 0},
- {"Tokenprimarygroup.PrimaryGroup", Field, 0},
- {"Tokenuser", Type, 0},
- {"Tokenuser.User", Field, 0},
- {"TranslateAccountName", Func, 0},
- {"TranslateName", Func, 0},
- {"TransmitFile", Func, 0},
- {"TransmitFileBuffers", Type, 0},
- {"TransmitFileBuffers.Head", Field, 0},
- {"TransmitFileBuffers.HeadLength", Field, 0},
- {"TransmitFileBuffers.Tail", Field, 0},
- {"TransmitFileBuffers.TailLength", Field, 0},
- {"Truncate", Func, 0},
- {"UNIX_PATH_MAX", Const, 12},
- {"USAGE_MATCH_TYPE_AND", Const, 0},
- {"USAGE_MATCH_TYPE_OR", Const, 0},
- {"UTF16FromString", Func, 1},
- {"UTF16PtrFromString", Func, 1},
- {"UTF16ToString", Func, 0},
- {"Ucred", Type, 0},
- {"Ucred.Gid", Field, 0},
- {"Ucred.Pid", Field, 0},
- {"Ucred.Uid", Field, 0},
- {"Umask", Func, 0},
- {"Uname", Func, 0},
- {"Undelete", Func, 0},
- {"UnixCredentials", Func, 0},
- {"UnixRights", Func, 0},
- {"Unlink", Func, 0},
- {"Unlinkat", Func, 0},
- {"UnmapViewOfFile", Func, 0},
- {"Unmount", Func, 0},
- {"Unsetenv", Func, 4},
- {"Unshare", Func, 0},
- {"UserInfo10", Type, 0},
- {"UserInfo10.Comment", Field, 0},
- {"UserInfo10.FullName", Field, 0},
- {"UserInfo10.Name", Field, 0},
- {"UserInfo10.UsrComment", Field, 0},
- {"Ustat", Func, 0},
- {"Ustat_t", Type, 0},
- {"Ustat_t.Fname", Field, 0},
- {"Ustat_t.Fpack", Field, 0},
- {"Ustat_t.Pad_cgo_0", Field, 0},
- {"Ustat_t.Pad_cgo_1", Field, 0},
- {"Ustat_t.Tfree", Field, 0},
- {"Ustat_t.Tinode", Field, 0},
- {"Utimbuf", Type, 0},
- {"Utimbuf.Actime", Field, 0},
- {"Utimbuf.Modtime", Field, 0},
- {"Utime", Func, 0},
- {"Utimes", Func, 0},
- {"UtimesNano", Func, 1},
- {"Utsname", Type, 0},
- {"Utsname.Domainname", Field, 0},
- {"Utsname.Machine", Field, 0},
- {"Utsname.Nodename", Field, 0},
- {"Utsname.Release", Field, 0},
- {"Utsname.Sysname", Field, 0},
- {"Utsname.Version", Field, 0},
- {"VDISCARD", Const, 0},
- {"VDSUSP", Const, 1},
- {"VEOF", Const, 0},
- {"VEOL", Const, 0},
- {"VEOL2", Const, 0},
- {"VERASE", Const, 0},
- {"VERASE2", Const, 1},
- {"VINTR", Const, 0},
- {"VKILL", Const, 0},
- {"VLNEXT", Const, 0},
- {"VMIN", Const, 0},
- {"VQUIT", Const, 0},
- {"VREPRINT", Const, 0},
- {"VSTART", Const, 0},
- {"VSTATUS", Const, 1},
- {"VSTOP", Const, 0},
- {"VSUSP", Const, 0},
- {"VSWTC", Const, 0},
- {"VT0", Const, 1},
- {"VT1", Const, 1},
- {"VTDLY", Const, 1},
- {"VTIME", Const, 0},
- {"VWERASE", Const, 0},
- {"VirtualLock", Func, 0},
- {"VirtualUnlock", Func, 0},
- {"WAIT_ABANDONED", Const, 0},
- {"WAIT_FAILED", Const, 0},
- {"WAIT_OBJECT_0", Const, 0},
- {"WAIT_TIMEOUT", Const, 0},
- {"WALL", Const, 0},
- {"WALLSIG", Const, 1},
- {"WALTSIG", Const, 1},
- {"WCLONE", Const, 0},
- {"WCONTINUED", Const, 0},
- {"WCOREFLAG", Const, 0},
- {"WEXITED", Const, 0},
- {"WLINUXCLONE", Const, 0},
- {"WNOHANG", Const, 0},
- {"WNOTHREAD", Const, 0},
- {"WNOWAIT", Const, 0},
- {"WNOZOMBIE", Const, 1},
- {"WOPTSCHECKED", Const, 1},
- {"WORDSIZE", Const, 0},
- {"WSABuf", Type, 0},
- {"WSABuf.Buf", Field, 0},
- {"WSABuf.Len", Field, 0},
- {"WSACleanup", Func, 0},
- {"WSADESCRIPTION_LEN", Const, 0},
- {"WSAData", Type, 0},
- {"WSAData.Description", Field, 0},
- {"WSAData.HighVersion", Field, 0},
- {"WSAData.MaxSockets", Field, 0},
- {"WSAData.MaxUdpDg", Field, 0},
- {"WSAData.SystemStatus", Field, 0},
- {"WSAData.VendorInfo", Field, 0},
- {"WSAData.Version", Field, 0},
- {"WSAEACCES", Const, 2},
- {"WSAECONNABORTED", Const, 9},
- {"WSAECONNRESET", Const, 3},
- {"WSAENOPROTOOPT", Const, 23},
- {"WSAEnumProtocols", Func, 2},
- {"WSAID_CONNECTEX", Var, 1},
- {"WSAIoctl", Func, 0},
- {"WSAPROTOCOL_LEN", Const, 2},
- {"WSAProtocolChain", Type, 2},
- {"WSAProtocolChain.ChainEntries", Field, 2},
- {"WSAProtocolChain.ChainLen", Field, 2},
- {"WSAProtocolInfo", Type, 2},
- {"WSAProtocolInfo.AddressFamily", Field, 2},
- {"WSAProtocolInfo.CatalogEntryId", Field, 2},
- {"WSAProtocolInfo.MaxSockAddr", Field, 2},
- {"WSAProtocolInfo.MessageSize", Field, 2},
- {"WSAProtocolInfo.MinSockAddr", Field, 2},
- {"WSAProtocolInfo.NetworkByteOrder", Field, 2},
- {"WSAProtocolInfo.Protocol", Field, 2},
- {"WSAProtocolInfo.ProtocolChain", Field, 2},
- {"WSAProtocolInfo.ProtocolMaxOffset", Field, 2},
- {"WSAProtocolInfo.ProtocolName", Field, 2},
- {"WSAProtocolInfo.ProviderFlags", Field, 2},
- {"WSAProtocolInfo.ProviderId", Field, 2},
- {"WSAProtocolInfo.ProviderReserved", Field, 2},
- {"WSAProtocolInfo.SecurityScheme", Field, 2},
- {"WSAProtocolInfo.ServiceFlags1", Field, 2},
- {"WSAProtocolInfo.ServiceFlags2", Field, 2},
- {"WSAProtocolInfo.ServiceFlags3", Field, 2},
- {"WSAProtocolInfo.ServiceFlags4", Field, 2},
- {"WSAProtocolInfo.SocketType", Field, 2},
- {"WSAProtocolInfo.Version", Field, 2},
- {"WSARecv", Func, 0},
- {"WSARecvFrom", Func, 0},
- {"WSASYS_STATUS_LEN", Const, 0},
- {"WSASend", Func, 0},
- {"WSASendTo", Func, 0},
- {"WSASendto", Func, 0},
- {"WSAStartup", Func, 0},
- {"WSTOPPED", Const, 0},
- {"WTRAPPED", Const, 1},
- {"WUNTRACED", Const, 0},
- {"Wait4", Func, 0},
- {"WaitForSingleObject", Func, 0},
- {"WaitStatus", Type, 0},
- {"WaitStatus.ExitCode", Field, 0},
- {"Win32FileAttributeData", Type, 0},
- {"Win32FileAttributeData.CreationTime", Field, 0},
- {"Win32FileAttributeData.FileAttributes", Field, 0},
- {"Win32FileAttributeData.FileSizeHigh", Field, 0},
- {"Win32FileAttributeData.FileSizeLow", Field, 0},
- {"Win32FileAttributeData.LastAccessTime", Field, 0},
- {"Win32FileAttributeData.LastWriteTime", Field, 0},
- {"Win32finddata", Type, 0},
- {"Win32finddata.AlternateFileName", Field, 0},
- {"Win32finddata.CreationTime", Field, 0},
- {"Win32finddata.FileAttributes", Field, 0},
- {"Win32finddata.FileName", Field, 0},
- {"Win32finddata.FileSizeHigh", Field, 0},
- {"Win32finddata.FileSizeLow", Field, 0},
- {"Win32finddata.LastAccessTime", Field, 0},
- {"Win32finddata.LastWriteTime", Field, 0},
- {"Win32finddata.Reserved0", Field, 0},
- {"Win32finddata.Reserved1", Field, 0},
- {"Write", Func, 0},
- {"WriteConsole", Func, 1},
- {"WriteFile", Func, 0},
- {"X509_ASN_ENCODING", Const, 0},
- {"XCASE", Const, 0},
- {"XP1_CONNECTIONLESS", Const, 2},
- {"XP1_CONNECT_DATA", Const, 2},
- {"XP1_DISCONNECT_DATA", Const, 2},
- {"XP1_EXPEDITED_DATA", Const, 2},
- {"XP1_GRACEFUL_CLOSE", Const, 2},
- {"XP1_GUARANTEED_DELIVERY", Const, 2},
- {"XP1_GUARANTEED_ORDER", Const, 2},
- {"XP1_IFS_HANDLES", Const, 2},
- {"XP1_MESSAGE_ORIENTED", Const, 2},
- {"XP1_MULTIPOINT_CONTROL_PLANE", Const, 2},
- {"XP1_MULTIPOINT_DATA_PLANE", Const, 2},
- {"XP1_PARTIAL_MESSAGE", Const, 2},
- {"XP1_PSEUDO_STREAM", Const, 2},
- {"XP1_QOS_SUPPORTED", Const, 2},
- {"XP1_SAN_SUPPORT_SDP", Const, 2},
- {"XP1_SUPPORT_BROADCAST", Const, 2},
- {"XP1_SUPPORT_MULTIPOINT", Const, 2},
- {"XP1_UNI_RECV", Const, 2},
- {"XP1_UNI_SEND", Const, 2},
- },
- "syscall/js": {
- {"CopyBytesToGo", Func, 0},
- {"CopyBytesToJS", Func, 0},
- {"Error", Type, 0},
- {"Func", Type, 0},
- {"FuncOf", Func, 0},
- {"Global", Func, 0},
- {"Null", Func, 0},
- {"Type", Type, 0},
- {"TypeBoolean", Const, 0},
- {"TypeFunction", Const, 0},
- {"TypeNull", Const, 0},
- {"TypeNumber", Const, 0},
- {"TypeObject", Const, 0},
- {"TypeString", Const, 0},
- {"TypeSymbol", Const, 0},
- {"TypeUndefined", Const, 0},
- {"Undefined", Func, 0},
- {"Value", Type, 0},
- {"ValueError", Type, 0},
- {"ValueOf", Func, 0},
- },
- "testing": {
- {"(*B).Cleanup", Method, 14},
- {"(*B).Elapsed", Method, 20},
- {"(*B).Error", Method, 0},
- {"(*B).Errorf", Method, 0},
- {"(*B).Fail", Method, 0},
- {"(*B).FailNow", Method, 0},
- {"(*B).Failed", Method, 0},
- {"(*B).Fatal", Method, 0},
- {"(*B).Fatalf", Method, 0},
- {"(*B).Helper", Method, 9},
- {"(*B).Log", Method, 0},
- {"(*B).Logf", Method, 0},
- {"(*B).Name", Method, 8},
- {"(*B).ReportAllocs", Method, 1},
- {"(*B).ReportMetric", Method, 13},
- {"(*B).ResetTimer", Method, 0},
- {"(*B).Run", Method, 7},
- {"(*B).RunParallel", Method, 3},
- {"(*B).SetBytes", Method, 0},
- {"(*B).SetParallelism", Method, 3},
- {"(*B).Setenv", Method, 17},
- {"(*B).Skip", Method, 1},
- {"(*B).SkipNow", Method, 1},
- {"(*B).Skipf", Method, 1},
- {"(*B).Skipped", Method, 1},
- {"(*B).StartTimer", Method, 0},
- {"(*B).StopTimer", Method, 0},
- {"(*B).TempDir", Method, 15},
- {"(*F).Add", Method, 18},
- {"(*F).Cleanup", Method, 18},
- {"(*F).Error", Method, 18},
- {"(*F).Errorf", Method, 18},
- {"(*F).Fail", Method, 18},
- {"(*F).FailNow", Method, 18},
- {"(*F).Failed", Method, 18},
- {"(*F).Fatal", Method, 18},
- {"(*F).Fatalf", Method, 18},
- {"(*F).Fuzz", Method, 18},
- {"(*F).Helper", Method, 18},
- {"(*F).Log", Method, 18},
- {"(*F).Logf", Method, 18},
- {"(*F).Name", Method, 18},
- {"(*F).Setenv", Method, 18},
- {"(*F).Skip", Method, 18},
- {"(*F).SkipNow", Method, 18},
- {"(*F).Skipf", Method, 18},
- {"(*F).Skipped", Method, 18},
- {"(*F).TempDir", Method, 18},
- {"(*M).Run", Method, 4},
- {"(*PB).Next", Method, 3},
- {"(*T).Cleanup", Method, 14},
- {"(*T).Deadline", Method, 15},
- {"(*T).Error", Method, 0},
- {"(*T).Errorf", Method, 0},
- {"(*T).Fail", Method, 0},
- {"(*T).FailNow", Method, 0},
- {"(*T).Failed", Method, 0},
- {"(*T).Fatal", Method, 0},
- {"(*T).Fatalf", Method, 0},
- {"(*T).Helper", Method, 9},
- {"(*T).Log", Method, 0},
- {"(*T).Logf", Method, 0},
- {"(*T).Name", Method, 8},
- {"(*T).Parallel", Method, 0},
- {"(*T).Run", Method, 7},
- {"(*T).Setenv", Method, 17},
- {"(*T).Skip", Method, 1},
- {"(*T).SkipNow", Method, 1},
- {"(*T).Skipf", Method, 1},
- {"(*T).Skipped", Method, 1},
- {"(*T).TempDir", Method, 15},
- {"(BenchmarkResult).AllocedBytesPerOp", Method, 1},
- {"(BenchmarkResult).AllocsPerOp", Method, 1},
- {"(BenchmarkResult).MemString", Method, 1},
- {"(BenchmarkResult).NsPerOp", Method, 0},
- {"(BenchmarkResult).String", Method, 0},
- {"AllocsPerRun", Func, 1},
- {"B", Type, 0},
- {"B.N", Field, 0},
- {"Benchmark", Func, 0},
- {"BenchmarkResult", Type, 0},
- {"BenchmarkResult.Bytes", Field, 0},
- {"BenchmarkResult.Extra", Field, 13},
- {"BenchmarkResult.MemAllocs", Field, 1},
- {"BenchmarkResult.MemBytes", Field, 1},
- {"BenchmarkResult.N", Field, 0},
- {"BenchmarkResult.T", Field, 0},
- {"Cover", Type, 2},
- {"Cover.Blocks", Field, 2},
- {"Cover.Counters", Field, 2},
- {"Cover.CoveredPackages", Field, 2},
- {"Cover.Mode", Field, 2},
- {"CoverBlock", Type, 2},
- {"CoverBlock.Col0", Field, 2},
- {"CoverBlock.Col1", Field, 2},
- {"CoverBlock.Line0", Field, 2},
- {"CoverBlock.Line1", Field, 2},
- {"CoverBlock.Stmts", Field, 2},
- {"CoverMode", Func, 8},
- {"Coverage", Func, 4},
- {"F", Type, 18},
- {"Init", Func, 13},
- {"InternalBenchmark", Type, 0},
- {"InternalBenchmark.F", Field, 0},
- {"InternalBenchmark.Name", Field, 0},
- {"InternalExample", Type, 0},
- {"InternalExample.F", Field, 0},
- {"InternalExample.Name", Field, 0},
- {"InternalExample.Output", Field, 0},
- {"InternalExample.Unordered", Field, 7},
- {"InternalFuzzTarget", Type, 18},
- {"InternalFuzzTarget.Fn", Field, 18},
- {"InternalFuzzTarget.Name", Field, 18},
- {"InternalTest", Type, 0},
- {"InternalTest.F", Field, 0},
- {"InternalTest.Name", Field, 0},
- {"M", Type, 4},
- {"Main", Func, 0},
- {"MainStart", Func, 4},
- {"PB", Type, 3},
- {"RegisterCover", Func, 2},
- {"RunBenchmarks", Func, 0},
- {"RunExamples", Func, 0},
- {"RunTests", Func, 0},
- {"Short", Func, 0},
- {"T", Type, 0},
- {"TB", Type, 2},
- {"Testing", Func, 21},
- {"Verbose", Func, 1},
- },
- "testing/fstest": {
- {"(MapFS).Glob", Method, 16},
- {"(MapFS).Open", Method, 16},
- {"(MapFS).ReadDir", Method, 16},
- {"(MapFS).ReadFile", Method, 16},
- {"(MapFS).Stat", Method, 16},
- {"(MapFS).Sub", Method, 16},
- {"MapFS", Type, 16},
- {"MapFile", Type, 16},
- {"MapFile.Data", Field, 16},
- {"MapFile.ModTime", Field, 16},
- {"MapFile.Mode", Field, 16},
- {"MapFile.Sys", Field, 16},
- {"TestFS", Func, 16},
- },
- "testing/iotest": {
- {"DataErrReader", Func, 0},
- {"ErrReader", Func, 16},
- {"ErrTimeout", Var, 0},
- {"HalfReader", Func, 0},
- {"NewReadLogger", Func, 0},
- {"NewWriteLogger", Func, 0},
- {"OneByteReader", Func, 0},
- {"TestReader", Func, 16},
- {"TimeoutReader", Func, 0},
- {"TruncateWriter", Func, 0},
- },
- "testing/quick": {
- {"(*CheckEqualError).Error", Method, 0},
- {"(*CheckError).Error", Method, 0},
- {"(SetupError).Error", Method, 0},
- {"Check", Func, 0},
- {"CheckEqual", Func, 0},
- {"CheckEqualError", Type, 0},
- {"CheckEqualError.CheckError", Field, 0},
- {"CheckEqualError.Out1", Field, 0},
- {"CheckEqualError.Out2", Field, 0},
- {"CheckError", Type, 0},
- {"CheckError.Count", Field, 0},
- {"CheckError.In", Field, 0},
- {"Config", Type, 0},
- {"Config.MaxCount", Field, 0},
- {"Config.MaxCountScale", Field, 0},
- {"Config.Rand", Field, 0},
- {"Config.Values", Field, 0},
- {"Generator", Type, 0},
- {"SetupError", Type, 0},
- {"Value", Func, 0},
- },
- "testing/slogtest": {
- {"Run", Func, 22},
- {"TestHandler", Func, 21},
- },
- "text/scanner": {
- {"(*Position).IsValid", Method, 0},
- {"(*Scanner).Init", Method, 0},
- {"(*Scanner).IsValid", Method, 0},
- {"(*Scanner).Next", Method, 0},
- {"(*Scanner).Peek", Method, 0},
- {"(*Scanner).Pos", Method, 0},
- {"(*Scanner).Scan", Method, 0},
- {"(*Scanner).TokenText", Method, 0},
- {"(Position).String", Method, 0},
- {"(Scanner).String", Method, 0},
- {"Char", Const, 0},
- {"Comment", Const, 0},
- {"EOF", Const, 0},
- {"Float", Const, 0},
- {"GoTokens", Const, 0},
- {"GoWhitespace", Const, 0},
- {"Ident", Const, 0},
- {"Int", Const, 0},
- {"Position", Type, 0},
- {"Position.Column", Field, 0},
- {"Position.Filename", Field, 0},
- {"Position.Line", Field, 0},
- {"Position.Offset", Field, 0},
- {"RawString", Const, 0},
- {"ScanChars", Const, 0},
- {"ScanComments", Const, 0},
- {"ScanFloats", Const, 0},
- {"ScanIdents", Const, 0},
- {"ScanInts", Const, 0},
- {"ScanRawStrings", Const, 0},
- {"ScanStrings", Const, 0},
- {"Scanner", Type, 0},
- {"Scanner.Error", Field, 0},
- {"Scanner.ErrorCount", Field, 0},
- {"Scanner.IsIdentRune", Field, 4},
- {"Scanner.Mode", Field, 0},
- {"Scanner.Position", Field, 0},
- {"Scanner.Whitespace", Field, 0},
- {"SkipComments", Const, 0},
- {"String", Const, 0},
- {"TokenString", Func, 0},
- },
- "text/tabwriter": {
- {"(*Writer).Flush", Method, 0},
- {"(*Writer).Init", Method, 0},
- {"(*Writer).Write", Method, 0},
- {"AlignRight", Const, 0},
- {"Debug", Const, 0},
- {"DiscardEmptyColumns", Const, 0},
- {"Escape", Const, 0},
- {"FilterHTML", Const, 0},
- {"NewWriter", Func, 0},
- {"StripEscape", Const, 0},
- {"TabIndent", Const, 0},
- {"Writer", Type, 0},
- },
- "text/template": {
- {"(*Template).AddParseTree", Method, 0},
- {"(*Template).Clone", Method, 0},
- {"(*Template).DefinedTemplates", Method, 5},
- {"(*Template).Delims", Method, 0},
- {"(*Template).Execute", Method, 0},
- {"(*Template).ExecuteTemplate", Method, 0},
- {"(*Template).Funcs", Method, 0},
- {"(*Template).Lookup", Method, 0},
- {"(*Template).Name", Method, 0},
- {"(*Template).New", Method, 0},
- {"(*Template).Option", Method, 5},
- {"(*Template).Parse", Method, 0},
- {"(*Template).ParseFS", Method, 16},
- {"(*Template).ParseFiles", Method, 0},
- {"(*Template).ParseGlob", Method, 0},
- {"(*Template).Templates", Method, 0},
- {"(ExecError).Error", Method, 6},
- {"(ExecError).Unwrap", Method, 13},
- {"(Template).Copy", Method, 2},
- {"(Template).ErrorContext", Method, 1},
- {"ExecError", Type, 6},
- {"ExecError.Err", Field, 6},
- {"ExecError.Name", Field, 6},
- {"FuncMap", Type, 0},
- {"HTMLEscape", Func, 0},
- {"HTMLEscapeString", Func, 0},
- {"HTMLEscaper", Func, 0},
- {"IsTrue", Func, 6},
- {"JSEscape", Func, 0},
- {"JSEscapeString", Func, 0},
- {"JSEscaper", Func, 0},
- {"Must", Func, 0},
- {"New", Func, 0},
- {"ParseFS", Func, 16},
- {"ParseFiles", Func, 0},
- {"ParseGlob", Func, 0},
- {"Template", Type, 0},
- {"Template.Tree", Field, 0},
- {"URLQueryEscaper", Func, 0},
- },
- "text/template/parse": {
- {"(*ActionNode).Copy", Method, 0},
- {"(*ActionNode).String", Method, 0},
- {"(*BoolNode).Copy", Method, 0},
- {"(*BoolNode).String", Method, 0},
- {"(*BranchNode).Copy", Method, 4},
- {"(*BranchNode).String", Method, 0},
- {"(*BreakNode).Copy", Method, 18},
- {"(*BreakNode).String", Method, 18},
- {"(*ChainNode).Add", Method, 1},
- {"(*ChainNode).Copy", Method, 1},
- {"(*ChainNode).String", Method, 1},
- {"(*CommandNode).Copy", Method, 0},
- {"(*CommandNode).String", Method, 0},
- {"(*CommentNode).Copy", Method, 16},
- {"(*CommentNode).String", Method, 16},
- {"(*ContinueNode).Copy", Method, 18},
- {"(*ContinueNode).String", Method, 18},
- {"(*DotNode).Copy", Method, 0},
- {"(*DotNode).String", Method, 0},
- {"(*DotNode).Type", Method, 0},
- {"(*FieldNode).Copy", Method, 0},
- {"(*FieldNode).String", Method, 0},
- {"(*IdentifierNode).Copy", Method, 0},
- {"(*IdentifierNode).SetPos", Method, 1},
- {"(*IdentifierNode).SetTree", Method, 4},
- {"(*IdentifierNode).String", Method, 0},
- {"(*IfNode).Copy", Method, 0},
- {"(*IfNode).String", Method, 0},
- {"(*ListNode).Copy", Method, 0},
- {"(*ListNode).CopyList", Method, 0},
- {"(*ListNode).String", Method, 0},
- {"(*NilNode).Copy", Method, 1},
- {"(*NilNode).String", Method, 1},
- {"(*NilNode).Type", Method, 1},
- {"(*NumberNode).Copy", Method, 0},
- {"(*NumberNode).String", Method, 0},
- {"(*PipeNode).Copy", Method, 0},
- {"(*PipeNode).CopyPipe", Method, 0},
- {"(*PipeNode).String", Method, 0},
- {"(*RangeNode).Copy", Method, 0},
- {"(*RangeNode).String", Method, 0},
- {"(*StringNode).Copy", Method, 0},
- {"(*StringNode).String", Method, 0},
- {"(*TemplateNode).Copy", Method, 0},
- {"(*TemplateNode).String", Method, 0},
- {"(*TextNode).Copy", Method, 0},
- {"(*TextNode).String", Method, 0},
- {"(*Tree).Copy", Method, 2},
- {"(*Tree).ErrorContext", Method, 1},
- {"(*Tree).Parse", Method, 0},
- {"(*VariableNode).Copy", Method, 0},
- {"(*VariableNode).String", Method, 0},
- {"(*WithNode).Copy", Method, 0},
- {"(*WithNode).String", Method, 0},
- {"(ActionNode).Position", Method, 1},
- {"(ActionNode).Type", Method, 0},
- {"(BoolNode).Position", Method, 1},
- {"(BoolNode).Type", Method, 0},
- {"(BranchNode).Position", Method, 1},
- {"(BranchNode).Type", Method, 0},
- {"(BreakNode).Position", Method, 18},
- {"(BreakNode).Type", Method, 18},
- {"(ChainNode).Position", Method, 1},
- {"(ChainNode).Type", Method, 1},
- {"(CommandNode).Position", Method, 1},
- {"(CommandNode).Type", Method, 0},
- {"(CommentNode).Position", Method, 16},
- {"(CommentNode).Type", Method, 16},
- {"(ContinueNode).Position", Method, 18},
- {"(ContinueNode).Type", Method, 18},
- {"(DotNode).Position", Method, 1},
- {"(FieldNode).Position", Method, 1},
- {"(FieldNode).Type", Method, 0},
- {"(IdentifierNode).Position", Method, 1},
- {"(IdentifierNode).Type", Method, 0},
- {"(IfNode).Position", Method, 1},
- {"(IfNode).Type", Method, 0},
- {"(ListNode).Position", Method, 1},
- {"(ListNode).Type", Method, 0},
- {"(NilNode).Position", Method, 1},
- {"(NodeType).Type", Method, 0},
- {"(NumberNode).Position", Method, 1},
- {"(NumberNode).Type", Method, 0},
- {"(PipeNode).Position", Method, 1},
- {"(PipeNode).Type", Method, 0},
- {"(Pos).Position", Method, 1},
- {"(RangeNode).Position", Method, 1},
- {"(RangeNode).Type", Method, 0},
- {"(StringNode).Position", Method, 1},
- {"(StringNode).Type", Method, 0},
- {"(TemplateNode).Position", Method, 1},
- {"(TemplateNode).Type", Method, 0},
- {"(TextNode).Position", Method, 1},
- {"(TextNode).Type", Method, 0},
- {"(VariableNode).Position", Method, 1},
- {"(VariableNode).Type", Method, 0},
- {"(WithNode).Position", Method, 1},
- {"(WithNode).Type", Method, 0},
- {"ActionNode", Type, 0},
- {"ActionNode.Line", Field, 0},
- {"ActionNode.NodeType", Field, 0},
- {"ActionNode.Pipe", Field, 0},
- {"ActionNode.Pos", Field, 1},
- {"BoolNode", Type, 0},
- {"BoolNode.NodeType", Field, 0},
- {"BoolNode.Pos", Field, 1},
- {"BoolNode.True", Field, 0},
- {"BranchNode", Type, 0},
- {"BranchNode.ElseList", Field, 0},
- {"BranchNode.Line", Field, 0},
- {"BranchNode.List", Field, 0},
- {"BranchNode.NodeType", Field, 0},
- {"BranchNode.Pipe", Field, 0},
- {"BranchNode.Pos", Field, 1},
- {"BreakNode", Type, 18},
- {"BreakNode.Line", Field, 18},
- {"BreakNode.NodeType", Field, 18},
- {"BreakNode.Pos", Field, 18},
- {"ChainNode", Type, 1},
- {"ChainNode.Field", Field, 1},
- {"ChainNode.Node", Field, 1},
- {"ChainNode.NodeType", Field, 1},
- {"ChainNode.Pos", Field, 1},
- {"CommandNode", Type, 0},
- {"CommandNode.Args", Field, 0},
- {"CommandNode.NodeType", Field, 0},
- {"CommandNode.Pos", Field, 1},
- {"CommentNode", Type, 16},
- {"CommentNode.NodeType", Field, 16},
- {"CommentNode.Pos", Field, 16},
- {"CommentNode.Text", Field, 16},
- {"ContinueNode", Type, 18},
- {"ContinueNode.Line", Field, 18},
- {"ContinueNode.NodeType", Field, 18},
- {"ContinueNode.Pos", Field, 18},
- {"DotNode", Type, 0},
- {"DotNode.NodeType", Field, 4},
- {"DotNode.Pos", Field, 1},
- {"FieldNode", Type, 0},
- {"FieldNode.Ident", Field, 0},
- {"FieldNode.NodeType", Field, 0},
- {"FieldNode.Pos", Field, 1},
- {"IdentifierNode", Type, 0},
- {"IdentifierNode.Ident", Field, 0},
- {"IdentifierNode.NodeType", Field, 0},
- {"IdentifierNode.Pos", Field, 1},
- {"IfNode", Type, 0},
- {"IfNode.BranchNode", Field, 0},
- {"IsEmptyTree", Func, 0},
- {"ListNode", Type, 0},
- {"ListNode.NodeType", Field, 0},
- {"ListNode.Nodes", Field, 0},
- {"ListNode.Pos", Field, 1},
- {"Mode", Type, 16},
- {"New", Func, 0},
- {"NewIdentifier", Func, 0},
- {"NilNode", Type, 1},
- {"NilNode.NodeType", Field, 4},
- {"NilNode.Pos", Field, 1},
- {"Node", Type, 0},
- {"NodeAction", Const, 0},
- {"NodeBool", Const, 0},
- {"NodeBreak", Const, 18},
- {"NodeChain", Const, 1},
- {"NodeCommand", Const, 0},
- {"NodeComment", Const, 16},
- {"NodeContinue", Const, 18},
- {"NodeDot", Const, 0},
- {"NodeField", Const, 0},
- {"NodeIdentifier", Const, 0},
- {"NodeIf", Const, 0},
- {"NodeList", Const, 0},
- {"NodeNil", Const, 1},
- {"NodeNumber", Const, 0},
- {"NodePipe", Const, 0},
- {"NodeRange", Const, 0},
- {"NodeString", Const, 0},
- {"NodeTemplate", Const, 0},
- {"NodeText", Const, 0},
- {"NodeType", Type, 0},
- {"NodeVariable", Const, 0},
- {"NodeWith", Const, 0},
- {"NumberNode", Type, 0},
- {"NumberNode.Complex128", Field, 0},
- {"NumberNode.Float64", Field, 0},
- {"NumberNode.Int64", Field, 0},
- {"NumberNode.IsComplex", Field, 0},
- {"NumberNode.IsFloat", Field, 0},
- {"NumberNode.IsInt", Field, 0},
- {"NumberNode.IsUint", Field, 0},
- {"NumberNode.NodeType", Field, 0},
- {"NumberNode.Pos", Field, 1},
- {"NumberNode.Text", Field, 0},
- {"NumberNode.Uint64", Field, 0},
- {"Parse", Func, 0},
- {"ParseComments", Const, 16},
- {"PipeNode", Type, 0},
- {"PipeNode.Cmds", Field, 0},
- {"PipeNode.Decl", Field, 0},
- {"PipeNode.IsAssign", Field, 11},
- {"PipeNode.Line", Field, 0},
- {"PipeNode.NodeType", Field, 0},
- {"PipeNode.Pos", Field, 1},
- {"Pos", Type, 1},
- {"RangeNode", Type, 0},
- {"RangeNode.BranchNode", Field, 0},
- {"SkipFuncCheck", Const, 17},
- {"StringNode", Type, 0},
- {"StringNode.NodeType", Field, 0},
- {"StringNode.Pos", Field, 1},
- {"StringNode.Quoted", Field, 0},
- {"StringNode.Text", Field, 0},
- {"TemplateNode", Type, 0},
- {"TemplateNode.Line", Field, 0},
- {"TemplateNode.Name", Field, 0},
- {"TemplateNode.NodeType", Field, 0},
- {"TemplateNode.Pipe", Field, 0},
- {"TemplateNode.Pos", Field, 1},
- {"TextNode", Type, 0},
- {"TextNode.NodeType", Field, 0},
- {"TextNode.Pos", Field, 1},
- {"TextNode.Text", Field, 0},
- {"Tree", Type, 0},
- {"Tree.Mode", Field, 16},
- {"Tree.Name", Field, 0},
- {"Tree.ParseName", Field, 1},
- {"Tree.Root", Field, 0},
- {"VariableNode", Type, 0},
- {"VariableNode.Ident", Field, 0},
- {"VariableNode.NodeType", Field, 0},
- {"VariableNode.Pos", Field, 1},
- {"WithNode", Type, 0},
- {"WithNode.BranchNode", Field, 0},
- },
- "time": {
- {"(*Location).String", Method, 0},
- {"(*ParseError).Error", Method, 0},
- {"(*Ticker).Reset", Method, 15},
- {"(*Ticker).Stop", Method, 0},
- {"(*Time).GobDecode", Method, 0},
- {"(*Time).UnmarshalBinary", Method, 2},
- {"(*Time).UnmarshalJSON", Method, 0},
- {"(*Time).UnmarshalText", Method, 2},
- {"(*Timer).Reset", Method, 1},
- {"(*Timer).Stop", Method, 0},
- {"(Duration).Abs", Method, 19},
- {"(Duration).Hours", Method, 0},
- {"(Duration).Microseconds", Method, 13},
- {"(Duration).Milliseconds", Method, 13},
- {"(Duration).Minutes", Method, 0},
- {"(Duration).Nanoseconds", Method, 0},
- {"(Duration).Round", Method, 9},
- {"(Duration).Seconds", Method, 0},
- {"(Duration).String", Method, 0},
- {"(Duration).Truncate", Method, 9},
- {"(Month).String", Method, 0},
- {"(Time).Add", Method, 0},
- {"(Time).AddDate", Method, 0},
- {"(Time).After", Method, 0},
- {"(Time).AppendFormat", Method, 5},
- {"(Time).Before", Method, 0},
- {"(Time).Clock", Method, 0},
- {"(Time).Compare", Method, 20},
- {"(Time).Date", Method, 0},
- {"(Time).Day", Method, 0},
- {"(Time).Equal", Method, 0},
- {"(Time).Format", Method, 0},
- {"(Time).GoString", Method, 17},
- {"(Time).GobEncode", Method, 0},
- {"(Time).Hour", Method, 0},
- {"(Time).ISOWeek", Method, 0},
- {"(Time).In", Method, 0},
- {"(Time).IsDST", Method, 17},
- {"(Time).IsZero", Method, 0},
- {"(Time).Local", Method, 0},
- {"(Time).Location", Method, 0},
- {"(Time).MarshalBinary", Method, 2},
- {"(Time).MarshalJSON", Method, 0},
- {"(Time).MarshalText", Method, 2},
- {"(Time).Minute", Method, 0},
- {"(Time).Month", Method, 0},
- {"(Time).Nanosecond", Method, 0},
- {"(Time).Round", Method, 1},
- {"(Time).Second", Method, 0},
- {"(Time).String", Method, 0},
- {"(Time).Sub", Method, 0},
- {"(Time).Truncate", Method, 1},
- {"(Time).UTC", Method, 0},
- {"(Time).Unix", Method, 0},
- {"(Time).UnixMicro", Method, 17},
- {"(Time).UnixMilli", Method, 17},
- {"(Time).UnixNano", Method, 0},
- {"(Time).Weekday", Method, 0},
- {"(Time).Year", Method, 0},
- {"(Time).YearDay", Method, 1},
- {"(Time).Zone", Method, 0},
- {"(Time).ZoneBounds", Method, 19},
- {"(Weekday).String", Method, 0},
- {"ANSIC", Const, 0},
- {"After", Func, 0},
- {"AfterFunc", Func, 0},
- {"April", Const, 0},
- {"August", Const, 0},
- {"Date", Func, 0},
- {"DateOnly", Const, 20},
- {"DateTime", Const, 20},
- {"December", Const, 0},
- {"Duration", Type, 0},
- {"February", Const, 0},
- {"FixedZone", Func, 0},
- {"Friday", Const, 0},
- {"Hour", Const, 0},
- {"January", Const, 0},
- {"July", Const, 0},
- {"June", Const, 0},
- {"Kitchen", Const, 0},
- {"Layout", Const, 17},
- {"LoadLocation", Func, 0},
- {"LoadLocationFromTZData", Func, 10},
- {"Local", Var, 0},
- {"Location", Type, 0},
- {"March", Const, 0},
- {"May", Const, 0},
- {"Microsecond", Const, 0},
- {"Millisecond", Const, 0},
- {"Minute", Const, 0},
- {"Monday", Const, 0},
- {"Month", Type, 0},
- {"Nanosecond", Const, 0},
- {"NewTicker", Func, 0},
- {"NewTimer", Func, 0},
- {"November", Const, 0},
- {"Now", Func, 0},
- {"October", Const, 0},
- {"Parse", Func, 0},
- {"ParseDuration", Func, 0},
- {"ParseError", Type, 0},
- {"ParseError.Layout", Field, 0},
- {"ParseError.LayoutElem", Field, 0},
- {"ParseError.Message", Field, 0},
- {"ParseError.Value", Field, 0},
- {"ParseError.ValueElem", Field, 0},
- {"ParseInLocation", Func, 1},
- {"RFC1123", Const, 0},
- {"RFC1123Z", Const, 0},
- {"RFC3339", Const, 0},
- {"RFC3339Nano", Const, 0},
- {"RFC822", Const, 0},
- {"RFC822Z", Const, 0},
- {"RFC850", Const, 0},
- {"RubyDate", Const, 0},
- {"Saturday", Const, 0},
- {"Second", Const, 0},
- {"September", Const, 0},
- {"Since", Func, 0},
- {"Sleep", Func, 0},
- {"Stamp", Const, 0},
- {"StampMicro", Const, 0},
- {"StampMilli", Const, 0},
- {"StampNano", Const, 0},
- {"Sunday", Const, 0},
- {"Thursday", Const, 0},
- {"Tick", Func, 0},
- {"Ticker", Type, 0},
- {"Ticker.C", Field, 0},
- {"Time", Type, 0},
- {"TimeOnly", Const, 20},
- {"Timer", Type, 0},
- {"Timer.C", Field, 0},
- {"Tuesday", Const, 0},
- {"UTC", Var, 0},
- {"Unix", Func, 0},
- {"UnixDate", Const, 0},
- {"UnixMicro", Func, 17},
- {"UnixMilli", Func, 17},
- {"Until", Func, 8},
- {"Wednesday", Const, 0},
- {"Weekday", Type, 0},
- },
- "unicode": {
- {"(SpecialCase).ToLower", Method, 0},
- {"(SpecialCase).ToTitle", Method, 0},
- {"(SpecialCase).ToUpper", Method, 0},
- {"ASCII_Hex_Digit", Var, 0},
- {"Adlam", Var, 7},
- {"Ahom", Var, 5},
- {"Anatolian_Hieroglyphs", Var, 5},
- {"Arabic", Var, 0},
- {"Armenian", Var, 0},
- {"Avestan", Var, 0},
- {"AzeriCase", Var, 0},
- {"Balinese", Var, 0},
- {"Bamum", Var, 0},
- {"Bassa_Vah", Var, 4},
- {"Batak", Var, 0},
- {"Bengali", Var, 0},
- {"Bhaiksuki", Var, 7},
- {"Bidi_Control", Var, 0},
- {"Bopomofo", Var, 0},
- {"Brahmi", Var, 0},
- {"Braille", Var, 0},
- {"Buginese", Var, 0},
- {"Buhid", Var, 0},
- {"C", Var, 0},
- {"Canadian_Aboriginal", Var, 0},
- {"Carian", Var, 0},
- {"CaseRange", Type, 0},
- {"CaseRange.Delta", Field, 0},
- {"CaseRange.Hi", Field, 0},
- {"CaseRange.Lo", Field, 0},
- {"CaseRanges", Var, 0},
- {"Categories", Var, 0},
- {"Caucasian_Albanian", Var, 4},
- {"Cc", Var, 0},
- {"Cf", Var, 0},
- {"Chakma", Var, 1},
- {"Cham", Var, 0},
- {"Cherokee", Var, 0},
- {"Chorasmian", Var, 16},
- {"Co", Var, 0},
- {"Common", Var, 0},
- {"Coptic", Var, 0},
- {"Cs", Var, 0},
- {"Cuneiform", Var, 0},
- {"Cypriot", Var, 0},
- {"Cypro_Minoan", Var, 21},
- {"Cyrillic", Var, 0},
- {"Dash", Var, 0},
- {"Deprecated", Var, 0},
- {"Deseret", Var, 0},
- {"Devanagari", Var, 0},
- {"Diacritic", Var, 0},
- {"Digit", Var, 0},
- {"Dives_Akuru", Var, 16},
- {"Dogra", Var, 13},
- {"Duployan", Var, 4},
- {"Egyptian_Hieroglyphs", Var, 0},
- {"Elbasan", Var, 4},
- {"Elymaic", Var, 14},
- {"Ethiopic", Var, 0},
- {"Extender", Var, 0},
- {"FoldCategory", Var, 0},
- {"FoldScript", Var, 0},
- {"Georgian", Var, 0},
- {"Glagolitic", Var, 0},
- {"Gothic", Var, 0},
- {"Grantha", Var, 4},
- {"GraphicRanges", Var, 0},
- {"Greek", Var, 0},
- {"Gujarati", Var, 0},
- {"Gunjala_Gondi", Var, 13},
- {"Gurmukhi", Var, 0},
- {"Han", Var, 0},
- {"Hangul", Var, 0},
- {"Hanifi_Rohingya", Var, 13},
- {"Hanunoo", Var, 0},
- {"Hatran", Var, 5},
- {"Hebrew", Var, 0},
- {"Hex_Digit", Var, 0},
- {"Hiragana", Var, 0},
- {"Hyphen", Var, 0},
- {"IDS_Binary_Operator", Var, 0},
- {"IDS_Trinary_Operator", Var, 0},
- {"Ideographic", Var, 0},
- {"Imperial_Aramaic", Var, 0},
- {"In", Func, 2},
- {"Inherited", Var, 0},
- {"Inscriptional_Pahlavi", Var, 0},
- {"Inscriptional_Parthian", Var, 0},
- {"Is", Func, 0},
- {"IsControl", Func, 0},
- {"IsDigit", Func, 0},
- {"IsGraphic", Func, 0},
- {"IsLetter", Func, 0},
- {"IsLower", Func, 0},
- {"IsMark", Func, 0},
- {"IsNumber", Func, 0},
- {"IsOneOf", Func, 0},
- {"IsPrint", Func, 0},
- {"IsPunct", Func, 0},
- {"IsSpace", Func, 0},
- {"IsSymbol", Func, 0},
- {"IsTitle", Func, 0},
- {"IsUpper", Func, 0},
- {"Javanese", Var, 0},
- {"Join_Control", Var, 0},
- {"Kaithi", Var, 0},
- {"Kannada", Var, 0},
- {"Katakana", Var, 0},
- {"Kawi", Var, 21},
- {"Kayah_Li", Var, 0},
- {"Kharoshthi", Var, 0},
- {"Khitan_Small_Script", Var, 16},
- {"Khmer", Var, 0},
- {"Khojki", Var, 4},
- {"Khudawadi", Var, 4},
- {"L", Var, 0},
- {"Lao", Var, 0},
- {"Latin", Var, 0},
- {"Lepcha", Var, 0},
- {"Letter", Var, 0},
- {"Limbu", Var, 0},
- {"Linear_A", Var, 4},
- {"Linear_B", Var, 0},
- {"Lisu", Var, 0},
- {"Ll", Var, 0},
- {"Lm", Var, 0},
- {"Lo", Var, 0},
- {"Logical_Order_Exception", Var, 0},
- {"Lower", Var, 0},
- {"LowerCase", Const, 0},
- {"Lt", Var, 0},
- {"Lu", Var, 0},
- {"Lycian", Var, 0},
- {"Lydian", Var, 0},
- {"M", Var, 0},
- {"Mahajani", Var, 4},
- {"Makasar", Var, 13},
- {"Malayalam", Var, 0},
- {"Mandaic", Var, 0},
- {"Manichaean", Var, 4},
- {"Marchen", Var, 7},
- {"Mark", Var, 0},
- {"Masaram_Gondi", Var, 10},
- {"MaxASCII", Const, 0},
- {"MaxCase", Const, 0},
- {"MaxLatin1", Const, 0},
- {"MaxRune", Const, 0},
- {"Mc", Var, 0},
- {"Me", Var, 0},
- {"Medefaidrin", Var, 13},
- {"Meetei_Mayek", Var, 0},
- {"Mende_Kikakui", Var, 4},
- {"Meroitic_Cursive", Var, 1},
- {"Meroitic_Hieroglyphs", Var, 1},
- {"Miao", Var, 1},
- {"Mn", Var, 0},
- {"Modi", Var, 4},
- {"Mongolian", Var, 0},
- {"Mro", Var, 4},
- {"Multani", Var, 5},
- {"Myanmar", Var, 0},
- {"N", Var, 0},
- {"Nabataean", Var, 4},
- {"Nag_Mundari", Var, 21},
- {"Nandinagari", Var, 14},
- {"Nd", Var, 0},
- {"New_Tai_Lue", Var, 0},
- {"Newa", Var, 7},
- {"Nko", Var, 0},
- {"Nl", Var, 0},
- {"No", Var, 0},
- {"Noncharacter_Code_Point", Var, 0},
- {"Number", Var, 0},
- {"Nushu", Var, 10},
- {"Nyiakeng_Puachue_Hmong", Var, 14},
- {"Ogham", Var, 0},
- {"Ol_Chiki", Var, 0},
- {"Old_Hungarian", Var, 5},
- {"Old_Italic", Var, 0},
- {"Old_North_Arabian", Var, 4},
- {"Old_Permic", Var, 4},
- {"Old_Persian", Var, 0},
- {"Old_Sogdian", Var, 13},
- {"Old_South_Arabian", Var, 0},
- {"Old_Turkic", Var, 0},
- {"Old_Uyghur", Var, 21},
- {"Oriya", Var, 0},
- {"Osage", Var, 7},
- {"Osmanya", Var, 0},
- {"Other", Var, 0},
- {"Other_Alphabetic", Var, 0},
- {"Other_Default_Ignorable_Code_Point", Var, 0},
- {"Other_Grapheme_Extend", Var, 0},
- {"Other_ID_Continue", Var, 0},
- {"Other_ID_Start", Var, 0},
- {"Other_Lowercase", Var, 0},
- {"Other_Math", Var, 0},
- {"Other_Uppercase", Var, 0},
- {"P", Var, 0},
- {"Pahawh_Hmong", Var, 4},
- {"Palmyrene", Var, 4},
- {"Pattern_Syntax", Var, 0},
- {"Pattern_White_Space", Var, 0},
- {"Pau_Cin_Hau", Var, 4},
- {"Pc", Var, 0},
- {"Pd", Var, 0},
- {"Pe", Var, 0},
- {"Pf", Var, 0},
- {"Phags_Pa", Var, 0},
- {"Phoenician", Var, 0},
- {"Pi", Var, 0},
- {"Po", Var, 0},
- {"Prepended_Concatenation_Mark", Var, 7},
- {"PrintRanges", Var, 0},
- {"Properties", Var, 0},
- {"Ps", Var, 0},
- {"Psalter_Pahlavi", Var, 4},
- {"Punct", Var, 0},
- {"Quotation_Mark", Var, 0},
- {"Radical", Var, 0},
- {"Range16", Type, 0},
- {"Range16.Hi", Field, 0},
- {"Range16.Lo", Field, 0},
- {"Range16.Stride", Field, 0},
- {"Range32", Type, 0},
- {"Range32.Hi", Field, 0},
- {"Range32.Lo", Field, 0},
- {"Range32.Stride", Field, 0},
- {"RangeTable", Type, 0},
- {"RangeTable.LatinOffset", Field, 1},
- {"RangeTable.R16", Field, 0},
- {"RangeTable.R32", Field, 0},
- {"Regional_Indicator", Var, 10},
- {"Rejang", Var, 0},
- {"ReplacementChar", Const, 0},
- {"Runic", Var, 0},
- {"S", Var, 0},
- {"STerm", Var, 0},
- {"Samaritan", Var, 0},
- {"Saurashtra", Var, 0},
- {"Sc", Var, 0},
- {"Scripts", Var, 0},
- {"Sentence_Terminal", Var, 7},
- {"Sharada", Var, 1},
- {"Shavian", Var, 0},
- {"Siddham", Var, 4},
- {"SignWriting", Var, 5},
- {"SimpleFold", Func, 0},
- {"Sinhala", Var, 0},
- {"Sk", Var, 0},
- {"Sm", Var, 0},
- {"So", Var, 0},
- {"Soft_Dotted", Var, 0},
- {"Sogdian", Var, 13},
- {"Sora_Sompeng", Var, 1},
- {"Soyombo", Var, 10},
- {"Space", Var, 0},
- {"SpecialCase", Type, 0},
- {"Sundanese", Var, 0},
- {"Syloti_Nagri", Var, 0},
- {"Symbol", Var, 0},
- {"Syriac", Var, 0},
- {"Tagalog", Var, 0},
- {"Tagbanwa", Var, 0},
- {"Tai_Le", Var, 0},
- {"Tai_Tham", Var, 0},
- {"Tai_Viet", Var, 0},
- {"Takri", Var, 1},
- {"Tamil", Var, 0},
- {"Tangsa", Var, 21},
- {"Tangut", Var, 7},
- {"Telugu", Var, 0},
- {"Terminal_Punctuation", Var, 0},
- {"Thaana", Var, 0},
- {"Thai", Var, 0},
- {"Tibetan", Var, 0},
- {"Tifinagh", Var, 0},
- {"Tirhuta", Var, 4},
- {"Title", Var, 0},
- {"TitleCase", Const, 0},
- {"To", Func, 0},
- {"ToLower", Func, 0},
- {"ToTitle", Func, 0},
- {"ToUpper", Func, 0},
- {"Toto", Var, 21},
- {"TurkishCase", Var, 0},
- {"Ugaritic", Var, 0},
- {"Unified_Ideograph", Var, 0},
- {"Upper", Var, 0},
- {"UpperCase", Const, 0},
- {"UpperLower", Const, 0},
- {"Vai", Var, 0},
- {"Variation_Selector", Var, 0},
- {"Version", Const, 0},
- {"Vithkuqi", Var, 21},
- {"Wancho", Var, 14},
- {"Warang_Citi", Var, 4},
- {"White_Space", Var, 0},
- {"Yezidi", Var, 16},
- {"Yi", Var, 0},
- {"Z", Var, 0},
- {"Zanabazar_Square", Var, 10},
- {"Zl", Var, 0},
- {"Zp", Var, 0},
- {"Zs", Var, 0},
- },
- "unicode/utf16": {
- {"AppendRune", Func, 20},
- {"Decode", Func, 0},
- {"DecodeRune", Func, 0},
- {"Encode", Func, 0},
- {"EncodeRune", Func, 0},
- {"IsSurrogate", Func, 0},
- {"RuneLen", Func, 23},
- },
- "unicode/utf8": {
- {"AppendRune", Func, 18},
- {"DecodeLastRune", Func, 0},
- {"DecodeLastRuneInString", Func, 0},
- {"DecodeRune", Func, 0},
- {"DecodeRuneInString", Func, 0},
- {"EncodeRune", Func, 0},
- {"FullRune", Func, 0},
- {"FullRuneInString", Func, 0},
- {"MaxRune", Const, 0},
- {"RuneCount", Func, 0},
- {"RuneCountInString", Func, 0},
- {"RuneError", Const, 0},
- {"RuneLen", Func, 0},
- {"RuneSelf", Const, 0},
- {"RuneStart", Func, 0},
- {"UTFMax", Const, 0},
- {"Valid", Func, 0},
- {"ValidRune", Func, 1},
- {"ValidString", Func, 0},
- },
- "unique": {
- {"(Handle).Value", Method, 23},
- {"Handle", Type, 23},
- {"Make", Func, 23},
- },
- "unsafe": {
- {"Add", Func, 0},
- {"Alignof", Func, 0},
- {"Offsetof", Func, 0},
- {"Pointer", Type, 0},
- {"Sizeof", Func, 0},
- {"Slice", Func, 0},
- {"SliceData", Func, 0},
- {"String", Func, 0},
- {"StringData", Func, 0},
- },
-}
diff --git a/vendor/golang.org/x/tools/internal/stdlib/stdlib.go b/vendor/golang.org/x/tools/internal/stdlib/stdlib.go
deleted file mode 100644
index 98904017f2c..00000000000
--- a/vendor/golang.org/x/tools/internal/stdlib/stdlib.go
+++ /dev/null
@@ -1,97 +0,0 @@
-// Copyright 2022 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-//go:generate go run generate.go
-
-// Package stdlib provides a table of all exported symbols in the
-// standard library, along with the version at which they first
-// appeared.
-package stdlib
-
-import (
- "fmt"
- "strings"
-)
-
-type Symbol struct {
- Name string
- Kind Kind
- Version Version // Go version that first included the symbol
-}
-
-// A Kind indicates the kind of a symbol:
-// function, variable, constant, type, and so on.
-type Kind int8
-
-const (
- Invalid Kind = iota // Example name:
- Type // "Buffer"
- Func // "Println"
- Var // "EOF"
- Const // "Pi"
- Field // "Point.X"
- Method // "(*Buffer).Grow"
-)
-
-func (kind Kind) String() string {
- return [...]string{
- Invalid: "invalid",
- Type: "type",
- Func: "func",
- Var: "var",
- Const: "const",
- Field: "field",
- Method: "method",
- }[kind]
-}
-
-// A Version represents a version of Go of the form "go1.%d".
-type Version int8
-
-// String returns a version string of the form "go1.23", without allocating.
-func (v Version) String() string { return versions[v] }
-
-var versions [30]string // (increase constant as needed)
-
-func init() {
- for i := range versions {
- versions[i] = fmt.Sprintf("go1.%d", i)
- }
-}
-
-// HasPackage reports whether the specified package path is part of
-// the standard library's public API.
-func HasPackage(path string) bool {
- _, ok := PackageSymbols[path]
- return ok
-}
-
-// SplitField splits the field symbol name into type and field
-// components. It must be called only on Field symbols.
-//
-// Example: "File.Package" -> ("File", "Package")
-func (sym *Symbol) SplitField() (typename, name string) {
- if sym.Kind != Field {
- panic("not a field")
- }
- typename, name, _ = strings.Cut(sym.Name, ".")
- return
-}
-
-// SplitMethod splits the method symbol name into pointer, receiver,
-// and method components. It must be called only on Method symbols.
-//
-// Example: "(*Buffer).Grow" -> (true, "Buffer", "Grow")
-func (sym *Symbol) SplitMethod() (ptr bool, recv, name string) {
- if sym.Kind != Method {
- panic("not a method")
- }
- recv, name, _ = strings.Cut(sym.Name, ".")
- recv = recv[len("(") : len(recv)-len(")")]
- ptr = recv[0] == '*'
- if ptr {
- recv = recv[len("*"):]
- }
- return
-}
diff --git a/vendor/golang.org/x/tools/internal/typeparams/common.go b/vendor/golang.org/x/tools/internal/typeparams/common.go
deleted file mode 100644
index 0b84acc5c7f..00000000000
--- a/vendor/golang.org/x/tools/internal/typeparams/common.go
+++ /dev/null
@@ -1,140 +0,0 @@
-// Copyright 2021 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-// Package typeparams contains common utilities for writing tools that
-// interact with generic Go code, as introduced with Go 1.18. It
-// supplements the standard library APIs. Notably, the StructuralTerms
-// API computes a minimal representation of the structural
-// restrictions on a type parameter.
-//
-// An external version of these APIs is available in the
-// golang.org/x/exp/typeparams module.
-package typeparams
-
-import (
- "go/ast"
- "go/token"
- "go/types"
-)
-
-// UnpackIndexExpr extracts data from AST nodes that represent index
-// expressions.
-//
-// For an ast.IndexExpr, the resulting indices slice will contain exactly one
-// index expression. For an ast.IndexListExpr (go1.18+), it may have a variable
-// number of index expressions.
-//
-// For nodes that don't represent index expressions, the first return value of
-// UnpackIndexExpr will be nil.
-func UnpackIndexExpr(n ast.Node) (x ast.Expr, lbrack token.Pos, indices []ast.Expr, rbrack token.Pos) {
- switch e := n.(type) {
- case *ast.IndexExpr:
- return e.X, e.Lbrack, []ast.Expr{e.Index}, e.Rbrack
- case *ast.IndexListExpr:
- return e.X, e.Lbrack, e.Indices, e.Rbrack
- }
- return nil, token.NoPos, nil, token.NoPos
-}
-
-// PackIndexExpr returns an *ast.IndexExpr or *ast.IndexListExpr, depending on
-// the cardinality of indices. Calling PackIndexExpr with len(indices) == 0
-// will panic.
-func PackIndexExpr(x ast.Expr, lbrack token.Pos, indices []ast.Expr, rbrack token.Pos) ast.Expr {
- switch len(indices) {
- case 0:
- panic("empty indices")
- case 1:
- return &ast.IndexExpr{
- X: x,
- Lbrack: lbrack,
- Index: indices[0],
- Rbrack: rbrack,
- }
- default:
- return &ast.IndexListExpr{
- X: x,
- Lbrack: lbrack,
- Indices: indices,
- Rbrack: rbrack,
- }
- }
-}
-
-// IsTypeParam reports whether t is a type parameter (or an alias of one).
-func IsTypeParam(t types.Type) bool {
- _, ok := types.Unalias(t).(*types.TypeParam)
- return ok
-}
-
-// GenericAssignableTo is a generalization of types.AssignableTo that
-// implements the following rule for uninstantiated generic types:
-//
-// If V and T are generic named types, then V is considered assignable to T if,
-// for every possible instantiation of V[A_1, ..., A_N], the instantiation
-// T[A_1, ..., A_N] is valid and V[A_1, ..., A_N] implements T[A_1, ..., A_N].
-//
-// If T has structural constraints, they must be satisfied by V.
-//
-// For example, consider the following type declarations:
-//
-// type Interface[T any] interface {
-// Accept(T)
-// }
-//
-// type Container[T any] struct {
-// Element T
-// }
-//
-// func (c Container[T]) Accept(t T) { c.Element = t }
-//
-// In this case, GenericAssignableTo reports that instantiations of Container
-// are assignable to the corresponding instantiation of Interface.
-func GenericAssignableTo(ctxt *types.Context, V, T types.Type) bool {
- V = types.Unalias(V)
- T = types.Unalias(T)
-
- // If V and T are not both named, or do not have matching non-empty type
- // parameter lists, fall back on types.AssignableTo.
-
- VN, Vnamed := V.(*types.Named)
- TN, Tnamed := T.(*types.Named)
- if !Vnamed || !Tnamed {
- return types.AssignableTo(V, T)
- }
-
- vtparams := VN.TypeParams()
- ttparams := TN.TypeParams()
- if vtparams.Len() == 0 || vtparams.Len() != ttparams.Len() || VN.TypeArgs().Len() != 0 || TN.TypeArgs().Len() != 0 {
- return types.AssignableTo(V, T)
- }
-
- // V and T have the same (non-zero) number of type params. Instantiate both
- // with the type parameters of V. This must always succeed for V, and will
- // succeed for T if and only if the type set of each type parameter of V is a
- // subset of the type set of the corresponding type parameter of T, meaning
- // that every instantiation of V corresponds to a valid instantiation of T.
-
- // Minor optimization: ensure we share a context across the two
- // instantiations below.
- if ctxt == nil {
- ctxt = types.NewContext()
- }
-
- var targs []types.Type
- for i := 0; i < vtparams.Len(); i++ {
- targs = append(targs, vtparams.At(i))
- }
-
- vinst, err := types.Instantiate(ctxt, V, targs, true)
- if err != nil {
- panic("type parameters should satisfy their own constraints")
- }
-
- tinst, err := types.Instantiate(ctxt, T, targs, true)
- if err != nil {
- return false
- }
-
- return types.AssignableTo(vinst, tinst)
-}
diff --git a/vendor/golang.org/x/tools/internal/typeparams/coretype.go b/vendor/golang.org/x/tools/internal/typeparams/coretype.go
deleted file mode 100644
index 6e83c6fb1a2..00000000000
--- a/vendor/golang.org/x/tools/internal/typeparams/coretype.go
+++ /dev/null
@@ -1,150 +0,0 @@
-// Copyright 2022 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-package typeparams
-
-import (
- "fmt"
- "go/types"
-)
-
-// CoreType returns the core type of T or nil if T does not have a core type.
-//
-// See https://go.dev/ref/spec#Core_types for the definition of a core type.
-func CoreType(T types.Type) types.Type {
- U := T.Underlying()
- if _, ok := U.(*types.Interface); !ok {
- return U // for non-interface types,
- }
-
- terms, err := NormalTerms(U)
- if len(terms) == 0 || err != nil {
- // len(terms) -> empty type set of interface.
- // err != nil => U is invalid, exceeds complexity bounds, or has an empty type set.
- return nil // no core type.
- }
-
- U = terms[0].Type().Underlying()
- var identical int // i in [0,identical) => Identical(U, terms[i].Type().Underlying())
- for identical = 1; identical < len(terms); identical++ {
- if !types.Identical(U, terms[identical].Type().Underlying()) {
- break
- }
- }
-
- if identical == len(terms) {
- // https://go.dev/ref/spec#Core_types
- // "There is a single type U which is the underlying type of all types in the type set of T"
- return U
- }
- ch, ok := U.(*types.Chan)
- if !ok {
- return nil // no core type as identical < len(terms) and U is not a channel.
- }
- // https://go.dev/ref/spec#Core_types
- // "the type chan E if T contains only bidirectional channels, or the type chan<- E or
- // <-chan E depending on the direction of the directional channels present."
- for chans := identical; chans < len(terms); chans++ {
- curr, ok := terms[chans].Type().Underlying().(*types.Chan)
- if !ok {
- return nil
- }
- if !types.Identical(ch.Elem(), curr.Elem()) {
- return nil // channel elements are not identical.
- }
- if ch.Dir() == types.SendRecv {
- // ch is bidirectional. We can safely always use curr's direction.
- ch = curr
- } else if curr.Dir() != types.SendRecv && ch.Dir() != curr.Dir() {
- // ch and curr are not bidirectional and not the same direction.
- return nil
- }
- }
- return ch
-}
-
-// NormalTerms returns a slice of terms representing the normalized structural
-// type restrictions of a type, if any.
-//
-// For all types other than *types.TypeParam, *types.Interface, and
-// *types.Union, this is just a single term with Tilde() == false and
-// Type() == typ. For *types.TypeParam, *types.Interface, and *types.Union, see
-// below.
-//
-// Structural type restrictions of a type parameter are created via
-// non-interface types embedded in its constraint interface (directly, or via a
-// chain of interface embeddings). For example, in the declaration type
-// T[P interface{~int; m()}] int the structural restriction of the type
-// parameter P is ~int.
-//
-// With interface embedding and unions, the specification of structural type
-// restrictions may be arbitrarily complex. For example, consider the
-// following:
-//
-// type A interface{ ~string|~[]byte }
-//
-// type B interface{ int|string }
-//
-// type C interface { ~string|~int }
-//
-// type T[P interface{ A|B; C }] int
-//
-// In this example, the structural type restriction of P is ~string|int: A|B
-// expands to ~string|~[]byte|int|string, which reduces to ~string|~[]byte|int,
-// which when intersected with C (~string|~int) yields ~string|int.
-//
-// NormalTerms computes these expansions and reductions, producing a
-// "normalized" form of the embeddings. A structural restriction is normalized
-// if it is a single union containing no interface terms, and is minimal in the
-// sense that removing any term changes the set of types satisfying the
-// constraint. It is left as a proof for the reader that, modulo sorting, there
-// is exactly one such normalized form.
-//
-// Because the minimal representation always takes this form, NormalTerms
-// returns a slice of tilde terms corresponding to the terms of the union in
-// the normalized structural restriction. An error is returned if the type is
-// invalid, exceeds complexity bounds, or has an empty type set. In the latter
-// case, NormalTerms returns ErrEmptyTypeSet.
-//
-// NormalTerms makes no guarantees about the order of terms, except that it
-// is deterministic.
-func NormalTerms(typ types.Type) ([]*types.Term, error) {
- switch typ := typ.Underlying().(type) {
- case *types.TypeParam:
- return StructuralTerms(typ)
- case *types.Union:
- return UnionTermSet(typ)
- case *types.Interface:
- return InterfaceTermSet(typ)
- default:
- return []*types.Term{types.NewTerm(false, typ)}, nil
- }
-}
-
-// Deref returns the type of the variable pointed to by t,
-// if t's core type is a pointer; otherwise it returns t.
-//
-// Do not assume that Deref(T)==T implies T is not a pointer:
-// consider "type T *T", for example.
-//
-// TODO(adonovan): ideally this would live in typesinternal, but that
-// creates an import cycle. Move there when we melt this package down.
-func Deref(t types.Type) types.Type {
- if ptr, ok := CoreType(t).(*types.Pointer); ok {
- return ptr.Elem()
- }
- return t
-}
-
-// MustDeref returns the type of the variable pointed to by t.
-// It panics if t's core type is not a pointer.
-//
-// TODO(adonovan): ideally this would live in typesinternal, but that
-// creates an import cycle. Move there when we melt this package down.
-func MustDeref(t types.Type) types.Type {
- if ptr, ok := CoreType(t).(*types.Pointer); ok {
- return ptr.Elem()
- }
- panic(fmt.Sprintf("%v is not a pointer", t))
-}
diff --git a/vendor/golang.org/x/tools/internal/typeparams/free.go b/vendor/golang.org/x/tools/internal/typeparams/free.go
deleted file mode 100644
index 358108268b4..00000000000
--- a/vendor/golang.org/x/tools/internal/typeparams/free.go
+++ /dev/null
@@ -1,118 +0,0 @@
-// Copyright 2024 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-package typeparams
-
-import (
- "go/types"
-)
-
-// Free is a memoization of the set of free type parameters within a
-// type. It makes a sequence of calls to [Free.Has] for overlapping
-// types more efficient. The zero value is ready for use.
-//
-// NOTE: Adapted from go/types/infer.go. If it is later exported, factor.
-type Free struct {
- seen map[types.Type]bool
-}
-
-// Has reports whether the specified type has a free type parameter.
-func (w *Free) Has(typ types.Type) (res bool) {
- // detect cycles
- if x, ok := w.seen[typ]; ok {
- return x
- }
- if w.seen == nil {
- w.seen = make(map[types.Type]bool)
- }
- w.seen[typ] = false
- defer func() {
- w.seen[typ] = res
- }()
-
- switch t := typ.(type) {
- case nil, *types.Basic: // TODO(gri) should nil be handled here?
- break
-
- case *types.Alias:
- return w.Has(types.Unalias(t))
-
- case *types.Array:
- return w.Has(t.Elem())
-
- case *types.Slice:
- return w.Has(t.Elem())
-
- case *types.Struct:
- for i, n := 0, t.NumFields(); i < n; i++ {
- if w.Has(t.Field(i).Type()) {
- return true
- }
- }
-
- case *types.Pointer:
- return w.Has(t.Elem())
-
- case *types.Tuple:
- n := t.Len()
- for i := 0; i < n; i++ {
- if w.Has(t.At(i).Type()) {
- return true
- }
- }
-
- case *types.Signature:
- // t.tparams may not be nil if we are looking at a signature
- // of a generic function type (or an interface method) that is
- // part of the type we're testing. We don't care about these type
- // parameters.
- // Similarly, the receiver of a method may declare (rather than
- // use) type parameters, we don't care about those either.
- // Thus, we only need to look at the input and result parameters.
- return w.Has(t.Params()) || w.Has(t.Results())
-
- case *types.Interface:
- for i, n := 0, t.NumMethods(); i < n; i++ {
- if w.Has(t.Method(i).Type()) {
- return true
- }
- }
- terms, err := InterfaceTermSet(t)
- if err != nil {
- return false // ill typed
- }
- for _, term := range terms {
- if w.Has(term.Type()) {
- return true
- }
- }
-
- case *types.Map:
- return w.Has(t.Key()) || w.Has(t.Elem())
-
- case *types.Chan:
- return w.Has(t.Elem())
-
- case *types.Named:
- args := t.TypeArgs()
- // TODO(taking): this does not match go/types/infer.go. Check with rfindley.
- if params := t.TypeParams(); params.Len() > args.Len() {
- return true
- }
- for i, n := 0, args.Len(); i < n; i++ {
- if w.Has(args.At(i)) {
- return true
- }
- }
- return w.Has(t.Underlying()) // recurse for types local to parameterized functions
-
- case *types.TypeParam:
- return true
-
- default:
- panic(t) // unreachable
- }
-
- return false
-}
diff --git a/vendor/golang.org/x/tools/internal/typeparams/normalize.go b/vendor/golang.org/x/tools/internal/typeparams/normalize.go
deleted file mode 100644
index 93c80fdc96c..00000000000
--- a/vendor/golang.org/x/tools/internal/typeparams/normalize.go
+++ /dev/null
@@ -1,218 +0,0 @@
-// Copyright 2021 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-package typeparams
-
-import (
- "errors"
- "fmt"
- "go/types"
- "os"
- "strings"
-)
-
-//go:generate go run copytermlist.go
-
-const debug = false
-
-var ErrEmptyTypeSet = errors.New("empty type set")
-
-// StructuralTerms returns a slice of terms representing the normalized
-// structural type restrictions of a type parameter, if any.
-//
-// Structural type restrictions of a type parameter are created via
-// non-interface types embedded in its constraint interface (directly, or via a
-// chain of interface embeddings). For example, in the declaration
-//
-// type T[P interface{~int; m()}] int
-//
-// the structural restriction of the type parameter P is ~int.
-//
-// With interface embedding and unions, the specification of structural type
-// restrictions may be arbitrarily complex. For example, consider the
-// following:
-//
-// type A interface{ ~string|~[]byte }
-//
-// type B interface{ int|string }
-//
-// type C interface { ~string|~int }
-//
-// type T[P interface{ A|B; C }] int
-//
-// In this example, the structural type restriction of P is ~string|int: A|B
-// expands to ~string|~[]byte|int|string, which reduces to ~string|~[]byte|int,
-// which when intersected with C (~string|~int) yields ~string|int.
-//
-// StructuralTerms computes these expansions and reductions, producing a
-// "normalized" form of the embeddings. A structural restriction is normalized
-// if it is a single union containing no interface terms, and is minimal in the
-// sense that removing any term changes the set of types satisfying the
-// constraint. It is left as a proof for the reader that, modulo sorting, there
-// is exactly one such normalized form.
-//
-// Because the minimal representation always takes this form, StructuralTerms
-// returns a slice of tilde terms corresponding to the terms of the union in
-// the normalized structural restriction. An error is returned if the
-// constraint interface is invalid, exceeds complexity bounds, or has an empty
-// type set. In the latter case, StructuralTerms returns ErrEmptyTypeSet.
-//
-// StructuralTerms makes no guarantees about the order of terms, except that it
-// is deterministic.
-func StructuralTerms(tparam *types.TypeParam) ([]*types.Term, error) {
- constraint := tparam.Constraint()
- if constraint == nil {
- return nil, fmt.Errorf("%s has nil constraint", tparam)
- }
- iface, _ := constraint.Underlying().(*types.Interface)
- if iface == nil {
- return nil, fmt.Errorf("constraint is %T, not *types.Interface", constraint.Underlying())
- }
- return InterfaceTermSet(iface)
-}
-
-// InterfaceTermSet computes the normalized terms for a constraint interface,
-// returning an error if the term set cannot be computed or is empty. In the
-// latter case, the error will be ErrEmptyTypeSet.
-//
-// See the documentation of StructuralTerms for more information on
-// normalization.
-func InterfaceTermSet(iface *types.Interface) ([]*types.Term, error) {
- return computeTermSet(iface)
-}
-
-// UnionTermSet computes the normalized terms for a union, returning an error
-// if the term set cannot be computed or is empty. In the latter case, the
-// error will be ErrEmptyTypeSet.
-//
-// See the documentation of StructuralTerms for more information on
-// normalization.
-func UnionTermSet(union *types.Union) ([]*types.Term, error) {
- return computeTermSet(union)
-}
-
-func computeTermSet(typ types.Type) ([]*types.Term, error) {
- tset, err := computeTermSetInternal(typ, make(map[types.Type]*termSet), 0)
- if err != nil {
- return nil, err
- }
- if tset.terms.isEmpty() {
- return nil, ErrEmptyTypeSet
- }
- if tset.terms.isAll() {
- return nil, nil
- }
- var terms []*types.Term
- for _, term := range tset.terms {
- terms = append(terms, types.NewTerm(term.tilde, term.typ))
- }
- return terms, nil
-}
-
-// A termSet holds the normalized set of terms for a given type.
-//
-// The name termSet is intentionally distinct from 'type set': a type set is
-// all types that implement a type (and includes method restrictions), whereas
-// a term set just represents the structural restrictions on a type.
-type termSet struct {
- complete bool
- terms termlist
-}
-
-func indentf(depth int, format string, args ...interface{}) {
- fmt.Fprintf(os.Stderr, strings.Repeat(".", depth)+format+"\n", args...)
-}
-
-func computeTermSetInternal(t types.Type, seen map[types.Type]*termSet, depth int) (res *termSet, err error) {
- if t == nil {
- panic("nil type")
- }
-
- if debug {
- indentf(depth, "%s", t.String())
- defer func() {
- if err != nil {
- indentf(depth, "=> %s", err)
- } else {
- indentf(depth, "=> %s", res.terms.String())
- }
- }()
- }
-
- const maxTermCount = 100
- if tset, ok := seen[t]; ok {
- if !tset.complete {
- return nil, fmt.Errorf("cycle detected in the declaration of %s", t)
- }
- return tset, nil
- }
-
- // Mark the current type as seen to avoid infinite recursion.
- tset := new(termSet)
- defer func() {
- tset.complete = true
- }()
- seen[t] = tset
-
- switch u := t.Underlying().(type) {
- case *types.Interface:
- // The term set of an interface is the intersection of the term sets of its
- // embedded types.
- tset.terms = allTermlist
- for i := 0; i < u.NumEmbeddeds(); i++ {
- embedded := u.EmbeddedType(i)
- if _, ok := embedded.Underlying().(*types.TypeParam); ok {
- return nil, fmt.Errorf("invalid embedded type %T", embedded)
- }
- tset2, err := computeTermSetInternal(embedded, seen, depth+1)
- if err != nil {
- return nil, err
- }
- tset.terms = tset.terms.intersect(tset2.terms)
- }
- case *types.Union:
- // The term set of a union is the union of term sets of its terms.
- tset.terms = nil
- for i := 0; i < u.Len(); i++ {
- t := u.Term(i)
- var terms termlist
- switch t.Type().Underlying().(type) {
- case *types.Interface:
- tset2, err := computeTermSetInternal(t.Type(), seen, depth+1)
- if err != nil {
- return nil, err
- }
- terms = tset2.terms
- case *types.TypeParam, *types.Union:
- // A stand-alone type parameter or union is not permitted as union
- // term.
- return nil, fmt.Errorf("invalid union term %T", t)
- default:
- if t.Type() == types.Typ[types.Invalid] {
- continue
- }
- terms = termlist{{t.Tilde(), t.Type()}}
- }
- tset.terms = tset.terms.union(terms)
- if len(tset.terms) > maxTermCount {
- return nil, fmt.Errorf("exceeded max term count %d", maxTermCount)
- }
- }
- case *types.TypeParam:
- panic("unreachable")
- default:
- // For all other types, the term set is just a single non-tilde term
- // holding the type itself.
- if u != types.Typ[types.Invalid] {
- tset.terms = termlist{{false, t}}
- }
- }
- return tset, nil
-}
-
-// under is a facade for the go/types internal function of the same name. It is
-// used by typeterm.go.
-func under(t types.Type) types.Type {
- return t.Underlying()
-}
diff --git a/vendor/golang.org/x/tools/internal/typeparams/termlist.go b/vendor/golang.org/x/tools/internal/typeparams/termlist.go
deleted file mode 100644
index cbd12f80131..00000000000
--- a/vendor/golang.org/x/tools/internal/typeparams/termlist.go
+++ /dev/null
@@ -1,163 +0,0 @@
-// Copyright 2021 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-// Code generated by copytermlist.go DO NOT EDIT.
-
-package typeparams
-
-import (
- "bytes"
- "go/types"
-)
-
-// A termlist represents the type set represented by the union
-// t1 ∪ y2 ∪ ... tn of the type sets of the terms t1 to tn.
-// A termlist is in normal form if all terms are disjoint.
-// termlist operations don't require the operands to be in
-// normal form.
-type termlist []*term
-
-// allTermlist represents the set of all types.
-// It is in normal form.
-var allTermlist = termlist{new(term)}
-
-// String prints the termlist exactly (without normalization).
-func (xl termlist) String() string {
- if len(xl) == 0 {
- return "∅"
- }
- var buf bytes.Buffer
- for i, x := range xl {
- if i > 0 {
- buf.WriteString(" | ")
- }
- buf.WriteString(x.String())
- }
- return buf.String()
-}
-
-// isEmpty reports whether the termlist xl represents the empty set of types.
-func (xl termlist) isEmpty() bool {
- // If there's a non-nil term, the entire list is not empty.
- // If the termlist is in normal form, this requires at most
- // one iteration.
- for _, x := range xl {
- if x != nil {
- return false
- }
- }
- return true
-}
-
-// isAll reports whether the termlist xl represents the set of all types.
-func (xl termlist) isAll() bool {
- // If there's a 𝓤 term, the entire list is 𝓤.
- // If the termlist is in normal form, this requires at most
- // one iteration.
- for _, x := range xl {
- if x != nil && x.typ == nil {
- return true
- }
- }
- return false
-}
-
-// norm returns the normal form of xl.
-func (xl termlist) norm() termlist {
- // Quadratic algorithm, but good enough for now.
- // TODO(gri) fix asymptotic performance
- used := make([]bool, len(xl))
- var rl termlist
- for i, xi := range xl {
- if xi == nil || used[i] {
- continue
- }
- for j := i + 1; j < len(xl); j++ {
- xj := xl[j]
- if xj == nil || used[j] {
- continue
- }
- if u1, u2 := xi.union(xj); u2 == nil {
- // If we encounter a 𝓤 term, the entire list is 𝓤.
- // Exit early.
- // (Note that this is not just an optimization;
- // if we continue, we may end up with a 𝓤 term
- // and other terms and the result would not be
- // in normal form.)
- if u1.typ == nil {
- return allTermlist
- }
- xi = u1
- used[j] = true // xj is now unioned into xi - ignore it in future iterations
- }
- }
- rl = append(rl, xi)
- }
- return rl
-}
-
-// union returns the union xl ∪ yl.
-func (xl termlist) union(yl termlist) termlist {
- return append(xl, yl...).norm()
-}
-
-// intersect returns the intersection xl ∩ yl.
-func (xl termlist) intersect(yl termlist) termlist {
- if xl.isEmpty() || yl.isEmpty() {
- return nil
- }
-
- // Quadratic algorithm, but good enough for now.
- // TODO(gri) fix asymptotic performance
- var rl termlist
- for _, x := range xl {
- for _, y := range yl {
- if r := x.intersect(y); r != nil {
- rl = append(rl, r)
- }
- }
- }
- return rl.norm()
-}
-
-// equal reports whether xl and yl represent the same type set.
-func (xl termlist) equal(yl termlist) bool {
- // TODO(gri) this should be more efficient
- return xl.subsetOf(yl) && yl.subsetOf(xl)
-}
-
-// includes reports whether t ∈ xl.
-func (xl termlist) includes(t types.Type) bool {
- for _, x := range xl {
- if x.includes(t) {
- return true
- }
- }
- return false
-}
-
-// supersetOf reports whether y ⊆ xl.
-func (xl termlist) supersetOf(y *term) bool {
- for _, x := range xl {
- if y.subsetOf(x) {
- return true
- }
- }
- return false
-}
-
-// subsetOf reports whether xl ⊆ yl.
-func (xl termlist) subsetOf(yl termlist) bool {
- if yl.isEmpty() {
- return xl.isEmpty()
- }
-
- // each term x of xl must be a subset of yl
- for _, x := range xl {
- if !yl.supersetOf(x) {
- return false // x is not a subset yl
- }
- }
- return true
-}
diff --git a/vendor/golang.org/x/tools/internal/typeparams/typeterm.go b/vendor/golang.org/x/tools/internal/typeparams/typeterm.go
deleted file mode 100644
index 7350bb702a1..00000000000
--- a/vendor/golang.org/x/tools/internal/typeparams/typeterm.go
+++ /dev/null
@@ -1,169 +0,0 @@
-// Copyright 2021 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-// Code generated by copytermlist.go DO NOT EDIT.
-
-package typeparams
-
-import "go/types"
-
-// A term describes elementary type sets:
-//
-// ∅: (*term)(nil) == ∅ // set of no types (empty set)
-// 𝓤: &term{} == 𝓤 // set of all types (𝓤niverse)
-// T: &term{false, T} == {T} // set of type T
-// ~t: &term{true, t} == {t' | under(t') == t} // set of types with underlying type t
-type term struct {
- tilde bool // valid if typ != nil
- typ types.Type
-}
-
-func (x *term) String() string {
- switch {
- case x == nil:
- return "∅"
- case x.typ == nil:
- return "𝓤"
- case x.tilde:
- return "~" + x.typ.String()
- default:
- return x.typ.String()
- }
-}
-
-// equal reports whether x and y represent the same type set.
-func (x *term) equal(y *term) bool {
- // easy cases
- switch {
- case x == nil || y == nil:
- return x == y
- case x.typ == nil || y.typ == nil:
- return x.typ == y.typ
- }
- // ∅ ⊂ x, y ⊂ 𝓤
-
- return x.tilde == y.tilde && types.Identical(x.typ, y.typ)
-}
-
-// union returns the union x ∪ y: zero, one, or two non-nil terms.
-func (x *term) union(y *term) (_, _ *term) {
- // easy cases
- switch {
- case x == nil && y == nil:
- return nil, nil // ∅ ∪ ∅ == ∅
- case x == nil:
- return y, nil // ∅ ∪ y == y
- case y == nil:
- return x, nil // x ∪ ∅ == x
- case x.typ == nil:
- return x, nil // 𝓤 ∪ y == 𝓤
- case y.typ == nil:
- return y, nil // x ∪ 𝓤 == 𝓤
- }
- // ∅ ⊂ x, y ⊂ 𝓤
-
- if x.disjoint(y) {
- return x, y // x ∪ y == (x, y) if x ∩ y == ∅
- }
- // x.typ == y.typ
-
- // ~t ∪ ~t == ~t
- // ~t ∪ T == ~t
- // T ∪ ~t == ~t
- // T ∪ T == T
- if x.tilde || !y.tilde {
- return x, nil
- }
- return y, nil
-}
-
-// intersect returns the intersection x ∩ y.
-func (x *term) intersect(y *term) *term {
- // easy cases
- switch {
- case x == nil || y == nil:
- return nil // ∅ ∩ y == ∅ and ∩ ∅ == ∅
- case x.typ == nil:
- return y // 𝓤 ∩ y == y
- case y.typ == nil:
- return x // x ∩ 𝓤 == x
- }
- // ∅ ⊂ x, y ⊂ 𝓤
-
- if x.disjoint(y) {
- return nil // x ∩ y == ∅ if x ∩ y == ∅
- }
- // x.typ == y.typ
-
- // ~t ∩ ~t == ~t
- // ~t ∩ T == T
- // T ∩ ~t == T
- // T ∩ T == T
- if !x.tilde || y.tilde {
- return x
- }
- return y
-}
-
-// includes reports whether t ∈ x.
-func (x *term) includes(t types.Type) bool {
- // easy cases
- switch {
- case x == nil:
- return false // t ∈ ∅ == false
- case x.typ == nil:
- return true // t ∈ 𝓤 == true
- }
- // ∅ ⊂ x ⊂ 𝓤
-
- u := t
- if x.tilde {
- u = under(u)
- }
- return types.Identical(x.typ, u)
-}
-
-// subsetOf reports whether x ⊆ y.
-func (x *term) subsetOf(y *term) bool {
- // easy cases
- switch {
- case x == nil:
- return true // ∅ ⊆ y == true
- case y == nil:
- return false // x ⊆ ∅ == false since x != ∅
- case y.typ == nil:
- return true // x ⊆ 𝓤 == true
- case x.typ == nil:
- return false // 𝓤 ⊆ y == false since y != 𝓤
- }
- // ∅ ⊂ x, y ⊂ 𝓤
-
- if x.disjoint(y) {
- return false // x ⊆ y == false if x ∩ y == ∅
- }
- // x.typ == y.typ
-
- // ~t ⊆ ~t == true
- // ~t ⊆ T == false
- // T ⊆ ~t == true
- // T ⊆ T == true
- return !x.tilde || y.tilde
-}
-
-// disjoint reports whether x ∩ y == ∅.
-// x.typ and y.typ must not be nil.
-func (x *term) disjoint(y *term) bool {
- if debug && (x.typ == nil || y.typ == nil) {
- panic("invalid argument(s)")
- }
- ux := x.typ
- if y.tilde {
- ux = under(ux)
- }
- uy := y.typ
- if x.tilde {
- uy = under(uy)
- }
- return !types.Identical(ux, uy)
-}
diff --git a/vendor/golang.org/x/tools/internal/typesinternal/element.go b/vendor/golang.org/x/tools/internal/typesinternal/element.go
deleted file mode 100644
index 4957f021641..00000000000
--- a/vendor/golang.org/x/tools/internal/typesinternal/element.go
+++ /dev/null
@@ -1,133 +0,0 @@
-// Copyright 2024 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-package typesinternal
-
-import (
- "fmt"
- "go/types"
-
- "golang.org/x/tools/go/types/typeutil"
-)
-
-// ForEachElement calls f for type T and each type reachable from its
-// type through reflection. It does this by recursively stripping off
-// type constructors; in addition, for each named type N, the type *N
-// is added to the result as it may have additional methods.
-//
-// The caller must provide an initially empty set used to de-duplicate
-// identical types, potentially across multiple calls to ForEachElement.
-// (Its final value holds all the elements seen, matching the arguments
-// passed to f.)
-//
-// TODO(adonovan): share/harmonize with go/callgraph/rta.
-func ForEachElement(rtypes *typeutil.Map, msets *typeutil.MethodSetCache, T types.Type, f func(types.Type)) {
- var visit func(T types.Type, skip bool)
- visit = func(T types.Type, skip bool) {
- if !skip {
- if seen, _ := rtypes.Set(T, true).(bool); seen {
- return // de-dup
- }
-
- f(T) // notify caller of new element type
- }
-
- // Recursion over signatures of each method.
- tmset := msets.MethodSet(T)
- for i := 0; i < tmset.Len(); i++ {
- sig := tmset.At(i).Type().(*types.Signature)
- // It is tempting to call visit(sig, false)
- // but, as noted in golang.org/cl/65450043,
- // the Signature.Recv field is ignored by
- // types.Identical and typeutil.Map, which
- // is confusing at best.
- //
- // More importantly, the true signature rtype
- // reachable from a method using reflection
- // has no receiver but an extra ordinary parameter.
- // For the Read method of io.Reader we want:
- // func(Reader, []byte) (int, error)
- // but here sig is:
- // func([]byte) (int, error)
- // with .Recv = Reader (though it is hard to
- // notice because it doesn't affect Signature.String
- // or types.Identical).
- //
- // TODO(adonovan): construct and visit the correct
- // non-method signature with an extra parameter
- // (though since unnamed func types have no methods
- // there is essentially no actual demand for this).
- //
- // TODO(adonovan): document whether or not it is
- // safe to skip non-exported methods (as RTA does).
- visit(sig.Params(), true) // skip the Tuple
- visit(sig.Results(), true) // skip the Tuple
- }
-
- switch T := T.(type) {
- case *types.Alias:
- visit(types.Unalias(T), skip) // emulates the pre-Alias behavior
-
- case *types.Basic:
- // nop
-
- case *types.Interface:
- // nop---handled by recursion over method set.
-
- case *types.Pointer:
- visit(T.Elem(), false)
-
- case *types.Slice:
- visit(T.Elem(), false)
-
- case *types.Chan:
- visit(T.Elem(), false)
-
- case *types.Map:
- visit(T.Key(), false)
- visit(T.Elem(), false)
-
- case *types.Signature:
- if T.Recv() != nil {
- panic(fmt.Sprintf("Signature %s has Recv %s", T, T.Recv()))
- }
- visit(T.Params(), true) // skip the Tuple
- visit(T.Results(), true) // skip the Tuple
-
- case *types.Named:
- // A pointer-to-named type can be derived from a named
- // type via reflection. It may have methods too.
- visit(types.NewPointer(T), false)
-
- // Consider 'type T struct{S}' where S has methods.
- // Reflection provides no way to get from T to struct{S},
- // only to S, so the method set of struct{S} is unwanted,
- // so set 'skip' flag during recursion.
- visit(T.Underlying(), true) // skip the unnamed type
-
- case *types.Array:
- visit(T.Elem(), false)
-
- case *types.Struct:
- for i, n := 0, T.NumFields(); i < n; i++ {
- // TODO(adonovan): document whether or not
- // it is safe to skip non-exported fields.
- visit(T.Field(i).Type(), false)
- }
-
- case *types.Tuple:
- for i, n := 0, T.Len(); i < n; i++ {
- visit(T.At(i).Type(), false)
- }
-
- case *types.TypeParam, *types.Union:
- // forEachReachable must not be called on parameterized types.
- panic(T)
-
- default:
- panic(T)
- }
- }
- visit(T, false)
-}
diff --git a/vendor/golang.org/x/tools/internal/typesinternal/errorcode.go b/vendor/golang.org/x/tools/internal/typesinternal/errorcode.go
deleted file mode 100644
index 131caab2847..00000000000
--- a/vendor/golang.org/x/tools/internal/typesinternal/errorcode.go
+++ /dev/null
@@ -1,1560 +0,0 @@
-// Copyright 2020 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-package typesinternal
-
-//go:generate stringer -type=ErrorCode
-
-type ErrorCode int
-
-// This file defines the error codes that can be produced during type-checking.
-// Collectively, these codes provide an identifier that may be used to
-// implement special handling for certain types of errors.
-//
-// Error codes should be fine-grained enough that the exact nature of the error
-// can be easily determined, but coarse enough that they are not an
-// implementation detail of the type checking algorithm. As a rule-of-thumb,
-// errors should be considered equivalent if there is a theoretical refactoring
-// of the type checker in which they are emitted in exactly one place. For
-// example, the type checker emits different error messages for "too many
-// arguments" and "too few arguments", but one can imagine an alternative type
-// checker where this check instead just emits a single "wrong number of
-// arguments", so these errors should have the same code.
-//
-// Error code names should be as brief as possible while retaining accuracy and
-// distinctiveness. In most cases names should start with an adjective
-// describing the nature of the error (e.g. "invalid", "unused", "misplaced"),
-// and end with a noun identifying the relevant language object. For example,
-// "DuplicateDecl" or "InvalidSliceExpr". For brevity, naming follows the
-// convention that "bad" implies a problem with syntax, and "invalid" implies a
-// problem with types.
-
-const (
- // InvalidSyntaxTree occurs if an invalid syntax tree is provided
- // to the type checker. It should never happen.
- InvalidSyntaxTree ErrorCode = -1
-)
-
-const (
- _ ErrorCode = iota
-
- // Test is reserved for errors that only apply while in self-test mode.
- Test
-
- /* package names */
-
- // BlankPkgName occurs when a package name is the blank identifier "_".
- //
- // Per the spec:
- // "The PackageName must not be the blank identifier."
- BlankPkgName
-
- // MismatchedPkgName occurs when a file's package name doesn't match the
- // package name already established by other files.
- MismatchedPkgName
-
- // InvalidPkgUse occurs when a package identifier is used outside of a
- // selector expression.
- //
- // Example:
- // import "fmt"
- //
- // var _ = fmt
- InvalidPkgUse
-
- /* imports */
-
- // BadImportPath occurs when an import path is not valid.
- BadImportPath
-
- // BrokenImport occurs when importing a package fails.
- //
- // Example:
- // import "amissingpackage"
- BrokenImport
-
- // ImportCRenamed occurs when the special import "C" is renamed. "C" is a
- // pseudo-package, and must not be renamed.
- //
- // Example:
- // import _ "C"
- ImportCRenamed
-
- // UnusedImport occurs when an import is unused.
- //
- // Example:
- // import "fmt"
- //
- // func main() {}
- UnusedImport
-
- /* initialization */
-
- // InvalidInitCycle occurs when an invalid cycle is detected within the
- // initialization graph.
- //
- // Example:
- // var x int = f()
- //
- // func f() int { return x }
- InvalidInitCycle
-
- /* decls */
-
- // DuplicateDecl occurs when an identifier is declared multiple times.
- //
- // Example:
- // var x = 1
- // var x = 2
- DuplicateDecl
-
- // InvalidDeclCycle occurs when a declaration cycle is not valid.
- //
- // Example:
- // import "unsafe"
- //
- // type T struct {
- // a [n]int
- // }
- //
- // var n = unsafe.Sizeof(T{})
- InvalidDeclCycle
-
- // InvalidTypeCycle occurs when a cycle in type definitions results in a
- // type that is not well-defined.
- //
- // Example:
- // import "unsafe"
- //
- // type T [unsafe.Sizeof(T{})]int
- InvalidTypeCycle
-
- /* decls > const */
-
- // InvalidConstInit occurs when a const declaration has a non-constant
- // initializer.
- //
- // Example:
- // var x int
- // const _ = x
- InvalidConstInit
-
- // InvalidConstVal occurs when a const value cannot be converted to its
- // target type.
- //
- // TODO(findleyr): this error code and example are not very clear. Consider
- // removing it.
- //
- // Example:
- // const _ = 1 << "hello"
- InvalidConstVal
-
- // InvalidConstType occurs when the underlying type in a const declaration
- // is not a valid constant type.
- //
- // Example:
- // const c *int = 4
- InvalidConstType
-
- /* decls > var (+ other variable assignment codes) */
-
- // UntypedNilUse occurs when the predeclared (untyped) value nil is used to
- // initialize a variable declared without an explicit type.
- //
- // Example:
- // var x = nil
- UntypedNilUse
-
- // WrongAssignCount occurs when the number of values on the right-hand side
- // of an assignment or initialization expression does not match the number
- // of variables on the left-hand side.
- //
- // Example:
- // var x = 1, 2
- WrongAssignCount
-
- // UnassignableOperand occurs when the left-hand side of an assignment is
- // not assignable.
- //
- // Example:
- // func f() {
- // const c = 1
- // c = 2
- // }
- UnassignableOperand
-
- // NoNewVar occurs when a short variable declaration (':=') does not declare
- // new variables.
- //
- // Example:
- // func f() {
- // x := 1
- // x := 2
- // }
- NoNewVar
-
- // MultiValAssignOp occurs when an assignment operation (+=, *=, etc) does
- // not have single-valued left-hand or right-hand side.
- //
- // Per the spec:
- // "In assignment operations, both the left- and right-hand expression lists
- // must contain exactly one single-valued expression"
- //
- // Example:
- // func f() int {
- // x, y := 1, 2
- // x, y += 1
- // return x + y
- // }
- MultiValAssignOp
-
- // InvalidIfaceAssign occurs when a value of type T is used as an
- // interface, but T does not implement a method of the expected interface.
- //
- // Example:
- // type I interface {
- // f()
- // }
- //
- // type T int
- //
- // var x I = T(1)
- InvalidIfaceAssign
-
- // InvalidChanAssign occurs when a chan assignment is invalid.
- //
- // Per the spec, a value x is assignable to a channel type T if:
- // "x is a bidirectional channel value, T is a channel type, x's type V and
- // T have identical element types, and at least one of V or T is not a
- // defined type."
- //
- // Example:
- // type T1 chan int
- // type T2 chan int
- //
- // var x T1
- // // Invalid assignment because both types are named
- // var _ T2 = x
- InvalidChanAssign
-
- // IncompatibleAssign occurs when the type of the right-hand side expression
- // in an assignment cannot be assigned to the type of the variable being
- // assigned.
- //
- // Example:
- // var x []int
- // var _ int = x
- IncompatibleAssign
-
- // UnaddressableFieldAssign occurs when trying to assign to a struct field
- // in a map value.
- //
- // Example:
- // func f() {
- // m := make(map[string]struct{i int})
- // m["foo"].i = 42
- // }
- UnaddressableFieldAssign
-
- /* decls > type (+ other type expression codes) */
-
- // NotAType occurs when the identifier used as the underlying type in a type
- // declaration or the right-hand side of a type alias does not denote a type.
- //
- // Example:
- // var S = 2
- //
- // type T S
- NotAType
-
- // InvalidArrayLen occurs when an array length is not a constant value.
- //
- // Example:
- // var n = 3
- // var _ = [n]int{}
- InvalidArrayLen
-
- // BlankIfaceMethod occurs when a method name is '_'.
- //
- // Per the spec:
- // "The name of each explicitly specified method must be unique and not
- // blank."
- //
- // Example:
- // type T interface {
- // _(int)
- // }
- BlankIfaceMethod
-
- // IncomparableMapKey occurs when a map key type does not support the == and
- // != operators.
- //
- // Per the spec:
- // "The comparison operators == and != must be fully defined for operands of
- // the key type; thus the key type must not be a function, map, or slice."
- //
- // Example:
- // var x map[T]int
- //
- // type T []int
- IncomparableMapKey
-
- // InvalidIfaceEmbed occurs when a non-interface type is embedded in an
- // interface.
- //
- // Example:
- // type T struct {}
- //
- // func (T) m()
- //
- // type I interface {
- // T
- // }
- InvalidIfaceEmbed
-
- // InvalidPtrEmbed occurs when an embedded field is of the pointer form *T,
- // and T itself is itself a pointer, an unsafe.Pointer, or an interface.
- //
- // Per the spec:
- // "An embedded field must be specified as a type name T or as a pointer to
- // a non-interface type name *T, and T itself may not be a pointer type."
- //
- // Example:
- // type T *int
- //
- // type S struct {
- // *T
- // }
- InvalidPtrEmbed
-
- /* decls > func and method */
-
- // BadRecv occurs when a method declaration does not have exactly one
- // receiver parameter.
- //
- // Example:
- // func () _() {}
- BadRecv
-
- // InvalidRecv occurs when a receiver type expression is not of the form T
- // or *T, or T is a pointer type.
- //
- // Example:
- // type T struct {}
- //
- // func (**T) m() {}
- InvalidRecv
-
- // DuplicateFieldAndMethod occurs when an identifier appears as both a field
- // and method name.
- //
- // Example:
- // type T struct {
- // m int
- // }
- //
- // func (T) m() {}
- DuplicateFieldAndMethod
-
- // DuplicateMethod occurs when two methods on the same receiver type have
- // the same name.
- //
- // Example:
- // type T struct {}
- // func (T) m() {}
- // func (T) m(i int) int { return i }
- DuplicateMethod
-
- /* decls > special */
-
- // InvalidBlank occurs when a blank identifier is used as a value or type.
- //
- // Per the spec:
- // "The blank identifier may appear as an operand only on the left-hand side
- // of an assignment."
- //
- // Example:
- // var x = _
- InvalidBlank
-
- // InvalidIota occurs when the predeclared identifier iota is used outside
- // of a constant declaration.
- //
- // Example:
- // var x = iota
- InvalidIota
-
- // MissingInitBody occurs when an init function is missing its body.
- //
- // Example:
- // func init()
- MissingInitBody
-
- // InvalidInitSig occurs when an init function declares parameters or
- // results.
- //
- // Example:
- // func init() int { return 1 }
- InvalidInitSig
-
- // InvalidInitDecl occurs when init is declared as anything other than a
- // function.
- //
- // Example:
- // var init = 1
- InvalidInitDecl
-
- // InvalidMainDecl occurs when main is declared as anything other than a
- // function, in a main package.
- InvalidMainDecl
-
- /* exprs */
-
- // TooManyValues occurs when a function returns too many values for the
- // expression context in which it is used.
- //
- // Example:
- // func ReturnTwo() (int, int) {
- // return 1, 2
- // }
- //
- // var x = ReturnTwo()
- TooManyValues
-
- // NotAnExpr occurs when a type expression is used where a value expression
- // is expected.
- //
- // Example:
- // type T struct {}
- //
- // func f() {
- // T
- // }
- NotAnExpr
-
- /* exprs > const */
-
- // TruncatedFloat occurs when a float constant is truncated to an integer
- // value.
- //
- // Example:
- // var _ int = 98.6
- TruncatedFloat
-
- // NumericOverflow occurs when a numeric constant overflows its target type.
- //
- // Example:
- // var x int8 = 1000
- NumericOverflow
-
- /* exprs > operation */
-
- // UndefinedOp occurs when an operator is not defined for the type(s) used
- // in an operation.
- //
- // Example:
- // var c = "a" - "b"
- UndefinedOp
-
- // MismatchedTypes occurs when operand types are incompatible in a binary
- // operation.
- //
- // Example:
- // var a = "hello"
- // var b = 1
- // var c = a - b
- MismatchedTypes
-
- // DivByZero occurs when a division operation is provable at compile
- // time to be a division by zero.
- //
- // Example:
- // const divisor = 0
- // var x int = 1/divisor
- DivByZero
-
- // NonNumericIncDec occurs when an increment or decrement operator is
- // applied to a non-numeric value.
- //
- // Example:
- // func f() {
- // var c = "c"
- // c++
- // }
- NonNumericIncDec
-
- /* exprs > ptr */
-
- // UnaddressableOperand occurs when the & operator is applied to an
- // unaddressable expression.
- //
- // Example:
- // var x = &1
- UnaddressableOperand
-
- // InvalidIndirection occurs when a non-pointer value is indirected via the
- // '*' operator.
- //
- // Example:
- // var x int
- // var y = *x
- InvalidIndirection
-
- /* exprs > [] */
-
- // NonIndexableOperand occurs when an index operation is applied to a value
- // that cannot be indexed.
- //
- // Example:
- // var x = 1
- // var y = x[1]
- NonIndexableOperand
-
- // InvalidIndex occurs when an index argument is not of integer type,
- // negative, or out-of-bounds.
- //
- // Example:
- // var s = [...]int{1,2,3}
- // var x = s[5]
- //
- // Example:
- // var s = []int{1,2,3}
- // var _ = s[-1]
- //
- // Example:
- // var s = []int{1,2,3}
- // var i string
- // var _ = s[i]
- InvalidIndex
-
- // SwappedSliceIndices occurs when constant indices in a slice expression
- // are decreasing in value.
- //
- // Example:
- // var _ = []int{1,2,3}[2:1]
- SwappedSliceIndices
-
- /* operators > slice */
-
- // NonSliceableOperand occurs when a slice operation is applied to a value
- // whose type is not sliceable, or is unaddressable.
- //
- // Example:
- // var x = [...]int{1, 2, 3}[:1]
- //
- // Example:
- // var x = 1
- // var y = 1[:1]
- NonSliceableOperand
-
- // InvalidSliceExpr occurs when a three-index slice expression (a[x:y:z]) is
- // applied to a string.
- //
- // Example:
- // var s = "hello"
- // var x = s[1:2:3]
- InvalidSliceExpr
-
- /* exprs > shift */
-
- // InvalidShiftCount occurs when the right-hand side of a shift operation is
- // either non-integer, negative, or too large.
- //
- // Example:
- // var (
- // x string
- // y int = 1 << x
- // )
- InvalidShiftCount
-
- // InvalidShiftOperand occurs when the shifted operand is not an integer.
- //
- // Example:
- // var s = "hello"
- // var x = s << 2
- InvalidShiftOperand
-
- /* exprs > chan */
-
- // InvalidReceive occurs when there is a channel receive from a value that
- // is either not a channel, or is a send-only channel.
- //
- // Example:
- // func f() {
- // var x = 1
- // <-x
- // }
- InvalidReceive
-
- // InvalidSend occurs when there is a channel send to a value that is not a
- // channel, or is a receive-only channel.
- //
- // Example:
- // func f() {
- // var x = 1
- // x <- "hello!"
- // }
- InvalidSend
-
- /* exprs > literal */
-
- // DuplicateLitKey occurs when an index is duplicated in a slice, array, or
- // map literal.
- //
- // Example:
- // var _ = []int{0:1, 0:2}
- //
- // Example:
- // var _ = map[string]int{"a": 1, "a": 2}
- DuplicateLitKey
-
- // MissingLitKey occurs when a map literal is missing a key expression.
- //
- // Example:
- // var _ = map[string]int{1}
- MissingLitKey
-
- // InvalidLitIndex occurs when the key in a key-value element of a slice or
- // array literal is not an integer constant.
- //
- // Example:
- // var i = 0
- // var x = []string{i: "world"}
- InvalidLitIndex
-
- // OversizeArrayLit occurs when an array literal exceeds its length.
- //
- // Example:
- // var _ = [2]int{1,2,3}
- OversizeArrayLit
-
- // MixedStructLit occurs when a struct literal contains a mix of positional
- // and named elements.
- //
- // Example:
- // var _ = struct{i, j int}{i: 1, 2}
- MixedStructLit
-
- // InvalidStructLit occurs when a positional struct literal has an incorrect
- // number of values.
- //
- // Example:
- // var _ = struct{i, j int}{1,2,3}
- InvalidStructLit
-
- // MissingLitField occurs when a struct literal refers to a field that does
- // not exist on the struct type.
- //
- // Example:
- // var _ = struct{i int}{j: 2}
- MissingLitField
-
- // DuplicateLitField occurs when a struct literal contains duplicated
- // fields.
- //
- // Example:
- // var _ = struct{i int}{i: 1, i: 2}
- DuplicateLitField
-
- // UnexportedLitField occurs when a positional struct literal implicitly
- // assigns an unexported field of an imported type.
- UnexportedLitField
-
- // InvalidLitField occurs when a field name is not a valid identifier.
- //
- // Example:
- // var _ = struct{i int}{1: 1}
- InvalidLitField
-
- // UntypedLit occurs when a composite literal omits a required type
- // identifier.
- //
- // Example:
- // type outer struct{
- // inner struct { i int }
- // }
- //
- // var _ = outer{inner: {1}}
- UntypedLit
-
- // InvalidLit occurs when a composite literal expression does not match its
- // type.
- //
- // Example:
- // type P *struct{
- // x int
- // }
- // var _ = P {}
- InvalidLit
-
- /* exprs > selector */
-
- // AmbiguousSelector occurs when a selector is ambiguous.
- //
- // Example:
- // type E1 struct { i int }
- // type E2 struct { i int }
- // type T struct { E1; E2 }
- //
- // var x T
- // var _ = x.i
- AmbiguousSelector
-
- // UndeclaredImportedName occurs when a package-qualified identifier is
- // undeclared by the imported package.
- //
- // Example:
- // import "go/types"
- //
- // var _ = types.NotAnActualIdentifier
- UndeclaredImportedName
-
- // UnexportedName occurs when a selector refers to an unexported identifier
- // of an imported package.
- //
- // Example:
- // import "reflect"
- //
- // type _ reflect.flag
- UnexportedName
-
- // UndeclaredName occurs when an identifier is not declared in the current
- // scope.
- //
- // Example:
- // var x T
- UndeclaredName
-
- // MissingFieldOrMethod occurs when a selector references a field or method
- // that does not exist.
- //
- // Example:
- // type T struct {}
- //
- // var x = T{}.f
- MissingFieldOrMethod
-
- /* exprs > ... */
-
- // BadDotDotDotSyntax occurs when a "..." occurs in a context where it is
- // not valid.
- //
- // Example:
- // var _ = map[int][...]int{0: {}}
- BadDotDotDotSyntax
-
- // NonVariadicDotDotDot occurs when a "..." is used on the final argument to
- // a non-variadic function.
- //
- // Example:
- // func printArgs(s []string) {
- // for _, a := range s {
- // println(a)
- // }
- // }
- //
- // func f() {
- // s := []string{"a", "b", "c"}
- // printArgs(s...)
- // }
- NonVariadicDotDotDot
-
- // MisplacedDotDotDot occurs when a "..." is used somewhere other than the
- // final argument to a function call.
- //
- // Example:
- // func printArgs(args ...int) {
- // for _, a := range args {
- // println(a)
- // }
- // }
- //
- // func f() {
- // a := []int{1,2,3}
- // printArgs(0, a...)
- // }
- MisplacedDotDotDot
-
- // InvalidDotDotDotOperand occurs when a "..." operator is applied to a
- // single-valued operand.
- //
- // Example:
- // func printArgs(args ...int) {
- // for _, a := range args {
- // println(a)
- // }
- // }
- //
- // func f() {
- // a := 1
- // printArgs(a...)
- // }
- //
- // Example:
- // func args() (int, int) {
- // return 1, 2
- // }
- //
- // func printArgs(args ...int) {
- // for _, a := range args {
- // println(a)
- // }
- // }
- //
- // func g() {
- // printArgs(args()...)
- // }
- InvalidDotDotDotOperand
-
- // InvalidDotDotDot occurs when a "..." is used in a non-variadic built-in
- // function.
- //
- // Example:
- // var s = []int{1, 2, 3}
- // var l = len(s...)
- InvalidDotDotDot
-
- /* exprs > built-in */
-
- // UncalledBuiltin occurs when a built-in function is used as a
- // function-valued expression, instead of being called.
- //
- // Per the spec:
- // "The built-in functions do not have standard Go types, so they can only
- // appear in call expressions; they cannot be used as function values."
- //
- // Example:
- // var _ = copy
- UncalledBuiltin
-
- // InvalidAppend occurs when append is called with a first argument that is
- // not a slice.
- //
- // Example:
- // var _ = append(1, 2)
- InvalidAppend
-
- // InvalidCap occurs when an argument to the cap built-in function is not of
- // supported type.
- //
- // See https://golang.org/ref/spec#Length_and_capacity for information on
- // which underlying types are supported as arguments to cap and len.
- //
- // Example:
- // var s = 2
- // var x = cap(s)
- InvalidCap
-
- // InvalidClose occurs when close(...) is called with an argument that is
- // not of channel type, or that is a receive-only channel.
- //
- // Example:
- // func f() {
- // var x int
- // close(x)
- // }
- InvalidClose
-
- // InvalidCopy occurs when the arguments are not of slice type or do not
- // have compatible type.
- //
- // See https://golang.org/ref/spec#Appending_and_copying_slices for more
- // information on the type requirements for the copy built-in.
- //
- // Example:
- // func f() {
- // var x []int
- // y := []int64{1,2,3}
- // copy(x, y)
- // }
- InvalidCopy
-
- // InvalidComplex occurs when the complex built-in function is called with
- // arguments with incompatible types.
- //
- // Example:
- // var _ = complex(float32(1), float64(2))
- InvalidComplex
-
- // InvalidDelete occurs when the delete built-in function is called with a
- // first argument that is not a map.
- //
- // Example:
- // func f() {
- // m := "hello"
- // delete(m, "e")
- // }
- InvalidDelete
-
- // InvalidImag occurs when the imag built-in function is called with an
- // argument that does not have complex type.
- //
- // Example:
- // var _ = imag(int(1))
- InvalidImag
-
- // InvalidLen occurs when an argument to the len built-in function is not of
- // supported type.
- //
- // See https://golang.org/ref/spec#Length_and_capacity for information on
- // which underlying types are supported as arguments to cap and len.
- //
- // Example:
- // var s = 2
- // var x = len(s)
- InvalidLen
-
- // SwappedMakeArgs occurs when make is called with three arguments, and its
- // length argument is larger than its capacity argument.
- //
- // Example:
- // var x = make([]int, 3, 2)
- SwappedMakeArgs
-
- // InvalidMake occurs when make is called with an unsupported type argument.
- //
- // See https://golang.org/ref/spec#Making_slices_maps_and_channels for
- // information on the types that may be created using make.
- //
- // Example:
- // var x = make(int)
- InvalidMake
-
- // InvalidReal occurs when the real built-in function is called with an
- // argument that does not have complex type.
- //
- // Example:
- // var _ = real(int(1))
- InvalidReal
-
- /* exprs > assertion */
-
- // InvalidAssert occurs when a type assertion is applied to a
- // value that is not of interface type.
- //
- // Example:
- // var x = 1
- // var _ = x.(float64)
- InvalidAssert
-
- // ImpossibleAssert occurs for a type assertion x.(T) when the value x of
- // interface cannot have dynamic type T, due to a missing or mismatching
- // method on T.
- //
- // Example:
- // type T int
- //
- // func (t *T) m() int { return int(*t) }
- //
- // type I interface { m() int }
- //
- // var x I
- // var _ = x.(T)
- ImpossibleAssert
-
- /* exprs > conversion */
-
- // InvalidConversion occurs when the argument type cannot be converted to the
- // target.
- //
- // See https://golang.org/ref/spec#Conversions for the rules of
- // convertibility.
- //
- // Example:
- // var x float64
- // var _ = string(x)
- InvalidConversion
-
- // InvalidUntypedConversion occurs when an there is no valid implicit
- // conversion from an untyped value satisfying the type constraints of the
- // context in which it is used.
- //
- // Example:
- // var _ = 1 + ""
- InvalidUntypedConversion
-
- /* offsetof */
-
- // BadOffsetofSyntax occurs when unsafe.Offsetof is called with an argument
- // that is not a selector expression.
- //
- // Example:
- // import "unsafe"
- //
- // var x int
- // var _ = unsafe.Offsetof(x)
- BadOffsetofSyntax
-
- // InvalidOffsetof occurs when unsafe.Offsetof is called with a method
- // selector, rather than a field selector, or when the field is embedded via
- // a pointer.
- //
- // Per the spec:
- //
- // "If f is an embedded field, it must be reachable without pointer
- // indirections through fields of the struct. "
- //
- // Example:
- // import "unsafe"
- //
- // type T struct { f int }
- // type S struct { *T }
- // var s S
- // var _ = unsafe.Offsetof(s.f)
- //
- // Example:
- // import "unsafe"
- //
- // type S struct{}
- //
- // func (S) m() {}
- //
- // var s S
- // var _ = unsafe.Offsetof(s.m)
- InvalidOffsetof
-
- /* control flow > scope */
-
- // UnusedExpr occurs when a side-effect free expression is used as a
- // statement. Such a statement has no effect.
- //
- // Example:
- // func f(i int) {
- // i*i
- // }
- UnusedExpr
-
- // UnusedVar occurs when a variable is declared but unused.
- //
- // Example:
- // func f() {
- // x := 1
- // }
- UnusedVar
-
- // MissingReturn occurs when a function with results is missing a return
- // statement.
- //
- // Example:
- // func f() int {}
- MissingReturn
-
- // WrongResultCount occurs when a return statement returns an incorrect
- // number of values.
- //
- // Example:
- // func ReturnOne() int {
- // return 1, 2
- // }
- WrongResultCount
-
- // OutOfScopeResult occurs when the name of a value implicitly returned by
- // an empty return statement is shadowed in a nested scope.
- //
- // Example:
- // func factor(n int) (i int) {
- // for i := 2; i < n; i++ {
- // if n%i == 0 {
- // return
- // }
- // }
- // return 0
- // }
- OutOfScopeResult
-
- /* control flow > if */
-
- // InvalidCond occurs when an if condition is not a boolean expression.
- //
- // Example:
- // func checkReturn(i int) {
- // if i {
- // panic("non-zero return")
- // }
- // }
- InvalidCond
-
- /* control flow > for */
-
- // InvalidPostDecl occurs when there is a declaration in a for-loop post
- // statement.
- //
- // Example:
- // func f() {
- // for i := 0; i < 10; j := 0 {}
- // }
- InvalidPostDecl
-
- // InvalidChanRange occurs when a send-only channel used in a range
- // expression.
- //
- // Example:
- // func sum(c chan<- int) {
- // s := 0
- // for i := range c {
- // s += i
- // }
- // }
- InvalidChanRange
-
- // InvalidIterVar occurs when two iteration variables are used while ranging
- // over a channel.
- //
- // Example:
- // func f(c chan int) {
- // for k, v := range c {
- // println(k, v)
- // }
- // }
- InvalidIterVar
-
- // InvalidRangeExpr occurs when the type of a range expression is not array,
- // slice, string, map, or channel.
- //
- // Example:
- // func f(i int) {
- // for j := range i {
- // println(j)
- // }
- // }
- InvalidRangeExpr
-
- /* control flow > switch */
-
- // MisplacedBreak occurs when a break statement is not within a for, switch,
- // or select statement of the innermost function definition.
- //
- // Example:
- // func f() {
- // break
- // }
- MisplacedBreak
-
- // MisplacedContinue occurs when a continue statement is not within a for
- // loop of the innermost function definition.
- //
- // Example:
- // func sumeven(n int) int {
- // proceed := func() {
- // continue
- // }
- // sum := 0
- // for i := 1; i <= n; i++ {
- // if i % 2 != 0 {
- // proceed()
- // }
- // sum += i
- // }
- // return sum
- // }
- MisplacedContinue
-
- // MisplacedFallthrough occurs when a fallthrough statement is not within an
- // expression switch.
- //
- // Example:
- // func typename(i interface{}) string {
- // switch i.(type) {
- // case int64:
- // fallthrough
- // case int:
- // return "int"
- // }
- // return "unsupported"
- // }
- MisplacedFallthrough
-
- // DuplicateCase occurs when a type or expression switch has duplicate
- // cases.
- //
- // Example:
- // func printInt(i int) {
- // switch i {
- // case 1:
- // println("one")
- // case 1:
- // println("One")
- // }
- // }
- DuplicateCase
-
- // DuplicateDefault occurs when a type or expression switch has multiple
- // default clauses.
- //
- // Example:
- // func printInt(i int) {
- // switch i {
- // case 1:
- // println("one")
- // default:
- // println("One")
- // default:
- // println("1")
- // }
- // }
- DuplicateDefault
-
- // BadTypeKeyword occurs when a .(type) expression is used anywhere other
- // than a type switch.
- //
- // Example:
- // type I interface {
- // m()
- // }
- // var t I
- // var _ = t.(type)
- BadTypeKeyword
-
- // InvalidTypeSwitch occurs when .(type) is used on an expression that is
- // not of interface type.
- //
- // Example:
- // func f(i int) {
- // switch x := i.(type) {}
- // }
- InvalidTypeSwitch
-
- // InvalidExprSwitch occurs when a switch expression is not comparable.
- //
- // Example:
- // func _() {
- // var a struct{ _ func() }
- // switch a /* ERROR cannot switch on a */ {
- // }
- // }
- InvalidExprSwitch
-
- /* control flow > select */
-
- // InvalidSelectCase occurs when a select case is not a channel send or
- // receive.
- //
- // Example:
- // func checkChan(c <-chan int) bool {
- // select {
- // case c:
- // return true
- // default:
- // return false
- // }
- // }
- InvalidSelectCase
-
- /* control flow > labels and jumps */
-
- // UndeclaredLabel occurs when an undeclared label is jumped to.
- //
- // Example:
- // func f() {
- // goto L
- // }
- UndeclaredLabel
-
- // DuplicateLabel occurs when a label is declared more than once.
- //
- // Example:
- // func f() int {
- // L:
- // L:
- // return 1
- // }
- DuplicateLabel
-
- // MisplacedLabel occurs when a break or continue label is not on a for,
- // switch, or select statement.
- //
- // Example:
- // func f() {
- // L:
- // a := []int{1,2,3}
- // for _, e := range a {
- // if e > 10 {
- // break L
- // }
- // println(a)
- // }
- // }
- MisplacedLabel
-
- // UnusedLabel occurs when a label is declared but not used.
- //
- // Example:
- // func f() {
- // L:
- // }
- UnusedLabel
-
- // JumpOverDecl occurs when a label jumps over a variable declaration.
- //
- // Example:
- // func f() int {
- // goto L
- // x := 2
- // L:
- // x++
- // return x
- // }
- JumpOverDecl
-
- // JumpIntoBlock occurs when a forward jump goes to a label inside a nested
- // block.
- //
- // Example:
- // func f(x int) {
- // goto L
- // if x > 0 {
- // L:
- // print("inside block")
- // }
- // }
- JumpIntoBlock
-
- /* control flow > calls */
-
- // InvalidMethodExpr occurs when a pointer method is called but the argument
- // is not addressable.
- //
- // Example:
- // type T struct {}
- //
- // func (*T) m() int { return 1 }
- //
- // var _ = T.m(T{})
- InvalidMethodExpr
-
- // WrongArgCount occurs when too few or too many arguments are passed by a
- // function call.
- //
- // Example:
- // func f(i int) {}
- // var x = f()
- WrongArgCount
-
- // InvalidCall occurs when an expression is called that is not of function
- // type.
- //
- // Example:
- // var x = "x"
- // var y = x()
- InvalidCall
-
- /* control flow > suspended */
-
- // UnusedResults occurs when a restricted expression-only built-in function
- // is suspended via go or defer. Such a suspension discards the results of
- // these side-effect free built-in functions, and therefore is ineffectual.
- //
- // Example:
- // func f(a []int) int {
- // defer len(a)
- // return i
- // }
- UnusedResults
-
- // InvalidDefer occurs when a deferred expression is not a function call,
- // for example if the expression is a type conversion.
- //
- // Example:
- // func f(i int) int {
- // defer int32(i)
- // return i
- // }
- InvalidDefer
-
- // InvalidGo occurs when a go expression is not a function call, for example
- // if the expression is a type conversion.
- //
- // Example:
- // func f(i int) int {
- // go int32(i)
- // return i
- // }
- InvalidGo
-
- // All codes below were added in Go 1.17.
-
- /* decl */
-
- // BadDecl occurs when a declaration has invalid syntax.
- BadDecl
-
- // RepeatedDecl occurs when an identifier occurs more than once on the left
- // hand side of a short variable declaration.
- //
- // Example:
- // func _() {
- // x, y, y := 1, 2, 3
- // }
- RepeatedDecl
-
- /* unsafe */
-
- // InvalidUnsafeAdd occurs when unsafe.Add is called with a
- // length argument that is not of integer type.
- //
- // Example:
- // import "unsafe"
- //
- // var p unsafe.Pointer
- // var _ = unsafe.Add(p, float64(1))
- InvalidUnsafeAdd
-
- // InvalidUnsafeSlice occurs when unsafe.Slice is called with a
- // pointer argument that is not of pointer type or a length argument
- // that is not of integer type, negative, or out of bounds.
- //
- // Example:
- // import "unsafe"
- //
- // var x int
- // var _ = unsafe.Slice(x, 1)
- //
- // Example:
- // import "unsafe"
- //
- // var x int
- // var _ = unsafe.Slice(&x, float64(1))
- //
- // Example:
- // import "unsafe"
- //
- // var x int
- // var _ = unsafe.Slice(&x, -1)
- //
- // Example:
- // import "unsafe"
- //
- // var x int
- // var _ = unsafe.Slice(&x, uint64(1) << 63)
- InvalidUnsafeSlice
-
- // All codes below were added in Go 1.18.
-
- /* features */
-
- // UnsupportedFeature occurs when a language feature is used that is not
- // supported at this Go version.
- UnsupportedFeature
-
- /* type params */
-
- // NotAGenericType occurs when a non-generic type is used where a generic
- // type is expected: in type or function instantiation.
- //
- // Example:
- // type T int
- //
- // var _ T[int]
- NotAGenericType
-
- // WrongTypeArgCount occurs when a type or function is instantiated with an
- // incorrect number of type arguments, including when a generic type or
- // function is used without instantiation.
- //
- // Errors involving failed type inference are assigned other error codes.
- //
- // Example:
- // type T[p any] int
- //
- // var _ T[int, string]
- //
- // Example:
- // func f[T any]() {}
- //
- // var x = f
- WrongTypeArgCount
-
- // CannotInferTypeArgs occurs when type or function type argument inference
- // fails to infer all type arguments.
- //
- // Example:
- // func f[T any]() {}
- //
- // func _() {
- // f()
- // }
- //
- // Example:
- // type N[P, Q any] struct{}
- //
- // var _ N[int]
- CannotInferTypeArgs
-
- // InvalidTypeArg occurs when a type argument does not satisfy its
- // corresponding type parameter constraints.
- //
- // Example:
- // type T[P ~int] struct{}
- //
- // var _ T[string]
- InvalidTypeArg // arguments? InferenceFailed
-
- // InvalidInstanceCycle occurs when an invalid cycle is detected
- // within the instantiation graph.
- //
- // Example:
- // func f[T any]() { f[*T]() }
- InvalidInstanceCycle
-
- // InvalidUnion occurs when an embedded union or approximation element is
- // not valid.
- //
- // Example:
- // type _ interface {
- // ~int | interface{ m() }
- // }
- InvalidUnion
-
- // MisplacedConstraintIface occurs when a constraint-type interface is used
- // outside of constraint position.
- //
- // Example:
- // type I interface { ~int }
- //
- // var _ I
- MisplacedConstraintIface
-
- // InvalidMethodTypeParams occurs when methods have type parameters.
- //
- // It cannot be encountered with an AST parsed using go/parser.
- InvalidMethodTypeParams
-
- // MisplacedTypeParam occurs when a type parameter is used in a place where
- // it is not permitted.
- //
- // Example:
- // type T[P any] P
- //
- // Example:
- // type T[P any] struct{ *P }
- MisplacedTypeParam
-
- // InvalidUnsafeSliceData occurs when unsafe.SliceData is called with
- // an argument that is not of slice type. It also occurs if it is used
- // in a package compiled for a language version before go1.20.
- //
- // Example:
- // import "unsafe"
- //
- // var x int
- // var _ = unsafe.SliceData(x)
- InvalidUnsafeSliceData
-
- // InvalidUnsafeString occurs when unsafe.String is called with
- // a length argument that is not of integer type, negative, or
- // out of bounds. It also occurs if it is used in a package
- // compiled for a language version before go1.20.
- //
- // Example:
- // import "unsafe"
- //
- // var b [10]byte
- // var _ = unsafe.String(&b[0], -1)
- InvalidUnsafeString
-
- // InvalidUnsafeStringData occurs if it is used in a package
- // compiled for a language version before go1.20.
- _ // not used anymore
-
-)
diff --git a/vendor/golang.org/x/tools/internal/typesinternal/errorcode_string.go b/vendor/golang.org/x/tools/internal/typesinternal/errorcode_string.go
deleted file mode 100644
index 15ecf7c5ded..00000000000
--- a/vendor/golang.org/x/tools/internal/typesinternal/errorcode_string.go
+++ /dev/null
@@ -1,179 +0,0 @@
-// Code generated by "stringer -type=ErrorCode"; DO NOT EDIT.
-
-package typesinternal
-
-import "strconv"
-
-func _() {
- // An "invalid array index" compiler error signifies that the constant values have changed.
- // Re-run the stringer command to generate them again.
- var x [1]struct{}
- _ = x[InvalidSyntaxTree - -1]
- _ = x[Test-1]
- _ = x[BlankPkgName-2]
- _ = x[MismatchedPkgName-3]
- _ = x[InvalidPkgUse-4]
- _ = x[BadImportPath-5]
- _ = x[BrokenImport-6]
- _ = x[ImportCRenamed-7]
- _ = x[UnusedImport-8]
- _ = x[InvalidInitCycle-9]
- _ = x[DuplicateDecl-10]
- _ = x[InvalidDeclCycle-11]
- _ = x[InvalidTypeCycle-12]
- _ = x[InvalidConstInit-13]
- _ = x[InvalidConstVal-14]
- _ = x[InvalidConstType-15]
- _ = x[UntypedNilUse-16]
- _ = x[WrongAssignCount-17]
- _ = x[UnassignableOperand-18]
- _ = x[NoNewVar-19]
- _ = x[MultiValAssignOp-20]
- _ = x[InvalidIfaceAssign-21]
- _ = x[InvalidChanAssign-22]
- _ = x[IncompatibleAssign-23]
- _ = x[UnaddressableFieldAssign-24]
- _ = x[NotAType-25]
- _ = x[InvalidArrayLen-26]
- _ = x[BlankIfaceMethod-27]
- _ = x[IncomparableMapKey-28]
- _ = x[InvalidIfaceEmbed-29]
- _ = x[InvalidPtrEmbed-30]
- _ = x[BadRecv-31]
- _ = x[InvalidRecv-32]
- _ = x[DuplicateFieldAndMethod-33]
- _ = x[DuplicateMethod-34]
- _ = x[InvalidBlank-35]
- _ = x[InvalidIota-36]
- _ = x[MissingInitBody-37]
- _ = x[InvalidInitSig-38]
- _ = x[InvalidInitDecl-39]
- _ = x[InvalidMainDecl-40]
- _ = x[TooManyValues-41]
- _ = x[NotAnExpr-42]
- _ = x[TruncatedFloat-43]
- _ = x[NumericOverflow-44]
- _ = x[UndefinedOp-45]
- _ = x[MismatchedTypes-46]
- _ = x[DivByZero-47]
- _ = x[NonNumericIncDec-48]
- _ = x[UnaddressableOperand-49]
- _ = x[InvalidIndirection-50]
- _ = x[NonIndexableOperand-51]
- _ = x[InvalidIndex-52]
- _ = x[SwappedSliceIndices-53]
- _ = x[NonSliceableOperand-54]
- _ = x[InvalidSliceExpr-55]
- _ = x[InvalidShiftCount-56]
- _ = x[InvalidShiftOperand-57]
- _ = x[InvalidReceive-58]
- _ = x[InvalidSend-59]
- _ = x[DuplicateLitKey-60]
- _ = x[MissingLitKey-61]
- _ = x[InvalidLitIndex-62]
- _ = x[OversizeArrayLit-63]
- _ = x[MixedStructLit-64]
- _ = x[InvalidStructLit-65]
- _ = x[MissingLitField-66]
- _ = x[DuplicateLitField-67]
- _ = x[UnexportedLitField-68]
- _ = x[InvalidLitField-69]
- _ = x[UntypedLit-70]
- _ = x[InvalidLit-71]
- _ = x[AmbiguousSelector-72]
- _ = x[UndeclaredImportedName-73]
- _ = x[UnexportedName-74]
- _ = x[UndeclaredName-75]
- _ = x[MissingFieldOrMethod-76]
- _ = x[BadDotDotDotSyntax-77]
- _ = x[NonVariadicDotDotDot-78]
- _ = x[MisplacedDotDotDot-79]
- _ = x[InvalidDotDotDotOperand-80]
- _ = x[InvalidDotDotDot-81]
- _ = x[UncalledBuiltin-82]
- _ = x[InvalidAppend-83]
- _ = x[InvalidCap-84]
- _ = x[InvalidClose-85]
- _ = x[InvalidCopy-86]
- _ = x[InvalidComplex-87]
- _ = x[InvalidDelete-88]
- _ = x[InvalidImag-89]
- _ = x[InvalidLen-90]
- _ = x[SwappedMakeArgs-91]
- _ = x[InvalidMake-92]
- _ = x[InvalidReal-93]
- _ = x[InvalidAssert-94]
- _ = x[ImpossibleAssert-95]
- _ = x[InvalidConversion-96]
- _ = x[InvalidUntypedConversion-97]
- _ = x[BadOffsetofSyntax-98]
- _ = x[InvalidOffsetof-99]
- _ = x[UnusedExpr-100]
- _ = x[UnusedVar-101]
- _ = x[MissingReturn-102]
- _ = x[WrongResultCount-103]
- _ = x[OutOfScopeResult-104]
- _ = x[InvalidCond-105]
- _ = x[InvalidPostDecl-106]
- _ = x[InvalidChanRange-107]
- _ = x[InvalidIterVar-108]
- _ = x[InvalidRangeExpr-109]
- _ = x[MisplacedBreak-110]
- _ = x[MisplacedContinue-111]
- _ = x[MisplacedFallthrough-112]
- _ = x[DuplicateCase-113]
- _ = x[DuplicateDefault-114]
- _ = x[BadTypeKeyword-115]
- _ = x[InvalidTypeSwitch-116]
- _ = x[InvalidExprSwitch-117]
- _ = x[InvalidSelectCase-118]
- _ = x[UndeclaredLabel-119]
- _ = x[DuplicateLabel-120]
- _ = x[MisplacedLabel-121]
- _ = x[UnusedLabel-122]
- _ = x[JumpOverDecl-123]
- _ = x[JumpIntoBlock-124]
- _ = x[InvalidMethodExpr-125]
- _ = x[WrongArgCount-126]
- _ = x[InvalidCall-127]
- _ = x[UnusedResults-128]
- _ = x[InvalidDefer-129]
- _ = x[InvalidGo-130]
- _ = x[BadDecl-131]
- _ = x[RepeatedDecl-132]
- _ = x[InvalidUnsafeAdd-133]
- _ = x[InvalidUnsafeSlice-134]
- _ = x[UnsupportedFeature-135]
- _ = x[NotAGenericType-136]
- _ = x[WrongTypeArgCount-137]
- _ = x[CannotInferTypeArgs-138]
- _ = x[InvalidTypeArg-139]
- _ = x[InvalidInstanceCycle-140]
- _ = x[InvalidUnion-141]
- _ = x[MisplacedConstraintIface-142]
- _ = x[InvalidMethodTypeParams-143]
- _ = x[MisplacedTypeParam-144]
- _ = x[InvalidUnsafeSliceData-145]
- _ = x[InvalidUnsafeString-146]
-}
-
-const (
- _ErrorCode_name_0 = "InvalidSyntaxTree"
- _ErrorCode_name_1 = "TestBlankPkgNameMismatchedPkgNameInvalidPkgUseBadImportPathBrokenImportImportCRenamedUnusedImportInvalidInitCycleDuplicateDeclInvalidDeclCycleInvalidTypeCycleInvalidConstInitInvalidConstValInvalidConstTypeUntypedNilUseWrongAssignCountUnassignableOperandNoNewVarMultiValAssignOpInvalidIfaceAssignInvalidChanAssignIncompatibleAssignUnaddressableFieldAssignNotATypeInvalidArrayLenBlankIfaceMethodIncomparableMapKeyInvalidIfaceEmbedInvalidPtrEmbedBadRecvInvalidRecvDuplicateFieldAndMethodDuplicateMethodInvalidBlankInvalidIotaMissingInitBodyInvalidInitSigInvalidInitDeclInvalidMainDeclTooManyValuesNotAnExprTruncatedFloatNumericOverflowUndefinedOpMismatchedTypesDivByZeroNonNumericIncDecUnaddressableOperandInvalidIndirectionNonIndexableOperandInvalidIndexSwappedSliceIndicesNonSliceableOperandInvalidSliceExprInvalidShiftCountInvalidShiftOperandInvalidReceiveInvalidSendDuplicateLitKeyMissingLitKeyInvalidLitIndexOversizeArrayLitMixedStructLitInvalidStructLitMissingLitFieldDuplicateLitFieldUnexportedLitFieldInvalidLitFieldUntypedLitInvalidLitAmbiguousSelectorUndeclaredImportedNameUnexportedNameUndeclaredNameMissingFieldOrMethodBadDotDotDotSyntaxNonVariadicDotDotDotMisplacedDotDotDotInvalidDotDotDotOperandInvalidDotDotDotUncalledBuiltinInvalidAppendInvalidCapInvalidCloseInvalidCopyInvalidComplexInvalidDeleteInvalidImagInvalidLenSwappedMakeArgsInvalidMakeInvalidRealInvalidAssertImpossibleAssertInvalidConversionInvalidUntypedConversionBadOffsetofSyntaxInvalidOffsetofUnusedExprUnusedVarMissingReturnWrongResultCountOutOfScopeResultInvalidCondInvalidPostDeclInvalidChanRangeInvalidIterVarInvalidRangeExprMisplacedBreakMisplacedContinueMisplacedFallthroughDuplicateCaseDuplicateDefaultBadTypeKeywordInvalidTypeSwitchInvalidExprSwitchInvalidSelectCaseUndeclaredLabelDuplicateLabelMisplacedLabelUnusedLabelJumpOverDeclJumpIntoBlockInvalidMethodExprWrongArgCountInvalidCallUnusedResultsInvalidDeferInvalidGoBadDeclRepeatedDeclInvalidUnsafeAddInvalidUnsafeSliceUnsupportedFeatureNotAGenericTypeWrongTypeArgCountCannotInferTypeArgsInvalidTypeArgInvalidInstanceCycleInvalidUnionMisplacedConstraintIfaceInvalidMethodTypeParamsMisplacedTypeParamInvalidUnsafeSliceDataInvalidUnsafeString"
-)
-
-var (
- _ErrorCode_index_1 = [...]uint16{0, 4, 16, 33, 46, 59, 71, 85, 97, 113, 126, 142, 158, 174, 189, 205, 218, 234, 253, 261, 277, 295, 312, 330, 354, 362, 377, 393, 411, 428, 443, 450, 461, 484, 499, 511, 522, 537, 551, 566, 581, 594, 603, 617, 632, 643, 658, 667, 683, 703, 721, 740, 752, 771, 790, 806, 823, 842, 856, 867, 882, 895, 910, 926, 940, 956, 971, 988, 1006, 1021, 1031, 1041, 1058, 1080, 1094, 1108, 1128, 1146, 1166, 1184, 1207, 1223, 1238, 1251, 1261, 1273, 1284, 1298, 1311, 1322, 1332, 1347, 1358, 1369, 1382, 1398, 1415, 1439, 1456, 1471, 1481, 1490, 1503, 1519, 1535, 1546, 1561, 1577, 1591, 1607, 1621, 1638, 1658, 1671, 1687, 1701, 1718, 1735, 1752, 1767, 1781, 1795, 1806, 1818, 1831, 1848, 1861, 1872, 1885, 1897, 1906, 1913, 1925, 1941, 1959, 1977, 1992, 2009, 2028, 2042, 2062, 2074, 2098, 2121, 2139, 2161, 2180}
-)
-
-func (i ErrorCode) String() string {
- switch {
- case i == -1:
- return _ErrorCode_name_0
- case 1 <= i && i <= 146:
- i -= 1
- return _ErrorCode_name_1[_ErrorCode_index_1[i]:_ErrorCode_index_1[i+1]]
- default:
- return "ErrorCode(" + strconv.FormatInt(int64(i), 10) + ")"
- }
-}
diff --git a/vendor/golang.org/x/tools/internal/typesinternal/recv.go b/vendor/golang.org/x/tools/internal/typesinternal/recv.go
deleted file mode 100644
index ba6f4f4ebd5..00000000000
--- a/vendor/golang.org/x/tools/internal/typesinternal/recv.go
+++ /dev/null
@@ -1,41 +0,0 @@
-// Copyright 2024 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-package typesinternal
-
-import (
- "go/types"
-)
-
-// ReceiverNamed returns the named type (if any) associated with the
-// type of recv, which may be of the form N or *N, or aliases thereof.
-// It also reports whether a Pointer was present.
-func ReceiverNamed(recv *types.Var) (isPtr bool, named *types.Named) {
- t := recv.Type()
- if ptr, ok := types.Unalias(t).(*types.Pointer); ok {
- isPtr = true
- t = ptr.Elem()
- }
- named, _ = types.Unalias(t).(*types.Named)
- return
-}
-
-// Unpointer returns T given *T or an alias thereof.
-// For all other types it is the identity function.
-// It does not look at underlying types.
-// The result may be an alias.
-//
-// Use this function to strip off the optional pointer on a receiver
-// in a field or method selection, without losing the named type
-// (which is needed to compute the method set).
-//
-// See also [typeparams.MustDeref], which removes one level of
-// indirection from the type, regardless of named types (analogous to
-// a LOAD instruction).
-func Unpointer(t types.Type) types.Type {
- if ptr, ok := types.Unalias(t).(*types.Pointer); ok {
- return ptr.Elem()
- }
- return t
-}
diff --git a/vendor/golang.org/x/tools/internal/typesinternal/toonew.go b/vendor/golang.org/x/tools/internal/typesinternal/toonew.go
deleted file mode 100644
index cc86487eaa0..00000000000
--- a/vendor/golang.org/x/tools/internal/typesinternal/toonew.go
+++ /dev/null
@@ -1,89 +0,0 @@
-// Copyright 2024 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-package typesinternal
-
-import (
- "go/types"
-
- "golang.org/x/tools/internal/stdlib"
- "golang.org/x/tools/internal/versions"
-)
-
-// TooNewStdSymbols computes the set of package-level symbols
-// exported by pkg that are not available at the specified version.
-// The result maps each symbol to its minimum version.
-//
-// The pkg is allowed to contain type errors.
-func TooNewStdSymbols(pkg *types.Package, version string) map[types.Object]string {
- disallowed := make(map[types.Object]string)
-
- // Pass 1: package-level symbols.
- symbols := stdlib.PackageSymbols[pkg.Path()]
- for _, sym := range symbols {
- symver := sym.Version.String()
- if versions.Before(version, symver) {
- switch sym.Kind {
- case stdlib.Func, stdlib.Var, stdlib.Const, stdlib.Type:
- disallowed[pkg.Scope().Lookup(sym.Name)] = symver
- }
- }
- }
-
- // Pass 2: fields and methods.
- //
- // We allow fields and methods if their associated type is
- // disallowed, as otherwise we would report false positives
- // for compatibility shims. Consider:
- //
- // //go:build go1.22
- // type T struct { F std.Real } // correct new API
- //
- // //go:build !go1.22
- // type T struct { F fake } // shim
- // type fake struct { ... }
- // func (fake) M () {}
- //
- // These alternative declarations of T use either the std.Real
- // type, introduced in go1.22, or a fake type, for the field
- // F. (The fakery could be arbitrarily deep, involving more
- // nested fields and methods than are shown here.) Clients
- // that use the compatibility shim T will compile with any
- // version of go, whether older or newer than go1.22, but only
- // the newer version will use the std.Real implementation.
- //
- // Now consider a reference to method M in new(T).F.M() in a
- // module that requires a minimum of go1.21. The analysis may
- // occur using a version of Go higher than 1.21, selecting the
- // first version of T, so the method M is Real.M. This would
- // spuriously cause the analyzer to report a reference to a
- // too-new symbol even though this expression compiles just
- // fine (with the fake implementation) using go1.21.
- for _, sym := range symbols {
- symVersion := sym.Version.String()
- if !versions.Before(version, symVersion) {
- continue // allowed
- }
-
- var obj types.Object
- switch sym.Kind {
- case stdlib.Field:
- typename, name := sym.SplitField()
- if t := pkg.Scope().Lookup(typename); t != nil && disallowed[t] == "" {
- obj, _, _ = types.LookupFieldOrMethod(t.Type(), false, pkg, name)
- }
-
- case stdlib.Method:
- ptr, recvname, name := sym.SplitMethod()
- if t := pkg.Scope().Lookup(recvname); t != nil && disallowed[t] == "" {
- obj, _, _ = types.LookupFieldOrMethod(t.Type(), ptr, pkg, name)
- }
- }
- if obj != nil {
- disallowed[obj] = symVersion
- }
- }
-
- return disallowed
-}
diff --git a/vendor/golang.org/x/tools/internal/typesinternal/types.go b/vendor/golang.org/x/tools/internal/typesinternal/types.go
deleted file mode 100644
index 83923286120..00000000000
--- a/vendor/golang.org/x/tools/internal/typesinternal/types.go
+++ /dev/null
@@ -1,65 +0,0 @@
-// Copyright 2020 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-// Package typesinternal provides access to internal go/types APIs that are not
-// yet exported.
-package typesinternal
-
-import (
- "go/token"
- "go/types"
- "reflect"
- "unsafe"
-)
-
-func SetUsesCgo(conf *types.Config) bool {
- v := reflect.ValueOf(conf).Elem()
-
- f := v.FieldByName("go115UsesCgo")
- if !f.IsValid() {
- f = v.FieldByName("UsesCgo")
- if !f.IsValid() {
- return false
- }
- }
-
- addr := unsafe.Pointer(f.UnsafeAddr())
- *(*bool)(addr) = true
-
- return true
-}
-
-// ReadGo116ErrorData extracts additional information from types.Error values
-// generated by Go version 1.16 and later: the error code, start position, and
-// end position. If all positions are valid, start <= err.Pos <= end.
-//
-// If the data could not be read, the final result parameter will be false.
-func ReadGo116ErrorData(err types.Error) (code ErrorCode, start, end token.Pos, ok bool) {
- var data [3]int
- // By coincidence all of these fields are ints, which simplifies things.
- v := reflect.ValueOf(err)
- for i, name := range []string{"go116code", "go116start", "go116end"} {
- f := v.FieldByName(name)
- if !f.IsValid() {
- return 0, 0, 0, false
- }
- data[i] = int(f.Int())
- }
- return ErrorCode(data[0]), token.Pos(data[1]), token.Pos(data[2]), true
-}
-
-// NameRelativeTo returns a types.Qualifier that qualifies members of
-// all packages other than pkg, using only the package name.
-// (By contrast, [types.RelativeTo] uses the complete package path,
-// which is often excessive.)
-//
-// If pkg is nil, it is equivalent to [*types.Package.Name].
-func NameRelativeTo(pkg *types.Package) types.Qualifier {
- return func(other *types.Package) string {
- if pkg != nil && pkg == other {
- return "" // same package; unqualified
- }
- return other.Name()
- }
-}
diff --git a/vendor/golang.org/x/tools/internal/versions/constraint.go b/vendor/golang.org/x/tools/internal/versions/constraint.go
deleted file mode 100644
index 179063d4848..00000000000
--- a/vendor/golang.org/x/tools/internal/versions/constraint.go
+++ /dev/null
@@ -1,13 +0,0 @@
-// Copyright 2024 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-package versions
-
-import "go/build/constraint"
-
-// ConstraintGoVersion is constraint.GoVersion (if built with go1.21+).
-// Otherwise nil.
-//
-// Deprecate once x/tools is after go1.21.
-var ConstraintGoVersion func(x constraint.Expr) string
diff --git a/vendor/golang.org/x/tools/internal/versions/features.go b/vendor/golang.org/x/tools/internal/versions/features.go
deleted file mode 100644
index b53f1786161..00000000000
--- a/vendor/golang.org/x/tools/internal/versions/features.go
+++ /dev/null
@@ -1,43 +0,0 @@
-// Copyright 2023 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-package versions
-
-// This file contains predicates for working with file versions to
-// decide when a tool should consider a language feature enabled.
-
-// GoVersions that features in x/tools can be gated to.
-const (
- Go1_18 = "go1.18"
- Go1_19 = "go1.19"
- Go1_20 = "go1.20"
- Go1_21 = "go1.21"
- Go1_22 = "go1.22"
-)
-
-// Future is an invalid unknown Go version sometime in the future.
-// Do not use directly with Compare.
-const Future = ""
-
-// AtLeast reports whether the file version v comes after a Go release.
-//
-// Use this predicate to enable a behavior once a certain Go release
-// has happened (and stays enabled in the future).
-func AtLeast(v, release string) bool {
- if v == Future {
- return true // an unknown future version is always after y.
- }
- return Compare(Lang(v), Lang(release)) >= 0
-}
-
-// Before reports whether the file version v is strictly before a Go release.
-//
-// Use this predicate to disable a behavior once a certain Go release
-// has happened (and stays enabled in the future).
-func Before(v, release string) bool {
- if v == Future {
- return false // an unknown future version happens after y.
- }
- return Compare(Lang(v), Lang(release)) < 0
-}
diff --git a/vendor/golang.org/x/tools/internal/versions/gover.go b/vendor/golang.org/x/tools/internal/versions/gover.go
deleted file mode 100644
index bbabcd22e94..00000000000
--- a/vendor/golang.org/x/tools/internal/versions/gover.go
+++ /dev/null
@@ -1,172 +0,0 @@
-// Copyright 2023 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-// This is a fork of internal/gover for use by x/tools until
-// go1.21 and earlier are no longer supported by x/tools.
-
-package versions
-
-import "strings"
-
-// A gover is a parsed Go gover: major[.Minor[.Patch]][kind[pre]]
-// The numbers are the original decimal strings to avoid integer overflows
-// and since there is very little actual math. (Probably overflow doesn't matter in practice,
-// but at the time this code was written, there was an existing test that used
-// go1.99999999999, which does not fit in an int on 32-bit platforms.
-// The "big decimal" representation avoids the problem entirely.)
-type gover struct {
- major string // decimal
- minor string // decimal or ""
- patch string // decimal or ""
- kind string // "", "alpha", "beta", "rc"
- pre string // decimal or ""
-}
-
-// compare returns -1, 0, or +1 depending on whether
-// x < y, x == y, or x > y, interpreted as toolchain versions.
-// The versions x and y must not begin with a "go" prefix: just "1.21" not "go1.21".
-// Malformed versions compare less than well-formed versions and equal to each other.
-// The language version "1.21" compares less than the release candidate and eventual releases "1.21rc1" and "1.21.0".
-func compare(x, y string) int {
- vx := parse(x)
- vy := parse(y)
-
- if c := cmpInt(vx.major, vy.major); c != 0 {
- return c
- }
- if c := cmpInt(vx.minor, vy.minor); c != 0 {
- return c
- }
- if c := cmpInt(vx.patch, vy.patch); c != 0 {
- return c
- }
- if c := strings.Compare(vx.kind, vy.kind); c != 0 { // "" < alpha < beta < rc
- return c
- }
- if c := cmpInt(vx.pre, vy.pre); c != 0 {
- return c
- }
- return 0
-}
-
-// lang returns the Go language version. For example, lang("1.2.3") == "1.2".
-func lang(x string) string {
- v := parse(x)
- if v.minor == "" || v.major == "1" && v.minor == "0" {
- return v.major
- }
- return v.major + "." + v.minor
-}
-
-// isValid reports whether the version x is valid.
-func isValid(x string) bool {
- return parse(x) != gover{}
-}
-
-// parse parses the Go version string x into a version.
-// It returns the zero version if x is malformed.
-func parse(x string) gover {
- var v gover
-
- // Parse major version.
- var ok bool
- v.major, x, ok = cutInt(x)
- if !ok {
- return gover{}
- }
- if x == "" {
- // Interpret "1" as "1.0.0".
- v.minor = "0"
- v.patch = "0"
- return v
- }
-
- // Parse . before minor version.
- if x[0] != '.' {
- return gover{}
- }
-
- // Parse minor version.
- v.minor, x, ok = cutInt(x[1:])
- if !ok {
- return gover{}
- }
- if x == "" {
- // Patch missing is same as "0" for older versions.
- // Starting in Go 1.21, patch missing is different from explicit .0.
- if cmpInt(v.minor, "21") < 0 {
- v.patch = "0"
- }
- return v
- }
-
- // Parse patch if present.
- if x[0] == '.' {
- v.patch, x, ok = cutInt(x[1:])
- if !ok || x != "" {
- // Note that we are disallowing prereleases (alpha, beta, rc) for patch releases here (x != "").
- // Allowing them would be a bit confusing because we already have:
- // 1.21 < 1.21rc1
- // But a prerelease of a patch would have the opposite effect:
- // 1.21.3rc1 < 1.21.3
- // We've never needed them before, so let's not start now.
- return gover{}
- }
- return v
- }
-
- // Parse prerelease.
- i := 0
- for i < len(x) && (x[i] < '0' || '9' < x[i]) {
- if x[i] < 'a' || 'z' < x[i] {
- return gover{}
- }
- i++
- }
- if i == 0 {
- return gover{}
- }
- v.kind, x = x[:i], x[i:]
- if x == "" {
- return v
- }
- v.pre, x, ok = cutInt(x)
- if !ok || x != "" {
- return gover{}
- }
-
- return v
-}
-
-// cutInt scans the leading decimal number at the start of x to an integer
-// and returns that value and the rest of the string.
-func cutInt(x string) (n, rest string, ok bool) {
- i := 0
- for i < len(x) && '0' <= x[i] && x[i] <= '9' {
- i++
- }
- if i == 0 || x[0] == '0' && i != 1 { // no digits or unnecessary leading zero
- return "", "", false
- }
- return x[:i], x[i:], true
-}
-
-// cmpInt returns cmp.Compare(x, y) interpreting x and y as decimal numbers.
-// (Copied from golang.org/x/mod/semver's compareInt.)
-func cmpInt(x, y string) int {
- if x == y {
- return 0
- }
- if len(x) < len(y) {
- return -1
- }
- if len(x) > len(y) {
- return +1
- }
- if x < y {
- return -1
- } else {
- return +1
- }
-}
diff --git a/vendor/golang.org/x/tools/internal/versions/types.go b/vendor/golang.org/x/tools/internal/versions/types.go
deleted file mode 100644
index f0bb0d15f03..00000000000
--- a/vendor/golang.org/x/tools/internal/versions/types.go
+++ /dev/null
@@ -1,38 +0,0 @@
-// Copyright 2023 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-package versions
-
-import (
- "go/ast"
- "go/types"
-)
-
-// FileVersion returns a file's Go version.
-// The reported version is an unknown Future version if a
-// version cannot be determined.
-func FileVersion(info *types.Info, file *ast.File) string {
- // In tools built with Go >= 1.22, the Go version of a file
- // follow a cascades of sources:
- // 1) types.Info.FileVersion, which follows the cascade:
- // 1.a) file version (ast.File.GoVersion),
- // 1.b) the package version (types.Config.GoVersion), or
- // 2) is some unknown Future version.
- //
- // File versions require a valid package version to be provided to types
- // in Config.GoVersion. Config.GoVersion is either from the package's module
- // or the toolchain (go run). This value should be provided by go/packages
- // or unitchecker.Config.GoVersion.
- if v := info.FileVersions[file]; IsValid(v) {
- return v
- }
- // Note: we could instead return runtime.Version() [if valid].
- // This would act as a max version on what a tool can support.
- return Future
-}
-
-// InitFileVersions initializes info to record Go versions for Go files.
-func InitFileVersions(info *types.Info) {
- info.FileVersions = make(map[*ast.File]string)
-}
diff --git a/vendor/golang.org/x/tools/internal/versions/versions.go b/vendor/golang.org/x/tools/internal/versions/versions.go
deleted file mode 100644
index 8d1f7453dbf..00000000000
--- a/vendor/golang.org/x/tools/internal/versions/versions.go
+++ /dev/null
@@ -1,57 +0,0 @@
-// Copyright 2023 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-package versions
-
-import (
- "strings"
-)
-
-// Note: If we use build tags to use go/versions when go >=1.22,
-// we run into go.dev/issue/53737. Under some operations users would see an
-// import of "go/versions" even if they would not compile the file.
-// For example, during `go get -u ./...` (go.dev/issue/64490) we do not try to include
-// For this reason, this library just a clone of go/versions for the moment.
-
-// Lang returns the Go language version for version x.
-// If x is not a valid version, Lang returns the empty string.
-// For example:
-//
-// Lang("go1.21rc2") = "go1.21"
-// Lang("go1.21.2") = "go1.21"
-// Lang("go1.21") = "go1.21"
-// Lang("go1") = "go1"
-// Lang("bad") = ""
-// Lang("1.21") = ""
-func Lang(x string) string {
- v := lang(stripGo(x))
- if v == "" {
- return ""
- }
- return x[:2+len(v)] // "go"+v without allocation
-}
-
-// Compare returns -1, 0, or +1 depending on whether
-// x < y, x == y, or x > y, interpreted as Go versions.
-// The versions x and y must begin with a "go" prefix: "go1.21" not "1.21".
-// Invalid versions, including the empty string, compare less than
-// valid versions and equal to each other.
-// The language version "go1.21" compares less than the
-// release candidate and eventual releases "go1.21rc1" and "go1.21.0".
-// Custom toolchain suffixes are ignored during comparison:
-// "go1.21.0" and "go1.21.0-bigcorp" are equal.
-func Compare(x, y string) int { return compare(stripGo(x), stripGo(y)) }
-
-// IsValid reports whether the version x is valid.
-func IsValid(x string) bool { return isValid(stripGo(x)) }
-
-// stripGo converts from a "go1.21" version to a "1.21" version.
-// If v does not start with "go", stripGo returns the empty string (a known invalid version).
-func stripGo(v string) string {
- v, _, _ = strings.Cut(v, "-") // strip -bigcorp suffix.
- if len(v) < 2 || v[:2] != "go" {
- return ""
- }
- return v[2:]
-}
diff --git a/vendor/helm.sh/helm/v3/internal/resolver/resolver.go b/vendor/helm.sh/helm/v3/internal/resolver/resolver.go
index 5e8921f960e..b6f45da9e2e 100644
--- a/vendor/helm.sh/helm/v3/internal/resolver/resolver.go
+++ b/vendor/helm.sh/helm/v3/internal/resolver/resolver.go
@@ -77,7 +77,6 @@ func (r *Resolver) Resolve(reqs []*chart.Dependency, repoNames map[string]string
continue
}
if strings.HasPrefix(d.Repository, "file://") {
-
chartpath, err := GetLocalPath(d.Repository, r.chartpath)
if err != nil {
return nil, err
@@ -95,7 +94,7 @@ func (r *Resolver) Resolve(reqs []*chart.Dependency, repoNames map[string]string
}
if !constraint.Check(v) {
- missing = append(missing, d.Name)
+ missing = append(missing, fmt.Sprintf("%q (repository %q, version %q)", d.Name, d.Repository, d.Version))
continue
}
@@ -173,7 +172,7 @@ func (r *Resolver) Resolve(reqs []*chart.Dependency, repoNames map[string]string
Repository: d.Repository,
Version: version,
}
- // The version are already sorted and hence the first one to satisfy the constraint is used
+ // The versions are already sorted and hence the first one to satisfy the constraint is used
for _, ver := range vs {
v, err := semver.NewVersion(ver.Version)
// OCI does not need URLs
@@ -189,11 +188,11 @@ func (r *Resolver) Resolve(reqs []*chart.Dependency, repoNames map[string]string
}
if !found {
- missing = append(missing, d.Name)
+ missing = append(missing, fmt.Sprintf("%q (repository %q, version %q)", d.Name, d.Repository, d.Version))
}
}
if len(missing) > 0 {
- return nil, errors.Errorf("can't get a valid version for repositories %s. Try changing the version constraint in Chart.yaml", strings.Join(missing, ", "))
+ return nil, errors.Errorf("can't get a valid version for %d subchart(s): %s. Make sure a matching chart version exists in the repo, or change the version constraint in Chart.yaml", len(missing), strings.Join(missing, ", "))
}
digest, err := HashReq(reqs, locked)
diff --git a/vendor/helm.sh/helm/v3/internal/sympath/walk.go b/vendor/helm.sh/helm/v3/internal/sympath/walk.go
index a276cfeff4b..6b221fb6cc0 100644
--- a/vendor/helm.sh/helm/v3/internal/sympath/walk.go
+++ b/vendor/helm.sh/helm/v3/internal/sympath/walk.go
@@ -71,6 +71,7 @@ func symwalk(path string, info os.FileInfo, walkFn filepath.WalkFunc) error {
if err != nil {
return errors.Wrapf(err, "error evaluating symlink %s", path)
}
+ //This log message is to highlight a symlink that is being used within a chart, symlinks can be used for nefarious reasons.
log.Printf("found symbolic link in path: %s resolves to %s. Contents of linked file included and used", path, resolved)
if info, err = os.Lstat(resolved); err != nil {
return err
diff --git a/vendor/helm.sh/helm/v3/internal/third_party/dep/fs/fs.go b/vendor/helm.sh/helm/v3/internal/third_party/dep/fs/fs.go
index 4e4eacc60d9..d29bb5f8719 100644
--- a/vendor/helm.sh/helm/v3/internal/third_party/dep/fs/fs.go
+++ b/vendor/helm.sh/helm/v3/internal/third_party/dep/fs/fs.go
@@ -260,7 +260,7 @@ func fixLongPath(path string) string {
// minus 12)." Since MAX_PATH is 260, 260 - 12 = 248.
//
// The MSDN docs appear to say that a normal path that is 248 bytes long
- // will work; empirically the path must be less then 248 bytes long.
+ // will work; empirically the path must be less than 248 bytes long.
if len(path) < 248 {
// Don't fix. (This is how Go 1.7 and earlier worked,
// not automatically generating the \\?\ form)
diff --git a/vendor/helm.sh/helm/v3/internal/tlsutil/tls.go b/vendor/helm.sh/helm/v3/internal/tlsutil/tls.go
index dc832ed80e7..7cd1dace968 100644
--- a/vendor/helm.sh/helm/v3/internal/tlsutil/tls.go
+++ b/vendor/helm.sh/helm/v3/internal/tlsutil/tls.go
@@ -65,7 +65,7 @@ func CertPoolFromFile(filename string) (*x509.CertPool, error) {
return cp, nil
}
-// CertFromFilePair returns an tls.Certificate containing the
+// CertFromFilePair returns a tls.Certificate containing the
// certificates public/private key pair from a pair of given PEM-encoded files.
// Returns an error if the file could not be read, a certificate could not
// be parsed, or if the file does not contain any certificates
diff --git a/vendor/helm.sh/helm/v3/internal/version/version.go b/vendor/helm.sh/helm/v3/internal/version/version.go
index 414957bc9fb..4124100ae12 100644
--- a/vendor/helm.sh/helm/v3/internal/version/version.go
+++ b/vendor/helm.sh/helm/v3/internal/version/version.go
@@ -29,7 +29,7 @@ var (
//
// Increment major number for new feature additions and behavioral changes.
// Increment minor number for bug fixes and performance enhancements.
- version = "v3.14"
+ version = "v3.17"
// metadata is extra build time data
metadata = ""
diff --git a/vendor/helm.sh/helm/v3/pkg/action/action.go b/vendor/helm.sh/helm/v3/pkg/action/action.go
index 5693f483848..fe91de04809 100644
--- a/vendor/helm.sh/helm/v3/pkg/action/action.go
+++ b/vendor/helm.sh/helm/v3/pkg/action/action.go
@@ -103,7 +103,7 @@ type Configuration struct {
// TODO: As part of the refactor the duplicate code in cmd/helm/template.go should be removed
//
// This code has to do with writing files to disk.
-func (cfg *Configuration) renderResources(ch *chart.Chart, values chartutil.Values, releaseName, outputDir string, subNotes, useReleaseName, includeCrds bool, pr postrender.PostRenderer, interactWithRemote, enableDNS bool) ([]*release.Hook, *bytes.Buffer, string, error) {
+func (cfg *Configuration) renderResources(ch *chart.Chart, values chartutil.Values, releaseName, outputDir string, subNotes, useReleaseName, includeCrds bool, pr postrender.PostRenderer, interactWithRemote, enableDNS, hideSecret bool) ([]*release.Hook, *bytes.Buffer, string, error) {
hs := []*release.Hook{}
b := bytes.NewBuffer(nil)
@@ -165,7 +165,7 @@ func (cfg *Configuration) renderResources(ch *chart.Chart, values chartutil.Valu
// Sort hooks, manifests, and partials. Only hooks and manifests are returned,
// as partials are not used after renderer.Render. Empty manifests are also
// removed here.
- hs, manifests, err := releaseutil.SortManifests(files, caps.APIVersions, releaseutil.InstallOrder)
+ hs, manifests, err := releaseutil.SortManifests(files, nil, releaseutil.InstallOrder)
if err != nil {
// By catching parse errors here, we can prevent bogus releases from going
// to Kubernetes.
@@ -200,7 +200,11 @@ func (cfg *Configuration) renderResources(ch *chart.Chart, values chartutil.Valu
for _, m := range manifests {
if outputDir == "" {
- fmt.Fprintf(b, "---\n# Source: %s\n%s\n", m.Name, m.Content)
+ if hideSecret && m.Head.Kind == "Secret" && m.Head.Version == "v1" {
+ fmt.Fprintf(b, "---\n# Source: %s\n# HIDDEN: The Secret output has been suppressed\n", m.Name)
+ } else {
+ fmt.Fprintf(b, "---\n# Source: %s\n%s\n", m.Name, m.Content)
+ }
} else {
newDir := outputDir
if useReleaseName {
@@ -326,7 +330,7 @@ func GetVersionSet(client discovery.ServerResourcesInterface) (chartutil.Version
}
versionMap := make(map[string]interface{})
- versions := []string{}
+ var versions []string
// Extract the groups
for _, g := range groups {
@@ -407,12 +411,11 @@ func (cfg *Configuration) Init(getter genericclioptions.RESTClientGetter, namesp
namespace,
)
if err != nil {
- panic(fmt.Sprintf("Unable to instantiate SQL driver: %v", err))
+ return errors.Wrap(err, "unable to instantiate SQL driver")
}
store = storage.Init(d)
default:
- // Not sure what to do here.
- panic("Unknown driver in HELM_DRIVER: " + helmDriver)
+ return errors.Errorf("unknown driver %q", helmDriver)
}
cfg.RESTClientGetter = getter
diff --git a/vendor/helm.sh/helm/v3/pkg/action/dependency.go b/vendor/helm.sh/helm/v3/pkg/action/dependency.go
index 3265f1f175e..19305fee880 100644
--- a/vendor/helm.sh/helm/v3/pkg/action/dependency.go
+++ b/vendor/helm.sh/helm/v3/pkg/action/dependency.go
@@ -34,10 +34,17 @@ import (
//
// It provides the implementation of 'helm dependency' and its respective subcommands.
type Dependency struct {
- Verify bool
- Keyring string
- SkipRefresh bool
- ColumnWidth uint
+ Verify bool
+ Keyring string
+ SkipRefresh bool
+ ColumnWidth uint
+ Username string
+ Password string
+ CertFile string
+ KeyFile string
+ CaFile string
+ InsecureSkipTLSverify bool
+ PlainHTTP bool
}
// NewDependency creates a new Dependency object with the given configuration.
diff --git a/vendor/helm.sh/helm/v3/pkg/action/get_metadata.go b/vendor/helm.sh/helm/v3/pkg/action/get_metadata.go
index ec096ae1654..f79788c3bbc 100644
--- a/vendor/helm.sh/helm/v3/pkg/action/get_metadata.go
+++ b/vendor/helm.sh/helm/v3/pkg/action/get_metadata.go
@@ -16,7 +16,13 @@ limitations under the License.
package action
-import "time"
+import (
+ "sort"
+ "strings"
+ "time"
+
+ "helm.sh/helm/v3/pkg/chart"
+)
// GetMetadata is the action for checking a given release's metadata.
//
@@ -28,14 +34,16 @@ type GetMetadata struct {
}
type Metadata struct {
- Name string `json:"name" yaml:"name"`
- Chart string `json:"chart" yaml:"chart"`
- Version string `json:"version" yaml:"version"`
- AppVersion string `json:"appVersion" yaml:"appVersion"`
- Namespace string `json:"namespace" yaml:"namespace"`
- Revision int `json:"revision" yaml:"revision"`
- Status string `json:"status" yaml:"status"`
- DeployedAt string `json:"deployedAt" yaml:"deployedAt"`
+ Name string `json:"name" yaml:"name"`
+ Chart string `json:"chart" yaml:"chart"`
+ Version string `json:"version" yaml:"version"`
+ AppVersion string `json:"appVersion" yaml:"appVersion"`
+ Annotations map[string]string `json:"annotations,omitempty" yaml:"annotations,omitempty"`
+ Dependencies []*chart.Dependency `json:"dependencies,omitempty" yaml:"dependencies,omitempty"`
+ Namespace string `json:"namespace" yaml:"namespace"`
+ Revision int `json:"revision" yaml:"revision"`
+ Status string `json:"status" yaml:"status"`
+ DeployedAt string `json:"deployedAt" yaml:"deployedAt"`
}
// NewGetMetadata creates a new GetMetadata object with the given configuration.
@@ -57,13 +65,26 @@ func (g *GetMetadata) Run(name string) (*Metadata, error) {
}
return &Metadata{
- Name: rel.Name,
- Chart: rel.Chart.Metadata.Name,
- Version: rel.Chart.Metadata.Version,
- AppVersion: rel.Chart.Metadata.AppVersion,
- Namespace: rel.Namespace,
- Revision: rel.Version,
- Status: rel.Info.Status.String(),
- DeployedAt: rel.Info.LastDeployed.Format(time.RFC3339),
+ Name: rel.Name,
+ Chart: rel.Chart.Metadata.Name,
+ Version: rel.Chart.Metadata.Version,
+ AppVersion: rel.Chart.Metadata.AppVersion,
+ Dependencies: rel.Chart.Metadata.Dependencies,
+ Annotations: rel.Chart.Metadata.Annotations,
+ Namespace: rel.Namespace,
+ Revision: rel.Version,
+ Status: rel.Info.Status.String(),
+ DeployedAt: rel.Info.LastDeployed.Format(time.RFC3339),
}, nil
}
+
+// FormattedDepNames formats metadata.dependencies names into a comma-separated list.
+func (m *Metadata) FormattedDepNames() string {
+ depsNames := make([]string, 0, len(m.Dependencies))
+ for _, dep := range m.Dependencies {
+ depsNames = append(depsNames, dep.Name)
+ }
+ sort.StringSlice(depsNames).Sort()
+
+ return strings.Join(depsNames, ",")
+}
diff --git a/vendor/helm.sh/helm/v3/pkg/action/hooks.go b/vendor/helm.sh/helm/v3/pkg/action/hooks.go
index 0af625dff5a..e1cbab5e128 100644
--- a/vendor/helm.sh/helm/v3/pkg/action/hooks.go
+++ b/vendor/helm.sh/helm/v3/pkg/action/hooks.go
@@ -44,7 +44,7 @@ func (cfg *Configuration) execHook(rl *release.Release, hook release.HookEvent,
for _, h := range executingHooks {
// Set default delete policy to before-hook-creation
- if h.DeletePolicies == nil || len(h.DeletePolicies) == 0 {
+ if len(h.DeletePolicies) == 0 {
// TODO(jlegrone): Only apply before-hook-creation delete policy to run to completion
// resources. For all other resource types update in place if a
// resource with the same name already exists and is owned by the
@@ -99,7 +99,8 @@ func (cfg *Configuration) execHook(rl *release.Release, hook release.HookEvent,
// If all hooks are successful, check the annotation of each hook to determine whether the hook should be deleted
// under succeeded condition. If so, then clear the corresponding resource object in each hook
- for _, h := range executingHooks {
+ for i := len(executingHooks) - 1; i >= 0; i-- {
+ h := executingHooks[i]
if err := cfg.deleteHookByPolicy(h, release.HookSucceeded, timeout); err != nil {
return err
}
diff --git a/vendor/helm.sh/helm/v3/pkg/action/install.go b/vendor/helm.sh/helm/v3/pkg/action/install.go
index e3538a4f59c..ae732f4fd7c 100644
--- a/vendor/helm.sh/helm/v3/pkg/action/install.go
+++ b/vendor/helm.sh/helm/v3/pkg/action/install.go
@@ -55,7 +55,7 @@ import (
"helm.sh/helm/v3/pkg/storage/driver"
)
-// NOTESFILE_SUFFIX that we want to treat special. It goes through the templating engine
+// notesFileSuffix that we want to treat special. It goes through the templating engine
// but it's not a yaml file (resource) hence can't have hooks, etc. And the user actually
// wants to see this file after rendering in the status command. However, it must be a suffix
// since there can be filepath in front of it.
@@ -69,11 +69,14 @@ type Install struct {
ChartPathOptions
- ClientOnly bool
- Force bool
- CreateNamespace bool
- DryRun bool
- DryRunOption string
+ ClientOnly bool
+ Force bool
+ CreateNamespace bool
+ DryRun bool
+ DryRunOption string
+ // HideSecret can be set to true when DryRun is enabled in order to hide
+ // Kubernetes Secrets in the output. It cannot be used outside of DryRun.
+ HideSecret bool
DisableHooks bool
Replace bool
Wait bool
@@ -90,6 +93,8 @@ type Install struct {
Atomic bool
SkipCRDs bool
SubNotes bool
+ HideNotes bool
+ SkipSchemaValidation bool
DisableOpenAPIValidation bool
IncludeCRDs bool
Labels map[string]string
@@ -105,7 +110,9 @@ type Install struct {
// Used by helm template to add the release as part of OutputDir path
// OutputDir/
UseReleaseName bool
- PostRenderer postrender.PostRenderer
+ // TakeOwnership will ignore the check for helm annotations and take ownership of the resources.
+ TakeOwnership bool
+ PostRenderer postrender.PostRenderer
// Lock to control raceconditions when the process receives a SIGTERM
Lock sync.Mutex
}
@@ -230,6 +237,11 @@ func (i *Install) RunWithContext(ctx context.Context, chrt *chart.Chart, vals ma
}
}
+ // HideSecret must be used with dry run. Otherwise, return an error.
+ if !i.isDryRun() && i.HideSecret {
+ return nil, errors.New("Hiding Kubernetes secrets requires a dry-run mode")
+ }
+
if err := i.availableName(); err != nil {
return nil, err
}
@@ -289,19 +301,19 @@ func (i *Install) RunWithContext(ctx context.Context, chrt *chart.Chart, vals ma
IsInstall: !isUpgrade,
IsUpgrade: isUpgrade,
}
- valuesToRender, err := chartutil.ToRenderValues(chrt, vals, options, caps)
+ valuesToRender, err := chartutil.ToRenderValuesWithSchemaValidation(chrt, vals, options, caps, i.SkipSchemaValidation)
if err != nil {
return nil, err
}
if driver.ContainsSystemLabels(i.Labels) {
- return nil, fmt.Errorf("user suplied labels contains system reserved label name. System labels: %+v", driver.GetSystemLabels())
+ return nil, fmt.Errorf("user supplied labels contains system reserved label name. System labels: %+v", driver.GetSystemLabels())
}
rel := i.createRelease(chrt, vals, i.Labels)
var manifestDoc *bytes.Buffer
- rel.Hooks, manifestDoc, rel.Info.Notes, err = i.cfg.renderResources(chrt, valuesToRender, i.ReleaseName, i.OutputDir, i.SubNotes, i.UseReleaseName, i.IncludeCRDs, i.PostRenderer, interactWithRemote, i.EnableDNS)
+ rel.Hooks, manifestDoc, rel.Info.Notes, err = i.cfg.renderResources(chrt, valuesToRender, i.ReleaseName, i.OutputDir, i.SubNotes, i.UseReleaseName, i.IncludeCRDs, i.PostRenderer, interactWithRemote, i.EnableDNS, i.HideSecret)
// Even for errors, attach this if available
if manifestDoc != nil {
rel.Manifest = manifestDoc.String()
@@ -335,7 +347,11 @@ func (i *Install) RunWithContext(ctx context.Context, chrt *chart.Chart, vals ma
// deleting the release because the manifest will be pointing at that
// resource
if !i.ClientOnly && !isUpgrade && len(resources) > 0 {
- toBeAdopted, err = existingResourceConflict(resources, rel.Name, rel.Namespace)
+ if i.TakeOwnership {
+ toBeAdopted, err = requireAdoption(resources)
+ } else {
+ toBeAdopted, err = existingResourceConflict(resources, rel.Name, rel.Namespace)
+ }
if err != nil {
return nil, errors.Wrap(err, "Unable to continue with install")
}
@@ -373,7 +389,7 @@ func (i *Install) RunWithContext(ctx context.Context, chrt *chart.Chart, vals ma
}
}
- // If Replace is true, we need to supercede the last release.
+ // If Replace is true, we need to supersede the last release.
if i.Replace {
if err := i.replaceRelease(rel); err != nil {
return nil, err
@@ -615,7 +631,7 @@ func createOrOpenFile(filename string, append bool) (*os.File, error) {
return os.Create(filename)
}
-// check if the directory exists to create file. creates if don't exists
+// check if the directory exists to create file. creates if doesn't exist
func ensureDirectoryForFile(file string) error {
baseDir := path.Dir(file)
_, err := os.Stat(baseDir)
@@ -754,6 +770,7 @@ func (c *ChartPathOptions) LocateChart(name string, settings *cli.EnvSettings) (
getter.WithTLSClientConfig(c.CertFile, c.KeyFile, c.CaFile),
getter.WithInsecureSkipVerifyTLS(c.InsecureSkipTLSverify),
getter.WithPlainHTTP(c.PlainHTTP),
+ getter.WithBasicAuth(c.Username, c.Password),
},
RepositoryConfig: settings.RepositoryConfig,
RepositoryCache: settings.RepositoryCache,
diff --git a/vendor/helm.sh/helm/v3/pkg/action/lint.go b/vendor/helm.sh/helm/v3/pkg/action/lint.go
index ca497f2b847..63a1bf354e9 100644
--- a/vendor/helm.sh/helm/v3/pkg/action/lint.go
+++ b/vendor/helm.sh/helm/v3/pkg/action/lint.go
@@ -32,11 +32,12 @@ import (
//
// It provides the implementation of 'helm lint'.
type Lint struct {
- Strict bool
- Namespace string
- WithSubcharts bool
- Quiet bool
- KubeVersion *chartutil.KubeVersion
+ Strict bool
+ Namespace string
+ WithSubcharts bool
+ Quiet bool
+ SkipSchemaValidation bool
+ KubeVersion *chartutil.KubeVersion
}
// LintResult is the result of Lint
@@ -59,7 +60,7 @@ func (l *Lint) Run(paths []string, vals map[string]interface{}) *LintResult {
}
result := &LintResult{}
for _, path := range paths {
- linter, err := lintChart(path, vals, l.Namespace, l.KubeVersion)
+ linter, err := lintChart(path, vals, l.Namespace, l.KubeVersion, l.SkipSchemaValidation)
if err != nil {
result.Errors = append(result.Errors, err)
continue
@@ -86,7 +87,7 @@ func HasWarningsOrErrors(result *LintResult) bool {
return len(result.Errors) > 0
}
-func lintChart(path string, vals map[string]interface{}, namespace string, kubeVersion *chartutil.KubeVersion) (support.Linter, error) {
+func lintChart(path string, vals map[string]interface{}, namespace string, kubeVersion *chartutil.KubeVersion, skipSchemaValidation bool) (support.Linter, error) {
var chartPath string
linter := support.Linter{}
@@ -125,5 +126,5 @@ func lintChart(path string, vals map[string]interface{}, namespace string, kubeV
return linter, errors.Wrap(err, "unable to check Chart.yaml file in chart")
}
- return lint.AllWithKubeVersion(chartPath, vals, namespace, kubeVersion), nil
+ return lint.AllWithKubeVersionAndSchemaValidation(chartPath, vals, namespace, kubeVersion, skipSchemaValidation), nil
}
diff --git a/vendor/helm.sh/helm/v3/pkg/action/package.go b/vendor/helm.sh/helm/v3/pkg/action/package.go
index b79fcb54fd4..2357e3882a5 100644
--- a/vendor/helm.sh/helm/v3/pkg/action/package.go
+++ b/vendor/helm.sh/helm/v3/pkg/action/package.go
@@ -44,8 +44,15 @@ type Package struct {
Destination string
DependencyUpdate bool
- RepositoryConfig string
- RepositoryCache string
+ RepositoryConfig string
+ RepositoryCache string
+ PlainHTTP bool
+ Username string
+ Password string
+ CertFile string
+ KeyFile string
+ CaFile string
+ InsecureSkipTLSverify bool
}
// NewPackage creates a new Package object with the given configuration.
@@ -161,7 +168,7 @@ func passphraseFileFetcher(passphraseFile string, stdin *os.File) (provenance.Pa
if err != nil {
return nil, err
}
- return func(name string) ([]byte, error) {
+ return func(_ string) ([]byte, error) {
return passphrase, nil
}, nil
}
diff --git a/vendor/helm.sh/helm/v3/pkg/action/push.go b/vendor/helm.sh/helm/v3/pkg/action/push.go
index 68d2ba42dc0..70e5c158238 100644
--- a/vendor/helm.sh/helm/v3/pkg/action/push.go
+++ b/vendor/helm.sh/helm/v3/pkg/action/push.go
@@ -73,7 +73,7 @@ func WithPlainHTTP(plainHTTP bool) PushOpt {
}
}
-// WithOptWriter sets the registryOut field on the push configuration object.
+// WithPushOptWriter sets the registryOut field on the push configuration object.
func WithPushOptWriter(out io.Writer) PushOpt {
return func(p *Push) {
p.out = out
diff --git a/vendor/helm.sh/helm/v3/pkg/action/release_testing.go b/vendor/helm.sh/helm/v3/pkg/action/release_testing.go
index 3c10cecf824..aaffe47cae1 100644
--- a/vendor/helm.sh/helm/v3/pkg/action/release_testing.go
+++ b/vendor/helm.sh/helm/v3/pkg/action/release_testing.go
@@ -44,6 +44,7 @@ type ReleaseTesting struct {
// Used for fetching logs from test pods
Namespace string
Filters map[string][]string
+ HideNotes bool
}
// NewReleaseTesting creates a new ReleaseTesting object with the given configuration.
diff --git a/vendor/helm.sh/helm/v3/pkg/action/uninstall.go b/vendor/helm.sh/helm/v3/pkg/action/uninstall.go
index 40d82243edb..ac0c4fee8cc 100644
--- a/vendor/helm.sh/helm/v3/pkg/action/uninstall.go
+++ b/vendor/helm.sh/helm/v3/pkg/action/uninstall.go
@@ -196,13 +196,9 @@ func joinErrors(errs []error) string {
// deleteRelease deletes the release and returns list of delete resources and manifests that were kept in the deletion process
func (u *Uninstall) deleteRelease(rel *release.Release) (kube.ResourceList, string, []error) {
var errs []error
- caps, err := u.cfg.getCapabilities()
- if err != nil {
- return nil, rel.Manifest, []error{errors.Wrap(err, "could not get apiVersions from Kubernetes")}
- }
manifests := releaseutil.SplitManifests(rel.Manifest)
- _, files, err := releaseutil.SortManifests(manifests, caps.APIVersions, releaseutil.UninstallOrder)
+ _, files, err := releaseutil.SortManifests(manifests, nil, releaseutil.UninstallOrder)
if err != nil {
// We could instead just delete everything in no particular order.
// FIXME: One way to delete at this point would be to try a label-based
diff --git a/vendor/helm.sh/helm/v3/pkg/action/upgrade.go b/vendor/helm.sh/helm/v3/pkg/action/upgrade.go
index ffb7538a6f3..a08d68495f4 100644
--- a/vendor/helm.sh/helm/v3/pkg/action/upgrade.go
+++ b/vendor/helm.sh/helm/v3/pkg/action/upgrade.go
@@ -74,6 +74,9 @@ type Upgrade struct {
DryRun bool
// DryRunOption controls whether the operation is prepared, but not executed with options on whether or not to interact with the remote cluster.
DryRunOption string
+ // HideSecret can be set to true when DryRun is enabled in order to hide
+ // Kubernetes Secrets in the output. It cannot be used outside of DryRun.
+ HideSecret bool
// Force will, if set to `true`, ignore certain warnings and perform the upgrade anyway.
//
// This should be used with caution.
@@ -94,6 +97,10 @@ type Upgrade struct {
CleanupOnFail bool
// SubNotes determines whether sub-notes are rendered in the chart.
SubNotes bool
+ // HideNotes determines whether notes are output during upgrade
+ HideNotes bool
+ // SkipSchemaValidation determines if JSON schema validation is disabled.
+ SkipSchemaValidation bool
// Description is the description of this operation
Description string
Labels map[string]string
@@ -110,6 +117,8 @@ type Upgrade struct {
Lock sync.Mutex
// Enable DNS lookups when rendering templates
EnableDNS bool
+ // TakeOwnership will skip the check for helm annotations and adopt all existing resources.
+ TakeOwnership bool
}
type resultMessage struct {
@@ -191,6 +200,11 @@ func (u *Upgrade) prepareUpgrade(name string, chart *chart.Chart, vals map[strin
return nil, nil, errMissingChart
}
+ // HideSecret must be used with dry run. Otherwise, return an error.
+ if !u.isDryRun() && u.HideSecret {
+ return nil, nil, errors.New("Hiding Kubernetes secrets requires a dry-run mode")
+ }
+
// finds the last non-deleted release with the given name
lastRelease, err := u.cfg.Releases.Last(name)
if err != nil {
@@ -248,7 +262,7 @@ func (u *Upgrade) prepareUpgrade(name string, chart *chart.Chart, vals map[strin
if err != nil {
return nil, nil, err
}
- valuesToRender, err := chartutil.ToRenderValues(chart, vals, options, caps)
+ valuesToRender, err := chartutil.ToRenderValuesWithSchemaValidation(chart, vals, options, caps, u.SkipSchemaValidation)
if err != nil {
return nil, nil, err
}
@@ -259,13 +273,13 @@ func (u *Upgrade) prepareUpgrade(name string, chart *chart.Chart, vals map[strin
interactWithRemote = true
}
- hooks, manifestDoc, notesTxt, err := u.cfg.renderResources(chart, valuesToRender, "", "", u.SubNotes, false, false, u.PostRenderer, interactWithRemote, u.EnableDNS)
+ hooks, manifestDoc, notesTxt, err := u.cfg.renderResources(chart, valuesToRender, "", "", u.SubNotes, false, false, u.PostRenderer, interactWithRemote, u.EnableDNS, u.HideSecret)
if err != nil {
return nil, nil, err
}
if driver.ContainsSystemLabels(u.Labels) {
- return nil, nil, fmt.Errorf("user suplied labels contains system reserved label name. System labels: %+v", driver.GetSystemLabels())
+ return nil, nil, fmt.Errorf("user supplied labels contains system reserved label name. System labels: %+v", driver.GetSystemLabels())
}
// Store an upgraded release.
@@ -329,7 +343,12 @@ func (u *Upgrade) performUpgrade(ctx context.Context, originalRelease, upgradedR
}
}
- toBeUpdated, err := existingResourceConflict(toBeCreated, upgradedRelease.Name, upgradedRelease.Namespace)
+ var toBeUpdated kube.ResourceList
+ if u.TakeOwnership {
+ toBeUpdated, err = requireAdoption(toBeCreated)
+ } else {
+ toBeUpdated, err = existingResourceConflict(toBeCreated, upgradedRelease.Name, upgradedRelease.Namespace)
+ }
if err != nil {
return nil, errors.Wrap(err, "Unable to continue with update")
}
diff --git a/vendor/helm.sh/helm/v3/pkg/action/validate.go b/vendor/helm.sh/helm/v3/pkg/action/validate.go
index 73eb1937b74..127e9bf9623 100644
--- a/vendor/helm.sh/helm/v3/pkg/action/validate.go
+++ b/vendor/helm.sh/helm/v3/pkg/action/validate.go
@@ -37,6 +37,31 @@ const (
helmReleaseNamespaceAnnotation = "meta.helm.sh/release-namespace"
)
+// requireAdoption returns the subset of resources that already exist in the cluster.
+func requireAdoption(resources kube.ResourceList) (kube.ResourceList, error) {
+ var requireUpdate kube.ResourceList
+
+ err := resources.Visit(func(info *resource.Info, err error) error {
+ if err != nil {
+ return err
+ }
+
+ helper := resource.NewHelper(info.Client, info.Mapping)
+ _, err = helper.Get(info.Namespace, info.Name)
+ if err != nil {
+ if apierrors.IsNotFound(err) {
+ return nil
+ }
+ return errors.Wrapf(err, "could not get information about the resource %s", resourceString(info))
+ }
+
+ requireUpdate.Append(info)
+ return nil
+ })
+
+ return requireUpdate, err
+}
+
func existingResourceConflict(resources kube.ResourceList, releaseName, releaseNamespace string) (kube.ResourceList, error) {
var requireUpdate kube.ResourceList
diff --git a/vendor/helm.sh/helm/v3/pkg/chart/dependency.go b/vendor/helm.sh/helm/v3/pkg/chart/dependency.go
index 4ef5eeb3204..eda0f5a89d3 100644
--- a/vendor/helm.sh/helm/v3/pkg/chart/dependency.go
+++ b/vendor/helm.sh/helm/v3/pkg/chart/dependency.go
@@ -25,28 +25,28 @@ type Dependency struct {
// Name is the name of the dependency.
//
// This must mach the name in the dependency's Chart.yaml.
- Name string `json:"name"`
+ Name string `json:"name" yaml:"name"`
// Version is the version (range) of this chart.
//
// A lock file will always produce a single version, while a dependency
// may contain a semantic version range.
- Version string `json:"version,omitempty"`
+ Version string `json:"version,omitempty" yaml:"version,omitempty"`
// The URL to the repository.
//
// Appending `index.yaml` to this string should result in a URL that can be
// used to fetch the repository index.
- Repository string `json:"repository"`
+ Repository string `json:"repository" yaml:"repository"`
// A yaml path that resolves to a boolean, used for enabling/disabling charts (e.g. subchart1.enabled )
- Condition string `json:"condition,omitempty"`
+ Condition string `json:"condition,omitempty" yaml:"condition,omitempty"`
// Tags can be used to group charts for enabling/disabling together
- Tags []string `json:"tags,omitempty"`
+ Tags []string `json:"tags,omitempty" yaml:"tags,omitempty"`
// Enabled bool determines if chart should be loaded
- Enabled bool `json:"enabled,omitempty"`
+ Enabled bool `json:"enabled,omitempty" yaml:"enabled,omitempty"`
// ImportValues holds the mapping of source values to parent key to be imported. Each item can be a
// string or pair of child/parent sublist items.
- ImportValues []interface{} `json:"import-values,omitempty"`
+ ImportValues []interface{} `json:"import-values,omitempty" yaml:"import-values,omitempty"`
// Alias usable alias to be used for the chart
- Alias string `json:"alias,omitempty"`
+ Alias string `json:"alias,omitempty" yaml:"alias,omitempty"`
}
// Validate checks for common problems with the dependency datastructure in
diff --git a/vendor/helm.sh/helm/v3/pkg/chart/loader/archive.go b/vendor/helm.sh/helm/v3/pkg/chart/loader/archive.go
index 196e5f81d6b..6272a564f8d 100644
--- a/vendor/helm.sh/helm/v3/pkg/chart/loader/archive.go
+++ b/vendor/helm.sh/helm/v3/pkg/chart/loader/archive.go
@@ -33,6 +33,15 @@ import (
"helm.sh/helm/v3/pkg/chart"
)
+// MaxDecompressedChartSize is the maximum size of a chart archive that will be
+// decompressed. This is the decompressed size of all the files.
+// The default value is 100 MiB.
+var MaxDecompressedChartSize int64 = 100 * 1024 * 1024 // Default 100 MiB
+
+// MaxDecompressedFileSize is the size of the largest file that Helm will attempt to load.
+// The size of the file is the decompressed version of it when it is stored in an archive.
+var MaxDecompressedFileSize int64 = 5 * 1024 * 1024 // Default 5 MiB
+
var drivePathPattern = regexp.MustCompile(`^[a-zA-Z]:/`)
// FileLoader loads a chart from a file
@@ -101,7 +110,7 @@ func ensureArchive(name string, raw *os.File) error {
return nil
}
-// isGZipApplication checks whether the achieve is of the application/x-gzip type.
+// isGZipApplication checks whether the archive is of the application/x-gzip type.
func isGZipApplication(data []byte) bool {
sig := []byte("\x1F\x8B\x08")
return bytes.HasPrefix(data, sig)
@@ -119,6 +128,7 @@ func LoadArchiveFiles(in io.Reader) ([]*BufferedFile, error) {
files := []*BufferedFile{}
tr := tar.NewReader(unzipped)
+ remainingSize := MaxDecompressedChartSize
for {
b := bytes.NewBuffer(nil)
hd, err := tr.Next()
@@ -178,10 +188,30 @@ func LoadArchiveFiles(in io.Reader) ([]*BufferedFile, error) {
return nil, errors.New("chart yaml not in base directory")
}
- if _, err := io.Copy(b, tr); err != nil {
+ if hd.Size > remainingSize {
+ return nil, fmt.Errorf("decompressed chart is larger than the maximum file size %d", MaxDecompressedChartSize)
+ }
+
+ if hd.Size > MaxDecompressedFileSize {
+ return nil, fmt.Errorf("decompressed chart file %q is larger than the maximum file size %d", hd.Name, MaxDecompressedFileSize)
+ }
+
+ limitedReader := io.LimitReader(tr, remainingSize)
+
+ bytesWritten, err := io.Copy(b, limitedReader)
+ if err != nil {
return nil, err
}
+ remainingSize -= bytesWritten
+ // When the bytesWritten are less than the file size it means the limit reader ended
+ // copying early. Here we report that error. This is important if the last file extracted
+ // is the one that goes over the limit. It assumes the Size stored in the tar header
+ // is correct, something many applications do.
+ if bytesWritten < hd.Size || remainingSize <= 0 {
+ return nil, fmt.Errorf("decompressed chart is larger than the maximum file size %d", MaxDecompressedChartSize)
+ }
+
data := bytes.TrimPrefix(b.Bytes(), utf8bom)
files = append(files, &BufferedFile{Name: n, Data: data})
diff --git a/vendor/helm.sh/helm/v3/pkg/chart/loader/directory.go b/vendor/helm.sh/helm/v3/pkg/chart/loader/directory.go
index 9bcbee60cf5..fd8e02e1ac9 100644
--- a/vendor/helm.sh/helm/v3/pkg/chart/loader/directory.go
+++ b/vendor/helm.sh/helm/v3/pkg/chart/loader/directory.go
@@ -101,6 +101,10 @@ func LoadDir(dir string) (*chart.Chart, error) {
return fmt.Errorf("cannot load irregular file %s as it has file mode type bits set", name)
}
+ if fi.Size() > MaxDecompressedFileSize {
+ return fmt.Errorf("chart file %q is larger than the maximum file size %d", fi.Name(), MaxDecompressedFileSize)
+ }
+
data, err := os.ReadFile(name)
if err != nil {
return errors.Wrapf(err, "error reading %s", n)
diff --git a/vendor/helm.sh/helm/v3/pkg/chart/loader/load.go b/vendor/helm.sh/helm/v3/pkg/chart/loader/load.go
index 7cc8878a8dd..a68a05aa9a3 100644
--- a/vendor/helm.sh/helm/v3/pkg/chart/loader/load.go
+++ b/vendor/helm.sh/helm/v3/pkg/chart/loader/load.go
@@ -134,6 +134,9 @@ func LoadFiles(files []*BufferedFile) (*chart.Chart, error) {
if c.Metadata == nil {
c.Metadata = new(chart.Metadata)
}
+ if c.Metadata.APIVersion != chart.APIVersionV1 {
+ log.Printf("Warning: Dependency locking is handled in Chart.lock since apiVersion \"v2\". We recommend migrating to Chart.lock.")
+ }
if c.Metadata.APIVersion == chart.APIVersionV1 {
c.Files = append(c.Files, &chart.File{Name: f.Name, Data: f.Data})
}
@@ -171,7 +174,7 @@ func LoadFiles(files []*BufferedFile) (*chart.Chart, error) {
case filepath.Ext(n) == ".tgz":
file := files[0]
if file.Name != n {
- return c, errors.Errorf("error unpacking tar in %s: expected %s, got %s", c.Name(), n, file.Name)
+ return c, errors.Errorf("error unpacking subchart tar in %s: expected %s, got %s", c.Name(), n, file.Name)
}
// Untar the chart and add to c.Dependencies
sc, err = LoadArchive(bytes.NewBuffer(file.Data))
@@ -191,7 +194,7 @@ func LoadFiles(files []*BufferedFile) (*chart.Chart, error) {
}
if err != nil {
- return c, errors.Wrapf(err, "error unpacking %s in %s", n, c.Name())
+ return c, errors.Wrapf(err, "error unpacking subchart %s in %s", n, c.Name())
}
c.AddDependency(sc)
}
diff --git a/vendor/helm.sh/helm/v3/pkg/chartutil/capabilities.go b/vendor/helm.sh/helm/v3/pkg/chartutil/capabilities.go
index 5f57e11a545..48fab0ea40d 100644
--- a/vendor/helm.sh/helm/v3/pkg/chartutil/capabilities.go
+++ b/vendor/helm.sh/helm/v3/pkg/chartutil/capabilities.go
@@ -53,7 +53,7 @@ var (
type Capabilities struct {
// KubeVersion is the Kubernetes version.
KubeVersion KubeVersion
- // APIversions are supported Kubernetes API versions.
+ // APIVersions are supported Kubernetes API versions.
APIVersions VersionSet
// HelmVersion is the build information for this helm version
HelmVersion helmversion.BuildInfo
diff --git a/vendor/helm.sh/helm/v3/pkg/chartutil/coalesce.go b/vendor/helm.sh/helm/v3/pkg/chartutil/coalesce.go
index f0272fd6abc..40bce2a68e4 100644
--- a/vendor/helm.sh/helm/v3/pkg/chartutil/coalesce.go
+++ b/vendor/helm.sh/helm/v3/pkg/chartutil/coalesce.go
@@ -237,6 +237,9 @@ func coalesceValues(printf printFn, c *chart.Chart, v map[string]interface{}, pr
printf("warning: skipped value for %s.%s: Not a table.", subPrefix, key)
}
} else {
+ // If the key is a child chart, coalesce tables with Merge set to true
+ merge := childChartMergeTrue(c, key, merge)
+
// Because v has higher precedence than nv, dest values override src
// values.
coalesceTablesFullKey(printf, dest, src, concatPrefix(subPrefix, key), merge)
@@ -249,6 +252,15 @@ func coalesceValues(printf printFn, c *chart.Chart, v map[string]interface{}, pr
}
}
+func childChartMergeTrue(chrt *chart.Chart, key string, merge bool) bool {
+ for _, subchart := range chrt.Dependencies() {
+ if subchart.Name() == key {
+ return true
+ }
+ }
+ return merge
+}
+
// CoalesceTables merges a source map into a destination map.
//
// dest is considered authoritative.
diff --git a/vendor/helm.sh/helm/v3/pkg/chartutil/create.go b/vendor/helm.sh/helm/v3/pkg/chartutil/create.go
index 0bb5a83cd7a..321d3d2c047 100644
--- a/vendor/helm.sh/helm/v3/pkg/chartutil/create.go
+++ b/vendor/helm.sh/helm/v3/pkg/chartutil/create.go
@@ -106,18 +106,24 @@ const defaultValues = `# Default values for %s.
# This is a YAML-formatted file.
# Declare variables to be passed into your templates.
+# This will set the replicaset count more information can be found here: https://kubernetes.io/docs/concepts/workloads/controllers/replicaset/
replicaCount: 1
+# This sets the container image more information can be found here: https://kubernetes.io/docs/concepts/containers/images/
image:
repository: nginx
+ # This sets the pull policy for images.
pullPolicy: IfNotPresent
# Overrides the image tag whose default is the chart appVersion.
tag: ""
+# This is for the secrets for pulling an image from a private repository more information can be found here: https://kubernetes.io/docs/tasks/configure-pod-container/pull-image-private-registry/
imagePullSecrets: []
+# This is to override the chart name.
nameOverride: ""
fullnameOverride: ""
+# This section builds out the service account more information can be found here: https://kubernetes.io/docs/concepts/security/service-accounts/
serviceAccount:
# Specifies whether a service account should be created
create: true
@@ -129,7 +135,11 @@ serviceAccount:
# If not set and create is true, a name is generated using the fullname template
name: ""
+# This is for setting Kubernetes Annotations to a Pod.
+# For more information checkout: https://kubernetes.io/docs/concepts/overview/working-with-objects/annotations/
podAnnotations: {}
+# This is for setting Kubernetes Labels to a Pod.
+# For more information checkout: https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/
podLabels: {}
podSecurityContext: {}
@@ -143,10 +153,14 @@ securityContext: {}
# runAsNonRoot: true
# runAsUser: 1000
+# This is for setting up a service more information can be found here: https://kubernetes.io/docs/concepts/services-networking/service/
service:
+ # This sets the service type more information can be found here: https://kubernetes.io/docs/concepts/services-networking/service/#publishing-services-service-types
type: ClusterIP
+ # This sets the ports more information can be found here: https://kubernetes.io/docs/concepts/services-networking/service/#field-spec-ports
port: 80
+# This block is for setting up the ingress for more information can be found here: https://kubernetes.io/docs/concepts/services-networking/ingress/
ingress:
enabled: false
className: ""
@@ -175,6 +189,7 @@ resources: {}
# cpu: 100m
# memory: 128Mi
+# This is to setup the liveness and readiness probes more information can be found here: https://kubernetes.io/docs/tasks/configure-pod-container/configure-liveness-readiness-startup-probes/
livenessProbe:
httpGet:
path: /
@@ -184,6 +199,7 @@ readinessProbe:
path: /
port: http
+# This section is for setting up autoscaling more information can be found here: https://kubernetes.io/docs/concepts/workloads/autoscaling/
autoscaling:
enabled: false
minReplicas: 1
@@ -237,23 +253,10 @@ const defaultIgnore = `# Patterns to ignore when building packages.
`
const defaultIngress = `{{- if .Values.ingress.enabled -}}
-{{- $fullName := include ".fullname" . -}}
-{{- $svcPort := .Values.service.port -}}
-{{- if and .Values.ingress.className (not (semverCompare ">=1.18-0" .Capabilities.KubeVersion.GitVersion)) }}
- {{- if not (hasKey .Values.ingress.annotations "kubernetes.io/ingress.class") }}
- {{- $_ := set .Values.ingress.annotations "kubernetes.io/ingress.class" .Values.ingress.className}}
- {{- end }}
-{{- end }}
-{{- if semverCompare ">=1.19-0" .Capabilities.KubeVersion.GitVersion -}}
apiVersion: networking.k8s.io/v1
-{{- else if semverCompare ">=1.14-0" .Capabilities.KubeVersion.GitVersion -}}
-apiVersion: networking.k8s.io/v1beta1
-{{- else -}}
-apiVersion: extensions/v1beta1
-{{- end }}
kind: Ingress
metadata:
- name: {{ $fullName }}
+ name: {{ include ".fullname" . }}
labels:
{{- include ".labels" . | nindent 4 }}
{{- with .Values.ingress.annotations }}
@@ -261,8 +264,8 @@ metadata:
{{- toYaml . | nindent 4 }}
{{- end }}
spec:
- {{- if and .Values.ingress.className (semverCompare ">=1.18-0" .Capabilities.KubeVersion.GitVersion) }}
- ingressClassName: {{ .Values.ingress.className }}
+ {{- with .Values.ingress.className }}
+ ingressClassName: {{ . }}
{{- end }}
{{- if .Values.ingress.tls }}
tls:
@@ -281,19 +284,14 @@ spec:
paths:
{{- range .paths }}
- path: {{ .path }}
- {{- if and .pathType (semverCompare ">=1.18-0" $.Capabilities.KubeVersion.GitVersion) }}
- pathType: {{ .pathType }}
+ {{- with .pathType }}
+ pathType: {{ . }}
{{- end }}
backend:
- {{- if semverCompare ">=1.19-0" $.Capabilities.KubeVersion.GitVersion }}
service:
- name: {{ $fullName }}
+ name: {{ include ".fullname" $ }}
port:
- number: {{ $svcPort }}
- {{- else }}
- serviceName: {{ $fullName }}
- servicePort: {{ $svcPort }}
- {{- end }}
+ number: {{ $.Values.service.port }}
{{- end }}
{{- end }}
{{- end }}
@@ -329,24 +327,34 @@ spec:
{{- toYaml . | nindent 8 }}
{{- end }}
serviceAccountName: {{ include ".serviceAccountName" . }}
+ {{- with .Values.podSecurityContext }}
securityContext:
- {{- toYaml .Values.podSecurityContext | nindent 8 }}
+ {{- toYaml . | nindent 8 }}
+ {{- end }}
containers:
- name: {{ .Chart.Name }}
+ {{- with .Values.securityContext }}
securityContext:
- {{- toYaml .Values.securityContext | nindent 12 }}
+ {{- toYaml . | nindent 12 }}
+ {{- end }}
image: "{{ .Values.image.repository }}:{{ .Values.image.tag | default .Chart.AppVersion }}"
imagePullPolicy: {{ .Values.image.pullPolicy }}
ports:
- name: http
containerPort: {{ .Values.service.port }}
protocol: TCP
+ {{- with .Values.livenessProbe }}
livenessProbe:
- {{- toYaml .Values.livenessProbe | nindent 12 }}
+ {{- toYaml . | nindent 12 }}
+ {{- end }}
+ {{- with .Values.readinessProbe }}
readinessProbe:
- {{- toYaml .Values.readinessProbe | nindent 12 }}
+ {{- toYaml . | nindent 12 }}
+ {{- end }}
+ {{- with .Values.resources }}
resources:
- {{- toYaml .Values.resources | nindent 12 }}
+ {{- toYaml . | nindent 12 }}
+ {{- end }}
{{- with .Values.volumeMounts }}
volumeMounts:
{{- toYaml . | nindent 12 }}
@@ -448,7 +456,7 @@ const defaultNotes = `1. Get the application URL by running these commands:
echo http://$NODE_IP:$NODE_PORT
{{- else if contains "LoadBalancer" .Values.service.type }}
NOTE: It may take a few minutes for the LoadBalancer IP to be available.
- You can watch the status of by running 'kubectl get --namespace {{ .Release.Namespace }} svc -w {{ include ".fullname" . }}'
+ You can watch its status by running 'kubectl get --namespace {{ .Release.Namespace }} svc -w {{ include ".fullname" . }}'
export SERVICE_IP=$(kubectl get svc --namespace {{ .Release.Namespace }} {{ include ".fullname" . }} --template "{{"{{ range (index .status.loadBalancer.ingress 0) }}{{.}}{{ end }}"}}")
echo http://$SERVICE_IP:{{ .Values.service.port }}
{{- else if contains "ClusterIP" .Values.service.type }}
@@ -622,6 +630,10 @@ func Create(name, dir string) (string, error) {
return cdir, errors.Errorf("file %s already exists and is not a directory", cdir)
}
+ // Note: If adding a new template below (i.e., to `helm create`) which is disabled by default (similar to hpa and
+ // ingress below); or making an existing template disabled by default, add the enabling condition in
+ // `TestHelmCreateChart_CheckDeprecatedWarnings` in `pkg/lint/lint_test.go` to make it run through deprecation checks
+ // with latest Kubernetes version.
files := []struct {
path string
content []byte
diff --git a/vendor/helm.sh/helm/v3/pkg/chartutil/dependencies.go b/vendor/helm.sh/helm/v3/pkg/chartutil/dependencies.go
index 205d99e093c..36a34192728 100644
--- a/vendor/helm.sh/helm/v3/pkg/chartutil/dependencies.go
+++ b/vendor/helm.sh/helm/v3/pkg/chartutil/dependencies.go
@@ -137,7 +137,7 @@ func processDependencyEnabled(c *chart.Chart, v map[string]interface{}, path str
// If any dependency is not a part of Chart.yaml
// then this should be added to chartDependencies.
// However, if the dependency is already specified in Chart.yaml
- // we should not add it, as it would be anyways processed from Chart.yaml
+ // we should not add it, as it would be processed from Chart.yaml anyway.
Loop:
for _, existing := range c.Dependencies() {
diff --git a/vendor/helm.sh/helm/v3/pkg/chartutil/values.go b/vendor/helm.sh/helm/v3/pkg/chartutil/values.go
index 2fa2bdabb93..61c633a6d55 100644
--- a/vendor/helm.sh/helm/v3/pkg/chartutil/values.go
+++ b/vendor/helm.sh/helm/v3/pkg/chartutil/values.go
@@ -135,6 +135,13 @@ type ReleaseOptions struct {
//
// This takes both ReleaseOptions and Capabilities to merge into the render values.
func ToRenderValues(chrt *chart.Chart, chrtVals map[string]interface{}, options ReleaseOptions, caps *Capabilities) (Values, error) {
+ return ToRenderValuesWithSchemaValidation(chrt, chrtVals, options, caps, false)
+}
+
+// ToRenderValuesWithSchemaValidation composes the struct from the data coming from the Releases, Charts and Values files
+//
+// This takes both ReleaseOptions and Capabilities to merge into the render values.
+func ToRenderValuesWithSchemaValidation(chrt *chart.Chart, chrtVals map[string]interface{}, options ReleaseOptions, caps *Capabilities, skipSchemaValidation bool) (Values, error) {
if caps == nil {
caps = DefaultCapabilities
}
@@ -156,9 +163,11 @@ func ToRenderValues(chrt *chart.Chart, chrtVals map[string]interface{}, options
return top, err
}
- if err := ValidateAgainstSchema(chrt, vals); err != nil {
- errFmt := "values don't meet the specifications of the schema(s) in the following chart(s):\n%s"
- return top, fmt.Errorf(errFmt, err.Error())
+ if !skipSchemaValidation {
+ if err := ValidateAgainstSchema(chrt, vals); err != nil {
+ errFmt := "values don't meet the specifications of the schema(s) in the following chart(s):\n%s"
+ return top, fmt.Errorf(errFmt, err.Error())
+ }
}
top["Values"] = vals
diff --git a/vendor/helm.sh/helm/v3/pkg/cli/environment.go b/vendor/helm.sh/helm/v3/pkg/cli/environment.go
index 721b840ab0a..63580634426 100644
--- a/vendor/helm.sh/helm/v3/pkg/cli/environment.go
+++ b/vendor/helm.sh/helm/v3/pkg/cli/environment.go
@@ -36,6 +36,7 @@ import (
"helm.sh/helm/v3/internal/version"
"helm.sh/helm/v3/pkg/helmpath"
+ "helm.sh/helm/v3/pkg/kube"
)
// defaultMaxHistory sets the maximum number of releases to 0: unlimited
@@ -112,7 +113,7 @@ func New() *EnvSettings {
env.Debug, _ = strconv.ParseBool(os.Getenv("HELM_DEBUG"))
// bind to kubernetes config flags
- env.config = &genericclioptions.ConfigFlags{
+ config := &genericclioptions.ConfigFlags{
Namespace: &env.namespace,
Context: &env.KubeContext,
BearerToken: &env.KubeToken,
@@ -127,12 +128,17 @@ func New() *EnvSettings {
config.Burst = env.BurstLimit
config.QPS = env.QPS
config.Wrap(func(rt http.RoundTripper) http.RoundTripper {
- return &retryingRoundTripper{wrapped: rt}
+ return &kube.RetryingRoundTripper{Wrapped: rt}
})
config.UserAgent = version.GetUserAgent()
return config
},
}
+ if env.BurstLimit != defaultBurstLimit {
+ config = config.WithDiscoveryBurst(env.BurstLimit)
+ }
+ env.config = config
+
return env
}
@@ -151,7 +157,7 @@ func (s *EnvSettings) AddFlags(fs *pflag.FlagSet) {
fs.BoolVar(&s.Debug, "debug", s.Debug, "enable verbose output")
fs.StringVar(&s.RegistryConfig, "registry-config", s.RegistryConfig, "path to the registry config file")
fs.StringVar(&s.RepositoryConfig, "repository-config", s.RepositoryConfig, "path to the file containing repository names and URLs")
- fs.StringVar(&s.RepositoryCache, "repository-cache", s.RepositoryCache, "path to the file containing cached repository indexes")
+ fs.StringVar(&s.RepositoryCache, "repository-cache", s.RepositoryCache, "path to the directory containing cached repository indexes")
fs.IntVar(&s.BurstLimit, "burst-limit", s.BurstLimit, "client-side default throttling limit")
fs.Float32Var(&s.QPS, "qps", s.QPS, "queries per second used when communicating with the Kubernetes API, not including bursting")
}
@@ -244,6 +250,9 @@ func (s *EnvSettings) Namespace() string {
if ns, _, err := s.config.ToRawKubeConfigLoader().Namespace(); err == nil {
return ns
}
+ if s.namespace != "" {
+ return s.namespace
+ }
return "default"
}
diff --git a/vendor/helm.sh/helm/v3/pkg/downloader/chart_downloader.go b/vendor/helm.sh/helm/v3/pkg/downloader/chart_downloader.go
index a95894e00e8..9e8e243b8ca 100644
--- a/vendor/helm.sh/helm/v3/pkg/downloader/chart_downloader.go
+++ b/vendor/helm.sh/helm/v3/pkg/downloader/chart_downloader.go
@@ -23,7 +23,6 @@ import (
"path/filepath"
"strings"
- "github.com/Masterminds/semver/v3"
"github.com/pkg/errors"
"helm.sh/helm/v3/internal/fileutil"
@@ -97,6 +96,8 @@ func (c *ChartDownloader) DownloadTo(ref, version, dest string) (string, *proven
return "", nil, err
}
+ c.Options = append(c.Options, getter.WithAcceptHeader("application/gzip,application/octet-stream"))
+
data, err := g.Get(u.String(), c.Options...)
if err != nil {
return "", nil, err
@@ -141,39 +142,6 @@ func (c *ChartDownloader) DownloadTo(ref, version, dest string) (string, *proven
return destfile, ver, nil
}
-func (c *ChartDownloader) getOciURI(ref, version string, u *url.URL) (*url.URL, error) {
- var tag string
- var err error
-
- // Evaluate whether an explicit version has been provided. Otherwise, determine version to use
- _, errSemVer := semver.NewVersion(version)
- if errSemVer == nil {
- tag = version
- } else {
- // Retrieve list of repository tags
- tags, err := c.RegistryClient.Tags(strings.TrimPrefix(ref, fmt.Sprintf("%s://", registry.OCIScheme)))
- if err != nil {
- return nil, err
- }
- if len(tags) == 0 {
- return nil, errors.Errorf("Unable to locate any tags in provided repository: %s", ref)
- }
-
- // Determine if version provided
- // If empty, try to get the highest available tag
- // If exact version, try to find it
- // If semver constraint string, try to find a match
- tag, err = registry.GetTagMatchingVersionOrConstraint(tags, version)
- if err != nil {
- return nil, err
- }
- }
-
- u.Path = fmt.Sprintf("%s:%s", u.Path, tag)
-
- return u, err
-}
-
// ResolveChartVersion resolves a chart reference to a URL.
//
// It returns the URL and sets the ChartDownloader's Options that can fetch
@@ -196,7 +164,7 @@ func (c *ChartDownloader) ResolveChartVersion(ref, version string) (*url.URL, er
}
if registry.IsOCI(u.String()) {
- return c.getOciURI(ref, version, u)
+ return c.RegistryClient.ValidateReference(ref, version, u)
}
rf, err := loadRepoConfig(c.RepositoryConfig)
diff --git a/vendor/helm.sh/helm/v3/pkg/downloader/manager.go b/vendor/helm.sh/helm/v3/pkg/downloader/manager.go
index 68c9c6e006d..ec4056d2753 100644
--- a/vendor/helm.sh/helm/v3/pkg/downloader/manager.go
+++ b/vendor/helm.sh/helm/v3/pkg/downloader/manager.go
@@ -173,7 +173,7 @@ func (m *Manager) Update() error {
// has some information about them and, when possible, the index files
// locally.
// TODO(mattfarina): Repositories should be explicitly added by end users
- // rather than automattic. In Helm v4 require users to add repositories. They
+ // rather than automatic. In Helm v4 require users to add repositories. They
// should have to add them in order to make sure they are aware of the
// repositories and opt-in to any locations, for security.
repoNames, err = m.ensureMissingRepos(repoNames, req)
@@ -246,7 +246,7 @@ func (m *Manager) downloadAll(deps []*chart.Dependency) error {
}
destPath := filepath.Join(m.ChartPath, "charts")
- tmpPath := filepath.Join(m.ChartPath, "tmpcharts")
+ tmpPath := filepath.Join(m.ChartPath, fmt.Sprintf("tmpcharts-%d", os.Getpid()))
// Check if 'charts' directory is not actually a directory. If it does not exist, create it.
if fi, err := os.Stat(destPath); err == nil {
diff --git a/vendor/helm.sh/helm/v3/pkg/engine/engine.go b/vendor/helm.sh/helm/v3/pkg/engine/engine.go
index 61c0782fcae..d8ee313e1ea 100644
--- a/vendor/helm.sh/helm/v3/pkg/engine/engine.go
+++ b/vendor/helm.sh/helm/v3/pkg/engine/engine.go
@@ -169,7 +169,7 @@ func tplFun(parent *template.Template, includedNames map[string]int, strict bool
})
// We need a .New template, as template text which is just blanks
- // or comments after parsing out defines just addes new named
+ // or comments after parsing out defines just adds new named
// template definitions without changing the main template.
// https://pkg.go.dev/text/template#Template.Parse
// Use the parent's name for lack of a better way to identify the tpl
@@ -206,7 +206,7 @@ func (e Engine) initFunMap(t *template.Template) {
log.Printf("[INFO] Missing required value: %s", warn)
return "", nil
}
- return val, errors.Errorf(warnWrap(warn))
+ return val, errors.New(warnWrap(warn))
} else if _, ok := val.(string); ok {
if val == "" {
if e.LintMode {
@@ -214,7 +214,7 @@ func (e Engine) initFunMap(t *template.Template) {
log.Printf("[INFO] Missing required value: %s", warn)
return "", nil
}
- return val, errors.Errorf(warnWrap(warn))
+ return val, errors.New(warnWrap(warn))
}
}
return val, nil
@@ -239,7 +239,7 @@ func (e Engine) initFunMap(t *template.Template) {
// When DNS lookups are not enabled override the sprig function and return
// an empty string.
if !e.EnableDNS {
- funcMap["getHostByName"] = func(name string) string {
+ funcMap["getHostByName"] = func(_ string) string {
return ""
}
}
diff --git a/vendor/helm.sh/helm/v3/pkg/engine/funcs.go b/vendor/helm.sh/helm/v3/pkg/engine/funcs.go
index 8f05a3a1db0..d03a818c28e 100644
--- a/vendor/helm.sh/helm/v3/pkg/engine/funcs.go
+++ b/vendor/helm.sh/helm/v3/pkg/engine/funcs.go
@@ -25,6 +25,7 @@ import (
"github.com/BurntSushi/toml"
"github.com/Masterminds/sprig/v3"
"sigs.k8s.io/yaml"
+ goYaml "sigs.k8s.io/yaml/goyaml.v3"
)
// funcMap returns a mapping of all of the functions that Engine has.
@@ -48,7 +49,9 @@ func funcMap() template.FuncMap {
// Add some extra functionality
extra := template.FuncMap{
"toToml": toTOML,
+ "fromToml": fromTOML,
"toYaml": toYAML,
+ "toYamlPretty": toYAMLPretty,
"fromYaml": fromYAML,
"fromYamlArray": fromYAMLArray,
"toJson": toJSON,
@@ -88,6 +91,19 @@ func toYAML(v interface{}) string {
return strings.TrimSuffix(string(data), "\n")
}
+func toYAMLPretty(v interface{}) string {
+ var data bytes.Buffer
+ encoder := goYaml.NewEncoder(&data)
+ encoder.SetIndent(2)
+ err := encoder.Encode(v)
+
+ if err != nil {
+ // Swallow errors inside of a template.
+ return ""
+ }
+ return strings.TrimSuffix(data.String(), "\n")
+}
+
// fromYAML converts a YAML document into a map[string]interface{}.
//
// This is not a general-purpose YAML parser, and will not parse all valid
@@ -132,6 +148,21 @@ func toTOML(v interface{}) string {
return b.String()
}
+// fromTOML converts a TOML document into a map[string]interface{}.
+//
+// This is not a general-purpose TOML parser, and will not parse all valid
+// TOML documents. Additionally, because its intended use is within templates
+// it tolerates errors. It will insert the returned error message string into
+// m["Error"] in the returned map.
+func fromTOML(str string) map[string]interface{} {
+ m := make(map[string]interface{})
+
+ if err := toml.Unmarshal([]byte(str), &m); err != nil {
+ m["Error"] = err.Error()
+ }
+ return m
+}
+
// toJSON takes an interface, marshals it to json, and returns a string. It will
// always return a string, even on marshal error (empty string).
//
diff --git a/vendor/helm.sh/helm/v3/pkg/engine/lookup_func.go b/vendor/helm.sh/helm/v3/pkg/engine/lookup_func.go
index 86a7d698ca8..75e85098d16 100644
--- a/vendor/helm.sh/helm/v3/pkg/engine/lookup_func.go
+++ b/vendor/helm.sh/helm/v3/pkg/engine/lookup_func.go
@@ -131,7 +131,7 @@ func getAPIResourceForGVK(gvk schema.GroupVersionKind, config *rest.Config) (met
return res, err
}
for _, resource := range resList.APIResources {
- // if a resource contains a "/" it's referencing a subresource. we don't support suberesource for now.
+ // if a resource contains a "/" it's referencing a subresource. we don't support subresource for now.
if resource.Kind == gvk.Kind && !strings.Contains(resource.Name, "/") {
res = resource
res.Group = gvk.Group
diff --git a/vendor/helm.sh/helm/v3/pkg/getter/getter.go b/vendor/helm.sh/helm/v3/pkg/getter/getter.go
index 45ab4da7e4e..1acb2093dc4 100644
--- a/vendor/helm.sh/helm/v3/pkg/getter/getter.go
+++ b/vendor/helm.sh/helm/v3/pkg/getter/getter.go
@@ -38,6 +38,7 @@ type options struct {
unTar bool
insecureSkipVerifyTLS bool
plainHTTP bool
+ acceptHeader string
username string
password string
passCredentialsAll bool
@@ -60,6 +61,13 @@ func WithURL(url string) Option {
}
}
+// WithAcceptHeader sets the request's Accept header as some REST APIs serve multiple content types
+func WithAcceptHeader(header string) Option {
+ return func(opts *options) {
+ opts.acceptHeader = header
+ }
+}
+
// WithBasicAuth sets the request's Authorization header to use the provided credentials
func WithBasicAuth(username, password string) Option {
return func(opts *options) {
diff --git a/vendor/helm.sh/helm/v3/pkg/getter/httpgetter.go b/vendor/helm.sh/helm/v3/pkg/getter/httpgetter.go
index b53e558e35d..df3dcd91093 100644
--- a/vendor/helm.sh/helm/v3/pkg/getter/httpgetter.go
+++ b/vendor/helm.sh/helm/v3/pkg/getter/httpgetter.go
@@ -53,6 +53,10 @@ func (g *HTTPGetter) get(href string) (*bytes.Buffer, error) {
return nil, err
}
+ if g.opts.acceptHeader != "" {
+ req.Header.Set("Accept", g.opts.acceptHeader)
+ }
+
req.Header.Set("User-Agent", version.GetUserAgent())
if g.opts.userAgent != "" {
req.Header.Set("User-Agent", g.opts.userAgent)
diff --git a/vendor/helm.sh/helm/v3/pkg/getter/ocigetter.go b/vendor/helm.sh/helm/v3/pkg/getter/ocigetter.go
index 0547cdcbb62..5b0522395c6 100644
--- a/vendor/helm.sh/helm/v3/pkg/getter/ocigetter.go
+++ b/vendor/helm.sh/helm/v3/pkg/getter/ocigetter.go
@@ -20,6 +20,7 @@ import (
"fmt"
"net"
"net/http"
+ "path"
"strings"
"sync"
"time"
@@ -58,6 +59,9 @@ func (g *OCIGetter) get(href string) (*bytes.Buffer, error) {
ref := strings.TrimPrefix(href, fmt.Sprintf("%s://", registry.OCIScheme))
+ if version := g.opts.version; version != "" && !strings.Contains(path.Base(ref), ":") {
+ ref = fmt.Sprintf("%s:%s", ref, version)
+ }
var pullOpts []registry.PullOption
requestingProv := strings.HasSuffix(ref, ".prov")
if requestingProv {
diff --git a/vendor/helm.sh/helm/v3/pkg/helmpath/lazypath.go b/vendor/helm.sh/helm/v3/pkg/helmpath/lazypath.go
index 22d7bf0a1b8..6b4f1fc7703 100644
--- a/vendor/helm.sh/helm/v3/pkg/helmpath/lazypath.go
+++ b/vendor/helm.sh/helm/v3/pkg/helmpath/lazypath.go
@@ -34,7 +34,7 @@ const (
DataHomeEnvVar = "HELM_DATA_HOME"
)
-// lazypath is an lazy-loaded path buffer for the XDG base directory specification.
+// lazypath is a lazy-loaded path buffer for the XDG base directory specification.
type lazypath string
func (l lazypath) path(helmEnvVar, xdgEnvVar string, defaultFn func() string, elem ...string) string {
diff --git a/vendor/helm.sh/helm/v3/pkg/ignore/doc.go b/vendor/helm.sh/helm/v3/pkg/ignore/doc.go
index 5245d410eea..1f5e9184771 100644
--- a/vendor/helm.sh/helm/v3/pkg/ignore/doc.go
+++ b/vendor/helm.sh/helm/v3/pkg/ignore/doc.go
@@ -26,7 +26,7 @@ The formatting rules are as follows:
- Parsing is line-by-line
- Empty lines are ignored
- - Lines the begin with # (comments) will be ignored
+ - Lines that begin with # (comments) will be ignored
- Leading and trailing spaces are always ignored
- Inline comments are NOT supported ('foo* # Any foo' does not contain a comment)
- There is no support for multi-line patterns
diff --git a/vendor/helm.sh/helm/v3/pkg/ignore/rules.go b/vendor/helm.sh/helm/v3/pkg/ignore/rules.go
index a80923baf0c..88de407ad88 100644
--- a/vendor/helm.sh/helm/v3/pkg/ignore/rules.go
+++ b/vendor/helm.sh/helm/v3/pkg/ignore/rules.go
@@ -173,7 +173,7 @@ func (r *Rules) parseRule(rule string) error {
if strings.HasPrefix(rule, "/") {
// Require path matches the root path.
- p.match = func(n string, fi os.FileInfo) bool {
+ p.match = func(n string, _ os.FileInfo) bool {
rule = strings.TrimPrefix(rule, "/")
ok, err := filepath.Match(rule, n)
if err != nil {
@@ -184,7 +184,7 @@ func (r *Rules) parseRule(rule string) error {
}
} else if strings.Contains(rule, "/") {
// require structural match.
- p.match = func(n string, fi os.FileInfo) bool {
+ p.match = func(n string, _ os.FileInfo) bool {
ok, err := filepath.Match(rule, n)
if err != nil {
log.Printf("Failed to compile %q: %s", rule, err)
@@ -193,7 +193,7 @@ func (r *Rules) parseRule(rule string) error {
return ok
}
} else {
- p.match = func(n string, fi os.FileInfo) bool {
+ p.match = func(n string, _ os.FileInfo) bool {
// When there is no slash in the pattern, we evaluate ONLY the
// filename.
n = filepath.Base(n)
diff --git a/vendor/helm.sh/helm/v3/pkg/kube/client.go b/vendor/helm.sh/helm/v3/pkg/kube/client.go
index 9df833a434c..5f16f2bfb6d 100644
--- a/vendor/helm.sh/helm/v3/pkg/kube/client.go
+++ b/vendor/helm.sh/helm/v3/pkg/kube/client.go
@@ -55,6 +55,7 @@ import (
"k8s.io/client-go/rest"
cachetools "k8s.io/client-go/tools/cache"
watchtools "k8s.io/client-go/tools/watch"
+ "k8s.io/client-go/util/retry"
cmdutil "k8s.io/kubectl/pkg/cmd/util"
)
@@ -85,23 +86,22 @@ type Client struct {
kubeClient *kubernetes.Clientset
}
-var addToScheme sync.Once
+func init() {
+ // Add CRDs to the scheme. They are missing by default.
+ if err := apiextv1.AddToScheme(scheme.Scheme); err != nil {
+ // This should never happen.
+ panic(err)
+ }
+ if err := apiextv1beta1.AddToScheme(scheme.Scheme); err != nil {
+ panic(err)
+ }
+}
// New creates a new Client.
func New(getter genericclioptions.RESTClientGetter) *Client {
if getter == nil {
getter = genericclioptions.NewConfigFlags(true)
}
- // Add CRDs to the scheme. They are missing by default.
- addToScheme.Do(func() {
- if err := apiextv1.AddToScheme(scheme.Scheme); err != nil {
- // This should never happen.
- panic(err)
- }
- if err := apiextv1beta1.AddToScheme(scheme.Scheme); err != nil {
- panic(err)
- }
- })
return &Client{
Factory: cmdutil.NewFactory(getter),
Log: nopLogger,
@@ -124,7 +124,7 @@ func (c *Client) getKubeClient() (*kubernetes.Clientset, error) {
func (c *Client) IsReachable() error {
client, err := c.getKubeClient()
if err == genericclioptions.ErrEmptyConfig {
- // re-replace kubernetes ErrEmptyConfig error with a friendy error
+ // re-replace kubernetes ErrEmptyConfig error with a friendly error
// moar workarounds for Kubernetes API breaking.
return errors.New("Kubernetes cluster unreachable")
}
@@ -435,7 +435,7 @@ func (c *Client) Update(original, target ResourceList, force bool) (*Result, err
case err != nil:
return res, err
case len(updateErrors) != 0:
- return res, errors.Errorf(strings.Join(updateErrors, " && "))
+ return res, errors.New(strings.Join(updateErrors, " && "))
}
for _, info := range original.Difference(target) {
@@ -596,17 +596,25 @@ func batchPerform(infos ResourceList, fn func(*resource.Info) error, errs chan<-
}
func createResource(info *resource.Info) error {
- obj, err := resource.NewHelper(info.Client, info.Mapping).WithFieldManager(getManagedFieldsManager()).Create(info.Namespace, true, info.Object)
- if err != nil {
- return err
- }
- return info.Refresh(obj, true)
+ return retry.RetryOnConflict(
+ retry.DefaultRetry,
+ func() error {
+ obj, err := resource.NewHelper(info.Client, info.Mapping).WithFieldManager(getManagedFieldsManager()).Create(info.Namespace, true, info.Object)
+ if err != nil {
+ return err
+ }
+ return info.Refresh(obj, true)
+ })
}
func deleteResource(info *resource.Info, policy metav1.DeletionPropagation) error {
- opts := &metav1.DeleteOptions{PropagationPolicy: &policy}
- _, err := resource.NewHelper(info.Client, info.Mapping).WithFieldManager(getManagedFieldsManager()).DeleteWithOptions(info.Namespace, info.Name, opts)
- return err
+ return retry.RetryOnConflict(
+ retry.DefaultRetry,
+ func() error {
+ opts := &metav1.DeleteOptions{PropagationPolicy: &policy}
+ _, err := resource.NewHelper(info.Client, info.Mapping).WithFieldManager(getManagedFieldsManager()).DeleteWithOptions(info.Namespace, info.Name, opts)
+ return err
+ })
}
func createPatch(target *resource.Info, current runtime.Object) ([]byte, types.PatchType, error) {
@@ -635,7 +643,7 @@ func createPatch(target *resource.Info, current runtime.Object) ([]byte, types.P
// Get a versioned object
versionedObject := AsVersioned(target)
- // Unstructured objects, such as CRDs, may not have an not registered error
+ // Unstructured objects, such as CRDs, may not have a not registered error
// returned from ConvertToVersion. Anything that's unstructured should
// use the jsonpatch.CreateMergePatch. Strategic Merge Patch is not supported
// on objects like CRDs.
diff --git a/vendor/helm.sh/helm/v3/pkg/kube/ready.go b/vendor/helm.sh/helm/v3/pkg/kube/ready.go
index b2d26ba761e..55c4a39bf13 100644
--- a/vendor/helm.sh/helm/v3/pkg/kube/ready.go
+++ b/vendor/helm.sh/helm/v3/pkg/kube/ready.go
@@ -426,7 +426,7 @@ func (c *ReadyChecker) statefulSetReady(sts *appsv1.StatefulSet) bool {
return false
}
// This check only makes sense when all partitions are being upgraded otherwise during a
- // partioned rolling upgrade, this condition will never evaluate to true, leading to
+ // partitioned rolling upgrade, this condition will never evaluate to true, leading to
// error.
if partition == 0 && sts.Status.CurrentRevision != sts.Status.UpdateRevision {
c.log("StatefulSet is not ready: %s/%s. currentRevision %s does not yet match updateRevision %s", sts.Namespace, sts.Name, sts.Status.CurrentRevision, sts.Status.UpdateRevision)
diff --git a/vendor/helm.sh/helm/v3/pkg/kube/resource.go b/vendor/helm.sh/helm/v3/pkg/kube/resource.go
index ee8f83a25e7..db8e9178e71 100644
--- a/vendor/helm.sh/helm/v3/pkg/kube/resource.go
+++ b/vendor/helm.sh/helm/v3/pkg/kube/resource.go
@@ -26,7 +26,7 @@ func (r *ResourceList) Append(val *resource.Info) {
*r = append(*r, val)
}
-// Visit implements resource.Visitor.
+// Visit implements resource.Visitor. The visitor stops if fn returns an error.
func (r ResourceList) Visit(fn resource.VisitorFunc) error {
for _, i := range r {
if err := fn(i, nil); err != nil {
@@ -81,5 +81,5 @@ func (r ResourceList) Intersect(rs ResourceList) ResourceList {
// isMatchingInfo returns true if infos match on Name and GroupVersionKind.
func isMatchingInfo(a, b *resource.Info) bool {
- return a.Name == b.Name && a.Namespace == b.Namespace && a.Mapping.GroupVersionKind.Kind == b.Mapping.GroupVersionKind.Kind
+ return a.Name == b.Name && a.Namespace == b.Namespace && a.Mapping.GroupVersionKind.Kind == b.Mapping.GroupVersionKind.Kind && a.Mapping.GroupVersionKind.Group == b.Mapping.GroupVersionKind.Group
}
diff --git a/vendor/helm.sh/helm/v3/pkg/cli/roundtripper.go b/vendor/helm.sh/helm/v3/pkg/kube/roundtripper.go
similarity index 87%
rename from vendor/helm.sh/helm/v3/pkg/cli/roundtripper.go
rename to vendor/helm.sh/helm/v3/pkg/kube/roundtripper.go
index 9cd4eacba70..fdb1035291d 100644
--- a/vendor/helm.sh/helm/v3/pkg/cli/roundtripper.go
+++ b/vendor/helm.sh/helm/v3/pkg/kube/roundtripper.go
@@ -14,7 +14,7 @@ See the License for the specific language governing permissions and
limitations under the License.
*/
-package cli
+package kube
import (
"bytes"
@@ -24,19 +24,19 @@ import (
"strings"
)
-type retryingRoundTripper struct {
- wrapped http.RoundTripper
+type RetryingRoundTripper struct {
+ Wrapped http.RoundTripper
}
-func (rt *retryingRoundTripper) RoundTrip(req *http.Request) (*http.Response, error) {
+func (rt *RetryingRoundTripper) RoundTrip(req *http.Request) (*http.Response, error) {
return rt.roundTrip(req, 1, nil)
}
-func (rt *retryingRoundTripper) roundTrip(req *http.Request, retry int, prevResp *http.Response) (*http.Response, error) {
+func (rt *RetryingRoundTripper) roundTrip(req *http.Request, retry int, prevResp *http.Response) (*http.Response, error) {
if retry < 0 {
return prevResp, nil
}
- resp, rtErr := rt.wrapped.RoundTrip(req)
+ resp, rtErr := rt.Wrapped.RoundTrip(req)
if rtErr != nil {
return resp, rtErr
}
diff --git a/vendor/helm.sh/helm/v3/pkg/kube/wait.go b/vendor/helm.sh/helm/v3/pkg/kube/wait.go
index ecdd38940d9..bdafc825564 100644
--- a/vendor/helm.sh/helm/v3/pkg/kube/wait.go
+++ b/vendor/helm.sh/helm/v3/pkg/kube/wait.go
@@ -19,6 +19,7 @@ package kube // import "helm.sh/helm/v3/pkg/kube"
import (
"context"
"fmt"
+ "net/http"
"time"
"github.com/pkg/errors"
@@ -32,6 +33,7 @@ import (
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"k8s.io/apimachinery/pkg/labels"
"k8s.io/apimachinery/pkg/runtime"
+ "k8s.io/cli-runtime/pkg/resource"
"k8s.io/apimachinery/pkg/util/wait"
)
@@ -50,10 +52,27 @@ func (w *waiter) waitForResources(created ResourceList) error {
ctx, cancel := context.WithTimeout(context.Background(), w.timeout)
defer cancel()
+ numberOfErrors := make([]int, len(created))
+ for i := range numberOfErrors {
+ numberOfErrors[i] = 0
+ }
+
return wait.PollUntilContextCancel(ctx, 2*time.Second, true, func(ctx context.Context) (bool, error) {
- for _, v := range created {
+ waitRetries := 30
+ for i, v := range created {
ready, err := w.c.IsReady(ctx, v)
- if !ready || err != nil {
+
+ if waitRetries > 0 && w.isRetryableError(err, v) {
+ numberOfErrors[i]++
+ if numberOfErrors[i] > waitRetries {
+ w.log("Max number of retries reached")
+ return false, err
+ }
+ w.log("Retrying as current number of retries %d less than max number of retries %d", numberOfErrors[i]-1, waitRetries)
+ return false, nil
+ }
+ numberOfErrors[i] = 0
+ if !ready {
return false, err
}
}
@@ -61,6 +80,25 @@ func (w *waiter) waitForResources(created ResourceList) error {
})
}
+func (w *waiter) isRetryableError(err error, resource *resource.Info) bool {
+ if err == nil {
+ return false
+ }
+ w.log("Error received when checking status of resource %s. Error: '%s', Resource details: '%s'", resource.Name, err, resource)
+ if ev, ok := err.(*apierrors.StatusError); ok {
+ statusCode := ev.Status().Code
+ retryable := w.isRetryableHTTPStatusCode(statusCode)
+ w.log("Status code received: %d. Retryable error? %t", statusCode, retryable)
+ return retryable
+ }
+ w.log("Retryable error? %t", true)
+ return true
+}
+
+func (w *waiter) isRetryableHTTPStatusCode(httpStatusCode int32) bool {
+ return httpStatusCode == 0 || httpStatusCode == http.StatusTooManyRequests || (httpStatusCode >= 500 && httpStatusCode != http.StatusNotImplemented)
+}
+
// waitForDeletedResources polls to check if all the resources are deleted or a timeout is reached
func (w *waiter) waitForDeletedResources(deleted ResourceList) error {
w.log("beginning wait for %d resources to be deleted with timeout of %v", len(deleted), w.timeout)
@@ -68,7 +106,7 @@ func (w *waiter) waitForDeletedResources(deleted ResourceList) error {
ctx, cancel := context.WithTimeout(context.Background(), w.timeout)
defer cancel()
- return wait.PollUntilContextCancel(ctx, 2*time.Second, true, func(ctx context.Context) (bool, error) {
+ return wait.PollUntilContextCancel(ctx, 2*time.Second, true, func(_ context.Context) (bool, error) {
for _, v := range deleted {
err := v.Get()
if err == nil || !apierrors.IsNotFound(err) {
@@ -115,7 +153,7 @@ func SelectorsForObject(object runtime.Object) (selector labels.Selector, err er
case *batchv1.Job:
selector, err = metav1.LabelSelectorAsSelector(t.Spec.Selector)
case *corev1.Service:
- if t.Spec.Selector == nil || len(t.Spec.Selector) == 0 {
+ if len(t.Spec.Selector) == 0 {
return nil, fmt.Errorf("invalid service '%s': Service is defined without a selector", t.Name)
}
selector = labels.SelectorFromSet(t.Spec.Selector)
diff --git a/vendor/helm.sh/helm/v3/pkg/lint/lint.go b/vendor/helm.sh/helm/v3/pkg/lint/lint.go
index c0e79f55b1d..ef23ee7c89e 100644
--- a/vendor/helm.sh/helm/v3/pkg/lint/lint.go
+++ b/vendor/helm.sh/helm/v3/pkg/lint/lint.go
@@ -24,20 +24,25 @@ import (
"helm.sh/helm/v3/pkg/lint/support"
)
-// All runs all of the available linters on the given base directory.
+// All runs all the available linters on the given base directory.
func All(basedir string, values map[string]interface{}, namespace string, _ bool) support.Linter {
return AllWithKubeVersion(basedir, values, namespace, nil)
}
// AllWithKubeVersion runs all the available linters on the given base directory, allowing to specify the kubernetes version.
func AllWithKubeVersion(basedir string, values map[string]interface{}, namespace string, kubeVersion *chartutil.KubeVersion) support.Linter {
+ return AllWithKubeVersionAndSchemaValidation(basedir, values, namespace, kubeVersion, false)
+}
+
+// AllWithKubeVersionAndSchemaValidation runs all the available linters on the given base directory, allowing to specify the kubernetes version and if schema validation is enabled or not.
+func AllWithKubeVersionAndSchemaValidation(basedir string, values map[string]interface{}, namespace string, kubeVersion *chartutil.KubeVersion, skipSchemaValidation bool) support.Linter {
// Using abs path to get directory context
chartDir, _ := filepath.Abs(basedir)
linter := support.Linter{ChartDir: chartDir}
rules.Chartfile(&linter)
rules.ValuesWithOverrides(&linter, values)
- rules.TemplatesWithKubeVersion(&linter, values, namespace, kubeVersion)
+ rules.TemplatesWithSkipSchemaValidation(&linter, values, namespace, kubeVersion, skipSchemaValidation)
rules.Dependencies(&linter)
return linter
}
diff --git a/vendor/helm.sh/helm/v3/pkg/lint/rules/template.go b/vendor/helm.sh/helm/v3/pkg/lint/rules/template.go
index aa1dbb7010b..41d1a1bab27 100644
--- a/vendor/helm.sh/helm/v3/pkg/lint/rules/template.go
+++ b/vendor/helm.sh/helm/v3/pkg/lint/rules/template.go
@@ -51,6 +51,11 @@ func Templates(linter *support.Linter, values map[string]interface{}, namespace
// TemplatesWithKubeVersion lints the templates in the Linter, allowing to specify the kubernetes version.
func TemplatesWithKubeVersion(linter *support.Linter, values map[string]interface{}, namespace string, kubeVersion *chartutil.KubeVersion) {
+ TemplatesWithSkipSchemaValidation(linter, values, namespace, kubeVersion, false)
+}
+
+// TemplatesWithSkipSchemaValidation lints the templates in the Linter, allowing to specify the kubernetes version and if schema validation is enabled or not.
+func TemplatesWithSkipSchemaValidation(linter *support.Linter, values map[string]interface{}, namespace string, kubeVersion *chartutil.KubeVersion, skipSchemaValidation bool) {
fpath := "templates/"
templatesPath := filepath.Join(linter.ChartDir, fpath)
@@ -91,7 +96,7 @@ func TemplatesWithKubeVersion(linter *support.Linter, values map[string]interfac
return
}
- valuesToRender, err := chartutil.ToRenderValues(chart, cvals, options, caps)
+ valuesToRender, err := chartutil.ToRenderValuesWithSchemaValidation(chart, cvals, options, caps, skipSchemaValidation)
if err != nil {
linter.RunLinterRule(support.ErrorSev, fpath, err)
return
@@ -275,10 +280,10 @@ func validateMetadataNameFunc(obj *K8sYamlStruct) validation.ValidateNameFunc {
case "certificatesigningrequest":
// No validation.
// https://github.com/kubernetes/kubernetes/blob/v1.20.0/pkg/apis/certificates/validation/validation.go#L137-L140
- return func(name string, prefix bool) []string { return nil }
+ return func(_ string, _ bool) []string { return nil }
case "role", "clusterrole", "rolebinding", "clusterrolebinding":
// https://github.com/kubernetes/kubernetes/blob/v1.20.0/pkg/apis/rbac/validation/validation.go#L32-L34
- return func(name string, prefix bool) []string {
+ return func(name string, _ bool) []string {
return apipath.IsValidPathSegmentName(name)
}
default:
diff --git a/vendor/helm.sh/helm/v3/pkg/pusher/ocipusher.go b/vendor/helm.sh/helm/v3/pkg/pusher/ocipusher.go
index 94154d38907..33296aaddc1 100644
--- a/vendor/helm.sh/helm/v3/pkg/pusher/ocipusher.go
+++ b/vendor/helm.sh/helm/v3/pkg/pusher/ocipusher.go
@@ -29,6 +29,7 @@ import (
"helm.sh/helm/v3/internal/tlsutil"
"helm.sh/helm/v3/pkg/chart/loader"
"helm.sh/helm/v3/pkg/registry"
+ "helm.sh/helm/v3/pkg/time/ctime"
)
// OCIPusher is the default OCI backend handler
@@ -89,6 +90,10 @@ func (pusher *OCIPusher) push(chartRef, href string) error {
path.Join(strings.TrimPrefix(href, fmt.Sprintf("%s://", registry.OCIScheme)), meta.Metadata.Name),
meta.Metadata.Version)
+ // The time the chart was "created" is semantically the time the chart archive file was last written(modified)
+ chartArchiveFileCreatedTime := ctime.Modified(stat)
+ pushOpts = append(pushOpts, registry.PushOptCreationTime(chartArchiveFileCreatedTime.Format(time.RFC3339)))
+
_, err = client.Push(chartBytes, ref, pushOpts...)
return err
}
diff --git a/vendor/helm.sh/helm/v3/pkg/registry/client.go b/vendor/helm.sh/helm/v3/pkg/registry/client.go
index 7538cf69b51..fc26ca11a71 100644
--- a/vendor/helm.sh/helm/v3/pkg/registry/client.go
+++ b/vendor/helm.sh/helm/v3/pkg/registry/client.go
@@ -18,10 +18,12 @@ package registry // import "helm.sh/helm/v3/pkg/registry"
import (
"context"
+ "encoding/base64"
"encoding/json"
"fmt"
"io"
"net/http"
+ "net/url"
"sort"
"strings"
@@ -50,15 +52,24 @@ an underscore (_) in chart version tags when pushing to a registry and back to
a plus (+) when pulling from a registry.`
type (
+ // RemoteClient shadows the ORAS remote.Client interface
+ // (hiding the ORAS type from Helm client visibility)
+ // https://pkg.go.dev/oras.land/oras-go/pkg/registry/remote#Client
+ RemoteClient interface {
+ Do(req *http.Request) (*http.Response, error)
+ }
+
// Client works with OCI-compliant registries
Client struct {
debug bool
enableCache bool
// path to repository config file e.g. ~/.docker/config.json
credentialsFile string
+ username string
+ password string
out io.Writer
authorizer auth.Client
- registryAuthorizer *registryauth.Client
+ registryAuthorizer RemoteClient
resolver func(ref registry.Reference) (remotes.Resolver, error)
httpClient *http.Client
plainHTTP bool
@@ -105,6 +116,19 @@ func NewClient(options ...ClientOption) (*Client, error) {
if client.plainHTTP {
opts = append(opts, auth.WithResolverPlainHTTP())
}
+
+ // if username and password are set, use them for authentication
+ // by adding the basic auth Authorization header to the resolver
+ if client.username != "" && client.password != "" {
+ concat := client.username + ":" + client.password
+ encodedAuth := base64.StdEncoding.EncodeToString([]byte(concat))
+ opts = append(opts, auth.WithResolverHeaders(
+ http.Header{
+ "Authorization": []string{"Basic " + encodedAuth},
+ },
+ ))
+ }
+
resolver, err := client.authorizer.ResolverWithOpts(opts...)
if err != nil {
return nil, err
@@ -124,7 +148,14 @@ func NewClient(options ...ClientOption) (*Client, error) {
"User-Agent": {version.GetUserAgent()},
},
Cache: cache,
- Credential: func(ctx context.Context, reg string) (registryauth.Credential, error) {
+ Credential: func(_ context.Context, reg string) (registryauth.Credential, error) {
+ if client.username != "" && client.password != "" {
+ return registryauth.Credential{
+ Username: client.username,
+ Password: client.password,
+ }, nil
+ }
+
dockerClient, ok := client.authorizer.(*dockerauth.Client)
if !ok {
return registryauth.EmptyCredential, errors.New("unable to obtain docker client")
@@ -168,6 +199,14 @@ func ClientOptEnableCache(enableCache bool) ClientOption {
}
}
+// ClientOptBasicAuth returns a function that sets the username and password setting on client options set
+func ClientOptBasicAuth(username, password string) ClientOption {
+ return func(client *Client) {
+ client.username = username
+ client.password = password
+ }
+}
+
// ClientOptWriter returns a function that sets the writer setting on client options set
func ClientOptWriter(out io.Writer) ClientOption {
return func(client *Client) {
@@ -175,6 +214,26 @@ func ClientOptWriter(out io.Writer) ClientOption {
}
}
+// ClientOptAuthorizer returns a function that sets the authorizer setting on a client options set. This
+// can be used to override the default authorization mechanism.
+//
+// Depending on the use-case you may need to set both ClientOptAuthorizer and ClientOptRegistryAuthorizer.
+func ClientOptAuthorizer(authorizer auth.Client) ClientOption {
+ return func(client *Client) {
+ client.authorizer = authorizer
+ }
+}
+
+// ClientOptRegistryAuthorizer returns a function that sets the registry authorizer setting on a client options set. This
+// can be used to override the default authorization mechanism.
+//
+// Depending on the use-case you may need to set both ClientOptAuthorizer and ClientOptRegistryAuthorizer.
+func ClientOptRegistryAuthorizer(registryAuthorizer RemoteClient) ClientOption {
+ return func(client *Client) {
+ client.registryAuthorizer = registryAuthorizer
+ }
+}
+
// ClientOptCredentialsFile returns a function that sets the credentialsFile setting on a client options set
func ClientOptCredentialsFile(credentialsFile string) ClientOption {
return func(client *Client) {
@@ -198,7 +257,7 @@ func ClientOptPlainHTTP() ClientOption {
// ClientOptResolver returns a function that sets the resolver setting on a client options set
func ClientOptResolver(resolver remotes.Resolver) ClientOption {
return func(client *Client) {
- client.resolver = func(ref registry.Reference) (remotes.Resolver, error) {
+ client.resolver = func(_ registry.Reference) (remotes.Resolver, error) {
return resolver, nil
}
}
@@ -319,7 +378,7 @@ type (
// Pull downloads a chart from a registry
func (c *Client) Pull(ref string, options ...PullOption) (*PullResult, error) {
- parsedRef, err := parseReference(ref)
+ parsedRef, err := newReference(ref)
if err != nil {
return nil, err
}
@@ -351,7 +410,7 @@ func (c *Client) Pull(ref string, options ...PullOption) (*PullResult, error) {
}
var descriptors, layers []ocispec.Descriptor
- remotesResolver, err := c.resolver(parsedRef)
+ remotesResolver, err := c.resolver(parsedRef.orasReference)
if err != nil {
return nil, err
}
@@ -527,15 +586,15 @@ type (
}
pushOperation struct {
- provData []byte
- strictMode bool
- test bool
+ provData []byte
+ strictMode bool
+ creationTime string
}
)
// Push uploads a chart to a registry.
func (c *Client) Push(data []byte, ref string, options ...PushOption) (*PushResult, error) {
- parsedRef, err := parseReference(ref)
+ parsedRef, err := newReference(ref)
if err != nil {
return nil, err
}
@@ -583,7 +642,7 @@ func (c *Client) Push(data []byte, ref string, options ...PushOption) (*PushResu
descriptors = append(descriptors, provDescriptor)
}
- ociAnnotations := generateOCIAnnotations(meta, operation.test)
+ ociAnnotations := generateOCIAnnotations(meta, operation.creationTime)
manifestData, manifest, err := content.GenerateManifest(&configDescriptor, ociAnnotations, descriptors...)
if err != nil {
@@ -594,12 +653,12 @@ func (c *Client) Push(data []byte, ref string, options ...PushOption) (*PushResu
return nil, err
}
- remotesResolver, err := c.resolver(parsedRef)
+ remotesResolver, err := c.resolver(parsedRef.orasReference)
if err != nil {
return nil, err
}
registryStore := content.Registry{Resolver: remotesResolver}
- _, err = oras.Copy(ctx(c.out, c.debug), memoryStore, parsedRef.String(), registryStore, "",
+ _, err = oras.Copy(ctx(c.out, c.debug), memoryStore, parsedRef.orasReference.String(), registryStore, "",
oras.WithNameValidation(nil))
if err != nil {
return nil, err
@@ -630,7 +689,7 @@ func (c *Client) Push(data []byte, ref string, options ...PushOption) (*PushResu
}
fmt.Fprintf(c.out, "Pushed: %s\n", result.Ref)
fmt.Fprintf(c.out, "Digest: %s\n", result.Manifest.Digest)
- if strings.Contains(parsedRef.Reference, "_") {
+ if strings.Contains(parsedRef.orasReference.Reference, "_") {
fmt.Fprintf(c.out, "%s contains an underscore.\n", result.Ref)
fmt.Fprint(c.out, registryUnderscoreMessage+"\n")
}
@@ -652,10 +711,10 @@ func PushOptStrictMode(strictMode bool) PushOption {
}
}
-// PushOptTest returns a function that sets whether test setting on push
-func PushOptTest(test bool) PushOption {
+// PushOptCreationDate returns a function that sets the creation time
+func PushOptCreationTime(creationTime string) PushOption {
return func(operation *pushOperation) {
- operation.test = test
+ operation.creationTime = creationTime
}
}
@@ -701,3 +760,89 @@ func (c *Client) Tags(ref string) ([]string, error) {
return tags, nil
}
+
+// Resolve a reference to a descriptor.
+func (c *Client) Resolve(ref string) (*ocispec.Descriptor, error) {
+ ctx := context.Background()
+ parsedRef, err := newReference(ref)
+ if err != nil {
+ return nil, err
+ }
+ if parsedRef.Registry == "" {
+ return nil, nil
+ }
+
+ remotesResolver, err := c.resolver(parsedRef.orasReference)
+ if err != nil {
+ return nil, err
+ }
+
+ _, desc, err := remotesResolver.Resolve(ctx, ref)
+ return &desc, err
+}
+
+// ValidateReference for path and version
+func (c *Client) ValidateReference(ref, version string, u *url.URL) (*url.URL, error) {
+ var tag string
+
+ registryReference, err := newReference(u.Path)
+ if err != nil {
+ return nil, err
+ }
+
+ if version == "" {
+ // Use OCI URI tag as default
+ version = registryReference.Tag
+ } else {
+ if registryReference.Tag != "" && registryReference.Tag != version {
+ return nil, errors.Errorf("chart reference and version mismatch: %s is not %s", version, registryReference.Tag)
+ }
+ }
+
+ if registryReference.Digest != "" {
+ if registryReference.Tag == "" {
+ // Install by digest only
+ return u, nil
+ }
+
+ // Validate the tag if it was specified
+ path := registryReference.Registry + "/" + registryReference.Repository + ":" + registryReference.Tag
+ desc, err := c.Resolve(path)
+ if err != nil {
+ // The resource does not have to be tagged when digest is specified
+ return u, nil
+ }
+ if desc != nil && desc.Digest.String() != registryReference.Digest {
+ return nil, errors.Errorf("chart reference digest mismatch: %s is not %s", desc.Digest.String(), registryReference.Digest)
+ }
+ return u, nil
+ }
+
+ // Evaluate whether an explicit version has been provided. Otherwise, determine version to use
+ _, errSemVer := semver.NewVersion(version)
+ if errSemVer == nil {
+ tag = version
+ } else {
+ // Retrieve list of repository tags
+ tags, err := c.Tags(strings.TrimPrefix(ref, fmt.Sprintf("%s://", OCIScheme)))
+ if err != nil {
+ return nil, err
+ }
+ if len(tags) == 0 {
+ return nil, errors.Errorf("Unable to locate any tags in provided repository: %s", ref)
+ }
+
+ // Determine if version provided
+ // If empty, try to get the highest available tag
+ // If exact version, try to find it
+ // If semver constraint string, try to find a match
+ tag, err = GetTagMatchingVersionOrConstraint(tags, version)
+ if err != nil {
+ return nil, err
+ }
+ }
+
+ u.Path = fmt.Sprintf("%s/%s:%s", registryReference.Registry, registryReference.Repository, tag)
+
+ return u, err
+}
diff --git a/vendor/helm.sh/helm/v3/pkg/registry/reference.go b/vendor/helm.sh/helm/v3/pkg/registry/reference.go
new file mode 100644
index 00000000000..9b99d73bf1b
--- /dev/null
+++ b/vendor/helm.sh/helm/v3/pkg/registry/reference.go
@@ -0,0 +1,78 @@
+/*
+Copyright The Helm Authors.
+
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+*/
+
+package registry
+
+import (
+ "strings"
+
+ orasregistry "oras.land/oras-go/pkg/registry"
+)
+
+type reference struct {
+ orasReference orasregistry.Reference
+ Registry string
+ Repository string
+ Tag string
+ Digest string
+}
+
+// newReference will parse and validate the reference, and clean tags when
+// applicable tags are only cleaned when plus (+) signs are present, and are
+// converted to underscores (_) before pushing
+// See https://github.com/helm/helm/issues/10166
+func newReference(raw string) (result reference, err error) {
+ // Remove oci:// prefix if it is there
+ raw = strings.TrimPrefix(raw, OCIScheme+"://")
+
+ // The sole possible reference modification is replacing plus (+) signs
+ // present in tags with underscores (_). To do this properly, we first
+ // need to identify a tag, and then pass it on to the reference parser
+ // NOTE: Passing immediately to the reference parser will fail since (+)
+ // signs are an invalid tag character, and simply replacing all plus (+)
+ // occurrences could invalidate other portions of the URI
+ lastIndex := strings.LastIndex(raw, "@")
+ if lastIndex >= 0 {
+ result.Digest = raw[(lastIndex + 1):]
+ raw = raw[:lastIndex]
+ }
+ parts := strings.Split(raw, ":")
+ if len(parts) > 1 && !strings.Contains(parts[len(parts)-1], "/") {
+ tag := parts[len(parts)-1]
+
+ if tag != "" {
+ // Replace any plus (+) signs with known underscore (_) conversion
+ newTag := strings.ReplaceAll(tag, "+", "_")
+ raw = strings.ReplaceAll(raw, tag, newTag)
+ }
+ }
+
+ result.orasReference, err = orasregistry.ParseReference(raw)
+ if err != nil {
+ return result, err
+ }
+ result.Registry = result.orasReference.Registry
+ result.Repository = result.orasReference.Repository
+ result.Tag = result.orasReference.Reference
+ return result, nil
+}
+
+func (r *reference) String() string {
+ if r.Tag == "" {
+ return r.orasReference.String() + "@" + r.Digest
+ }
+ return r.orasReference.String()
+}
diff --git a/vendor/helm.sh/helm/v3/pkg/registry/util.go b/vendor/helm.sh/helm/v3/pkg/registry/util.go
index 8baf0852a6d..bd9f151a8e7 100644
--- a/vendor/helm.sh/helm/v3/pkg/registry/util.go
+++ b/vendor/helm.sh/helm/v3/pkg/registry/util.go
@@ -32,7 +32,6 @@ import (
"github.com/pkg/errors"
"github.com/sirupsen/logrus"
orascontext "oras.land/oras-go/pkg/context"
- "oras.land/oras-go/pkg/registry"
"helm.sh/helm/v3/internal/tlsutil"
"helm.sh/helm/v3/pkg/chart"
@@ -65,8 +64,7 @@ func GetTagMatchingVersionOrConstraint(tags []string, versionString string) (str
// If string is empty, set wildcard constraint
constraint, _ = semver.NewConstraint("*")
} else {
- // when customer input exact version, check whether have exact match
- // one first
+ // when customer inputs specific version, check whether there's an exact match first
for _, v := range tags {
if versionString == v {
return v, nil
@@ -116,31 +114,6 @@ func ctx(out io.Writer, debug bool) context.Context {
return ctx
}
-// parseReference will parse and validate the reference, and clean tags when
-// applicable tags are only cleaned when plus (+) signs are present, and are
-// converted to underscores (_) before pushing
-// See https://github.com/helm/helm/issues/10166
-func parseReference(raw string) (registry.Reference, error) {
- // The sole possible reference modification is replacing plus (+) signs
- // present in tags with underscores (_). To do this properly, we first
- // need to identify a tag, and then pass it on to the reference parser
- // NOTE: Passing immediately to the reference parser will fail since (+)
- // signs are an invalid tag character, and simply replacing all plus (+)
- // occurrences could invalidate other portions of the URI
- parts := strings.Split(raw, ":")
- if len(parts) > 1 && !strings.Contains(parts[len(parts)-1], "/") {
- tag := parts[len(parts)-1]
-
- if tag != "" {
- // Replace any plus (+) signs with known underscore (_) conversion
- newTag := strings.ReplaceAll(tag, "+", "_")
- raw = strings.ReplaceAll(raw, tag, newTag)
- }
- }
-
- return registry.ParseReference(raw)
-}
-
// NewRegistryClientWithTLS is a helper function to create a new registry client with TLS enabled.
func NewRegistryClientWithTLS(out io.Writer, certFile, keyFile, caFile string, insecureSkipTLSverify bool, registryConfig string, debug bool) (*Client, error) {
tlsConf, err := tlsutil.NewClientTLS(certFile, keyFile, caFile, insecureSkipTLSverify)
@@ -156,6 +129,7 @@ func NewRegistryClientWithTLS(out io.Writer, certFile, keyFile, caFile string, i
ClientOptHTTPClient(&http.Client{
Transport: &http.Transport{
TLSClientConfig: tlsConf,
+ Proxy: http.ProxyFromEnvironment,
},
}),
)
@@ -166,10 +140,10 @@ func NewRegistryClientWithTLS(out io.Writer, certFile, keyFile, caFile string, i
}
// generateOCIAnnotations will generate OCI annotations to include within the OCI manifest
-func generateOCIAnnotations(meta *chart.Metadata, test bool) map[string]string {
+func generateOCIAnnotations(meta *chart.Metadata, creationTime string) map[string]string {
// Get annotations from Chart attributes
- ociAnnotations := generateChartOCIAnnotations(meta, test)
+ ociAnnotations := generateChartOCIAnnotations(meta, creationTime)
// Copy Chart annotations
annotations:
@@ -190,7 +164,7 @@ annotations:
}
// getChartOCIAnnotations will generate OCI annotations from the provided chart
-func generateChartOCIAnnotations(meta *chart.Metadata, test bool) map[string]string {
+func generateChartOCIAnnotations(meta *chart.Metadata, creationTime string) map[string]string {
chartOCIAnnotations := map[string]string{}
chartOCIAnnotations = addToMap(chartOCIAnnotations, ocispec.AnnotationDescription, meta.Description)
@@ -198,15 +172,17 @@ func generateChartOCIAnnotations(meta *chart.Metadata, test bool) map[string]str
chartOCIAnnotations = addToMap(chartOCIAnnotations, ocispec.AnnotationVersion, meta.Version)
chartOCIAnnotations = addToMap(chartOCIAnnotations, ocispec.AnnotationURL, meta.Home)
- if !test {
- chartOCIAnnotations = addToMap(chartOCIAnnotations, ocispec.AnnotationCreated, helmtime.Now().UTC().Format(time.RFC3339))
+ if len(creationTime) == 0 {
+ creationTime = helmtime.Now().UTC().Format(time.RFC3339)
}
+ chartOCIAnnotations = addToMap(chartOCIAnnotations, ocispec.AnnotationCreated, creationTime)
+
if len(meta.Sources) > 0 {
chartOCIAnnotations = addToMap(chartOCIAnnotations, ocispec.AnnotationSource, meta.Sources[0])
}
- if meta.Maintainers != nil && len(meta.Maintainers) > 0 {
+ if len(meta.Maintainers) > 0 {
var maintainerSb strings.Builder
for maintainerIdx, maintainer := range meta.Maintainers {
diff --git a/vendor/helm.sh/helm/v3/pkg/release/mock.go b/vendor/helm.sh/helm/v3/pkg/release/mock.go
index a28e1dc166f..eb0b5157df0 100644
--- a/vendor/helm.sh/helm/v3/pkg/release/mock.go
+++ b/vendor/helm.sh/helm/v3/pkg/release/mock.go
@@ -74,6 +74,24 @@ func Mock(opts *MockReleaseOptions) *Release {
Name: "foo",
Version: "0.1.0-beta.1",
AppVersion: "1.0",
+ Annotations: map[string]string{
+ "category": "web-apps",
+ "supported": "true",
+ },
+ Dependencies: []*chart.Dependency{
+ {
+ Name: "cool-plugin",
+ Version: "1.0.0",
+ Repository: "https://coolplugin.io/charts",
+ Condition: "coolPlugin.enabled",
+ Enabled: true,
+ },
+ {
+ Name: "crds",
+ Version: "2.7.1",
+ Condition: "crds.enabled",
+ },
+ },
},
Templates: []*chart.File{
{Name: "templates/foo.tpl", Data: []byte(MockManifest)},
diff --git a/vendor/helm.sh/helm/v3/pkg/release/status.go b/vendor/helm.sh/helm/v3/pkg/release/status.go
index e0e3ed62a93..edd27a5f140 100644
--- a/vendor/helm.sh/helm/v3/pkg/release/status.go
+++ b/vendor/helm.sh/helm/v3/pkg/release/status.go
@@ -31,13 +31,13 @@ const (
StatusSuperseded Status = "superseded"
// StatusFailed indicates that the release was not successfully deployed.
StatusFailed Status = "failed"
- // StatusUninstalling indicates that a uninstall operation is underway.
+ // StatusUninstalling indicates that an uninstall operation is underway.
StatusUninstalling Status = "uninstalling"
// StatusPendingInstall indicates that an install operation is underway.
StatusPendingInstall Status = "pending-install"
// StatusPendingUpgrade indicates that an upgrade operation is underway.
StatusPendingUpgrade Status = "pending-upgrade"
- // StatusPendingRollback indicates that an rollback operation is underway.
+ // StatusPendingRollback indicates that a rollback operation is underway.
StatusPendingRollback Status = "pending-rollback"
)
diff --git a/vendor/helm.sh/helm/v3/pkg/releaseutil/manifest_sorter.go b/vendor/helm.sh/helm/v3/pkg/releaseutil/manifest_sorter.go
index 413de30e2de..4b6109929d7 100644
--- a/vendor/helm.sh/helm/v3/pkg/releaseutil/manifest_sorter.go
+++ b/vendor/helm.sh/helm/v3/pkg/releaseutil/manifest_sorter.go
@@ -41,7 +41,6 @@ type Manifest struct {
type manifestFile struct {
entries map[string]string
path string
- apis chartutil.VersionSet
}
// result is an intermediate structure used during sorting.
@@ -75,7 +74,7 @@ var events = map[string]release.HookEvent{
//
// Files that do not parse into the expected format are simply placed into a map and
// returned.
-func SortManifests(files map[string]string, apis chartutil.VersionSet, ordering KindSortOrder) ([]*release.Hook, []Manifest, error) {
+func SortManifests(files map[string]string, _ chartutil.VersionSet, ordering KindSortOrder) ([]*release.Hook, []Manifest, error) {
result := &result{}
var sortedFilePaths []string
@@ -100,7 +99,6 @@ func SortManifests(files map[string]string, apis chartutil.VersionSet, ordering
manifestFile := &manifestFile{
entries: SplitManifests(content),
path: filePath,
- apis: apis,
}
if err := manifestFile.sort(result); err != nil {
diff --git a/vendor/helm.sh/helm/v3/pkg/repo/chartrepo.go b/vendor/helm.sh/helm/v3/pkg/repo/chartrepo.go
index d9022ee6e17..970e96da2d0 100644
--- a/vendor/helm.sh/helm/v3/pkg/repo/chartrepo.go
+++ b/vendor/helm.sh/helm/v3/pkg/repo/chartrepo.go
@@ -96,7 +96,7 @@ func (r *ChartRepository) Load() error {
// FIXME: Why are we recursively walking directories?
// FIXME: Why are we not reading the repositories.yaml to figure out
// what repos to use?
- filepath.Walk(r.Config.Name, func(path string, f os.FileInfo, err error) error {
+ filepath.Walk(r.Config.Name, func(path string, f os.FileInfo, _ error) error {
if !f.IsDir() {
if strings.Contains(f.Name(), "-index.yaml") {
i, err := LoadIndexFile(path)
diff --git a/vendor/helm.sh/helm/v3/pkg/repo/index.go b/vendor/helm.sh/helm/v3/pkg/repo/index.go
index 40b11c5cf28..e1ce3c62dd2 100644
--- a/vendor/helm.sh/helm/v3/pkg/repo/index.go
+++ b/vendor/helm.sh/helm/v3/pkg/repo/index.go
@@ -200,7 +200,7 @@ func (i IndexFile) Get(name, version string) (*ChartVersion, error) {
}
}
- // when customer input exact version, check whether have exact match one first
+ // when customer inputs specific version, check whether there's an exact match first
if len(version) != 0 {
for _, ver := range vs {
if version == ver.Version {
@@ -371,6 +371,8 @@ func loadIndex(data []byte, source string) (*IndexFile, error) {
cvs = append(cvs[:idx], cvs[idx+1:]...)
}
}
+ // adjust slice to only contain a set of valid versions
+ i.Entries[name] = cvs
}
i.SortEntries()
if i.APIVersion == "" {
@@ -397,7 +399,7 @@ func jsonOrYamlUnmarshal(b []byte, i interface{}) error {
// the error isn't important for index loading
//
// In particular, charts may introduce validations that don't impact repository indexes
-// And repository indexes may be generated by older/non-complient software, which doesn't
+// And repository indexes may be generated by older/non-compliant software, which doesn't
// conform to all validations.
func ignoreSkippableChartValidationError(err error) error {
verr, ok := err.(chart.ValidationError)
diff --git a/vendor/helm.sh/helm/v3/pkg/storage/driver/cfgmaps.go b/vendor/helm.sh/helm/v3/pkg/storage/driver/cfgmaps.go
index 5fd64ea59c7..ce88c662b0f 100644
--- a/vendor/helm.sh/helm/v3/pkg/storage/driver/cfgmaps.go
+++ b/vendor/helm.sh/helm/v3/pkg/storage/driver/cfgmaps.go
@@ -18,6 +18,7 @@ package driver // import "helm.sh/helm/v3/pkg/storage/driver"
import (
"context"
+ "fmt"
"strconv"
"strings"
"time"
@@ -160,7 +161,7 @@ func (cfgmaps *ConfigMaps) Create(key string, rls *rspb.Release) error {
lbs.init()
lbs.fromMap(rls.Labels)
- lbs.set("createdAt", strconv.Itoa(int(time.Now().Unix())))
+ lbs.set("createdAt", fmt.Sprintf("%v", time.Now().Unix()))
// create a new configmap to hold the release
obj, err := newConfigMapsObject(key, rls, lbs)
@@ -188,7 +189,7 @@ func (cfgmaps *ConfigMaps) Update(key string, rls *rspb.Release) error {
lbs.init()
lbs.fromMap(rls.Labels)
- lbs.set("modifiedAt", strconv.Itoa(int(time.Now().Unix())))
+ lbs.set("modifiedAt", fmt.Sprintf("%v", time.Now().Unix()))
// create a new configmap object to hold the release
obj, err := newConfigMapsObject(key, rls, lbs)
diff --git a/vendor/helm.sh/helm/v3/pkg/storage/driver/secrets.go b/vendor/helm.sh/helm/v3/pkg/storage/driver/secrets.go
index 9c2f805f248..95a7e903245 100644
--- a/vendor/helm.sh/helm/v3/pkg/storage/driver/secrets.go
+++ b/vendor/helm.sh/helm/v3/pkg/storage/driver/secrets.go
@@ -18,6 +18,7 @@ package driver // import "helm.sh/helm/v3/pkg/storage/driver"
import (
"context"
+ "fmt"
"strconv"
"strings"
"time"
@@ -151,7 +152,7 @@ func (secrets *Secrets) Create(key string, rls *rspb.Release) error {
lbs.init()
lbs.fromMap(rls.Labels)
- lbs.set("createdAt", strconv.Itoa(int(time.Now().Unix())))
+ lbs.set("createdAt", fmt.Sprintf("%v", time.Now().Unix()))
// create a new secret to hold the release
obj, err := newSecretsObject(key, rls, lbs)
@@ -177,7 +178,7 @@ func (secrets *Secrets) Update(key string, rls *rspb.Release) error {
lbs.init()
lbs.fromMap(rls.Labels)
- lbs.set("modifiedAt", strconv.Itoa(int(time.Now().Unix())))
+ lbs.set("modifiedAt", fmt.Sprintf("%v", time.Now().Unix()))
// create a new secret object to hold the release
obj, err := newSecretsObject(key, rls, lbs)
diff --git a/vendor/helm.sh/helm/v3/pkg/storage/driver/sql.go b/vendor/helm.sh/helm/v3/pkg/storage/driver/sql.go
index 8f5714f1511..33bde9b6a49 100644
--- a/vendor/helm.sh/helm/v3/pkg/storage/driver/sql.go
+++ b/vendor/helm.sh/helm/v3/pkg/storage/driver/sql.go
@@ -72,8 +72,8 @@ const (
// Following limits based on k8s labels limits - https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/#syntax-and-character-set
const (
- sqlCustomLabelsTableKeyMaxLenght = 253 + 1 + 63
- sqlCustomLabelsTableValueMaxLenght = 63
+ sqlCustomLabelsTableKeyMaxLength = 253 + 1 + 63
+ sqlCustomLabelsTableValueMaxLength = 63
)
const (
@@ -98,9 +98,9 @@ func (s *SQL) Name() string {
// Check if all migrations al
func (s *SQL) checkAlreadyApplied(migrations []*migrate.Migration) bool {
// make map (set) of ids for fast search
- migrationsIds := make(map[string]struct{})
+ migrationsIDs := make(map[string]struct{})
for _, migration := range migrations {
- migrationsIds[migration.Id] = struct{}{}
+ migrationsIDs[migration.Id] = struct{}{}
}
// get list of applied migrations
@@ -113,15 +113,15 @@ func (s *SQL) checkAlreadyApplied(migrations []*migrate.Migration) bool {
}
for _, record := range records {
- if _, ok := migrationsIds[record.Id]; ok {
+ if _, ok := migrationsIDs[record.Id]; ok {
s.Log("checkAlreadyApplied: found previous migration (Id: %v) applied at %v", record.Id, record.AppliedAt)
- delete(migrationsIds, record.Id)
+ delete(migrationsIDs, record.Id)
}
}
- // check if all migrations appliyed
- if len(migrationsIds) != 0 {
- for id := range migrationsIds {
+ // check if all migrations applied
+ if len(migrationsIDs) != 0 {
+ for id := range migrationsIDs {
s.Log("checkAlreadyApplied: find unapplied migration (id: %v)", id)
}
return false
@@ -204,7 +204,7 @@ func (s *SQL) ensureDBSetup() error {
CREATE TABLE %s (
%s VARCHAR(64),
%s VARCHAR(67),
- %s VARCHAR(%d),
+ %s VARCHAR(%d),
%s VARCHAR(%d)
);
CREATE INDEX ON %s (%s, %s);
@@ -216,9 +216,9 @@ func (s *SQL) ensureDBSetup() error {
sqlCustomLabelsTableReleaseKeyColumn,
sqlCustomLabelsTableReleaseNamespaceColumn,
sqlCustomLabelsTableKeyColumn,
- sqlCustomLabelsTableKeyMaxLenght,
+ sqlCustomLabelsTableKeyMaxLength,
sqlCustomLabelsTableValueColumn,
- sqlCustomLabelsTableValueMaxLenght,
+ sqlCustomLabelsTableValueMaxLength,
sqlCustomLabelsTableName,
sqlCustomLabelsTableReleaseKeyColumn,
sqlCustomLabelsTableReleaseNamespaceColumn,
diff --git a/vendor/helm.sh/helm/v3/pkg/storage/storage.go b/vendor/helm.sh/helm/v3/pkg/storage/storage.go
index 0a18b34a0fa..0da0688fd60 100644
--- a/vendor/helm.sh/helm/v3/pkg/storage/storage.go
+++ b/vendor/helm.sh/helm/v3/pkg/storage/storage.go
@@ -111,7 +111,7 @@ func (s *Storage) ListDeployed() ([]*rspb.Release, error) {
}
// Deployed returns the last deployed release with the provided release name, or
-// returns ErrReleaseNotFound if not found.
+// returns driver.NewErrNoDeployedReleases if not found.
func (s *Storage) Deployed(name string) (*rspb.Release, error) {
ls, err := s.DeployedAll(name)
if err != nil {
@@ -130,7 +130,7 @@ func (s *Storage) Deployed(name string) (*rspb.Release, error) {
}
// DeployedAll returns all deployed releases with the provided name, or
-// returns ErrReleaseNotFound if not found.
+// returns driver.NewErrNoDeployedReleases if not found.
func (s *Storage) DeployedAll(name string) ([]*rspb.Release, error) {
s.Log("getting deployed releases from %q history", name)
@@ -149,7 +149,7 @@ func (s *Storage) DeployedAll(name string) ([]*rspb.Release, error) {
}
// History returns the revision history for the release with the provided name, or
-// returns ErrReleaseNotFound if no such release name exists.
+// returns driver.ErrReleaseNotFound if no such release name exists.
func (s *Storage) History(name string) ([]*rspb.Release, error) {
s.Log("getting release history for %q", name)
diff --git a/vendor/helm.sh/helm/v3/pkg/strvals/parser.go b/vendor/helm.sh/helm/v3/pkg/strvals/parser.go
index 2828f20c089..a0e8d66d15f 100644
--- a/vendor/helm.sh/helm/v3/pkg/strvals/parser.go
+++ b/vendor/helm.sh/helm/v3/pkg/strvals/parser.go
@@ -436,7 +436,7 @@ func (t *parser) listItem(list []interface{}, i, nestedNameLevel int) ([]interfa
// check for an empty value
// read and consume optional spaces until comma or EOF (empty val) or any other char (not empty val)
-// comma and spaces are consumed, while any other char is not cosumed
+// comma and spaces are consumed, while any other char is not consumed
func (t *parser) emptyVal() (bool, error) {
for {
r, _, e := t.sc.ReadRune()
diff --git a/vendor/helm.sh/helm/v3/pkg/time/ctime/ctime.go b/vendor/helm.sh/helm/v3/pkg/time/ctime/ctime.go
new file mode 100644
index 00000000000..63a41c0bf41
--- /dev/null
+++ b/vendor/helm.sh/helm/v3/pkg/time/ctime/ctime.go
@@ -0,0 +1,29 @@
+/*
+Copyright The Helm Authors.
+
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+*/
+package ctime
+
+import (
+ "os"
+ "time"
+)
+
+func Created(fi os.FileInfo) time.Time {
+ return modified(fi)
+}
+
+func Modified(fi os.FileInfo) time.Time {
+ return modified(fi)
+}
diff --git a/vendor/helm.sh/helm/v3/pkg/time/ctime/ctime_linux.go b/vendor/helm.sh/helm/v3/pkg/time/ctime/ctime_linux.go
new file mode 100644
index 00000000000..d8a6ea1a17a
--- /dev/null
+++ b/vendor/helm.sh/helm/v3/pkg/time/ctime/ctime_linux.go
@@ -0,0 +1,30 @@
+//go:build linux
+
+/*
+Copyright The Helm Authors.
+
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+*/
+package ctime
+
+import (
+ "os"
+ "syscall"
+ "time"
+)
+
+func modified(fi os.FileInfo) time.Time {
+ st := fi.Sys().(*syscall.Stat_t)
+ //nolint
+ return time.Unix(int64(st.Mtim.Sec), int64(st.Mtim.Nsec))
+}
diff --git a/vendor/helm.sh/helm/v3/pkg/time/ctime/ctime_other.go b/vendor/helm.sh/helm/v3/pkg/time/ctime/ctime_other.go
new file mode 100644
index 00000000000..12afc6df2eb
--- /dev/null
+++ b/vendor/helm.sh/helm/v3/pkg/time/ctime/ctime_other.go
@@ -0,0 +1,27 @@
+//go:build !linux
+
+/*
+Copyright The Helm Authors.
+
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+*/
+package ctime
+
+import (
+ "os"
+ "time"
+)
+
+func modified(fi os.FileInfo) time.Time {
+ return fi.ModTime()
+}
diff --git a/vendor/helm.sh/helm/v3/pkg/time/time.go b/vendor/helm.sh/helm/v3/pkg/time/time.go
index 44f3fedfb2e..1abe8ae3d86 100644
--- a/vendor/helm.sh/helm/v3/pkg/time/time.go
+++ b/vendor/helm.sh/helm/v3/pkg/time/time.go
@@ -15,7 +15,7 @@ limitations under the License.
*/
// Package time contains a wrapper for time.Time in the standard library and
-// associated methods. This package mainly exists to workaround an issue in Go
+// associated methods. This package mainly exists to work around an issue in Go
// where the serializer doesn't omit an empty value for time:
// https://github.com/golang/go/issues/11939. As such, this can be removed if a
// proposal is ever accepted for Go
diff --git a/vendor/k8s.io/client-go/util/retry/OWNERS b/vendor/k8s.io/client-go/util/retry/OWNERS
new file mode 100644
index 00000000000..75736b5aace
--- /dev/null
+++ b/vendor/k8s.io/client-go/util/retry/OWNERS
@@ -0,0 +1,4 @@
+# See the OWNERS docs at https://go.k8s.io/owners
+
+reviewers:
+ - caesarxuchao
diff --git a/vendor/k8s.io/client-go/util/retry/util.go b/vendor/k8s.io/client-go/util/retry/util.go
new file mode 100644
index 00000000000..0c6e504a6dc
--- /dev/null
+++ b/vendor/k8s.io/client-go/util/retry/util.go
@@ -0,0 +1,105 @@
+/*
+Copyright 2016 The Kubernetes Authors.
+
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+*/
+
+package retry
+
+import (
+ "time"
+
+ "k8s.io/apimachinery/pkg/api/errors"
+ "k8s.io/apimachinery/pkg/util/wait"
+)
+
+// DefaultRetry is the recommended retry for a conflict where multiple clients
+// are making changes to the same resource.
+var DefaultRetry = wait.Backoff{
+ Steps: 5,
+ Duration: 10 * time.Millisecond,
+ Factor: 1.0,
+ Jitter: 0.1,
+}
+
+// DefaultBackoff is the recommended backoff for a conflict where a client
+// may be attempting to make an unrelated modification to a resource under
+// active management by one or more controllers.
+var DefaultBackoff = wait.Backoff{
+ Steps: 4,
+ Duration: 10 * time.Millisecond,
+ Factor: 5.0,
+ Jitter: 0.1,
+}
+
+// OnError allows the caller to retry fn in case the error returned by fn is retriable
+// according to the provided function. backoff defines the maximum retries and the wait
+// interval between two retries.
+func OnError(backoff wait.Backoff, retriable func(error) bool, fn func() error) error {
+ var lastErr error
+ err := wait.ExponentialBackoff(backoff, func() (bool, error) {
+ err := fn()
+ switch {
+ case err == nil:
+ return true, nil
+ case retriable(err):
+ lastErr = err
+ return false, nil
+ default:
+ return false, err
+ }
+ })
+ if err == wait.ErrWaitTimeout {
+ err = lastErr
+ }
+ return err
+}
+
+// RetryOnConflict is used to make an update to a resource when you have to worry about
+// conflicts caused by other code making unrelated updates to the resource at the same
+// time. fn should fetch the resource to be modified, make appropriate changes to it, try
+// to update it, and return (unmodified) the error from the update function. On a
+// successful update, RetryOnConflict will return nil. If the update function returns a
+// "Conflict" error, RetryOnConflict will wait some amount of time as described by
+// backoff, and then try again. On a non-"Conflict" error, or if it retries too many times
+// and gives up, RetryOnConflict will return an error to the caller.
+//
+// err := retry.RetryOnConflict(retry.DefaultRetry, func() error {
+// // Fetch the resource here; you need to refetch it on every try, since
+// // if you got a conflict on the last update attempt then you need to get
+// // the current version before making your own changes.
+// pod, err := c.Pods("mynamespace").Get(name, metav1.GetOptions{})
+// if err != nil {
+// return err
+// }
+//
+// // Make whatever updates to the resource are needed
+// pod.Status.Phase = v1.PodFailed
+//
+// // Try to update
+// _, err = c.Pods("mynamespace").UpdateStatus(pod)
+// // You have to return err itself here (not wrapped inside another error)
+// // so that RetryOnConflict can identify it correctly.
+// return err
+// })
+// if err != nil {
+// // May be conflict if max retries were hit, or may be something unrelated
+// // like permissions or a network error
+// return err
+// }
+// ...
+//
+// TODO: Make Backoff an interface?
+func RetryOnConflict(backoff wait.Backoff, fn func() error) error {
+ return OnError(backoff, errors.IsConflict, fn)
+}
diff --git a/vendor/k8s.io/kubectl/pkg/cmd/util/helpers.go b/vendor/k8s.io/kubectl/pkg/cmd/util/helpers.go
index bd291a8c916..653aa78409b 100644
--- a/vendor/k8s.io/kubectl/pkg/cmd/util/helpers.go
+++ b/vendor/k8s.io/kubectl/pkg/cmd/util/helpers.go
@@ -243,7 +243,7 @@ func statusCausesToAggrError(scs []metav1.StatusCause) utilerrors.Aggregate {
// commands.
func StandardErrorMessage(err error) (string, bool) {
if debugErr, ok := err.(debugError); ok {
- klog.V(4).Infof(debugErr.DebugError())
+ klog.V(4).Info(debugErr.DebugError())
}
status, isStatus := err.(apierrors.APIStatus)
switch {
@@ -430,7 +430,8 @@ const (
OpenAPIV3Patch FeatureGate = "KUBECTL_OPENAPIV3_PATCH"
RemoteCommandWebsockets FeatureGate = "KUBECTL_REMOTE_COMMAND_WEBSOCKETS"
PortForwardWebsockets FeatureGate = "KUBECTL_PORT_FORWARD_WEBSOCKETS"
- DebugCustomProfile FeatureGate = "KUBECTL_DEBUG_CUSTOM_PROFILE"
+ // DebugCustomProfile should be dropped in 1.34
+ DebugCustomProfile FeatureGate = "KUBECTL_DEBUG_CUSTOM_PROFILE"
)
// IsEnabled returns true iff environment variable is set to true.
@@ -451,10 +452,7 @@ func AddValidateFlags(cmd *cobra.Command) {
cmd.Flags().String(
"validate",
"strict",
- `Must be one of: strict (or true), warn, ignore (or false).
- "true" or "strict" will use a schema to validate the input and fail the request if invalid. It will perform server side validation if ServerSideFieldValidation is enabled on the api-server, but will fall back to less reliable client-side validation if not.
- "warn" will warn about unknown or duplicate fields without blocking the request if server-side field validation is enabled on the API server, and behave as "ignore" otherwise.
- "false" or "ignore" will not perform any schema validation, silently dropping any unknown or duplicate fields.`,
+ `Must be one of: strict (or true), warn, ignore (or false). "true" or "strict" will use a schema to validate the input and fail the request if invalid. It will perform server side validation if ServerSideFieldValidation is enabled on the api-server, but will fall back to less reliable client-side validation if not. "warn" will warn about unknown or duplicate fields without blocking the request if server-side field validation is enabled on the API server, and behave as "ignore" otherwise. "false" or "ignore" will not perform any schema validation, silently dropping any unknown or duplicate fields.`,
)
cmd.Flags().Lookup("validate").NoOptDefVal = "strict"
@@ -539,10 +537,11 @@ func AddPruningFlags(cmd *cobra.Command, prune *bool, pruneAllowlist *[]string,
}
}
-func AddSubresourceFlags(cmd *cobra.Command, subresource *string, usage string, allowedSubresources ...string) {
- cmd.Flags().StringVar(subresource, "subresource", "", fmt.Sprintf("%s Must be one of %v. This flag is beta and may change in the future.", usage, allowedSubresources))
+func AddSubresourceFlags(cmd *cobra.Command, subresource *string, usage string) {
+ cmd.Flags().StringVar(subresource, "subresource", "", fmt.Sprintf("%s This flag is beta and may change in the future.", usage))
CheckErr(cmd.RegisterFlagCompletionFunc("subresource", func(*cobra.Command, []string, string) ([]string, cobra.ShellCompDirective) {
- return allowedSubresources, cobra.ShellCompDirectiveNoFileComp
+ var commonSubresources = []string{"status", "scale", "resize"}
+ return commonSubresources, cobra.ShellCompDirectiveNoFileComp
}))
}
diff --git a/vendor/k8s.io/kubectl/pkg/util/i18n/translations/README.md b/vendor/k8s.io/kubectl/pkg/util/i18n/translations/README.md
index 6318ffe6277..a97180466a2 100644
--- a/vendor/k8s.io/kubectl/pkg/util/i18n/translations/README.md
+++ b/vendor/k8s.io/kubectl/pkg/util/i18n/translations/README.md
@@ -72,7 +72,7 @@ import pkg/i18n
translated := i18n.T("Your message in english here")
// Get a translated plural string
-translated := i18n.T("You had % items", items)
+translated := i18n.T("You had %d items", items)
// Translated error
return i18n.Error("Something bad happened")
diff --git a/vendor/k8s.io/kubectl/pkg/util/templates/help_flags_printer.go b/vendor/k8s.io/kubectl/pkg/util/templates/help_flags_printer.go
index fdfdf08eeb1..b7e1bf00f8c 100644
--- a/vendor/k8s.io/kubectl/pkg/util/templates/help_flags_printer.go
+++ b/vendor/k8s.io/kubectl/pkg/util/templates/help_flags_printer.go
@@ -62,7 +62,7 @@ func (p *HelpFlagPrinter) PrintHelpFlag(flag *flag.Flag) {
}
appendTabStr := strings.ReplaceAll(wrappedStr, "\n", "\n\t")
- fmt.Fprintf(p.out, appendTabStr+"\n\n")
+ fmt.Fprint(p.out, appendTabStr+"\n\n")
}
// writeFlag will output the help flag based
diff --git a/vendor/modules.txt b/vendor/modules.txt
index f2ce502775e..dc08800757d 100644
--- a/vendor/modules.txt
+++ b/vendor/modules.txt
@@ -1,7 +1,7 @@
# cel.dev/expr v0.18.0
## explicit; go 1.21.1
cel.dev/expr
-# dario.cat/mergo v1.0.0
+# dario.cat/mergo v1.0.1
## explicit; go 1.13
dario.cat/mergo
# github.com/AdaLogics/go-fuzz-headers v0.0.0-20230811130428-ced1acdcaa24
@@ -11,8 +11,8 @@ github.com/AdaLogics/go-fuzz-headers
## explicit; go 1.16
github.com/Azure/go-ansiterm
github.com/Azure/go-ansiterm/winterm
-# github.com/BurntSushi/toml v1.3.2
-## explicit; go 1.16
+# github.com/BurntSushi/toml v1.4.0
+## explicit; go 1.18
github.com/BurntSushi/toml
github.com/BurntSushi/toml/internal
# github.com/MakeNowJust/heredoc v1.0.0
@@ -24,25 +24,22 @@ github.com/Masterminds/goutils
# github.com/Masterminds/semver v1.5.0
## explicit
github.com/Masterminds/semver
-# github.com/Masterminds/semver/v3 v3.2.1
-## explicit; go 1.18
+# github.com/Masterminds/semver/v3 v3.3.0
+## explicit; go 1.21
github.com/Masterminds/semver/v3
-# github.com/Masterminds/sprig/v3 v3.2.3
-## explicit; go 1.13
+# github.com/Masterminds/sprig/v3 v3.3.0
+## explicit; go 1.21
github.com/Masterminds/sprig/v3
# github.com/Masterminds/squirrel v1.5.4
## explicit; go 1.14
github.com/Masterminds/squirrel
-# github.com/Microsoft/go-winio v0.6.1
-## explicit; go 1.17
+# github.com/Microsoft/go-winio v0.6.2
+## explicit; go 1.21
github.com/Microsoft/go-winio
github.com/Microsoft/go-winio/internal/fs
github.com/Microsoft/go-winio/internal/socket
github.com/Microsoft/go-winio/internal/stringbuffer
github.com/Microsoft/go-winio/pkg/guid
-# github.com/Microsoft/hcsshim v0.11.4
-## explicit; go 1.18
-github.com/Microsoft/hcsshim/osversion
# github.com/ProtonMail/go-crypto v0.0.0-20230828082145-3c4c8a2d2371
## explicit; go 1.13
github.com/ProtonMail/go-crypto/bitcurves
@@ -66,8 +63,8 @@ github.com/ProtonMail/go-crypto/openpgp/s2k
# github.com/antlr4-go/antlr/v4 v4.13.0
## explicit; go 1.20
github.com/antlr4-go/antlr/v4
-# github.com/asaskevich/govalidator v0.0.0-20200428143746-21a406dcc535
-## explicit; go 1.12
+# github.com/asaskevich/govalidator v0.0.0-20230301143203-a9d515a09cc2
+## explicit; go 1.13
github.com/asaskevich/govalidator
# github.com/beorn7/perks v1.0.1
## explicit; go 1.11
@@ -114,8 +111,8 @@ github.com/cloudflare/circl/math/mlsbset
github.com/cloudflare/circl/sign
github.com/cloudflare/circl/sign/ed25519
github.com/cloudflare/circl/sign/ed448
-# github.com/containerd/containerd v1.7.13
-## explicit; go 1.19
+# github.com/containerd/containerd v1.7.24
+## explicit; go 1.21
github.com/containerd/containerd/archive/compression
github.com/containerd/containerd/content
github.com/containerd/containerd/content/local
@@ -125,9 +122,7 @@ github.com/containerd/containerd/images
github.com/containerd/containerd/labels
github.com/containerd/containerd/log
github.com/containerd/containerd/pkg/randutil
-github.com/containerd/containerd/platforms
github.com/containerd/containerd/reference
-github.com/containerd/containerd/reference/docker
github.com/containerd/containerd/remotes
github.com/containerd/containerd/remotes/docker
github.com/containerd/containerd/remotes/docker/auth
@@ -135,9 +130,15 @@ github.com/containerd/containerd/remotes/docker/schema1
github.com/containerd/containerd/remotes/errors
github.com/containerd/containerd/tracing
github.com/containerd/containerd/version
+# github.com/containerd/errdefs v0.3.0
+## explicit; go 1.20
+github.com/containerd/errdefs
# github.com/containerd/log v0.1.0
## explicit; go 1.20
github.com/containerd/log
+# github.com/containerd/platforms v0.2.1
+## explicit; go 1.20
+github.com/containerd/platforms
# github.com/coreos/go-oidc v2.2.1+incompatible
## explicit
github.com/coreos/go-oidc
@@ -146,8 +147,8 @@ github.com/coreos/go-oidc
github.com/coreos/pkg/flagutil
github.com/coreos/pkg/health
github.com/coreos/pkg/httputil
-# github.com/cyphar/filepath-securejoin v0.2.4
-## explicit; go 1.13
+# github.com/cyphar/filepath-securejoin v0.3.6
+## explicit; go 1.18
github.com/cyphar/filepath-securejoin
# github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc
## explicit
@@ -189,7 +190,7 @@ github.com/devfile/registry-support/registry-library/library
# github.com/distribution/distribution/v3 v3.0.0-20230511163743-f7717b7855ca
## explicit; go 1.18
github.com/distribution/distribution/v3/reference
-# github.com/distribution/reference v0.5.0
+# github.com/distribution/reference v0.6.0
## explicit; go 1.20
github.com/distribution/reference
# github.com/docker/cli v25.0.1+incompatible
@@ -210,7 +211,7 @@ github.com/docker/distribution/registry/client/auth/challenge
github.com/docker/distribution/registry/client/transport
github.com/docker/distribution/registry/storage/cache
github.com/docker/distribution/registry/storage/cache/memory
-# github.com/docker/docker v25.0.1+incompatible
+# github.com/docker/docker v25.0.6+incompatible
## explicit
github.com/docker/docker/api/types/filters
github.com/docker/docker/api/types/registry
@@ -241,14 +242,14 @@ github.com/emirpasic/gods/lists/arraylist
github.com/emirpasic/gods/trees
github.com/emirpasic/gods/trees/binaryheap
github.com/emirpasic/gods/utils
-# github.com/evanphx/json-patch v5.7.0+incompatible
+# github.com/evanphx/json-patch v5.9.0+incompatible
## explicit
github.com/evanphx/json-patch
# github.com/evanphx/json-patch/v5 v5.6.0
## explicit; go 1.12
github.com/evanphx/json-patch/v5
-# github.com/exponent-io/jsonpath v0.0.0-20151013193312-d6023ce2651d
-## explicit
+# github.com/exponent-io/jsonpath v0.0.0-20210407135951-1de76d718b3f
+## explicit; go 1.15
github.com/exponent-io/jsonpath
# github.com/fatih/color v1.14.1
## explicit; go 1.17
@@ -510,7 +511,7 @@ github.com/helm/chart-testing/v3/pkg/config
github.com/helm/chart-testing/v3/pkg/exec
github.com/helm/chart-testing/v3/pkg/tool
github.com/helm/chart-testing/v3/pkg/util
-# github.com/huandu/xstrings v1.4.0
+# github.com/huandu/xstrings v1.5.0
## explicit; go 1.12
github.com/huandu/xstrings
# github.com/imdario/mergo v0.3.13
@@ -522,7 +523,7 @@ github.com/inconshreveable/mousetrap
# github.com/jbenet/go-context v0.0.0-20150711004518-d14ea06fba99
## explicit
github.com/jbenet/go-context/io
-# github.com/jmoiron/sqlx v1.3.5
+# github.com/jmoiron/sqlx v1.4.0
## explicit; go 1.10
github.com/jmoiron/sqlx
github.com/jmoiron/sqlx/reflectx
@@ -741,8 +742,8 @@ github.com/redhat-certification/chart-verifier/pkg/chartverifier/report
github.com/redhat-certification/chart-verifier/pkg/chartverifier/reportsummary
github.com/redhat-certification/chart-verifier/pkg/chartverifier/verifier
github.com/redhat-certification/chart-verifier/pkg/chartverifier/version
-# github.com/rubenv/sql-migrate v1.5.2
-## explicit; go 1.17
+# github.com/rubenv/sql-migrate v1.7.1
+## explicit; go 1.21
github.com/rubenv/sql-migrate
github.com/rubenv/sql-migrate/sqlparse
# github.com/russross/blackfriday/v2 v2.1.0
@@ -757,8 +758,8 @@ github.com/sagikazarmark/slog-shim
# github.com/sergi/go-diff v1.2.0
## explicit; go 1.12
github.com/sergi/go-diff/diffmatchpatch
-# github.com/shopspring/decimal v1.3.1
-## explicit; go 1.13
+# github.com/shopspring/decimal v1.4.0
+## explicit; go 1.10
github.com/shopspring/decimal
# github.com/sirupsen/logrus v1.9.3
## explicit; go 1.13
@@ -777,7 +778,7 @@ github.com/sourcegraph/conc/panics
github.com/spf13/afero
github.com/spf13/afero/internal/common
github.com/spf13/afero/mem
-# github.com/spf13/cast v1.6.0
+# github.com/spf13/cast v1.7.0
## explicit; go 1.19
github.com/spf13/cast
# github.com/spf13/cobra v1.8.1
@@ -801,9 +802,10 @@ github.com/spf13/viper/internal/features
# github.com/stoewer/go-strcase v1.3.0
## explicit; go 1.11
github.com/stoewer/go-strcase
-# github.com/stretchr/testify v1.9.0
+# github.com/stretchr/testify v1.10.0
## explicit; go 1.17
github.com/stretchr/testify/assert
+github.com/stretchr/testify/assert/yaml
github.com/stretchr/testify/require
# github.com/subosito/gotenv v1.6.0
## explicit; go 1.18
@@ -867,8 +869,8 @@ go.uber.org/zap/internal/exit
go.uber.org/zap/internal/pool
go.uber.org/zap/internal/stacktrace
go.uber.org/zap/zapcore
-# golang.org/x/crypto v0.28.0
-## explicit; go 1.20
+# golang.org/x/crypto v0.36.0
+## explicit; go 1.23.0
golang.org/x/crypto/argon2
golang.org/x/crypto/bcrypt
golang.org/x/crypto/blake2b
@@ -904,8 +906,8 @@ golang.org/x/exp/slog/internal/buffer
# golang.org/x/mod v0.21.0
## explicit; go 1.22.0
golang.org/x/mod/semver
-# golang.org/x/net v0.30.0
-## explicit; go 1.18
+# golang.org/x/net v0.37.0
+## explicit; go 1.23.0
golang.org/x/net/context
golang.org/x/net/html
golang.org/x/net/html/atom
@@ -913,6 +915,7 @@ golang.org/x/net/http/httpguts
golang.org/x/net/http2
golang.org/x/net/http2/hpack
golang.org/x/net/idna
+golang.org/x/net/internal/httpcommon
golang.org/x/net/internal/socks
golang.org/x/net/internal/timeseries
golang.org/x/net/proxy
@@ -922,22 +925,22 @@ golang.org/x/net/websocket
## explicit; go 1.18
golang.org/x/oauth2
golang.org/x/oauth2/internal
-# golang.org/x/sync v0.8.0
-## explicit; go 1.18
+# golang.org/x/sync v0.12.0
+## explicit; go 1.23.0
golang.org/x/sync/errgroup
golang.org/x/sync/semaphore
-# golang.org/x/sys v0.26.0
-## explicit; go 1.18
+# golang.org/x/sys v0.31.0
+## explicit; go 1.23.0
golang.org/x/sys/cpu
golang.org/x/sys/execabs
golang.org/x/sys/plan9
golang.org/x/sys/unix
golang.org/x/sys/windows
-# golang.org/x/term v0.25.0
-## explicit; go 1.18
+# golang.org/x/term v0.30.0
+## explicit; go 1.23.0
golang.org/x/term
-# golang.org/x/text v0.19.0
-## explicit; go 1.18
+# golang.org/x/text v0.23.0
+## explicit; go 1.23.0
golang.org/x/text/encoding
golang.org/x/text/encoding/internal
golang.org/x/text/encoding/internal/identifier
@@ -951,26 +954,6 @@ golang.org/x/text/unicode/norm
# golang.org/x/time v0.7.0
## explicit; go 1.18
golang.org/x/time/rate
-# golang.org/x/tools v0.26.0
-## explicit; go 1.22.0
-golang.org/x/tools/cmd/stringer
-golang.org/x/tools/go/gcexportdata
-golang.org/x/tools/go/packages
-golang.org/x/tools/go/types/objectpath
-golang.org/x/tools/go/types/typeutil
-golang.org/x/tools/internal/aliases
-golang.org/x/tools/internal/event
-golang.org/x/tools/internal/event/core
-golang.org/x/tools/internal/event/keys
-golang.org/x/tools/internal/event/label
-golang.org/x/tools/internal/gcimporter
-golang.org/x/tools/internal/gocommand
-golang.org/x/tools/internal/packagesinternal
-golang.org/x/tools/internal/pkgbits
-golang.org/x/tools/internal/stdlib
-golang.org/x/tools/internal/typeparams
-golang.org/x/tools/internal/typesinternal
-golang.org/x/tools/internal/versions
# google.golang.org/genproto/googleapis/api v0.0.0-20240826202546-f6391c0de4c7
## explicit; go 1.21
google.golang.org/genproto/googleapis/api/expr/v1alpha1
@@ -1096,8 +1079,8 @@ gopkg.in/yaml.v2
# gopkg.in/yaml.v3 v3.0.1
## explicit
gopkg.in/yaml.v3
-# helm.sh/helm/v3 v3.14.4
-## explicit; go 1.21
+# helm.sh/helm/v3 v3.17.3
+## explicit; go 1.23.0
helm.sh/helm/v3/internal/fileutil
helm.sh/helm/v3/internal/resolver
helm.sh/helm/v3/internal/sympath
@@ -1135,6 +1118,7 @@ helm.sh/helm/v3/pkg/storage
helm.sh/helm/v3/pkg/storage/driver
helm.sh/helm/v3/pkg/strvals
helm.sh/helm/v3/pkg/time
+helm.sh/helm/v3/pkg/time/ctime
helm.sh/helm/v3/pkg/uploader
# k8s.io/api v0.32.2
## explicit; go 1.23.0
@@ -1503,6 +1487,7 @@ k8s.io/client-go/util/flowcontrol
k8s.io/client-go/util/homedir
k8s.io/client-go/util/jsonpath
k8s.io/client-go/util/keyutil
+k8s.io/client-go/util/retry
k8s.io/client-go/util/watchlist
k8s.io/client-go/util/workqueue
# k8s.io/component-base v0.32.2
@@ -1535,8 +1520,8 @@ k8s.io/kube-openapi/pkg/spec3
k8s.io/kube-openapi/pkg/util/proto
k8s.io/kube-openapi/pkg/util/proto/validation
k8s.io/kube-openapi/pkg/validation/spec
-# k8s.io/kubectl v0.31.1
-## explicit; go 1.22.0
+# k8s.io/kubectl v0.32.2
+## explicit; go 1.23.0
k8s.io/kubectl/pkg/cmd/util
k8s.io/kubectl/pkg/scheme
k8s.io/kubectl/pkg/util/i18n