移除对 macOS 的支持(因为关键的特性做不到)

This commit is contained in:
MeiK 2020-09-07 17:44:41 +08:00
parent 359a2fe2c3
commit 57e6285013
5 changed files with 23 additions and 17 deletions

14
Dockerfile Normal file
View File

@ -0,0 +1,14 @@
FROM ubuntu:18.04
ENV LANG C.UTF-8
# install python3.6
RUN apt update && \
apt install -y software-properties-common && \
add-apt-repository -y ppa:deadsnakes/ppa && \
apt install python3.6
# install rust
RUN apt install -y curl && \
curl https://sh.rustup.rs -sSf | sh -s -- --default-toolchain stable -y
ENV PATH=/root/.cargo/bin:$PATH

View File

@ -0,0 +1,5 @@
# river
## 环境要求
- linux

View File

@ -25,8 +25,8 @@ message JudgeRequest {
} }
JudgeType judge_type = 3; JudgeType judge_type = 3;
string in_data = 4; bytes in_data = 4;
string out_data = 5; bytes out_data = 5;
int32 time_limit = 6; int32 time_limit = 6;
int32 memory_limit = 7; int32 memory_limit = 7;

View File

@ -78,7 +78,7 @@ pub async fn compile(request: &JudgeRequest, path: &Path) -> Result<JudgeRespons
Some(Language::Go) => "main.go", Some(Language::Go) => "main.go",
None => return Err(Error::LanguageNotFound(request.language)), None => return Err(Error::LanguageNotFound(request.language)),
}; };
if let Err(e) = fs::write(path.join(filename), request.code.clone()).await { if let Err(e) = fs::write(path.join(filename), &request.code).await {
return Err(Error::FileWriteError(e)); return Err(Error::FileWriteError(e));
}; };

View File

@ -173,19 +173,6 @@ impl Drop for ExecArgs {
} }
} }
const ITIMER_REAL: libc::c_int = 0;
extern "C" {
#[cfg_attr(
all(target_os = "macos", target_arch = "x86"),
link_name = "setitimer$UNIX2003"
)]
fn setitimer(
which: libc::c_int,
new_value: *const libc::itimerval,
old_value: *mut libc::itimerval,
) -> libc::c_int;
}
fn run(process: Process) { fn run(process: Process) {
// 子进程里崩溃也无法返回,崩溃就直接崩溃了 // 子进程里崩溃也无法返回,崩溃就直接崩溃了
let exec_args = ExecArgs::build(&process.cmd).unwrap(); let exec_args = ExecArgs::build(&process.cmd).unwrap();
@ -225,7 +212,7 @@ fn run(process: Process) {
0o644, 0o644,
); );
// 墙上时钟限制 // 墙上时钟限制
if setitimer(ITIMER_REAL, &rt, ptr::null_mut()) == -1 { if libc::setitimer(libc::ITIMER_REAL, &rt, ptr::null_mut()) == -1 {
eprintln!("setitimer failure!"); eprintln!("setitimer failure!");
eprintln!("{:?}", io::Error::last_os_error().raw_os_error()); eprintln!("{:?}", io::Error::last_os_error().raw_os_error());
panic!("How dare you!"); panic!("How dare you!");