Re: [PATCH v2 1/3] lib/vsprintf: Avoid redundant work with 0 size

From: Waiman Long
Date: Tue Feb 01 2022 - 11:02:33 EST


On 2/1/22 02:12, Rasmus Villemoes wrote:
On 31/01/2022 19.48, Waiman Long wrote:
On 1/31/22 05:34, Andy Shevchenko wrote:
Also it seems currently the kernel documentation is not aligned with
the code

   "If @size is == 0 the function returns 0."

It should mention the (theoretical?) possibility of getting negative
value,
if vsnprintf() returns negative value.
AFAICS, the kernel's vsnprintf() function will not return -1.
Even if it did, the "i < size" comparison in vscnprintf() is "int v
size_t", so integer promotion says that even if i were negative, that
comparison would be false, so we wouldn't forward that negative value
anyway.

So in that
sense it is not fully POSIX compliant.
Of course it's not, but not because it doesn't return -1. POSIX just
says to return that in case of an error, and as a matter of QoI, the
kernel's implementation simply can't (and must not) fail. There are
other cases where we don't follow POSIX/C, e.g. in some corner cases
around field length and precision (documented in test_printf.c), and the
non-support of %n (and floating point and handling of wchar_t*), and the
whole %p<> extension etc.

Rasmus

Thanks for the clarification.

Cheers,
Longman