diff --git a/libc/Android.mk b/libc/Android.mk
index 44bf388..76425c1 100644
--- a/libc/Android.mk
+++ b/libc/Android.mk
@@ -71,7 +71,6 @@
     bionic/sigsetmask.c \
     bionic/strntoimax.c \
     bionic/strntoumax.c \
-    bionic/strtotimeval.c \
     bionic/system_properties_compat.c \
     bionic/time64.c \
     bionic/unlockpt.c \
diff --git a/libc/bionic/ndk_cruft.cpp b/libc/bionic/ndk_cruft.cpp
index b0346d4..7826651 100644
--- a/libc/bionic/ndk_cruft.cpp
+++ b/libc/bionic/ndk_cruft.cpp
@@ -29,6 +29,8 @@
 // This file perpetuates the mistakes of the past, but only for 32-bit targets.
 #if !defined(__LP64__)
 
+#include <ctype.h>
+#include <inttypes.h>
 #include <pthread.h>
 #include <stdlib.h>
 #include <sys/resource.h>
@@ -87,4 +89,31 @@
   return 0;
 }
 
+// Non-standard cruft that should only ever have been in system/core/toolbox.
+extern "C" char* strtotimeval(const char* str, struct timeval* ts) {
+  char* s;
+  ts->tv_sec = strtoumax(str, &s, 10);
+
+  long fractional_seconds = 0;
+  if (*s == '.') {
+    s++;
+    int count = 0;
+
+    // Read up to 6 digits (microseconds).
+    while (*s && isdigit(*s)) {
+      if (++count < 7) {
+        fractional_seconds = fractional_seconds*10 + (*s - '0');
+      }
+      s++;
+    }
+
+    for (; count < 6; count++) {
+      fractional_seconds *= 10;
+    }
+  }
+
+  ts->tv_usec = fractional_seconds;
+  return s;
+}
+
 #endif
diff --git a/libc/bionic/strtotimeval.c b/libc/bionic/strtotimeval.c
deleted file mode 100644
index 195381b..0000000
--- a/libc/bionic/strtotimeval.c
+++ /dev/null
@@ -1,58 +0,0 @@
-/*
- * Copyright (C) 2008 The Android Open Source Project
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *  * Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *  * Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
- * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
- * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
- * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
- * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
- * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- */
-#include <ctype.h>
-#include <inttypes.h>
-#include <stdlib.h>
-#include <sys/time.h>
-
-char * strtotimeval(const char *str, struct timeval *ts) {
-  char *s;
-  long fs = 0; /* fractional seconds */
-
-  ts->tv_sec = strtoumax(str, &s, 10);
-
-  if (*s == '.') {
-    s++;
-    int count = 0;
-
-    /* read up to 6 digits (microseconds) */
-    while (*s && isdigit(*s)) {
-      if (++count < 7) {
-        fs = fs*10 + (*s - '0');
-      }
-      s++;
-    }
-
-    for (; count < 6; count++) {
-      fs *= 10;
-    }
-  }
-
-  ts->tv_usec = fs;
-  return s;
-}
diff --git a/libc/include/time.h b/libc/include/time.h
index 3f2047c..0f86fd3 100644
--- a/libc/include/time.h
+++ b/libc/include/time.h
@@ -61,8 +61,6 @@
 extern time_t time(time_t*);
 extern int nanosleep(const struct timespec*, struct timespec*);
 
-extern char* strtotimeval(const char*, struct timeval*);
-
 extern char* asctime(const struct tm*);
 extern char* asctime_r(const struct tm*, char*);
 
diff --git a/tests/time_test.cpp b/tests/time_test.cpp
index c055769..26b7775 100644
--- a/tests/time_test.cpp
+++ b/tests/time_test.cpp
@@ -387,51 +387,3 @@
   ASSERT_EQ(ESRCH, pthread_detach(tdd.thread_id));
 #endif
 }
-
-TEST(time, strtotimeval) {
-#if defined(__BIONIC__)
-  struct timeval tv1;
-  char* rest1 = strtotimeval("10.123456", &tv1);
-  ASSERT_EQ(10, tv1.tv_sec);
-  ASSERT_EQ(123456, tv1.tv_usec);
-  ASSERT_EQ('\0', *rest1);
-
-  // strtotimeval interprets the fractional part as microseconds and thus will
-  // only consider its first 6 digits. Even so it should consume all valid
-  // digits.
-  struct timeval tv2;
-  char* rest2 = strtotimeval(".1234567", &tv2);
-  ASSERT_EQ(0, tv2.tv_sec);
-  ASSERT_EQ(123456, tv2.tv_usec);
-  ASSERT_EQ('\0', *rest2);
-
-  struct timeval tv3;
-  char* rest3 = strtotimeval("1.1a", &tv3);
-  ASSERT_EQ(1, tv3.tv_sec);
-  ASSERT_EQ(100000, tv3.tv_usec);
-  ASSERT_EQ('a', *rest3);
-
-  struct timeval tv4;
-  char* rest4 = strtotimeval("a", &tv4);
-  ASSERT_EQ(0, tv4.tv_sec);
-  ASSERT_EQ(0, tv4.tv_usec);
-  ASSERT_EQ('a', *rest4);
-
-  struct timeval tv5;
-  char* rest5 = strtotimeval("0", &tv5);
-  ASSERT_EQ(0, tv5.tv_sec);
-  ASSERT_EQ(0, tv5.tv_usec);
-  ASSERT_EQ('\0', *rest5);
-
-  // TODO: should we reject this case and just return '.'?
-  struct timeval tv6;
-  char* rest6 = strtotimeval(".", &tv6);
-  ASSERT_EQ(0, tv6.tv_sec);
-  ASSERT_EQ(0, tv6.tv_usec);
-  ASSERT_EQ('\0', *rest6);
-
-#else // __BIONIC__
-  GTEST_LOG_(INFO) << "This test does nothing.\n";
-#endif // __BIONIC__
-}
-
