diff options
author | fenner <fenner@FreeBSD.org> | 2002-11-30 23:12:59 +0000 |
---|---|---|
committer | fenner <fenner@FreeBSD.org> | 2002-11-30 23:12:59 +0000 |
commit | eb450c7edfd8c3ccf9c14f92da9e35cb2b09300d (patch) | |
tree | 1368310523ab417b48d95a94bcc869840d8cd972 /usr.bin/xinstall | |
parent | 29bcc6132f1bebc06d5ce443552043e0094cab83 (diff) | |
download | FreeBSD-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.c | 10 |
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; } /* |