From 7a241b28bfeca19f79189295f2665d20edcb338d Mon Sep 17 00:00:00 2001
From: Jeremy Soller <jackpot51@gmail.com>
Date: Mon, 14 Nov 2016 20:54:33 -0700
Subject: [PATCH] Add sys:exe to get current executable

---
 scheme/sys/exe.rs | 16 ++++++++++++++++
 scheme/sys/mod.rs |  2 ++
 2 files changed, 18 insertions(+)
 create mode 100644 scheme/sys/exe.rs

diff --git a/scheme/sys/exe.rs b/scheme/sys/exe.rs
new file mode 100644
index 00000000..84eb266f
--- /dev/null
+++ b/scheme/sys/exe.rs
@@ -0,0 +1,16 @@
+use collections::Vec;
+
+use context;
+use syscall::error::{Error, ESRCH, Result};
+
+pub fn resource() -> Result<Vec<u8>> {
+    let mut name = {
+        let contexts = context::contexts();
+        let context_lock = contexts.current().ok_or(Error::new(ESRCH))?;
+        let context = context_lock.read();
+        let name = context.name.lock();
+        name.clone()
+    };
+    name.push(b'\n');
+    Ok(name)
+}
diff --git a/scheme/sys/mod.rs b/scheme/sys/mod.rs
index b0dfac4d..3f47ac87 100644
--- a/scheme/sys/mod.rs
+++ b/scheme/sys/mod.rs
@@ -11,6 +11,7 @@ use syscall::scheme::Scheme;
 
 mod context;
 mod cpu;
+mod exe;
 mod memory;
 mod scheme;
 //mod interrupt;
@@ -39,6 +40,7 @@ impl SysScheme {
 
         files.insert(b"context", Box::new(move || context::resource()));
         files.insert(b"cpu", Box::new(move || cpu::resource()));
+        files.insert(b"exe", Box::new(move || exe::resource()));
         files.insert(b"memory", Box::new(move || memory::resource()));
         files.insert(b"scheme", Box::new(move || scheme::resource()));
         //files.insert(b"interrupt", Box::new(move || interrupt::resource()));
-- 
GitLab