diff --git a/src/libutil/strutil.cpp b/src/libutil/strutil.cpp index c6d5972ec9..3845678ab8 100644 --- a/src/libutil/strutil.cpp +++ b/src/libutil/strutil.cpp @@ -23,6 +23,9 @@ #if defined(__APPLE__) || defined(__FreeBSD__) # include #endif +#ifdef __EMSCRIPTEN__ +# include +#endif #ifdef _WIN32 # include #endif @@ -45,7 +48,7 @@ #endif #define stbsp__uintptr std::uintptr_t -#ifdef OpenImageIO_SANITIZE +#if defined(OpenImageIO_SANITIZE) || defined(__EMSCRIPTEN__) # define STB_SPRINTF_NOUNALIGNED #endif @@ -533,6 +536,8 @@ strcasecmp(const char* a, const char* b) if (*us1++ == '\0') return (0); return (tolower_l(*us1, c_loc) - tolower_l(*--us2, c_loc)); +#elif defined(__EMSCRIPTEN__) + return ::strcasecmp(a, b); #else # error("need equivalent of strcasecmp_l on this platform"); #endif @@ -561,6 +566,8 @@ strncasecmp(const char* a, const char* b, size_t size) } while (--size != 0); } return (0); +#elif defined(__EMSCRIPTEN__) + return ::strncasecmp(a, b, size); #else # error("need equivalent of strncasecmp_l on this platform"); #endif diff --git a/src/libutil/sysutil.cpp b/src/libutil/sysutil.cpp index 95762cd59d..d5a84787de 100644 --- a/src/libutil/sysutil.cpp +++ b/src/libutil/sysutil.cpp @@ -62,6 +62,11 @@ # include #endif +#ifdef __EMSCRIPTEN__ +# include +# include +#endif + #include #include #include @@ -130,6 +135,8 @@ Sysutil::memory_used(bool resident) // FIXME -- does somebody know a good method for figuring this out for // FreeBSD? return 0; // Punt +#elif defined(__EMSCRIPTEN__) + return 0; #else // No idea what platform this is OIIO_ASSERT(0 && "Need to implement Sysutil::memory_used on this platform"); @@ -202,6 +209,8 @@ Sysutil::physical_memory() sysctl(mib, 2, &physical_memory, &length, NULL, 0); return physical_memory; +#elif defined(__EMSCRIPTEN__) + return 0; #else // No idea what platform this is OIIO_ASSERT( @@ -268,7 +277,8 @@ Sysutil::this_program_path() size_t cb = sizeof(filename); int r = 1; sysctl(mib, 4, filename, &cb, NULL, 0); -#elif defined(__GNU__) || defined(__OpenBSD__) || defined(_WIN32) +#elif defined(__GNU__) || defined(__OpenBSD__) || defined(_WIN32) \ + || defined(__EMSCRIPTEN__) int r = 0; #else // No idea what platform this is @@ -299,6 +309,8 @@ Sysutil::usleep(unsigned long useconds) { #ifdef _WIN32 Sleep(useconds / 1000); // Win32 Sleep() is milliseconds, not micro +#elif defined(__EMSCRIPTEN__) + std::this_thread::sleep_for(std::chrono::microseconds(useconds)); #else ::usleep(useconds); // *nix usleep() is in microseconds #endif