diff --git a/libc/Android.mk b/libc/Android.mk
index 45f419a..2609644 100644
--- a/libc/Android.mk
+++ b/libc/Android.mk
@@ -54,12 +54,11 @@
     bionic/siginterrupt.c \
     bionic/sigsetmask.c \
     bionic/system_properties_compat.c \
-    stdio/findfp.c \
     stdio/fread.c \
     stdio/refill.c \
     stdio/snprintf.c\
     stdio/sprintf.c \
-    stdio/stdio.c \
+    stdio/stdio.cpp \
     stdio/stdio_ext.cpp \
     stdlib/atexit.c \
     stdlib/exit.c \
diff --git a/libc/stdio/stdio.c b/libc/stdio/stdio.c
deleted file mode 100644
index fc2115e..0000000
--- a/libc/stdio/stdio.c
+++ /dev/null
@@ -1,90 +0,0 @@
-/*	$OpenBSD: stdio.c,v 1.9 2005/08/08 08:05:36 espie Exp $ */
-/*-
- * Copyright (c) 1990, 1993
- *	The Regents of the University of California.  All rights reserved.
- *
- * This code is derived from software contributed to Berkeley by
- * Chris Torek.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. 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.
- * 3. Neither the name of the University nor the names of its contributors
- *    may be used to endorse or promote products derived from this software
- *    without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE REGENTS 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 REGENTS 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 <errno.h>
-#include <fcntl.h>
-#include <unistd.h>
-#include <stdio.h>
-#include "local.h"
-
-/*
- * Small standard I/O/seek/close functions.
- * These maintain the `known seek offset' for seek optimisation.
- */
-int
-__sread(void *cookie, char *buf, int n)
-{
-	FILE *fp = cookie;
-	int ret;
-	
-	ret = TEMP_FAILURE_RETRY(read(fp->_file, buf, n));
-	/* if the read succeeded, update the current offset */
-	if (ret >= 0)
-		fp->_offset += ret;
-	else
-		fp->_flags &= ~__SOFF;	/* paranoia */
-	return (ret);
-}
-
-int
-__swrite(void *cookie, const char *buf, int n)
-{
-	FILE *fp = cookie;
-
-	if (fp->_flags & __SAPP)
-		(void) TEMP_FAILURE_RETRY(lseek(fp->_file, (off_t)0, SEEK_END));
-	fp->_flags &= ~__SOFF;	/* in case FAPPEND mode is set */
-	return TEMP_FAILURE_RETRY(write(fp->_file, buf, n));
-}
-
-fpos_t
-__sseek(void *cookie, fpos_t offset, int whence)
-{
-	FILE *fp = cookie;
-	off_t ret;
-	
-	ret = TEMP_FAILURE_RETRY(lseek(fp->_file, (off_t)offset, whence));
-	if (ret == (off_t)-1)
-		fp->_flags &= ~__SOFF;
-	else {
-		fp->_flags |= __SOFF;
-		fp->_offset = ret;
-	}
-	return (ret);
-}
-
-int
-__sclose(void *cookie)
-{
-	return close(((FILE *)cookie)->_file);
-}
diff --git a/libc/stdio/findfp.c b/libc/stdio/stdio.cpp
similarity index 72%
rename from libc/stdio/findfp.c
rename to libc/stdio/stdio.cpp
index 2a6be15..1ea3ef5 100644
--- a/libc/stdio/findfp.c
+++ b/libc/stdio/stdio.cpp
@@ -31,12 +31,15 @@
  * SUCH DAMAGE.
  */
 
-#include <sys/param.h>
-#include <unistd.h>
 #include <stdio.h>
+
 #include <errno.h>
+#include <fcntl.h>
 #include <stdlib.h>
 #include <string.h>
+#include <sys/param.h>
+#include <unistd.h>
+
 #include "local.h"
 #include "glue.h"
 #include "private/thread_private.h"
@@ -82,41 +85,31 @@
 struct glue __sglue = { NULL, 3, __sF };
 static struct glue* lastglue = &__sglue;
 
