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);
+}
