diff options
| author | 2025-09-04 15:29:27 +0200 | |
|---|---|---|
| committer | 2025-09-04 15:29:27 +0200 | |
| commit | 78defcd9166a202eb3140dc27afd288e1f9bfec4 (patch) | |
| tree | dfe061abc810096f0141b7f585d38401c099c488 /vendor/github.com/ncruces/go-sqlite3/util/vfsutil/slice.go | |
| parent | [performance] faster request id generation (#4405) (diff) | |
| download | gotosocial-78defcd9166a202eb3140dc27afd288e1f9bfec4.tar.xz | |
[chore] bump dependencies (#4406)
- codeberg.org/gruf/go-ffmpreg: v0.6.9 -> v0.6.10
- github.com/ncruces/go-sqlite3: v0.27.1 -> v0.28.0
- github.com/stretchr/testify: v1.10.0 -> v1.11.1
- github.com/tdewolff/minify/v2 v2.23.11 -> v2.24.2
- go.opentelemetry.io/otel{,/*}: v1.37.0 -> v1.38.0
- go.opentelemetry.io/contrib/*: v0.62.0 -> v0.63.0
Reviewed-on: https://codeberg.org/superseriousbusiness/gotosocial/pulls/4406
Co-authored-by: kim <grufwub@gmail.com>
Co-committed-by: kim <grufwub@gmail.com>
Diffstat (limited to 'vendor/github.com/ncruces/go-sqlite3/util/vfsutil/slice.go')
| -rw-r--r-- | vendor/github.com/ncruces/go-sqlite3/util/vfsutil/slice.go | 102 |
1 files changed, 102 insertions, 0 deletions
diff --git a/vendor/github.com/ncruces/go-sqlite3/util/vfsutil/slice.go b/vendor/github.com/ncruces/go-sqlite3/util/vfsutil/slice.go new file mode 100644 index 000000000..b0fbe993c --- /dev/null +++ b/vendor/github.com/ncruces/go-sqlite3/util/vfsutil/slice.go @@ -0,0 +1,102 @@ +package vfsutil + +import ( + "io" + + "github.com/ncruces/go-sqlite3" + "github.com/ncruces/go-sqlite3/vfs" +) + +// SliceFile implements [vfs.File] with a byte slice. +// It is suitable for temporary files (such as [vfs.OPEN_TEMP_JOURNAL]), +// but not concurrency safe. +type SliceFile []byte + +var ( + // Ensure these interfaces are implemented: + _ vfs.FileSizeHint = &SliceFile{} +) + +// ReadAt implements [io.ReaderAt]. +func (f *SliceFile) ReadAt(b []byte, off int64) (n int, err error) { + if d := *f; off < int64(len(d)) { + n = copy(b, d[off:]) + } + if n < len(b) { + err = io.EOF + } + return +} + +// WriteAt implements [io.WriterAt]. +func (f *SliceFile) WriteAt(b []byte, off int64) (n int, err error) { + d := *f + if off > int64(len(d)) { + d = append(d, make([]byte, off-int64(len(d)))...) + } + d = append(d[:off], b...) + if len(d) > len(*f) { + *f = d + } + return len(b), nil +} + +// Size implements [vfs.File]. +func (f *SliceFile) Size() (int64, error) { + return int64(len(*f)), nil +} + +// Truncate implements [vfs.File]. +func (f *SliceFile) Truncate(size int64) error { + if d := *f; size < int64(len(d)) { + *f = d[:size] + } + return nil +} + +// SizeHint implements [vfs.FileSizeHint]. +func (f *SliceFile) SizeHint(size int64) error { + if d := *f; size > int64(len(d)) { + *f = append(d, make([]byte, size-int64(len(d)))...) + } + return nil +} + +// Close implements [io.Closer]. +func (*SliceFile) Close() error { return nil } + +// Sync implements [vfs.File]. +func (*SliceFile) Sync(flags vfs.SyncFlag) error { return nil } + +// Lock implements [vfs.File]. +func (*SliceFile) Lock(lock vfs.LockLevel) error { + // notest // not concurrency safe + return sqlite3.IOERR_LOCK +} + +// Unlock implements [vfs.File]. +func (*SliceFile) Unlock(lock vfs.LockLevel) error { + // notest // not concurrency safe + return sqlite3.IOERR_UNLOCK +} + +// CheckReservedLock implements [vfs.File]. +func (*SliceFile) CheckReservedLock() (bool, error) { + // notest // not concurrency safe + return false, sqlite3.IOERR_CHECKRESERVEDLOCK +} + +// SectorSize implements [vfs.File]. +func (*SliceFile) SectorSize() int { + // notest // safe default + return 0 +} + +// DeviceCharacteristics implements [vfs.File]. +func (*SliceFile) DeviceCharacteristics() vfs.DeviceCharacteristic { + return vfs.IOCAP_ATOMIC | + vfs.IOCAP_SEQUENTIAL | + vfs.IOCAP_SAFE_APPEND | + vfs.IOCAP_POWERSAFE_OVERWRITE | + vfs.IOCAP_SUBPAGE_READ +} |
