mirror of
https://github.com/kovidgoyal/kitty
synced 2026-07-23 00:38:10 +02:00
Fix ReadWithSizeAndUnlink on systems that have syscall based mmap
This commit is contained in:
@@ -118,6 +118,7 @@ func read_till_buf_full(f *os.File, buf []byte) ([]byte, error) {
|
|||||||
if len(p) == 0 && errors.Is(err, io.EOF) {
|
if len(p) == 0 && errors.Is(err, io.EOF) {
|
||||||
err = nil
|
err = nil
|
||||||
}
|
}
|
||||||
|
err = fmt.Errorf("Failed to read from SHM file with error: %w", err)
|
||||||
return buf[:len(buf)-len(p)], err
|
return buf[:len(buf)-len(p)], err
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -4,6 +4,7 @@
|
|||||||
package shm
|
package shm
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"encoding/binary"
|
||||||
"errors"
|
"errors"
|
||||||
"fmt"
|
"fmt"
|
||||||
"io/fs"
|
"io/fs"
|
||||||
@@ -182,17 +183,19 @@ func Open(name string, size uint64) (MMap, error) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func ReadWithSizeAndUnlink(name string, file_callback ...func(*os.File) error) ([]byte, error) {
|
func ReadWithSizeAndUnlink(name string, file_callback ...func(*os.File) error) ([]byte, error) {
|
||||||
f, err := shm_open(name, os.O_RDONLY, 0)
|
mmap, err := Open(name, 4)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
defer f.Close()
|
size := uint64(binary.BigEndian.Uint32(mmap.Slice()))
|
||||||
defer shm_unlink(f.Name())
|
mmap.Close()
|
||||||
for _, cb := range file_callback {
|
mmap, err = Open(name, 4+size)
|
||||||
err = cb(f)
|
if err != nil {
|
||||||
if err != nil {
|
return nil, err
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
return read_with_size(f)
|
ans := make([]byte, size)
|
||||||
|
copy(ans, mmap.Slice()[4:])
|
||||||
|
mmap.Close()
|
||||||
|
mmap.Unlink()
|
||||||
|
return ans, nil
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user