diff --git a/libc/Makefile b/libc/Makefile
index e66ea4a1..ede4fc3a 100644
--- a/libc/Makefile
+++ b/libc/Makefile
@@ -305,6 +305,7 @@ stdlib/canonicalize_file_name.o \
stdlib/env.o \
stdlib/_Exit.o \
stdlib/exit.o \
+stdlib/mkstemp.o \
stdlib/mktemp.o \
stdlib/on_exit.o \
stdlib/rand.o \
diff --git a/libc/include/stdlib.h b/libc/include/stdlib.h
index cda18afe..a8aab846 100644
--- a/libc/include/stdlib.h
+++ b/libc/include/stdlib.h
@@ -84,6 +84,7 @@ void* malloc(size_t);
int mblen(const char*, size_t);
size_t mbstowcs(wchar_t* __restrict, const char* __restrict, size_t);
int mbtowc(wchar_t *__restrict, const char* __restrict, size_t);
+int mkstemp(char*);
#if !defined(_SORTIX_SOURCE)
char* mktemp(char* templ);
#endif
@@ -137,7 +138,6 @@ char* l64a(long);
void lcong48(unsigned short [7]);
long lrand48(void);
char* mkdtemp(char*);
-int mkstemp(char*);
long mrand48(void);
long nrand48(unsigned short[3]);
int posix_memalign(void**, size_t, size_t);
diff --git a/libc/stdlib/mkstemp.cpp b/libc/stdlib/mkstemp.cpp
new file mode 100644
index 00000000..9cf0824f
--- /dev/null
+++ b/libc/stdlib/mkstemp.cpp
@@ -0,0 +1,41 @@
+/*******************************************************************************
+
+ Copyright(C) Jonas 'Sortie' Termansen 2013.
+
+ This file is part of the Sortix C Library.
+
+ The Sortix C Library is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or (at your
+ option) any later version.
+
+ The Sortix C Library is distributed in the hope that it will be useful, but
+ WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+ or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public
+ License for more details.
+
+ You should have received a copy of the GNU Lesser General Public License
+ along with the Sortix C Library. If not, see .
+
+ stdlib/mkstemp.cpp
+ Make a unique temporary filepath and opens it.
+
+*******************************************************************************/
+
+#include
+#include
+#include
+#include
+
+extern "C" int mkstemp(char* templ)
+{
+ int fd;
+ do
+ {
+ size_t templ_len = strlen(templ);
+ for ( size_t i = templ_len - 6UL; i < templ_len; i++ )
+ templ[i] = '0' + rand() % 10;
+ } while ( (fd = open(templ, O_RDWR | O_EXCL | O_CREAT, 0666)) < 0 &&
+ (errno == EEXIST) );
+ return fd;
+}