about summary refs log tree commit diff
path: root/library/std/src
diff options
context:
space:
mode:
authorTomoaki Kawada <kawada@kmckk.co.jp>2022-01-28 14:53:54 +0900
committerTomoaki Kawada <kawada@kmckk.co.jp>2022-01-28 15:02:44 +0900
commitda0d506ace5dc5ec36cd1eafa37a0657fa61442e (patch)
treea39a6e04bd24a9a162e6a6eb4431dfb74efe9c77 /library/std/src
parent5ab502c6d308b0ccac8127c0464e432334755a60 (diff)
downloadrust-da0d506ace5dc5ec36cd1eafa37a0657fa61442e.tar.gz
rust-da0d506ace5dc5ec36cd1eafa37a0657fa61442e.zip
kmc-solid: Implement `FileDesc::duplicate`
Diffstat (limited to 'library/std/src')
-rw-r--r--library/std/src/sys/solid/abi/sockets.rs3
-rw-r--r--library/std/src/sys/solid/net.rs2
2 files changed, 4 insertions, 1 deletions
diff --git a/library/std/src/sys/solid/abi/sockets.rs b/library/std/src/sys/solid/abi/sockets.rs
index 7c21d0dd25e..eb06a6dd927 100644
--- a/library/std/src/sys/solid/abi/sockets.rs
+++ b/library/std/src/sys/solid/abi/sockets.rs
@@ -175,6 +175,9 @@ extern "C" {
     #[link_name = "SOLID_NET_Close"]
     pub fn close(s: c_int) -> c_int;
 
+    #[link_name = "SOLID_NET_Dup"]
+    pub fn dup(s: c_int) -> c_int;
+
     #[link_name = "SOLID_NET_GetPeerName"]
     pub fn getpeername(s: c_int, name: *mut sockaddr, namelen: *mut socklen_t) -> c_int;
 
diff --git a/library/std/src/sys/solid/net.rs b/library/std/src/sys/solid/net.rs
index 63ba6341c79..c91ecce4d72 100644
--- a/library/std/src/sys/solid/net.rs
+++ b/library/std/src/sys/solid/net.rs
@@ -107,7 +107,7 @@ impl FileDesc {
     }
 
     fn duplicate(&self) -> io::Result<FileDesc> {
-        super::unsupported()
+        cvt(unsafe { netc::dup(self.fd) }).map(Self::new)
     }
 }