Make objcopy -p work when an output file is specified
Alan Modra
amodra@gmail.com
Thu Apr 15 04:48:04 GMT 2021
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.
diff --git a/binutils/objcopy.c b/binutils/objcopy.c
index 3b6a7e50169..946802ebb78 100644
--- a/binutils/objcopy.c
+++ b/binutils/objcopy.c
@@ -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
{
diff --git a/binutils/rename.c b/binutils/rename.c
index 9746ef394e1..969acc12b30 100644
--- a/binutils/rename.c
+++ b/binutils/rename.c
@@ -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;
}
--
Alan Modra
Australia Development Lab, IBM
More information about the Binutils
mailing list