From nobody Sun Feb 8 13:08:47 2026 Received: from mail-wr1-f46.google.com (mail-wr1-f46.google.com [209.85.221.46]) (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 86F053161B7 for ; Tue, 3 Feb 2026 10:30:15 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.221.46 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1770114617; cv=none; b=Ii9+0ZEr2f/jEMy/1td4y99fHKdv/oEsr2AmGtV4oeoYen698qiwRW7XM6tm+da+ForEs1BFZlNRScxkREFjf5yddjJLkBWS7FCHiDamdhYZSqUnmog1qsduPrR0U+wTsh+cGEuRh0AXE0tNMCyIwzNJWSyBV0up2QIs7uGle+I= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1770114617; c=relaxed/simple; bh=g8FrJ6NJb6AjcSuOiYC6P1trEyYgSXg8wpn+F0rtBWs=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=q7g7lGUE40aSVoI2Lo5qlkl65pRZ5V8Iw3vPoPEyz/HiKbeAAWsp0XIMYL5GEGjwJTp1J155Y/VJAJnKC9q193asn5Jz+H0XJs5kuAwlwg1mBKKgFf/R8xggxPEnqB8tYySM0Lm9mLwL3GKuFvu2ZrP58iTLddjnwKoCs+GyrJM= 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=O1062QKa; arc=none smtp.client-ip=209.85.221.46 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="O1062QKa" Received: by mail-wr1-f46.google.com with SMTP id ffacd0b85a97d-435a11957f6so4237404f8f.0 for ; Tue, 03 Feb 2026 02:30:15 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1770114614; x=1770719414; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=dYUj2waGe1QmChrS+uH0vzofAtMYKXD/E3j6y4nI4Z8=; b=O1062QKaq+v1CaMOTxuPv524NeIPAgIcTxep9JfwqaOMCFqQSqoOAViusCNGJdV3bB 5azUN+gNwXGrG4XhJ/pnaina4g77V+PpnMMTH2uPrTKQX1vx7l164Oc3pvKI4leWlnmt VNgke23DsI2BdE7qK5dO0AvlNPds0ymmTOckwWoCsr6oXANYMrIh34fwoDae6Vy81j+v ny4p+h8TLH9O38My5fUZd9TYAX6qr3T296kPVXiGjkCNit8xfPPnhvUtM/QTUzoJ7qDe dqBx0On9eqh3SpV8h/4NzWIOAiMuY+nIXirfhnR/B9SvS+maVLbWJRvavMA1Jk7pD3z5 P48w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1770114614; x=1770719414; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=dYUj2waGe1QmChrS+uH0vzofAtMYKXD/E3j6y4nI4Z8=; b=NWPaSyoXN6HD+ahkZJOlv7zYHWqUOzCY+ZLlgFmg/blJGcc34TntHXNjVaqym+Ejhy 6VELNaOc84aUaeSMtYJZWxiGc7n4fVr1O4KzR2HmHw7hAFXaHy9rs7ZqZ0oGYrXMjRcO cUqQCXhR3HUg3hYDHsuxvsRFDAdCaZJN4XCg4aeh6hsKCuSkFYocmdqBcMdQECUY0RTF LXqEPT9esQ5mArBoNNCYnogiSQzRAKO2wyVBZNY0atlQNEFAKFYErdLtu8hXZ5bnVBZE xky8zMW7cndBAcuWHAoNLBxGG6MhNc/HXgZg8au9NoVdjeeteLmiavP+dScb1k6Cvpla RxoA== X-Forwarded-Encrypted: i=1; AJvYcCXySz1iRzl8DXdTtF3I13TtQwgDIacSG3DcPzwOejnNCTaanTv8P1Retoa5AqiQgt474nW3mWcf8k/5wh0=@vger.kernel.org X-Gm-Message-State: AOJu0YwKbrF5KQ2CS4CMmvfTfsssZyI6YtD073XY16wcH9nnCrxW2a9w 3uFZ3D+uCDrrxhhasts8dbLOXEItwTBqqQ1Rrrzs2IBJ7Ag4ge8HJl87 X-Gm-Gg: AZuq6aLzOQ8aWC/frpcN0eeqegJ19rd1irb1DlPkOPsMxBlf3FYUY27Xd5MTW6+12mp UWyoIgsAP9g/NJN+ksvnynLjXDjHOf55UE+ZaCSB1zk9B1l7vVWGpIT5mmm7LLH90p+4kFgKHbV rtVbalDBv+4fgqHKETeXrwBSTJ169w+F3LY1YZzbtkf/gLgiY3zk9TPfBRAdzMKiDN32FJ/KI57 FlmfKmpo/w17Nh3gbD2E08EVqDUR1804A6D5AALDOeBjJva0dQznfU5Pp4/NMKGz6BUu79KcvsZ pYe4ZKalppZz/+vCuKTMyoZBsvJaRp8xgNwedoG1zF13uS96YfiqDX/1QOft9Nt2NlMHLHly/6O GkgJNwOPV3rWde3S9XjBMg9cg4RBgOVZ1CldiUjNJPvHNalAUW4UY8IrNfFUn0/Yv82EMabFze6 iGtBh6jpefprubtCbziX3FLOSr49mXz3EEEPfZu9h4nKDh53jN/I9rDM6KZFm/YAqPOsyI/RRH3 fFQvC0MEG4= X-Received: by 2002:a05:6000:2c01:b0:435:a0ca:bdce with SMTP id ffacd0b85a97d-435f3aba7ecmr22579837f8f.63.1770114613615; Tue, 03 Feb 2026 02:30:13 -0800 (PST) Received: from snowdrop.snailnet.com (82-69-66-36.dsl.in-addr.zen.co.uk. [82.69.66.36]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-435e10edf62sm55940729f8f.13.2026.02.03.02.30.13 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 03 Feb 2026 02:30:13 -0800 (PST) From: david.laight.linux@gmail.com To: Willy Tarreau , =?UTF-8?q?Thomas=20Wei=C3=9Fschuh?= , linux-kernel@vger.kernel.org, Cheng Li Cc: David Laight Subject: [PATCH next 07/12] tools/nolibc/printf: Prepend the sign after a numeric conversion Date: Tue, 3 Feb 2026 10:29:55 +0000 Message-Id: <20260203103000.20206-8-david.laight.linux@gmail.com> X-Mailer: git-send-email 2.39.5 In-Reply-To: <20260203103000.20206-1-david.laight.linux@gmail.com> References: <20260203103000.20206-1-david.laight.linux@gmail.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" From: David Laight Needed so that zero can be correctly padded. Add support for the "+ " modifiers for non-negative integers. Signed-off-by: David Laight --- tools/include/nolibc/stdio.h | 37 ++++++++++++++++++++++++------------ 1 file changed, 25 insertions(+), 12 deletions(-) diff --git a/tools/include/nolibc/stdio.h b/tools/include/nolibc/stdio.h index 1ce4d357a802..e4792625c1ec 100644 --- a/tools/include/nolibc/stdio.h +++ b/tools/include/nolibc/stdio.h @@ -241,7 +241,7 @@ char *fgets(char *s, int size, FILE *stream) =20 =20 /* simple printf(). It supports the following formats: - * - %[-][width][{l,t,z,ll,L,j,q}]{d,u,c,x,p,s,m} + * - %[-+ ][width][{l,t,z,ll,L,j,q}]{d,u,c,x,p,s,m} * - %% * - invalid formats are copied to the output buffer */ @@ -254,7 +254,7 @@ int __nolibc_printf(__nolibc_printf_cb cb, void *state,= const char *fmt, va_list char c; int len, written, width; unsigned int flags; - char tmpbuf[21]; + char tmpbuf[64]; const char *outstr; =20 written =3D 0; @@ -277,7 +277,7 @@ int __nolibc_printf(__nolibc_printf_cb cb, void *state,= const char *fmt, va_list =20 /* Flag characters */ for (; c >=3D 0x20 && c <=3D 0x3f; c =3D *fmt++) { - if ((__PF_FLAG(c) & (__PF_FLAG('-'))) =3D=3D 0) + if ((__PF_FLAG(c) & (__PF_FLAG('-') | __PF_FLAG(' ') | __PF_FLAG('+'))= ) =3D=3D 0) break; flags |=3D __PF_FLAG(c); } @@ -307,7 +307,8 @@ int __nolibc_printf(__nolibc_printf_cb cb, void *state,= const char *fmt, va_list if (c =3D=3D 'c' || c =3D=3D 'd' || c =3D=3D 'u' || c =3D=3D 'x' || c = =3D=3D 'p') { unsigned long long v; long long signed_v; - char *out =3D tmpbuf; + char *out =3D tmpbuf + 32; + int sign =3D 0; =20 if ((c =3D=3D 'p') || (flags & (__PF_FLAG('l') | __PF_FLAG('t') | __PF= _FLAG('z')))) { v =3D va_arg(args, unsigned long); @@ -322,24 +323,35 @@ int __nolibc_printf(__nolibc_printf_cb cb, void *stat= e, const char *fmt, va_list =20 switch (c) { case 'c': - out[0] =3D v; - out[1] =3D 0; - break; + tmpbuf[0] =3D v; + len =3D 1; + outstr =3D tmpbuf; + goto do_output; case 'd': - i64toa_r(signed_v, out); - break; + if (signed_v < 0) { + sign =3D '-'; + v =3D -(signed_v + 1); + v++; + } else if (flags & __PF_FLAG('+')) { + sign =3D '+'; + } else if (flags & __PF_FLAG(' ')) { + sign =3D ' '; + } + __nolibc_fallthrough; case 'u': u64toa_r(v, out); break; case 'p': - *(out++) =3D '0'; - *(out++) =3D 'x'; + sign =3D 'x' | '0' << 8; __nolibc_fallthrough; default: /* 'x' and 'p' above */ u64toh_r(v, out); break; } - outstr =3D tmpbuf; + for (; sign; sign >>=3D 8) { + *--out =3D sign; + } + outstr =3D out; } else if (c =3D=3D 's') { outstr =3D va_arg(args, char *); @@ -365,6 +377,7 @@ int __nolibc_printf(__nolibc_printf_cb cb, void *state,= const char *fmt, va_list len =3D strlen(outstr); } =20 +do_output: written +=3D len; =20 /* An OPTIMIZER_HIDE_VAR() seems to stop gcc back-merging = this --=20 2.39.5