From a48aa2ce5abaf985b6174bd2a9259383924626cc Mon Sep 17 00:00:00 2001
From: Sam Clegg <sbc@chromium.org>
Date: Tue, 17 May 2022 17:26:03 -0700
Subject: [PATCH] [wasm64] Use `int` over `long` for time_t, etc. NFC

This doesn't change the size of the type for wasm32 but helps with
wasm64 since it makes these types consistent between the two.

Split out from #16922
---
 .circleci/config.yml                                 |  2 +-
 src/library.js                                       | 10 +++++-----
 system/lib/libc/musl/arch/emscripten/bits/alltypes.h | 10 +++++-----
 tests/utime/test_utime.c                             |  6 +++---
 4 files changed, 14 insertions(+), 14 deletions(-)

diff --git a/.circleci/config.yml b/.circleci/config.yml
index 4b148ad815fc0..d211fc767b9e5 100644
--- a/.circleci/config.yml
+++ b/.circleci/config.yml
@@ -381,7 +381,7 @@ jobs:
     executor: bionic
     steps:
       - run-tests-linux:
-          test_targets: "wasm64.test_hello_world wasm64.test_ccall wasm64l.test_hello_world wasm64l.test_mmap wasm64l.test_unistd_* skip:wasm64l.test_unistd_sysconf wasm64l.test_mmap_file wasm64l.test_ccall wasm64l.test_signals wasm64l.test_emscripten_get_compiler_setting wasm64l.test_float_builtins wasm64l.test_getopt wasm64l.test_em_asm* wasm64l.test_minimal_runtime_utf8_invalid"
+          test_targets: "wasm64.test_hello_world wasm64.test_ccall wasm64l.test_hello_world wasm64l.test_mmap wasm64l.test_unistd_* skip:wasm64l.test_unistd_sysconf wasm64l.test_mmap_file wasm64l.test_ccall wasm64l.test_signals wasm64l.test_emscripten_get_compiler_setting wasm64l.test_float_builtins wasm64l.test_getopt wasm64l.test_em_asm* wasm64l.test_minimal_runtime_utf8_invalid wasm64l.test_strftime wasm64l.test_utime"
   test-other:
     executor: bionic
     steps:
