package config import ( "io" "io/fs" "os" "syscall" ) func readRegular(path string, limit int, tooLarge string, check func(fs.FileMode) string) ([]byte, string) { f, err := os.OpenFile(path, os.O_RDONLY|syscall.O_NONBLOCK, 0) if err != nil { return nil, reasonUnreadable } defer f.Close() info, err := f.Stat() if err != nil || !info.Mode().IsRegular() { return nil, reasonUnreadable } if check != nil { if reason := check(info.Mode()); reason != "" { return nil, reason } } if info.Size() > int64(limit) { return nil, tooLarge } data, err := io.ReadAll(io.LimitReader(f, int64(limit)+1)) if err != nil { return nil, reasonUnreadable } if len(data) > limit { return nil, tooLarge } return data, "" }