1 # include	"../hdr/macros.h"
2 SCCSID(@(#)xcreat	2.1);
3 
4 /*
5 	"Sensible" creat: write permission in directory is required in
6 	all cases, and created file is guaranteed to have specified mode
7 	and be owned by effective user.
8 	(It does this by first unlinking the file to be created.)
9 	Returns file descriptor on success,
10 	fatal() on failure.
11 */
12 
13 xcreat(name,mode)
14 char *name;
15 int mode;
16 {
17 	register int fd;
18 	register char *d;
19 
20 	d = alloc(size(name));
21 	copy(name,d);
22 	if (!exists(dname(d))) {
23 		free(d);
24 		sprintf(Error,"directory `%s' nonexistent (ut1)",d);
25 		fatal(Error);
26 	}
27 	free(d);
28 	unlink(name);
29 	if ((fd = creat(name,mode)) >= 0)
30 		return(fd);
31 	return(xmsg(name,"xcreat"));
32 }
33