- ))
- if err != nil {
- state.Ctx.LogE("sp-file", lesp, err, "")
- return
- }
- fi, err := fd.Stat()
- if err != nil {
- state.Ctx.LogE("sp-file", lesp, err, "")
- return
+ )
+ fdAndFullSize, exists := state.fds[pth]
+ if !exists {
+ fd, err := os.Open(pth)
+ if err != nil {
+ state.Ctx.LogE("sp-file", lesp, err, "")
+ return
+ }
+ fi, err := fd.Stat()
+ if err != nil {
+ state.Ctx.LogE("sp-file", lesp, err, "")
+ return
+ }
+ fdAndFullSize = FdAndFullSize{fd: fd, fullSize: fi.Size()}
+ state.fds[pth] = fdAndFullSize