This is the mail archive of the
binutils@sourceware.org
mailing list for the binutils project.
Re: [gold commit] Add --debug=plugin option to record plugin actions
I've committed the following patch to check the return value from
::write(), reluctantly. I also realized there were a few newlines in
warning messages that didn't belong there (gold_warning adds a
newline).
-cary
Fix warn-unused-return message.
2018-03-23 Cary Coutant <ccoutant@gmail.com>
gold/
* plugin.cc (link_or_copy_file): Remove newlines from warning messages.
Add pedantic check for return value from ::write.
diff --git a/gold/plugin.cc b/gold/plugin.cc
index b12a7a9fae..c921f7ca3d 100644
--- a/gold/plugin.cc
+++ b/gold/plugin.cc
@@ -568,19 +568,26 @@ link_or_copy_file(const char* inname, const char* outname)
int in = ::open(inname, O_RDONLY);
if (in < 0)
{
- gold_warning(_("%s: can't open (%s)\n"), inname, strerror(errno));
+ gold_warning(_("%s: can't open (%s)"), inname, strerror(errno));
return false;
}
int out = ::open(outname, O_CREAT | O_TRUNC | O_WRONLY, 0600);
if (out < 0)
{
- gold_warning(_("%s: can't create (%s)\n"), outname, strerror(errno));
+ gold_warning(_("%s: can't create (%s)"), outname, strerror(errno));
::close(in);
return false;
}
ssize_t len;
while ((len = ::read(in, buf, sizeof(buf))) > 0)
- static_cast<void>(::write(out, buf, len));
+ {
+ if (::write(out, buf, len) != len)
+ {
+ gold_warning(_("%s: write error while making copy of file (%s)"),
+ inname, strerror(errno));
+ break;
+ }
+ }
::close(in);
::close(out);
return true;