From 8b97c4f8754f420fd1bd5051d300a7eca09e514d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=BD=D0=B0=D0=B1?= Date: Sat, 12 Jun 2021 10:27:39 +0200 Subject: [PATCH] getline.3: !*lineptr is sufficient MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 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 Signed-off-by: Alejandro Colomar Signed-off-by: Michael Kerrisk --- 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