mirror of
https://sourceware.org/git/binutils-gdb.git
synced 2024-11-26 11:33:45 +08:00
Make objcopy -p work when an output file is specified
More fallout from the PR27456 fixes. PR 27456 * rename.c (smart_rename): When TO and FROM are equal, just set file timestamp. * objcopy.c (strip_main, copy_main): Always call smart_rename.
This commit is contained in:
parent
ddfe525f28
commit
d0ecdcddc3
@ -1,3 +1,10 @@
|
||||
2021-04-15 Alan Modra <amodra@gmail.com>
|
||||
|
||||
PR 27456
|
||||
* rename.c (smart_rename): When TO and FROM are equal, just set
|
||||
file timestamp.
|
||||
* objcopy.c (strip_main, copy_main): Always call smart_rename.
|
||||
|
||||
2021-04-14 H.J. Lu <hongjiu.lu@intel.com>
|
||||
|
||||
PR binutils/27708
|
||||
|
@ -4864,10 +4864,9 @@ strip_main (int argc, char *argv[])
|
||||
output_target, NULL);
|
||||
if (status == 0)
|
||||
{
|
||||
if (output_file != tmpname)
|
||||
status = smart_rename (tmpname,
|
||||
output_file ? output_file : argv[i],
|
||||
copyfd, &statbuf, preserve_dates) != 0;
|
||||
const char *oname = output_file ? output_file : argv[i];
|
||||
status = smart_rename (tmpname, oname, copyfd,
|
||||
&statbuf, preserve_dates) != 0;
|
||||
if (status == 0)
|
||||
status = hold_status;
|
||||
}
|
||||
@ -5949,9 +5948,9 @@ copy_main (int argc, char *argv[])
|
||||
output_target, input_arch);
|
||||
if (status == 0)
|
||||
{
|
||||
if (tmpname != output_filename)
|
||||
status = smart_rename (tmpname, input_filename, copyfd,
|
||||
&statbuf, preserve_dates) != 0;
|
||||
const char *oname = output_filename ? output_filename : input_filename;
|
||||
status = smart_rename (tmpname, oname, copyfd,
|
||||
&statbuf, preserve_dates) != 0;
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@ -129,16 +129,19 @@ int
|
||||
smart_rename (const char *from, const char *to, int fromfd,
|
||||
struct stat *target_stat, bool preserve_dates)
|
||||
{
|
||||
int ret;
|
||||
int ret = 0;
|
||||
|
||||
ret = simple_copy (fromfd, to, target_stat);
|
||||
if (ret != 0)
|
||||
non_fatal (_("unable to copy file '%s'; reason: %s"),
|
||||
to, strerror (errno));
|
||||
if (to != from)
|
||||
{
|
||||
ret = simple_copy (fromfd, to, target_stat);
|
||||
if (ret != 0)
|
||||
non_fatal (_("unable to copy file '%s'; reason: %s"),
|
||||
to, strerror (errno));
|
||||
unlink (from);
|
||||
}
|
||||
|
||||
if (preserve_dates)
|
||||
set_times (to, target_stat);
|
||||
unlink (from);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user