Commit d8ec3078 authored by Mark Andrews's avatar Mark Andrews

relax safe_create().

parent ee8a5c01
......@@ -15,7 +15,7 @@
* WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
*/
/* $Id: os.c,v 1.1 2001/08/03 05:56:22 marka Exp $ */
/* $Id: os.c,v 1.2 2001/08/04 08:15:02 marka Exp $ */
#include <config.h>
......@@ -46,18 +46,22 @@ safe_create(const char *filename) {
int fd;
FILE *f;
struct stat sb;
int flags = O_WRONLY;
if (stat(filename, &sb) == -1) {
if (errno != ENOENT)
return (NULL);
flags = O_WRONLY|O_CREAT|O_EXCL;
} else if ((sb.st_mode & S_IFREG) == 0) {
errno = EOPNOTSUPP;
return (NULL);
}
} else
flags = O_WRONLY|O_TRUNC;
fd = open(filename, O_WRONLY|O_CREAT|O_EXCL, S_IRUSR|S_IWUSR);
fd = open(filename, flags, S_IRUSR|S_IWUSR);
if (fd == -1)
return (NULL);
(void)fchmod(fd, S_IRUSR|S_IWUSR);
f = fdopen(fd, "w");
if (f == NULL)
close(fd);
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment