diff --git a/core/c/libc/errno.odin b/core/c/libc/errno.odin
index 843b2f1b6..de429a6ec 100644
--- a/core/c/libc/errno.odin
+++ b/core/c/libc/errno.odin
@@ -98,6 +98,14 @@ when ODIN_OS == .Haiku {
ERANGE :: B_POSIX_ERROR_BASE + 17
}
+when ODIN_OS == .JS {
+ _ :: libc
+ _get_errno :: proc "c" () -> ^int {
+ @(static) errno: int
+ return &errno
+ }
+}
+
// Odin has no way to make an identifier "errno" behave as a function call to
// read the value, or to produce an lvalue such that you can assign a different
// error value to errno. To work around this, just expose it as a function like
diff --git a/core/c/libc/stdio.odin b/core/c/libc/stdio.odin
index 019389b0d..f02453bba 100644
--- a/core/c/libc/stdio.odin
+++ b/core/c/libc/stdio.odin
@@ -59,7 +59,7 @@ when ODIN_OS == .Windows {
}
// GLIBC and MUSL compatible.
-when ODIN_OS == .Linux {
+when ODIN_OS == .Linux || ODIN_OS == .JS {
fpos_t :: struct #raw_union { _: [16]char, _: longlong, _: double, }
_IOFBF :: 0
diff --git a/core/c/libc/string.odin b/core/c/libc/string.odin
index cde9c7e6b..4ec4f3a7a 100644
--- a/core/c/libc/string.odin
+++ b/core/c/libc/string.odin
@@ -12,6 +12,7 @@ when ODIN_OS == .Windows {
foreign import libc "system:c"
}
+@(default_calling_convention="c")
foreign libc {
// 7.24.2 Copying functions
memcpy :: proc(s1, s2: rawptr, n: size_t) -> rawptr ---
diff --git a/core/c/libc/time.odin b/core/c/libc/time.odin
index 48def707e..6828793ec 100644
--- a/core/c/libc/time.odin
+++ b/core/c/libc/time.odin
@@ -45,7 +45,7 @@ when ODIN_OS == .Windows {
}
}
-when ODIN_OS == .Linux || ODIN_OS == .FreeBSD || ODIN_OS == .Darwin || ODIN_OS == .OpenBSD || ODIN_OS == .NetBSD || ODIN_OS == .Haiku {
+when ODIN_OS == .Linux || ODIN_OS == .FreeBSD || ODIN_OS == .Darwin || ODIN_OS == .OpenBSD || ODIN_OS == .NetBSD || ODIN_OS == .Haiku || ODIN_OS == .JS {
@(default_calling_convention="c")
foreign libc {
// 7.27.2 Time manipulation functions
diff --git a/vendor/stb/image/stb_image.odin b/vendor/stb/image/stb_image.odin
index 85d612354..0151899d9 100644
--- a/vendor/stb/image/stb_image.odin
+++ b/vendor/stb/image/stb_image.odin
@@ -1,6 +1,6 @@
package stb_image
-import c "core:c/libc"
+import "core:c"
@(private)
LIB :: (
@@ -20,7 +20,6 @@ when LIB != "" {
when ODIN_ARCH == .wasm32 || ODIN_ARCH == .wasm64p32 {
foreign import stbi "../lib/stb_image_wasm.o"
- foreign import stbi { LIB }
} else when LIB != "" {
foreign import stbi { LIB }
} else {
diff --git a/vendor/stb/image/stb_image_resize.odin b/vendor/stb/image/stb_image_resize.odin
index a37c2e243..241a93eb0 100644
--- a/vendor/stb/image/stb_image_resize.odin
+++ b/vendor/stb/image/stb_image_resize.odin
@@ -1,6 +1,6 @@
package stb_image
-import c "core:c/libc"
+import "core:c"
@(private)
RESIZE_LIB :: (
diff --git a/vendor/stb/image/stb_image_write.odin b/vendor/stb/image/stb_image_write.odin
index a0c0b57a0..e86fa2b95 100644
--- a/vendor/stb/image/stb_image_write.odin
+++ b/vendor/stb/image/stb_image_write.odin
@@ -1,6 +1,6 @@
package stb_image
-import c "core:c/libc"
+import "core:c"
@(private)
WRITE_LIB :: (
diff --git a/vendor/wasm/README.md b/vendor/wasm/README.md
index 191d45860..1aaeaa429 100644
--- a/vendor/wasm/README.md
+++ b/vendor/wasm/README.md
@@ -7,7 +7,7 @@ The `js_wasm32` target assumes that the WASM output will be ran within a web bro
## Example for `js_wasm32`
```html
-
+