diff --git a/include/sys/redox.h b/include/sys/redox.h
new file mode 100644
index 0000000000000000000000000000000000000000..4fb4bebdc0a57004750e9d7472953c7d3dde5844
--- /dev/null
+++ b/include/sys/redox.h
@@ -0,0 +1,20 @@
+#ifndef _SYS_REDOX_H
+#define _SYS_REDOX_H
+
+#include <sys/types.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#ifdef __redox__
+
+ssize_t redox_fpath(int fd, void * buf, size_t count);
+
+#endif
+
+#ifdef __cplusplus
+} // extern "C"
+#endif
+
+#endif
diff --git a/src/platform/redox/extra.rs b/src/platform/redox/extra.rs
new file mode 100644
index 0000000000000000000000000000000000000000..11fddfdb61b0976d8719fe2e9935e5261924dd9f
--- /dev/null
+++ b/src/platform/redox/extra.rs
@@ -0,0 +1,10 @@
+use core::slice;
+
+use platform::types::*;
+
+use super::e;
+
+#[no_mangle]
+pub unsafe extern "C" fn redox_fpath(fd: c_int, buf: *mut c_void, count: size_t) -> ssize_t {
+    e(syscall::fpath(fd as usize, slice::from_raw_parts_mut(buf as *mut u8, count))) as ssize_t
+}
diff --git a/src/platform/redox/mod.rs b/src/platform/redox/mod.rs
index 4443aef4f9c5fa17505ddfeb9eef9bc04329d4e6..8fc56b0037a360c317832d0c0281262fd82b40fc 100644
--- a/src/platform/redox/mod.rs
+++ b/src/platform/redox/mod.rs
@@ -28,6 +28,7 @@ use io::{self, BufReader, SeekFrom};
 use super::types::*;
 use super::{errno, Pal, Read};
 
+mod extra;
 mod pte;
 mod signal;
 mod socket;