From 7d1d57521a6b69265719eaadadc78a4da3c37450 Mon Sep 17 00:00:00 2001
From: Brian Anderson <banderson@mozilla.com>
Date: Thu, 26 Nov 2015 23:27:45 +0000
Subject: [PATCH] Add emscripten support

---
 src/lib.rs                   | 3 +++
 src/unix/mod.rs              | 7 ++++++-
 src/unix/notbsd/linux/mod.rs | 3 ++-
 src/unix/notbsd/mod.rs       | 5 +++--
 4 files changed, 14 insertions(+), 4 deletions(-)

diff --git a/src/lib.rs b/src/lib.rs
index 3f3133fa..e408ea5e 100644
--- a/src/lib.rs
+++ b/src/lib.rs
@@ -72,6 +72,9 @@
 #![cfg_attr(target_os = "dragonfly", doc(
     html_root_url = "https://doc.rust-lang.org/libc/x86_64-unknown-dragonfly"
 ))]
+#![cfg_attr(all(target_os = "emscripten", target_arch = "asmjs"), doc(
+    html_root_url = "https://doc.rust-lang.org/libc/asmjs-unknown-emscripten"
+))]
 
 // Attributes needed when building as part of the standard library
 #![cfg_attr(stdbuild, feature(no_std, core, core_slice_ext, staged_api, custom_attribute))]
diff --git a/src/unix/mod.rs b/src/unix/mod.rs
index 6fc21538..4060b4ee 100644
--- a/src/unix/mod.rs
+++ b/src/unix/mod.rs
@@ -124,6 +124,9 @@ cfg_if! {
     } else if #[cfg(target_env = "musl")] {
         #[link(name = "c", kind = "static")]
         extern {}
+    } else if #[cfg(target_os = "emscripten")] {
+        #[link(name = "c")]
+        extern {}
     } else if #[cfg(any(target_os = "macos",
                         target_os = "ios",
                         target_os = "android",
@@ -664,7 +667,9 @@ extern {
 }
 
 cfg_if! {
-    if #[cfg(any(target_os = "linux", target_os = "android"))] {
+    if #[cfg(any(target_os = "linux",
+                 target_os = "android",
+                 target_os = "emscripten"))] {
         mod notbsd;
         pub use self::notbsd::*;
     } else if #[cfg(any(target_os = "macos",
diff --git a/src/unix/notbsd/linux/mod.rs b/src/unix/notbsd/linux/mod.rs
index 355e2d2a..512d5adc 100644
--- a/src/unix/notbsd/linux/mod.rs
+++ b/src/unix/notbsd/linux/mod.rs
@@ -511,7 +511,8 @@ extern {
 }
 
 cfg_if! {
-    if #[cfg(target_env = "musl")] {
+    if #[cfg(any(target_env = "musl",
+                 target_os = "emscripten"))] {
         mod musl;
         pub use self::musl::*;
     } else if #[cfg(any(target_arch = "mips", target_arch = "mipsel"))] {
diff --git a/src/unix/notbsd/mod.rs b/src/unix/notbsd/mod.rs
index 1d132b27..5d18853c 100644
--- a/src/unix/notbsd/mod.rs
+++ b/src/unix/notbsd/mod.rs
@@ -50,7 +50,7 @@ s! {
         pub ai_protocol: ::c_int,
         pub ai_addrlen: socklen_t,
 
-        #[cfg(target_os = "linux")]
+        #[cfg(any(target_os = "linux", target_os = "emscripten"))]
         pub ai_addr: *mut ::sockaddr,
 
         pub ai_canonname: *mut c_char,
@@ -610,7 +610,8 @@ extern {
 }
 
 cfg_if! {
-    if #[cfg(target_os = "linux")] {
+    if #[cfg(any(target_os = "linux",
+                 target_os = "emscripten"))] {
         mod linux;
         pub use self::linux::*;
     } else if #[cfg(target_os = "android")] {
-- 
GitLab