Loading...
stdio/FreeBSD/tmpnam.c.patch /dev/null Libc-763.12
--- /dev/null
+++ Libc/Libc-763.12/stdio/FreeBSD/tmpnam.c.patch
@@ -0,0 +1,41 @@
+--- tmpnam.c.orig	2010-07-06 16:02:20.000000000 -0700
++++ tmpnam.c	2010-07-06 16:32:52.000000000 -0700
+@@ -40,21 +40,35 @@ __FBSDID("$FreeBSD: src/lib/libc/stdio/t
+ 
+ #include <stdio.h>
+ #include <unistd.h>
++#include <pthread.h>
++#include <stdlib.h>
+ 
+ __warn_references(tmpnam,
+     "warning: tmpnam() possibly used unsafely; consider using mkstemp()");
+ 
+ extern char *_mktemp(char *);
+ 
++static char *tmpnam_buf = NULL;
++static pthread_once_t tmpnam_buf_control = PTHREAD_ONCE_INIT;
++
++static void tmpnam_buf_allocate(void)
++{
++	tmpnam_buf = malloc(L_tmpnam);
++}
++
+ char *
+ tmpnam(s)
+ 	char *s;
+ {
+ 	static u_long tmpcount;
+-	static char buf[L_tmpnam];
+ 
+-	if (s == NULL)
+-		s = buf;
++	if (s == NULL) {
++		if (pthread_once(&tmpnam_buf_control, tmpnam_buf_allocate)
++			|| !tmpnam_buf) {
++			return NULL;
++		}
++		s = tmpnam_buf;
++	}
+ 	(void)snprintf(s, L_tmpnam, "%stmp.%lu.XXXXXX", P_tmpdir, tmpcount);
+ 	++tmpcount;
+ 	return (_mktemp(s));