-static struct glue *
-moreglue(int n)
-{
-	struct glue *g;
-	FILE *p;
-	struct __sfileext *pext;
-	static FILE empty;
-	char *data;
+static glue* moreglue(int n) {
+    static FILE empty;
 
-	data = malloc(sizeof(*g) + ALIGNBYTES + n * sizeof(FILE)
-	    + n * sizeof(struct __sfileext));
-	if (data == NULL)
-		return (NULL);
-	g = (struct glue *)data;
-	p = (FILE *)ALIGN(data + sizeof(*g));
-	pext = (struct __sfileext *)
-	    (ALIGN(data + sizeof(*g)) + n * sizeof(FILE));
-	g->next = NULL;
-	g->niobs = n;
-	g->iobs = p;
-	while (--n >= 0) {
-		*p = empty;
-		_FILEEXT_SETUP(p, pext);
-		p++;
-		pext++;
-	}
-	return (g);
+    char* data = new char[sizeof(glue) + ALIGNBYTES + n * sizeof(FILE) + n * sizeof(__sfileext)];
+    if (data == nullptr) return nullptr;
+
+    glue* g = reinterpret_cast<glue*>(data);
+    FILE* p = reinterpret_cast<FILE*>(ALIGN(data + sizeof(*g)));
+    __sfileext* pext = reinterpret_cast<__sfileext*>(ALIGN(data + sizeof(*g)) + n * sizeof(FILE));
+    g->next = NULL;
+    g->niobs = n;
+    g->iobs = p;
+    while (--n >= 0) {
+        *p = empty;
+        _FILEEXT_SETUP(p, pext);
+        p++;
+        pext++;
+    }
+    return g;
 }
 
 /*
  * Find a free FILE for fopen et al.
  */
-FILE *
-__sfp(void)
-{
+FILE* __sfp(void) {
 	FILE *fp;
 	int n;
 	struct glue *g;
@@ -153,7 +146,7 @@
 	return (fp);
 }
 
-__LIBC_HIDDEN__ void __libc_stdio_cleanup(void) {
+extern "C" __LIBC_HIDDEN__ void __libc_stdio_cleanup(void) {
 	/* (void) _fwalk(fclose); */
 	(void) _fwalk(__sflush);		/* `cheating' */
 }
@@ -191,3 +184,44 @@
     FUNLOCKFILE(fp);
     return result;
 }
+
+// Small standard I/O/seek/close functions.
+// These maintain the `known seek offset' for seek optimisation.
+int __sread(void* cookie, char* buf, int n) {
+    FILE* fp = reinterpret_cast<FILE*>(cookie);
+    int ret = TEMP_FAILURE_RETRY(read(fp->_file, buf, n));
+    // If the read succeeded, update the current offset.
+    if (ret >= 0) {
+        fp->_offset += ret;
+    } else {
+        fp->_flags &= ~__SOFF; // Paranoia.
+    }
+    return ret;
+}
+
+int __swrite(void* cookie, const char* buf, int n) {
+    FILE* fp = reinterpret_cast<FILE*>(cookie);
+    if (fp->_flags & __SAPP) {
+        (void) TEMP_FAILURE_RETRY(lseek(fp->_file, 0, SEEK_END));
+    }
+    fp->_flags &= ~__SOFF; // In case FAPPEND mode is set.
+    return TEMP_FAILURE_RETRY(write(fp->_file, buf, n));
+}
+
+// TODO: _FILE_OFFSET_BITS=64.
+fpos_t __sseek(void* cookie, fpos_t offset, int whence) {
+    FILE* fp = reinterpret_cast<FILE*>(cookie);
+    off_t ret = TEMP_FAILURE_RETRY(lseek(fp->_file, offset, whence));
+    if (ret == -1) {
+        fp->_flags &= ~__SOFF;
+    } else {
+        fp->_flags |= __SOFF;
+        fp->_offset = ret;
+    }
+    return ret;
+}
+
+int __sclose(void* cookie) {
+    FILE* fp = reinterpret_cast<FILE*>(cookie);
+    return close(fp->_file);
+}
