From af5b43ca0b996d97d01ddb54874a0f0835b7c5b5 Mon Sep 17 00:00:00 2001
From: Jeremy Soller <jackpot51@gmail.com>
Date: Wed, 28 Sep 2016 11:22:01 -0600
Subject: [PATCH] Fix dup

---
 syscall/fs.rs | 20 +++++++++++++++-----
 1 file changed, 15 insertions(+), 5 deletions(-)

diff --git a/syscall/fs.rs b/syscall/fs.rs
index 20e6c92d..e79e4c0c 100644
--- a/syscall/fs.rs
+++ b/syscall/fs.rs
@@ -114,12 +114,22 @@ pub fn dup(fd: usize) -> Result<usize> {
         file
     };
 
-    let scheme = {
-        let schemes = scheme::schemes();
-        let scheme = schemes.get(file.scheme).ok_or(Error::new(EBADF))?;
-        scheme.clone()
+    let new_id = {
+        let scheme = {
+            let schemes = scheme::schemes();
+            let scheme = schemes.get(file.scheme).ok_or(Error::new(EBADF))?;
+            scheme.clone()
+        };
+        scheme.dup(file.number)?
     };
-    scheme.dup(file.number)
+
+    let contexts = context::contexts();
+    let context_lock = contexts.current().ok_or(Error::new(ESRCH))?;
+    let context = context_lock.read();
+    context.add_file(::context::file::File {
+        scheme: file.scheme,
+        number: new_id
+    }).ok_or(Error::new(EMFILE))
 }
 
 /// Register events for file
-- 
GitLab