#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>

#define nil ((void*)0)

char*
mkfname(char *tmpdir, char *prefix)
{
	int n;
	char *p, *fname;

	if((p = getenv("TMPDIR")) != nil)
		goto Mktemp;
	if((p = tmpdir) != nil)
		goto Mktemp;
	p = "/tmp";

 Mktemp:
	n = strlen(p)+1+strlen(prefix)+1+8+1;
	if((fname = malloc(n)) == nil)
		return nil;
	memset(fname, 0, n);
	strcat(fname, p);
	if((n = strlen(p)) > 0 && p[n-1] != '/')
		strcat(fname, "/");
	strcat(fname, prefix);
	strcat(fname, ".XXXXXXXX");

	return fname;
}

extern int mkstemp();

char*
safe_tempnam(char *tmpdir, char *prefix)
{
	int fd;
	char *fname;

	if((fname = mkfname(tmpdir, prefix)) == nil)
		return nil;

	if((fd = mkstemp(fname)) < 0){		/* XXX: leak fd, fname */
		free(fname);
		return nil;
	}
	return fname;
}

int
safe_tmpnam(char *fname)
{
	char *p;

	if((p = mkfname(nil, "tmpfile")) == nil)
		return -1;
	strcpy(fname, p);
	free(p);
	return mkstemp(fname);
}
