mirror of
https://github.com/espressif/binutils-gdb.git
synced 2025-06-21 18:39:34 +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:
@ -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>
|
2021-04-14 H.J. Lu <hongjiu.lu@intel.com>
|
||||||
|
|
||||||
PR binutils/27708
|
PR binutils/27708
|
||||||
|
@ -4864,10 +4864,9 @@ strip_main (int argc, char *argv[])
|
|||||||
output_target, NULL);
|
output_target, NULL);
|
||||||
if (status == 0)
|
if (status == 0)
|
||||||
{
|
{
|
||||||
if (output_file != tmpname)
|
const char *oname = output_file ? output_file : argv[i];
|
||||||
status = smart_rename (tmpname,
|
status = smart_rename (tmpname, oname, copyfd,
|
||||||
output_file ? output_file : argv[i],
|
&statbuf, preserve_dates) != 0;
|
||||||
copyfd, &statbuf, preserve_dates) != 0;
|
|
||||||
if (status == 0)
|
if (status == 0)
|
||||||
status = hold_status;
|
status = hold_status;
|
||||||
}
|
}
|
||||||
@ -5949,9 +5948,9 @@ copy_main (int argc, char *argv[])
|
|||||||
output_target, input_arch);
|
output_target, input_arch);
|
||||||
if (status == 0)
|
if (status == 0)
|
||||||
{
|
{
|
||||||
if (tmpname != output_filename)
|
const char *oname = output_filename ? output_filename : input_filename;
|
||||||
status = smart_rename (tmpname, input_filename, copyfd,
|
status = smart_rename (tmpname, oname, copyfd,
|
||||||
&statbuf, preserve_dates) != 0;
|
&statbuf, preserve_dates) != 0;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@ -129,16 +129,19 @@ int
|
|||||||
smart_rename (const char *from, const char *to, int fromfd,
|
smart_rename (const char *from, const char *to, int fromfd,
|
||||||
struct stat *target_stat, bool preserve_dates)
|
struct stat *target_stat, bool preserve_dates)
|
||||||
{
|
{
|
||||||
int ret;
|
int ret = 0;
|
||||||
|
|
||||||
ret = simple_copy (fromfd, to, target_stat);
|
if (to != from)
|
||||||
if (ret != 0)
|
{
|
||||||
non_fatal (_("unable to copy file '%s'; reason: %s"),
|
ret = simple_copy (fromfd, to, target_stat);
|
||||||
to, strerror (errno));
|
if (ret != 0)
|
||||||
|
non_fatal (_("unable to copy file '%s'; reason: %s"),
|
||||||
|
to, strerror (errno));
|
||||||
|
unlink (from);
|
||||||
|
}
|
||||||
|
|
||||||
if (preserve_dates)
|
if (preserve_dates)
|
||||||
set_times (to, target_stat);
|
set_times (to, target_stat);
|
||||||
unlink (from);
|
|
||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user