* opncls.c (_maybe_make_executable): New function. Gives execute
permission to an executable bfd that was opened for writing provided that it is a regular file. Replaces common code found in... (bfd_close): here and ... (bfd_close_all_done): here.
This commit is contained in:
parent
d3a44ec61f
commit
8c7d38e8f0
@ -108,6 +108,15 @@
|
||||
(bfd_mach_o_bfd_reloc_type_lookup)
|
||||
(bfd_mach_o_bfd_reloc_name_lookup): Ditto.
|
||||
|
||||
2009-06-11 Eric Paris <eparis@redhat.com>
|
||||
Nick Clifton <nickc@redhat.com>
|
||||
|
||||
* opncls.c (_maybe_make_executable): New function. Gives execute
|
||||
permission to an executable bfd that was opened for writing
|
||||
provided that it is a regular file. Replaces common code found in...
|
||||
(bfd_close): here and ...
|
||||
(bfd_close_all_done): here.
|
||||
|
||||
2009-06-11 Anthony Green <green@moxielogic.com>
|
||||
|
||||
* reloc.c: Add BFD_RELOC_MOXIE_10_PCREL.
|
||||
|
66
bfd/opncls.c
66
bfd/opncls.c
@ -629,6 +629,32 @@ bfd_openw (const char *filename, const char *target)
|
||||
return nbfd;
|
||||
}
|
||||
|
||||
static inline void
|
||||
_maybe_make_executable (bfd * abfd)
|
||||
{
|
||||
/* If the file was open for writing and is now executable,
|
||||
make it so. */
|
||||
if (abfd->direction == write_direction
|
||||
&& abfd->flags & EXEC_P)
|
||||
{
|
||||
struct stat buf;
|
||||
|
||||
if (stat (abfd->filename, &buf) == 0
|
||||
/* Do not attempt to change non-regular files. This is
|
||||
here especially for configure scripts and kernel builds
|
||||
which run tests with "ld [...] -o /dev/null". */
|
||||
&& S_ISREG(buf.st_mode))
|
||||
{
|
||||
unsigned int mask = umask (0);
|
||||
|
||||
umask (mask);
|
||||
chmod (abfd->filename,
|
||||
(0777
|
||||
& (buf.st_mode | ((S_IXUSR | S_IXGRP | S_IXOTH) &~ mask))));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
|
||||
FUNCTION
|
||||
@ -684,24 +710,8 @@ bfd_close (bfd *abfd)
|
||||
else
|
||||
ret = TRUE;
|
||||
|
||||
/* If the file was open for writing and is now executable,
|
||||
make it so. */
|
||||
if (ret
|
||||
&& abfd->direction == write_direction
|
||||
&& abfd->flags & EXEC_P)
|
||||
{
|
||||
struct stat buf;
|
||||
|
||||
if (stat (abfd->filename, &buf) == 0)
|
||||
{
|
||||
unsigned int mask = umask (0);
|
||||
|
||||
umask (mask);
|
||||
chmod (abfd->filename,
|
||||
(0777
|
||||
& (buf.st_mode | ((S_IXUSR | S_IXGRP | S_IXOTH) &~ mask))));
|
||||
}
|
||||
}
|
||||
if (ret)
|
||||
_maybe_make_executable (abfd);
|
||||
|
||||
_bfd_delete_bfd (abfd);
|
||||
|
||||
@ -737,24 +747,8 @@ bfd_close_all_done (bfd *abfd)
|
||||
|
||||
ret = bfd_cache_close (abfd);
|
||||
|
||||
/* If the file was open for writing and is now executable,
|
||||
make it so. */
|
||||
if (ret
|
||||
&& abfd->direction == write_direction
|
||||
&& abfd->flags & EXEC_P)
|
||||
{
|
||||
struct stat buf;
|
||||
|
||||
if (stat (abfd->filename, &buf) == 0)
|
||||
{
|
||||
unsigned int mask = umask (0);
|
||||
|
||||
umask (mask);
|
||||
chmod (abfd->filename,
|
||||
(0777
|
||||
& (buf.st_mode | ((S_IXUSR | S_IXGRP | S_IXOTH) &~ mask))));
|
||||
}
|
||||
}
|
||||
if (ret)
|
||||
_maybe_make_executable (abfd);
|
||||
|
||||
_bfd_delete_bfd (abfd);
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user