summaryrefslogtreecommitdiffstats
path: root/usr.bin/xinstall
diff options
context:
space:
mode:
authorfenner <fenner@FreeBSD.org>2002-11-30 23:12:59 +0000
committerfenner <fenner@FreeBSD.org>2002-11-30 23:12:59 +0000
commiteb450c7edfd8c3ccf9c14f92da9e35cb2b09300d (patch)
tree1368310523ab417b48d95a94bcc869840d8cd972 /usr.bin/xinstall
parent29bcc6132f1bebc06d5ce443552043e0094cab83 (diff)
downloadFreeBSD-src-eb450c7edfd8c3ccf9c14f92da9e35cb2b09300d.zip
FreeBSD-src-eb450c7edfd8c3ccf9c14f92da9e35cb2b09300d.tar.gz
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
Diffstat (limited to 'usr.bin/xinstall')
-rw-r--r--usr.bin/xinstall/xinstall.c10
1 files changed, 8 insertions, 2 deletions
diff --git a/usr.bin/xinstall/xinstall.c b/usr.bin/xinstall/xinstall.c
index ca30c34..cc27f6e 100644
--- a/usr.bin/xinstall/xinstall.c
+++ b/usr.bin/xinstall/xinstall.c
@@ -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;
}
/*
OpenPOWER on IntegriCloud