PR 5990
* descriptors.cc: New file. * descriptors.h: New file. * gold-threads.h (class Hold_optional_lock): New class. * fileread.cc: Include "descriptors.h". (File_read::~File_read): Release descriptor rather than closing it. (File_read::open) [file]: Call open_descriptor rather than open. Set is_descriptor_opened_. (File_read::open) [memory]: Assert that descriptor is not open. (File_read::reopen_descriptor): New function. (File_read::release): Release descriptor. (File_read::do_read): Make non-const. Reopen descriptor. (File_read::read): Make non-const. (File_read::make_view): Reopen descriptor. (File_read::do_readv): Likewise. * fileread.h (class File_read): Add is_descriptor_opened_ field. Update declarations. * layout.cc: Include "descriptors.h". (Layout::create_build_id): Use open_descriptor rather than open. * output.cc: Include "descriptors.h". (Output_file::open): Use open_descriptor rather than open. * archive.cc (Archive::const_iterator): Change Archive to be non-const. (Archive::begin, Archive::end): Make non-const. (Archive::count_members): Likewise. * archive.h (class Archive): Update declarations. * object.h (Object::read): Make non-const. * Makefile.am (CCFILES): Add descriptors.cc. (HFILES): Add descriptors.h. * Makefile.in: Rebuild.
This commit is contained in:
parent
e2df110677
commit
2a00e4fb8e
13 changed files with 459 additions and 45 deletions
|
@ -45,6 +45,7 @@
|
|||
#include "compressed_output.h"
|
||||
#include "reduced_debug_output.h"
|
||||
#include "reloc.h"
|
||||
#include "descriptors.h"
|
||||
#include "layout.h"
|
||||
|
||||
namespace gold
|
||||
|
@ -1507,14 +1508,14 @@ Layout::create_build_id()
|
|||
char buffer[uuidsz];
|
||||
memset(buffer, 0, uuidsz);
|
||||
|
||||
int descriptor = ::open("/dev/urandom", O_RDONLY);
|
||||
int descriptor = open_descriptor(-1, "/dev/urandom", O_RDONLY);
|
||||
if (descriptor < 0)
|
||||
gold_error(_("--build-id=uuid failed: could not open /dev/urandom: %s"),
|
||||
strerror(errno));
|
||||
else
|
||||
{
|
||||
ssize_t got = ::read(descriptor, buffer, uuidsz);
|
||||
::close(descriptor);
|
||||
release_descriptor(descriptor, true);
|
||||
if (got < 0)
|
||||
gold_error(_("/dev/urandom: read failed: %s"), strerror(errno));
|
||||
else if (static_cast<size_t>(got) != uuidsz)
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue