From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mail-pl1-f173.google.com (mail-pl1-f173.google.com [209.85.214.173]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 5E0C71E86E for ; Mon, 26 Jan 2026 03:10:46 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.214.173 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1769397047; cv=none; b=nYvPjNfGEzaRaAplp2WEnZaokp/4uOFVHJjW2VWgr0MzPyKhI1k5koMmD91vS5Hoa57UkgV0K+opKgOJdn2o+voRHXgvDqZ0ph1qktBjJePVK1ObcVBX6yAbk7gYwFl28oraUo/DS0Pc3b7xbRPKafnw1ePCsxqr2RaJVtmLEuY= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1769397047; c=relaxed/simple; bh=Xk4EHKiRFEZf+K9t1c2as0thQXp77jzW6L8hOkzSME8=; h=From:To:Cc:Subject:Date:Message-ID:MIME-Version; b=Xm7oJQ/xyQid2IEWjoPuyfiKLy2G50HfOVMyfO0s/OKQZ5YzQ8YmL3+xzEmrW293/U0K42IgJfHjEfthnu9L/KkXAoeHTjs8dozQ1Gx0Y8aZNMhpSb2ShT2yBIGr76hed/THYzvP5BwvBesQ/CvL00zUMr/tRs1sACq6NDBG7WU= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=eCYbCmar; arc=none smtp.client-ip=209.85.214.173 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="eCYbCmar" Received: by mail-pl1-f173.google.com with SMTP id d9443c01a7336-2a07fac8aa1so30256875ad.1 for ; Sun, 25 Jan 2026 19:10:46 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1769397045; x=1770001845; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:from:to:cc:subject:date:message-id:reply-to; bh=Tv2cmFZ1z/hQmJlnkTKTkN1BUkDoSvCjHaIQfZjI3UY=; b=eCYbCmarqL9q4kHR5tAHvXk5bOrxzo8n2CllQTP0T4e2frBe0le5nWSOyvWfpF37g4 rH46wBP6rpLUh/e30VRCckkLToACUjrwx4e5Kxn0ozephPZVwNekbJmkkgNf6W1vf0bF UQvISQUcV0sL5R0qg67HZVycmSJmgM8G8wsouMa+1bTOEOp7ZklUSKkdGdr7fPdac7Rv it16aOJ4FM7fk12DQoa77ACtLT/p7/H3bVVozf5pXQHO6hfIarTDZ2wZuqa32tkbPFBy 7Oj/HbuqrBeFo+0BfVgl/gaJAkFX2/5X8y4UYRtSm9VXw4SfhG6GlzH/ElFiwtfgLFw3 zArA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1769397045; x=1770001845; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:x-gm-gg:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to; bh=Tv2cmFZ1z/hQmJlnkTKTkN1BUkDoSvCjHaIQfZjI3UY=; b=n2cAo/XcQzaZeEC9gvcO33vAeaaIeVIguWGDeRxYubXVzkEjDddpze5K4zJa1d2Jbs 9u4PqnR2MxSXbj5gmiLWDlouxYD0pBWCA0otQ0dTXigSqC8kJl+P40C7s5Gj2x8TdCGX Bp9O4nJz1IHKnxNZLEwI+TK4Z2uE0iwdWukyuOBpU9Sdu5dbO+9dbSUDhuU1mQhDi+o/ e1X8z4BVN/88EgZNzXFi1MixY5u3QaEaX1eenrq6N4DIERrmk0+hTIS8c8Di/bkL9vMK /3nQsJ2DMDatfAkN2LBAZlVcGdUnHGHKgwXra84SeONtTHbHhNfDVvATomairfJ7fSVz v9gQ== X-Forwarded-Encrypted: i=1; AJvYcCV92En6K2c21C+V/b5vDohycmn4XF3t7VxM97WUe/34Wddj33obcIqnQSqQx/nDgXdzZwa950uwyajQoqA=@vger.kernel.org X-Gm-Message-State: AOJu0Yzi8c9QxtTMMATkP2wPXm5Cm8Z5rbCzUCXMxFnnt0OL2IbKub+n ZvVskIydJOo3Y0YlwaVw3nn6MmOrMAjJ8hEcIYy+0Lp2BV9hpbEmmTpw7mJWZ6eBBdTLbw== X-Gm-Gg: AZuq6aLAl6ctF0EFgb/C8ljcpbnP/m0ly4pu+nCSzRhympZxjkPR+xy9QSBeMmooYjc eh//jQ6rbGQrmJxB9QDJQICpcmhppCIyRKnSE8F8Yyv44gdnsRrxQF4ubf+aI/ByJuwlf6Fza6h jg/y2Zu5oK5OBmeFc5AOjAlsHdLm8aX+qhu3Y2kdC4zNn7b9vG/OMjf/QoX08LJttFqf5QMoRRq dSse5Tt27TlqQPAwP0YjpEW+NXkEeVoTEcYJfXjZynMPRd+5IihhB3FTe3tDyvMdEhcJGG+3I1Q jFjGlwCJCbSDnoEFV0hYlSn/aDCURczg+NnTe16PC1k1vsp9V9Z4DMPnmWPrDCx3MQAqjmTQGmc MXzebzqoQF90luozx/D6iguCjS9XMgPZHjgTvNW+IQnQsUhHXv3yCANCoU4o+Og+ey0zSDPxhZh M/Z+Dj8Q87unn4DDfHMGuTnrLfTiSFYVtNEudoRnCuM2MlDr6nJPjIPpsgQC85qb7Q5wvo2rcON dK5PmhLYmov6tZ2IyuMr22RPorN0pg= X-Received: by 2002:a17:903:38cc:b0:29e:9387:f2b9 with SMTP id d9443c01a7336-2a845237dbfmr29053715ad.24.1769397045337; Sun, 25 Jan 2026 19:10:45 -0800 (PST) Received: from LAPTOP-UKI113GK.localdomain ([61.141.65.103]) by smtp.gmail.com with ESMTPSA id d2e1a72fcca58-82318646cc4sm7952920b3a.7.2026.01.25.19.10.43 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 25 Jan 2026 19:10:45 -0800 (PST) From: "licheng.li" To: Willy Tarreau Cc: =?UTF-8?q?Thomas=20Wei=C3=9Fschuh?= , linux-kernel@vger.kernel.org, im.lechain@gmail.com Subject: [PATCH 1/2] tools/nolibc: support left-aligned printing in printf Date: Mon, 26 Jan 2026 11:10:37 +0800 Message-ID: <20260126031038.35387-1-im.lechain@gmail.com> X-Mailer: git-send-email 2.52.0 Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: 8bit From: Cheng Li Currently, __nolibc_printf() in nolibc does not support the '-' flag for left alignment. This limits the ability to format tabular output nicely. This patch adds support for the '-' flag. The implementation is kept minimal to minimize the binary size impact. Measuring the nolibc-test binary on x86_64 shows a small increase in the text section: text data bss dec hex filename 43552 248 112 43912 ab88 nolibc-test (before) 43677 248 112 44037 ac05 nolibc-test (after) The net increase is 125 bytes. Signed-off-by: Cheng Li --- tools/include/nolibc/stdio.h | 18 +++++++++++++++--- 1 file changed, 15 insertions(+), 3 deletions(-) diff --git a/tools/include/nolibc/stdio.h b/tools/include/nolibc/stdio.h index 1f16dab2ac88..b90b59237bda 100644 --- a/tools/include/nolibc/stdio.h +++ b/tools/include/nolibc/stdio.h @@ -250,7 +250,7 @@ typedef int (*__nolibc_printf_cb)(intptr_t state, const char *buf, size_t size); static __attribute__((unused, format(printf, 4, 0))) int __nolibc_printf(__nolibc_printf_cb cb, intptr_t state, size_t n, const char *fmt, va_list args) { - char escape, lpref, c; + char escape, lpref, padc, c; unsigned long long v; unsigned int written, width; size_t len, ofs, w; @@ -261,11 +261,17 @@ int __nolibc_printf(__nolibc_printf_cb cb, intptr_t state, size_t n, const char while (1) { c = fmt[ofs++]; width = 0; + padc = ' '; if (escape) { /* we're in an escape sequence, ofs == 1 */ escape = 0; + if (c == '-' || c == '0') { + padc = c; + c = fmt[ofs++]; + } + /* width */ while (c >= '0' && c <= '9') { width *= 10; @@ -358,13 +364,19 @@ int __nolibc_printf(__nolibc_printf_cb cb, intptr_t state, size_t n, const char if (n) { w = len < n ? len : n; n -= w; - while (width-- > w) { - if (cb(state, " ", 1) != 0) + while (padc != '-' && width > w) { + if (cb(state, &padc, 1) != 0) return -1; written += 1; + width--; } if (cb(state, outstr, w) != 0) return -1; + while (width-- > w) { + if (cb(state, " ", 1) != 0) + return -1; + written += 1; + } } written += len; -- 2.52.0