mirror of
https://github.com/criyle/go-judge.git
synced 2025-11-04 14:50:02 +08:00
envexec: performance improvements for content copyIn
This commit is contained in:
parent
c233f64485
commit
414efbf597
@ -81,7 +81,9 @@ func (e *execServer) FileGet(c context.Context, f *pb.FileID) (*pb.FileContent,
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
defer r.Close()
|
||||
if f, ok := r.(*os.File); ok {
|
||||
defer f.Close()
|
||||
}
|
||||
|
||||
content, err := io.ReadAll(r)
|
||||
if err != nil {
|
||||
|
||||
@ -5,6 +5,7 @@ import (
|
||||
"io"
|
||||
"mime"
|
||||
"net/http"
|
||||
"os"
|
||||
"path"
|
||||
|
||||
"github.com/criyle/go-judge/envexec"
|
||||
@ -72,7 +73,9 @@ func (f *fileHandle) fileIDGet(c *gin.Context) {
|
||||
c.AbortWithError(http.StatusInternalServerError, err)
|
||||
return
|
||||
}
|
||||
defer r.Close()
|
||||
if f, ok := r.(*os.File); ok {
|
||||
defer f.Close()
|
||||
}
|
||||
|
||||
content, err := io.ReadAll(r)
|
||||
if err != nil {
|
||||
|
||||
@ -192,7 +192,9 @@ func FileGet(e *C.char) *C.char {
|
||||
if err != nil {
|
||||
return nil
|
||||
}
|
||||
defer r.Close()
|
||||
if f, ok := r.(*os.File); ok {
|
||||
defer f.Close()
|
||||
}
|
||||
|
||||
c, err := io.ReadAll(r)
|
||||
if err != nil {
|
||||
|
||||
@ -83,14 +83,16 @@ func NewFileOpened(f *os.File) File {
|
||||
return &FileOpened{File: f}
|
||||
}
|
||||
|
||||
// FileToReader get a ReadCloser from underlying file
|
||||
func FileToReader(f File) (io.ReadCloser, error) {
|
||||
// FileToReader get a Reader from underlying file
|
||||
// if the return value is *os.File, the file need to be closed
|
||||
// by caller
|
||||
func FileToReader(f File) (io.Reader, error) {
|
||||
switch f := f.(type) {
|
||||
case *FileOpened:
|
||||
return f.File, nil
|
||||
|
||||
case *FileReader:
|
||||
return io.NopCloser(f.Reader), nil
|
||||
return f.Reader, nil
|
||||
|
||||
case *FileInput:
|
||||
file, err := os.Open(f.Path)
|
||||
|
||||
@ -39,7 +39,9 @@ func copyIn(m Environment, copyIn map[string]File) ([]FileError, error) {
|
||||
if err != nil {
|
||||
return fmt.Errorf("failed to copyIn %v", err)
|
||||
}
|
||||
defer hf.Close()
|
||||
if f, ok := hf.(*os.File); ok {
|
||||
defer f.Close()
|
||||
}
|
||||
|
||||
cf, err := m.Open(n, os.O_CREATE|os.O_WRONLY|os.O_TRUNC, 0777)
|
||||
if err != nil {
|
||||
|
||||
Loading…
Reference in New Issue
Block a user