diff --git a/mongoose.c b/mongoose.c
index 43c9634989dc64e10e5e0d38303031683f6551fc..0abee9a573cb65bcce212b9d223f961ac0b8075e 100644
--- a/mongoose.c
+++ b/mongoose.c
@@ -104,8 +104,8 @@ typedef long off_t;
 #define STRX(x) #x
 #define STR(x) STRX(x)
 #define __func__ __FILE__ ":" STR(__LINE__)
-#define strtoull(x, y, z) strtoul(x, y, z)
-#define strtoll(x, y, z) strtol(x, y, z)
+#define strtoull(x, y, z) (unsigned __int64) _atoi64(x)
+#define strtoll(x, y, z) _atoi64(x)
 #else
 #define __func__  __FUNCTION__
 #define strtoull(x, y, z) _strtoui64(x, y, z)
diff --git a/test/unit_test.c b/test/unit_test.c
index 65bfd4bd4efceb4e2e86fbfbb74bf4f0f24c760c..2b777b35b93bdec899b94a3543c48286bb3d7e71 100644
--- a/test/unit_test.c
+++ b/test/unit_test.c
@@ -635,6 +635,13 @@ static void test_mg_get_cookie(void) {
   ASSERT(mg_get_cookie("a=1; b=2; c; d", "c", buf, sizeof(buf)) == -1);
 }
 
+static void test_strtoll(void) {
+  ASSERT(strtoll("0", NULL, 10) == 0);
+  ASSERT(strtoll("123", NULL, 10) == 123);
+  ASSERT(strtoll("-34", NULL, 10) == -34);
+  ASSERT(strtoll("3566626116", NULL, 10) == 3566626116);
+}
+
 int __cdecl main(void) {
   test_mg_strcasestr();
   test_alloc_vprintf();
@@ -654,6 +661,7 @@ int __cdecl main(void) {
   test_api_calls();
   test_url_decode();
   test_mg_get_cookie();
+  test_strtoll();
 #ifdef USE_LUA
   test_lua();
 #endif