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
This commit is contained in:
Ed Maste 2021-05-25 14:25:18 -04:00
parent df8437a93d
commit 3f2508b7f3

View File

@ -291,7 +291,7 @@ convert_to_feature_val(char *feature_str, uint32_t *feature_val)
static bool static bool
edit_file_features(Elf *elf, int phcount, int fd, char *val, bool endian_swap) edit_file_features(Elf *elf, int phcount, int fd, char *val, bool endian_swap)
{ {
uint32_t features; uint32_t features, prev_features;
uint64_t off; uint64_t off;
if (!get_file_features(elf, phcount, fd, &features, &off, if (!get_file_features(elf, phcount, fd, &features, &off,
@ -300,8 +300,12 @@ edit_file_features(Elf *elf, int phcount, int fd, char *val, bool endian_swap)
return (false); return (false);
} }
prev_features = features;
if (!convert_to_feature_val(val, &features)) if (!convert_to_feature_val(val, &features))
return (false); return (false);
/* Avoid touching file if no change. */
if (features == prev_features)
return (true);
if (endian_swap) if (endian_swap)
features = bswap32(features); features = bswap32(features);