aboutsummaryrefslogtreecommitdiff
path: root/usr.bin/elfctl
diff options
context:
space:
mode:
authorEd Maste <emaste@FreeBSD.org>2021-05-25 18:25:18 +0000
committerEd Maste <emaste@FreeBSD.org>2021-06-02 02:08:54 +0000
commit5ceb90aa667afbd0941f045073d54aea35d40f1b (patch)
treed6e3422151ee9859074f1bf1024a235e6f95e3ed /usr.bin/elfctl
parentae23d302479c5276e4e0a36e6ba1e882dc6e9899 (diff)
downloadsrc-5ceb90aa667afbd0941f045073d54aea35d40f1b.tar.gz
src-5ceb90aa667afbd0941f045073d54aea35d40f1b.zip
elfctl: avoid touching file if no change made
Suggested by: brooks Reviewed by: brooks, markj MFC after: 1 week Sponsored by: The FreeBSD Foundation Differential Revision: https://reviews.freebsd.org/D30452 (cherry picked from commit 3f2508b7f3855102abed99b846e30e728ba3d04d)
Diffstat (limited to 'usr.bin/elfctl')
-rw-r--r--usr.bin/elfctl/elfctl.c6
1 files changed, 5 insertions, 1 deletions
diff --git a/usr.bin/elfctl/elfctl.c b/usr.bin/elfctl/elfctl.c
index bcdd1be394a9..04719b487613 100644
--- a/usr.bin/elfctl/elfctl.c
+++ b/usr.bin/elfctl/elfctl.c
@@ -288,7 +288,7 @@ convert_to_feature_val(char *feature_str, uint32_t *feature_val)
static bool
edit_file_features(Elf *elf, int phcount, int fd, char *val)
{
- uint32_t features;
+ uint32_t features, prev_features;
uint64_t off;
if (!get_file_features(elf, phcount, fd, &features, &off)) {
@@ -296,8 +296,12 @@ edit_file_features(Elf *elf, int phcount, int fd, char *val)
return (false);
}
+ prev_features = features;
if (!convert_to_feature_val(val, &features))
return (false);
+ /* Avoid touching file if no change. */
+ if (features == prev_features)
+ return (true);
if (lseek(fd, off, SEEK_SET) == -1 ||
write(fd, &features, sizeof(features)) <