If both the unlink and the open fail, return the errno from the

unlink (very likely EPERM), since the errno from the open might
 be a confusing ETXTBSY.

Approved by:	re
MFC After:	1 week
This commit is contained in:
Bill Fenner 2002-11-30 23:12:59 +00:00
parent b103cd4113
commit 01e7d8319d
Notes: svn2git 2020-12-20 02:59:44 +00:00
svn path=/head/; revision=107428

View File

@ -598,6 +598,8 @@ int
create_newfile(const char *path, int target, struct stat *sbp)
{
char backup[MAXPATHLEN];
int saved_errno = 0;
int newfd;
if (target) {
/*
@ -621,10 +623,14 @@ create_newfile(const char *path, int target, struct stat *sbp)
if (rename(path, backup) < 0)
err(EX_OSERR, "rename: %s to %s", path, backup);
} else
(void)unlink(path);
if (unlink(path) < 0)
saved_errno = errno;
}
return (open(path, O_CREAT | O_RDWR | O_TRUNC, S_IRUSR | S_IWUSR));
newfd = open(path, O_CREAT | O_RDWR | O_TRUNC, S_IRUSR | S_IWUSR);
if (newfd < 0 && saved_errno != 0)
errno = saved_errno;
return newfd;
}
/*