From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mta1.formilux.org (mta1.formilux.org [51.159.59.229]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 5E9D33876A4 for ; Sat, 7 Mar 2026 10:30:16 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=51.159.59.229 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1772879418; cv=none; b=PF//uSrlZ/WX85QCDD8taKfrQaj5NSKnsIZijNFuHYkaRji14zxlGm9w3kBa/772Zp81+tYT2HyVbzc0xZnDXyRq47tXPrS0r0Q0OveFYhDg/xDlq5wMQ/dE4AC0UfpEVuZnKKb3QGTYCkHimv4MHpAhu1TjYhW8zAJU20pa1Y8= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1772879418; c=relaxed/simple; bh=zOnNBvrkUxcl//MNkiugzooXe8d4oL3Dk5kR7o6jiRU=; h=Date:From:To:Cc:Subject:Message-ID:References:MIME-Version: Content-Type:Content-Disposition:In-Reply-To; b=BsXpLNU3VFZ0y9er51JB4aCFSZLVD5aCu5Wle/BYzs6snWdQNgi7YeIuq0JIldsjr4wXPX0l1wFGtfQQ4M+KCXvKJKf3dTT0tM+HmcGsd7LzkIHzJ+JSFQ4GfbM6Cjl03BKUutw/xNkJHPzWcvMBV4GlWPC5H1n0NFSaLyHg5SI= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=1wt.eu; spf=pass smtp.mailfrom=1wt.eu; dkim=pass (1024-bit key) header.d=1wt.eu header.i=@1wt.eu header.b=kWOKeOGW; arc=none smtp.client-ip=51.159.59.229 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=1wt.eu Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=1wt.eu Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=1wt.eu header.i=@1wt.eu header.b="kWOKeOGW" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1wt.eu; s=mail; t=1772879414; bh=GoQtfubIZx2BO4wNCzGY3SSc1qH35TrqIzYZ/s8XGw8=; h=From:Message-ID:From; b=kWOKeOGWk3uGVKvaZv0YCLcd2mvrsVLlifCdmykkBd0obGUd3ywlUqhTOqHKKiSb0 uXz0oCNY0bNNMI/hWuYDV1vsXqsNU7deCwlmUPkpvcfWk+SQ8Wm5CMgK7MkE9BFnfT zGiYzxWT0g4N/W91AEFp+rvTto/XTNQ+qKf1juMk= Received: from 1wt.eu (ded1.1wt.eu [163.172.96.212]) by mta1.formilux.org (Postfix) with ESMTP id B9E4AC0A05; Sat, 07 Mar 2026 11:30:14 +0100 (CET) Date: Sat, 7 Mar 2026 11:30:06 +0100 From: Willy Tarreau To: david.laight.linux@gmail.com Cc: Thomas =?iso-8859-1?Q?Wei=DFschuh?= , linux-kernel@vger.kernel.org, Cheng Li Subject: Re: [PATCH v4 next 13/23] tools/nolibc/printf: Use goto and reduce indentation Message-ID: References: <20260302101815.3043-1-david.laight.linux@gmail.com> <20260302101815.3043-14-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-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20260302101815.3043-14-david.laight.linux@gmail.com> On Mon, Mar 02, 2026 at 10:18:05AM +0000, david.laight.linux@gmail.com wrote: > From: David Laight > > Upcoming changes will need to use goto to jump to the code that > outputs characters. > Use 'goto do_output' to output a known number of characters. > Use 'goto do_strlen_output' to output a '\0' terminated string. > > Removes a level of indentation from the format processing code. Nice! I, too, prefer this more explicit way of transitionning between states. For others, the patch is best reviewed with "git show -b" or "git diff -b" after applying it (67 lines instead of 200). David, when changing code indent like this, I often like to suggest doing this in the commit messages. I'm saying this in case there's a further respin. > Signed-off-by: David Laight Acked-by: Willy Tarreau Willy > --- > > For v4: > - Output a single '%' from the format string. > > New patch for v3. > Makes the final code look better and there is less to change if done early. > > tools/include/nolibc/stdio.h | 170 +++++++++++++++++++---------------- > 1 file changed, 92 insertions(+), 78 deletions(-) > > diff --git a/tools/include/nolibc/stdio.h b/tools/include/nolibc/stdio.h > index e0b7ff537b14..13fe6c4d7f58 100644 > --- a/tools/include/nolibc/stdio.h > +++ b/tools/include/nolibc/stdio.h > @@ -329,103 +329,117 @@ int __nolibc_printf(__nolibc_printf_cb cb, void *state, const char *fmt, va_list > fmt++; > /* Output characters from the format string. */ > len = fmt - outstr; > - } else { > - /* we're in a format sequence */ > + goto do_output; > + } > > - ch = *fmt++; > + /* we're in a format sequence */ > > - /* width */ > - while (ch >= '0' && ch <= '9') { > - width *= 10; > - width += ch - '0'; > + ch = *fmt++; > > - ch = *fmt++; > - } > + /* width */ > + while (ch >= '0' && ch <= '9') { > + width *= 10; > + width += ch - '0'; > + > + ch = *fmt++; > + } > > - /* Length modifiers */ > + /* Length modifiers */ > + if (ch == 'l') { > + lpref = 1; > + ch = *fmt++; > if (ch == 'l') { > - lpref = 1; > - ch = *fmt++; > - if (ch == 'l') { > - lpref = 2; > - ch = *fmt++; > - } > - } else if (ch == 'j') { > - /* intmax_t is long long */ > lpref = 2; > ch = *fmt++; > - } else { > - lpref = 0; > } > + } else if (ch == 'j') { > + /* intmax_t is long long */ > + lpref = 2; > + ch = *fmt++; > + } else { > + lpref = 0; > + } > > - if (ch == 'c' || ch == 'd' || ch == 'u' || ch == 'x' || ch == 'p') { > - char *out = outbuf; > + if (ch == 'c' || ch == 'd' || ch == 'u' || ch == 'x' || ch == 'p') { > + char *out = outbuf; > > - if (ch == 'p') > + if (ch == 'p') > + v = va_arg(args, unsigned long); > + else if (lpref) { > + if (lpref > 1) > + v = va_arg(args, unsigned long long); > + else > v = va_arg(args, unsigned long); > - else if (lpref) { > - if (lpref > 1) > - v = va_arg(args, unsigned long long); > - else > - v = va_arg(args, unsigned long); > - } else > - v = va_arg(args, unsigned int); > - > - if (ch == 'd') { > - /* sign-extend the value */ > - if (lpref == 0) > - v = (long long)(int)v; > - else if (lpref == 1) > - v = (long long)(long)v; > - } > + } else > + v = va_arg(args, unsigned int); > > - switch (ch) { > - case 'c': > - out[0] = v; > - out[1] = 0; > - break; > - case 'd': > - i64toa_r(v, out); > - break; > - case 'u': > - u64toa_r(v, out); > - break; > - case 'p': > - *(out++) = '0'; > - *(out++) = 'x'; > - __nolibc_fallthrough; > - default: /* 'x' and 'p' above */ > - u64toh_r(v, out); > - break; > - } > - outstr = outbuf; > + if (ch == 'd') { > + /* sign-extend the value */ > + if (lpref == 0) > + v = (long long)(int)v; > + else if (lpref == 1) > + v = (long long)(long)v; > } > - else if (ch == 's') { > - outstr = va_arg(args, char *); > - if (!outstr) > - outstr="(null)"; > + > + switch (ch) { > + case 'c': > + out[0] = v; > + out[1] = 0; > + break; > + case 'd': > + i64toa_r(v, out); > + break; > + case 'u': > + u64toa_r(v, out); > + break; > + case 'p': > + *(out++) = '0'; > + *(out++) = 'x'; > + __nolibc_fallthrough; > + default: /* 'x' and 'p' above */ > + u64toh_r(v, out); > + break; > } > - else if (ch == 'm') { > + outstr = outbuf; > + goto do_strlen_output; > + } > + > + if (ch == 's') { > + outstr = va_arg(args, char *); > + if (!outstr) > + outstr="(null)"; > + goto do_strlen_output; > + } > + > + if (ch == 'm') { > #ifdef NOLIBC_IGNORE_ERRNO > - outstr = "unknown error"; > + outstr = "unknown error"; > #else > - outstr = strerror(errno); > + outstr = strerror(errno); > #endif /* NOLIBC_IGNORE_ERRNO */ > - } else { > - if (ch != '%') { > - /* Invalid format: back up to output the format characters */ > - fmt = outstr + 1; > - /* and output a '%' now. */ > - } > - /* %% is documented as a 'conversion specifier'. > - * Any flags, precision or length modifier are ignored. > - */ > - width = 0; > - outstr = "%"; > - } > - len = strlen(outstr); > + goto do_strlen_output; > } > > + if (ch != '%') { > + /* Invalid format: back up to output the format characters */ > + fmt = outstr + 1; > + /* and output a '%' now. */ > + } > + /* %% is documented as a 'conversion specifier'. > + * Any flags, precision or length modifier are ignored. > + */ > + len = 1; > + width = 0; > + outstr = fmt - 1; > + goto do_output; > + > +do_strlen_output: > + /* Open coded strlen() (slightly smaller). */ > + for (len = 0;; len++) > + if (!outstr[len]) > + break; > + > +do_output: > written += len; > > width -= len; > -- > 2.39.5