[PATCH 1/5] pw_encrypt.c: make i64c() slightly smaller
Rasmus Villemoes
rasmus.villemoes at prevas.dk
Mon Apr 15 12:56:24 UTC 2024
In ASCII at least, '.' is 0x2e, '/' is 0x2f and '0' is 0x30. So the
existing "if (i < 12)" case does the right thing also for i <= 1.
I don't know if busybox supports anything but ASCII environments, but
since we can do it build-time with preprocessor conditionals, we might
as well leave the two cases in the code, which then (along with the
terse comment) also serves as a bit of explanation for what the i<12
case then ends up producing.
function old new delta
i64c 41 24 -17
------------------------------------------------------------------------------
(add/remove: 0/0 grow/shrink: 0/1 up/down: 0/-17) Total: -17 bytes
Signed-off-by: Rasmus Villemoes <rasmus.villemoes at prevas.dk>
---
libbb/pw_encrypt.c | 3 +++
1 file changed, 3 insertions(+)
diff --git a/libbb/pw_encrypt.c b/libbb/pw_encrypt.c
index 3463fd95b..adbdc1d1e 100644
--- a/libbb/pw_encrypt.c
+++ b/libbb/pw_encrypt.c
@@ -20,10 +20,13 @@
static int i64c(int i)
{
i &= 0x3f;
+ /* In ascii, '.', '/' and '0' are consecutive. */
+#if '0' - 2 != '.' || '0' - 1 != '/'
if (i == 0)
return '.';
if (i == 1)
return '/';
+#endif
if (i < 12)
return ('0' - 2 + i);
if (i < 38)
--
2.40.1.1.g1c60b9335d
More information about the busybox
mailing list