mirror of
https://github.com/criyle/go-sandbox.git
synced 2025-11-04 14:49:53 +08:00
62 lines
1.3 KiB
Go
62 lines
1.3 KiB
Go
package main
|
|
|
|
import (
|
|
"flag"
|
|
"fmt"
|
|
"os"
|
|
|
|
"github.com/criyle/go-sandbox/runner"
|
|
)
|
|
|
|
const (
|
|
pathEnv = "PATH=/usr/local/bin:/usr/bin:/bin"
|
|
)
|
|
|
|
func printUsage() {
|
|
fmt.Fprintf(flag.CommandLine.Output(), "Usage: %s [options] <args>\n", os.Args[0])
|
|
flag.PrintDefaults()
|
|
os.Exit(2)
|
|
}
|
|
|
|
// Status defines uoj/run_program constants
|
|
type Status int
|
|
|
|
// UOJ run_program constants
|
|
const (
|
|
StatusNormal Status = iota // 0
|
|
StatusInvalid // 1
|
|
StatusRE // 2
|
|
StatusMLE // 3
|
|
StatusTLE // 4
|
|
StatusOLE // 5
|
|
StatusBan // 6
|
|
StatusFatal // 7
|
|
)
|
|
|
|
func getStatus(s runner.Status) int {
|
|
switch s {
|
|
case runner.StatusNormal:
|
|
return int(StatusNormal)
|
|
case runner.StatusInvalid:
|
|
return int(StatusInvalid)
|
|
case runner.StatusTimeLimitExceeded:
|
|
return int(StatusTLE)
|
|
case runner.StatusMemoryLimitExceeded:
|
|
return int(StatusMLE)
|
|
case runner.StatusOutputLimitExceeded:
|
|
return int(StatusOLE)
|
|
case runner.StatusDisallowedSyscall:
|
|
return int(StatusBan)
|
|
case runner.StatusSignalled, runner.StatusNonzeroExitStatus:
|
|
return int(StatusRE)
|
|
default:
|
|
return int(StatusFatal)
|
|
}
|
|
}
|
|
|
|
func debug(v ...interface{}) {
|
|
if showDetails {
|
|
fmt.Fprintln(os.Stderr, v...)
|
|
}
|
|
}
|