Do not retry failed close(3) in filesystem::copy
* src/filesystem/ops.cc (close_fd): Remove. (do_copy_file): Just use close(3) instead of close_fd, to prevent retrying on error. From-SVN: r241485
This commit is contained in:
parent
b3dec9e57e
commit
cfef9c1ea7
@ -1,5 +1,9 @@
|
||||
2016-10-24 Jonathan Wakely <jwakely@redhat.com>
|
||||
|
||||
* src/filesystem/ops.cc (close_fd): Remove.
|
||||
(do_copy_file): Just use close(3) instead of close_fd, to prevent
|
||||
retrying on error.
|
||||
|
||||
* src/filesystem/ops.cc (do_copy_file): Return an error if either
|
||||
source or destination is not a regular file.
|
||||
(copy): Update comment to refer to LWG 2681. Implement 2682 and 2683
|
||||
|
@ -308,17 +308,6 @@ namespace
|
||||
return fs::file_time_type{seconds{s} + ns};
|
||||
}
|
||||
|
||||
// Returns true if the file descriptor was successfully closed,
|
||||
// otherwise returns false and the reason will be in errno.
|
||||
inline bool
|
||||
close_fd(int fd)
|
||||
{
|
||||
while (::close(fd))
|
||||
if (errno != EINTR)
|
||||
return false;
|
||||
return true;
|
||||
}
|
||||
|
||||
bool
|
||||
do_copy_file(const fs::path& from, const fs::path& to,
|
||||
fs::copy_options option,
|
||||
@ -405,8 +394,8 @@ namespace
|
||||
}
|
||||
|
||||
struct CloseFD {
|
||||
~CloseFD() { if (fd != -1) close_fd(fd); }
|
||||
bool close() { return close_fd(std::exchange(fd, -1)); }
|
||||
~CloseFD() { if (fd != -1) ::close(fd); }
|
||||
bool close() { return ::close(std::exchange(fd, -1)) == 0; }
|
||||
int fd;
|
||||
};
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user