summaryrefslogtreecommitdiff
path: root/vendor/github.com/ncruces/go-sqlite3/internal/util
diff options
context:
space:
mode:
Diffstat (limited to 'vendor/github.com/ncruces/go-sqlite3/internal/util')
-rw-r--r--vendor/github.com/ncruces/go-sqlite3/internal/util/func.go3
-rw-r--r--vendor/github.com/ncruces/go-sqlite3/internal/util/handle.go12
-rw-r--r--vendor/github.com/ncruces/go-sqlite3/internal/util/json.go17
-rw-r--r--vendor/github.com/ncruces/go-sqlite3/internal/util/mem.go85
-rw-r--r--vendor/github.com/ncruces/go-sqlite3/internal/util/mmap_unix.go18
-rw-r--r--vendor/github.com/ncruces/go-sqlite3/internal/util/mmap_windows.go6
6 files changed, 82 insertions, 59 deletions
diff --git a/vendor/github.com/ncruces/go-sqlite3/internal/util/func.go b/vendor/github.com/ncruces/go-sqlite3/internal/util/func.go
index 468ff741c..e705f3181 100644
--- a/vendor/github.com/ncruces/go-sqlite3/internal/util/func.go
+++ b/vendor/github.com/ncruces/go-sqlite3/internal/util/func.go
@@ -7,9 +7,6 @@ import (
"github.com/tetratelabs/wazero/api"
)
-type i32 interface{ ~int32 | ~uint32 }
-type i64 interface{ ~int64 | ~uint64 }
-
type funcVI[T0 i32] func(context.Context, api.Module, T0)
func (fn funcVI[T0]) Call(ctx context.Context, mod api.Module, stack []uint64) {
diff --git a/vendor/github.com/ncruces/go-sqlite3/internal/util/handle.go b/vendor/github.com/ncruces/go-sqlite3/internal/util/handle.go
index e4e338549..f9f39b449 100644
--- a/vendor/github.com/ncruces/go-sqlite3/internal/util/handle.go
+++ b/vendor/github.com/ncruces/go-sqlite3/internal/util/handle.go
@@ -20,7 +20,7 @@ func (s *handleState) CloseNotify(ctx context.Context, exitCode uint32) {
s.holes = 0
}
-func GetHandle(ctx context.Context, id uint32) any {
+func GetHandle(ctx context.Context, id Ptr_t) any {
if id == 0 {
return nil
}
@@ -28,14 +28,14 @@ func GetHandle(ctx context.Context, id uint32) any {
return s.handles[^id]
}
-func DelHandle(ctx context.Context, id uint32) error {
+func DelHandle(ctx context.Context, id Ptr_t) error {
if id == 0 {
return nil
}
s := ctx.Value(moduleKey{}).(*moduleState)
a := s.handles[^id]
s.handles[^id] = nil
- if l := uint32(len(s.handles)); l == ^id {
+ if l := Ptr_t(len(s.handles)); l == ^id {
s.handles = s.handles[:l-1]
} else {
s.holes++
@@ -46,7 +46,7 @@ func DelHandle(ctx context.Context, id uint32) error {
return nil
}
-func AddHandle(ctx context.Context, a any) uint32 {
+func AddHandle(ctx context.Context, a any) Ptr_t {
if a == nil {
panic(NilErr)
}
@@ -59,12 +59,12 @@ func AddHandle(ctx context.Context, a any) uint32 {
if h == nil {
s.holes--
s.handles[id] = a
- return ^uint32(id)
+ return ^Ptr_t(id)
}
}
}
// Add a new slot.
s.handles = append(s.handles, a)
- return -uint32(len(s.handles))
+ return -Ptr_t(len(s.handles))
}
diff --git a/vendor/github.com/ncruces/go-sqlite3/internal/util/json.go b/vendor/github.com/ncruces/go-sqlite3/internal/util/json.go
index 7f6849a42..846237405 100644
--- a/vendor/github.com/ncruces/go-sqlite3/internal/util/json.go
+++ b/vendor/github.com/ncruces/go-sqlite3/internal/util/json.go
@@ -2,6 +2,7 @@ package util
import (
"encoding/json"
+ "math"
"strconv"
"time"
"unsafe"
@@ -20,7 +21,7 @@ func (j JSON) Scan(value any) error {
case int64:
buf = strconv.AppendInt(nil, v, 10)
case float64:
- buf = strconv.AppendFloat(nil, v, 'g', -1, 64)
+ buf = AppendNumber(nil, v)
case time.Time:
buf = append(buf, '"')
buf = v.AppendFormat(buf, time.RFC3339Nano)
@@ -33,3 +34,17 @@ func (j JSON) Scan(value any) error {
return json.Unmarshal(buf, j.Value)
}
+
+func AppendNumber(dst []byte, f float64) []byte {
+ switch {
+ case math.IsNaN(f):
+ dst = append(dst, "null"...)
+ case math.IsInf(f, 1):
+ dst = append(dst, "9.0e999"...)
+ case math.IsInf(f, -1):
+ dst = append(dst, "-9.0e999"...)
+ default:
+ return strconv.AppendFloat(dst, f, 'g', -1, 64)
+ }
+ return dst
+}
diff --git a/vendor/github.com/ncruces/go-sqlite3/internal/util/mem.go b/vendor/github.com/ncruces/go-sqlite3/internal/util/mem.go
index a09523fd1..bfb1a6440 100644
--- a/vendor/github.com/ncruces/go-sqlite3/internal/util/mem.go
+++ b/vendor/github.com/ncruces/go-sqlite3/internal/util/mem.go
@@ -7,110 +7,121 @@ import (
"github.com/tetratelabs/wazero/api"
)
-func View(mod api.Module, ptr uint32, size uint64) []byte {
+const (
+ PtrLen = 4
+ IntLen = 4
+)
+
+type (
+ i8 interface{ ~int8 | ~uint8 }
+ i32 interface{ ~int32 | ~uint32 }
+ i64 interface{ ~int64 | ~uint64 }
+
+ Stk_t = uint64
+ Ptr_t uint32
+ Res_t int32
+)
+
+func View(mod api.Module, ptr Ptr_t, size int64) []byte {
if ptr == 0 {
panic(NilErr)
}
- if size > math.MaxUint32 {
- panic(RangeErr)
- }
if size == 0 {
return nil
}
- buf, ok := mod.Memory().Read(ptr, uint32(size))
+ if uint64(size) > math.MaxUint32 {
+ panic(RangeErr)
+ }
+ buf, ok := mod.Memory().Read(uint32(ptr), uint32(size))
if !ok {
panic(RangeErr)
}
return buf
}
-func ReadUint8(mod api.Module, ptr uint32) uint8 {
+func Read[T i8](mod api.Module, ptr Ptr_t) T {
if ptr == 0 {
panic(NilErr)
}
- v, ok := mod.Memory().ReadByte(ptr)
+ v, ok := mod.Memory().ReadByte(uint32(ptr))
if !ok {
panic(RangeErr)
}
- return v
+ return T(v)
}
-func ReadUint32(mod api.Module, ptr uint32) uint32 {
+func Write[T i8](mod api.Module, ptr Ptr_t, v T) {
if ptr == 0 {
panic(NilErr)
}
- v, ok := mod.Memory().ReadUint32Le(ptr)
+ ok := mod.Memory().WriteByte(uint32(ptr), uint8(v))
if !ok {
panic(RangeErr)
}
- return v
}
-func WriteUint8(mod api.Module, ptr uint32, v uint8) {
+func Read32[T i32](mod api.Module, ptr Ptr_t) T {
if ptr == 0 {
panic(NilErr)
}
- ok := mod.Memory().WriteByte(ptr, v)
+ v, ok := mod.Memory().ReadUint32Le(uint32(ptr))
if !ok {
panic(RangeErr)
}
+ return T(v)
}
-func WriteUint32(mod api.Module, ptr uint32, v uint32) {
+func Write32[T i32](mod api.Module, ptr Ptr_t, v T) {
if ptr == 0 {
panic(NilErr)
}
- ok := mod.Memory().WriteUint32Le(ptr, v)
+ ok := mod.Memory().WriteUint32Le(uint32(ptr), uint32(v))
if !ok {
panic(RangeErr)
}
}
-func ReadUint64(mod api.Module, ptr uint32) uint64 {
+func Read64[T i64](mod api.Module, ptr Ptr_t) T {
if ptr == 0 {
panic(NilErr)
}
- v, ok := mod.Memory().ReadUint64Le(ptr)
+ v, ok := mod.Memory().ReadUint64Le(uint32(ptr))
if !ok {
panic(RangeErr)
}
- return v
+ return T(v)
}
-func WriteUint64(mod api.Module, ptr uint32, v uint64) {
+func Write64[T i64](mod api.Module, ptr Ptr_t, v T) {
if ptr == 0 {
panic(NilErr)
}
- ok := mod.Memory().WriteUint64Le(ptr, v)
+ ok := mod.Memory().WriteUint64Le(uint32(ptr), uint64(v))
if !ok {
panic(RangeErr)
}
}
-func ReadFloat64(mod api.Module, ptr uint32) float64 {
- return math.Float64frombits(ReadUint64(mod, ptr))
+func ReadFloat64(mod api.Module, ptr Ptr_t) float64 {
+ return math.Float64frombits(Read64[uint64](mod, ptr))
}
-func WriteFloat64(mod api.Module, ptr uint32, v float64) {
- WriteUint64(mod, ptr, math.Float64bits(v))
+func WriteFloat64(mod api.Module, ptr Ptr_t, v float64) {
+ Write64(mod, ptr, math.Float64bits(v))
}
-func ReadString(mod api.Module, ptr, maxlen uint32) string {
+func ReadString(mod api.Module, ptr Ptr_t, maxlen int64) string {
if ptr == 0 {
panic(NilErr)
}
- switch maxlen {
- case 0:
+ if maxlen <= 0 {
return ""
- case math.MaxUint32:
- // avoid overflow
- default:
- maxlen = maxlen + 1
}
mem := mod.Memory()
- buf, ok := mem.Read(ptr, maxlen)
+ maxlen = min(maxlen, math.MaxInt32-1) + 1
+ buf, ok := mem.Read(uint32(ptr), uint32(maxlen))
if !ok {
- buf, ok = mem.Read(ptr, mem.Size()-ptr)
+ buf, ok = mem.Read(uint32(ptr), mem.Size()-uint32(ptr))
if !ok {
panic(RangeErr)
}
@@ -122,13 +133,13 @@ func ReadString(mod api.Module, ptr, maxlen uint32) string {
}
}
-func WriteBytes(mod api.Module, ptr uint32, b []byte) {
- buf := View(mod, ptr, uint64(len(b)))
+func WriteBytes(mod api.Module, ptr Ptr_t, b []byte) {
+ buf := View(mod, ptr, int64(len(b)))
copy(buf, b)
}
-func WriteString(mod api.Module, ptr uint32, s string) {
- buf := View(mod, ptr, uint64(len(s)+1))
+func WriteString(mod api.Module, ptr Ptr_t, s string) {
+ buf := View(mod, ptr, int64(len(s))+1)
buf[len(s)] = 0
copy(buf, s)
}
diff --git a/vendor/github.com/ncruces/go-sqlite3/internal/util/mmap_unix.go b/vendor/github.com/ncruces/go-sqlite3/internal/util/mmap_unix.go
index 4ff056666..42a247529 100644
--- a/vendor/github.com/ncruces/go-sqlite3/internal/util/mmap_unix.go
+++ b/vendor/github.com/ncruces/go-sqlite3/internal/util/mmap_unix.go
@@ -25,9 +25,9 @@ func (s *mmapState) new(ctx context.Context, mod api.Module, size int32) *Mapped
// Allocate page aligned memmory.
alloc := mod.ExportedFunction("aligned_alloc")
- stack := [...]uint64{
- uint64(unix.Getpagesize()),
- uint64(size),
+ stack := [...]Stk_t{
+ Stk_t(unix.Getpagesize()),
+ Stk_t(size),
}
if err := alloc.CallWithStack(ctx, stack[:]); err != nil {
panic(err)
@@ -37,20 +37,20 @@ func (s *mmapState) new(ctx context.Context, mod api.Module, size int32) *Mapped
}
// Save the newly allocated region.
- ptr := uint32(stack[0])
- buf := View(mod, ptr, uint64(size))
- res := &MappedRegion{
+ ptr := Ptr_t(stack[0])
+ buf := View(mod, ptr, int64(size))
+ ret := &MappedRegion{
Ptr: ptr,
size: size,
addr: unsafe.Pointer(&buf[0]),
}
- s.regions = append(s.regions, res)
- return res
+ s.regions = append(s.regions, ret)
+ return ret
}
type MappedRegion struct {
addr unsafe.Pointer
- Ptr uint32
+ Ptr Ptr_t
size int32
used bool
}
diff --git a/vendor/github.com/ncruces/go-sqlite3/internal/util/mmap_windows.go b/vendor/github.com/ncruces/go-sqlite3/internal/util/mmap_windows.go
index efff1e733..913a5f733 100644
--- a/vendor/github.com/ncruces/go-sqlite3/internal/util/mmap_windows.go
+++ b/vendor/github.com/ncruces/go-sqlite3/internal/util/mmap_windows.go
@@ -29,13 +29,13 @@ func MapRegion(ctx context.Context, mod api.Module, f *os.File, offset int64, si
return nil, err
}
- res := &MappedRegion{Handle: h, addr: a}
+ ret := &MappedRegion{Handle: h, addr: a}
// SliceHeader, although deprecated, avoids a go vet warning.
- sh := (*reflect.SliceHeader)(unsafe.Pointer(&res.Data))
+ sh := (*reflect.SliceHeader)(unsafe.Pointer(&ret.Data))
sh.Len = int(size)
sh.Cap = int(size)
sh.Data = a
- return res, nil
+ return ret, nil
}
func (r *MappedRegion) Unmap() error {