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:
parent
b103cd4113
commit
01e7d8319d
Notes:
svn2git
2020-12-20 02:59:44 +00:00
svn path=/head/; revision=107428
@ -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;
|
||||
}
|
||||
|
||||
/*
|
||||
|
Loading…
Reference in New Issue
Block a user