From 9684127eb73b26d4d63b8f8aca7139059c467a63 Mon Sep 17 00:00:00 2001 From: Joachim Wiberg Date: Mon, 5 May 2025 07:27:06 +0200 Subject: [PATCH] initctl: refactor runlevel string composition Related to issue #437 Signed-off-by: Joachim Wiberg --- src/initctl.c | 25 +++++++++++-------------- 1 file changed, 11 insertions(+), 14 deletions(-) diff --git a/src/initctl.c b/src/initctl.c index f30c836a..d1698fc4 100644 --- a/src/initctl.c +++ b/src/initctl.c @@ -769,25 +769,23 @@ char *runlevel_string(int currlevel, int levels) { static char lvl[32]; int i = INIT_LEVEL; - int pos = 1; - memset(lvl, 0, sizeof(lvl)); - lvl[0] = '['; + strlcpy(lvl, "[", sizeof(lvl)); do { if (ISSET(levels, i)) { - if (!plain && currlevel == i) - pos = strlcat(lvl, "\e[1m", sizeof(lvl)); - - if (i == INIT_LEVEL) - lvl[pos++] = 'S'; - else - lvl[pos++] = '0' + i; + char l[2] = { '0' + i, 0 }; if (!plain && currlevel == i) - pos = strlcat(lvl, "\e[0m", sizeof(lvl)); + strlcat(lvl, "\e[1m", sizeof(lvl)); + + strlcat(lvl, i == INIT_LEVEL ? "S" : l, sizeof(lvl)); + + + if (!plain && currlevel == i) + strlcat(lvl, "\e[0m", sizeof(lvl)); } else { - lvl[pos++] = '-'; + strlcat(lvl, "-", sizeof(lvl)); } /* XXX: ugly hack to get order right: S0123456789 */ @@ -798,8 +796,7 @@ char *runlevel_string(int currlevel, int levels) } while (i < INIT_LEVEL); - lvl[pos++] = ']'; - lvl[pos] = 0; + strlcat(lvl, "]", sizeof(lvl)); return lvl; }