date and time created 88/02/02 15:45:55 by bostic
authorKeith Bostic <bostic@ucbvax.Berkeley.EDU>
Wed, 3 Feb 1988 07:45:55 +0000 (23:45 -0800)
committerKeith Bostic <bostic@ucbvax.Berkeley.EDU>
Wed, 3 Feb 1988 07:45:55 +0000 (23:45 -0800)
SCCS-vsn: local/sccscmds/sccscmds.2/util/xcreat.c 1.1
SCCS-vsn: local/sccscmds/sccscmds.ok/util/xcreat.c 1.1

usr/src/local/sccscmds/sccscmds.2/util/xcreat.c [new file with mode: 0644]
usr/src/local/sccscmds/sccscmds.ok/util/xcreat.c [new file with mode: 0644]

diff --git a/usr/src/local/sccscmds/sccscmds.2/util/xcreat.c b/usr/src/local/sccscmds/sccscmds.2/util/xcreat.c
new file mode 100644 (file)
index 0000000..6caed68
--- /dev/null
@@ -0,0 +1,28 @@
+# include      "../hdr/macros.h"
+SCCSID(@(#)xcreat      2.1);
+
+/*
+       "Sensible" creat: write permission in directory is required in
+       all cases, and created file is guaranteed to have specified mode
+       and be owned by effective user.
+       (It does this by first unlinking the file to be created.)
+       Returns file descriptor on success,
+       fatal() on failure.
+*/
+
+xcreat(name,mode)
+char *name;
+int mode;
+{
+       register int fd;
+       register char *d;
+
+       d = alloca(size(name));
+       copy(name,d);
+       if (!exists(dname(d)))
+               fatal(sprintf(Error,"directory `%s' nonexistent (ut1)",d));
+       unlink(name);
+       if ((fd = creat(name,mode)) >= 0)
+               return(fd);
+       return(xmsg(name,"xcreat"));
+}
diff --git a/usr/src/local/sccscmds/sccscmds.ok/util/xcreat.c b/usr/src/local/sccscmds/sccscmds.ok/util/xcreat.c
new file mode 100644 (file)
index 0000000..6caed68
--- /dev/null
@@ -0,0 +1,28 @@
+# include      "../hdr/macros.h"
+SCCSID(@(#)xcreat      2.1);
+
+/*
+       "Sensible" creat: write permission in directory is required in
+       all cases, and created file is guaranteed to have specified mode
+       and be owned by effective user.
+       (It does this by first unlinking the file to be created.)
+       Returns file descriptor on success,
+       fatal() on failure.
+*/
+
+xcreat(name,mode)
+char *name;
+int mode;
+{
+       register int fd;
+       register char *d;
+
+       d = alloca(size(name));
+       copy(name,d);
+       if (!exists(dname(d)))
+               fatal(sprintf(Error,"directory `%s' nonexistent (ut1)",d));
+       unlink(name);
+       if ((fd = creat(name,mode)) >= 0)
+               return(fd);
+       return(xmsg(name,"xcreat"));
+}