* Copyright (c) 1987 Regents of the University of California.
* Redistribution and use in source and binary forms are permitted
* provided that this notice is preserved and that due credit is given
* to the University of California at Berkeley. The name of the University
* may not be used to endorse or promote products derived from this
* software without specific written prior permission. This software
* is provided ``as is'' without express or implied warranty.
#if defined(LIBC_SCCS) && !defined(lint)
static char sccsid
[] = "@(#)mktemp.c 5.6 (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 */