go-judge/envexec/util.go

45 lines
962 B
Go

package envexec
import (
"os"
"github.com/criyle/go-sandbox/runner"
)
func convertStatus(s runner.Status) Status {
switch s {
case runner.StatusNormal:
return StatusAccepted
// case runner.StatusSignalled, runner.StatusNonzeroExitStatus:
// return StatusRuntimeError
case runner.StatusSignalled:
return StatusSignalled
case runner.StatusNonzeroExitStatus:
return StatusNonzeroExitStatus
case runner.StatusMemoryLimitExceeded:
return StatusMemoryLimitExceeded
case runner.StatusTimeLimitExceeded:
return StatusTimeLimitExceeded
case runner.StatusOutputLimitExceeded:
return StatusOutputLimitExceeded
case runner.StatusDisallowedSyscall:
return StatusDangerousSyscall
default:
return StatusInternalError
}
}
func getFdArray(fd []*os.File) []uintptr {
r := make([]uintptr, 0, len(fd))
for _, f := range fd {
r = append(r, f.Fd())
}
return r
}
func closeFiles(files []*os.File) {
for _, f := range files {
f.Close()
}
}