diff options
author | Kazuki Yamaguchi <k@rhe.jp> | 2016-04-06 00:58:59 +0900 |
---|---|---|
committer | Kazuki Yamaguchi <k@rhe.jp> | 2016-04-06 00:58:59 +0900 |
commit | ad2947fa175a529fb1a3ccc39872fecec5127302 (patch) | |
tree | 17c48ea47691a1a603c3a16b667cac6e7a446158 | |
parent | 28602c83ac43224b555157739842bd9167fb67b8 (diff) | |
download | poe-ad2947fa175a529fb1a3ccc39872fecec5127302.tar.gz |
sandbox: マイクロ秒ほどの精度はない(どうせ同時に動くので)のでミリ秒にきりかえ
-rw-r--r-- | backend/src/run_result.rs | 8 | ||||
-rw-r--r-- | sandbox/main.c | 10 |
2 files changed, 8 insertions, 10 deletions
diff --git a/backend/src/run_result.rs b/backend/src/run_result.rs index 2deb2e0..0053242 100644 --- a/backend/src/run_result.rs +++ b/backend/src/run_result.rs @@ -13,7 +13,7 @@ use std::process::Output; struct RunResultMetadata { pub exit: i32, pub result: i32, - pub elapsed: u64, + pub elapsed: i32, pub message: String, pub truncated: bool, } @@ -82,15 +82,15 @@ pub fn parse_and_save(snip: &Snippet, comp: &Compiler, output: Output) -> Result let output_limit = 65536; if output.status.success() { - if output.stderr.len() < 16 { + if output.stderr.len() < 12 { return Err(PoeError::from("failed sandbox (result)")); } - let (metavec, msgvec) = output.stderr.split_at(16); + let (metavec, msgvec) = output.stderr.split_at(12); let mut rdr = Cursor::new(metavec); let reason = rdr.read_i32::<LittleEndian>().unwrap(); let exit = rdr.read_i32::<LittleEndian>().unwrap(); - let elapsed = rdr.read_u64::<LittleEndian>().unwrap(); + let elapsed = rdr.read_i32::<LittleEndian>().unwrap(); let msg_str = String::from_utf8_lossy(&msgvec); let trunc = output.stdout.len() > output_limit; let meta = RunResultMetadata { exit: exit, result: reason, message: msg_str.into_owned(), truncated: trunc, elapsed: elapsed }; diff --git a/sandbox/main.c b/sandbox/main.c index 8043929..44b1742 100644 --- a/sandbox/main.c +++ b/sandbox/main.c @@ -9,13 +9,11 @@ static noreturn void finish(enum poe_exit_reason reason, int status, const char struct timespec end_timespec; if (clock_gettime(CLOCK_MONOTONIC, &end_timespec)) bug("clock_gettime failed"); - uint64_t elapsed = - (uint64_t)(end_timespec.tv_sec - start_timespec.tv_sec) * 1000 * 1000 + - (end_timespec.tv_nsec - start_timespec.tv_nsec) / 1000; - int xx[] = { reason, status }; - fwrite(xx, sizeof(int), 2, stderr); - fwrite(&elapsed, sizeof(uint64_t), 1, stderr); + int elapsed = (end_timespec.tv_sec - start_timespec.tv_sec) * 1000 + + (end_timespec.tv_nsec - start_timespec.tv_nsec) / 1000 / 1000; + int xx[] = { reason, status, elapsed }; + fwrite(xx, sizeof(int), sizeof(xx) / sizeof(int), stderr); if (fmt) { va_list args; va_start(args, fmt); |