Subversion Repositories planix.SVN

Rev

Rev 2 | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
2 - 1
/*
2
 * This file not used on plan9: see ../plan9/tmpfile.c
3
 */
4
/*
5
 * pANS stdio -- tmpfile
6
 *
7
 * Bug: contains a critical section.  Two executions by the same
8
 * user could interleave as follows, both yielding the same file:
9
 *	access fails
10
 *			access fails
11
 *	fopen succeeds
12
 *			fopen succeeds
13
 *	unlink succeeds
14
 *			unlink fails
15
 * As I read the pANS, this can't reasonably use tmpnam to generate
16
 * the name, so that code is duplicated.
17
 */
18
#include "iolib.h"
19
FILE *tmpfile(void){
20
	FILE *f;
21
	static char name[]="/tmp/tf000000000000";
22
	char *p;
23
	while(access(name, 0)==0){
24
		p=name+7;
25
		while(*p=='9') *p++='0';
26
		if(*p=='\0') return NULL;
27
		++*p;
28
	}
29
	f=fopen(name, "wb+");
30
	unlink(name);
31
	return f;
32
}