Files
llgo/runtime/internal/lib/io/fs/fs.go
2025-04-11 16:28:44 +08:00

43 lines
703 B
Go

package fs
import (
"io"
"io/fs"
)
func ReadFile(fsys fs.FS, name string) ([]byte, error) {
if fsys, ok := fsys.(fs.ReadFileFS); ok {
return fsys.ReadFile(name)
}
file, err := fsys.Open(name)
if err != nil {
return nil, err
}
var size int
if info, err := file.Stat(); err == nil {
size64 := info.Size()
if int64(int(size64)) == size64 {
size = int(size64)
}
}
data := make([]byte, 0, size+1)
for {
if len(data) >= cap(data) {
d := append(data[:cap(data)], 0)
data = d[:len(data)]
}
n, err := file.Read(data[len(data):cap(data)])
data = data[:len(data)+n]
if err != nil {
if err == io.EOF {
err = nil
}
file.Close()
return data, err
}
}
}