[PATCH 2/2] Simplify generation of UTF-8 output strings, making the code more readable.
Andrew C Aitchison
werdna@aitchison.me.uk
Tue Sep 9 11:04:36 GMT 2025
---
binutils/nm.c | 13 +++++++------
binutils/objdump.c | 13 +++++++------
binutils/readelf.c | 13 +++++++------
3 files changed, 21 insertions(+), 18 deletions(-)
diff --git a/binutils/nm.c b/binutils/nm.c
index 831f348127b..3c6fad017ee 100644
--- a/binutils/nm.c
+++ b/binutils/nm.c
@@ -552,15 +552,16 @@ display_utf8 (const unsigned char * in, char * out, unsigned int * consumed)
switch (nchars)
{
case 2:
- out += sprintf (out, "\\u%02x%02x",
- ((in[0] & 0x1c) >> 2),
- ((in[0] & 0x03) << 6) | (in[1] & 0x3f));
+ out += sprintf (out, "\\u%04x",
+ ((in[0] & 0x1f) << 6) |
+ ((in[1] & 0x3f)) );
break;
case 3:
- out += sprintf (out, "\\u%02x%02x",
- ((in[0] & 0x0f) << 4) | ((in[1] & 0x3c) >> 2),
- ((in[1] & 0x03) << 6) | ((in[2] & 0x3f)));
+ out += sprintf (out, "\\u%04x",
+ ((in[0] & 0x0f) << 12) |
+ ((in[1] & 0x3f) << 6) |
+ ((in[2] & 0x3f)) );
break;
case 4:
diff --git a/binutils/objdump.c b/binutils/objdump.c
index 7fc7b6fb86d..0650277c690 100644
--- a/binutils/objdump.c
+++ b/binutils/objdump.c
@@ -646,15 +646,16 @@ display_utf8 (const unsigned char * in, char * out, unsigned int * consumed)
switch (nchars)
{
case 2:
- out += sprintf (out, "\\u%02x%02x",
- ((in[0] & 0x1c) >> 2),
- ((in[0] & 0x03) << 6) | (in[1] & 0x3f));
+ out += sprintf (out, "\\u%04x",
+ ((in[0] & 0x1f) << 6) |
+ ((in[1] & 0x3f)) );
break;
case 3:
- out += sprintf (out, "\\u%02x%02x",
- ((in[0] & 0x0f) << 4) | ((in[1] & 0x3c) >> 2),
- ((in[1] & 0x03) << 6) | ((in[2] & 0x3f)));
+ out += sprintf (out, "\\u%04x",
+ ((in[0] & 0x0f) << 12) |
+ ((in[1] & 0x3f) << 6) |
+ ((in[2] & 0x3f)) );
break;
case 4:
diff --git a/binutils/readelf.c b/binutils/readelf.c
index 2ed40f073fb..4f774d8df01 100644
--- a/binutils/readelf.c
+++ b/binutils/readelf.c
@@ -833,16 +833,17 @@ print_symbol_name (signed int width, const char * symbol)
case 2:
if (width_remaining < 6)
break;
- printf ("\\u%02x%02x",
- (bytes[0] & 0x1c) >> 2,
- ((bytes[0] & 0x03) << 6) | (bytes[1] & 0x3f));
+ printf ("\\u%04x",
+ ((bytes[0] & 0x1f) << 6) |
+ ((bytes[1] & 0x3f)) );
break;
case 3:
if (width_remaining < 6)
break;
- printf ("\\u%02x%02x",
- ((bytes[0] & 0x0f) << 4) | ((bytes[1] & 0x3c) >> 2),
- ((bytes[1] & 0x03) << 6) | (bytes[2] & 0x3f));
+ printf ("\\u%04x",
+ ((bytes[0] & 0x0f) << 12) |
+ ((bytes[1] & 0x3f) << 6) |
+ ((bytes[2] & 0x3f)) );
break;
case 4:
if (width_remaining < 8)
--
2.48.1
More information about the Binutils
mailing list