mirror of
https://github.com/kovidgoyal/kitty
synced 2026-07-20 23:44:59 +02:00
Allow Stat() for MMap objects
This commit is contained in:
@@ -9,6 +9,7 @@ import (
|
||||
"errors"
|
||||
"fmt"
|
||||
"io"
|
||||
"io/fs"
|
||||
not_rand "math/rand"
|
||||
"os"
|
||||
"strconv"
|
||||
@@ -63,6 +64,7 @@ type MMap interface {
|
||||
Name() string
|
||||
IsFileSystemBacked() bool
|
||||
FileSystemName() string
|
||||
Stat() (fs.FileInfo, error)
|
||||
}
|
||||
|
||||
type AccessFlags int
|
||||
|
||||
@@ -39,6 +39,10 @@ func file_mmap(f *os.File, size uint64, access AccessFlags, truncate bool, speci
|
||||
return &file_based_mmap{f: f, region: region, special_name: special_name}, nil
|
||||
}
|
||||
|
||||
func (self *file_based_mmap) Stat() (fs.FileInfo, error) {
|
||||
return self.f.Stat()
|
||||
}
|
||||
|
||||
func (self *file_based_mmap) Name() string {
|
||||
if self.special_name != "" {
|
||||
return self.special_name
|
||||
@@ -134,12 +138,18 @@ func Open(name string, size uint64) (MMap, error) {
|
||||
return file_mmap(ans, size, READ, false, name)
|
||||
}
|
||||
|
||||
func ReadWithSizeAndUnlink(name string) ([]byte, error) {
|
||||
func ReadWithSizeAndUnlink(name string, file_callback ...func(*os.File) error) ([]byte, error) {
|
||||
f, err := open(name)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
defer f.Close()
|
||||
defer os.Remove(f.Name())
|
||||
for _, cb := range file_callback {
|
||||
err = cb(f)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
}
|
||||
return read_with_size(f)
|
||||
}
|
||||
|
||||
@@ -86,6 +86,9 @@ func syscall_mmap(f *os.File, size uint64, access AccessFlags, truncate bool) (M
|
||||
func (self *syscall_based_mmap) Name() string {
|
||||
return self.f.Name()
|
||||
}
|
||||
func (self *syscall_based_mmap) Stat() (fs.FileInfo, error) {
|
||||
return self.f.Stat()
|
||||
}
|
||||
|
||||
func (self *syscall_based_mmap) Slice() []byte {
|
||||
return self.region
|
||||
@@ -152,12 +155,18 @@ func Open(name string, size uint64) (MMap, error) {
|
||||
return syscall_mmap(ans, size, READ, false)
|
||||
}
|
||||
|
||||
func ReadWithSizeAndUnlink(name string) ([]byte, error) {
|
||||
func ReadWithSizeAndUnlink(name string, file_callback ...func(*os.File) error) ([]byte, error) {
|
||||
f, err := shm_open(name, os.O_RDONLY, 0)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
defer f.Close()
|
||||
defer shm_unlink(f.Name())
|
||||
for _, cb := range file_callback {
|
||||
err = cb(f)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
}
|
||||
return read_with_size(f)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user