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> --- 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 -- 2.20.1
Attachment:
signature.asc
Description: PGP signature