From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mail-pl1-f175.google.com (mail-pl1-f175.google.com [209.85.214.175]) (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 416612DECCB for ; Fri, 30 Jan 2026 08:37:50 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.214.175 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1769762271; cv=none; b=Z0zzgGDFpLH8cbyer4G8rQSMSD9cflIuTumoQSFeaBY2EgaUoRDkf5pK319WbX4N+vc4hVJkDXVMPAe329j+wjfmSTfup4tvMtM6sxA4p9bva7RjR9e8nCRsyinkM4onPG4gx0lD76iuNz1YAJYACDkcKKhE19kyCwH7+ilCzhQ= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1769762271; c=relaxed/simple; bh=7uEO9bdBg3wD1IUQNoRN4Na4Yv1bOS56JVb+AdimkLA=; h=From:To:Cc:Subject:Date:Message-ID:MIME-Version; b=L/uZZjIDNL3LF+jASDuo6W2yTV0hF/X3fDSXTF972Fcoc15BGJAiD12SfzeX7RRVluid57WaudqlN1ZbrKmPxRujjIn8+RBuxXisDh+4K1g9CdtNQVPhhvy6R5vFYiPxp2CEgiBqaMsnGwsjIpVcBKgvas08PctpSg6MXq2Ymvg= 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=NSdiWM6Q; arc=none smtp.client-ip=209.85.214.175 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="NSdiWM6Q" Received: by mail-pl1-f175.google.com with SMTP id d9443c01a7336-2a09a3bd9c5so12908655ad.3 for ; Fri, 30 Jan 2026 00:37:50 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1769762269; x=1770367069; 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=GcMhAyBWbZuYVDMRhZ5PDTd8ivnJ6VvSQyVrmJCeGt4=; b=NSdiWM6QGeLP4xl9BttfGVogzFehG4J9Fbpmgsuew+/f8J4NVoIOjCn1PZcfj6mOFw Y9flNk+ppU0Vq1wY2xnIxKlmcdBex6rJ8QX7D3wNljOIb6SJa4xgLtwM/v21eNgjj/Zq ag7nvFHa6KGbdvdOAw4HA+3n7qn5Xl7MgKZO61LCBUpIXOFRSIB6cwzcOS3XR32/RP1y Hk1eFD9A7u7mmtSDR9hC+5kvaPfFidcqKQ4ytFFYDHQ0+tu8MVZUEtcTQlepz7cNiTZm H+LyoPB0+3ndOZSuBcdJEFUiiMIHbA0Ga3x0PrhXooQe4gtQ00wfdVSlWK7tEm54YQOd vq7A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1769762269; x=1770367069; 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=GcMhAyBWbZuYVDMRhZ5PDTd8ivnJ6VvSQyVrmJCeGt4=; b=S7HhCYwFdx9SBz1RxwNN4rZApd8KkqatwUokyUI3RIWG/ChlGmX5GoZhTv2lG6TLZP v4HOWo881InrZBD2gdpTqaQ4PB4OYjW7NMIMH0+Ox84/S62iT/JcUStjg/ZIqPr8vyWe T+w0MYyOeTrz4BzuFwaQPeMyf34sAhxVv40SuJdKOm6QIwFY16NmP/yjfIAMwKfFr1j7 KM092m29RslC1C1m4V0aYReXuL9Woqr2haiz0lvUl3FcwJUCzE8rv2lzo4VZtPiENtR3 uYW/9M9+y3m9+/jMAecm/oLBfJpIJsyjMqQqXQj0yYxX4fKj1vO+1WU/OfzrQ7WikyIO uhWA== X-Forwarded-Encrypted: i=1; AJvYcCW5h0C1xNWp0gbiUO5alOMPR0xEz6bocA8zdvJcJl/g4CkCttJDuX8/K0tmHS6r1vPI+8kI2LoSxylm4v0=@vger.kernel.org X-Gm-Message-State: AOJu0Ywt1+w83YOky1x4LxIBd2PSPefwLa+ys2kSWFL2I4nqy7x586Rg A1GIHfDetOBPhQPzlCjt7kQUdUG/UxDtaPbIfRPhwk/BHjixSv2IQK7A X-Gm-Gg: AZuq6aL+hQiCvi9Y7bJvMNXYXB6C0HBkIo/NcANjA6B3TlARYuG0Qz+bC8Zf0DMiyUf wC0AIIvCoy4vcwaKqDkCFba014BmAknp7hPYxjSNKv6ACrv8z+0cnma+lhOTzLnPODnIOnqOp9c eXFlOhIPZxILyDtakW0AQ6mEORFuuZTfz9CZSOrV3JERdGkAE3okHU8gXNmqdIScSk5DEvV81QD sZUDdgIUghG783+oTERo0daqpnmtoyDqeQy6D7tmkmFQzWHkt1MkYV8cUxGHYgj0D9pwBkawySL L23z6R9e3Hxpp9ScewATl6/8QNQ+yU1ptrRC52YqTpaz5a4kB2/Z167gq00xDOfAnVwxFlThrvE c8ir74Rm0B2lJiRlu7nQofCxEeZIoaXS7kpV7NEeaHVJ5HkGXh4uB/ccDTjI6QWZtn5pU+bO5nO Nwal/kEjywaRKorYAH/SEkXezCOd1bYlQPnzMQEOpQsXSb6Xfc+x1MlKGtYz3z1cvwHxssp1bVi jIRIVxEF1t/EKrjZu5qUvKw9841Y9JW X-Received: by 2002:a17:903:1547:b0:2a0:d7f6:e030 with SMTP id d9443c01a7336-2a8d9912e40mr21415295ad.29.1769762269433; Fri, 30 Jan 2026 00:37:49 -0800 (PST) Received: from LAPTOP-UKI113GK ([113.118.132.150]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-2a88b4c3b08sm69082005ad.59.2026.01.30.00.37.47 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 30 Jan 2026 00:37:49 -0800 (PST) From: "licheng.li" To: Willy Tarreau , David Laight Cc: =?UTF-8?q?Thomas=20Wei=C3=9Fschuh?= , linux-kernel@vger.kernel.org, im.lechain@gmail.com Subject: [PATCH 1/2] tools/nolibc: add support zero pad (0) in printf Date: Fri, 30 Jan 2026 16:37:35 +0800 Message-ID: <20260130083737.1123-1-im.lechain@gmail.com> X-Mailer: git-send-email 2.51.0.windows.1 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 This patch correctly implements the '0' flag in __nolibc_printf() to allow zero-padding for numeric and pointer outputs. Thanks to David for pointing out the errors in the previous implementation. The logic ensures that the sign ('-') for negative numbers or the prefix ('0x') for pointers is printed before the padding zeros, adhering to standard printf behavior (e.g., producing "-0005" instead of "000-5"). Examples of the corrected padding logic: - ("%05d", -5) -> "-0005" - ("%05p", ptr) -> "0x00..." Signed-off-by: Cheng Li --- tools/include/nolibc/stdio.h | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/tools/include/nolibc/stdio.h b/tools/include/nolibc/stdio.h index f31b77f61d3b..8a4af259a31b 100644 --- a/tools/include/nolibc/stdio.h +++ b/tools/include/nolibc/stdio.h @@ -267,7 +267,7 @@ int __nolibc_printf(__nolibc_printf_cb cb, intptr_t state, size_t n, const char /* we're in an escape sequence, ofs == 1 */ escape = 0; - if (c == '-') { + if (c == '-' || c == '0') { padc = c; c = fmt[ofs++]; } @@ -364,9 +364,21 @@ int __nolibc_printf(__nolibc_printf_cb cb, intptr_t state, size_t n, const char if (n) { w = len < n ? len : n; n -= w; + if (padc == '0') { + if (outstr[0] == '-') { + if (cb(state, outstr, 1) != 0) + return -1; + outstr++; + } + if (outstr[0] == '0' && outstr[1] == 'x') { + if (cb(state, outstr, 2) != 0) + return -1; + outstr += 2; + } + } while (width > w && padc != '-') { written += 1; - if (cb(state, " ", 1) != 0) + if (cb(state, &padc, 1) != 0) return -1; width--; } -- 2.52.0