Hi Ahelenia, On 5/19/21 12:38 PM, наб wrote:
No implementation or spec requires *n to be 0 to allocate a new buffer: * musl checks for !*lineptr (and sets *n=0 for later allocations) * glibc checks for !*lineptr || !*n (but only because it allocates early) * NetBSD checks for !*lineptr (and sets *n=0 for later allocations) (but specifies *n => mlen(*lineptr) >= *n as a precondition, to which this appears to be an exception) * FreeBSD checks for !*lineptr and sets *n=0 (and specifies !*lineptr as sufficient) * Lastly, POSIX.1-2017 specifies: > If *n is non-zero, the application shall ensure that *lineptr > either points to an object of size at least *n bytes, > or is a null pointer. The new wording matches POSIX, even if it arrives at the point slightly differently Signed-off-by: Ahelenia Ziemiańska <nabijaczleweli@xxxxxxxxxxxxxxxxxx>
Patch applied, Thanks. Cheers, Alex
--- I seem to've blundered actually adding the page update in v1, sorry! man3/getline.3 | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/man3/getline.3 b/man3/getline.3 index a32d7e770..6641ecc35 100644 --- a/man3/getline.3 +++ b/man3/getline.3 @@ -59,9 +59,7 @@ one was found. .PP If .I "*lineptr" -is set to NULL and -.I *n -is set 0 before the call, then +is set to NULL before the call, then .BR getline () will allocate a buffer for storing the line. This buffer should be freed by the user program
-- Alejandro Colomar Linux man-pages comaintainer; https://www.kernel.org/doc/man-pages/ Senior SW Engineer; http://www.alejandro-colomar.es/