shithub: scc

ref: bbe0d56677276a42a3061a3580b8b2b325b8f109
dir: /lib/c/tmpnam.c/

View raw version

#include <stdio.h>
#include <string.h>
#include "syscall.h"
#undef tmpnam

char *
tmpnam(char *s)
{
	static char *tmpl, buf[L_tmpnam];
	char *p;

	if (*buf == '\0') {
		for (tmpl = buf, p = _TMPNAME; *tmpl++ = *p++; )
			;
		for (p = tmpl; p < &buf[L_tmpnam-1]; ++p)
			*p = '0';
		*p = '\0';
	}
	for (;;) {
		for (p = tmpl; *p && *p != '9'; ++p)
			;
		if (*p == '\0')
			return NULL;
		++*p;
		if (_access(buf, 0) != 0)
			break;
	}
	if (s)
		strcpy(s, buf);
	return buf;
}