* Copyright (c) 1987 Regents of the University of California.
* Redistribution and use in source and binary forms are permitted
* provided that the above copyright notice and this paragraph are
* duplicated in all such forms and that any documentation,
* advertising materials, and other materials related to such
* distribution and use acknowledge that the software was developed
* by the University of California, Berkeley. The name of the
* University may not be used to endorse or promote products derived
* from this software without specific prior written permission.
* THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
* IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
* WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
#if defined(LIBC_SCCS) && !defined(lint)
static char sccsid
[] = "@(#)mktemp.c 5.7 (Berkeley) 6/27/88";
#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 */