diff --git a/libc/Android.mk b/libc/Android.mk
index ac27a0c..9ab7e8e 100644
--- a/libc/Android.mk
+++ b/libc/Android.mk
@@ -153,6 +153,7 @@
     bionic/getcwd.cpp \
     bionic/inotify_init.cpp \
     bionic/lchown.cpp \
+    bionic/lfs64_support.cpp \
     bionic/libc_init_common.cpp \
     bionic/libc_logging.cpp \
     bionic/libgen.cpp \
diff --git a/libc/bionic/lfs64_support.cpp b/libc/bionic/lfs64_support.cpp
new file mode 100644
index 0000000..ab795f5
--- /dev/null
+++ b/libc/bionic/lfs64_support.cpp
@@ -0,0 +1,39 @@
+/*
+ * Copyright (C) 2014 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <ftw.h>
+#include <stdlib.h>
+
+int mkstemp64(char* filename) {
+  // Delegation will work in this case because all the transitive dependencies
+  // are already 64-bit ready. In particular, we don't have non-O_LARGEFILE
+  // open (our open is actually open64) and stat and stat64 are the same.
+  return mkstemp(filename);
+}
+
+typedef int (*ftw_fn)(const char*, const struct stat*, int);
+typedef int (*nftw_fn)(const char*, const struct stat*, int, struct FTW*);
+
+int ftw64(const char *dirpath,
+    int (*fn)(const char*, const struct stat64*, int), int nopenfd) {
+  return ftw(dirpath, reinterpret_cast<ftw_fn>(fn), nopenfd);
+}
+
+int nftw64(const char * dirpath,
+    int (*fn)(const char*, const struct stat64*, int, struct FTW*),
+    int nopenfd, int flags) {
+  return nftw(dirpath, reinterpret_cast<nftw_fn>(fn), nopenfd, flags);
+}
diff --git a/libc/include/ftw.h b/libc/include/ftw.h
index 3bebea3..af524d0 100644
--- a/libc/include/ftw.h
+++ b/libc/include/ftw.h
@@ -57,6 +57,9 @@
 int	ftw(const char *, int (*)(const char *, const struct stat *, int), int);
 int	nftw(const char *, int (*)(const char *, const struct stat *, int,
 	    struct FTW *), int, int);
+int	ftw64(const char *, int (*)(const char *, const struct stat64 *, int), int);
+int	nftw64(const char *, int (*)(const char *, const struct stat64 *, int,
+	    struct FTW *), int, int);
 __END_DECLS
 
 #endif	/* !_FTW_H */
diff --git a/libc/include/stdlib.h b/libc/include/stdlib.h
index 72b554f..9c04059 100644
--- a/libc/include/stdlib.h
+++ b/libc/include/stdlib.h
@@ -54,6 +54,7 @@
 extern char* mkdtemp(char*);
 extern char* mktemp(char*) __warnattr("mktemp possibly used unsafely; consider using mkstemp");
 extern int mkstemp(char*);
+extern int mkstemp64(char*);
 
 extern long strtol(const char *, char **, int);
 extern long long strtoll(const char *, char **, int);
diff --git a/tests/Android.mk b/tests/Android.mk
index 4879e52..5fafba6 100644
--- a/tests/Android.mk
+++ b/tests/Android.mk
@@ -44,6 +44,7 @@
     eventfd_test.cpp \
     fcntl_test.cpp \
     fenv_test.cpp \
+    ftw_test.cpp \
     getauxval_test.cpp \
     getcwd_test.cpp \
     inttypes_test.cpp \
diff --git a/tests/TemporaryFile.h b/tests/TemporaryFile.h
index b3f085f..a7b13b0 100644
--- a/tests/TemporaryFile.h
+++ b/tests/TemporaryFile.h
@@ -16,20 +16,25 @@
 
 #include <unistd.h>
 
