aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKazuki Yamaguchi <k@rhe.jp>2016-04-06 00:58:59 +0900
committerKazuki Yamaguchi <k@rhe.jp>2016-04-06 00:58:59 +0900
commitad2947fa175a529fb1a3ccc39872fecec5127302 (patch)
tree17c48ea47691a1a603c3a16b667cac6e7a446158
parent28602c83ac43224b555157739842bd9167fb67b8 (diff)
downloadpoe-ad2947fa175a529fb1a3ccc39872fecec5127302.tar.gz
sandbox: マイクロ秒ほどの精度はない(どうせ同時に動くので)のでミリ秒にきりかえ
-rw-r--r--backend/src/run_result.rs8
-rw-r--r--sandbox/main.c10
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);