diff --git a/src/library.js b/src/library.js
index 7791aef384d58..8f10149e9dd8b 100644
--- a/src/library.js
+++ b/src/library.js
@@ -445,7 +445,7 @@ mergeInto(LibraryManager.library, {
     return (date.getTime() / 1000)|0;
   },
 
-  _gmtime_js__sig: 'iii',
+  _gmtime_js__sig: 'ipp',
   _gmtime_js: function(time, tmPtr) {
     var date = new Date({{{ makeGetValue('time', 0, 'i32') }}}*1000);
     {{{ makeSetValue('tmPtr', C_STRUCTS.tm.tm_sec, 'date.getUTCSeconds()', 'i32') }}};
@@ -460,7 +460,7 @@ mergeInto(LibraryManager.library, {
     {{{ makeSetValue('tmPtr', C_STRUCTS.tm.tm_yday, 'yday', 'i32') }}};
   },
 
-  _timegm_js__sig: 'ii',
+  _timegm_js__sig: 'ip',
   _timegm_js: function(tmPtr) {
     var time = Date.UTC({{{ makeGetValue('tmPtr', C_STRUCTS.tm.tm_year, 'i32') }}} + 1900,
                         {{{ makeGetValue('tmPtr', C_STRUCTS.tm.tm_mon, 'i32') }}},
@@ -479,7 +479,7 @@ mergeInto(LibraryManager.library, {
     return (date.getTime() / 1000)|0;
   },
 
-  _localtime_js__sig: 'iii',
+  _localtime_js__sig: 'ipp',
   _localtime_js: function(time, tmPtr) {
     var date = new Date({{{ makeGetValue('time', 0, 'i32') }}}*1000);
     {{{ makeSetValue('tmPtr', C_STRUCTS.tm.tm_sec, 'date.getSeconds()', 'i32') }}};
@@ -543,7 +543,7 @@ mergeInto(LibraryManager.library, {
   // TODO: Initialize these to defaults on startup from system settings.
   // Note: glibc has one fewer underscore for all of these. Also used in other related functions (timegm)
   _tzset_js__deps: ['tzset_impl'],
-  _tzset_js__sig: 'viii',
+  _tzset_js__sig: 'vppp',
   _tzset_js: function(timezone, daylight, tzname) {
     // TODO: Use (malleable) environment variables instead of system settings.
     if (__tzset_js.called) return;
@@ -654,7 +654,7 @@ mergeInto(LibraryManager.library, {
     , '$intArrayFromString', '$writeArrayToMemory'
 #endif
   ],
-  strftime__sig: 'iiiii',
+  strftime__sig: 'ppppp',
   strftime: function(s, maxsize, format, tm) {
     // size_t strftime(char *restrict s, size_t maxsize, const char *restrict format, const struct tm *restrict timeptr);
     // http://pubs.opengroup.org/onlinepubs/009695399/functions/strftime.html
diff --git a/system/lib/libc/musl/arch/emscripten/bits/alltypes.h b/system/lib/libc/musl/arch/emscripten/bits/alltypes.h
index 0ef1f9238f17a..d12716a20e033 100644
--- a/system/lib/libc/musl/arch/emscripten/bits/alltypes.h
+++ b/system/lib/libc/musl/arch/emscripten/bits/alltypes.h
@@ -41,7 +41,7 @@ typedef __WCHAR_TYPE__ wchar_t;
 
 #else
 #if defined(__NEED_wchar_t) && !defined(__DEFINED_wchar_t)
-typedef long wchar_t;
+typedef int wchar_t;
 #define __DEFINED_wchar_t
 #endif
 
@@ -78,12 +78,12 @@ typedef long double double_t;
 #endif
 
 #if defined(__NEED_time_t) && !defined(__DEFINED_time_t)
-typedef long time_t;
+typedef int time_t;
 #define __DEFINED_time_t
 #endif
 
 #if defined(__NEED_suseconds_t) && !defined(__DEFINED_suseconds_t)
-typedef long suseconds_t;
+typedef int suseconds_t;
 #define __DEFINED_suseconds_t
 #endif
 
@@ -253,7 +253,7 @@ typedef unsigned int dev_t;
 #endif
 
 #if defined(__NEED_blksize_t) && !defined(__DEFINED_blksize_t)
-typedef long blksize_t;
+typedef int blksize_t;
 #define __DEFINED_blksize_t
 #endif
 
@@ -278,7 +278,7 @@ typedef unsigned wint_t;
 #endif
 
 #if defined(__NEED_wctype_t) && !defined(__DEFINED_wctype_t)
-typedef unsigned long wctype_t;
+typedef unsigned int wctype_t;
 #define __DEFINED_wctype_t
 #endif
 
diff --git a/tests/utime/test_utime.c b/tests/utime/test_utime.c
index 3a04100ce8863..ebc78c5dc6656 100644
--- a/tests/utime/test_utime.c
+++ b/tests/utime/test_utime.c
@@ -44,15 +44,15 @@ void test() {
   assert(s.st_mtime == t.modtime);
 
   // NULL sets atime and mtime to current time.
-  long now = time(NULL);
+  time_t now = time(NULL);
   rv = utime("writeable", NULL);
   assert(rv == 0);
   memset(&s, 0, sizeof s);
   stat("writeable", &s);
   assert(s.st_atime == s.st_mtime);
-  long diff = s.st_atime - now;
+  time_t diff = s.st_atime - now;
   if (abs(diff) > 5) {
-    fprintf(stderr, "st_atime: %li, now: %li, diff: %li\n ", s.st_atime, now, diff);
+    fprintf(stderr, "st_atime: %i, now: %i, diff: %i\n ", s.st_atime, now, diff);
     assert(abs(diff) <= 5);
   }