-class TemporaryFile {
+template<int (*mk_fn)(char*)>
+class GenericTemporaryFile {
  public:
-  TemporaryFile() {
-    // Since we might be running on the host or the target, and if we're
-    // running on the host we might be running under bionic or glibc,
-    // let's just try both possible temporary directories and take the
-    // first one that works.
-    init("/data/local/tmp");
-    if (fd == -1) {
-      init("/tmp");
+  GenericTemporaryFile(const char* dirpath = NULL) {
+    if (dirpath != NULL) {
+      init(dirpath);
+    } else {
+      // Since we might be running on the host or the target, and if we're
+      // running on the host we might be running under bionic or glibc,
+      // let's just try both possible temporary directories and take the
+      // first one that works.
+      init("/data/local/tmp");
+      if (fd == -1) {
+        init("/tmp");
+      }
     }
   }
 
-  ~TemporaryFile() {
+  ~GenericTemporaryFile() {
     close(fd);
     unlink(filename);
   }
@@ -40,6 +45,30 @@
  private:
   void init(const char* tmp_dir) {
     snprintf(filename, sizeof(filename), "%s/TemporaryFile-XXXXXX", tmp_dir);
-    fd = mkstemp(filename);
+    fd = mk_fn(filename);
   }
 };
+
+typedef GenericTemporaryFile<mkstemp> TemporaryFile;
+
+class TemporaryDir {
+ public:
+  TemporaryDir() {
+    if (!init("/data/local/tmp")) {
+      init("/tmp");
+    }
+  }
+
+  ~TemporaryDir() {
+    rmdir(dirname);
+  }
+
+  char dirname[1024];
+
+ private:
+  bool init(const char* tmp_dir) {
+    snprintf(dirname, sizeof(dirname), "%s/TemporaryDir-XXXXXX", tmp_dir);
+    return (mkdtemp(dirname) != NULL);
+  }
+
+};
diff --git a/tests/ftw_test.cpp b/tests/ftw_test.cpp
new file mode 100644
index 0000000..6d3a308
--- /dev/null
+++ b/tests/ftw_test.cpp
@@ -0,0 +1,85 @@
+/*
+ * Copyright (C) 2014 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <gtest/gtest.h>
+#include "TemporaryFile.h"
+
+#include <ftw.h>
+#include <stdlib.h>
+#include <sys/stat.h>
+
+void sanity_check_ftw(const char* fpath, const struct stat* sb, int tflag) {
+  ASSERT_TRUE(fpath != NULL);
+  ASSERT_TRUE(sb != NULL);
+  bool is_dir = S_ISDIR(sb->st_mode);
+  ASSERT_TRUE((is_dir && tflag == FTW_D) || (!is_dir && tflag == FTW_F));
+}
+
+void sanity_check_nftw(
+    const char* fpath, const struct stat* sb, int tflag, struct FTW* ftwbuf) {
+  sanity_check_ftw(fpath, sb, tflag);
+  // either the parent dir or the file
+  bool is_dir = S_ISDIR(sb->st_mode);
+  ASSERT_TRUE(
+    (is_dir && ftwbuf->level == 0) || (!is_dir && ftwbuf->level == 1));
+}
+
+int check_ftw(const char* fpath, const struct stat* sb, int tflag) {
+  sanity_check_ftw(fpath, sb, tflag);
+  return 0;
+}
+
+int check_ftw64(const char* fpath, const struct stat64* sb, int tflag) {
+  sanity_check_ftw(fpath, reinterpret_cast<const struct stat*>(sb), tflag);
+  return 0;
+}
+
+int check_nftw(
+  const char* fpath, const struct stat* sb, int tflag, struct FTW* ftwbuf) {
+  sanity_check_nftw(fpath, sb, tflag, ftwbuf);
+  return 0;
+}
+
+int check_nftw64(
+  const char* fpath, const struct stat64* sb, int tflag, struct FTW* ftwbuf) {
+  sanity_check_nftw(fpath, reinterpret_cast<const struct stat*>(sb),
+    tflag, ftwbuf);
+  return 0;
+}
+
+TEST(ftw, ftw) {
+  TemporaryDir td;
+  TemporaryFile tf(td.dirname);
+  ftw(td.dirname, check_ftw, 1);
+}
+
+TEST(ftw, ftw64) {
+  TemporaryDir td;
+  GenericTemporaryFile<mkstemp64> tf(td.dirname);
+  ftw64(td.dirname, check_ftw64, 1);
+}
+
+TEST(ftw, nftw) {
+  TemporaryDir td;
+  TemporaryFile tf(td.dirname);
+  nftw(td.dirname, check_nftw, 1, 0);
+}
+
+TEST(ftw, nftw64) {
+  TemporaryDir td;
+  GenericTemporaryFile<mkstemp64> tf(td.dirname);
+  nftw64(td.dirname, check_nftw64, 1, 0);
+}
diff --git a/tests/stdlib_test.cpp b/tests/stdlib_test.cpp
index fa59c41..1903b04 100644
--- a/tests/stdlib_test.cpp
+++ b/tests/stdlib_test.cpp
@@ -15,6 +15,7 @@
  */
 
 #include <gtest/gtest.h>
+#include "TemporaryFile.h"
 
 #include <errno.h>
 #include <libgen.h>
@@ -22,6 +23,7 @@
 #include <pthread.h>
 #include <stdint.h>
 #include <stdlib.h>
+#include <fcntl.h>
 
 TEST(stdlib, drand48) {
   srand48(0x01020304);
@@ -157,3 +159,16 @@
   ::testing::FLAGS_gtest_death_test_style = "threadsafe";
   ASSERT_EXIT(TestBug57421_main(), ::testing::ExitedWithCode(0), "");
 }
+
+TEST(stdlib, mkstemp) {
+  TemporaryFile tf;
+  struct stat sb;
+  ASSERT_EQ(0, fstat(tf.fd, &sb));
+}
+
+TEST(stdlib, mkstemp64) {
+  GenericTemporaryFile<mkstemp64> tf;
+  struct stat64 sb;
+  ASSERT_EQ(0, fstat64(tf.fd, &sb));
+  ASSERT_EQ(O_LARGEFILE, fcntl(tf.fd, F_GETFL) & O_LARGEFILE);
+}
