* Copyright (c) 1987 Regents of the University of California.
* All rights reserved. The Berkeley software License Agreement
* specifies the terms and conditions for redistribution.
#if defined(LIBC_SCCS) && !defined(lint)
static char sccsid
[] = "@(#)mktemp.c 5.4 (Berkeley) %G%";
#endif LIBC_SCCS and not lint
return (_gettemp(as
, &fd
) ? fd
: -1);
return(_gettemp(as
, (int *)NULL
) ? as
: (char *)NULL
);
register char *start
, *trv
;
/* extra X's get set to 0's */
for (trv
= as
; *trv
; ++trv
);
* check for write permission on target directory; if you have
* six X's and you can't write the directory, this will run for
for (start
= ++trv
; trv
> as
&& *trv
!= '/'; --trv
);
if (stat(as
, &sbuf
) || !(sbuf
.st_mode
& S_IFDIR
))
else if (stat(".", &sbuf
) == -1)
if ((*doopen
= open(as
, O_CREAT
|O_EXCL
|O_RDWR
, 0600)) >= 0)
else if (stat(as
, &sbuf
))
return(errno
== ENOENT
? YES
: NO
);
/* tricky little algorithm for backward compatibility */