diff --git a/agent/uiserver/buffered_file.go b/agent/uiserver/buffered_file.go index a956dab16f..f5ebf0cf55 100644 --- a/agent/uiserver/buffered_file.go +++ b/agent/uiserver/buffered_file.go @@ -1,20 +1,31 @@ package uiserver import ( - "io" + "bytes" "io/fs" + "os" + "time" ) // bufferedFile implements fs.File and allows us to modify a file from disk by // writing out the new version into a buffer and then serving file reads from // that. type bufferedFile struct { - buf io.Reader + buf *bytes.Buffer info fs.FileInfo } +var _ fs.FileInfo = (*bufferedFile)(nil) + +func newBufferedFile(buf *bytes.Buffer, info fs.FileInfo) *bufferedFile { + return &bufferedFile{ + buf: buf, + info: info, + } +} + func (b *bufferedFile) Stat() (fs.FileInfo, error) { - return b.info, nil + return b, nil } func (b *bufferedFile) Read(bytes []byte) (int, error) { @@ -25,9 +36,26 @@ func (b *bufferedFile) Close() error { return nil } -func newBufferedFile(buf io.Reader, info fs.FileInfo) *bufferedFile { - return &bufferedFile{ - buf: buf, - info: info, - } +func (b *bufferedFile) Name() string { + return b.info.Name() +} + +func (b *bufferedFile) Size() int64 { + return int64(b.buf.Len()) +} + +func (b *bufferedFile) Mode() os.FileMode { + return b.info.Mode() +} + +func (b *bufferedFile) ModTime() time.Time { + return b.info.ModTime() +} + +func (b *bufferedFile) IsDir() bool { + return false +} + +func (b *bufferedFile) Sys() any { + return nil }