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